Telegram/teleBot: nach Schlüsselwort Befehl ausführen

Begonnen von justcallmeal, 09 März 2018, 16:50:01

Vorheriges Thema - Nächstes Thema

justcallmeal

Hallo Gemeinde,

ich experimentiere nun schon einige Zeit erfolglos mit folgendem Befehl herum:

define Regenmenge_anMeinFreund notify teleBot:.* {fhem ("set teleBot message @@<meinFreund> Regen: [Wetterstation:rain]mm") if (ReadingsVal("teleBot","msgText",0) = Wetter)}

Dabei soll ein Freund von mir die Regendaten meiner Wetterstation erhalten, wenn er sie mit der Nachricht "Wetter" (via Telegram-Messenger abruft). Ich will aber das Telegram-Modul nicht grundsätzlich für fhem-Befehle aktivieren, sondern nur diese eine Aktion definieren: sobald mein aktiver teleBot in fhem das Wort "Wetter" empfängt soll er eine entsprechend definierte Nachricht versenden.

Kann mir da jemand helfen?

VG,
al

HM-Sen-DB-PCB, HM-Sec-SCo, HM-MOD-Re-8, HM-SEC-SC-2, HM-Sen-MDIR-O, HM-LC-Sw1PBU-FM, HM-LC-RGBW-WM, HM-ES-PMSw1-SM, HM-LC-Sw1-DR

MadMax-FHEM

Du solltest aber zumindest prüfen, von wem die Nachricht ist und nicht einfach "jedem" antworten...

Und (soweit ich mich entsinne) muss dein Freund erst mal mit dem Bot in Kontakt treten, sonst bekommt er nichts (oder so ähnlich)...

Evtl. hilft das:

https://forum.fhem.de/index.php/topic,51425.0.html

oder das hier:

https://forum.fhem.de/index.php/topic,84838.msg772822.html#msg772822

Es gibt mittlerweile auch das msg-Modul...

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)

justcallmeal

...das liest sich nach erstmaligem Überfliegen, so als ob dort die Lösung steht. Werde es ausprobieren. Mein Freund hat bereits erfolgreich an mein fhem geschrieben und danach habe ich das Attribut wieder so gesetzt, dass kein anderer schreiben kann. Also das wäre schonmal erfüllt :-)

Danke erstmal, werde mich mal durch den anderen Thread hangeln.

VG,
al
HM-Sen-DB-PCB, HM-Sec-SCo, HM-MOD-Re-8, HM-SEC-SC-2, HM-Sen-MDIR-O, HM-LC-Sw1PBU-FM, HM-LC-RGBW-WM, HM-ES-PMSw1-SM, HM-LC-Sw1-DR

MadMax-FHEM

Viel Erfolg!

Wenn's nicht klappt einfach wieder melden...
...wenn's geklappt hat, dann den Thread als gelöst kennzeichnen, umbenennen in beispielsweise: [gelöst] Telegram/teleBot: nach Schlüsselwort Befehl ausführen

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)

justcallmeal

Zitat von: MadMax-FHEM am 09 März 2018, 17:07:55
Wenn's nicht klappt einfach wieder melden...

...mmmh okay, "nicht klappt" wäre zu viel gesagt, aber dort steht einfach zuviel Coding, das ich für meinen relativ simplen Fall nicht runterbrechen kann (dazu bin ich zu wenig Experte). Ich denke, dass der Code ein simpler Einzeiler sein könnte, nämlich

sende Telebotmessage "blah blah blah" an "xyz" wenn sich im Reading des Telebots der msgText in "abc" ändert.

...das sollte doch machbar sein, oder?

Vielleicht kann mir ja jemand einen Vorschlag machen, den ich einfacher ausprobieren kann.

VG,
al
HM-Sen-DB-PCB, HM-Sec-SCo, HM-MOD-Re-8, HM-SEC-SC-2, HM-Sen-MDIR-O, HM-LC-Sw1PBU-FM, HM-LC-RGBW-WM, HM-ES-PMSw1-SM, HM-LC-Sw1-DR

CBSnake

Moin,


