Fensterkontakte in ioBroker integrieren

+1
Lesedauer 10 Minuten

Ich muss mal eine Lanze für das ioBroker-Forum brechen. Aber eine ganz dicke Lanze! Keine Spur von “RTFM” oder “Lies die FAQ” oder gar “Kannst Du nicht die SuFu bedienen?”. Die Leute helfen, wo sie nur können. Ich hatte auch keine Ahnung, wie ich die 433 MHz Fensterkontakte in das SmartHome als Geräte bekomme. Aber das ist eigentlich nicht sooo schwer, auch wenn es eben nicht automagisch funktioniert. 

Ziel:
Im ioBroker werden wir uns ein Skript erstellen, dass ein von der Bridge empfangenes Datenpaket zerlegt und einem von uns erstellten Gerät zuweist.
Hier werde ich wirklich alles Schrit-für-Schritt erklären, so dass es auch absolute N00bs (Anfänger) verstehen können.

Verwendete Hardware:

Golden Security GS-WDS07
Sonoff RF Bridge 433


Karton mit der Sonoff-Bridge und den Fensterkontakten

Warum denn bitte keine Zigbee- oder Homematic-Tür-/Fensterkontakte (TFK)?
Da kostet ein Kontakt mindestens einen Zehner. Meistens eher 15 bis 20 Euro.
Wir haben aber 34 Fenster und Türen, die wir gerne überwacht sehen würden.
340 Euro zzgl. einer jeweiligen Bridge (oder deren mehrere) ergibt Kosten von mindestens 400 bis 800 Euro.
Das ist nicht darstellbar!
Das rentiert sich niemals!

Für die TFK habe ich aus China (kurz vor Corona) pro Stück 2,45 Euro bezahlt.
Mit Versand!
Die bereits mit Tasmota geflashte Sonoff Bridge schlug mit nicht ganz 20 Euro zu Buche.
Aufgerundet nicht ganz 105 Euro, also ein Viertel.

Nachteile:
Die Integration ist nicht so geschmeidig wie bei den teureren TFK
Die TFK sind klobig
Senden unverschlüsselt
Status nicht abfragbar, reine Sender

Vorteile:
Preiswert in der Anschaffung
Billig im Unterhalt durch normale AAA-Batterien
Gut zu modifizieren
Leicht mit einem Sabotage-Alarm erweiterbar

Das Reed-Relais lässt sich ganz leicht auslöten und (z.B. für den Einsatz in einem Briefkasten) flexibel einsetzen.
Die Antenne kann man leicht durch einen passenden Draht ersetzen. Ebenfalls gut für die Verwendung als Postmelder.


Lieferumfang eines TFK im Beutel TFK, Magnet, zwei Klebepads


Betrieb mit einer AAA Batterie, die ca. 1 Jahr lang hält


Bastelfreundlicher Aufbau mit vorgebohrten Lötpunkten


Oberseite mit Reed-Relais, Antenne und LED

 

Grundsätzliches:
Versuchen wir zu verstehen, wie diese Kontakte mit der günstigsten und einfachsten Lösung, einer Sonoff 433 MHz Bridge (Tasmota geflasht), überhaupt funktionieren.
Die Bridge empfängt nur Daten wie:

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 interessiert nur der übertragene Datensatz (“Data”): “44D00E”
Davon sind die ersten vier Byte die ID des TFKs (Tür-Fenster-Kontakt). In diesem Falle “44D0”.
Der Status des Fensterkontaktes besteht aus den letzten beiden Bytes: “0E”.

Es gibt folgende Zustände:
0E = geschlossen
0A = offen
06 = Batterie leer

ID und ZUSTAND werden mit sechs Bytes übertragen:
IDIDZZ

Beispiel:
Die Bridge empfängt die Meldung 12340E, das bedeutet, dass der Fensterkontakt 1234 den Zustand 0E meldet. Das Fenster ist also geschlossen.
Mit mehr können und müssen wir gar nicht arbeiten.

 

