Notify im Notify (warten bis reading aktualisiert ist)

Begonnen von moppy, 16 August 2017, 19:54:11

Vorheriges Thema - Nächstes Thema

moppy

Hallo und guten Abend,

ich habe ein Notify, welches auf Textnachrichten über Telegram reagiert (bspw. Sprit -> Sende Spritpreise von 4 Tankstellen an Telegramempfänger)


Telegram:msgText.* {
if ($EVTPART1 eq 'Licht') {
if ($EVENT =~ 'an') {
fhem("set ZW_Wz_Wandschalter on");
fhem("set ZW_Wz_Essen on");
}
elsif ($EVTPART1 eq "Sprit") {
fhem("set Tankstelle_Allguth_notify active");
fhem("set Tankstelle_Chieming_notify active");
fhem("set Tankstelle_Rosenheimerstr_notify active");
fhem("set Tankstelle_Isartor_notify active");
fhem("set Telegram send Bitte warten, die Werte werden aktualisiert");
fhem("set TankstelleIsartor reread");
fhem("set TankstelleChieming reread");
fhem("set TankstelleRosenheimerstr reread");
fhem("set TankstelleAllguth reread");
}
else {

}
}


Die Werte sollen vor dem Senden geupdatet werden (daher set XXX reread) ... und erst dann ans Handy geschickt werden, wenn die Aktualisierung erfolgt ist. Daher habe ich mir ein zweites Notify (bzw. eines je definierte Tankstelle) eingerichtet, welches die Telegrammessage rausschickt, sobald der Preis aktualisiert wurde. Hier ein beispielhaftes Notify:


TankstelleChieming:Diesel.*  {
fhem("set Telegram send Chieming: [TankstelleChieming:Diesel]€");
fhem("set Tankstelle_Chieming_notify inactive")
}


Das Notify wird nach dem durchlaufen wieder inactive gesetzt, sonst würde ich ja ständig Meldungen bekommen wenn sich das HTTPMOD selbst aktualisiert.

Und jetzt meine Frage: Das ganze funktioniert natürlich, aber ich brauche hier für 4 Tankstellen 5 Notifys. Kann ich das ganze in ein Notify (oder DOIF) packen? Vermutlich ist die Lösung ganz einfach, ich bekomms aber leider nicht hin.

Ich freu mich auf Eure Hilfe,
lg Emanuel
Intel NUC7i5 - Proxmox
HP Microserver Gen8 3,3ghz Xeon
http://coldcorner.de

DeeSPe

Verwende generische Namen und setze ein Pre- oder Suffix dazu.
Dann ein Wenig Perl und Du kannst alles in ein notify schreiben.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Benni

Zitat von: DeeSPe am 16 August 2017, 20:08:26
Verwende generische Namen

Das hat er im Prinzip ja schon.

Er könnte also direkt mit entsprechenden regex arbeiten.

Bsp.:


set Tankstelle.*notify inactive



Tankstelle.*:Diesel.*  {
fhem("set Telegram send $NAME: [$NAME:Diesel]€");
}


Du könntest den Tankstellen-Namen ggf. noch im alias-Attribut oder einem userAttr im jeweiligen HTTPMOD hinterlegen. Das könntest du dann noch per AttrVal auslesen.

moppy

#3
Vielen Dank für die Antworten,

damit konnte ich die 4 Notifys für die Tankstellen auf eines reduzieren. Der Tipp mit dem Alias war super, ich habe das jetzt so gelöst und es funktioniert top:

Tankstelle.*:Diesel.*  {
my $DNAME = AttrVal($NAME,"alias",$NAME);
fhem("set Telegram send $DNAME: Diesel [$NAME:Diesel]€");
}


dann im Telegram Notify noch ein at nach 15 Sekunden, damit das Notify wieder auf inactive gesetzt wird.


...
elsif ($EVTPART1 eq "Sprit") {
fhem("set spritpreise_telegram_notify active");
fhem("set Telegram send Bitte warten, die Werte werden aktualisiert");
fhem("set Tankstelle.* reread");
fhem("define at_spritpreise_inactive at +00:00:15 set spritpreise_telegram_notify inactive")
...


Perfekt!

lg, Emanuel
Intel NUC7i5 - Proxmox
HP Microserver Gen8 3,3ghz Xeon
http://coldcorner.de