[gelöst] Kommuniziere mit deiner FHEM-Installation

Begonnen von Beetle2003, 05 August 2019, 17:26:03

Vorheriges Thema - Nächstes Thema

Beetle2003

Hallo,

ich habe vor langer Zeit Telegram zum Versenden von Nachrichten eingebaut. Funktioniert sehr gut. Später kam die Idee auf, dass Fhem mir auf Anfrage Statusnachrichten senden soll.

Dieses funktioniert auch mit einer Einschränkung, dass ich nur mit dem Bot anschreiben kann und er auch die Antwort erhält. Wümschenswert ist, dass jeder zugelassene Chatpartner / Gruppe die Anfrage senden kann und auch die Antwort erhält.

Kann mir jemand mitteilen, ob und wie das geht.

Danke Euch.

MadMax-FHEM

Ich versteh ja nicht so ganz woran es bei dir hapert!?

Du kannst beim Senden angeben wer die Nachricht erhalten soll...
...du siehst an eingehenden Nachrichten von wem sie gekommen ist...

Damit kannst du doch alles machen!?

Was nicht geht: Bot zu Bot...

Schon Wiki gelesen: https://wiki.fhem.de/wiki/TelegramBot

Auch die weiterführenden Links unten!?

Z.B. Message-Dialog etc.

Oder chat-bot: https://forum.fhem.de/index.php?topic=51425.0

Wenn dann noch was unklar ist...
...oder irgendwas nicht geht: einfach im Telegram-Thread fragen...

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)

Meck

 Hallo Beetle2003,
das sollte auf jeden Fall funktionieren. Du musst NUR die PeerIDs freigeben. Ich schlage dir vor lies dir das mal bitte im Wiki durch. Vielleicht kannst du mir noch einen kurzes Feedback geben, was du nicht verstehst, weil ich möchte sowieso das Wiki noch ein bisschen überarbeiten dann kann ich das gleich mit einfließen lassen.
https://wiki.fhem.de/wiki/TelegramBot

Gruß Meck

CBSnake

Hi,

der Bot kann, zumindest ist das mein Stand, einen neuen Kontakt erst anschreiben wenn dieser im zuerst eine Nachricht geschrieben hat.
Also alle gewünschten Kontakte in eine Gruppe und den Bot dazu. Dann schreiben die neuen Kontakte dem Bot.
Nun ist der Chat möglich und du hast die ID zu jedem Kontakt auch in FHEM, wichtig für die Antwort.
Auch in der Gruppe kannst was schreiben, dann hast auch die Gruppe in FHEM und der Bot kann Nachrichten an alle auch in diesem Gruppe schicken anstatt jedem einzeln.
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

Beetle2003

#4
Zitat von: Meck am 05 August 2019, 17:37:44
Hallo Beetle2003,
das sollte auf jeden Fall funktionieren. Du musst NUR die PeerIDs freigeben. Ich schlage dir vor lies dir das mal bitte im Wiki durch. Vielleicht kannst du mir noch einen kurzes Feedback geben, was du nicht verstehst, weil ich möchte sowieso das Wiki noch ein bisschen überarbeiten dann kann ich das gleich mit einfließen lassen.
https://wiki.fhem.de/wiki/TelegramBot

Gruß Meck

Hallo Meck,

danke für Deine Rückmeldung.

Anbei ein Beispiel:
define Telegram_notify notify TeleBot:msgText.* {\
if ($EVTPART1 eq 'Status') {\
if ($EVENT =~ 'Speedtest') {\
            my $ChatId = ReadingsVal("TeleBot", "msgChatId", "");;\
            fhem("set $NAME send \@$ChatId Status des DSL Anschlusses: \n");;\
            fhem("set $NAME cmdSend \@$ChatId { plotAsPng('SVG_FileLog_Speedtest')};");;\
        }\
   }\
}

Ich sende aus Telegram eine Nachricht mit dem Inhalt     Status Speedtest
Wenn ich diesen aus dem Bot sende kommt zurück:

Status des DSL Anschlusses:
[Plot des Speedtest]

Sende ich die gleiche Befehlsfolge aus einem Kontakt, welcher auch im TeleBot unter Contacts hinterlegt ist, erhalte ich keine Antwort.
Ich hatte es so verstanden, dass wenn ich das Reading msgChatId auslese und wieder in der Zeile zum versenden der der Nachricht hinterlege, dieser Kontakt auch die Antwort erhält.

Ich hoffe Du hast mich verstanden. Wenn nicht, gebe mir einen Hinweis, da ich dieses gerne klären würde und ggf es auch anderen helfen kann.

Danke

Nachtrag:
Der TeleBot reagiert auf keine Anfrage ausser auf den des Bot.
Alle anderen Anfragen scheinen erst gar nicht anzukommen.

Weshalb???

MadMax-FHEM

#5
Nicht msgChatId sondern msgPeerId...
...denke ich.