Die Sonoff-Bridge konfigurieren
Wir ändern die IP-Adresse unseres Rechner zu 192.168.4.2 und verbinden uns mit dem WLAN des Sonoff-Adapters.
Wir öffnen dessen Webend unter 192.168.4.1 und stellen die Bridge so ein, dass sie sich mit unserem Netzwerk verbindet. –> Configure WIFI


WLAN konfigurieren (Beispiel)

Nun stellen wir auf unserem Rechner wieder unsere alte IP-Adresse (oder DHCP) ein, warten einen Moment und schauen dann im Backend unseres Routers nach, welche IP-Adresse die Bridge zugewiesen bekommen hat.
Aus meiner Sicht kommen wir hier zu einem echten Design-Fehler, denn auf der Bridge können wir keine feste IP-Adresse eintragen!
Das müssen wir im Backend unseres Routers machen. Das variiert je nach Modell, da kann ich jetzt nicht helfen.
Zur Not geht es aber auch ohne, macht Euer Netzwerk aber nicht übersichtlicher.

Nach der Installation von Tasmota weiß das Gerät nicht, was es ist. Wir klicken auf –> Configure Modul und stellen das wie folgt ein:


Modul Type: Sonoff Bridge (25), GPIOs brauchen wir hier nicht

Wieder zurück –> Configuration
Auf —> Configure MQTT


Host: Die IP-Adresse Eures ioBrokers
Port: Den habe ich geändert, weil bei mir bereits der Stromzähler über diesen Port sendet, ich aber die eingehenden Daten der Bridge nur mit dem Sonoff-Adapter auslesen möchte.
Client: Erscheint als Name im ioBroker
User: Einen selber ausgedachten MQTT-User
Passwort: Ein selbst ausgedachtes MQTT-Passwort
Topic: Erscheint als Datenpunkt im ioBroker

Wir wechseln in ioBroker

Den Sonoff-Adapter installieren:
Im ioBroker gehen wir auf Adapter —> Filter und geben dort “Sonoff” ein. Diesen Adapter über das Drei-Punkte-Symbol installieren.

Wir wechseln zu den Instanzen und klicken auf den Schraubenschlüssel bei Sonoff


Hier geben wir den geänderten Port, den Namen und das Passwort unseres MQTT-Users ein, mit dem sich die Bridge anmelden möchte

Ist dies erledigt, finden wir unter —> Objekte den Adapter sonoff.0 und den Namen unserer Bridge als Datenpunkt mit Unterpunkten:


Uns interessiert hier “ftReceived” und darunter “Data”.
Bewegen wir den Magnet an unserem TFK, ändert sich der Wert von Data (letzte Spalte).
Das ist gut.

Eigene Devices erstellen:
ioBroker bietet uns die Möglichkeit eigene Devices zu erstellen. Davon machen wir Gebrauch.

Unter —> Objekte finden wir bereits einen angelegten Datenpunkt, nämlich “0_userdata.o”.
Unter diesem können wir weitere, eigene Datenpunkte erstellen.
Dazu klicken wir auf —> “0_userdata.o” und dann auf das —> “+”-Symbol.


Den ersten Datenpunkt, den wir anlegen, der bekommt den Typ “Gerät” zugewiesen.


Diesen wählen wir durch einen Klick aus und fügen ihm mit dem “+”-Symbol einen Tochterdatenpunkt zu.


Den ersten nennen wir “Batterie leer”, er ist vom Typ her ein “Datenpunkt” und bekommt als Datenpunkttyp “Logikwert” zugewiesen.


Den zweiten Datenpunkt nennen wir “Fenster offen”, auch er ist ein Datenpunkt mit dem Typ Logikwert.

Warum haben wir als Datenpunkt quasi Fragen definiert? “Fenster offen?” “Batterie leer?”
Weil der TFK nur diese Zustände sendet und wir diese gut mit einem Logikwert (true, false) abbilden können.

