Hallo zusammen,
beschäftige mich gerade zum ersten mal mit Notify.
Möchte jetzt für meine FHEM Installation ein Notfiy für meinen TelegramBot schreiben.
Wenn eine Nachricht an den Bot geschickt wird z.B. Stehlampe an soll das Notify reagieren und die Stehlampe anschalten.
Mein Notify sieht aktuell wie folgt aus:
teleBot:msgText.* {
#Stehlampe Esszimmer
if ($EVTPART1 eq 'Stehlampe') {
if ($EVENT =~ 'an') {
fhem("set Stehlampe ON");
}
elsif ($EVENT =~ 'aus') {
fhem("set Stehlampe OFF");
}
}
#Pumpe Zisterne
if ($EVTPART1 eq 'Pumpe') {
if ($EVENT =~ 'an') {
fhem("set Pumpe_Zisterne ON");
}
elsif ($EVENT =~ 'aus') {
fhem("set Pumpe_Zisterne OFF");
}
}
else {
}
}
Es kommt zwar folgende Meldung im Eventmonitor
2020-04-13 21:05:12 TelegramBot teleBot msgText: Stehlampe an
aber das Notify reagiert nicht?
Stehlampe ist EVTPART0
Zitat von: CoolTux am 13 April 2020, 21:09:27
Stehlampe ist EVTPART0
Vielen Dank für deine schnelle Antwort.
Das scheint es aber nicht gewesen zu sein. Das Notify reagiert weiterhin nicht?
Sollte die Pumpe dann EVTPART1 bleiben?
Holla,
grundlegend hat Dir CoolTux ja schon in die richtige Richtung geholfen. Ich wollte nur noch zeigen wie ich (ebenfalls als Anfäger) an solche Sachen immer rangehe:
teleBot:msgText.* {
Log(1, $EVTPART1);
#Stehlampe Esszimmer
if ($EVTPART1 eq 'Stehlampe') {
if ($EVENT =~ 'an') {
Log(1, " Stehlampe soll AN geschaltet werden");
fhem("set Stehlampe ON");
Log(1, " Stehlampe wurde AN geschaltet");
}
elsif ($EVENT =~ 'aus') {
Log(1, " Stehlampe soll AUS geschaltet werden");
fhem("set Stehlampe OFF");
Log(1, " Stehlampe wurde AUS geschaltet");
}
}
usw.
Mit den Log Einträgen siehst Du dann im Log wunderbar welchen Eintrag dein $EVENT oder $EVTPART0 oder $EVTPART1 auslöst. Speziell am Anfang wenn man unsicher mit der Syntax ist, ist das sehr hilfreich. Das ist ganz sicher nicht der Weisheit letzter Schluss, aber für Anfänger hilfreich und hat mich davor bewahrt hier viele Fragen zu stellen die sich wegen einem Tippfehler, oder Missverständnis von EVTPART0 und 1 oder EVEN oder auch $name und $NAME ergaben.
Da ich sowas auch bei mir eingebaut hat noch ein kleiner Tipp:
Schau Dir bitte die Attribute cmdRestrictedPeer die Readings Contacts, msgPeerId usw an und mach es schwerer die Sachen zu schalten. Tue Dir selbst einen Gefallen indem Du solche Anfragen nur von Deinem Kontakt(en) zulässt, den Du selbst eingerichtet hast, alles andere ignoriert wird und nicht ohne zu prüfen einfach irgendwelche Befehle ausführt.
Sicherlich finden es manche nicht so schlimm, wenn jemand auf einmal einem die Lampe hin und her schalten kann, aber ich finde es befremdlich und unverzeihlich wenn ich wüsste dass ich nicht wenigstens versucht habe möglichst viele Hürden einzubauen und es entsprechend möglichst schwer zu machen.
Hoffe geholfen zu haben
Viele Grüße
Andreas
Mach mal ein list vom Notify
list NOTIFYNAME
Woher weißt Du das es nicht auslöst. Es ist eine Sache das das Notify nicht triggert eine andere das die Befehle nicht ausgeführt werden.
Zum Einlesen: https://wiki.fhem.de/wiki/Notify
Zitat2020-04-13 21:05:12 TelegramBot teleBot msgText: Stehlampe an
Damit ist $NAME teleBot
$EVTPART0 msgText:
$EVTPART1 Stehlampe
$EVTPART2 an
Die Abfrage ($EVENT =~ 'an') ist gefährlich - der reagiert auch auf {('Panne aus' =~ 'an')}
Also warum den ganzen Event testen?
Der Trigger auf teleBot:msgText.* ist gefährlich, der anschließende Test wird Fehler werfen wenn es $EVTPART1 oder 2 gar nicht gibt. Also besser exakt triggern
teleBot:msgText:(Stehlampe|Pumpe_Zisterne).(ON|OFF)
Gruß Otto
Ich will ja die notify-Diskussion nicht stören, aber ein ganz anderer Hinweis:
Telegrambot - bietet die Mögichkeit Schaltbefehle (über Favoriten) zu definieren. Damit lässt sich das auch auf bestimmte Absender einschränken und auch Rückmeldungen verschicken
So jetzt habe ich wieder Zeit mich der Sache zu anzunehmen. Habe mal ein list vom aktuellen Notify gemacht
Internals:
DEF teleBot:msgText.* {
#Stehlampe Esszimmer
if ($EVTPART0 eq 'Stehlampe') {
if ($EVENT =~ 'an') {
fhem("set Stehlampe ON");
}
elsif ($EVENT =~ 'aus') {
fhem("set Stehlampe OFF");
}
}
#Pumpe Zisterne
if ($EVTPART0 eq 'Pumpe') {
if ($EVENT =~ 'an') {
fhem("set Pumpe_Zisterne ON");
}
elsif ($EVENT =~ 'aus') {
fhem("set Pumpe_Zisterne OFF");
}
}
else {
}
}
FUUID 5e94b1e8-f33f-f7a6-b2ee-cbed774b92332c3a
NAME Telegram_Message_Center
NOTIFYDEV teleBot
NR 110
NTFY_ORDER 50-Telegram_Message_Center
REGEXP teleBot:msgText.*
STATE active
TRIGGERTIME 1589398075.874
TYPE notify
READINGS:
2020-05-13 21:37:15 state active
Attributes:
icon it_smartphone
room 93_Notify
Zitat
Woher weißt Du das es nicht auslöst. Es ist eine Sache das das Notify nicht triggert eine andere das die Befehle nicht ausgeführt werden.
Naja im Eventmonitor kommt nichts vom notify? Kann ich das irgendwie anders testen?
Ein notify erzeugt nicht zwingend Events, es reagiert darauf.
Ob die Events, auf die das notify reagieren könnte, existieren kannst Du im Eventmonitor prüfen:
Nimm diesen Filter vom notify:
teleBot:msgText.*
oder
teleBot.*
Ich würde auch (mache ich immer zu Beginn so) ausgeben, was denn überhaupt VOR den ganzen "Entscheidungen" reinkommt...
...nicht dass das notify triggert aber für dich nur so aussieht als würde es das nicht tun, weil eben die Entscheidung nicht so zutrifft wie von dir gedacht...
Wurde ja auch von flummy1978 schon mal angeregt...
Gruß, Joachim
und wie das geht ist gut beschrieben :)
https://wiki.fhem.de/wiki/Notify#Mein_notify_geht_nicht_-_wie_kann_ich_mir_selbst_helfen:_Debugging