Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie genau funktioniert basic.trigger?

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

    Wie genau funktioniert basic.trigger?

    Hi

    Habe gerade zum ersten mal einen basic.trigger versucht, smartVISU 3.3.1.

    Code:
    {{ basic.trigger('', 'ICO', '', 'time_clock.svg') }}
    Stimmt das so? Die Logik in smarthomeNG (1.9.5 master) heißt ICO, Filename ico.py. Bin mir z.B. nicht ganz sicher, ob da der Logik Name oder der Filename verwendet werden muss.

    Versuche ich es so wie oben, bekomme ich das:

    Code:
    2023-06-22  16:01:37 WARNING  modules.websocket.sv Client HAL9000.fritz.box (192.168.178.109:56730), smartVISU v3.3.1, Firefox 114 requested logic without visu-access: ICO
    Ist das nun ein Fehler, d.h., der Trigger hat NICHT funktioniert, oder es hat funktioniert und das ist ein normaler Logeintrag, der immer kommt, wenn man den Button drückt? Ich sehe sonst nirgends einen Hinweis, ob eine Logic (z.B. aus der Visu heraus) getriggert wurde. Nur den "Nächste Ausführung/Cycle/Crontab" in der Logikliste.​

    Gruß, Martin

    #2
    Moin Martin,

    der Aufruf stimmt schon so, aber Du musst für shNG in der logic.yaml den Parameter visu_acl für jede Logik auf True setzen, die Du von der Visu aus triggern willst.

    Zusätzlich kannst Du Der Logik mit dem Widget-Parameter "val" einen Wert übergeben, der in der Logik verarbeitet wird.

    Seit einiger Zeit kann der Trigger auch automatisch beim Aufrufen der Seite ausgeführt werden. Siehe hierzu den Widget-Parameter "event". Gültige Werte: "button" (default), "page" oder "both".

    Gruß
    Wolfram
    Zuletzt geändert von wvhn; 22.06.2023, 17:33.

    Kommentar


      #3
      Zitat von wvhn Beitrag anzeigen
      Du musst für shNG in der logic.yaml den Parameter visu_acl für jede Logik auf True setzen
      Das war der entscheidende Hinweis. Danke dir, funktioniert.

      Gruß, Martin

      Kommentar


        #4
        Im Zusammenhang mit basic.trigger:

        Wie spezifiziere ich ein Tupel ([1,1] oder [0,1]) in der YAML-Datei? Konkret habe ich dieses Item:

        Code:
             deckenlicht:
                    name: Decke
                    type: bool
                    visu_acl: rw
                    value: 0
                    knx_dpt: 1
                    knx_send: 1/1/50
                    knx_init: 1/1/53
        
                    level:
                        type: num
                        visu_acl: rw
                        knx_dpt: 5001
                        knx_send: 1/1/52
                        knx_init: 1/1/54
                    relative:
                        type: list
                        visu_acl: rw
                        knx_dpt: 3
                        knx_send: 1/1/51​
        Im Web-Admin-Tool von SmarthomeNG kann ich im Item-Baum auf das "relative"-Item zugreifen, und im "Wert"-Feld ist "[]" voreingestellt. Gebe ich dort "[1,1]" oder "[0,1]" ein, tritt der gewünschte Effekt ein (Hoch- bzw. Herunterdimmen). Das Item scheint mir also korrekt konfiguriert. Nur in der YAML-Datei für smartVISU bekomme ich es nicht mit basic.trigger verknüpft. Habe es so versucht:

        Code:
        visublock01:
                    name: Beleuchtung
                    sv_widget: "{{ device.dimmer('', 'Decke', 'EG.buero.deckenlicht', 'EG.buero.deckenlicht.level',0,100,1,'','','','','input') }}
                    {{ basic.trigger('btn_heller', 'EG.buero.deckenlicht.relative', '', 'plus', '[1,1]') }}
                    {{ basic.trigger('btn_dunkler', 'EG.buero.deckenlicht.relative', '', 'minus', '[0,1]') }}​"
        Bei Betätigen der Knöpfe erhalte ich dies im Log:
        Code:
        2026-02-04  19:53:53 WARNING  modules.websocket.sv Client LENNART.fritz.box (192.168.1.120:62469), smartVISU v3.6.0, Chrome 144 requested invalid logic: EG.buero.deckenlicht.relative
        Ebenso nicht funktionieren tut
        - ohne einfache Anführungszeichen
        - mit Leerzeichen nach Komma
        - "9" und "1" (ohne Klammern) statt Tupeln.

        Hintergrund: Mein Bewegungsmelder erlaubt leider kein direktes Überschreiben des Dimmwertes, sondern reguliert dann gleich wieder auf "seinen" Wert. Übersteuern mittels manuellem Dimmen ist aber erlaubt, und das versuche ich nun in der smartVISU zu realisieren. Ich werde wahrscheinlich noch einen dritten "Stopp"-Knopf benötigen, da sonst bei Plus auf 100% und bei Minus auf 0% gedimmt wird. Der würde dann wohl einfach "[0,0]" senden.

        Vielen Dank!

        Kommentar


          #5
          Moin lennart,

          basic.trigger ist zum Triggern einer Logik da. Du hast stattdessen ein item angegeben und deshalb schmeißt shNG die Fehlermeldung, dass eine ungültige Logik angefordert wurde.

          Du kannst jetzt entweder je eine Logik "dimm_heller" und "dimm_dunkler" anlegen und diese triggern, oder das Widget basic.stateswitch verwenden, dass die Tuples auf das item sendet.
          Code:
          {{ basic.stateswitch('','EG.buero.deckenlicht.relative', 'mini', ['[1,1]', '[1,1]'], 'jquery_plus') }}
          {{ basic.stateswitch('','EG.buero.deckenlicht.relative', 'mini', ['[0,1]', '[0,1]'], 'jquery_minus') }}
          Die Schreibweise der Werte mit den geschachtelten Klammern ist notwendig, damit das Widget dies als Liste überträgt.

          Gruß
          Wolfram

          Kommentar


            #6
            Vielen Dank Wolfram! Da stand ich nun wahrlich auf dem Schlauch. 😳

            Hab noch den "Stopp"-Knopf in die Mitte gepackt:

            Code:
            {{ basic.stateswitch('','EG.buero.deckenlicht.relative', 'mini', ['[1,1]', '[1,1]'], 'jquery_plus') }}
            {{ basic.stateswitch('','EG.buero.deckenlicht.relative', 'mini', ['[0,0]', '[0,0]'], 'message_stop') }}
            {{ basic.stateswitch('','EG.buero.deckenlicht.relative', 'mini', ['[0,1]', '[0,1]'], 'jquery_minus') }}​
            Prinzipiell funktioniert es, aber man muss schon sehr schnell sein.

            Daher werde ich als nächstes das Experiment angehen "Wenn am Schieberegler für die Helligkeit eine Eingabe erfolgt, sperre den Bewegungsmelder". Wobei der dann explizit (manuell oder mit Logik nach Ablauf einer gewissen Zeit) entsperrt werden muss, und beim Entsperren sich wieder die Helligkeit ändert. Eine bessere Lösung könnte sein: Wenn ich einen Wert vorgebe, wird mittels Telegramm [1,1] solange hochgedimmt, bis der gewünschte Wert erreicht ist, und dann [0,0] geschickt. Da das Ganze wahrscheinlich zu träge ist, damit es direkt in einem Anlauf klappt, wäre ein "Herantasten" nötig.

            Möglicherweise ist hier doch eine Logik das Mittel der Wahl. 😊 Diese würde bei einem Klick auf Plus ein [1,1] senden, dann kurz warten, und ein [0,0] senden. Durch passende Wahl der Wartezeit lässt sich die "Dimmweite" des Klicks festlegen.

            Kommentar


              #7
              Am einfachsten wäre es IMHO, wenn Du das ...relative item per Autotimer in der item-Definition nach ein paar Millisekunden wieder zurücksetzt. Dann hast Du mit den +/- Tasten einen komfortablen Tippbetrieb und musst nicht so schnell reagieren.

              Noch einfacher: dem Bewegungsmelder den Zugriff auf den Dimm-Kanal entziehen und nur ein/aus schalten lassen. Das geht aber nur sinnvoll, wenn der Aktor sich den vorherigen Dimm-Level merkt. Anderenfalls kann den vorherigen Wert aus shNG an den Dimmkanal senden, sobald das Licht eingeschaltet wurde. Dazu reichen ein paar evals und man braucht wahrscheinlich keine Logik.

              Gruß
              Wolfram

              Kommentar


                #8
                Danke Wolfram, gute Idee mit Autotimer!

                Leider ist das Verhalten etwas nichtdeterministisch: Bei den ersten paar Klicks tut sich nichts, beim dritten oder vierten springt die Beleuchtung dann gleich um ca. 40%.

                Was ich aber bemerkt habe: Wenn ich auch nur einmal auf Plus oder Minus klicke, geht der Bewegungsmelder erfreulicherweise in einen "Aha, da wird manuell gedimmt"-Zustand und ich kann anschließend den Schieberegler betätigen, ohne dass der Melder gegenregelt. Gleichzeitig ist der Melder aber nicht permanent gesperrt, d.h. nach Verlassen des Raums und Ablauf der Nachlaufzeit wird er das Licht löschen.

                Danke nochmals und freundliche Grüße

                Lennart

                Kommentar

                Lädt...
                X