Skript erstellen
—> Scripte —> “+” —> Blockly


Wir erstellen ein neues Blockly-Script
Das Script soll die Änderungen, die es von der Bridge empfängt in unsere oben erstellten Geräte als Zustände schreiben.
Irgendwie muss das Script a getriggert werden, wenn sich etwas bei der Bridge tut.


Anklicken: —> Trigger —> Falls Objekt – Objekt ID

Der Trigger wird in das Script eingefügt.
Die Objekt-ID ändern wir, indem wir sie anklicken. Es erscheint die Übersicht der Objekt. Wir suchen das Objekt sonoff.


Unter unserer Bridge —> RESULT —> RfReceived —> Data auswählen und OK anklicken.
“Falls Objekt ID – Objekt ID” wird in diesen Datenpunkt geändert.

Falls sich also etwas ändert, wollen wir dies in zwei Variablen schreiben: ID sowie Zustand.
Wir benötigen als Erstes eine Fenster ID (oder wie immer Ihr sie nennen möchtet):
—> Variablen —> Variable erstellen —> “Fenster_ID”.


Fenster ID erstellen und “setze auf” auswählen.


Falls sich beim Datenpunkt Data der Bridge etwas ändert, dann setze die Variable Fenster_ID auf… einen Teil des übermittelten Wertes.
Dazu brauchen wir —> Text” —> “Im Text nimm…”


Dies ändern wir auf “nimm Teil ab erster” “bis” “Buchstabe” und löschen dort die Variable “Text”. Sie wird durch einen —> Trigger ersetzt


Wir wählen den Trigger —> “Objekt ID”


Und ändern ihn in “Wert”.
Nun haben wir einen Text mit dem Wert, des Datenpunktes “Data”. Von diesem brauchen wir nur die ersten vier Byte (Buchstaben in dem Falle) für unsere Fenster_ID


—> Mathematik —> Zahl


Die Zahl ändern wir auf “4” und so wird die Variable Fenster_ID auf die ersten vier Buchstaben von “Data” gesetzt. Prima! Fehlt nur noch der Zustand!


—> Variablen —> Variable erstellen —> “Zustand”. “Setze Zustand” anklicken und auch in unsere Klammer “Falls Objekt” hineinziehen.

Wir klicken unser grünes “im Text” Puzzlestück an. Es wird gelb umrandet.
Strg-C, Strg-V, eine Kopie davon wird eingefügt
Wir lassen das neue Stück an “setze Zustand” einrasten und ändern es wie folgt:


“Nimm Teil ab erster” ändern wir in “nimm Teil ab”. Es erscheint ein Platzhalter für diese Zahl. —> Mathematik —> Zahl —> anklicken, in die Lücke ziehen und auf “5” ändern.
Die bis-Zahl ändern wir auf “6”. Nun werden die Stellen 5 und 6, der Zustand aus “Data”, an die Variable “Zustand” übergeben.

Somit haben wir den “Data”-Wert zerlegt und den Variablen “Fenster_ID” und “Zustand” zugewiesen.

Der Zustand für “Batterie leer” wird bei neuen TFKs eher nicht übertragen. Trotzdem sollten wir ihn setzen, damit unsere erstellten Geräte einen ersten Zustand zugewiesen bekommen.
Keine Sorge, falls sich dieser Zustand ändern sollte, werden wir in den nächsten Schritten den tatsächlich gesendeten Zustand berücksichtigen.
Wir benötigen also noch die Variable “Batterie_leer”.


—> Variablen —> Variable erstellen —> “Batterie_leer”.

—> “setze Batterie_leer auf” anklicken und in die Trigger-Klammer einfügen. Nur… diese Variable soll keine Zahl sein, sondern ein Logikwert.


Also —> Logik —> wahr anklicken und einrasten lassen


