Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - item.timer entfernen

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

    [Featurewunsch] - √ - item.timer entfernen

    Hallo,

    item.timer kann aktuell nicht entfernt sondern nur überschrieben werden. Das funktioniert in den meisten Fällen auch sehr gut. Leider nicht immer.
    Hat man aber zB ein Item für einen Szenenaufruf mit enforce_updates = true definiert und einen Timer auf dieses Item gesetzt um eine Szene aufzurufen gibt es zu diesem Punkt keine Möglichkeit mehr die Szene nicht aufzurufen.

    Sauereien wie next auf in 3 Jahren oder in die Vergangenheit zu setzen lasse ich hier jetzt mal aussen vor.

    Von daher wäre ein remove_timer doch ganz nützlich und in 2 Zeilen Code umgesetzt.

    Code:
    --- a/lib/item.py
    +++ b/lib/item.py
    @@ -477,6 +477,9 @@ class Item():
             else:
                 self._sh.scheduler.add(self.id() + '-Timer', self.__call__, value={'value': value, 'caller': caller}, next=next)
    
    +    def remove_timer(self):
    +        self._sh.scheduler.remove(self.id() + '-Timer')
    +
         def type(self):
             return self._type
    Marcus, was denkst du?

    LG

    Mode

    #2
    Hallo Marcus und 'mode'

    Zitat von mode Beitrag anzeigen
    Hallo,

    item.timer kann aktuell nicht entfernt sondern nur überschrieben werden.
    ...
    Von daher wäre ein remove_timer doch ganz nützlich und in 2 Zeilen Code umgesetzt.
    Ich würde mir ebenfalls eine entsprechende Methode wünschen, die den Timer eines Items stillschweigend entfernt und - falls keiner vorhanden ist - einfach nichts macht.

    Daher hatte ich mir ebenfalls eine solche Methode in item.py ergänzt:
    Code:
        def cancel_timer(self):
            try:
                self._sh.scheduler.remove(self.id() + '-Timer');
            except Exception as e:
                logger.exception("Item {}: problem removing timer {}: {}".format(self._path, self.id() + '-Timer', e))
    In meiner Version habe ich noch einen try-catch-Block um den Aufruf von scheduler.remove(), bin jedoch nicht sicher, ob das an dieser Stelle erforderlich ist. Zumindest konnte ich keine Exception in den letzten Wochen beobachten.

    @Marcus: Es wäre nett, wenn Du eine solche Funktion in item.py wohlwollend in Betracht ziehen würdest.

    bye, Alex

    Kommentar


      #3
      Hi Alex,

      das exception Fangen sollte nicht notwendig sein, da in scheduler.remove geprüft wird ob es etwas zu entfernen gibt. Schaden kann es aber auch nicht ;-)

      Alternativ kann man natürlich sh.scheduler.remove(item.id() + '-Timer') auch direkt aufrufen. Ist eben nur nicht so intuitiv....

      Mal sehen was der Meister dazu sagt...

      Lg

      Mode

      Kommentar


        #4
        Hi Daniel,

        danke ist in develop. Ohne das try, da es, wie Du richtig ausgeführt hast, an dieser Stelle nicht notwendig ist.

        Bis bald

        Marcus

        Kommentar

        Lädt...
        X