2019. aug 08.

WiFi-s relé (Sonoff Basic R3)

írta: eNeS
WiFi-s relé (Sonoff Basic R3)

Ráncfelvarráson esett át a Sonoff Basic, az új R3 változata, ami azon túl, hogy másképp néz ki (nem, nem lett kisebb), egy új, úgynevezett DIY móddal lett gazdagabb.
Paramétereiben egyébként nem történt változás, ugyanúgy 10A terhelhetőséget tüntetnek fel az adatlapján, mint az előző verziókon, az árcimkén viszont a régi másfélszerese látható... (cirka 2000 Ft)

basicr3_0.jpg

Az OkosotthonBolt-on és a DIYSmartHome-on is írtak már róla, én viszont jobban szeretem személyesen szétszedni az ilyesmit.
Rendeltem hát próbára, meg is érkezett szerencsésen jó 35 nappal a megrendelést követően, ám gyorsan rájöttem én is, hogy a beharangozott "DIY mód" nem valószínű, hogy átütő sikert fog elérni a DIY közösségben. Legnépszerűbb funkciója jelenleg az, hogy OTA módszerrel fel lehet rá tenni egy másik firmware-t, teszem azt a Tasmotát. (lásd még az erről szóló Tasmota wiki bejegyzésben)

Természetesen a szokásos módon érkezését követő 30 másodpercen belül az eszköz darabokban volt, érdeklődők kedvéért az alján a vezetősávok korrekt iparosmunkának tűnnek:

basicr3_back.jpg

És bár ennél a modellnél nincs feltétlen rá szükség, de a kábeles firmware cseréhez szükséges pontok itt is kivezetésre kerültek:

basicr3_serial.jpg

Ha mégis kábellel szeretnénk firmwaret cserélni, a fent jelölt négy bekötési ponton kívül az egyetlen nyomógombot is nyomva kell tartanunk, mivel az a GPIO-0.

De mi is az a DIY mód és hogyan használhatjuk?

Nos, aki azt hitte, most majd kap egy gyártófüggetlen megoldást, amihez fel se kell tennie az eWeLink alkalmazást a telefonjára, csalódni fog...  mondom az első lépést: tegyük fel az eWeLink alkalmazást a telefonunkra, készítsünk egy fiókot, majd adjuk hozzá a fiókhoz a frissen érkezett, éppen csak kicsomagolt és 230V-re kötött Basic R3-at, és nézzük meg ennek segítségével a firmware verzióját. Ha 3.3-nál régebbi akkor frissítsük a firmwaret!
Következő lépésként áramtalanítsuk és miután szétszedtük (két csavar van csak az alján, a két réteg műanyagfedél azok eltávolítása után könnyebben-nehezebben, de lepattan a helyéről némi erőkifejtés hatására) az OTA_SW feliratú két, magányosan álló tüskére tegyük rá a csomagban mellékelt jumper-t.

basicr3_jumper.jpg

Figyelmes szemlélő itt észreveheti, hogy egy ESP8285 van a lapra integrálva, ebből máris tudható, hogy 1MB integrált flash tárhely van benne.

basicr3_esp.jpg

A folytatásban készítsünk egy ideiglenes WiFi Hotspotot, akár a wifi routerünkkel (van olyan, ami több SSID létrehozását is támogatja egy időben), vagy egyszerűen telefonunk segítségével, a "Beállítások/Hotspot és internetmegosztás" menü alatt "Wifi-hotspot".

Ennek neve legyen: sonoffDiy
a jelszava pedig: 20170618sn

Ha sikeresen létrejött, helyezzük áram alá a korábbiakban jumper-rel ellátott BasicR3-at, kisvártatva a Hotspot kiírja, hogy 1 kliens csatlakozott. Ez után PC-nk vagy laptopunk segítségével nekünk is fel kell csatlakozni ugyanerre a "sonoffDiy" nevű hozzáférési pontra, majd elindítani a Sonoff DIY Mode Tool alkalmazást.

Windows felhasználók szokás szerint előnyben vannak, kész program tölthető le a gyártótól:

