Ja, PB cached wenn der Adressat nicht Online ist. Das ist gut und Fluch zu gleich. Ich hatte tw. mit Meldungen > 1000 zu kämpfen, das zog sich bis die gelöscht waren (tw. über 1/2 Jahr alt).
Ich versuchs mal indem ich das wesentliche aus der Logik herausziehe... Der Empfänger wird als Value aus einem Item ausgelesen und dann wird unterschieden ob es sich um einen oder um mehrere Empfänger handelt (kann man sicher cleverer machen als meine simple Code-Duplizierung). Weiter führe ich im jeweiligen Item ein Value "Last_IDENT" mit. Dort steht dann eben eine ID drinnen (es wurde schon mal was ausgelöst) oder ist noch jungfräulich.
Zusätzlich lasse ich jede Nacht ein ID-Clearing-Script laufen, welches IDs, welche älter als 2 Tage sind, identifiziert und dann entsprechend an PB als Löschung meldet.
Und hier zum besseren Verständnis ein Beispiel eines Items, hier der Status des Gartentors. Oben jeweils immer das "Hauptitem" und darunter dann, wenn gewünscht, ein indiv. Item für email und darunter PB (Der Grund warum PB ein Unteritem von Email ist rein historisch bedingt).
Hoffe das hilft für den Einstieg, ansonsten einfach melden.
Cheers,
Oliver
Ich versuchs mal indem ich das wesentliche aus der Logik herausziehe... Der Empfänger wird als Value aus einem Item ausgelesen und dann wird unterschieden ob es sich um einen oder um mehrere Empfänger handelt (kann man sicher cleverer machen als meine simple Code-Duplizierung). Weiter führe ich im jeweiligen Item ein Value "Last_IDENT" mit. Dort steht dann eben eine ID drinnen (es wurde schon mal was ausgelöst) oder ist noch jungfräulich.
Code:
PBEmpfaenger = EmailAlertItem.conf['pushbulletrecipient'] # Abarbeitung Pushbullet für singularen Empfänger if isinstance(PBEmpfaenger, str): response = sh.pushbullet.note(EmailBetreff, EmailBody + EmailSignature, PBEmpfaenger) iden = response['iden'] title = response['title'] #Setzen der Iden in Variable zur späteren Verwendung bei der Stornierung der Message if len(sh.return_item(TriggerItem).Emailalert.Pushbullet.Last_IDENT()) != 0: sh.pushbullet.delete(sh.return_item(TriggerItem).Emailalert.Pushbullet.Last_IDENT()) else: logger.debug(": Keine Löschung der PB-Nachricht, da Last_IDENT leer war") sh.return_item(TriggerItem).Emailalert.Pushbullet.Last_IDENT(iden) # Abarbeitung Pushbullet für multiple Empfänger if isinstance(PBEmpfaenger, list): for entry in PBEmpfaenger: response = sh.pushbullet.note(EmailBetreff, EmailBody + EmailSignature, str(entry)) iden = response['iden'] title = response['title'] if len(sh.return_item(TriggerItem).Emailalert.Pushbullet.Last_IDENT()) != 0: sh.pushbullet.delete(sh.return_item(TriggerItem).Emailalert.Pushbullet.Last_IDENT()) sh.return_item(TriggerItem).Emailalert.Pushbullet.Last_IDENT(iden)
Code:
DeleteAge = 172800 # in Sekunden (172800=48Std) logger.info(": Starting Deletion of outdated Pushbullet messages") # Suchen aller LAST_IDENTs for item in sh.match_items('*.Last_IDENT$'): #Prüfen des Alters ob Älter als DeleteAge und ungleich Leer if item.age() > DeleteAge and len(item()) > 5: #Löschen des Eintrages anhand der ID des Feldes Last_IDENT$ logger.info(": DEBUG> Item ({0}) mit Alter({1}) hat Message-ID ({2})".format(item, item.age(), item())) item("") sh.pushbullet.delete(item()) logger.info(": Löschung für Item ({0}) an Pushbullet versendet ({1})".format(item, item())) #else: #logger.info(": Keine Löschung der PB-Nachricht, da Last_IDENT von ({0}) zu neu oder leer war".format(str(item))) logger.info(": Ending Deletion of outdated Pushbullet messages")
Code:
[[[Oeffnungsstatus]]] name = Aussenbereich-Tor type = bool knx_dpt = 1 knx_cache = x/x/x cache = yes [[[[Emailalert]]]] type = bool cache = yes email_recipient = xxx@xyz.de pushbulletrecipient = xxx@xyz.de [[[[[Pushbullet]]]]] type = bool cache = yes [[[[[[Last_IDENT]]]]]] type = str cache = yes
Cheers,
Oliver
Kommentar