您之所以在这里,是因为您已经踏上了家用物联网的潮流,所以我不需要解释它的有趣,激动和有趣,但也因为您对中国供应商提供的许多现有固件不满意而在这里基于ESP8266的设备。幸运的是,社区掌握了这个问题,并且在一年半的时间里,我们看到了3个出色的OpenSource项目正在解决这个(以及许多其他)问题。在接下来的几篇博客文章中,我将尝试从多个角度比较3种最流行的OpenSource固件选项,并希望可以帮助您决定使用哪一种。这篇文章是对不同选项的概述和介绍,并对它们进行了非常高级的比较。
固件概述
索诺夫-塔斯莫塔
Sonoff-Tasmota代表T heo- a nds- S onoff- M QTT- OTA,是Theo Arends先前修补项目的演变。正式而言,该项目于2017年1月开始,但它继承了前两个版本的许多资产,因此我们可以说该项目实际上早于2016年1月开始。
顾名思义,它最初是为替换早期Iteads Sonoff设备的固件而建造的,但后来发展成为一个项目,该项目支持更多基于ESP8266的板,并且具有许多Sonoff产品上最初没有的传感器。
该项目几乎每天都由Theo亲自进行更新,从而重新开发了开发人员社区的一些贡献。
社区非常生动,开发人员和“常规”使用者的健康结合确保了固件普遍可用。这个社区正在制作许多资料,包括许多Youtube教程和非常漂亮的Wiki页面,它们为Tasmota项目的采用和成功做出了贡献。
ESPurna
才华横溢的Xose Perez于2016年5月启动了ESPurna(用加泰罗尼亚语命名为“ spark”),旨在为ESP8266开发板提供与设备无关的固件。他显然是从Wemos D1 Mini板开始的(非常通用),并增加了对许多其他预制板的支持,包括Sonoff等。
Xose显然是一位经验丰富的软件开发人员和软件架构师,因为该项目的组织性和架构性非常好,但是尽管他经营着非常有启发性的博客,但同时却缺少更广泛的社会采用。
根据社区的讨论或少量贡献,项目每天仅由Xose进行几次更新。
社区小于Tasmota社区,主要面向足够熟练以符合Xose知识和技能的开发人员。尽管Youtube上与Espurna相关的视频很少,但它们离Tasmota的报道范围还很远。
ESPEasy
从技术上讲,ESPEasy是目前最古老的替代固件。它于2015年12月由一个名为“让我们控制住”的荷兰团队开始,作为他们在物联网中的实验,大概是他们在新公司产品中的一部分。他们从通用ESP8266平台入手,并添加了有关如何将其用于装配板(例如Sonoff)的文档,Sonoff显然是许多家庭IoT项目的首选硬件。这种方法非常灵活,能够支持传感器/执行器的任意组合,但是需要更多的配置才能上手。
该项目每天更新多次,大多数情况下是由Lets Control It的几个核心开发人员进行的,但他们也合并了其他贡献者的代码,这很不错,而且符合真正的OpenSource项目的精神。
社区规模与Tasmota相当,开发人员和“常规”用户之间的平衡更好。
常用功能
所有3个固件选项共享一些共同的属性:
-
它们是开源的,并使用Arduino框架构建,并提供预编译的二进制文件。
-
它们支持几乎所有Itead Sonoff以及许多其他板卡和模块,包括所有1M Flash设备。当然,也支持NodeMCU或Wemos D1等通用板。
-
它们都对许多其他传感器和执行器提供了广泛的支持,包括I2C和1-Wire传感器和电源监控器的流行选择。ESPEasy借助许多您不认为是家庭自动化的典型组成部分的不那么常见的东西,使它甚至更进一步。
-
所有产品均支持各种LED控制器,并具有完整的LED色彩渲染,调光,过渡和某些效果。
-
全部都支持各种WiFi连接模式,包括AP(热点)或STA(客户端)模式,以及多个SSID配置和Wifi网络扫描。
-
它们支持MQTT,既适用于传感器/执行器,也适用于自己的配置。有些甚至提供了专门定制的主题布局,以便与流行的自动化逻辑软件(例如Home Assistant或Domoticz)轻松集成。
-
全部都支持一些特定于家庭自动化软件的协议,例如Domoticz HTTP,OpenHAB HTTP等。
-
它们都支持集成到Google Assistant和Amazon Alexa中。
-
当然,所有功能都支持无线更新(OTA)以及配置备份和还原。
-
所有固件选件都嵌入了一些本地自动化功能(按钮/开关到继电器映射),其中一些选件在增加更多功能方面又走了一两个步骤(有关更多详细信息,请参阅下文)。
-
它们都支持日志记录了一些接口,如串口,Syslog或HTTP,可配置日志级别。
-
全部支持通过NTP进行时间同步
共同的改进领域
所有固件选件都存在相同的常见问题集和潜在的改进领域:
-
安全通信/ TLS-两种固件均未在所有接口上均正确支持TLS,因此很难实现整体安全性。Tasmota和ESPurna开始支持MQTT的TLS,但这仅解决了部分问题,并且Web UI和其他各种接口未加密且未经身份验证。
-
文档 -作为开源项目,这两个固件都没有结构良好,设计合理且实现良好的文档集,这些文档集确实会使普通用户轻松获得快速结果。尽管有些(Tasmota)比其他的要好,但要让普通的Joe能够在2分钟内下载安装包并使Sonoff正常运行,还有很长的路要走。也许这不是当前的重点,但我发现论坛中超过50%的问题重复了5%的初学者问题,而这些问题可以通过适当的文档解决。
-
IPv6-这两块板均不支持IPv6,而是依靠IPv4。尽管这在家庭环境(您可以自由选择自己的私有IP布局)中可能没有太大意义,但它仍然使计划和“正确地做事”变得不那么有趣。我了解IPv6不仅仅是一个单独的固件问题,更是一个Arduino / ESP8266框架问题,但它仍然是一个问题:)
功能上的显着差异
索诺夫-塔斯莫塔
好
-
Web CLI -Tasmota功能控制台,可用于调试和配置未通过Web UI公开的固件的某些方面。仍然可以使用浏览器访问控制台,在某些情况下,必须使用控制台才能正确设置设备,这对于此固件也是不利的。
-
IR发送和IR接收 -Tasmota支持原始和已处理的IR发送和接收代码,并嵌入对主要IR协议的支持。它还具有用于空调控制的高级命令(利用专门用于HVAC设备的IR发送)。
-
WS2812 LED灯串 -具有用于圆形WS2812灯条的特殊“时钟”模式。
-
433Mhz RF-接收/学习/发送433Mhz RF代码。
-
mDNS发现 -可以使用mDNS协议发现MQTT服务器并连接到它。
-
多种语言支持 -Sonoff-Tasmota包含I18N框架,目前提供英语,德语,荷兰语,波兰语和意大利语翻译。我看到了简体中文的公关,我也在从事塞尔维亚语翻译。
-
一种尺寸适合所有预编译的二进制文件 -Theo实际上提供了2个预编译二进制图像(不包括语言变体):最小图像(仅用于初始引导程序)和一种尺寸适合所有图像,包括对所有板卡和所有传感器的支持/执行器。这非常适合进行实验,但是一旦知道您的电路板配置是什么就没有必要,并且也可能导致麻烦(配置错误的电路板类型可能需要您将电路板重新连接至编程器,擦除闪存并重新闪存Tasmota)。
可以改善
(免责声明-我对Tasmota拥有最丰富的经验,因此此详细列表)
-
MQTT消息策略不一致 -Tasmota有时MQTT消息不一致,因此很难集成到某些家庭自动化系统中。不过,一旦您深入研究文档/论坛,并且找到了可行的方法,就大都可以了。
-
对命令的依赖 -无法使用WebUI设置某些功能,并且设置选项在调试消息中不可见。阅读文档,进行实验并了解您的工作将有所帮助。
-
“所有代码都必须适合1M电路板”政策 -为了确保与最小Flash大小的兼容性,Theo着迷于大小,并坚持只包括全部适合500K的功能(一半为1M,以允许OTA)。尽管每个人都可以重新编译图像以使用不同的电路板布局,但其中并未包含某些功能,或者由于“单一尺寸适合所有人”的图像无法容纳500K的神奇效果而降低了功能的尺寸。似乎,对于Arduino / ESP8266框架v2.4.0,这将不得不改变,因此,2017年6月作为建议选项和最佳实践引入的双步OTA流程将成为强制性的。
-
基本的按钮支持 -连接到Tasmota的按钮可以通过MQTT发送按下或长按信号,但不能两次按下,三次按下以及类似的mm头。双击是非常有用的功能,可惜它不受支持。
-
MQTT故障转移 -Tasmota没有选择包括辅助MQTT代理配置的选项,以防主配置失效。通过选择MQTT代理的mDNS(Tasmota可以通过mDNS通过._mqtt端点自动连接到广告自身的主机)可以部分缓解此问题,但是出于安全考虑,我个人不使用此选项,而是希望使用可配置的MQTT代理列表。
ESPurna
好
-
家庭助手自动发现 -ESPurna可以以家庭助手可以发现的格式发布数据,从而自动集成各种开关,按钮,继电器和照明灯。
-
Telnet支持 -与Tasmota类似,但更简单,ESPurna提供了未加密的telnet接口,非常适合调试。出于安全原因,必须在使用前在Web UI中显式启用它。
-
433Mhz RF-接收/学习/发送433Mhz RF代码。
-
mDNS,NetBIOS和LLMNR以及SSDP广告和发现 -mDNS广告特别有趣,“因为我们能做到”,让其他人在那里;)与Tasmota一样,ESPurna支持MQTT发现,但没有故障转移。
-
直接InfluxDB集成 -可以将指标直接导出到InfluxDB,而无需中间收集器。
-
量身定制的二进制文件和与NoFUSS更新框架的集成 -Xose投入了大量精力来构建最常用的电路板/传感器/功能的矩阵,并提供专门为您量身定制的单个图像。NoFUSS更新框架承诺会通过自动跟踪特定板上使用的固件来照顾后续的升级,但是我尚未在实践中对其进行过测试,无法说明其实际工作方式。
可以改善
-
电路板类型和硬件在编译时设置 -与其他选项不同,ESPurna要求您为电路板下载正确的映像,或者在编译时选择板,这将对大多数与硬件相关的设置进行硬编码。配置完所有内容后,通常这不是问题,但是这可能是一个粗略的开始,尤其是在您不知道想要/需要什么的情况下。
-
文档和用户论坛 -并不是没有文档记载ESPurna,而是文档的整体质量并不总是达到平均用户水平,这使ESPurna的学习曲线有些陡峭。关于用户论坛可以说类似的话。
-
MQTT故障转移 -与Tasmota类似,ESPurna不允许您配置多个MQTT代理,因此您不能具有故障转移方案。但是,EPSurna确实提供了MQTT代理mDNS发现,但没有故障转移。因此,解决此问题的正确方法是将您的代理实施设计为高可用性。
ESPEasy
好
-
节点发现和节点间通信 -一个单元可以发现其他单元并在Web UI中枚举它们,还可以向它们发送HTTP和UDP命令。从理论上讲,这将允许您在没有MQTT经纪人的情况下运行董事会网络。
-
本地规则 -在控制器本身上编写自己的本地应用程序逻辑脚本,而无需MQTT代理和其他自动化软件。功能非常强大,尤其是与节点间通信结合使用时,但老实说,我并没有过多地使用它,因此无法说出真正的可用性。
-
广泛的传感器框架 -允许将“原始” I2C传感器数据转储到MQTT,MQTT又支持陀螺仪,RFID传感器,蜂鸣器和包括MP3播放器的外部显示器。
-
WS2812 LED灯串 -具有用于圆形WS2812灯条的特殊“时钟”模式。
-
虚拟IO支持 -除直接连接的继电器和按钮外,ESPeasy还可以支持通过IO多路复用器之一连接的“虚拟继电器”和“虚拟交换机”,从而允许以一致的方式寻址多达128个开关/继电器。
-
从Web UI进行I2C扫描 -如果您有大量未知的I2C设备,则可以直接从WebUI发出扫描,并获取所有设备及其属性的列表。挺棒的 :)
可以改善
-
没有预先配置的板 -使用ESPEasy,您可以配置所有内容,并且需要配置所有内容,因此,您不能选择任何现有的板,而必须从头开始设置所有内容。这不仅会延迟您的初始结果,而且有潜在的危险,因为ESPEasy允许您重新配置Flash通常会使用的GPIO,从而使板卡在擦除和重新闪存之前无用(类似于Tasmota板卡配置错误)。一旦知道自己在做什么就没什么大不了的,但是如果您需要快速起步的话,这会很令人沮丧。
-
强大但令人困惑的HTTP API重新配置 -虽然ESPEasy允许您配置大量HTTP API,但了解什么/在何处/如何却有点混乱。同样,一旦您对其进行配置,它就可以工作,但是学习曲线可能会更陡一些。
-
UI仅用于配置 -很有趣,但是您无法通过ESPEasy触发连接到开发板上的继电器的状态更改。您必须使用HTTP或MQTT API,或者至少使用WebUI->工具->命令->手动键入命令。尽管此决定有一定逻辑性,但我感到非常惊讶。
摘要
社区已经为供应商提供的固件构建了至少3个好的替代方案,每个替代方案都可以满足大多数基本用例,例如使用MQTT控制继电器或发出信号的温度读数。有关更多信息,您必须查看用例,然后查看哪种固件更合适。
(免责声明:我主要使用Tasmota并为其提供较小的贡献,因此我对此有更强的见解)。
我发现Tasmota对于日常使用来说是“足够好”的(几乎我所有的家用设备都在运行Tasmota),尽管我希望看到某些变化。Tasmota可以轻松启动和快速生成结果,具有强大的功能集并为不同的传感器提供良好的支持,但是还附带了一些您必须习惯的怪异内容。除了标准的刷新方法外,Tasmota周围的社区(包括您在内的所有人)还提供了一种怪异的OTA方法,即通过库存的Sonoff固件刷新初始Tasmota映像,而无需焊接甚至打开某些受支持的设备。
ESPurna的结构非常合理,提供了干净,精确的界面,但尚未在我们之间“点击”,因此我没有将其安装在我拥有的任何“生产”设备中,主要是因为我是从Tasmota和想尽量减少我家里的变体数量。
尽管如此,它似乎在MQTT客户端和HTTP服务器的内部实现上更好(真正的非阻塞),所以我目前正在对其进行测试,以查看它们将是取代Tasmotas网络的好地方,并且可能会加入ESPurna开发潮流(是写这篇文章的动机)。ESPurna可能缺少Tasmota拥有的一些精美功能,因此您的里程可能会有所不同。
我个人发现ESPEasy过于结构化和过于松散,无法进行大规模生产(也就是日常使用),但另一方面,当我尝试使用新硬件和新产品进行实验时,我非常喜欢它,这完全是因为它给您带来了自由和可配置性。它具有非常开放但非常强大的运行时配置功能,在本地决策方面是最先进的,从而有可能减少对MQTT代理和外部自动化逻辑的需求。对我来说,这听起来似乎不对,但是我知道至少有少数人对此表示强烈反对。
下一步是什么?
从理论上讲,所有现有的固件选项都提供了很好的可操作性功能集,例如Web UI,OTA,备份和还原,但是我将在下一篇文章中深入探讨可用性,以探讨真正使用此功能有多么容易日常软件,并依靠它进行家庭日常运营。我将尝试从纯粹的最终用户角度看待这些事情,而不必过多地讨论实现和开发细节。
另外,我假设你们中的一些人是修补匠和程序员,并且希望将其中一些框架用作自己的代码的基础,所以我从开发人员的角度准备另一篇关于相同3种固件的文章,在此我将尝试比较这些项目使用的实际编码样式,清洁度,社区和工具。