https://github.com/itead/Sonoff_Devices_DIY_Tools/tree/master/tool

A tool_01DIY85(3.3.0).exe -t kell futtatni.

Linux alatt ellenben az alábbi parancsokkal izzíthatjuk be a DIY Tool-t, feltéve, hogy éppen nem írtak el valamit a forráskódjában, mert akkor csak pár hibaüzenetet kapunk, én pont így jártam, de helyreütöttem. :)
(és aki azt hinné, hogy majd inkább Linux alatt Wine segítségével fogja futtatni az exe fájlt, nem, nem fogja, próbáltam)

sudo apt install python3-pip
sudo pip3 install PySide2 zeroconf requests
git clone https://github.com/itead/Sonoff_Devices_DIY_Tools.git
cd Sonoff_Devices_DIY_Tools/code
python3 tool_01DIY85.py

Ha sikerrel jártunk, valami ilyen ablakot kell látnunk:

tool.jpg

Itt kijelölve a listában a megtalált eszközt a "change SSID_Password" gombra kattintva tudjuk megadni saját WiFi AP-nk nevét és jelszavát, amire a mentést és újraindítást követően csatlakozni fog a BasicR3.
Az ON/OFF gombot megnyomva gyorstesztet végezhetünk, hogy működik-e a relé, továbbá a bekapcsoláskori alapértelmezett állapotot és a működési módot is be tudjuk állítani a felületen.
És a legnépszerűbb pont a "Firmware flash / Brush machine" menüpont segítségével tudunk saját firmware-t feltölteni On-The-Air módszerrel, ami elsősorban Tasmota (500kb vagy kisebb!), mely a sima "Sonoff Basic" sablon beállítással menni fog, mivel az eszköz gombja ugyanúgy a GPIO-0-ra van kötve, mint korábban, és a relét is ugyanaz a GPIO vezérli.

Megjegyzés: a jumper eltávolításával visszaállhatunk gyári eWeLink üzemmódba a DIY módból. (természetesen csak amíg nem csapjuk felül Tasmotával vagy egyéb harmadik féltől származó firmware-el, ami kiüti az gyártói azonosítót a készülékből, és ha nem mentettük el a firmware-t ennek visszaállítására nincs mód)

A DIY mód működéséről röviden:

DIY módra állítva a BasicR3 - és egyébként a Sonoff Mini is, mivel ugyanazzal a firmware-el működnek - multicast DNS csomagokkal küldi a hálózatra, hogy él, jelen van, aminek a TXT rekordja tartalmazza az állapotinformációit is, mint például a WiFi jelerősség, illetve a relé állapota (egyes számban, mivel nincs szó több relé támogatásról a dokumentációban). Ezt a példaprogramban a ZeroConf protokoll segítségével érik el és gyűjtik, és bár úgy tűnik, mintha pont olyan rögtön reagálna, mint az MQTT esetében, az érzés csalóka: egy fél másodpercenként lefutó végtelen ciklus kérdezgeti folyamatosan az állapotokat az eszköztől, ami sokkal nagyobb CPU felhasználást jelent és nem mondanám, hogy gyorsabb, mint az MQTT-nél, ahol az eszköz azonnal publikálja az állapotát az MQTT bróker felé, és a feliratkozott kliensek - a távolságuktól és a WiFi jelerőségtől függően - minimális késleltetéssel értesülnek az állapotváltozásokról. Mondhatnánk, hogy fél másodperc nem a világ, a WiFi-nek egyébként is van késleltetése a hálózati csomagok átvitelénél, de 30 eszköznél azért szerintem már elég látványos tud lenni a különbség... no ennyit a visszacsatolásról. (ez a gyártói "mdns.py" példaprogramban megtekinthető)
Vezérelni HTTP POST hívások segítségével lehet, a 8081-es porton figyel, és a "code/lan_ewlink_api.py" példaprogramban megtekinthető a működése, az API hívások dokumentációját pedig az "other/" mappa alatti "SONOFF DIY MODE Protocol Doc v1.4.md" állományban olvasgathatjuk. Böngésző címsorából hiába próbálkozunk, nem fog menni, mivel az GET lekérést indít, nem mellesleg a POST módszernél mellékelni kell az eszköz azonosítóját is a kéréshez.

