brutella / hkknx-public

hkknx is a HomeKit KNX bridge for KNX.
https://hochgatterer.me/hkknx
101 stars 6 forks source link

Wetterstation - HomeKit Integration #116

Closed hr-automation closed 3 years ago

hr-automation commented 3 years ago

Hallo @brutella

Ich habe mir nun eine Wetterstation zugelegt (Theben 1409201).

Nun möchte ich mit den Werten arbeiten. (z.B. ab gewisser Geschwindigkeit Markise einfahren, Raffstore hoch etc.) Wie ich herausgefunden habe, bietet Apple HomeKit von Haus aus keinerlei Option von hinzufügen derartiger Geräte um nachfolgend die Automationen zu erstellen.

Ansätze für Umwege, oder kannst Du hier etwas anpassen? Oder muss ich den Weg über ein Skript gehen?

Beispiele zu Datentypen der Werte: Windgeschwindigkeit (km/h) = DPT9 Regensensor = DPST1-2

Danke im Voraus.

brutella commented 3 years ago

Eine Wetterstation an sich kann nicht in HomeKit abgebildet werden. Jedoch können einzelne Messwerte über Sensoren (zB Temperatursensor, Feuchtigkeitssensor) in HomeKit angezeigt werden.

Leider gibt es aber keinen Windsensor. Daher müsstest du eine Automation "ab gewisser Geschwindigkeit Markise einfahren" mit einem Skript realisieren. Sollte relativ simpel sein.

Lass es mich wissen, wenn du dahingehend Hilfe brauchst.

hr-automation commented 3 years ago

Danke für Deine schnelle Antwort.

Ok - dann muss ich mich ernsthaft mit den Skripts auseinandersetzen. Für Denkansätze bin ich da sehr dankbar.

Bzgl. Feuchtigkeitssensor als Alternative zum Regensensor bräuchte ich den Datentyp DPST1-2 bzw. kommt da ein BOOLEAN Wert übermittelt.

brutella commented 3 years ago

Für Boolesche Werte kannst du hkknx.ParseBool oder hkknx.ParseDPT1 verwenden.

hr-automation commented 3 years ago

Ok, danke - ich werde dies einmal probieren. Melde mich bei Erfolg bzw. Misserfolg.

hr-automation commented 3 years ago

Wie schon vermutet, stoße ich teilweise ein bisschen an Grenzen. Leider bekomme ich eigtl. nur Fehler. (Kommentiert in Pastebin mit allen möglichen Varianten)

Könntest Du einen Anstoß geben, was ich falsch mache? Danke

https://pastebin.com/813LiXut

image

brutella commented 3 years ago

Das Auslesen von der Gruppenadresse 1/1/150 scheint ja zu funktionieren. Und da du die Funktion GroupReadBool verwendest, werden die ausgelesenen Bytes gleich zu einem Booleschen Wert umgewandelt. Bei nicht-booleschen Werten verwendet man GroupRead.

Anders funktioniert das Empfangen von Schreib-Telegrammen. Mit dem Aufruf GroupWriteNotify("1/1/151") bekommt man als Rückgabewert einen Channel. Ein Channel ist eine Datenstruktur die, wenn ein Schreib-Telegramm vom KNX Bus empfangen wird, die Bytes liefert.

Auslesen kann man einen Channel mit dem <- Operator.

var ATemp = hkknx.GroupReadNotify("1/1/151")
var buf = <-ATemp

Das Skript wird solange pausiert, bis ein Schreib-Telegramm auf die Gruppenadresse 1/1/151 empfangen wird. Die empfangene Bytes werden dann in die Variable buf gespeichert. Danach muss man die Bytes noch in einen lesbaren Wert (Integer, Float, usw.) umwandeln. Dazu verwendet man die Funktionen ParseDPT.... In deinem Fall ParseDPT9001.

var ATemp = hkknx.GroupReadNotify("1/1/151")
var buf = <-ATemp
var value = hkknx.ParseDPT9001(buf)

Dann kann man den Wert bspw. in einem if-Statement verwenden.

if value > 25 {
    ...
}

Hoffe, dass macht so Sinn für dich.

hr-automation commented 3 years ago

Danke hat alles nach langem "Lernen" geklappt!