Sonoff LAN üzemmód

Amikor nemrégen megjelent a "LAN mode" lehetőség a Sonoff wifis kütyüiben, sokakhoz hasonlóan rögtön érdekelni kezdett a lehetőség, mert az élet a Felhő nélkül nem olyan árnyékos...

De ha az ember jobban utánanéz, már nem is annyira érdekes a dolog. A LAN módot kapcsolgathatjuk ugyan az eWeLink mobiltelefonos appikációban, de csak akkor fog bármit is találni, ha van Wifi, de nincs Internetkapcsolat!

sonoff_lanmode.jpg

Ezt egyszerűen úgy tudjuk elérni, ha Wifi routerünk bejövő netkábelét kihúzzuk, vagy bonyolultabban, ahogy én csináltam: DHCP-n egy adott IP címet rendeltem a Sonoff kütyü MAC címéhez, és ennek az IP címnek a wifi router tűzfalán keresztül megtiltottam, hogy kijusson a belső hálózatból. (OpenWRT-vel ez könnyen megoldható, egyszerűbb, gyári router firmware-ekkel nehézkes lehet)
Ám még mielőtt letiltanánk a kütyüt a netről, érdemes az eWeLink "Setting"-en keresztül a firmware-t megfrissíteni, mert csak 1.8 vagy annál újabb esetén működik a dolog.

sonoff_lanmode3.jpg

Nomeg érdemes azt is ellenőrizni, hogy véletlenül nem olyan típussal próbálkozunk-e, ami még nem tudja ezt a funkciót, mint pl én egy Sonoff POW-al akartam próbálni, aztán láttam, hogy nincs rajta a LAN módot támogató típusok listáján, és elővettem egy S20-at inkább. :)

Tehát, ha minden fenti feltétel adott, az eWeLink-ben bekapcsolhatjuk a LAN módot a kezdőlapon. Amennyiben ugyanazon az IP alhálózaton, amire a telefon wifire csatlakozott, található olyan, az eWeLinkben már regisztrált eszköz, ami nem tudott az internetre/Felhőre csatlakozni, akkor a LAN módban az eWeLink direktben megtalálja.. (a 21. század csodája - bár szerintem ez egyébként is természetes lenne)

sonoff_lanmode2.jpg

Aki most boldogan csápolva felugrott a székről, nyugodtan visszaülhet, a be és kikapcsoláson kívül semmilyen más funkció nem megy LAN módban, nem lehet új eszközt hozzáadni, csak a már felvett eszközöket lehet kapcsolni, nem mennek az időzítők, ütemezők, stb sem. Egyértelmű, hogy internetkimaradás esetére vészhelyzeti megoldásnák szánták, és nem arra, hogy a nyílt forrású, szabványos protokollt használó okosotthon-automatizálási szerverünkbe be tudjuk integrálni. (Bár a 8081-es WebSocket vezérlőport elérhető akkor is, amikor az eszköz online, ennek tesztelésének lehetőségét meghagyom másnak)
És ha ez mind nem lenne elég, pár perc után meg is szakadt a kapcsolat, amit csak a telefonon a LAN mód leállításával és újra bekapcsolásával tudtam helyreállítani. (lehet megállt a ping-pong?) Így továbbra is Tasmota firmware-t fogok minden Sonoffomra tenni.

Ám még mielőtt törölném erről az S20-ról a gyári firmware-t, elővettem a WireShark-ot, és megnéztem vajon mi történhet a háttérben. Gyengébb idegzetűek ne olvassanak tovább.

Első körben az eWeLink applikáció a LAN mód bekapcsolása után a 255.255.255.255 broadcast címre UDP (58000 portról 58100-ra) csomagokat kezdett küldözgetni, annyiszor 5 csomagot, ahány Sonoff eszköz volt beregisztrálva. Vagyis fogta az egyedi azonosítóikat, becsomagolta egy 80 bájt hosszú adatcsomagba, és ötször ismételve körbeküldte.
Amire az internetről letiltott Sonoff S20 kétszer válaszolt (58100-as UDP portról a küldő 58000 portra) 123 bájtba csomagolva válaszát, ami valamilyen titkosító kulccsal lehet megjáratva, nem igazán szánok rá annyi időt, hogy visszafejtsem, biztos vagyok benne, hogy a regisztrációkor generált eszköz-azonosítókat járatják oda-vissza.

