Rules in OH3 mit Javascript: Vorherigen Status eines Items auslesen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Scooter_0807
Beiträge: 23
Registriert: 9. Apr 2021 21:44
Answers: 0
Wohnort: Fehmarn

Rules in OH3 mit Javascript: Vorherigen Status eines Items auslesen

Beitrag von Scooter_0807 »

Hallo zusammen,

Ich habe vor einiger Zeit mit Openhab begonnen und mein System gleich mit OH3 aufgesetzt.
Zur Definition von Items, Events und Pages nutze ich ausschließlich die Paper UI, d.h. ich habe keine Definitionen im Betriebssystem abgelegt.
Zur Steuerung meiner Rollläden habe ich begonnen
mir eine Rule erstellt, die zum Steuern Javascript verwendet

Diese Rule möchte ich nun verfeinern und deshalb soll die Rule durch verschiedene Item-Events ausgelöst werden. Auch dies konnte ich bereits lösen.

Nun möchte ich das auszuführende Javascript erweitern, dass es nicht nur aktuelle Item-States ausliest (das weiß ich wie es geht), sondern folgende Dinge auswertet:
- welches Item hat das Event ausgelöst, das zum Ausführen des Scriptes geführt hat.
- welchen Zustand hatte das Item bevor es das Event ausgelöst hat

Jetzt habe ich im Forum folgende Seite gefunden: https://openhab-scripters.github.io/ope ... butes.html

Hier werden die Methoden event.ItemName (Itemname das das Event ausgelöst hat) und event.oldItemState (vorheriger Zustand des Items) erwähnt.

Wenn ich jetzt eine Zuweisung vornehme
testvariable = event.itemName;
erhalte ich die Fehlermeldung "event not defined"

Jetzt meine Frage:
Kann ich diese Methoden in Javascript verwenden und wenn ja, wie kann ich diese einbinden?

Ich möchte anmerken, dass ich mit Javascript erst beginne und deshalb die Frage merkwürdig erscheinen kann.

ich freue mich über jede Hilfe.

Grüße
Scooter_0807

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

Re: Rules in OH3 mit Javascript: Vorherigen Status eines Items auslesen

Beitrag von udo1toni »

Also, abgesehen davon, dass es in openHAB3 kein Paper UI gibt (die UI heißt Main UI) wäre es sinnvoll, dass Du Deinen Code hier postest (und zwar markiert mit Code-Tags, z.B. indem Du im vollständigen Editor den Knopf </> drückst)
Ob Du die Konfiguration über Textdateien oder über die UI erledigst, ist (weitgehend) egal. Weitgehend deshalb, weil speziell bei den regeln schon die eine oder andere Einschränkung gilt.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Scooter_0807
Beiträge: 23
Registriert: 9. Apr 2021 21:44
Answers: 0
Wohnort: Fehmarn

Re: Rules in OH3 mit Javascript: Vorherigen Status eines Items auslesen

Beitrag von Scooter_0807 »

Guten Morgen,

danke für Deine schnelle Antwort.

Hier ist der vollständige Code der Rule.
Die Rule reagiert also auf die items HamburWohnzimmerDFFSliderSollstellung und HamburgDachfensterWohnzimmerSwitch1

Ich möchte nun im Javascript auswerten welches der beiden Items das Event ausgelöst hat und welchen vorherigen Zustand dieses Item hatte.

Code: Alles auswählen

triggers:
  - id: "1"
    configuration:
      itemName: HamburgWohnzimmerDFFSliderSollstellung
    type: core.ItemStateChangeTrigger
  - id: "2"
    configuration:
      itemName: HamburgDachfensterWohnzimmerSwitch1
    type: core.ItemStateChangeTrigger
conditions: []
actions:
  - inputs: {}
    id: "3"
    configuration:
      type: application/javascript
      script: >+
        
        // Entnommen von https://openhab-scripters.github.io/openhab-helper-libraries/Guides/Event%20Object%20Attributes.html var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);

        var lv_EventCameFromItem;  // Name des Items, dass zum Aufruf der Rule führte

        var lv_PreviousItemState;  // Zustand des Items, den es vor dem Event hatte

        var lv_ReceivedCommand;  // Eingegangenes Event


        lv_EventCameFromItem = event.itemName;

        lv_PreviousItemState = event.oldItemState;

        lv_ReceivedCommand = event.itemCommand;


        // Ab hier geht die Verarbeitung der Events weiter


        lv_Oeffnungswinkel = itemRegistry.getItem('HamburgDachfensterWohnzimmerSollstellung').getState(); 

        logger.info('Event wurde ausgelöst von: ' + lv_EventCameFromItem);

        logger.info('Event hatte vorher folgenden Zustand: ' + lv_PreviosItemState);

        logger.info('Event hat lautet: ' + lv_ReceivedCommand);

    type: script.ScriptAction

Grüße
Scooter_0807

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

Re: Rules in OH3 mit Javascript: Vorherigen Status eines Items auslesen

Beitrag von udo1toni »

Du hast da ausgerechnet in der entscheidenden Zeile einen Tippfehler :) in der logger-Anweisung hast Du lv_PreviosItemState geschrieben, da fehlt ein u
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Scooter_0807
Beiträge: 23
Registriert: 9. Apr 2021 21:44
Answers: 0
Wohnort: Fehmarn

Re: Rules in OH3 mit Javascript: Vorherigen Status eines Items auslesen

Beitrag von Scooter_0807 »

Hallo und guten Morgen udo1toni,

Vielen Dank für Dein Feedback.
Ich bin jetzt selbst zerknirscht, dass das Problem "nur" an dem fehlenden "U" gelegen hat und ich es nicht entdeckt habe.
Als Fehlermeldung kam bislang immer "event" not defined.
Ich habe den Schreibfehler korrigiert und jetzt funktioniert es.
Error 40: "Das Problem saß also 40cm vor der Tastatur".

Vielen vielen Dank

Grüße
Scooter

Antworten