Ankündigung

Einklappen
Keine Ankündigung bisher.

status.toast reagiert auf on_update

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

    status.toast reagiert auf on_update

    Hallo zusammen,
    ich wollte das status.toast verwenden, um eine Nachricht zu schicken, wenn es geklingelt hat. Diese soll dann 30sek stehen bleiben und ich wollte die Möglichkeit haben, dass ich da auch direkt die Türe öffnen kann. Dazu habe ich mir ein Item erstellt, was die 30sek auf true bleibt, da das Klingelitem selbst nur solange true ist, wie man drückt.

    Laut der Beschreibung dachte ich, dass das status.toast erscheint und solange bleibt, wie das Item 1 ist. Ich musste allerdings feststellen, dass es bei jedem Update (ohne dass sich der Wert ändert) das status.toast neu reagiert. Ist das so gewollt? Das hat bei mir den Effekt, dass wenn das Klingel Signal wieder auf 0 geht, bekomme ich das nächste toast, obwohl ich auf meinen verlängerten Impuls schaue, der auch stehen bleibt. So habe ich dann bei jedem Klingeln 0->1->0 zwar meinen langen Puls für 30sek aber zwei status.toast auf dem Bildschirm.

    config
    Code:
    [SONDERFUNKTIONEN]
    	[[KLINGEL]]
    		[[[FREIGABE]]]
    			name = Rxx Klingel freigeben
    			type = bool
    			visu_acl = rw
    			cache = True
    			knx_dpt = 1
    			knx_listen = 1/7/0
    			knx_send = 1/0/0
    			knx_init = 1/7/0
    		[[[AKTIV]]]	
    			name = Rxx Klingel gedrueckt
    			type = bool
    			visu_acl = rw
    			value = False
    			enforce_updates = True
    			knx_dpt = 1
    			knx_listen = 1/7/1
    			knx_init = 1/7/1
    			on_change = SONDERFUNKTIONEN.KLINGEL.AKTIV.LONG_IMPULSE = True if (value == True) else None
    			autotimer = 20 = False # Wird nach 20sek wieder auf False gesetzt (zur Sicherheit, falls einer die Klingel dauerhaft drueckt)
    			[[[[LONG_IMPULSE]]]]
    				name = Rxx Klingel gedrueckt, dann wird diese Variable für 30sek gehalten / nachtriggern moeglich (gesetzt von SONDERFUNKTIONEN.KLINGEL.AKTIV.on_change)
    				type = bool
    				visu_acl = rw
    				value = False
    				enforce_updates = True
    				autotimer = 30 = False # Wird nach 30sek wieder auf False gesetzt

    Aufruf im Code
    Code:
    {{ status.toast('toast01', 'SONDERFUNKTIONEN.KLINGEL.AKTIV.LONG_IMPULSE', '', '', '', 'Klingel', 'Es hat geklingelt', 'message_bell', '', 'R12.HAUSTUER.OEFFNER', 'Öffnen', 'true', 'true', 'false', '', 'true', '#FFFFFF', '#FF1356') }}
    Mache ich da etwas falsch? Ist das so gewollt?

    #2
    Die Liste macht es vielleicht etwas klarer.

    Beispiel 1
    Code:
    AKTIV    AKTIV.LONG_IMPULSE     toast Anzeige
    0        0                      Nein
    1        1                      Toast A
    1        1                      Toast A
    0        1                      Toast A und weiteres Toast B
    0        1                      Toast A und weiteres Toast B
             .. 30sek
    0        0                      Toast A geht wieder weg, Toast B bleibt stehen
    0        0                      Toast B
             .. so bleibt es

    Beispiel 2, mit Retrigger
    Code:
    AKTIV    AKTIV.LONG_IMPULSE     toast Anzeige
    0        0                      Nein
    1        1                      Toast A
    1        1                      Toast A
    0        1                      Toast A und weiteres Toast B
    0        1                      Toast A und weiteres Toast B
             .. 15sek               Toast A und weiteres Toast B
    1        1                      Toast A, Toast B, Toast C
    0        1                      Toast A, Toast B, Toast C, Toast D
             .. 30sek
    0        0                      Toast A geht wieder weg, Toast B,C,D bleiben stehen
    0        0                      Toast B
             .. so bleibt es
    Ich würde schon gern, dass man den Impuls verlängern kann. Das habe ich durch on_change und enforce_update erreicht. Zur Not müsste ich noch ein Item machen welches nur auf on_change von LONG_IMPULSE reagiert. Aber das geht bestimmt charmanter :-)

    Kommentar


      #3
      Das hat jetzt nichts mit Deinem Problem zu tun: Hat es einen besonderen Grund, dass Du bei SmartHomeNG noch die alten Konfigurationsdateien verwendest und kein yaml?

      Dadurch entgehen Dir einige Features (z.B. das Editieren in der Admin GUI).
      Außerdem wird die Unterstützung für die .conf Dateien in einem der kommenden Releases retired werden.
      Viele Grüße
      Martin

      There is no cloud. It's only someone else's computer.

      Kommentar


        #4
        Hehe, nee das hat keinen besonderen Grund. Ein paar konfigs sind schon umgebaut. Aber eine große habe ich noch vor mir. Vielleicht gehe ich das mal in meinem Urlaub an.

        Aber mir ist bewusst dass das depreciated ist und ich mich da mal langsam drum kümmern muss. Danke für den trigger.

        Kommentar


          #5
          Du weisst, das es ein Tool gibt, das Dir die Arbeit abnimmt? (Von ein paar manuellen Nacharbeiten zur Verschönerung mal abgesehen)
          Viele Grüße
          Martin

          There is no cloud. It's only someone else's computer.

          Kommentar


            #6
            Ich kann dein problem nur bedingt nachvollziehen, wenn ich von hand triggere 0-1-0 , bleibt der toast angepinnt..
            es gibt einen modus, da verschwindet der toast nach einer einstellbaren zeit von selbst, eventuell solltest du mal die parameter checken..
            ich weiss, das widget ist sehr umfangreich ..
            da du anscheinend ne ältere version nutzt hast du auch den widget assistent noch nicht?

            Kommentar


              #7
              Ich denke mit einem Item allein wirst Du es nicht nachstellen können. Das Problem ist ja, dass bei mir das Item "LONG_IMPULSE" auf das das widget reagiert den Zustand nicht ändert (und immer 30sek lang TRUE bleibt). Aber es wird neu getriggert/geupdated durch das Item "AKTIV" (on_update, NICHT on_change).


              Siehe das "on_change" bei [[[AKTIV]]]
              Code:
              SONDERFUNKTIONEN:
              
                  KLINGEL:
              
                      AKTIV:
                          name: Rxx Klingel gedrueckt
                          type: bool
                          visu_acl: rw
                          enforce_updates: 'True'
                          on_change: SONDERFUNKTIONEN.KLINGEL.AKTIV.LONG_IMPULSE = True if (value == True) else None
              
                          LONG_IMPULSE:
                              name: Rxx Klingel gedrueckt, dann wird diese Variable für 30sek gehalten
                              type: bool
                              visu_acl: rw
                              enforce_updates: 'True'
                              autotimer: 30 = False

              Ich habe eigentlich alles auf Stand, oder woran machst Du fest, dass ich eine alte Version habe. Die config habe ich heute bereits auf yaml umgestellt.
              SmartVISU = 3.3.1
              SmartHomeNG = v1.9.4-master (c0cfb39cd)
              Zuletzt geändert von loeserman; 19.03.2023, 09:41.

              Kommentar


                #8
                liegt es vl daran das du enforce updates auf true hast ?
                ich verstehe deine item konfiguration noch nicht so ganz ..
                das signal kommt von deiner Klingel 0->1, wird dann von dir wieder auf 0 gesetzt oder macht das auch die Klingel?
                oder ist deine Klingel einfach ein Taster ?

                Kommentar


                  #9
                  Ja die Klingel ist ein Taster. Das ist das item AKTIV.
                  in der oberen konfigs setze ich das zurück nach 20sek falls einer die Klingel gedrückt hält oder was klemmt. Das kannst du vernachlässigen.

                  Den 0-1 Impuls der Klingel will ich nutzen und 30sek auf 1 halten. Dafür das 2. Item LONG_IMPULSE.

                  Das enforce Update ist dazu da die 30sek zu verlängern wenn einer 2mal schnellt.

                  ​​​​​​Solange wie das item LONG_IMPULSE 1 ist soll das toast anstehen. So war der Plan 😎

                  Kommentar


                    #10
                    mh, das müsst ich nochmal nachstellen das verhalten weiss ich in diesem Fall auch nicht auswendig, wie gesagt, das ist eigentlich sehr mächtig, weil sich vieles konfigurieren lässt ..

                    Kommentar


                      #11
                      also, ich hab das mal bei mir getestet, ich wechsele beim klingelsignal:
                      - 0->1 1. Toast geht auf
                      - 1->0 1. Toast bleibt auf
                      - 0->1 2. Toast geht auf
                      - 1->0 2. Toast bleibt auf​

                      mein Toast ist folgendermaßen aufgerufen
                      Code:
                       [COLOR=#d4d4d4]    {% import "toast.html" as toast %}[/COLOR]
                          [COLOR=#d4d4d4]    {{ toast.toast('', 'sprechanlage.live.klingel', '', 'sprechanlage.live.live_image', '', 'Klingel', '', 'scene_livingroom', '', '', 'OK', '20', 'true', 'false', '','', '','','','','mid-center', 'big') }}[/COLOR]
                        
                      ​
                      btw. du hast aber auch die option, direkt den Toast nach x sekunden schließen zu lassen..
                      dafür gibts folgenden parameter
                      * @param {text=} param_hideafter `` to make it sticky or time in miliseconds to hide after(optional)
                      {% macro toast(id, item_trigger, item_title, item_content, item_icon, text_title, text_content, text_icon,param_template, item_button,text_button, value_button, param_allowclose, param_hideafter, param_showhide, param_showloader, param_color,param_bgColor, param_stack, param_align, param_position ) %}


                      Ich kann mir bei deinem Problem nur ein Item Konfigurationsproblem vorstellen, da der SV normalerweise egal ist, wie das Item geupdatet wurde, also initial oder per update .. es wird ja nur das item abonniert und bei ner Wertänderung an den Webbrowser geschickt; außer du nutzt enforce_update, dann wird das item auch geupdatet wenn der Wert sich nicht ändert.

                      ​Ich denke das Problem kommt von der Item Konfig., wie kommt den das Signal der Klingel in dein System? per KNX, oder ein anderes System?
                      Dann gibt es ja das Klingelitem , dieses wechselt ja Ständig von 0-1-0 bei Taste gedrückt, losgelassen.
                      Ich glaube so einfach dynamisch die Zeit anzupassen, ohne das das Item neu getriggert wird, kann man das nicht, aber vielleicht hat jemand im smarthomeng Forum ne idee.. Ich weiss auch nicht wie das bei nem Nachtriggern von nem Treppenhauslicht ist, was ja die gleiche Funktion hat ..

                      Kommentar


                        #12
                        @bonze,
                        Du verwendest Deine eigene Version "toast.toast", die offenbar bei updates anders reagiert.

                        Ich habe das widget "status.toast" jetzt mal mit den von Dir genannten Parametern getestet. Dort verschwindet der Toast wieder, wenn das Trigger-item auf 0 geht.
                        0->1 Toast geht auf
                        1->1 Toast bleibt auf (enforce_updates: yes)
                        1->0 Toast geht zu​

                        Der Toast reagiert also nicht auf on_update, wie in der Überschrift steht, sondern auf "on_change".

                        loeserman, Du kannst bei ausgeschaltetem Cache in der Konsole der Browser-Tools beobachten, welche Änderungen für das Triggeritem von shNG gesendet werden. Vermutlich geht das Triggeritem eben doch nochmal auf 0, wenn erneut geklingelt wird.

                        Gruß
                        Wolfram

                        Kommentar


                          #13
                          Könnte es sein, das wir im widget die variable zurücksetzen?

                          Kommentar


                            #14
                            Nein.
                            Im Widget status.toast wird bei jedem item update geprüft, ob das Triggeritem 0 oder 1 ist. Entsprechend wird der Toast entfernt oder gesetzt.
                            smartVISU kennt kein "enforce_updates". D.h. die Update-Methode der Widgets wird nur aufgerufen, wenn der Wert des per Websocket empfangenen items von dem in widget.buffer gespeicherten Wert abweicht.

                            Kommentar


                              #15
                              Moin zusammen,
                              Danke für eure aktive Suche. Ich verstehe das einfach nicht. Ich habe mir mal eine Testseite gemacht auf der die drei Items drauf sind.

                              Da ihr euch aber schon so viel Mühe gegeben habt, habe ich mal versucht alle relevanten Informationen zusammenzutragen, aber ich kann es auch verstehen, wenn ihr hier nicht die Muße habt euch da durchzuwühlen. Ich versuche mich sonst einfach weiter und werde sicherlich noch einen Weg finden. Eventuell kann ich das Item einfach über ein Skript setzen. Das probiere ich gleich mal noch.

                              Testseite
                              Ganz oben: Dort habe ich den Toast eingebaut. Ich habe zwei Tests gemacht. Einmal mit LONG_IMPULSE und einmal mit LONG_IMPULSE_TEMP.

                              Oben: Klingel AKTIV
                              (das ist der Impuls von dem Klingeltaster, den ich hier auch mal testhalber manuell drücken kann)

                              Mitte: Klingel LONG_IMPULSE_TEMP
                              (dieser wird von dem Taster AKTIV getriggert und soll nach 30sek wieder weggehen, wird aber nachgetriggert und somit verlängert, wenn innerhalb der 30sek nochmal gedrückt wird.)

                              Unten: Klingel LONG_IMPULSE
                              (dieser wird von LONG_IMPULS_TEMP über on_change getriggert. Damit hatte ich die Hoffnung es lösen zu können, da dies eigentlich nur eine Antriggerung erfährt, wenn sich LONG_IMPULSE geändert hat.)


                              Code:
                              <ul data-role="listview" data-dividertheme="c">
                                  
                                  {{ status.toast('toasttest', 'SONDERFUNKTIONEN.KLINGEL.AKTIV.LONG_IMPULSE_TEMP', '', '', '', 'Klingel', 'Es hat geklingelt', 'message_bell', '', 'R12.HAUSTUER.OEFFNER', 'Öffnen', 'true', 'true', 'false', '', 'true', '#FFFFFF', '#FF1356', '1') }}
                                  
                                  <li data-role="list-divider">Testskript</li>
                                  <li data-icon="false" style="padding-left: 1em">
                                      <div class="cells">
                                          <div class="lcell20 lcellcenter">
                                              {{ basic.trigger('uid14052625600_logic1b', 'testscript', 'TEST', 'refresh', 1, 'mini') }}
                                          </div>
                                          <div class="lcell80 lcellleft lcellvmiddle">
                                              Testskript ausführen (Trigger)
                                          </div>
                                      </div>
                                  </li>
                                  <li data-icon="false" style="padding-left: 1em">
                                      <div class="cells">
                                          <div class="lcell20 lcellcenter">
                                              {{ basic.stateswitch('', 'SONDERFUNKTIONEN.KLINGEL.AKTIV', 'icon', [1, 0], ['message_bell.svg', 'message_bell.svg'], '',['icon1', 'icon0']) }}
                                              <br>
                                              {{ basic.symbol('', 'SONDERFUNKTIONEN.KLINGEL.AKTIV', ['Aktiv', 'Aus'], '', [1, 0], '', '', '', '') }}
                                              <br>
                                              Klingel
                                          </div>
                                          <div class="lcell80 lcellleft lcellvmiddle">
                                              AKTIV
                                          </div>
                                      </div>
                                  </li>
                                  <li data-icon="false" style="padding-left: 1em">
                                      <div class="cells">
                                          <div class="lcell20 lcellcenter">
                                              {{ basic.stateswitch('', 'SONDERFUNKTIONEN.KLINGEL.AKTIV.LONG_IMPULSE_TEMP', 'icon', [1, 0], ['message_bell.svg', 'message_bell.svg'], '',['icon1', 'icon0']) }}
                                              <br>
                                              {{ basic.symbol('', 'SONDERFUNKTIONEN.KLINGEL.AKTIV.LONG_IMPULSE_TEMP', ['Aktiv', 'Aus'], '', [1, 0], '', '', '', '') }}
                                              <br>
                                              Klingel
                                          </div>
                                          <div class="lcell80 lcellleft lcellvmiddle">
                                              LONG_IMPULSE_TEMP
                                          </div>
                                      </div>
                                  </li>
                                  <li data-icon="false" style="padding-left: 1em">
                                      <div class="cells">
                                          <div class="lcell20 lcellcenter">
                                              {{ basic.stateswitch('', 'SONDERFUNKTIONEN.KLINGEL.AKTIV.LONG_IMPULSE', 'icon', [1, 0], ['message_bell.svg', 'message_bell.svg'], '',['icon1', 'icon0']) }}
                                              <br>
                                              {{ basic.symbol('', 'SONDERFUNKTIONEN.KLINGEL.AKTIV.LONG_IMPULSE', ['Aktiv', 'Aus'], '', [1, 0], '', '', '', '') }}
                                              <br>
                                              Klingel
                                          </div>
                                          <div class="lcell80 lcellleft lcellvmiddle">
                                              LONG_IMPULSE
                                          </div>
                                      </div>
                                  </li>

                              Hier auch nochmal die aktuelle item config
                              Code:
                              %YAML 1.1
                              ---
                              # Verschiedene Sonderfunktionen
                              SONDERFUNKTIONEN:
                                  KLINGEL:
                                      AKTIV:
                                          name: Rxx Klingel gedrueckt
                                          type: bool
                                          visu_acl: rw
                                          value: 'False'
                                          enforce_updates: 'True'
                                          knx_dpt: 1
                                          knx_listen: 1/7/1
                                          knx_init: 1/7/1
                                          on_change: SONDERFUNKTIONEN.KLINGEL.AKTIV.LONG_IMPULSE_TEMP = True if (value == True) else None
                                          autotimer: 20 = False    # Wird nach 20sek wieder auf False gesetzt (zur Sicherheit, falls einer die Klingel dauerhaft drueckt)
                              
                                          LONG_IMPULSE_TEMP:
                                              name: Rxx Klingel gedrueckt, dann wird diese Variable für 30sek gehalten / nachtriggern moeglich (gesetzt von SONDERFUNKTIONEN.KLINGEL.AKTIV.on_change)
                                              type: bool
                                              visu_acl: rw
                                              value: 'False'
                                              enforce_updates: 'True'
                                              on_change: SONDERFUNKTIONEN.KLINGEL.AKTIV.LONG_IMPULSE = value
                                              autotimer: 30 = False    # Wird nach 30sek wieder auf False gesetzt
                              
                                          LONG_IMPULSE:
                                              name: Rxx Klingel gedrueckt, dann wird diese Variable für 30sek gehalten / nachtriggern moeglich (gesetzt von SONDERFUNKTIONEN.KLINGEL.AKTIV.LONG_IMPULSE_TEMP.on_change)
                                              type: bool
                                              visu_acl: rw
                                              value: 'False'
                                              enforce_updates: 'True'
                                              autotimer: 30 = False    # Wird nach 30sek wieder auf False gesetzt

                              Wie sieht das Ergebnis mit dem Log aus im Browser.


                              Test 1:
                              Mit dem Item SONDERFUNKTIONEN.KLINGEL.AKTIV.LONG_IMPULSE_TEMP für das Toast

                              1.1
                              Alles aus: Alle drei Items off, kein Toast​
                              2023-03-27 08_43_58-Loeserhome 3.0.png

                              1.2
                              Das Item AKTIV wird gesetzt und es erscheinen gleich zwei Toasts, obwohl das Item LONG_IMPULSE_TEMP nur einmal auftaucht.
                              Ich habe im SmarthomeNG auch die drei Items angesehen zu dem Zeitpunkt, daher sind es 3 Bilder
                              2023-03-27 08_44_02-Loeserhome 3.0.png
                              2023-03-27 08_44_04-Loeserhome 3.0.png
                              2023-03-27 08_44_06-Loeserhome 3.0.png

                              1.3
                              Das Item AKTIV wird wieder rückgesetzt über die Visualisierung (daher send). Dabei erscheint gleich noch ein Toast.
                              Ich habe im SmarthomeNG auch die drei Items angesehen zu dem Zeitpunkt, daher sind es 3 Bilder
                              2023-03-27 08_44_12-Loeserhome 3.0.png
                              2023-03-27 08_44_14-Loeserhome 3.0.png 2023-03-27 08_44_16-Loeserhome 3.0.png

                              1.4
                              Nach den 30sek werden dann die Items LONG_IMPULSE_TEMP und damit auch LONG_IMPULSE wieder vom SmarthomeNG zurückgesetzt. Damit wird aber keins der Toasts wieder gelöscht, obwohl ich erwartet hätte, dass mindestens eins wieder verschwindet.
                              Ich habe im SmarthomeNG auch die drei Items angesehen zu dem Zeitpunkt, daher sind es 3 Bilder
                              2023-03-27 08_44_33-Loeserhome 3.0.png2023-03-27 08_44_35-Loeserhome 3.0.png
                              2023-03-27 08_44_37-Loeserhome 3.0.png

                              Ich habe den gleichen Test auch nochmal mit dem anderen Item LONG_IMPULSE gemacht. Die Bilder dazu packe ich aber ich einen weiteren Post, um diesen nicht zu groß zu machen.
                              ...
                              Zuletzt geändert von loeserman; 27.03.2023, 08:24.

                              Kommentar

                              Lädt...
                              X