Miután azonosították egymást, az eWeLink az eszköz TCP 8081-es portjával kezdett kommunikálni, ami mint kiderült valamilyen HTTP szerver lehet, mert egyszercsak ez ötlött a szemembe:

HTTP/1.1
origin: http://192.168.2.128:8081
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: b/taEnNJRpCTu8cq3cV8lQ==
Sec-WebSocket-Version: 13
Host: 192.168.2.128:8081
Accept-Encoding: gzip
User-Agent: okhttp/3.7.0

(A .128 az S20 IP címe volt a teszt során)

Amire valami efféle válasz érkezett, némi protokoll-egyeztetésnek tűnik:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: 4NZ6lj7t1TrB/BkSg4wzEo9o/+U=
Sec-WebSocket-Protocol: chat

Ezt követően az applikáció még egyszer megszórta a 255.255.255.255 broadcast címet, hátha mégis van még ott valaki, aki válaszol.. de nem jött be neki.

Biztos ami biztos, az applikáció a telefonom legfontosabb paramétereit leküldte az S20-nak.. a wifis kütyünek biztosan feltétlenül tudnia kell a telefonom IMEI számát?

{"action":"userOnline","ts":"1535743284","version":6,"imei":"837aa2a85db1xxxx","model":"LG-D410_w7","os":"Android","romVersion":"7.1.2","at":"d8e607824c96cd101678d37012d975158f60a827",
"appid":"oeVkj2lYFGnJu5XUtWisfW4utiN4u9Mq","nonce":"1bz88j3i","apkVesrion":"4.2",
"apikey":"0387c81c-4889-498b-b771-2641a865de4b","sequence":"1535743284824","userAgent":"app"}

Az S20 a bimbózó barátság reményében erre visszaküldte a saját adatait: (vagy ez lenne a standard nyugtázó válasza, mert később többször előkerült még)

{"error":0,"apikey":"81129236-e651-4c9b-a09b-05abd64a518d","sequence":"1535743284824","deviceid":"10002cxxxx"}

Aztán a 8081-es TCP portról ilyesmi állapotüzenetek/státuszok kezdtek érkezni:

{
"userAgent":"device",
"apikey":"0387c81c-4889-498b-b771-2641a865xxxx",
"deviceid":"10002c4xxx",
"action":"update",
"params":{
"switch":"on"
}
}

Majd, hogy elüssék az időt, és fenn tartsák a kapcsolatot, a telefon

{"ping":"ping"}

üzeneteire az S20 ezzel válaszolt mindig:

{"pong":"pong"}

És ekkor kiszúrtam, hogy az alábbi WebSocket/JSON-ba csomagolt, 8081-es portra küldött paranccsal kapcsolta be az eWeLink az S20 reléjét:

{"action":"update","deviceid":"10002cxxxx","apikey":"0387c81c-4889-498b-b771-2641a865de4b","selfApikey":"0387c81c-4889-498b-b771-2641a865de4b","params":{"switch":"on"},"sequence":"1535743289125","userAgent":"app"}

Ezzel pedig kikapcsolta:

{"action":"update","deviceid":"10002cxxxx","apikey":"0387c81c-4889-498b-b771-2641a865de4b","selfApikey":"0387c81c-4889-498b-b771-2641a865de4b","params":{"switch":"off"},"sequence":"1535743291209","userAgent":"app"}

Azért néha próbálkozott feloldani az eu-disp.coolkit.cc DNS-t a kütyü, hátha megszánja valaki némi  netkapcsolattal, de nem jött be neki. :)

Némi keresés után úgy tűnik az eWeLink felhő parancsai pontosan megfelelnek a fenti, LAN módban lokálisan használtaknak, az alábbi mintapéldában egy eWeLink mobilalkalmazást utánzó programot fedeztem fel:

https://github.com/AlayshChen/sonoff-server/blob/master/sonoff-server.py

A protokoll analízise pedig megtalálható itt:

https://blog.nanl.de/2017/05/sonota-flashing-itead-sonoff-devices-via-original-ota-mechanism/

Sonoff LAN mód - Domoticz MQTT fordító alkalmazás:

https://github.com/enesbcs/sonofflan2mqtt

