Onkelandy
Ich habe bzgl. des "Missbrauchs" der UZSU noch eine Frage.
Aber erstmal zur Anwendung.
Wie bereits hier beschrieben, möchte ich die Timer IN der Viessmann-Heizung über die UZSU setzen. Ich habe dazu für jede Timer-Anwendung ein entsprechenes UZSU-Item angelegt. Im Plugin lese ich die Timer der Heizung aus und bringe sie in das Format der UZSU. Dann lese ich das bestehende UZSU dict ein und modifiziere die "list" im dict entsprechend der ausgelesenen Timer.
Das klappt auch.
Nun möchte ich auch das Setzen der Timer in der Heizung genau so machen. Wenn die UZSU sich ändert, soll mein Plugin die UZSU auslesen und die Schaltzeiten in das Viessmann Format bringen und schreiben.
Für beide Funktionen habe ich ein Attribut eingeführt, dass "viess_timer" heißt. Der Wert des Atrributes ist die Anwendung. Hier ein Beispiel:
Im Plugin in der Funktion update_item habe ich das so gelöst:
Allerdings wird die Funktion bei Änderung des UZSU-Items nicht getriggert. Wird das vom UZSU Plugin irgendwie abgefangen?
Hast Du vielleicht eine Idee?
Ich habe bzgl. des "Missbrauchs" der UZSU noch eine Frage.
Aber erstmal zur Anwendung.
Wie bereits hier beschrieben, möchte ich die Timer IN der Viessmann-Heizung über die UZSU setzen. Ich habe dazu für jede Timer-Anwendung ein entsprechenes UZSU-Item angelegt. Im Plugin lese ich die Timer der Heizung aus und bringe sie in das Format der UZSU. Dann lese ich das bestehende UZSU dict ein und modifiziere die "list" im dict entsprechend der ausgelesenen Timer.
Das klappt auch.
Nun möchte ich auch das Setzen der Timer in der Heizung genau so machen. Wenn die UZSU sich ändert, soll mein Plugin die UZSU auslesen und die Schaltzeiten in das Viessmann Format bringen und schreiben.
Für beide Funktionen habe ich ein Attribut eingeführt, dass "viess_timer" heißt. Der Wert des Atrributes ist die Anwendung. Hier ein Beispiel:
Code:
schaltzeiten: type: bool struct: - uzsu.child uzsu: name: Schaltzeiten im UZSU dict Format viess_timer: Timer_Warmwasser
Code:
def update_item(self, item, caller=None, source=None, dest=None): if self.alive and caller != self.get_shortname(): self.log_info("Update item: {}, item has been changed outside this plugin".format(item.id())) self.log_debug("update_item was called with item '{}' from caller '{}', source '{}' and dest '{}'".format(item, caller, source, dest)) if self.has_iattr(item.conf, 'viess_send'): ........ elif self.has_iattr(item.conf, 'viess_timer'): timer_app = self.get_iattr_value(item.conf, 'viess_timer') uzsu_dict = item() self.log_debug('Got changed UZSU timer: {} on timer application {}.'.format(uzsu_dict, timer_app)) self._uzsu_dict_to_viess_timer(timer_app, uzsu_dict) elif self.has_iattr(item.conf, 'viess_update'): if item(): self.log_debug('Reading of all values/items has been requested') self.update_all_read_items()
Hast Du vielleicht eine Idee?
Kommentar