([Deinbot:"msgText"]
and ([Deinbot:msgText] =~ "etter" ## Trigger durch Aenderung/Update des Userreading abfrage möglicher Stichwoerter, hier enthält "etter" um groß/Kleinschreibung zum umgehen
and ([?deinbot:msgPeer] eq "nick" or [?deinbot:msgPeer] eq "nocheinnick")) ##erlaubte Nicks
(set deinbot msg @[deinbot:msgPeer]  [Wetterstation:rain]mm )


Ungeprüft da aus meiner config kopiert und angepasst da bei mir noch mehr mit dranhängt
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

MadMax-FHEM

Hast du den zweiten Link auch mal angesehen!?

Der Thread ist kurz, der Link geht genau auf ein (wie ich finde) simples Beispiel wie du es vorhast...

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)

justcallmeal

#7
Zitat von: MadMax-FHEM am 10 März 2018, 09:42:38
Hast du den zweiten Link auch mal angesehen!?
Der Thread ist kurz, der Link geht genau auf ein (wie ich finde) simples Beispiel wie du es vorhast...
ja, nur dache ich, dass es für mich überschaubarer wäre, wenn ich ohne Subroutinen auskommen könnte. Von daher gefällt mir der Ansatz von CBSnake eigentlich ganz gut; allerdings funzt es noch nicht so wie gewünscht. Beim Speichern der Codezeilen kommen Fehlermeldungen:

