我们提请您注意我们博客的邀请嘉宾Vladislav Zaitsev( vvzvlad )的文章。 弗拉迪斯拉夫(Vladislav)长期从事“智能家居”主题,并总结了他的经验,他为此类系统的设计提供了以下基本原则。今天,我想与您谈谈特别是智能家居和一般的IoT设备。 但这不是普通的文章:在github上将没有压盖,与制造商的链接,代码段和存储库。 今天,我们将讨论更高层次的内容-组织“智能”系统的
原理 。

继续阅读本文,即表示您同意对以下免责声明感到满意。
实际上免责声明本身- 所有这些要点仅涉及消费物联网系统(请阅读“智能家居”)。 一个人可以在商店购买并安装的产品,而无需专业安装人员/集成商的参与。
- 其中一些原则不适用于工业系统(有其自身的要求和原则),也不适用于操作员与用户分开的系统(例如,由经过专门培训的人员安装和维护的智能家居)。
同样,某些原理不适用于没有单个产品所有者的“怪胎玩具”系统,自制和开源系统。 - 而且,当然,以下内容仅是基于我多年的经验得出的意见。 您有权不同意他。
智能家居是一种系统,可以解决一个人的日常烦恼。 从这里开始遵循第一个也是最基本的原则:
1.智能家居应使生活越来越轻松。
智能家居是生活的系统,而不是极客的玩具。 任何比传统交换机更难使用
1的系统都不是智能家居。
任何新产品均应进行测试,以确保其符合此原则。 如果它不能使生活更轻松,并且您不了解如何使生活更轻松,那么它就不属于智能家居。 您可以尝试将其想象为一个学习系统。
第二个最重要的原则涉及用户如何与系统交互:
2.良好的用户体验比功能更重要。
毫无价值的是一个无法正常使用的出色工具。 功能有限的便捷可靠的设备比“适用于所有场合”的复杂产品更可能成功。
2.1。 方便的界面胜于可定制性。
不明白如何保存一堆函数和一个简单的界面? 您连续推送所有功能,希望用户知道他需要什么? 摆脱专业!
不明白如何将便利和一系列设置结合在一起? 捐赠设置。 任何功能都将比常规开关更酷,但是过多的复杂性将很容易迫使用户返回到该开关。
工作质量也是如此。 仅打开灯的按钮要比亮度调节滑块好,该滑块有时会出现故障:
2.2。 已实现功能的质量比其数量更为重要。
可靠但经过验证的功能要比很多要好,但是它可以以某种方式起作用。
通过进化固定在人类心理中的机制之一是对负面刺激的更积极的反应。 消极因素比积极因素更为重要:错过危险捕食者的方法远比不注意和不吃树上美味的水果要糟糕得多。 如果您的系统没有任何功能,那就不可怕了,只是没有积极的动机。 但是,现有功能(但效果不佳)却是不利的诱因:更容易记住它,并且记住更久。
2.3。 该系统的实施不应降低正常的工作速度。
延迟是不可接受的,因为它们会降低用户体验。 这也是一种消极动机。 如果一个人没有注意到在传统开关的咔嗒声和包含光之间的延迟
2 ,那么他就不会在您的系统中注意到它。
现代铁以很高的速度运转。 在微控制器上达到几十兆赫的频率和每秒至少几十千比特的频率是没有问题的,即使在空中也是如此。 如果您不能在这些条件下创建系统,那么用户不会感到系统运行有任何延迟,请脱离专业!
2.4。 该系统不应破坏用户已经形成的习惯。
您的系统只是人类生命的一小部分。 一个人的寿命最多可以超过系统寿命两次,最坏情况可以超过一个数量级。 您的系统将如期离开,人类的生命将继续。 在这一生中,一个人已经养成了习惯,例如习惯于选择灯光的亮度,开关的位置,如何方便地打开灯和控制家里的气候。
您不能强行改变这些习惯。 有可能提供。 强制-这是不可能的。
您不能告诉用户“现在您将打开电话的灯光-它时尚,时髦,青春。” 这违反了该原则和其他一些原则。
那该怎么办呢?
2.5。 该系统应该带来新的体验,而不是试图取代旧的体验。
如果您认为在家中管理系统的方法比旧方法更好,请向用户提供。 如果确实方便,他会选择一种新方法(是的,不同的方法适合不同的人)。 您能(而且应该)要做的就是给他一个选择。
工作逻辑是智能家居中的重要场所。 是什么决定了该智能家居将按照哪些规则工作。 以下是重要的原则:
3.不能限制用户可以访问的逻辑。
如果用户想在房间温度升高时打开水壶
3 ,请给他机会。 当没有物理或软件限制来执行特定操作但不可用时,应该排除这种情况,因为开发人员认为“没人会需要它”。
3.1。 尽可能简单:编写逻辑不应要求有关系统设备的专门知识
如果您具有使用不同协议的不同版本的设备,请确保仅在真正必要的情况下用户才能了解它,而您不能没有它。 如果您可以使用户免于获得特殊知识(尽管这会花费开发人员的时间),则可以这样做。 开发人员将花费两天的时间,每小时花费一千个用户。 四十八小时对一千小时? 答案很明显。
约翰是一名串行程序员,您睡得如何?
3.2。 具有相同功能的设备必须受到同等控制。
用户不必知道水阀是由某些命令控制的,而水龙头是由其他命令控制的。 如果它们两个都控制管道中的水,则它们都必须具有相同的用户界面:“打开水”和“关闭水”。
我们都生活在物质世界中。 人体和大脑形成为与物理对象进行交互。 因此原理是:
4.物理控制设备要好于虚拟设备。
带有虚拟控制按钮的手机上的任何应用程序,甚至是最好的应用程序,都会在正确的位置丢失常规的物理开关。
另一件事是,开关必须位于
正确的位置 。 因此,另一个重要规则是:
5.无线电胜过电线。
有线系统是可靠的,但是只有通过无线电通信,您才可以为灯安装新的开关或继电器,而无需再次维修。 然后转移,如果您对以前的地方感到无聊。 但是该原则有其例外:
5.1。 收音机坏比电线坏。
一个好的无线电设备使您不必考虑设备应放置在离中央控制器多远的位置。
网状网络协议是一个很好的无线电:ZigBee,Z-Wave,6LoWPAN等。
所有其他选择都是不好的收音机。 Wi-Fi是坏收音机。 个别公司的自制协议(虽然它们可以在其他频率上使用,并且彼此之间可能有很大差异,但它们以“ 433 MHz”的名称被自制,因此众所周知)-无线电质量不好。
Wi-Fi不好,因为不可能在其基础上制造成熟的“睡眠”设备,并且很难进行自动配置以及与房屋内其他Wi-Fi设备的兼容性问题。 简单的自制协议很糟糕,因为它们通常不包含交付控制,加密或可用规范。 两者都没有网状布线,这通常会导致类似“但我不能在那个角落放置开关-离发射器太远”之类的问题。
不可能使系统具有绝对的可靠性并且不需要维护。 设备故障,网络中发生电涌,邻居公寓倒水,电池电量耗尽,塑料破裂,孩子将汤倒在灯上等等。 但是:
6.维修,更新,维护和诊断应该很简单。
B2B中的一切都很清楚:有一个用户,有一个开发人员,还有一个操作员-一个人或组织,他们知道系统的工作方式并可以在专业水平上使用它。 没有人需要1C下的会计知识,这是一个特殊的人。 而且没有人要求租用办公室的人了解通风的工作原理-他的工作是说:“办公室里闷闷不乐。”
购买系统的合适决定是基于总拥有成本的计算,该总拥有成本是系统价格与其运行成本之和。
在一个人在家中使用的系统中,一切都变得更加复杂。 在那里,操作员和用户是同一个人,并且通常不具有关于系统的必要知识。 不幸的是,这些都是消费市场的局限性。 因此,以下原则:
6.1。 设备应该工作还是不工作。 没有第三名。
不允许工作,部分工作和不正确的工作。 您不应允许您的设备每隔两次运行一次,或者十分之一都不运行的情况。 如果您认为设备出现故障,则应该将其完全关闭-为了安全起见并保持良好的用户体验。 更换设备令人不快,但最好是迫使用户更换它,而不是对系统形成“一次就可以使用”的意见。 系统必须处于严格定义的状态:如果系统崩溃,则它将无法正常工作;如果系统崩溃,则将正常运行。
如果您坚信功能降级是可以接受的,则仍应使用明确的消息警告用户:“已检测到第二个调光器通道发生故障。 有必要更换调光器。 继续使用第一个调光器通道? 是/否
6.2。 更换损坏的设备应该很容易。
该系统必须是模块化的。 如果用户损坏传感器,则只需要更换传感器即可。 您不需要通过控制面板来更改继电器,因为您会看到,继电器在生产阶段就已连接到它。
您甚至不能说“只有我们的专家才能安装新传感器”,因为显然,随着系统的发展,将没有足够的专家来满足数百万可能的用户,这意味着问题将在某个时刻开始。 当然,用户不会自己修理设备,但是在发生故障的情况下,他应该能够更换设备。
6.3。 清除消息。
如果出了什么问题,用户应该知道这件事,并且知道到底出了什么问题。
不可能告诉用户“错误#45”,这意味着只有技术支持人员才能理解此消息。 他需要说:“设备没有响应。 尝试重新启动它,再次绑定或联系服务。 错误#45。”
无法检测到设备没有响应(如果您有机会这样做),并且不告诉用户有关信息。 收到有关问题的消息并不是一件令人愉快的事情,但是要在您急需设备的那一刻,得知该设备已经一周没有工作了,真是令人不快。
6.4。 消息中缺少不必要的信息。
但同时,您无需将调试转储和多行日志转储到用户上。 如上一段所述,用户需要该信息,因为它包含有关到底出了什么问题的信息,或者如果此附加信息不清楚(因为没有发给他),则不需要该信息。
无需向用户显示数百条相同类型的消息:“与设备的连接已丢失”,“与设备的通信已恢复”。 最终确定:这是一个关键问题,您需要以正确的方式进行报告-“与设备的通信不稳定”,或者,由于事实证明该信息将被恢复,因此这不是重要的信息,因此您无需显示
4 。
6.5。 维护不需要特殊的知识和设备。
给用户提供更新固件的机会-只需按几个按钮就可以对其进行更新。 而且这将通过标准接口(USB / BT / Wi-Fi)来完成,或者通常不会在用户文档中提及使用SPI编程器更新固件。
如果在正常使用中需要此配置,则不能要求用户为设备配置计算位掩码。
6.6。 该系统不需要持续维护。
如果一个链接每月在执行单元上飞行,而用户需要爬到枝形吊灯并再次绑上,则这是一个糟糕的系统。 如果交换机需要每两个月更换一次电池-这是一个糟糕的系统。 甚至每个设备的平均六个月的维护周期也很糟糕:对于房屋中的二十个设备,用户平均每九天将不得不采取一些措施。
6.7。 系统必须具有更新或扩展的能力。
扩展系统的成本应呈线性增长。 一个新的块应该花费一个新块的成本。
当您需要购买新的控制器以添加新的传感器时,应该不会出现这种情况,因为旧的传感器不支持六个以上的传感器
5 。
新传感器固件只能与新版本的控制单元一起使用的情况不应出现。
此类限制会对利润产生积极影响,迫使用户购买新设备,但这是通向地狱的道路-由于此类技巧而失去了用户信任,您将蒙受的损失远远超过本来可以得到的。
7.自给自足:外部网络是一种选择,而不是必须的。
团队只能通过外部服务器访问的系统是一个糟糕的系统。 您可以随心所欲地吹嘘便捷的界面,流行的应用程序和凉爽的神经网络,但是用户是否随着互联网的崩溃而失去了打开厕所灯的能力并不重要。 开发人员,您真的认为这样的系统好吗?
但是说真的,我真的不明白为什么这不是理所当然的事情。 通过将系统绑定到外部服务器,可以创建故障点,并且具有常规服务器的可靠性,但同时会为所有用户带来麻烦。 外部服务很酷,它们使您可以扩展功能,但它不是操作管理的唯一选择。 附加的控制通道,备份存储,数据分析-任意数量。
8.集中化:缺乏中央集线器限制了可用的逻辑。
但是,请不要急于达到另一个极端-尝试使系统分散化,因此绝对可靠。
分散系统是指开关对灯泡说“打开”,并且温度传感器在温度下降时打开加热器。 分布式系统失去集中性的原因很简单,因为这样的系统仅在最简单的设备交互范例(“设备控制另一个设备”)的框架内存在。 随着系统复杂性的增加,这种系统提出的问题多于答案。 如果有多个温度传感器,那么加热器应该接受所有人的命令吗? 还是他本人应该询问传感器? 并且,如果您需要根据趋势决定是否包含,则将归档数据存储在哪里? 在每个加热器上? 不大胆吗? 在每台设备上? 并随每个请求增加流量? 以及在哪里存储以及如何更改逻辑? 逻辑是否包括外部元素? 以及如何在“愚蠢”的设备上存储逻辑? 以及如何更新呢?
如果您调和并意识到需要中央集线器作为数据和用户逻辑存储位置之间的交互点,那么所有这些问题都会消失。 让所有设备都变得“愚蠢”,能够发送数据和接收命令,存储归档数据,处理这些数据,做出决策以及与外部服务进行交互的任务将落在中央控制器上。
顺便说一下,可以保留分散的权限,尽管可以部分保留:没有任何方法可以阻止您直接发送命令,因为存在故障安全模式,而没有集线器的响应。 没有逻辑,但可以打开灯。
9.未经确认或未通知用户,系统不应执行潜在的危险动作。
只要我们不生活在程序员负责其程序所造成的损害的世界中(在
此处对此主题进行
了详细介绍 ),程序中就会有很多错误。 它们将位于智能家居的软件中。 这些错误不会导致灾难性后果的唯一可能性是系统独立动作的限制。 潜在的危险动作至少应在用户知情的情况下进行,最好是在用户确认的情况下进行。 您可以自动打开灯:程序中的错误会导致用户在晚上醒来,或者在月底收到额外的一百卢布的发票。 令人不愉快,但几乎没有危险。 例如,如果没有保证在洪水期间将其关闭的机制,则不可能自动打开水。 但是请关闭水-可以,因为这不是危险的动作。
该原理并不表示必须禁止所有加热器,锅炉,火炉,水壶等的自动控制。 相反,它是关于以下事实的:如果您已经在使用软件控制来制造具有潜在危险的设备,请确保其危险性未达到用户水平:受控水壶应具有“铁”电路,以在过热时将其关闭。 本身充满的浴池必须装有水浸传感器; 熨斗应该能够关闭,但是只有当您按下“熨斗”按钮等时才能重新打开。
10.系统应该能够自我控制和自我诊断。
真正的智能系统开发人员应该有点偏执。 您不能信任互联网,它会消失。 您无法信任该代码,其中可能包含错误。 也许至少硬件是可以信任的? 不行 您不能信任您的硬件。 继电器会粘住,三端双向可控硅开关元件自然断开,保险丝烧断。 最后,用户可以将千瓦水壶插入100瓦电源插座。 需要传感器电压,电流,温度。 温度是否超出范围? 关闭所有内容,发送警告。 电流已经超过了-将其关闭。 他们关闭了继电器,但输出端上仍有电压吗? 注意 开启,但是没有电压? 注意!
11.系统必须能够被手动控制。
即使发生了所有这些偏执的事情,仍然会出现检查失败并发生故障的情况。切换房间,路由器,中央集线器。并且用户想要打开马桶中的灯。结论是什么?始终应该有一个按钮可以用来使“手动日落”。可以立即打开或关闭灯。由于他们明天将带来一个新的集线器,因此您可以稍后再购买开关,并且您想在当晚关闭房间的灯以保持良好的睡眠。12.开发人员和黑客与普通用户一样重要。
普通用户会让您成为收银员和黑客 6-提出新功能。制造商不能也不应该开发使用该系统的所有方案,因为它显然不具备所有领域的知识并且不能评估这些领域的开发效果。由于解决方案库中有一个PID调节器,因此控制出口可能仍然非常方便地控制月光恒温器,因为现在所有Moonshiners都购买了您的系统。一个例子有些人为设计,但主要信息是,以付出一些努力为代价,值得为黑客创造一个舒适的环境,因为它们为您的系统增加了动力。13.开放性:系统必须具有与其他系统集成的API。
您无法使用设备满足客户的所有需求。总是会有您没有的设备,而其他制造商则有。或者您有,但是其他制造商更好。否则,您将成为单个单元最好的制造商。需要使用开放且有据可查的API才能将系统连接到其他系统。如果没有API,就意味着用户无法构建异构系统。即使是最热衷于专有硬件和软件的公司,也无法负担得起。14.文档:文档与代码和硬件一样,是系统的重要组成部分。
无论您拥有什么炫酷的硬件,无论您编写什么炫酷的软件,如果用户不知道如何启动系统以及如何使用它,都将无关紧要。良好的文档编制是使用户甚至不愿与支持人员联系或对开发人员的心理能力进行负面评估的一种文档。编写这样的文档几乎是不可能的,但是我们必须为此而努力。最后,最后一个原则(但在重要性上与最后一个原则相去甚远):15.自给自足和自我维持:即使公司停止工作,系统也应继续工作
一个人的寿命为70-90岁,家里的系统最长为5-10年,而公司规模通常较小。您不应该创建一个系统,将其与您一起拖到坟墓的能力。同情用户。设计该系统,以便即使公司和开发人员早已被遗忘也可以使用它。新设备的绑定是否发生在从开发者的服务器接收令牌的过程中?进行“跳过接收令牌”按钮。首次打开系统电源时,是否需要从站点更新固件?当站点不可用时,请确保默认固件已泛滥。依此类推。
在本文中,我试图描述使用,工作和设计此类系统的所有经验,并将其压缩为15个基本原理。其中一些可能看起来牵强,有些可能引起争议(这是正常的),有些可能过时了(这也是正常的)。但是,如果您至少考虑其中之一,则意味着该文章的撰写没有白费。脚注和评论
1.当我说“使用”时,我不是指配置过程,而是与系统正常交互的过程。2.请注意,我并不是说“延迟应该相同”,而是“用户不应该注意”。实践表明,一个人最多不会注意到大约300毫秒的延迟。3.也许他在中亚长大,并且认为最好的热疗法是绿茶。4.当然,当我说“不需要显示信息”时,这意味着您不应该每次都向用户发送有关该信息的消息。应用户要求显示它-单击“显示日志”或“显示调试信息”按钮。用户不应被视为白痴,但必须尊重他们的时间。5.当然,不可能设计一个支持无限数量的设备的系统。总会有一些限制,但是开发人员的任务是确保它们在99%的情况下不起作用。六个传感器的限制是不可接受的。对于大多数智能家居用户而言,一个网络中的一百二十个设备就足够了。6.根据RFC1983,我所说的“黑客”一词的原始含义不是“黑客”。