Fens­ter­kon­tak­te in ioBro­ker integrieren

Lese­dau­er 10 Minu­ten

Ich muss mal eine Lan­ze für das ioBro­ker-Forum bre­chen. Aber eine ganz dicke Lan­ze! Kei­ne Spur von „RTFM” oder „Lies die FAQ” oder gar „Kannst Du nicht die SuFu bedie­nen?”. Die Leu­te hel­fen, wo sie nur kön­nen. Ich wuss­te auch nicht, wie ich die 433 MHz Fens­ter­kon­tak­te in das Smar­tHome als Gerä­te bekom­me. Aber das ist eigent­lich nicht sooo schwer, auch wenn es eben nicht auto­ma­gisch funktioniert. 

Ziel:

Im ioBro­ker wer­den wir uns ein Skript erstel­len, dass ein von der Bridge emp­fan­ge­nes Daten­pa­ket zer­legt und einem von uns erstell­ten Gerät zuweist.

Hier wer­de ich wirk­lich alles Schrit-für-Schritt erklä­ren, sodass es auch abso­lu­te N00bs (Anfän­ger) ver­ste­hen können.

Ver­wen­de­te Hardware:

Gol­den Secu­ri­ty GS-WDS07(1)
Son­off RF Bridge 433(1)

IMG 20210401 194823
Kar­ton mit der Son­off-Bridge und den Fensterkontakten

War­um denn bit­te kei­ne Zig­bee- oder Home­ma­tic-Tür-/Fens­ter­kon­tak­te (TFK)?

Da kos­tet ein Kon­takt min­des­tens einen Zeh­ner. Meis­tens eher 15 bis 20 Euro.
Wir haben aber 34 Fens­ter und Türen, die wir ger­ne über­wacht sehen würden.
340 Euro zzgl. einer jewei­li­gen Bridge (oder deren meh­re­re) ergibt Kos­ten von min­des­tens 400 bis 800 Euro.
Das ist nicht darstellbar!
Das ren­tiert sich niemals!

Für die TFK habe ich aus Chi­na (kurz vor Coro­na) pro Stück 2,45 Euro bezahlt.
Mit Versand!
Die bereits mit Tas­mo­ta geflash­te Son­off Bridge schlug mit nicht ganz 20 Euro zu Buche.
Auf­ge­run­det nicht ganz 105 Euro, also ein Viertel.

Nach­tei­le:

Die Inte­gra­ti­on ist nicht so geschmei­dig wie bei den teu­re­ren TFK
Die TFK sind klobig
Sen­den unverschlüsselt
Sta­tus nicht abfrag­bar, rei­ne Sender

Vor­tei­le:

Preis­wert in der Anschaffung
Bil­lig im Unter­halt durch nor­ma­le AAA-Batterien
Gut zu modifizieren
Leicht mit einem Sabo­ta­ge-Alarm erweiterbar

Das Reed-Relais lässt sich ein­fach aus­lö­ten und (z. B. für den Ein­satz in einem Brief­kas­ten) fle­xi­bel einsetzen.
Die Anten­ne kann man leicht durch einen pas­sen­den Draht erset­zen. Eben­falls gut für die Ver­wen­dung als Postmelder.

IMG 20210401 194936
Lie­fer­um­fang eines TFK im Beu­tel: TFK, Magnet, zwei Klebepads

IMG 20210408 160102
Betrieb mit einer AAA Bat­te­rie, die ca. 1 Jahr lang hält

IMG 20210408 160122
Bas­tel­freund­li­cher Auf­bau mit vor­ge­bohr­ten Lötpunkten

IMG 20210408 160133
Ober­sei­te mit Reed-Relais, Anten­ne und LED

 

Grund­sätz­li­ches:

Ver­su­chen wir zu ver­ste­hen, wie die­se Kon­tak­te mit der güns­tigs­ten und ein­fachs­ten Lösung, einer Son­off 433 MHz Bridge (Tas­mo­ta geflasht), über­haupt funktionieren.
Die Bridge emp­fängt nur Daten wie:

TFK Sonoff Empfang resized