ZitatUnknown command ([teleBot:"msgText"], try help. Unknown command and, try help. Unknown command and, try help. Unknown command (set, try help.

Fehlt da evtl noch ein "if" oder sonst etwas vorneweg?

([teleBot:"msgText"]
and ([teleBot:msgText] =~ "etter"
and ([?teleBot:msgPeer] eq "Mein_Freund" or [?teleBot:msgPeer] eq "ich_selbst"))
(set teleBot msg @[teleBot:Mein_Freund]  [Wetterstation:rain]mm )


VG,
al

HM-Sen-DB-PCB, HM-Sec-SCo, HM-MOD-Re-8, HM-SEC-SC-2, HM-Sen-MDIR-O, HM-LC-Sw1PBU-FM, HM-LC-RGBW-WM, HM-ES-PMSw1-SM, HM-LC-Sw1-DR

CBSnake

Moin,

naja das ist der Code aus einem DOIF, also muss da noch ein define doif_irgendwas doif "hier der Code".  vorweg hatte ich vergessen zu erwähnen und telebot etc musst natürlich anpassen
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

justcallmeal

...ahh DOIF, - sorry, aber ich habe mit DOIF noch keine Erfahrung. Habe nur notifies. Werde mal schauen, ob ich damit klarkomme. Bereits erste durchgeführte Versuche endeten mit Fehlermeldungen, die auf falsche Klammersetzung hinweisen.

VG,
al
HM-Sen-DB-PCB, HM-Sec-SCo, HM-MOD-Re-8, HM-SEC-SC-2, HM-Sen-MDIR-O, HM-LC-Sw1PBU-FM, HM-LC-RGBW-WM, HM-ES-PMSw1-SM, HM-LC-Sw1-DR

CBSnake

Na dann poste Mal was du bis jetzt hast bzw welcher Fehler kommt
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

justcallmeal

Zitat von: CBSnake am 11 März 2018, 09:57:04
Na dann poste Mal was du bis jetzt hast bzw welcher Fehler kommt

Hi,
hab's endlich doch hinbekommen  :)

define wetter2teleBot DOIF (([teleBot:"msgText"] and [teleBot:msgText] =~ "etter" and [?teleBot:msgPeer] eq "Lieschen_Mueller")) (set teleBot msg @Lieschen_Maier Regen: [Wetterstation:rain]mm )

Vielen Dank für Eure Unterstützung!

al
HM-Sen-DB-PCB, HM-Sec-SCo, HM-MOD-Re-8, HM-SEC-SC-2, HM-Sen-MDIR-O, HM-LC-Sw1PBU-FM, HM-LC-RGBW-WM, HM-ES-PMSw1-SM, HM-LC-Sw1-DR

viegener

#12
Schön wenn das klappt, ich würde gerne noch zwei Anmerkungen anbringen, vielleicht auch für andere die diesen Thread lesen:

1) Eine Überprüfung des Senders auf den Namen ist alles andere sicher - der Name ist nicht eindeutig und frei wählbar - ein Vergleich auf die peerId ist hier definitiy besser ! - Reading msgPeerId

2) Ich verstehe nicht, warum Du die eingebauten Mechanismen des Moduls nicht nutzt, denn erstens sollte das doch einfacher sein, zweitens ist der jetzige regexp sehr allgemein und trifft auch auf retter - klettern - wettergebnisse - Bretterfahrungen und viele andere Worte zu.
Also vielleicht besser etwas wie: ... =~ "^\s*[Ww]etter\s*$"  ...

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

justcallmeal

Zitat von: viegener am 11 März 2018, 16:52:41
Eine Überprüfung des Senders auf den Namen ist alles andere sicher - der Name ist nicht eindeutig und frei wählbar - ein Vergleich auf die peerId ist hier definitiy besser ! - Reading msgPeerId
Da hast Du Recht und ich habe den Code auf die msgPeerId umgestellt, - wenngleich das in meinem Fall eine eher untergeordnete Rolle spielt.

Das mit den "eingebauten Mechnismen" habe ich ehrlich gesagt (noch) nicht so drauf. Werde mich mal damit auseinandersetzen.

Danke für Deine Eingabe hierzu!

VG,
al
HM-Sen-DB-PCB, HM-Sec-SCo, HM-MOD-Re-8, HM-SEC-SC-2, HM-Sen-MDIR-O, HM-LC-Sw1PBU-FM, HM-LC-RGBW-WM, HM-ES-PMSw1-SM, HM-LC-Sw1-DR

justcallmeal

Hallo zusammen,
ich muss das Thema nochmal aufgreifen, nachdem offensichtlich wurde, dass das Abrufen meiner Wetterdaten via TELEGRAM leider nicht immer funktioniert und ich es bislang nicht geschafft habe herauszufinden warum das so ist.
Mal funktioniert es mit der Eingabe von "etter" und nicht mit "Wetter" und mal geht es gar nicht.

Hier nochmal der Code:
define wetter2teleBot4 DOIF (([teleBot:"msgText"] and [teleBot:msgText] =~ "etter" and [?teleBot:msgPeerId] eq "123456789")) (set teleBot msg @123456789 Temp.: [Wetterstation:temperature]°C  Feuchtigkeit: [Wetterstation:humidity]% Regen: [Wetterstation:rain]mm Wind: [Wetterstation:windSpeed]km/h Windrichtung: [WindRichtung_text:state] )
In den readings von Telegram kommt das gesendete "Wetter" an, wird aber scheinbar irgendwie nicht getriggert.

Im log von telegram sieht das so aus:

2018-06-02_10:13:08 teleBot msgId: 536
2018-06-02_10:13:08 teleBot msgPeer: Hans_Wurst
2018-06-02_10:13:08 teleBot msgPeerId: 123456789
2018-06-02_10:13:08 teleBot msgChat: Hans_Wurst
2018-06-02_10:13:08 teleBot msgChatId: 123456789
2018-06-02_10:13:08 teleBot msgText: Wetter
2018-06-02_10:13:08 teleBot msgReplyMsgId:
2018-06-02_10:13:08 teleBot msgFileId:


Wenn das Anfordern von Wetterdaten erfolgreich war, steht am ende des Telegram-logs noch ein "success" wie nachfolgend aufgeführt

2018-06-02_10:13:08 teleBot sentMsgResult: SUCCESS

Anderenfalls fehlt diese Zeile.

Kann mir jemand helfen, wie ich dieser seltsamen "Willkür" auf die Spur komme?

VG,
al
HM-Sen-DB-PCB, HM-Sec-SCo, HM-MOD-Re-8, HM-SEC-SC-2, HM-Sen-MDIR-O, HM-LC-Sw1PBU-FM, HM-LC-RGBW-WM, HM-ES-PMSw1-SM, HM-LC-Sw1-DR