Ankündigung

Einklappen
Keine Ankündigung bisher.

eval mit if und else, else soll nichts ändern

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

    eval mit if und else, else soll nichts ändern

    Hi

    Ja, die Überschrift ist nicht die Beste, weiß aber nicht, wie ich folgendes in eine kurze Überschrift bekomme.

    SHNG 1.8.2 Master
    smartVISU 3.1.0

    Ich habe diese Items als Beispiel:

    Code:
        Trockner:
            Meldung:
                type: bool
                eval: 1 if sh.MieleDevices.Dryer.state.status.value_raw() == 7 and sh.Waschhaus.Trockner.Meldung.Enable() == 1 else 0
                eval_trigger: MieleDevices.Dryer.state.status.value_raw
                Enable:
                    type: bool
                    eval: 1 if sh.MieleDevices.Dryer.state.status.value_raw() != 7 else value
                    eval_trigger: MieleDevices.Dryer.state.status.value_raw
    Der Hintergrund ist der, dass ich eine Meldung bekommen möchte, sobald der Trockner auf Status 'Ende' (entspricht dem Wert 7) geht.
    Das alleine klappt auch eigentlich, hat aber einen unschönen Nebeneffekt. Da der Zustand so stehen bleibt bis ich den Trockner ausschalte, bekomme ich die Ende Meldungen in der Visu (Soundfile und Toast Nachricht in der SmartVISU) immer wieder, wenn ich die Seite wechsle oder neu lade. Daher habe ich mir ein Hilfsitem (Trockner.Meldung.Enable) eingebaut.
    Trockner.Meldung geht damit nur auf 1, wenn der Trocknerstatus auf 7 (Ende) geht und Trockner.Meldung.Enable auch auf 1 ist, sonst 0. Sollte passen.

    Also muss noch das Trockner.Meldung.Enable Item richtig gesetzt werden und da hänge ich jetzt.
    Aktuell triggert auch hier der Trocknerstatus das eval.
    Das Item soll 1 sein, wenn der Status NICHT 7 ist. Soweit so gut, aber wenn der Status auf 7 (also Ende) geht, soll das Item auf der 1 stehen bleiben.
    Jetzt will eval aber unbedingt ein 'else' haben.
    Wie ist die korrekte Syntax um zu sagen:

    Setze den Itemwert auf 1 wenn der Trocknerstatus NICHT 7 ist, aber wenn der Status 7 ist, mache einfach gar nichts.

    Stimmt das mit 'else value'?
    Oder muss es 'else None' sein? EDIT: Lösung ist 'else None', klappt aber trotzdem nicht.
    Oder eine andere Syntax?
    Oder geht das gar nicht?

    Das Zurücksetzen des Enable Items auf 0 würde ein Button in status.toast in der Visu übernehmen. Das wäre quasi die Bestätigung durch den Nutzer. Dadurch sollte die Meldung verschwinden. Oder geht das bei einem Item mit eval/eval_trigger gar nicht, dass man den Wert dann auch noch über einen Button in der Visu ändert?

    In Einzelteilen funktioniert das wie gesagt schon, nur die Kombination, so wie ich mir das vorstelle, klappt noch nicht so richtig.

    Das Plugin liefert übrigens alle 5s ein Update durch ein Push Event vom Miele Server und alle 5min ein Update durch Polling.

    Gruß, Martin
    Zuletzt geändert von Sipple; 18.01.2022, 08:56. Grund: Fehler korrigiert

    #2
    Gugst Du hier und suchst auf der Seite nach None.
    Viele Grüße
    Martin

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

    Kommentar


      #3
      Argh, danke, blind ich war.
      Auf der Dokuseite war ich und hab gesehen, dass man else braucht.

      Klappt das mit dem Button auf 0 setzen oder brauch ich das gar nicht probieren?
      Zuletzt geändert von Sipple; 14.01.2022, 11:40.

      Kommentar


        #4
        None wirst du groß schreiben müssen.
        Das mit dem manuellen Schreiben würde schon auch gehen. Aber erst wenn das hier durch ist: https://github.com/smarthomeNG/smarthome/pull/454
        Dann kannst du das eval mit:
        Code:
        value if sh..self.triggered_by() == "smartVISU" else
        starten

        Kommentar


          #5
          Ok, danke für den Hinweis.
          Hab mich gestern halb tot getestet. Egal was ich mache, das Meldungs Item wird augenblicklich zurück auf 1 gesetzt, wenn ich versuche - wodurch auch immer - es auf 0 zu bringen. Alles klappt bis zu dem Punkt an dem die Meldung kommt, man sie registriert und dann aber weg bringen will. Einzige Lösung ist bisher das Gerät auszuschalten. Dann ist auch die Meldung wieder 0.
          Ich geb's mit eval und eval_trigger zumindest vorerst auf und versuche es mit einer Logik. Damit habe ich solche Probleme bisher immer gelöst bekommen. Mag kein schöner Code werden, aber wenn's läuft...

          Kommentar

          Lädt...
          X