18:58:56 MQT: tele/433-Bridge/RESULT = {"Time":"2021-04-01T18:58:56","RfReceived":{"Sync":14040,"Low":500,"High":1360,"Data":"44D00E","RfKey":"None"}}
18:58:57 MQT: tele/433-Bridge/RESULT = {"Time":"2021-04-01T18:58:57","RfReceived":{"Sync":13980,"Low":530,"High":1430,"Data":"44D00A","RfKey":"None"}}

Uns inter­es­siert nur der über­tra­ge­ne Daten­satz („Data”): „44D00E”
Davon sind die ers­ten vier Byte die ID des TFKs (Tür-Fens­ter-Kon­takt). In die­sem Fal­le „44D0”.
Der Sta­tus des Fens­ter­kon­tak­tes besteht aus den letz­ten bei­den Bytes: „0E”.

Es gibt fol­gen­de Zustände:
0E = geschlossen
0A = offen
06 = Bat­te­rie leer

ID und ZUSTAND wer­den mit sechs Bytes übertragen:
IDIDZZ

Bei­spiel:

Die Bridge emp­fängt die Mel­dung 12340E, das bedeu­tet, dass der Fens­ter­kon­takt 1234 den Zustand 0E mel­det. Das Fens­ter ist also geschlossen.
Mit mehr kön­nen und müs­sen wir gar nicht arbeiten.

 

Die Son­off-Bridge konfigurieren

Wir ändern die IP-Adres­se unse­res Rech­ner zu 192.168.4.2 und ver­bin­den uns mit dem WLAN des Sonoff-Adapters.
Wir öff­nen des­sen Webend unter 192.168.4.1 und stel­len die Bridge so ein, dass sie sich mit unse­rem Netz­werk ver­bin­det. –> Con­fi­gu­re WIFI

TFK Sonoff WLAN resized
WLAN kon­fi­gu­rie­ren (Bei­spiel)

Nun stel­len wir auf unse­rem Rech­ner wie­der unse­re alte IP-Adres­se (oder DHCP) ein, war­ten einen Moment und schau­en dann im Backend unse­res Rou­ters nach, wel­che IP-Adres­se die Bridge zuge­wie­sen bekom­men hat.

Aus mei­ner Sicht kom­men wir hier zu einem ech­ten Design-Feh­ler, denn auf der Bridge kön­nen wir kei­ne fes­te IP-Adres­se eintragen!

Das müs­sen wir im Backend unse­res Rou­ters machen. Das vari­iert je nach Modell, da kann ich jetzt nicht helfen.
Zur Not geht es aber auch ohne, das macht Euer Netz­werk aber nicht übersichtlicher.

Nach der Instal­la­ti­on von Tas­mo­ta weiß das Gerät nicht, was es ist. Wir kli­cken auf –> Con­fi­gu­re Modul und stel­len das wie folgt ein:

Sonoff Bridge Type resized
Modul Type: Son­off Bridge (25), GPI­Os brau­chen wir hier nicht

Wie­der zurück –> Configuration
Auf —> Con­fi­gu­re MQTT

TFK Sonoff MQTT resized
Host: Die IP-Adres­se Eures ioBrokers
Port: Den habe ich geän­dert, weil bei mir bereits der Strom­zäh­ler über die­sen Port sen­det, ich aber die ein­ge­hen­den Daten der Bridge nur mit dem Son­off-Adap­ter aus­le­sen möchte.
Cli­ent: Erscheint als Name im ioBroker
User: Einen sel­ber aus­ge­dach­ten MQTT-User
Pass­wort: Ein selbst aus­ge­dach­tes MQTT-Passwort
Topic: Erscheint als Daten­punkt im ioBroker

Wir wech­seln in ioBroker

Den Son­off-Adap­ter installieren:

Im ioBro­ker gehen wir auf Adap­ter —> Fil­ter und geben dort „Son­off” ein. Die­sen Adap­ter über das Drei-Punk­te-Sym­bol installieren.

TFK Sonoff Adapter installieren resized

Wir wech­seln zu den Instan­zen und kli­cken auf den Schrau­ben­schlüs­sel bei Sonoff