Den Wert auf “falsch” ändern, denn die Batterie ist nicht leer.

Nun müssen wir die Variablen füllen:
Wir benötigen dazu —> Logic —> “falls mache”:


Auswählen


In die Trigger-Klammer setzen


— Logik —> “ist wahr” einfügen


—> Text einfügen, mit “06” (Batterie leer) definieren


—> Variable “Zustand” einfügen
Unter “mache” setzen wir —> Variablen —> setze Batterie_leer einfügen


—Logik —> wahr/falsch einfügen und auf “wahr” stellen.


Auf das Zahnradsymbol klicken


Zweimal “sonst falls” nach rechts ziehen


Das erste logisch “ist wahr” von “falls” kopieren und bei “sonst falls” einsetzen. Textfeld auf “0A” (offen) ändern.


—Variablen —> Variable erstellen —> “Fenster_offen”


—> Variablen —> “setze Fenster_offen auf” einfügen,
—> Logik —> “wahr” anhängen


Logikwert und Variable der Einfachheit halber wieder kopieren und am zweiten “sonst falls” anhängen.
Textfeld auf “0E” ändern, Logikwert auf “falsch”

Nun sind alle Variablen definiert und werden mit Daten gefüllt. Diese Variablen müssen nun in die Datenpunkte “Batterie_leer” und “Fenster_offen” der passenden eigenen Geräten kopiert werden.

Zustände zum Gerät übertragen


—> Logik —> “Der Fall ist…”
In die Trigger-Klammer ziehen.
—> Variablen —> “Fenster_ID” einfügen


—> Text —> “Text” einfügen

SPÄTESTENS JETZT DAS SKRIPT SPEICHERN!


Zurück in die Objektliste wechseln.
Den Magneten an den gewünschten Fensterkontakt halten (oder das Fenster eben öffnen oder schließen).
Unter sonoff.0 den gerade empfangenen Data-Wert mit dem Kopier-Symbol kopieren.


Diesen Wert einfach in das Textfeld einfügen.


Die letzten beiden Stellen (den Zustand) löschen. Wir haben nun eine Abfrage zu diesem Fensterkontakt.


Unter “machen” benötigen wir —> System —> “aktualisiere Objekt ID”


Wir klicken auf “Object ID” und wähler in der sich nun öffnenden Übsersicht der Objekte:


Den Datenpunkt “Batterie_leer” unseres Fensterkontaktes


—> Variablen —> “Batterie_leer” einfügen.


Und gleich den Block kopieren und einfügen.

Auf die Objekt ID “Batterie leer” klicken und es öffnet sich die Übersicht.


Das Objekt “Fenster offen” auswählen.


In die “der Fall ist”-Klammer ziehen, Variable auf “Fenster offen” ändern.


—> System —> Kommentar


Diesen Kommentar über “der Fall ist” ziehen und mit einem sprechenden Namen versehen, damit wir wissen, dass der Block darunter die Daten exakt dieses TFK enthält.

Wir starten unser Script und sehen…


Die Datenpunkte sind orange, das bedeutet, dass noch keine Daten verarbeitet wurden.

Jetzt schliessen wir das Fenster (oder legen den Magneten auf den TFK).


Die Werte werden grün und unser Script hat perfekt gearbeitet.

Wir öffnen das Fenster und…


Fenster_offen wird wahr (true). Auch das läuft.

Weitere Fensterkontakte können wir nun sehr einfach hinzufügen, indem wir den ganzen Block kopieren und wieder unten einfügen:


Folgendes muss angepasst werden:
Textfeld (ID des TFK)
“Batterie leer”-Objekt ID auf die des neu angelegten Gerätes “Ganz neuer Fensterkontakt”
“Fenster offen”-Objekt ID auf die des neu angelegten Gerätes “Ganz neuer Fensterkontakt”

+1
Lies auch:   Schlautür: Weitere Brocken gekommen!

Schreibe einen Kommentar