Ankündigung

Einklappen
Keine Ankündigung bisher.

Zugriff auf den eigenen Autotimer aus dem Codeblock eines Items heraus

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

    [callidomus] Zugriff auf den eigenen Autotimer aus dem Codeblock eines Items heraus

    Hallo zusammen,

    evtl. stehe ich gerade auf dem Schlauch, aber gibt es einen "schönen" Weg im Codeblock eines Items auf den eigenen Autotimer eines Items zuzugreifen? Also sowas in der Art

    Code:
    self.autotimer('10m', 0) # einschalten
    self.autotimer() # ausschalten
    anstatt von
    Code:
    cd.ganz.langer.pfad.zu.meinem.item.autotimer('10m', 0)
    cd.ganz.langer.pfad.zu.meinem.item.autotimer()
    Hintergrund: Ich habe ein Item welches ich mittels Schalter/Taster händisch auf "1" setze. Damit soll ein Autotimer gestartet werden, der das Item nach Zeit xxx wieder auf "0" setzt. Wenn ich den Wert aber vor Ablauf der Zeit händisch auf "0" setze, dann möchte ich den Autotimer löschen, da er dies ansonsten auch nochmal tut.


    Viele Grüße,
    Michael

    #2
    Nachtrag: Ich habe hier noch ein Problem mit dem Löschen des Autotimers...

    Das hier ist der Codeblock:
    Code:
    if int(value) == 1:
        plugins.debuglog('Heizkreisventile im EG für den Kaminbetrieb temporär gesperrt.', level = 'info')
        # Autotimer für eine Abschaltung nach spätestens 60 Minuten, manuell ist diese auch vorher möglich.
        cd.haus.zentral.klima.kaminbetrieb_heizkreissperre.autotimer('10', 0)
    elif int(value) == 0:
        if trigger.caller == 'Visu':
            plugins.debuglog('Temporäre Sperre der Heizkreisventile im EG manuell aufgehoben.', level = 'info')
            # Autotimer löschen. TODO: Funktioniert nicht!
            cd.haus.zentral.klima.kaminbetrieb_heizkreissperre.autotimer()
        elif trigger.caller == 'Autotimer':
            plugins.debuglog('Temporäre Sperre der Heizkreisventile im EG automatisch aufgehoben.', level = 'info')
        else:
            plugins.debuglog('Unbekannter caller: {}'.format(trigger.caller), level = 'info')
    Hier die Logs vom ersten (kein manuelles Stoppen) und vom zweiten Durchlauf (hier wurde nach zwei Sekunden manuell abgeschaltet).
    Wie man sieht, wird hier nach dem manuellen Ausschalten der Autotimer nochmal getriggert: Bildschirmfoto 2017-03-04 um 15.35.48.png


    Wenn ich das richtig sehe, wurde beim manuellen Ausschalten ein zweiter Autotimer gestartet und mit der Zeile
    Code:
    cd.haus.zentral.klima.kaminbetrieb_heizkreissperre.autotimer()
    lösche ich nur diesen zweiten.

    Wie kann ich also ALLE Autotimer löschen?


    Viele Grüße,
    Michael

    Kommentar


      #3
      Hallo Michael,

      im aktuellen testing kannst Du auch mit item auf das Item zugreifen. Also z.B. item.autotimer()

      Code:
      [FONT=courier new]callidomus.update[/FONT]
      Was ist schlimm daran, wenn der Autotimer das noch einmal auf 0 setzt?

      Bis bald

      Marcus

      Kommentar


        #4
        Hallo Michael,

        der autotimer erzeugt automatisch Timereinträge für das Item. Wenn Du den autotimer löscht, wird das in Zukunft nicht mehr gemacht.
        Der angelegte Timer wird dadurch nicht gelöscht. Das kann man mit item.timer() tun.

        Anstelle des autotimers kannst Du aber den normalen Timer verwenden, wenn Du das sowieso im Codeblock behandelst.

        Bis bald

        Marcus

        Kommentar


          #5
          Hallo Marcus,

          also erst mal: dankeschön für die Sache mit dem Zugriff auf das eigene Item mit "item"! Das ist deutlich schöner als den kompletten Pfad anzugeben.

          "Schlimm" ist das nicht, wenn der Wert ein zweites Mal auf 0 gesetzt wird, aber halt eben auch nicht schön, weil unnötig. Im oben beschriebenen Fall will ich
          • wissen wer hier etwas ein- bzw. ausgeschaltet hat.
          • wenn das schon aus ist, nicht nochmal die Meldung vom Autotimer sehen.

          Mir war bisher nicht bewusst, dass der Timer auch mit relativen Zeiten "gefüttert" werden kann (oder sind der unter https://docs.callidomus.com/de/Logiken/#funktionen beschriebene Timer "cd.itempfad.timer(ZEITSPANNE, WERT)" und der Timer aus dem Item (direkt über dem Autotimer) zwei unterschiedliche Dinge?

          Wie dem auch sei: ich habe den normalen Timer verwendet und habe jetzt genau das Ergebnis welches ich haben wollte.


          ... und wenn ich so darüber nachdenke wäre das eigentlich genau der richtige Einstieg sich mal mit den Zustandsmaschinen zu beschäftigen. Ich habe das Gefühl dass ich damit deutlich schneller zu meinem Ergebnis gekommen wäre ...


          Viele Grüße,
          Michael

          Kommentar

          Lädt...
          X