TFK Sonoff Adapter Konfig resized
Hier geben wir den geän­der­ten Port, den Namen und das Pass­wort unse­res MQTT-Users ein, mit dem sich die Bridge anmel­den möchte

Ist dies erle­digt, fin­den wir unter —> Objek­te den Adap­ter sonoff.0 und den Namen unse­rer Bridge als Daten­punkt mit Unterpunkten:

TFK Sonoff Objekt resized
Uns inter­es­siert hier „ftRe­cei­ved” und dar­un­ter „Data”.
Bewe­gen wir den Magnet an unse­rem TFK, ändert sich der Wert von Data (letz­te Spalte).
Das ist gut.

Eige­ne Devices erstellen:

ioBro­ker bie­tet uns die Mög­lich­keit eige­ne Devices zu erstel­len. Davon machen wir Gebrauch.

Unter —> Objek­te fin­den wir bereits einen ange­leg­ten Daten­punkt, näm­lich „0_userdata.o”.
Unter die­sem kön­nen wir wei­te­re, eige­ne Daten­punk­te erstellen.
Dazu kli­cken wir auf —> „0_userdata.o” und dann auf das —> „+”-Sym­bol.

TFK neues geraet resized
Den ers­ten Daten­punkt, den wir anle­gen, der bekommt den Typ „Gerät” zugewiesen.

TFK Geraet erstellt resized
Die­sen wäh­len wir durch einen Klick aus und fügen ihm mit dem „+”-Sym­bol einen Toch­ter­da­ten­punkt zu.

TFK Datenpunkt batterie resized
Den ers­ten nen­nen wir „Bat­te­rie leer”, er ist vom Typ her ein „Daten­punkt” und bekommt als Daten­punkt­typ „Logik­wert” zugewiesen.

TFK fertiges Device resized
Den zwei­ten Daten­punkt nen­nen wir „Fens­ter offen”, auch er ist ein Daten­punkt mit dem Typ Logikwert.

War­um haben wir als Daten­punkt qua­si Fra­gen defi­niert? „Fens­ter offen?” „Bat­te­rie leer?”
Weil der TFK nur die­se Zustän­de sen­det und wir die­se gut mit einem Logik­wert (true, fal­se) abbil­den können.

Skript erstel­len

—> Scrip­te —> „+” —> Blockly

TFK Blockly erstellen resized 1
Wir erstel­len ein neu­es Blockly-Script
Das Script soll die Ände­run­gen, die es von der Bridge emp­fängt in unse­re oben erstell­ten Gerä­te als Zustän­de schreiben.
Irgend­wie muss das Script a getrig­gert wer­den, wenn sich etwas bei der Bridge tut.

TFK Trigger resized
Ankli­cken: —> Trig­ger —> Falls Objekt – Objekt ID

Der Trig­ger wird in das Script eingefügt.
Die Objekt-ID ändern wir, indem wir sie ankli­cken. Es erscheint die Über­sicht der Objekt. Wir suchen das Objekt sonoff.

TFK Blockly Datenpunkt Trigger resized2
Unter unse­rer Bridge —> RESULT —> RfRe­cei­ved —> Data aus­wäh­len und OK anklicken.
„Falls Objekt ID – Objekt ID” wird in die­sen Daten­punkt geändert.

Falls sich also etwas ändert, wol­len wir dies in zwei Varia­blen schrei­ben: ID sowie Zustand.
Wir benö­ti­gen als Ers­tes eine Fens­ter ID (oder wie immer Ihr sie nen­nen möchtet):
—> Varia­blen —> Varia­ble erstel­len —> „Fenster_​ID”.

tfk Blockly Var Fenster ID resized
Fens­ter ID erstel­len und „set­ze auf” auswählen.

TFK Blockly setze Fenster ID resized
Falls sich beim Daten­punkt Data der Bridge etwas ändert, dann set­ze die Varia­ble Fenster_​ID auf… einen Teil des über­mit­tel­ten Wertes.
Dazu brau­chen wir —> Text” —> „Im Text nimm…”