Anhand der kannst du auch prüfen (bevor du etwas tust), ob die Nachricht auch von "jemandem" gekommen ist, der "darf"...

EDIT: verm. funktioniert es in dem Fall, weil "du" der default Peer bist!?

Kurz da nur Handy...

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)

Beetle2003

Zitat von: MadMax-FHEM am 05 August 2019, 23:02:53
Nicht msgChatId sondern msgPeerId...
...denke ich.

Anhand der kannst du auch prüfen (bevor du etwas tust), ob die Nachricht auch von "jemandem" gekommen ist, der "darf"...

EDIT: verm. funktioniert es in dem Fall, weil "du" der default Peer bist!?

Kurz da nur Handy...

Gruđ, Joachim

Hallo Mad-Max,

so wie ich das sehe hat die  msgChatId den gleichen Inhalt die msgPeerId

MadMax-FHEM

#7
Ist mir noch nicht aufgefallen aber ist bei mir auch so...
Hmmm...

Hab das irgendwann mal aus dem "chatBot-Thread" (glaub ich) übernommen...

Hab allerdings keine Gruppen oder mehrere Kontakte, daher kann ich das auch nicht testen...

Ist es auch immer gleich, selbst wenn andere schreiben!?

EDIT: allerdings wenn ich nachlese, dann ist schon eher msgPeerId "richtig"...

Zitat von: device specific help
msgPeerId <text>
The sender id of the last received message
msgChatId <ID>
The id of the chat of the last message, if not identical to the private peer chat then this value will be the peer id

Sorry, 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)

rob

Hi.

Ich hab das so bei mir im Einsatz: Botti ist Mitglied in meiner Gruppe. Jeder Berechtigte der Gruppe darf commands absetzen und die Response geht in die Gruppe.
Commands werden in TG eingeleitet mit einem Slash, damit der Bot weiß, daß er gemeint ist: /gogo gadget set blabla on

Meine Attr

   allowUnknownContacts 0
   cmdKeyword /gogo gadget
   cmdRestrictedPeer -GruppenID_hier_rein und ALLE PeerID, welche erlaubt sein sollen (Gruppe erlaubt nicht implizit alle Mitglieder, Leerzeichen getrennt)
   defaultPeer -GruppenID_hier_rein
   defaultPeerCopy 0
   pollingTimeout 20
   textResponseResult FHEM an $peer :\n Befehl "$cmd" erhalten\n Ergebnis: $result
   textResponseUnauthorized nope!


Das Attr allowUnknownContacts hatte ich solange auf 1, bis ich alle nötigen PeerID kannte und unter cmdRestrictedPeer abgespeichert hatte. Erst danach auf 0.

Vielleicht hilft das ein wenig  :)

Viele Grüße
rob

Beetle2003

Zitat von: rob am 07 August 2019, 21:32:54
Hi.

Ich hab das so bei mir im Einsatz: Botti ist Mitglied in meiner Gruppe. Jeder Berechtigte der Gruppe darf commands absetzen und die Response geht in die Gruppe.
Commands werden in TG eingeleitet mit einem Slash, damit der Bot weiß, daß er gemeint ist: /gogo gadget set blabla on

Meine Attr

   allowUnknownContacts 0
   cmdKeyword /gogo gadget
   cmdRestrictedPeer -GruppenID_hier_rein und ALLE PeerID, welche erlaubt sein sollen (Gruppe erlaubt nicht implizit alle Mitglieder, Leerzeichen getrennt)
   defaultPeer -GruppenID_hier_rein
   defaultPeerCopy 0
   pollingTimeout 20
   textResponseResult FHEM an $peer :\n Befehl "$cmd" erhalten\n Ergebnis: $result
   textResponseUnauthorized nope!


Das Attr allowUnknownContacts hatte ich solange auf 1, bis ich alle nötigen PeerID kannte und unter cmdRestrictedPeer abgespeichert hatte. Erst danach auf 0.

Vielleicht hilft das ein wenig  :)

Viele Grüße
rob

Danke für die Hinweise.

Es hat keine Verbesserung gebracht. Aus dem Bot heraus kann ich eine Anfrage senden und erhalte eine Antwort in dem Bot mit dem Ergebnis der Anfrage.

Sende ich die gleiche Anfrage aus einer Gruppe z.B. Netzwerk, so erhalte ich keine Antwort. In dem Reading Contacts ist die Gruppe hinterlegt.

rob

Zitat von: Beetle2003 am 08 August 2019, 00:06:09
In dem Reading Contacts ist die Gruppe hinterlegt.
Und auch die anderen PeerIDs? Unten hast Du glaub ich geschrieben, dass Du in Contacts mehr stehen hast. Sonst wäre es zu wenig, weil jeder Peer aus der Gruppe heraus den Bot bereits angeschrieben haben sollte und die alle unter Contacts erscheinen sollten (siehe Posts von Meck u.CBSnake).
Die IDs könntest Du später in die Liste unter cmdRestrictedPeer rein nehmen.

