Rules und Skripts wie einsetzen?
Moderator: seppy
-
- Beiträge: 86
- Registriert: 18. Apr 2021 11:30
- Wohnort: Berlin
Rules und Skripts wie einsetzen?
Hausautomation wir ja immer mehr gepriesen, wer sich aber nicht auf einen Systemhersteller festlegen möchte und von diesem abhängig wird, nutzt eines der "freien" Systeme, wie node red, ioBroker oder halt openHAB.
Ich habe node red und ioBroker schon probiert und werkel nun an openHAB, da ich bei den zuvor genannten System mehr Probleme mit der Visualisierung hatte. Nun hier bei openHAB gefällt mir diese sehr gut, ich komme bei der Erstellung von Regeln nicht klar, weil ich nicht begreife, wie ich auf die Eigenschaften der Komponenten zugreife (Syntax).
Mein Problem ist : Ich hatte ein LED-Stripe mit 433 MHz Steuerung, welche aber fremde Funksignale als ihr interpretierte und das Stripe teilweise in chaotische Zustände brachte. Also habe ich mir eine WLAN-Steuerung besorgt, welche man mit Tasmota flashen kann und damit über MQTT ansprechbar ist, leider ohne passende Fernbedienung. Nun gibt es ja dafür einen "Übersetzer", die RF Bridge, welche ich über node red super steuern konnte, wenn da nicht das Visualisierungsproblem wäre.
Ich komme also irgendwie nicht klar, wie ich den RF-Code der Bridge abfange und auswerte (alles MQTT), um dann ebenfalls per MQTT das LED Stripe zu schalten.
Ich habe node red und ioBroker schon probiert und werkel nun an openHAB, da ich bei den zuvor genannten System mehr Probleme mit der Visualisierung hatte. Nun hier bei openHAB gefällt mir diese sehr gut, ich komme bei der Erstellung von Regeln nicht klar, weil ich nicht begreife, wie ich auf die Eigenschaften der Komponenten zugreife (Syntax).
Mein Problem ist : Ich hatte ein LED-Stripe mit 433 MHz Steuerung, welche aber fremde Funksignale als ihr interpretierte und das Stripe teilweise in chaotische Zustände brachte. Also habe ich mir eine WLAN-Steuerung besorgt, welche man mit Tasmota flashen kann und damit über MQTT ansprechbar ist, leider ohne passende Fernbedienung. Nun gibt es ja dafür einen "Übersetzer", die RF Bridge, welche ich über node red super steuern konnte, wenn da nicht das Visualisierungsproblem wäre.
Ich komme also irgendwie nicht klar, wie ich den RF-Code der Bridge abfange und auswerte (alles MQTT), um dann ebenfalls per MQTT das LED Stripe zu schalten.
-
- Beiträge: 120
- Registriert: 22. Dez 2020 17:03
Re: Rules und Skripts wie einsetzen?
Hi
Ein paar Gedanken in kürze:
Wenn du einen WLAN Controller hast, der mit Tasmota geflasht ist, dann brauchst du keine weitere Bridge o.ä.
Auf deinem Raspberry (oder wo OH3 läuft) einen MQTT Broker installieren, vorzugsweise mosquitto.
Tasmota auf dem Controller konfigurieren, damit der Controller in dein WLAN kommt und deinen LED Strip richtig ansteuert und MQTT konfiguriere usw.
Dann noch zB MQTT-Explorer auf deinem Rechner installieren, nicht auf dem Raspberry. Damit kannst du die MQTT Kommunikation in deinem WLAN "beobachten".
Dann in OH3 das MQTT Binding installieren, Thing konfigurieren und Item konfigurieren.
Soviel ganz grob in der kürze der Zeit.
Gruß
Thomas
Ein paar Gedanken in kürze:
Wenn du einen WLAN Controller hast, der mit Tasmota geflasht ist, dann brauchst du keine weitere Bridge o.ä.
Auf deinem Raspberry (oder wo OH3 läuft) einen MQTT Broker installieren, vorzugsweise mosquitto.
Tasmota auf dem Controller konfigurieren, damit der Controller in dein WLAN kommt und deinen LED Strip richtig ansteuert und MQTT konfiguriere usw.
Dann noch zB MQTT-Explorer auf deinem Rechner installieren, nicht auf dem Raspberry. Damit kannst du die MQTT Kommunikation in deinem WLAN "beobachten".
Dann in OH3 das MQTT Binding installieren, Thing konfigurieren und Item konfigurieren.
Soviel ganz grob in der kürze der Zeit.
Gruß
Thomas
OH 3.1, Raspberry 4B, 4GB RAM, 256 GB Solid State Drive via SATA <-> USB Adapter, ConBee II ZigBee Stick
-
- Beiträge: 86
- Registriert: 18. Apr 2021 11:30
- Wohnort: Berlin
Re: Rules und Skripts wie einsetzen?
Um es etwas zu präzisieren: Ich habe ein Item "RF_Code", wo aus der JSON-Struktur der Eintrag Data extrahiert wird (JSONPATH:$.RfReceived.Data).
Ich verstehe aber nicht, was nun der Trigger ist und wie ich dann weitermache. Ein weiteres Problem wird dann auch sein, wie ich den aktuellen Zustand zwischenspeichere, da "004C01" der gleiche Code für Stripe ein und aus ist.
@Bubbleman: es geht mir um die Funkfernbedienung für 433 MHz, welche ich weiterbenutzen möchte.
Code: Alles auswählen
{"Time":"2021-08-14T18:35:30","RfReceived":{"Sync":12290,"Low":400,"High":1240,"Data":"004C01","RfKey":1}}
Ich verstehe aber nicht, was nun der Trigger ist und wie ich dann weitermache. Ein weiteres Problem wird dann auch sein, wie ich den aktuellen Zustand zwischenspeichere, da "004C01" der gleiche Code für Stripe ein und aus ist.
@Bubbleman: es geht mir um die Funkfernbedienung für 433 MHz, welche ich weiterbenutzen möchte.
-
- Beiträge: 120
- Registriert: 22. Dez 2020 17:03
Re: Rules und Skripts wie einsetzen?
Dann kann ich leider nicht weiterhelfen.
OH 3.1, Raspberry 4B, 4GB RAM, 256 GB Solid State Drive via SATA <-> USB Adapter, ConBee II ZigBee Stick
- udo1toni
- Beiträge: 13869
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rules und Skripts wie einsetzen?
Du brauchst erst mal einen String Channel, der mit dem Topic gekoppelt ist. Du verlinkst ein String Item mit dem Channel. Dabei setzt Du den JSONPATH entsprechend ein.
Du kannst die Transformation entweder direkt in Channel eintragen oder im Item Profile. Das Item Profile hat dabei den Vorteil, dass Du weitere Items mit dem selben Channel koppeln kannst, die dann unterschiedliche Inhalte haben hönnen, weil Du jeweils unterschiedliche Transformations pro Item verwenden kannst, z.B. könntest Du auf diese Weise zusätzlich den Zeitstempel abgreifen.
Die passende Rule lässt Du auf das Item triggern, in welchem Data gespeichert wird. Und zwar nutzt Du den Trigger received update. Damit wird die Rule jedes Mal ausgelöst, wenn ein Signal über das Topic empfangen wird. Dabei spielt es keine Rolle, ob der Status sich geändert hat oder nicht.
Die Rule kann nun verschiedene Befehle auswerten, z.B. so:
Der Part mit dem default ist natürlich optional, habe ich hier nur zur Demo eingebaut. Bei jedem empfangenen Signal "004C01" wird das Item LED_Stripe_Power umgeschaltet.
Du kannst die Transformation entweder direkt in Channel eintragen oder im Item Profile. Das Item Profile hat dabei den Vorteil, dass Du weitere Items mit dem selben Channel koppeln kannst, die dann unterschiedliche Inhalte haben hönnen, weil Du jeweils unterschiedliche Transformations pro Item verwenden kannst, z.B. könntest Du auf diese Weise zusätzlich den Zeitstempel abgreifen.
Die passende Rule lässt Du auf das Item triggern, in welchem Data gespeichert wird. Und zwar nutzt Du den Trigger received update. Damit wird die Rule jedes Mal ausgelöst, wenn ein Signal über das Topic empfangen wird. Dabei spielt es keine Rolle, ob der Status sich geändert hat oder nicht.
Die Rule kann nun verschiedene Befehle auswerten, z.B. so:
Code: Alles auswählen
rule "RF Befehle auswerten"
when
Item RF_Data received update
then
switch(RF_Data.state.toString) {
case "004C01" : {
LED_Stripe_Power.sendCommand(if(LED_Stripe_Power.state != ON) ON else OFF)
}
case "004C02" : {
// ein anderes Item steuern
}
case "004C03" : {
// noch ein anderes Item steuern
}
default: {
logInfo("receivedrf","Unbekannter RF-Befehl: {}",RF_Data.state)
}
}
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 86
- Registriert: 18. Apr 2021 11:30
- Wohnort: Berlin
Re: Rules und Skripts wie einsetzen?
Vielen Dank für die Antwort.
JSON Transformationen trage ich meistens im Channel bei Incoming Value Transformations ein, da ich bisher auch immer nur ein Item vom Channel abgeleitet habe, soweit funktioniert bei mir auch Alles, der Data-Wert wird mir im Item auch korrekt angezeigt. Die Sache mit den Rules sieht bei mir aber immer anders aus, als bei dir, da ich das Ganze über die GUI mache und Du scheinbar als Datei, so wie noch vor OH3. Mein Versuch mit Blockly sieht so aus (Blockly-Code nicht enthalten):Leider sieht es bei mir mit den Debug-Möglichkeiten auch schlecht aus, das ist in node red auch besser gestaltet, ich sehe immer nur das, was ich auch visuell auf einer Page darstellen könnte und nicht, was innerhalb passiert. Schon die Möglichkeit z.B. ein Messagefenster einzublenden würde mir helfen, da fehlt mir aber die Syntax, falls es so etwas gibt.
Was ich auch noch nicht begriffen habe: Wann oder wie werden denn die Rules angewendet, bei mir steht immer in grün "Idle" und ich kann kurz das blaue Dreieck drücken, aber es zuckt dann nur kurz und das war es.
JSON Transformationen trage ich meistens im Channel bei Incoming Value Transformations ein, da ich bisher auch immer nur ein Item vom Channel abgeleitet habe, soweit funktioniert bei mir auch Alles, der Data-Wert wird mir im Item auch korrekt angezeigt. Die Sache mit den Rules sieht bei mir aber immer anders aus, als bei dir, da ich das Ganze über die GUI mache und Du scheinbar als Datei, so wie noch vor OH3. Mein Versuch mit Blockly sieht so aus (Blockly-Code nicht enthalten):
Code: Alles auswählen
triggers:
- id: "1"
configuration:
itemName: SonoffRFBridge_RFCode
type: core.ItemCommandTrigger
conditions: []
actions:
- inputs: {}
id: "2"
configuration:
blockSource:
type: application/javascript
script: >
if (itemRegistry.getItem('SonoffRFBridge_RFCode').getState() == '004C01') {
events.sendCommand('LEDStripe_ONOFF', '1');
}
type: script.ScriptAction
Was ich auch noch nicht begriffen habe: Wann oder wie werden denn die Rules angewendet, bei mir steht immer in grün "Idle" und ich kann kurz das blaue Dreieck drücken, aber es zuckt dann nur kurz und das war es.
- udo1toni
- Beiträge: 13869
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Rules und Skripts wie einsetzen?
Das ist soweit korrekt.
Du wirst nie sehen, dass eine Rule läuft. Sollte das mal der Fall sein, ist die Rule schlecht programmiert.
Dabei spielt es keine Rolle, welche Art Rules Du verwendest.
Deine Rule passt aber weitgehend. Nur möchtest Du ja, dass das Licht toggelt, nicht, dass es nur eingeschaltet wird.
Wo wir beim Licht sind: Musst Du tatsächlich eine 1 senden? Wenn es ich um einen Schaltkanal handelt, wäre es sinnvoll, das im Channel anzupassen, damit Du ON und OFF statt 1 und 0 verwenden kannst. Dann könntest Du auch ein Switch Item verknüpfen.
Im Zweifel erreichst Du das Toggle ähnlich wie ich in meiner Rule:
Wobei die Zeile ungetestet ist
Gesendet von iPad mit Tapatalk
Du wirst nie sehen, dass eine Rule läuft. Sollte das mal der Fall sein, ist die Rule schlecht programmiert.
Dabei spielt es keine Rolle, welche Art Rules Du verwendest.
Deine Rule passt aber weitgehend. Nur möchtest Du ja, dass das Licht toggelt, nicht, dass es nur eingeschaltet wird.
Wo wir beim Licht sind: Musst Du tatsächlich eine 1 senden? Wenn es ich um einen Schaltkanal handelt, wäre es sinnvoll, das im Channel anzupassen, damit Du ON und OFF statt 1 und 0 verwenden kannst. Dann könntest Du auch ein Switch Item verknüpfen.
Im Zweifel erreichst Du das Toggle ähnlich wie ich in meiner Rule:
Code: Alles auswählen
events.sendCommand('LEDStripe_ONOFF', if (itemRegistry.getItem('LEDStripe_ONOFF').getState() != '1') '1' else '0');
Gesendet von iPad mit Tapatalk
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 86
- Registriert: 18. Apr 2021 11:30
- Wohnort: Berlin
Re: Rules und Skripts wie einsetzen?
Leider tut sich auch nach der Änderung in "ON"´Nichts. Irgendwie vermisse ich bei Blockly die Else-Anweisung oder schreibe ich dafür eine weitere Rule? Bei mir sieht es nämlich nun so aus:und ich würde es gern so machen:wobei ich immer noch nicht glaube, dass das Skript überhaupt ausgeführt wird. Ich sehe maximal im frontai:l, und das auch nur, wenn der letzte RFCode ungleich 004C01 war.
Code: Alles auswählen
script: >
if (itemRegistry.getItem('SonoffRFBridge_RFCode').getState() ==
'004C01') {
if (itemRegistry.getItem('LEDStripe_ONOFF').getState() == 'OFF') {
events.sendCommand('LEDStripe_ONOFF', 'ON');
}
}
Code: Alles auswählen
script: >
if (itemRegistry.getItem('SonoffRFBridge_RFCode').getState() ==
'004C01') {
if (itemRegistry.getItem('LEDStripe_ONOFF').getState() == 'OFF') {
events.sendCommand('LEDStripe_ONOFF', 'ON');
}
else {
events.sendCommand('LEDStripe_ONOFF', 'OFF');
}
}
Code: Alles auswählen
2021-08-15 12:25:52.584 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'SonoffRFBridge_RFCode' changed from 004C08 to 004C01
- udo1toni
- Beiträge: 13869
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rules und Skripts wie einsetzen?
Na, da steht ja auch ItemStateChangedEvent. Die Meldung kommt nur bei einer Wertänderung. Ein Update wurde gewöhnlich nicht protokolliert.
Wie der exakte Befehlssatz von JavaScript aussieht, kann ich Dir nicht sagen, da ich kein JavaScript nutze. Der ternäre Operator sollte aber auch da zur Verfügung stehen (vielleicht anders geschrieben…).
Schau mal nach Beispielprogrammen (im englischen Forum gibt‘s da massig Code).
Gesendet von iPad mit Tapatalk
Wie der exakte Befehlssatz von JavaScript aussieht, kann ich Dir nicht sagen, da ich kein JavaScript nutze. Der ternäre Operator sollte aber auch da zur Verfügung stehen (vielleicht anders geschrieben…).
Schau mal nach Beispielprogrammen (im englischen Forum gibt‘s da massig Code).
Gesendet von iPad mit Tapatalk
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 86
- Registriert: 18. Apr 2021 11:30
- Wohnort: Berlin
Re: Rules und Skripts wie einsetzen?
Hallo,
leider komme ich mit deiner Rule (Datei?) überhaupt nicht weiter, weil ich diese über die UI nicht so einsetzen kann, ohneauszulösen. Die Errormeldungen die folgenden Zeilen habe ich hier mal nicht weiter ausgeführt. Ausgelöst wird dieser Error, wenn ich bei der Rule in der UI auf Run drücke, der komplette Code der Rule sieht so aus:Ich bin so langsam drauf und dran mich von Homeautomation zu verabschieden, weil jedes System ab einer gewissen Tiefe, welche unterschiedlich schnell erreicht wird, dazu führt, zuerst ein Studium abschliessen zu müssen, um auch nur die kleinsten Aufgaben umsetzen zu können.
Was kann in einem System so kompliziert sein, von einer Komponente einen Code zu empfangen und in Abhängigkeit des Wertes an eine andere Komponente einen anderen Code oder Befehl zu senden. Mit einem ESP8266 Di Mini reichen dafür wenige Zeilen C-Code, hier in openHAB 3 muss man schon danach suchen, wie man an den empfangenen Code herankommt, geschweige denn diesen verarbeitet. Das ist in meinen Augen nicht nutzerfreundlich, zumal 80% nur auf englischsprachigen Seiten zu finden ist und in Youtube-Videos auch nicht verständlicher wird, weil dort maximal das Schalten ein Lampe gezeigt wird.
Sehr schade Alles .
leider komme ich mit deiner Rule (Datei?) überhaupt nicht weiter, weil ich diese über die UI nicht so einsetzen kann, ohne
Code: Alles auswählen
[ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'rf_bridge01' failed: ___ rule ___ "RF Befehle auswerten"
Code: Alles auswählen
triggers:
- id: "1"
configuration:
itemName: SonoffRFBridge_RFCode
type: core.ItemCommandTrigger
conditions: []
actions:
- inputs: {}
id: "2"
configuration:
type: application/vnd.openhab.dsl.rule
script: >-
rule "RF Befehle auswerten"
when
SonoffRFBridge_RFCode received update
then
switch(SonoffRFBridge_RFCode.state.toString) {
case "004C01" : {
logInfo("rf_bridge", "Command:004C01")
// LED_Stripe_Power.sendCommand(if(LED_Stripe_Power.state != ON) ON else OFF)
}
case "004C02" : {
logInfo("rf_bridge", "Command:004C02")
// ein anderes Item steuern
}
case "004C03" : {
logInfo("rf_bridge", "Command:004C03")
// noch ein anderes Item steuern
}
default: {
logInfo("rf_bridge","Unbekannter RF-Befehl")
}
}
end
type: script.ScriptAction
Was kann in einem System so kompliziert sein, von einer Komponente einen Code zu empfangen und in Abhängigkeit des Wertes an eine andere Komponente einen anderen Code oder Befehl zu senden. Mit einem ESP8266 Di Mini reichen dafür wenige Zeilen C-Code, hier in openHAB 3 muss man schon danach suchen, wie man an den empfangenen Code herankommt, geschweige denn diesen verarbeitet. Das ist in meinen Augen nicht nutzerfreundlich, zumal 80% nur auf englischsprachigen Seiten zu finden ist und in Youtube-Videos auch nicht verständlicher wird, weil dort maximal das Schalten ein Lampe gezeigt wird.
Sehr schade Alles .