A bejegyzés trackback címe:

https://bitekmindenhol.blog.hu/api/trackback/id/tr5214214659

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.

Támogatók:
okosotthon.jpg
allterco.jpg

Utolsó kommentek

  • szenorb: Hello. Bekötöttem 12V-ra , a bemetére egy mozgás érzékelőt kötöttem. Szépen kapcsol a relé a késle... (2023.06.14. 06:48) Shelly okosrelé (Shelly1)
  • Melanoheliophobia: Üdv! Kb. 2 éve vásároltam két ugyanilyen okos izzót. Sajnos az egyik még garancia idő alatt eltávo... (2023.05.03. 16:50) Shelly Vintage okosizzó
  • eNeS: Lehetséges, bár az ESP8266-ot lassan ideje elfelejteni, ha nem helyi hálózatra akarsz vele forgalm... (2023.04.02. 08:43) Tasmota szkriptek
  • eNeS: @tomih: Thonnyban rebootot nyomva nekem se megy az NTP. De mikor lekapcsoltam a Thonnyt és rebooto... (2023.04.02. 08:40) Raspberry Pico és a LAN (W5100S-EVB-Pico)
  • krump_lee: Kedves eNeS! ESP8266 tasmota-val szenvedek, hiemq kapcsolat sehogy nem jön össze, sehol nem talál... (2023.04.02. 08:31) Tasmota szkriptek
  • Utolsó 20

Címkék

433mhz (12) alkatrész (22) alternatív kapcsoló (2) amg8833 (1) analóg (2) android (1) arduinoeasy (5) audio (1) automatizálás (3) bemenet (3) bk7231n (1) ble (1) blitzwolf (4) bluetooth (9) bridge (2) camhi (2) csináld magad (22) dimmer (1) diy (28) do-it-yourself (27) domoticz (11) ds18b20 (1) ebay (3) érintő (2) érintőkapcsoló (7) érzékelő (11) esp-01 (2) esp32 (11) esp8266 (21) espeasy (2) espurna (1) esp projekt (18) Eview7 (1) ewelink (1) feldolgozó (1) felhő (1) fényérzékelő (1) firmware (7) flame detector (1) fogyasztásmérő (5) ftdi (1) füstérzékelő (1) gázérzékelő (1) gpio (1) hang (4) hangjelző (1) hőmérséklet (22) https (1) ikea (1) impulzus relé (1) izzó (2) javascript (1) jelenlétérzékelő (3) kamera (18) keresztkapcsoló (1) kézmozdulat (1) kijelző (3) kimenet (21) konnektor (8) lan (9) lángérzékelő (2) led (3) linux (4) logic level converter (1) lua (1) lux (1) maple mini (2) mcu (3) micropython (1) mikrovezérlő (2) milkv (1) mobil (1) mosfet (1) mozgás (5) mpyeasy (4) mq-2 (2) mqtt (3) működtető rendszer (5) multiroom (1) nedvesség (1) neo (1) neopixel (1) Node-RED (1) nvr (4) nyitás (7) okosház (4) okosizzó (3) okosotthon (8) oled (1) onvif (8) openbeken (1) opencv (1) openwrt (4) orange pi (4) páratartalom (6) php (1) pico (1) pi pico (2) poe (1) programozás (9) projekt (25) proximity olvasó (1) python (2) raspberry (14) raspberry projekt (6) raspbian (1) reed (1) relé (27) rf (2) rgb (6) rock pi (1) rögzítő (2) rp2 (1) rpieasy (1) rtc (1) shelly (24) smartwise (1) solid state relay (1) sonoff (20) SonOTA (1) soros (1) ssl (1) ssr (1) stm32 (4) szenzor (11) szilárdtest relé (1) szintillesztő (2) sziréna (1) szkript (3) szünetmentesítés (4) t1 (1) tasmota (8) távirányító (3) Telegram (1) termékteszt (85) termosztát (2) touch (2) ups (5) usb (7) usb hub (1) valós idejű óra (1) vezérlések (20) vezérlő (5) világítás (5) villanykapcsoló (12) webkamera (1) wiegand (1) wifi (32) ws2812 (1) xiaomi (5) xm (4) xmeye (4) yoosee (1) zigbee (16) zwave (3) Címkefelhő
süti beállítások módosítása