NEWS
Auf KNX-Leseanfragen mit einem Wert aus ioBroker antworten
-
Hallo Zusammen,
nun, nach 1 Jahr ioBroker (kommend von fhem und nun happy), wird es Zeit, im Forum teilzunehmen.
Un natürlich gibt es auch einen Bastler-Anlass. In einer Installation habe ich KNX für die "systemrelevanten" Dinge. Taster, Schaltaktoren etc. laufen über den Bus und machen die basiscs. Für Logiken und als Schnittstelle zu anderen System sitzt dann ioBroker mit NodeRed eine Ebene höher. Dieser Aufbau funktioniert meiner Meinung nach sehr gut und bisher sehr zuverlässig.
Nur in einer Sache komme ich momentan ins Stocken, wobei ich nicht weiß ob das ggf. garnicht vom Adapter unterstütz wird. Das Anliegen habe ich habe ich bereits in Github an die/den des KNX-Adapters gereicht, erhoffe mir hier jedoch ggf. mehr und schneller Anwendererfahrung.
Allgemein formuliert möchte ich gerne auf eine KNX-Leseanfrage aus ioBroker heraus antworten.
Beispiel:
Sturmmeldungen: Wetterdaten lese ich von öffentlichen Diensten aus. Konkret ist es eine Netatmo Station. Somit habe ich aktuelle Wetterdaten in ioBroker. Nach einem Smooth-Verfahren stelle ich fest, ob ein Sturm herrscht. Wenn ja, melde ich das an eine Gruppenadresse 0/4/10. Dazu gibt es die Statusadresse 0/4/12. Dies bewirkt Dinge wie das Hochfahren von Jalousien, direkt in KNX-Aktoren eingestellt.Für den Fall eines ioBroker-Neustarts kann ich den Wert schon in und um ioBroker handhaben und rekonstuieren.
Meine SmartphoneApp (easyKnx - dazu verliere ich sicher im Forum auch ein paar Worte) fragen bei jedem Start mit einer Leseanfrage auf die Statusadresse den aktuellen Wert ab. Den weiß allerdings nur ioBroker. Wie Antworte ich auf solche eine Leseanfrage?
- Funktioniert das Antworten auf eine Leseanfrage (kommend über den KNX-Bus) in einer bestimmten Lese/Schreibe Konstellation der Objekte automatisch? Wenn ja, wie und welche?
Muss ggf. eine weitere Intelligenz auf die Leseanfrage reagieren? Intelligenz bringe ich in das Ganze mit Node-Red. Allerdings sehe ich da keine Bewegung auf dem Objekt im Falle einer Leseanfrage. D.h. Konstrukte die ich baue, werden nicht angetriggert.
Andere ähnliche Fälle:
- Nachtsignal (ioBroker gibt das Signal)
Schaltzustand von Objekten wie Wifi-LED-Controller, die über einen KNX-Taster per ioBroker geschaltet werden (Zustand auch hier nur im ioBroker bekannt bzw. abfragbar). - Momentaner Workaround: Ich benutze einnen freien Schaltaktorplatz, um mit dem Sturmsignal diesen zu Schalten und über die Statusadresse das ganze zurückzuspielen. Das funktioniert ziemlich zuverlässig, aber ob das Sinn der Sache ist...
Vielen Dank im Vorraus für jeden Erfahrungsaustausch und schonmal guten Rutsch.
Viele Grüße, reco
Die beiden Objekte
Sturmalarm{ "from": "system.adapter.knx.0", "user": "system.user.admin", "ts": 1589147866729, "common": { "name": "A_Z03_1 Sturmalarm", "type": "boolean", "role": "value", "write": true, "read": false, "min": true, "max": true }, "native": { "dpt": "DPT1.005", "address": "0/4/10", "addressRefId": "P-0145-0_GA-59", "statusGARefId": "P-0145-0_GA-999", "actGARefId": "" }, "acl": { "object": 1574, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1574 }, "_id": "knx.0.Neue_Hauptgruppe.Neue_Mittelgruppe.A_Z03_1_Sturmalarm", "type": "state" }
Sturmalarm Status
{ "from": "system.adapter.knx.0", "user": "system.user.admin", "ts": 1589147866729, "common": { "name": "A_Z03_1 Sturmalarm Status", "type": "boolean", "role": "value", "read": true, "write": false, "min": true, "max": true }, "native": { "dpt": "DPT1.005", "address": "0/4/12", "addressRefId": "P-0145-0_GA-999", "statusGARefId": "", "actGARefId": "" }, "acl": { "object": 1638, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1638 }, "_id": "knx.0.Neue_Hauptgruppe.Neue_Mittelgruppe.A_Z03_1_Sturmalarm_Status", "type": "state" }
- Funktioniert das Antworten auf eine Leseanfrage (kommend über den KNX-Bus) in einer bestimmten Lese/Schreibe Konstellation der Objekte automatisch? Wenn ja, wie und welche?
-
@recepogras ein Frohes Neues Jahr.
Nach dem Durchlesen Deiner "Hürden" glaube ich zu verstehen, wo Dein Problem ist ohne aber die ETS Struktur bei Dir zu kennen:
Du brauchst einen "Zuhörer" auf der KNX Seite sprich ein KNX Gerät, der mit dem von IOBroker gesendeten Wert etwas anfängt. Bei mir habe ich TempWerte außerhalb der KNX welt auf einen KNX Schalttaster geschickt, der quasi mit dem ETS GA Flag L horcht.
Die App dagegen scheint eine Busabfrage zu starten, ist aber selbs kein KNX Gerät, so dass IOBroker dadurch nichts mitkommt. Es sei denn, Du stelltst in IOBroker das entsprechende Pbjekt nur auf status "Write= True" und wichtig!! Read=false. Damit sollte dann die Busabfrage wieder im Iobroker richt ankommen und er schickt den State Wert dann auf den Bus.Es gibt ein Schaubild zwischen ETS GA flags und Iobroker status Read/write.. musst mal danach googeln oder aber es hilft Dir das so weiter:
Zusätzlich könntest Du Dir auch ein ETS/KNX Gerät suchen, der den Buswert abspreichert, der KNX Taster tut das eher nicht, da er die aus IOBroker gesendete States nur anzeigt, nicht aber speichert, Bei mir kann ich die Ip Schnittstelle it den enstprechen IOBroker Objekten ausstatten, so dass diese wen Wert dann speichern. Auf Deinen fall übertragen würde EasyKNX Software dann wieder die GA Inhalte auswerfen (alles unter der Vermutung Deiner ETS Struktur und Unkenntnis der App).
Versuchs mal zu verstehen und anzupassen, bei Fragen melde Dich einfach wieder. -
@recepogras
Ich hatte letztens eine ähnliche Anfrage von einem User.
Habe das ganze dann über ein JavaScript und gelöst. Wenn Status sich ändert egal .....dann sende das und das.Sprich wenn von dem Bus eine Abfrage rein kommt (lesen) wird das Objekt geändert (der timestamp) das löst somit den Trigger aus. Wenn du dann also einfach sagst sende den Wert erneut auf die Gruppe hast du es eigentlich
-
@recepogras Ich habe genau das selbe Problem und bekomme es leider nicht hin. Habe per ETS zwei GA angelegt ein mit WERT und eins mit Status und versucht den Status mit blocky zu überschreiben. Hat natürlich nicht funktioniert. Die Idee mit einem leeren Kanal im Schaltaktor ist mir auch gekommen, finde es aber keine Lösung auf Dauer.
Hat jemand eine Idee?
-
@bahadir-ergüllü Hallo Bahadir, Hilfe steht in "meinem" letzten Beitrag oben: prüfe die Verwendung der L,S und Ü Flags in der ETS (an jedem Gerät auf die GAs klicken, dann rechts im Eigenschaften stehen die Flags).
Dazu gibt es eine kurze Anleitung wie die Logik ist, dass sich Änderungen im IOBroker KNX Objekt mit dem KNX / ETS Bus kommunizieren.
Siehe hier:
https://github.com/ioBroker/ioBroker.knx#3-herausfinden-der-schalt--und-statusaddressen
wenn es dann noch immer nicht klappt, am besten ein Issue im Github aufmachen (oder mal in den Issues dort nachschauen,
https://github.com/ioBroker/ioBroker.knx/issues
es gibt schon zahlreiche Beispiele von Lösungen der sich nicht aktualisierenden Stae-Werten im Objektbaum des KNX Adapters: -
@recepogras Sofern Du den Import in den KNX Adpater mit der richtigen Semantik der GAs sowie den richtigen Flags brauchst Du nicht mit JS oder ähnlichem nachhelfen, aber damit geht es natürlich auch, nur ist dann der Owner des Adapters Blockly der richtige Anprechpartner
@ThaBam sehr guter Ansatz, den Du vorschlägst, Danke für Deinen Beitrag und mitlösen von "Problemen" anderer IO user.
-
Vielen Dank für die Hinweise. Nur um noch ein Mal sicher zu gehen ich möchte ohne einen ETS Aktor auf den BUS senden können. Der Aktor soll IoBroker sein.
Die Links hatte ich schon vorher gefunden. Die Flags kann ich ja nur am Aktor verändern und nicht bei GA die noch nicht zugeordnet sind oder irre ich mich da?
Habe die GA einen Aktor zugeordnet, aber den Aktor nicht programmiert.
Ohne Script ändert sich die GA Status leider nicht. Am Bus kommt auch von der Staus GA was an, ändert aber mein Status am Schalter nicht.
Bräuchte mal ein Anleitung für dummis.
-
Habe die Problematik mit einem Switch GA KNX und blocky gelöst. Bei einem MDT Glastaster funktioniert das einwandfrei die Farbe der LED zu schalten.
Es ist zwar nur eine Behelfslösung, die richtige Methode bekomme ich leider nicht hin.
Vielen Dank für eure Hilfe.
-
@bahadir-ergüllü wenn Du die Flags L,S, Ü änderst, ohne das Device neu zu programieren, dann änderst Du nichts auf Seite der ETS. Daher kann die Aktualisierung auch im ETS Bus nicht verteilt werden.
Wenn Du aber Dir mit Blockly geholfen hast, funzt es ja jetzt -
@thabam sagte in Auf KNX-Leseanfragen mit einem Wert aus ioBroker antworten:
Habe das ganze dann über ein JavaScript und gelöst. Wenn Status sich ändert egal .....dann sende das und das.
Das versuche ich derzeit auch..> Hat geklappt Danke für den Hinweis
Mit Read und Write musste ich noch etwas rumspielen, hatte ne Stunde gebraucht bis ich raus hatte wie das hinter dem Stift am Objekt erscheint, bzw. zugefügt werden kann.Ich habe Lufttemperatur von einem Sensor im Garten in ein Objekt gebracht, dieses Objekt schreibe ich wiederum in eine GA die ich in der ETS angelegt habe.
Mit unten dem Blockly schreibe ich das temp Objekt in das Objekt der GA
Im Gruppenmonitor wird der Wert in der Info angezeigt, kommt aber im RTR an
Ziel war so die Außentemperatur im Wechsel (akt Raumtemp/Zeit/Aussentemp) auf meinen Gira RTRs anzeigen lassen, da ich die Funktion in den Gira RTRs gefunden hatte."from": "system.adapter.knx.0", "user": "system.user.admin", "ts": 1615656213926, "common": { "name": "Temperatur Garten Luft", "type": "number", "role": "value", "unit": "°C", "max": 60, "min": -20, "read": false, "write": true }, "native": { "dpt": "DPT9.001", "address": "9/1/0", "addressRefId": "P-0748-0_GA-353", "statusGARefId": "", "actGARefId": "", "update": "", "objRef": "", "devName": "", "devInst": "", "objectSize": "" }, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "knx.0.EDOMI_IOBroker.Iobroker.Temperatur_Garten_Luft", "type": "state" }