tfk blockly text ab resized
Dies ändern wir auf „nimm Teil ab ers­ter” „bis” „Buch­sta­be” und löschen dort die Varia­ble „Text”. Sie wird durch einen —> Trig­ger ersetzt

TFK Blockly trigger objekt id resized
Wir wäh­len den Trig­ger —> „Objekt ID”

TFK Blockly text trigger wert resized
Und ändern ihn in „Wert”.
Nun haben wir einen Text mit dem Wert, des Daten­punk­tes „Data”. Von die­sem brau­chen wir nur die ers­ten vier Byte (Buch­sta­ben in dem Fal­le) für unse­re Fenster_ID

TFK Blockly Mathe Zahl resized
—> Mathe­ma­tik —> Zahl

TFK Blockly Fenster ID vollstaendig resized
Die Zahl ändern wir auf „4” und so wird die Varia­ble Fenster_​ID auf die ers­ten vier Buch­sta­ben von „Data” gesetzt. Pri­ma! Fehlt nur noch der Zustand!

TFK Blockly Var Zustand resized
—> Varia­blen —> Varia­ble erstel­len —> „Zustand”. „Set­ze Zustand” ankli­cken und auch in unse­re Klam­mer „Falls Objekt” hineinziehen.

Wir kli­cken unser grü­nes „im Text” Puz­zle­stück an. Es wird gelb umrandet.
Strg‑C, Strg‑V, eine Kopie davon wird eingefügt
Wir las­sen das neue Stück an „set­ze Zustand” ein­ras­ten und ändern es wie folgt:

TFK Blockly Zustand vollstaendig resized
„Nimm Teil ab ers­ter” ändern wir in „nimm Teil ab”. Es erscheint ein Platz­hal­ter für die­se Zahl. —> Mathe­ma­tik —> Zahl —> ankli­cken, in die Lücke zie­hen und auf „5” ändern.
Die bis-Zahl ändern wir auf „6”. Nun wer­den die Stel­len 5 und 6, der Zustand aus „Data”, an die Varia­ble „Zustand” übergeben.

Somit haben wir den „Data”-Wert zer­legt und den Varia­blen „Fenster_​ID” und „Zustand” zugewiesen.

Der Zustand für „Bat­te­rie leer” wird bei neu­en TFKs eher nicht über­tra­gen. Trotz­dem soll­ten wir ihn set­zen, damit unse­re erstell­ten Gerä­te einen ers­ten Zustand zuge­wie­sen bekommen.
Kei­ne Sor­ge, falls sich die­ser Zustand ändern soll­te, wer­den wir in den nächs­ten Schrit­ten den tat­säch­lich gesen­de­ten Zustand berücksichtigen.
Wir benö­ti­gen also noch die Varia­ble „Batterie_​leer”.

TFK Var Batterie leer resized
—> Varia­blen —> Varia­ble erstel­len —> „Batterie_​leer”.

—> „set­ze Batterie_​leer auf” ankli­cken und in die Trig­ger-Klam­mer ein­fü­gen. Nur… die­se Varia­ble soll kei­ne Zahl sein, son­dern ein Logikwert.

TFK Blockly Batt Logik resized
Also —> Logik —> wahr ankli­cken und ein­ras­ten lassen

TFK Blockly Batt vollstaendig resized
Den Wert auf „falsch” ändern, denn die Bat­te­rie ist nicht leer.

Nun müs­sen wir die Varia­blen füllen:
Wir benö­ti­gen dazu —> Logic —> „falls mache”:

falls mache resized
Auswählen

fals mache eingefuegt resized
In die Trig­ger-Klam­mer setzen

fals mache logik gleich resized
— Logik —> „ist wahr” einfügen

falls mache wert resized
—> Text ein­fü­gen, mit „06” (Bat­te­rie leer) definieren

fals mache zustand 06 resized
—> Varia­ble „Zustand” einfügen
Unter „mache” set­zen wir —> Varia­blen —> set­ze Batterie_​leer einfügen

falls mache batt leer wahr resized
—Logik —> wahr/​falsch ein­fü­gen und auf „wahr” stellen.

