FHEM Forum

FHEM => Automatisierung => Thema gestartet von: moppy am 16 August 2017, 19:54:11

Titel: Notify im Notify (warten bis reading aktualisiert ist)
Beitrag von: moppy am 16 August 2017, 19:54:11
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
Titel: Antw:Notify im Notify (warten bis reading aktualisiert ist)
Beitrag von: DeeSPe am 16 August 2017, 20:08:26
Verwende generische Namen und setze ein Pre- oder Suffix dazu.
Dann ein Wenig Perl und Du kannst alles in ein notify schreiben.

Gruß
Dan
Titel: Antw:Notify im Notify (warten bis reading aktualisiert ist)
Beitrag von: Benni am 17 August 2017, 07:52:38
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.
Titel: Antw:Notify im Notify (warten bis reading aktualisiert ist)
Beitrag von: moppy am 17 August 2017, 12:49:41
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