Implementation eines "Toggles"

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Norick
Beiträge: 252
Registriert: 31. Jan 2022 06:35
Answers: 0

Implementation eines "Toggles"

Beitrag 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
von udo1toni » 23. Mai 2022 21:33
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.
Gehe zur vollständigen Antwort

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Implementation eines "Toggles"

Beitrag 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.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Implementation eines "Toggles"

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Norick
Beiträge: 252
Registriert: 31. Jan 2022 06:35
Answers: 0

Re: Implementation eines "Toggles"

Beitrag von Norick »

:D Vielen Dank - so hat es nun funktioniert..!!

Antworten