sonst falls hinzu
Auf das Zahn­rad­sym­bol klicken

sonst falls
Zwei­mal „sonst falls” nach rechts ziehen

sonst falls fenster offen resized
Das ers­te logisch „ist wahr” von „falls” kopie­ren und bei „sonst falls” ein­set­zen. Text­feld auf „0A” (offen) ändern.

neue variable fenster offen resized
—Varia­blen —> Varia­ble erstel­len —> „Fenster_​offen”

fenster offen resized
—> Varia­blen —> „set­ze Fenster_​offen auf” einfügen,
—> Logik —> „wahr” anhängen

fenster offen fertig
Logik­wert und Varia­ble der Ein­fach­heit hal­ber wie­der kopie­ren und am zwei­ten „sonst falls” anhängen.
Text­feld auf „0E” ändern, Logik­wert auf „falsch”

Nun sind alle Varia­blen defi­niert und wer­den mit Daten gefüllt. Die­se Varia­blen müs­sen nun in die Daten­punk­te „Batterie_​leer” und „Fenster_​offen” der pas­sen­den eige­nen Gerä­ten kopiert werden.

Zustän­de zum Gerät übertragen

der fall ist resized
—> Logik —> „Der Fall ist…”
In die Trig­ger-Klam­mer ziehen.
—> Varia­blen —> „Fenster_​ID” einfügen

fenster id abfragen resized
—> Text —> „Text” einfügen

SPÄTESTENS JETZT DAS SKRIPT SPEICHERN!

id kopieren resized
Zurück in die Objekt­lis­te wechseln.

Fens­ter­kon­tak­te anlernen

Den Magne­ten an den gewünsch­ten Fens­ter­kon­takt hal­ten (oder das Fens­ter eben öff­nen oder schließen).
Unter sonoff.0 den gera­de emp­fan­ge­nen Data-Wert mit dem Kopier-Sym­bol kopieren.

Fensterkontakte
Die­sen Wert ein­fach in das Text­feld einfügen.

im falle von copy gekueruzt resized
Die letz­ten bei­den Stel­len (den Zustand) löschen. Wir haben nun eine Abfra­ge zu die­sem Fensterkontakt.

aktualisiere objekt resized
Unter „machen” benö­ti­gen wir —> Sys­tem —> „aktua­li­sie­re Objekt ID”

aktualisiere eingefuegt resized
Wir kli­cken auf „Object ID” und wäh­ler in der sich nun öff­nen­den Übs­er­sicht der Objekte:

batterieleer resized
Den Daten­punkt „Batterie_​leer” unse­res Fensterkontaktes

batterieleer ausgewaehlt resized
—> Varia­blen —> „Batterie_​leer” einfügen.

batterileer kopiert resized
Und gleich den Block kopie­ren und einfügen.

Auf die Objekt ID „Bat­te­rie leer” kli­cken und es öff­net sich die Übersicht.

objekt fenster offen resized
Das Objekt „Fens­ter offen” auswählen.

fertig resized
In die „der Fall ist”-Klammer zie­hen, Varia­ble auf „Fens­ter offen” ändern.

aktualisiere objekt resized
—> Sys­tem —> Kommentar

kommentar resized
Die­sen Kom­men­tar über „der Fall ist” zie­hen und mit einem spre­chen­den Namen ver­se­hen, damit wir wis­sen, dass der Block dar­un­ter die Daten exakt die­ses TFK enthält.

Wir star­ten unser Script und sehen…

noch leer resized 1
Die Daten­punk­te sind oran­ge, das bedeu­tet, dass noch kei­ne Daten ver­ar­bei­tet wurden.

Jetzt schlies­sen wir das Fens­ter (oder legen den Magne­ten auf den TFK).

laeuft resized2
Die Wer­te wer­den grün und unser Script hat per­fekt gearbeitet.

Wir öff­nen das Fens­ter und…

fenster zu resized
Fenster_​offen wird wahr (true). Auch das läuft.

Wei­te­re Fens­ter­kon­tak­te kön­nen wir nun sehr ein­fach hin­zu­fü­gen, indem wir den gan­zen Block kopie­ren und wie­der unten einfügen:

