Ankündigung

Einklappen
Keine Ankündigung bisher.

OpenHab Rule: receive update / postUpdate unzuverlässig?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    OpenHab Rule: receive update / postUpdate unzuverlässig?

    Ich möchte erkannte Bewegung eines KNX-PM als rrd darstellen. Grundsätzlich funktioniert es, aber bei genauerer Betrachtung nicht zuverlässig.

    Things, Items und Rule:
    Code:
    Thing device PM_1_1_54 "PM 1.1.54" [
    ] {
    Type number : PM_DG_Beweg "PM DG Bewegung" [ga="1.006:<7/3/10"]
    }
    
    Number PM_DG_Beweg "PM DG Bewegung" { channel="knx:device:bridge:PM_1_1_54:PM_DG_Beweg" }
    Number PM_DG_Beweg_Ofs "PM DG Bewgung mit Offset"
    
    rule "PM_DG"
    when Item PM_DG_Beweg received update
    then
    {
    var Number bewoffset = (PM_DG_Beweg.state as Number) + 2.4
    logInfo("Manuel","PM_DG: " + (PM_DG_Beweg.state as Number))
    PM_DG_Beweg_Ofs.postUpdate(bewoffset)
    }
    end
    Ein zusammenkopiertes Log, was jeweils die KNX-Message (anderes System), Events und Ausgabe aus Rule enthält:
    Code:
    2021-06-05 20:32:25.647,A_GroupValue_Write,1.1.54,7/3/10,00,,,,0,low,6,T_DATA_XXX_REQ,0
    2021-06-05 20:32:25.635 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg' changed from 1 to 0
    2021-06-05 20:32:25.640 [INFO ] [org.openhab.core.model.script.Manuel] - PM_DG: 0
    2021-06-05 20:32:25.645 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg_Ofs' changed from 3.4 to 2.4
    
    2021-06-05 22:16:55.869,A_GroupValue_Write,1.1.54,7/3/10,01,,,,0,low,6,T_DATA_XXX_REQ,0
    2021-06-05 22:16:55.865 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg' changed from 0 to 1
    2021-06-05 22:16:55.868 [INFO ] [org.openhab.core.model.script.Manuel] - PM_DG: 1
    2021-06-05 22:16:55.873 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg_Ofs' changed from 2.4 to 3.4
    
    2021-06-05 22:27:05.784,A_GroupValue_Write,1.1.54,7/3/10,00,,,,0,low,6,T_DATA_XXX_REQ,0
    2021-06-05 22:27:05.782 [INFO ] [org.openhab.core.model.script.Manuel] - PM_DG: 1
    2021-06-05 22:27:05.784 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg' changed from 1 to 0
    
    2021-06-06 08:58:41.194,A_GroupValue_Write,1.1.54,7/3/10,01,,,,0,low,6,T_DATA_XXX_REQ,0
    2021-06-06 08:58:41.191 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg' changed from 0 to 1
    2021-06-06 08:58:41.195 [INFO ] [org.openhab.core.model.script.Manuel] - PM_DG: 1
    
    2021-06-06 09:08:50.121,A_GroupValue_Write,1.1.54,7/3/10,00,,,,0,low,6,T_DATA_XXX_REQ,0
    2021-06-06 09:08:50.122 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg' changed from 1 to 0
    2021-06-06 09:08:50.122 [INFO ] [org.openhab.core.model.script.Manuel] - PM_DG: 0
    
    2021-06-06 09:44:20.851,A_GroupValue_Write,1.1.54,7/3/10,01,,,,0,low,6,T_DATA_XXX_REQ,0
    2021-06-06 09:44:20.849 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg' changed from 0 to 1
    2021-06-06 09:44:20.853 [INFO ] [org.openhab.core.model.script.Manuel] - PM_DG: 1
    
    2021-06-06 09:54:30.768,A_GroupValue_Write,1.1.54,7/3/10,00,,,,0,low,6,T_DATA_XXX_REQ,0
    2021-06-06 09:54:30.770 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg' changed from 1 to 0
    2021-06-06 09:54:30.770 [INFO ] [org.openhab.core.model.script.Manuel] - PM_DG: 0
    2021-06-06 09:54:30.780 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg_Ofs' changed from 3.4 to 2.4
    
    2021-06-06 10:25:50.908,A_GroupValue_Write,1.1.54,7/3/10,01,,,,0,low,6,T_DATA_XXX_REQ,0
    2021-06-06 10:25:50.905 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg' changed from 0 to 1
    2021-06-06 10:25:50.907 [INFO ] [org.openhab.core.model.script.Manuel] - PM_DG: 1
    2021-06-06 10:25:50.914 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg_Ofs' changed from 2.4 to 3.4
    
    2021-06-06 10:36:00.464,A_GroupValue_Write,1.1.54,7/3/10,00,,,,0,low,6,T_DATA_XXX_REQ,0
    2021-06-06 10:36:00.463 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg' changed from 1 to 0
    2021-06-06 10:36:00.463 [INFO ] [org.openhab.core.model.script.Manuel] - PM_DG: 0
    2021-06-06 10:36:00.469 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg_Ofs' changed from 3.4 to 2.4
    
    2021-06-06 10:47:30.410,A_GroupValue_Write,1.1.54,7/3/10,01,,,,0,low,6,T_DATA_XXX_REQ,0
    2021-06-06 10:47:30.406 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg' changed from 0 to 1
    2021-06-06 10:47:30.409 [INFO ] [org.openhab.core.model.script.Manuel] - PM_DG: 1
    2021-06-06 10:47:30.414 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PM_DG_Beweg_Ofs' changed from 2.4 to 3.4
    Man erkennt zwei Probleme:
    1. Bei Aufruf der Rule ist der state noch der alte (Block 3). Das ist ein bekanntes Problem bei "receive command" (the Rule might trigger before the Item's state is updated), was man mittels receivedCommand umgeht. Aber gilt das gleiche für "receive update"? Und wie ist die Lösung?

    2. das postUpdate in der Rule bewirkt keine Änderung, obwohl der übergebene Wert ein anderer ist als der zuvor (Block 5).

    Sicher gibt es dafür eine Erklärung, nur habe ich sie noch nicht gefunden.

    Viele Grüße, Manuel

    #2
    Hallo Manuel,

    das ganze ist offensichtlich stark verkürzt. So richtig klar ist es mir nicht, was du mit PM_DG_Beweg_Ofs erreichen willst.

    Warum deklarierst du PM_DG_Beweg als Number? Es ist offensichtlich ein Switch, ggf. ein Contact.

    Des Weiteren frage ich mich, warum du auf "received update" abfragst, wenn doch ein "changed" meines Erachtens ideal wäre, da du lediglich den Offset in der Rule toggelst?!
    openHAB 4.2

    Kommentar


      #3
      Hallo Tokamak,

      danke für Deine Antwort! Der Sinn dahinter ist, Bewegung im Haus (Einwohner, Haustier, Einbrecher) darzustellen:CometVisu.png
      Damit nicht alles unübersichtlich übereinander kommt, wird abhängig vom PM ein Offset aufaddiert.
      PM schalten nach 10min ab. Hier sieht man Fehler recht schnell.
      Mit der Number hast Du recht, ist nicht sauber.
      "Changed" sollte in der Tat für die meisten Fälle ausreichen, ich werde das mal probieren, aber ich bezweifele, dass dies hier ein Unterschied macht.
      Angehängte Dateien

      Kommentar


        #4
        Also, um das mal kurz zu erklären:

        received command triggert, wenn ein Item einen Befehl empfängt. openHAB wird gewöhnlich einen empfangenen Befehl in ein Status Update umsetzen, dies geschieht jedoch erst nach dem Empfang des Befehls. Es handelt sich also nicht um ein Problem, sondern um das korrekte Verhalten, da nämlich der Befehl nicht zwingend etwas mit dem Status zu tun hat.
        Wenn man also eine Rule auf einen empfangenen Befehl reagieren lässt, so ist es logisch, dass man den empfangenen Befehl (eben receivedCommand) auswerten möchte, keinesfalls den Status des Items (ein Rollershutter Item kann z.B. die Befehle UP/DOWN/STOP und die Positionsbefehle 0 bis 100 empfangen, aber nur die Status 0 bis 100 annehmen).

        received update reagiert nicht auf einen empfangenen Befehl, sondern auf ein Update des Status (der dann logischerweise schon der neue ist...)
        changed wiederum reagiert ebenfalls auf ein Status Update, allerdings nur, wenn sich der Status dadurch auch geändert hat (hat, weil es zum Zeitpunkt der Ausführung schon passiert ist).

        Warum Deine Rule nicht zuverlässig funktioniert, ist nicht ganz einfach festzumachen, eventuell passiert einfach zu viel zum gleichen Zeitpunkt.
        Welche Version von openHAB läuft (2 oder 3)? Ist das log gefiltert (vermutlich ja)?

        In der Theorie ( ) sollte das Problem auch komplett ohne Rules lösbar sein, und zwar mit Profiles. Du definierst den Channel tatsächlich als Number (mindestens in OH3 ginge es aber auch mit Switch, dann müsstest Du beim Link auf das Number Item noch zusätzlich ein Mapping von ON auf 1 und OFF auf 0 vornehmen)
        Im Item setzt Du das Offset Profile ein, pro PM ein anderes Offset.

        Vorteil: Du brauchst nur ein Item pro PM Bewegungschannel. (Und keine Rules)

        Kommentar


          #5
          Hallo Udo,

          vielen Dank! Es läuft OH3 stable auf Raspi 4, Load nicht nennenswert. Die Ausgaben waren aus openhab.log und events.log extrahiert.
          Ich habe es nun von "receive update" auf "changed" geändert, heute konnte ich nach Logs keine Auffälligkeiten feststellen. Vielleicht nur dummer Zufall.

          Ich kann per Profile auf einen Helligkeitswert erfolgreich einen Offset addieren.
          Für den PM-Status als Number funktioniert das nicht (Wert unverändert). Würde man Switch nehmen, müßte man zwei Profiles (mapping + offset) kombinieren, da stellt sich die Frage, ob und wie das geht. Dann ist die Rule vielleicht doch einfacher.

          Kommentar


            #6
            Das Mapping legst Du im Link zwischen Channel und Item an, den Offset legst Du im Item selbst an. Der Unterschied ist dabei nur der Channel, nicht das Item. Das Item muss trotzdem vom Typ Number sein, schließlich wird ja eine Zahl im Status gehalten. Warum der Offset bei dem einem funktioniert und beim anderen nicht, kann ich auf Anhieb leider nicht sagen.

            Kommentar

            Lädt...
            X