Zitat von: Beetle2003 am 05 August 2019, 22:54:04
Der TeleBot reagiert auf keine Anfrage ausser auf den des Bot.
Alle anderen Anfragen scheinen erst gar nicht anzukommen.

Weshalb???
Steht unter defaultPeer Deine GruppenID von z.B. Netwerk?
Hast Du  cmdRestrictedPeer und allowUnknownContacts gesetzt? Wenn ja, nimm es zum Test raus (IDs merken, Attr löschen), sodass zunächst jeder was senden kann.
Dann in TG von jedem Mitglied in "Netzwerk" was senden lassen (z.B. Hallo, keine commands). Test am besten ohne Scripts und Notify.
Wenn alles klappt -> PeerIDs erfassen und alle PeerID + GruppenID in cmdRestrictedPeer rein und allowUnknownContacts=0 setzen.

Ich würde dann schrittweise Notify und Scripts drauf aufbauen. Wenn was nicht klappt, wüsst man an welcher Stelle. Naja, so die Theorie  ;D

Viele Grüße
rob

nils_

vielleicht postest du einfach mal ein list....
so raten hier alle nur rum...

Zitat von: Beetle2003 am 08 August 2019, 00:06:09
Aus dem Bot heraus kann ich eine Anfrage senden und erhalte eine Antwort in dem Bot mit dem Ergebnis der Anfrage.
ich verstehe schon nicht was du immer mit "aus dem Bot" und "in den Bot" meinst.
Wer kommuniziert da mit wem??
viele Wege in FHEM es gibt!

Beetle2003

Zitat von: rob am 08 August 2019, 11:53:13
Und auch die anderen PeerIDs? Unten hast Du glaub ich geschrieben, dass Du in Contacts mehr stehen hast. Sonst wäre es zu wenig, weil jeder Peer aus der Gruppe heraus den Bot bereits angeschrieben haben sollte und die alle unter Contacts erscheinen sollten (siehe Posts von Meck u.CBSnake).
Die IDs könntest Du später in die Liste unter cmdRestrictedPeer rein nehmen.
Steht unter defaultPeer Deine GruppenID von z.B. Netwerk?
Hast Du  cmdRestrictedPeer und allowUnknownContacts gesetzt? Wenn ja, nimm es zum Test raus (IDs merken, Attr löschen), sodass zunächst jeder was senden kann.
Dann in TG von jedem Mitglied in "Netzwerk" was senden lassen (z.B. Hallo, keine commands). Test am besten ohne Scripts und Notify.
Wenn alles klappt -> PeerIDs erfassen und alle PeerID + GruppenID in cmdRestrictedPeer rein und allowUnknownContacts=0 setzen.

Ich würde dann schrittweise Notify und Scripts drauf aufbauen. Wenn was nicht klappt, wüsst man an welcher Stelle. Naja, so die Theorie  ;D

Viele Grüße
rob

Hallo rob,

ich habe weiter getestet.
Wenn ich in die Telegram Gruppen den Bot als Admin hinzufüge, dann funktioniert es.
Kannst du mir das erklären?

Danke

yersinia

Heyho

ich habe damals(tm) basierend auf diesem BlogPost in 99_myUtils.pm folgende Sub eingebaut:
sub Telegram($$$) {
my ($TelegramDevice, $msgText, $msgPeerId) = @_;

##split message for first word
my $Nachricht = ReadingsVal($TelegramDevice,$msgText,"0");
my @array = split(/ /,$Nachricht);

##get peerid
my $peer = ReadingsVal($TelegramDevice,$msgPeerId,"0");

my $command = "set ".$TelegramDevice." message ";
$command .= "@".$peer." ";

if($array[0] eq "Temps")
{
##Temp-Sensoren
my $Temps = "bla: ";
$Temps .= ReadingsVal("BspDevice","BspReading","-");

##[ ........ ]

$command .= $Temps;

fhem($command);
}
elsif($array[0] eq "Keywort")
{
##[......]
}
}


Das ganze wird durch ein notify aufgerufen:
defmod TelegramNotify notify TELEGRAMDEVICE:msgText:.* {Telegram("TELEGRAMDEVICE","msgText","msgPeerId")}

Empfängt der Bot eines der Keywörter, wird es auch an den Sender zurückgesendet. Ist das Keywort nicht bekannt, passiert nichts - auch keine Rückmeldung.

Natürlich sind im TelegramBot-Device cmdRestrictedPeer sowie allowUnknownContacts = 0gesetzt. Das cmd Keywort ist auch kein Teil der Sub-Keywörter.
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Beetle2003

Guten Morgen,

danke für die vielen Anregungen zur Fehlersuche.

Nun habe ich festgestellt, dass wenn ich den Bot in den Gruppen zum Admin mache, funktioniert es.
Ist jemandem bekannt, ob das so muss oder kann dieses auch auf anderem Wege erreicht werden?