Ankündigung

Einklappen
Keine Ankündigung bisher.

EVAL gurus wanted ;)

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

    #61
    Zitat von Sisamiwe Beitrag anzeigen
    Ich möchte die Differenz zwischen einer Datetime in der Zukunft und dem jetzt in Sekunden haben und das als Dauer für einen autotimer nutzen.

    Die Anwendung wäre, die Heizung von jetzt (now) bis zum angegebenen Zeitung in den Standby (Betriebsart) zu schicken.

    Bislang habe ich das in einer Logik gemacht, frage mich aber, ob es nicht auch in einem eval gehen würde.
    Ich antworte mir mal selbst. ;o)

    Ja, es ist möglich, ein einem eval die Zeitdifferenz in Sekunden zwischen einem Datetime in der Zukunft und dem Datetime Jetzt zu errechnen, und zwar so:
    Code:
    int((datetime.datetime.strptime(sh.heizung.abwesenheit.enddatetime_autotimer(), '%Y-%m-%dT%H:%M:%S') - datetime.datetime.now()).total_seconds())
    Dabei wir dem Item "sh.heizung.abwesenheit.enddatetime_autotimer( )" per Visu ein Datetime im Isoformat zugewiesen. Von diesem Datetime wird das Datetime "Jetzt" subtrahiert und als Integerzahl in Sekunden ausgegeben.

    Vielleicht braucht es mal einer.

    Ach ja, was auch funktioniert und so nicht explizit in der Doku steht, ist dass man dem autotimer nicht nur über ein Hilfsitem die Dauer zuweisen kann, sondern auch den Wert, der nach Ablauf des Autotimers dem Item zugewiesen werden soll, per Hilfsitem festlegen.

    Das sieht dann bspw so aus:
    Code:
    heizung:
        abwesenheit:
            type: num
            autotimer: sh.heizung.abwesenheit.laufzeit_autotimer() = sh.heizung.abwesenheit.betriebsart_anwesenheit()
            
            laufzeit_autotimer:
                name: Dauer bis zur Deaktivierung in Sekunden
                type: num
                eval: int((datetime.datetime.strptime(sh.heizung.abwesenheit.enddatetime_autotimer(), '%Y-%m-%dT%H:%M:%S') - datetime.datetime.now()).total_seconds())
                eval_trigger: heizung.abwesenheit.enddatetime_autotimer
              
            enddatetime_autotimer:
                name: Datetime für Ende des Standby
                type: str
                visu_acl: rw
                cache: yes
                on_update:
                    - heizung.abwesenheit = sh.heizung.abwesenheit.betriebsart_abwesenheit()
                
            betriebsart_abwesenheit:
                type: num
                cache: yes
                initial_value: 1
                
            betriebsart_anwesenheit:
                name: x
                remark: ist eine Kopie der Betriebsart und wird per on_change mit geändert
                type: num
                cache: yes
                initial_value: 0
    Beste Grüße
    Michael

    Kommentar


      #62
      Zitat von mumpf Beitrag anzeigen
      da man in einem eval keinen Import machen kann.
      Das ist nicht richtig. Das hier:

      Code:
      boost_remaining_a:
          type: num
          eval: __import__('math').ceil(sh.ventilation.booster.logics.boost_duration()/60)
          eval_trigger = ventilation.booster.logics.boost_duration
      rechnet mir schon seit 2014 brav die verbleibenden "vollen" Minuten der KWL-Stoßlüftung aus.
      (Ja, ich weiß - math wird mittlerweile per default importiert - damals aber noch nicht, und ich hab's nie angepasst.)

      /tom

      Kommentar


        #63
        Zitat von Sisamiwe Beitrag anzeigen
        Ach ja, was auch funktioniert und so nicht explizit in der Doku steht, ist dass man dem autotimer nicht nur über ein Hilfsitem die Dauer zuweisen kann, sondern auch den Wert, der nach Ablauf des Autotimers dem Item zugewiesen werden soll, per Hilfsitem festlegen.
        Sollte gemäß Msinn eigentlich in der Doku stehen, siehe seinen letzten Kommentar zu diesem Issue.
        /tom

        Kommentar


          #64
          Steht auch in der Doku. Guckst Du hier.

          Im Wiki steht die Doku ja nicht mehr
          Zuletzt geändert von Msinn; 11.03.2020, 19:01.
          Viele Grüße
          Martin

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

          Kommentar


            #65
            Zitat von Msinn Beitrag anzeigen
            Steht auch in der Doku. Guckst Du hier.
            Ich möchte nicht kleinlich sein, aber wo genau liest Du in der Doku von autotimer heraus, dass die Wertzuweisung auch über ein Item passieren kann?
            In der Doku steht:
            Code:
            item:
                autotimer: <dauer> = <wert>
            Der Wert für dauer kann auf folgende Weise angegeben werden:
            1. eine Zahl, die die Anzahl an Sekunden angibt
            2. eine Zahl gefolgt von m, gibt die Anzahl an Minuten an

            Es können aber sowohl <dauer> als auch <wert> über ein Item zugewiesen werden.

            Danke für die Klarstellung

            Kommentar


              #66
              Zitat von Sisamiwe Beitrag anzeigen
              Ich möchte nicht kleinlich sein, aber wo genau liest Du in der Doku von autotimer heraus, dass die Wertzuweisung auch über ein Item passieren kann?
              Du bist herzlich eingeladen mitzuarbweiten und die Doku zu verbessern.
              Viele Grüße
              Martin

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

              Kommentar


                #67
                Zitat von Sisamiwe Beitrag anzeigen
                Ich möchte nicht kleinlich sein, aber wo genau liest Du in der Doku von autotimer heraus, dass die Wertzuweisung auch über ein Item passieren kann?
                Du zitierst die Doku doch selber:
                Zitat von Sisamiwe Beitrag anzeigen
                Es können aber sowohl <dauer> als auch<wert>über ein Item zugewiesen werden.
                Vielleicht verstehe ich Deine Frage nicht richtig, sonst würde ich sagen, die hast Du Dir selber beantwortet .

                Gruß, Waldemar

                Kommentar

                Lädt...
                X