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
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
...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
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
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
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
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
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
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
...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
Na dann poste Mal was du bis jetzt hast bzw welcher Fehler kommt
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
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*$" ...
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
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
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