noch ein kontakt resized
Fol­gen­des muss ange­passt werden:
Text­feld (ID des TFK)
„Bat­te­rie leer”-Objekt ID auf die des neu ange­leg­ten Gerä­tes „Ganz neu­er Fensterkontakt”
„Fens­ter offen”-Objekt ID auf die des neu ange­leg­ten Gerä­tes „Ganz neu­er Fensterkontakt”

Hinweise
  1. Wer­bung[][]

10 Gedanken zu „Fens­ter­kon­tak­te in ioBro­ker integrieren“

  1. Hal­lo, alles gut erklärt und mein Skript läuft auch. Aber mei­ne Fens­ter-Kon­tak­te lösen auch aus ohne dass die­se zusätz­lich im Skript ein­ge­fügt sind. Dies ist sicher nicht ganz so rich­tig. Ver­wen­de die­sel­be Bridge und die­sel­ben Kon­tak­te. Viel­leicht gibt es eine Idee dazu?
    Vie­le Grü­ße Uwe 

    Antworten
      • Also ich habe die ID des neu­en FK (4‑stellig angepasst/​geändert). Aber auch wenn ich die ID kom­plett lösche und nichts ein­tra­ge löst der Kon­takt aus. Jetzt bin ich etwas ratlos? 

        Antworten
      • Also ich bin ein Anfän­ger mit Block­ly, des­halb habe ich auch Dein Skript verwendet.
        Der FK schal­tet eine Leuch­te, die­se Leuch­te soll eben­so von wei­te­ren FK eben­so geschal­tet wer­den. Also habe ich Dein Skript dahin­ge­hend wei­ter­ge­führt, wie Du auch geschrie­ben hast (bin zumin­dest der Ansicht).

        Ich füge mal dazu etwas ein:

        var T_​C3_​BCr_​ID, Zustand, Batterie_​leer, T_C3_BCr_offen;

        on({id: ’sonoff.0.SonoffBridge.RESULT.RfReceived.Data’, chan­ge: „ne”}, async func­tion (obj) {
        var value = obj.state.val;
        var oldVa­lue = obj.oldState.val;
        T_​C3_​BCr_​ID = (obj.state ? obj.state.val : „”).slice(0, 4);
        Zustand = (obj.state ? obj.state.val : „”).slice(4, 6);
        Batterie_​leer = false;
        if (Zustand == ‚06’) {
        Batterie_​leer = true;
        } else if (Zustand == ‚0A’) {
        T_​C3_​BCr_​offen = true;
        } else if (Zustand == ‚0E’) {
        T_​C3_​BCr_​offen = false;
        }
        /​/​ Haustür­kon­takt

        switch (T_​C3_​BCr_​ID) {
        case ‚0BA1’:
        setState(„0_userdata.0.Türkontakt.Batterie_leer”/*Batterie leer*/, Batterie_​leer, true);
        setState(„0_userdata.0.Türkontakt.Tür_offen”/*Tür offen*/, T_​C3_​BCr_​offen, true);

        break;
        }
        /​/​ FKTer­ras­se­Mit­te

        switch (T_​C3_​BCr_​ID) {
        case ‚378E’:
        setState(„0_userdata.0.Türkontakt.Batterie_leer”/*Batterie leer*/, Batterie_​leer, true);
        setState(„0_userdata.0.Türkontakt.Tür_offen”/*Tür offen*/, T_​C3_​BCr_​offen, true);

        break; 

        Antworten
  2. Hal­lo, mit gro­ßem Inter­es­se habe ich dei­nen Arti­kel gele­sen. Ich bin abso­lu­ter Begin­ner bei iobro­ker und einem smar­thome. Ich habe Fens­ter­kon­tak­te die mit 868 Mhz arbei­ten. Hast du eine Idee wie ich sol­che Wer­te abfra­gen kann?? 

    Antworten

Schreibe einen Kommentar

Ich bin mit der Datenschutzerklärung und der Speicherung meiner eingegebenen Daten einverstanden.