Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugin Pushover

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

    Plugin Pushover

    Hallo
    Ich habe eine Frage zum Plugin Pushover:
    Da dieses keine Item-Attribute hat, weiss ich nun nicht wie ich es anstellen soll, das z.B. hier unten im Beispiel beim Licht-schalten eine Pushover-Meldung abgesetzt wird:. Ich habe dort mal "ausführen" hingeschrieben was natürlich so nicht funktioniert. Der Befehl selbst "sh.pushover("SmartHome", "This is my test message.")" funktioniert soweit alleine. Sorry für die Frage, aber ich arbeite mich gerade in SmartHomeNG ein...

    Code:
    # OG.Buero.Licht.Decke.yaml
    OG:
        Buero:
            Licht:
                Decke:
                    schalten:
                         type: bool
                         knx_dpt: 1
                         knx_cache: 1/6/5
                         knx_send: 1/1/34
                     trigger:
                         type: bool
                         eval: sh.OG.Buero.Licht.Decke.schalten()
                         eval_trigger: OG.Buero.Licht.Decke.schalten
                         ausführen: sh.pushover("SmartHome", "This is my test message.")

    #2
    Geht das nicht einfach so:
    Code:
    # OG.Buero.Licht.Decke.yaml
    OG:
        Buero:
            Licht:
                Decke:
                    schalten:
                         type: bool
                         knx_dpt: 1
                         knx_cache: 1/6/5
                         knx_send: 1/1/34
                     trigger:
                         type: bool
                         eval_trigger: OG.Buero.Licht.Decke.schalten
                         eval: sh.pushover("SmartHome", "This is my test message.")

    Kommentar


      #3
      Habe das mal so eingesetzt. Jetzt kommt einfach sowohl beim Einschalten wie beim Ausschalten eine Push-Meldung aufs Handy.
      Die sollte jedoch nur beim Einschalten kommen. Gebe ich "eval:1 sh.pushover("SmartHome", "This is my test message.")" ein, funktioniert es gar nicht mehr...

      Kommentar


        #4
        Naja, da musst du schon validen eval Syntax nutzen. Also zB sh.pushover() if value == 1 else None
        Oder halt statt "value" das item, zB sh...schalten.property.value

        Am besten prüfst du das im eval checker des admin interfaces im Browser.

        Kommentar


          #5
          Vielen Dank für den Tipp! So funktioniert es nun:
          eval: sh.pushover("SmartHome", "This is my test message.") if sh.OG.Buero.Licht.Decke.schalten.property.value == 1 else None.

          Kommentar


            #6
            Du kannst auch wie oben von mir angegeben relative Pfadangaben nutzen, dann kannst du das einfach copy pasten für andere Items.

            Kommentar


              #7
              Perfekt, das geht auch mit den drei Punkten "... if sh...schalten.property.value == 1 else None".
              Noch was: Wird SmartHomeNG neu gestartet, wird natürlich bei aktivem Licht auch dann die Meldung ausgelöst. Kann ich irgendwie auf die Laufzeit zurückgreifen und dann definieren, dass es nicht ausgelöst werden soll während einem Neustart, resp. wenn es beim Neustart aktiv war, muss es zumindest einmal "0" gewesen sein.
              Da ich solche Pushover-Meldungen auch in anderen Objekten einbauen will, würde das nämlich sonst nach einem Neustart etliche unnötige Meldungen auslösen.

              Kommentar


                #8
                Mach beim schalten Objekt ein cache: yes rein, vielleicht reicht das schon. Alternativ kannst du dir mal on_change anschauen. Das müsstest im schalten Item rein setzen, dafür das eval_trigger raus. Also zB: on_change: ..trigger = 1
                Wenn's hart auf hart kommt, kannst du auch noch abfragen, durch was ein Item geändert wurde und so, schau da mal in die Online doku.

                Kommentar


                  #9
                  Mit dem cache yes wird natürlich der letzte Stand gesichert, was dann beim Restart zur Folge hat, dass eine "1" im Cache eben die Message triggert. on_change erwirkt komischerweise überhaupt nichts. Und zur Syntax, wie der zurückgelieferte String bei last_changed_by aussieht sagt die Doku nichts.

                  Kommentar


                    #10
                    Der String zum Start von shng für changed_by ist "Init:Cache". Das findest du im Admin Interface im Item Baum.
                    Ich würds mal so probieren, zumindest so ähnlich sollte es klappen

                    Code:
                    OG:
                        Buero:
                            Licht:
                                Decke:
                                    schalten:
                                         type: bool
                                         knx_dpt: 1
                                         knx_cache: 1/6/5
                                         knx_send: 1/1/34
                                         cache: yes
                                         on_change: ..trigger = 1 if not sh..self.property.last_change_by == "Init:Cache" else None
                                     trigger:
                                         type: bool
                                         eval: sh.pushover("SmartHome", "This is my test message.") if sh...schalten.property.value == 1 else None
                    Zuletzt geändert von Onkelandy; 08.10.2021, 13:24.

                    Kommentar


                      #11
                      Das gibt die folgende Warnung im Log:
                      WARNING lib.item.item Item OG.Buero.Licht.Decke.schalten: 'On_Change' item-value='False' problem evaluating 1 if sh.OG.Buero.Licht.Decke.schalten.property.last_cha nge_by == "Init:Cache": unexpected EOF while parsing (<string>, line 1)
                      vermutlich weil das nicht im Baum existiert. Ich habe nur "env" dort und kein "Init"-Baum:

                      env.jpg
                      Zuletzt geändert von devau; 08.10.2021, 09:04.

                      Kommentar


                        #12
                        Nene, du musst dein Item auswählen und rechts dann schauen bei "Changed by". Aber ich hab oben das "else None" vergessen. Dann müsste es schon klappen (habs editiert)

                        Kommentar


                          #13
                          Ach so, dort steht bei mir "Update durch Init", nichts von "Cache:Init". Aber irgendwie wird die Message nicht ausgelöst. Deshalb habe ich nun mal nur "on_change: ..trigger = 1" ohne das folgende "if...." eingesetzt, dann müsste ja zumindest mal bei jedem Schalten die Message getriggert werden. Aber nichts da.
                          Schaue ich beim item "trigger" nach im Baum, sehe ich dort: "Update durch On_Change:OG.Buero.Licht.Decke.schalten". Und der trigger steht auf 1. Somit ist bewiesen, dass on_change mal ohne if funtioniert. Das Problem liegt somit bei der eval-Zeile: Ich vermute, dass dort die Abfrage des "sh...schalten.property.value == 1" zu jenem Zeitpunkt noch nicht auf 1 steht. Das wäre dann ein Laufzeitproblem. Setze ich dort nämlich bei value == 0, schaltet das Licht nicht mehr.. Und jetzt verstehe ich nur noch Bahnhof...

                          Kommentar


                            #14
                            Funktioniert das nicht einfach so:
                            Code:
                            OG:
                                Buero:
                                    Licht:
                                        Decke:
                                            schalten:
                                                 type: bool
                                                 knx_dpt: 1
                                                 knx_cache: 1/6/5
                                                 knx_send: 1/1/34
                                                 on_change: ..helper = sh.pushover("SmartHome", "This is my test message.") if value and sh..self.property.last_change_by != "Init" else None
                            
                                            helper:
                                                type: bool
                            Vielleicht kann man das Hilfsitem auch noch irgendwie eliminieren.

                            oder:
                            Code:
                             OG:
                                Buero:
                                    Licht:
                                        Decke:
                                            schalten:
                                                 type: bool
                                                 knx_dpt: 1
                                                 knx_cache: 1/6/5
                                                 knx_send: 1/1/34
                                                 on_change: ..trigger = 1 if value and sh..self.property.last_change_by == "Init" else None
                                             trigger:
                                                 type: bool
                                                 eval: sh.pushover("SmartHome", "This is my test message.")
                                                 enforce_updates: yes
                            Zuletzt geändert von stoepf; 08.10.2021, 13:23.

                            Kommentar


                              #15
                              Da treffen tatsächlich ein paar Probleme aufeinander. Ich glaube, on_change checkt noch keine Properties.
                              Mach das Trigger Item mal weg und setze dein Licht wie folgt. Meinen Tests zufolge sollte das nun klappen.
                              Code:
                                    schalten:
                                         type: bool
                                         knx_dpt: 1
                                         knx_cache: 1/6/5
                                         knx_send: 1/1/34
                                         cache: yes
                                         enforce_change: yes
                                         on_change: sh.pushover("SmartHome", "This is my test message.") if sh..self() == 1 and not "Init" in sh..self.changed_by() else None

                              Kommentar

                              Lädt...
                              X