Seite 1 von 1
Tür-/ Fensterkontakte OH2
Verfasst: 26. Jan 2022 16:08
von mike-eddk
Hallo, ich habe OP2 im docker am laufen.
Für meine Türkontakte möchte ich die Daten über die API der Phoscon API einlesen und verarbeiten, die Phoscon App läuft auf einer anderen Maschine.
Die AP liefert:
Code: Alles auswählen
{
"config": {
"battery": 100,
"on": true,
"reachable": true,
"temperature": 1800
},
"ep": 1,
"etag": "342c39352e9",
"lastannounced": null,
"lastseen": "2022-01-26T14:42Z",
"name": "BUE-Fenster",
"state": {
"lastupdated": "2022-01-26T14:42:58.136",
"open": false
},
"swversion": "20161128",
"type": "ZHAOpenClose",
}
als items habe ich
Code: Alles auswählen
String BUE_tuer_kontakt "Büro Test"
Number BUE_tuer_kontakt_state "Bürofenster " { http="<[http://10.1.5.9/api/19DAC689BB/sensors/20:1500:JSONPATH($.state)]" }
und als rule:
Code: Alles auswählen
rule "Change_BUE_kontakt"
when
Item BUE_tuer_kontakt_state changed
then
var String value = transform("JSONPATH", "$.open", BUE_tuer_kontakt_stage.toString)
if ( value == 'true'){
switchstate = "offen"
// Pushnachricht
} else {
switchstate = "geschlossen"
}
BUE_tuer_kontakt.postUpdate(switchstate)
end
Leider ist "state.open" immer NULL.
Ich hab schon einiges probiert, bei den Temperaturen und Luftfeuchtigkeiten über die gleiche API funktioniert das, kann mir jemand auf die Sprünge helfen?
Am Ende möchte ich einen Anzeige "offen" / "geschlossen" und ein Pushnachricht über telegram
Re: Tür-/ Fensterkontakte OH2
Verfasst: 26. Jan 2022 18:22
von udo1toni
Bitte vermeide unbedingt Doppelpostings, das ist echt sehr nervig, ständig das selbe Posting zu sehen zu bekommen, unter unterschiedlichen Titeln. Die Wahrscheinlichkeit einer Antwort steigt dadurch nicht.
Hast Du JSONPATH installiert?
Hast Du das http1 Binding installiert?
Warum openHAB2?
Re: Tür-/ Fensterkontakte OH2
Verfasst: 26. Jan 2022 21:08
von mike-eddk
Sorry, den ersten Post hab ich, so dachte ich gelöscht, weil in der falschen Kategorie.
JSONPATH und http1 Binding sind installiert, ich frag ja schon viele verschiedene Sensoren ab.
Ich hab das System schon lange am laufen und auch schon versucht auf OP3 umzusteigen, ha b da aber noch lange nicht all das umsetzen geschafft was ich bee OH2 bereits nutze.
Re: Tür-/ Fensterkontakte OH2
Verfasst: 26. Jan 2022 23:32
von udo1toni
Wo ich gerade auf Deinen Code schaue... Du lädst $.state in ein Number Item. Number Items können keine Strings aufnehmen, nur Zahlen. $.state liefert aber
Code: Alles auswählen
{
"lastupdated": "2022-01-26T14:42:58.136",
"open": false
}
Es ist immer eine gute Idee, bei solchen Abfragen zunächst mit einem String Item zu beginnen, das kann jegliche Status aufnehmen. Erst wenn man so sichergestellt hat, dass der Inhalt sicher immer eine Zahl ist, ändert man den Itemtyp auf Number ab. Eigentlich möchtest Du ein Contact Item als Ziel haben, was leider mit openHAB2 nicht ohne Verrenkungen geht. Allerdings wäre die sauberer Variante diese hier:
Code: Alles auswählen
Contact BUE_tuer_kontakt "Büro Fenster [%s]"
String BUE_tuer_kontakt_state "Bürofenster " { http="<[http://10.1.5.9/api/19DAC689BB/sensors/20:1500:JSONPATH($.state.open)]" }
Code: Alles auswählen
rule "Setze BUE_kontakt"
when
Item BUE_tuer_kontakt_state changed
then
var soll = CLOSED
if(newState == "true")
soll = OPEN
BUE_tuer_kontakt.postUpdate(soll)
end
Wohlgemerkt: soll ist keine String Variable! newState ist eine implizite Variable, die zur Verfügung steht, sobald die Rule durch ein changed getriggert wurde. Wahlweise kannst Du natürlich auch den Itemnamen verwenden: if(BUE_tuer_kontakt_state.state.toString == "true")
Ginge auch als Einzeiler
Code: Alles auswählen
rule "Setze BUE_kontakt"
when
Item BUE_tuer_kontakt_state changed
then
BUE_tuer_kontakt.postUpdate(if(BUE_tuer_kontakt_state.state.toString == "true") OPEN else CLOSED)
end
Die Verrenkung wäre übrigens, eine JS Transformation zu schreiben, welche das JSNOPATH ergebnis direkt auswertet und als Ausgabe OPEN oder CLOSED liefert. Dann kann man direkt ein Contact Item verwenden, ganz ohne Umweg über Rules.
das Contact Item kann dann direkt das Fenster-Icon dynamisch anzeigen (offen/geschlossen) und wenn Du beim Item den Text in deutsch stehen haben möchtest, nimmst Du die MAP Transformation und packst sie mit ins Label. Damit wird dann nur die Anzeige beeinflusst.
Re: Tür-/ Fensterkontakte OH2
Verfasst: 27. Jan 2022 08:02
von mike-eddk
Danke dir, funktioniert prima, hab auch die Pushnachricht mit telegram hin bekommen.
Wie bekomm ich die MAP jetzt in das Label, im transform-Ordner liegt eine de.map drin?
Bezüglich OH3 brauch ich noch mehr Unterstützung, such noch jemanden der mit mal ne Stunde über die Schulter schaut, was ich da bei den Schalten so falsch mache. Hatte versucht die alten Daten einfach zu migrieren, leider ohne Erfolg.
Re: Tür-/ Fensterkontakte OH2
Verfasst: 27. Jan 2022 14:36
von udo1toni
Na, Du definierst das Item so:
Code: Alles auswählen
Contact BUE_tuer_kontakt "Büro Fenster [MAP(de.map):%s]"
Wahlweise kannst Du die de.map anpassen oder auch eine eigene contact.map oder meinwunschname.map im selben Verzeichnis anlegen, Inhalt ist immer Wert links vom Gleichheitszeichen wird durch Wert rechts vom Gleichheitszeichen ersetzt.
Links vom Gleichheitszeichen müssen Leerzeichen escapet werden (Dies\ ist\ ein\ Text\ mit\ Leerzeichen=Wer denkt sich denn so einen Schwachsinn aus?).
Anführungszeichen werden als Teil des Status angesehen, dürfen also nur da stehen, wenn sie auch im Status vorkommen (also eher nicht...).
Die Schreibweise ist exakt anzugeben, ON, On, on und oN sind vier verschiedene Zustände...
Re: Tür-/ Fensterkontakte OH2
Verfasst: 27. Jan 2022 15:14
von mike-eddk
Funktioniert leider noch nicht, es wird immer noch CLOSED / OPEN angezeigt
Code: Alles auswählen
Contact BUE_tuer_kontakt "Büro Fenster [MAP(zimmer.map):%s]"
String BUE_tuer_kontakt_state "Bürofenster" { http="<[http://10.1.5.9/api/19DAC689BB/sensors/20:1000:JSONPATH($.state.open)]" }
meine transform/zimmer.map
Eine weitere Frage wäre, wie bekomme ich das Mapping auch bei den Nachrichten hin?
telegram.rules
Code: Alles auswählen
rule "Status BUE_kontakt"
when
Item BUE_tuer_kontakt changed
then
sendTelegram("bot1", "Bürofenster Status geändert: %s",BUE_tuer_kontakt.state)
end
Re: Tür-/ Fensterkontakte OH2
Verfasst: 27. Jan 2022 22:04
von udo1toni
Hast Du die MAP Transformation auch installiert?
Innerhalb er Rule kannst Du den Transformation Service ebenfalls aufrufen, dort als Action:
Code: Alles auswählen
val String state_de = transform("MAP", "zimmer.map", BUE_tuer_kontakt.state.toString)
Anschließend kannst Du den String im sendTelegram einfach zusammensetzen.
Code: Alles auswählen
sendTelegram("bot1", "Bürofenster Status geändert: " + state_de)
Re: Tür-/ Fensterkontakte OH2
Verfasst: 28. Jan 2022 06:49
von mike-eddk
MAP Transformation installiert und schon gehts, Danke Dir!
Re: Tür-/ Fensterkontakte OH2
Verfasst: 28. Jan 2022 11:33
von udo1toni