FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Thema gestartet von: justcallmeal am 09 März 2018, 16:50:01

Titel: Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag von: justcallmeal am 09 März 2018, 16:50:01
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

Titel: Antw: Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag von: MadMax-FHEM am 09 März 2018, 16:56:18
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
Titel: Antw: Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag von: justcallmeal am 09 März 2018, 17:00:26
...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
Titel: Antw: Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag von: MadMax-FHEM am 09 März 2018, 17:07:55
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
Titel: Antw: Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag von: justcallmeal am 10 März 2018, 08:38:29
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
Titel: Antw: Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag von: CBSnake am 10 März 2018, 08:58:56
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
Titel: Antw: Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag 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...

Gruß, Joachim
Titel: Antw: Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag von: justcallmeal am 10 März 2018, 11:00:25
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

Titel: Antw: Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag von: CBSnake am 10 März 2018, 16:42:38
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
Titel: Antw: Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag von: justcallmeal am 11 März 2018, 09:00:07
...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
Titel: Antw: Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag von: CBSnake am 11 März 2018, 09:57:04
Na dann poste Mal was du bis jetzt hast bzw welcher Fehler kommt
Titel: Antw: Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag von: justcallmeal am 11 März 2018, 10:51:40
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
Titel: Antw: [gelöst] Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag von: viegener am 11 März 2018, 16:52:41
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*$"  ...

Titel: Antw: [gelöst] Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag von: justcallmeal am 11 März 2018, 17:57:33
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
Titel: Antw: [gelöst] Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag von: justcallmeal am 02 Juni 2018, 10:39:19
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
Titel: Antw:Telegram/teleBot: nach Schlüsselwort Befehl ausführen
Beitrag von: justcallmeal am 02 Juni 2018, 17:27:18
mittlerweile bin ich etwas weiter:

mit dem Setzen d. Attribut repeatsame 10 funktioniert es nun auch bis zu 10 x hintereinander.
Prima, ich habe es gelöst, wenn auch noch immer nicht verstanden.

Das DOIF wird ansonsten ohne repaetsame nur einmal ausgelöst? ...pro Tag, oder Stunde?

Sorry, aber ich habe keine Antwort darauf gefunden. Wann resettet sich das denn von alleine?


VG,
al