Seite 1 von 1

Implementation eines "Toggles"

Verfasst: 23. Mai 2022 18:47
von Norick
Hallo
ich möchte mit einem (KNX)-Taster eine Lampe ein- bzw. ausschalten. Dazu habe ich folgende Rule erstellt welche aber noch nicht vollständig ist:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: KNXDeviceTaster_Wohnen
    type: core.ItemCommandTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      command: ON
      itemName: KNXDeviceSchaltaktoren_Licht
    type: core.ItemCommandAction
- Kann diese Rule einfach mit einem if/else erweitert werden? Geht dies überhaupt, oder wie würde ein einfacher Licht-Toggle aussehen?

Danke

Re: Implementation eines "Toggles"

Verfasst: 23. Mai 2022 20:00
von peter-pan
Ich weiss zwar nicht, ob das bei KNX anders ist, aber normalerweise nimmt man den ON/OFF-Channel eines Gerätes(Thing) und verknüpft es mit einem Switch-Item. Da braucht man keine Rule.

Re: Implementation eines "Toggles"

Verfasst: 23. Mai 2022 21:33
von udo1toni
Frage: Wenn Du von knx Taster sprichst, gibt es einen Grund, den Taster nicht selbst toggeln zu lassen?
Gewöhnlich definiert man den Taster als Schalter, der bei jedem Tastendruck den Status wechselt und als Kommando sendet.
Dabei ist es dann auch wichtig, eine zweite GA anzulegen, mit der openHAB dem Taster den aktuellen Status meldet, damit man den Taster nicht zweimal drücken muss, falls die Lampe nicht über knx geschaltet wurde.

Ansonsten ist diese Toggle Funktion nicht als einfaches Command implementiert. Du könntest natürlich zwei Rules anlegen, eine, die das Item einschaltet, falls es gerade aus ist, eine weitere, die das Item ausschaltet, falls es gerade eingeschaltet ist.
Einfacher und effizienter wäre es allerdings, statt "send a command" auszuwählen, solltest Du "run script" auswählen. Anschließend hast Du die freie Wahl. Blockly funktioniert grafisch (wer's mag...) ECMA ist JavaScript (Blockly erzeugt ECMA). Die breiteste Unterstützung wirst Du hier nach wie vor für die DSL Rules finden, weil sie schon in openHAB1 mit an Bord war. Konkret das Toggle:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: KNXDeviceTaster_Wohnen
      command: ON
    type: core.ItemCommandTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: >2
            KNXDeviceSchaltaktoren_Licht.sendCommand(if(KNXDeviceSchaltaktoren_Licht.state != ON) ON else OFF)
    type: script.ScriptAction
Falls das Item nicht den Status ON hat, wird der Befehl ON gesendet, ansonsten OFF. Wichtig ist noch die Einschränkung, dass die Rule nur dann ausgeführt wird, wenn der empfangene Befehl ON war.

Re: Implementation eines "Toggles"

Verfasst: 25. Mai 2022 06:45
von Norick
:D Vielen Dank - so hat es nun funktioniert..!!