Domácí automatizace - jak jsem přešel na Zigbee

By jackc |

Pro hlídání teploty v rámci domácí automatizace mám vyzkoušená Z-Wave čidla, ale hlavně Sonoffy (ty bytelnější - THxx a DUALy) s Tasmotou na wifi. Sonoffy jsou připojené do zásuvky, což beru jako plus (nerad vyměňuji baterie), ale na druhou stranu občas trpí nestabilitou např. při horším wifi signálu a v minulosti prakticky každý z nich bylo třeba jednou za čas nakopnout. Po výměně našich domácích wifi AP a přesunu notesu na 5GHz se zatím zdá být tento problém vyřešen, ale důvěra už je nalomena. Navíc stále hledám jednotící technologii.

aquara
Tou by se mohla stát home made Zigbee síť založená na coordinatoru CC2531 od Texas Instruments (USB stick) a zařízeních podporovaných projektem zigbee2mqtt.

Protože mám OpenHAB, rozhodl jsem se flashnout TI firmware a integraci provést pomocí Zigbee OpenHAB bindingu (obejít zigbee2mqtt). Pro download firmware z myportal.ti.com je potřeba registrace, která se mi podařila až když jsem ze sebe udělal obyvatele USA.

flashovani

Další zádrhel byl v tom, že jsem se rozhodl nekupovat CC-Debugger a cable adapter (link1, link2). Poměrně úspěšně jsem připájel kablíky na header (díky nové páječce TS80P Mini, se starou bych to asi nedal), ale nenašel jsem relevantní zapojení pro mé staré Raspberry Pi (v1, model B, rev2). Všude bylo zapojení pinů 35+ ale moje rasppberry má jen 26. Řešení se skrývá v Use other pins. Bohužel označení u pinů v závorkách moc nedávají smysl, dokud neporovnáte označení pinů na wiringpi. Z jejich tabulky už je vidět, že ačkoliv se BCM GPIO mění podle revize raspberry, číslo WiringPi Pin (které se zadává jako parametr pro flash_cc) zůstává stejné. Je tedy bezpečné použít piny a parametry příkazů z "Use other pins" pro všechny verze raspberry.

Při kontrole v notesu bylo vidět, že se změnil výstup z lsusb a objevil se sériový port /dev/ttyACM0.

Další výzkum se přesunul do OpenHAB. Tam mi nejdřív chyběla definice sériového portu v /etc/default/openhab2 pro javu v EXTRA_JAVA_OPTS. Bez toho se spojení na coordinator tvářilo ok, v debug logu dokonce byl traffic, ale přitom to padalo na "neexistující" seriový port.

V logu se dále objevovalo několik chyb, které zřejmě souvisely s tím, že jsem byl o tři minor verze pozadu. Update.

Na řadě bylo párování Zigbee coordinatoru a čidel (zatím Xiaomi Aquara hranaté na teplotu a kulaté na hlídání záplavy). Tady jsem se zasekl více resp. úplně. Po mnoha pokusech párování a výzkumu na internetu jsem se nerad musel smířit s tím, že v OpenHABu Xiaomi nespáruju. Zdá se, že to může být tím, že tyto Xiaomi čidla nesplňují všechny zigbee požadavky (link).

Došlo tedy na zigbee2mqtt, což je nodejs aplikace s velmi širokou podporou Zigbee hardware. Ta pomocí MQTT může být připojena třeba do OpenHABu.

zigbe2mqtt

Při instalaci jsem ale narazil na staré npm v Debianu 10 a zároveň nepodporu i386 platformy od upstreamu. S balíky z unstable už to chvíli běželo, než to spadlo na segfault. Využil jsem tedy docker image. Spuštěno a spárováno na první pokus, wow.

Takhle potom vypadá konfigurace OpenHABu:

Thing topic zigbee-aqara3 "Aqara 3 obývák" {
  Channels:
    Type number : linkquality   "linkquality"       [ stateTopic="zigbee2mqtt/aqara3", transformationPattern="JSONPATH:$.linkquality" ]
    Type number : battery       "battery"           [ stateTopic="zigbee2mqtt/aqara3", transformationPattern="JSONPATH:$.battery" ]
    Type number : temperature   "temperature"       [ stateTopic="zigbee2mqtt/aqara3", transformationPattern="JSONPATH:$.temperature" ]
    Type number : humidity      "humidity"          [ stateTopic="zigbee2mqtt/aqara3", transformationPattern="JSONPATH:$.humidity" ]
    Type number : pressure      "pressure"          [ stateTopic="zigbee2mqtt/aqara3", transformationPattern="JSONPATH:$.pressure" ]
}

// Aqara 3 Obyvak
Number    aqara3_linkquality          "Aqara 3 linkquality [%d%%]"                        {channel="mqtt:topic:MyMQTTBroker:zigbee-aqara3:linkquality"}
Number    aqara3_battery              "Aqara 3 battery [%d%%]" <battery>                  (gHistory, gBattery, gHasLastUpdate)
                                                                                          {channel="mqtt:topic:MyMQTTBroker:zigbee-aqara3:battery"}
DateTime  aqara3_battery_LUD          "Aqara 3 last update [%1$tH:%1$tM:%1$tS]" <time>
//Number  aqara3_pressure             "Aqara 3 pressure"                                  {channel="mqtt:topic:MyMQTTBroker:zigbee-aqara3:pressure"}
Number    obyvak_teplota_aktualni     "Obývák: Aktuální teplota [%.1f°C]"                 (gHistory, gTeplota, gCheckOutdated)
                                                                                          {channel="mqtt:topic:MyMQTTBroker:zigbee-aqara3:temperature", expire="180m"}
Number    obyvak_vlhkost              "Obývák: Aktuální vlhkost [%d%%]"                   (gHistory)
                                                                                          {channel="mqtt:topic:MyMQTTBroker:zigbee-aqara3:humidity"}

Závěr: Minulou zimu jsme v jednom pokoji topili (elektroventily na smyčkách podlahovky) podle Sonoffu. Tuhle zimu topíme (tentokrát bez potřeby ručních zásahů) ve dvou pokojích podle Zigbee, další Zigbee čidla máme zatím jen pro orientaci. Všechny chodí zatím bez problému. Souhrn teplot v uživatelském rozhraní (tablet na stěně s HABPanelem) vypadá takhle:

tablet

A tady je generační porovnání čidel:

  1. původní (zažloutlý, s mnoha tužkovými bateriemi) termostat Siemens napojený kabelem do techniky
  2. Sonoff Dual s Tasmotou s externím čidlem, napájený ze sítě a komunikující přes wifi
  3. Xiaomi Aqara Temperature s baterií CR2032 komunikující po zigbee

porovnání čidel