A vezérlési szerkezet ilyesmi a bekapcsolásra pl:

URL: http://BASICR3_IPCIME:8081/zeroconf/switch
POST adat:
{
"deviceid": "xxxxxxxxxx",
"data": {"switch":"on"}
}

Sajnálatos módon Domoticz python plugint nehéz úgy készíteni, hogy több szálon futó python programot teszünk alá, mivel ez sosem volt túl stabil része a Domoticz-nak, de egy külső Python MQTT átjáróval megoldható. Mutatom is, hogyan.

Telepítsük fel a függőségeivel és futtassuk a SonoffDIY2MQTT alkalmazást:

sudo apt install python3-pip
git clone https://github.com/enesbcs/sonoffdiy2mqtt.git
cd sonoffdiy2mqtt
sudo pip3 install paho-mqtt requests zeroconf
python3 sonoffdiy2mqtt.py

Beállítás1:

Megnyitjuk a sonoffdiy2mqtt.json állományt, beállítjuk az alapértelmezett "mqtt_type":"domoticz" módot, beállítjuk továbbá az mqtt_address mezőbe a saját MQTT szerverünk IP címét, valamint az mqtt_port-ot szükség szerint.
Majd ahogyan Tasmota esetén tenni szoktuk vegyünk fel Kapcsolókat a Domoticz-ban a Dummy hardver alá (ahogy a legelső Domoticz bejegyzésnél is írtam róla) ezeket az IDX számokat vigyük fel a device_idx_list alá. Itt alapból öt bejegyzés van, de akár 250-re is bővíthetjük, ha van rá igényünk.
A "sonoff_device_id"-hez vegyük fel az eszközünk gyári, tíz karakteres Sonoff-ID-ját, ugyanebbe a sorba pedig az "outlet0" mellé a hozzá tartozó, és Domoticz-ban már létrehozott IDX számot.
És honnan tudjuk mi az ID-je az eszközünknek? Egyszerűen indítsuk el a programot és kiírja konzolra, hogy "eWeLink DIY plug found: xxxxxxxx" a csupa x helyén lesz az ID-je az eszközünknek, ez után már be tudjuk másolni a konfig állományba és következő indításnál már használja is. (ez gyakorlatilag a címfordító lista a programnak)

Beállítás2:

Ha azt írjuk be a sonoffdiy2mqtt.json beállításfájlba, hogy "mqtt_type":"shelly" akkor a program a Sonofftól Zeroconf-on keresztül bejövő állapotváltozásokat a Shelly API-nak megfelelő MQTT útvonalon és módon továbbítja. Amennyiben a Domoticz alá (de más, MQTT képes otthonautomatizáló rendszerrel is működhet persze) feltelepítjük a Shelly1-nél leírt módon a Shelly_MQTT python plugint, és engedélyezzük, ez esetben az IDX-ekkel nem kell fáradnunk, mert öntanuló módon felveszi az aktív eszközöket a plugin. Fából vaskarika? Lehet, de működik. :)

Szorgalmi feladat: állítsuk be, hogy a sonoffdiy2mqtt.py szkript automatikusan induljon a rendszerindításkor, mert ha nem fut, nincs ami fordítsa és továbbítsa az infókat.

Csak csendben teszem hozzá, a korábban megjelent, és korábbi Sonoff-ok által ismert LAN módhoz (bár ez még macerásabb, mint a DIY mód) is elérhető hasonló fordítóprogram, ami innen tölthető le:

https://github.com/enesbcs/Shelly_MQTT

Megéri?

Ha nincs UART illesztőnk a firmware cseréhez, és kényelmesek vagyunk, feltétlen. Egyébként nem.

Szólj hozzá

kimenet termékteszt relé vezérlések sonoff basic r3