Seite 1 von 1
Regel übersetzen von DSL nach Blockly
Verfasst: 25. Feb 2021 03:56
von scotty
Liebe Forengemeinde,
mit der Umsetzung meiner Regeln aus openHAB 2.5 habe ich gerade erst begonnen. Und schon die erste DSL-Zeile
bereitet mir Probleme. Kann mir jemand mitteilen, wie dieser Code in Blockly zusammengestellt werden muss?
Vielen Dank im Voraus.
Re: Regel übersetzen von DSL nach Blockly
Verfasst: 25. Feb 2021 05:38
von udo1toni
Ist das Item Flag_Abendlicht ein String Item? Ansonsten dürfen da schon mal keine Anführungszeichen stehen...

Re: Regel übersetzen von DSL nach Blockly
Verfasst: 25. Feb 2021 06:06
von scotty
Das Item unter 0h3 ist vom Type "switch". Ich finde in dem Baukastensystem von oh 3.01 den Begriff "received" nicht.
Dieser Versuch ist jedenfalls gescheitert:
if (itemRegistry.getItem('FlagAbendlicht').getState() == 'ON') {
events.sendCommand('Treppe', 'ON');
events.postUpdate('FlagAbendlicht', 'ON');
}
Re: Regel übersetzen von DSL nach Blockly
Verfasst: 25. Feb 2021 09:56
von rbeudel
Wenn das die erste Zeile ist gehört die doch gar nicht in den Blockly Teil sondern ist der trigger für den when Teil der rule?
Re: Regel übersetzen von DSL nach Blockly
Verfasst: 25. Feb 2021 10:36
von scotty
Um die Angelegenheit zu vereinfachen hier mal die komplette Rules, so wie sie unter oh 2.5 funktioniert. Wobei es sich bei dem Item "Flag_Abendlicht" um einen "Dummy" handelt.
Gruß
Re: Regel übersetzen von DSL nach Blockly
Verfasst: 25. Feb 2021 10:41
von scotty
Teil 2 (sorry, hatte den Code vergessen)
Code: Alles auswählen
rule "Abendbeleuchtung einschalten"
when
Item Flag_Abendlicht received command "ON"
then
logInfo("Flag_Abendlicht", "Abendbeleuchtung wird einschaltet")
TischlampeSwitch.sendCommand(ON)
TreppeSwitch.sendCommand(ON)
FensterlampeRelayOutput.sendCommand(ON)
lfernseherWhiteBrightness.sendCommand(ON)
lKugelleuchteWhiteBrightness.sendCommand(ON)
Thread::sleep(500)
Flag_Abendlicht.postUpdate("ON")
end
Re: Regel übersetzen von DSL nach Blockly
Verfasst: 25. Feb 2021 12:16
von rbeudel
Erst eine rule erstellen:
Screenshot (12).jpg
In den when Bereich Dein
Item Flag_Abendlicht received command "ON"
Im Then Bereich ein script mit Blockly erstellen.
Das geht dann mit
logInfo("Flag_Abendlicht", "Abendbeleuchtung wird einschaltet")
los. Dafür gibt es einen Blockly Baustein.
Dann die anderen Befehle einfach untereinander. Für den Timer gibt es keinen Blockly Baustein, deshalb kann das postupdate einen falschen Wert anzeigen. Das Problem habe ich auch gerade.
Re: Regel übersetzen von DSL nach Blockly
Verfasst: 25. Feb 2021 12:25
von scotty
Danke erst einmal, werde ich später testen!
Re: Regel übersetzen von DSL nach Blockly
Verfasst: 26. Feb 2021 01:53
von scotty
OK - ich denke, dass funktioniert erst einmal so:
Code: Alles auswählen
var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);
logger.info('Die Abendbeleuchtung wurde eingeschaltet.');
events.sendCommand('Tischleuchte', 'ON');
events.sendCommand('TVLeuchte_Helligkeit', 'ON');
events.sendCommand('Kugelleuchte_Helligkeit', 'ON');
events.sendCommand('Treppe', 'ON');
events.sendCommand('Fensterleuchte_Betrieb', 'ON');
events.postUpdate('FlagAbendlicht', 'ON');
Nun möchte ich innerhalb dieser Regel noch "Value" von TVLeuchte_Helligkeit bzw. Kugelleuchte_Helligkeit auf "40" ändern. Kann mir jemand mitteilen, wie der entsprechende Befehl lautet?
Gruß
Re: Regel übersetzen von DSL nach Blockly
Verfasst: 27. Feb 2021 11:00
von scotty
Ist es denn wirklich so, dass ich der erste und vielleicht sogar der einzigste mit diesem Problem bin?
Ich möchte in der Openhab 3.0-Rules einen Befehl so ändern, dass der Wert "40" für die Helligkeit eingestellt wird. Es können aber auch 2 Befehle dafür verwendet werden (also zuerst öffnen und anschließend den Wert einstellen).
Hier noch einmal der betreffende Befehl:
Viele Grüße