Notify für FHEM Steuerung per Telegrambot

Begonnen von michisa86888, 13 April 2020, 21:06:11

Vorheriges Thema - Nächstes Thema

michisa86888

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?

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

michisa86888

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?

flummy1978

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

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

#5
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

viegener

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

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

michisa86888

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?

Otto123

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.*
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz