Hallo,
aktuell habe ich einen Telegrambot eingerichtet der auf einem Smartphone Nachrichten von 3 verschiedenen Quellen anzeigt.
Zwischenzeitlich wurden die Nachrichten an zwei Smartphones versandt. Daher sind 2 peers eingerichtet.
Die Quellen sind zwei fhem Systeme auf zwei Raspberry 4 und eine komplett unabhängige Lösung die direkt mit https://api.telegram.org/bot... die Nachricht übermittelt.
Wichtig ist, dass alle 3 Quellen Nachrichten versenden können und eine Quelle auch Nachrichten empfangen kann um zB Lampen zu schalten.
Auf dem ersten Raspberry ist telegram so eingerichtet:
define TelegramBot2 TelegramBot
attr TelegramBot2 DbLogExclude .*
attr TelegramBot2 allowUnknownContacts 0
attr TelegramBot2 cmdFavorites XXX/commandXX
attr TelegramBot2 cmdKeyword XXTuDasXX
attr TelegramBot2 cmdRestrictedPeer 1xxxxxxxxxx
attr TelegramBot2 cmdTimeout 60
favorites2Col\
1
attr TelegramBot2 defaultPeer 1xxxxxxxxxx
attr TelegramBot2 disable 0
attr TelegramBot2 favorites2Col 1
attr TelegramBot2 icon telegram
attr TelegramBot2 maxRetries 3
attr TelegramBot2 pollingTimeout 60
attr TelegramBot2 room ----
attr TelegramBot2 verbose 0
# FAILS 0
# NAME TelegramBot2
# NR 424
# OLD_POLLING 226
# POLLING 226
# SNAME TelegramBot2
# STATE Polling
# TYPE TelegramBot
# UPDATER 0
# WAIT 0
# eventCount 276
# me 1xxxxxxxxxx:XXXXX:@XXXXXbot
# sentLastResult SUCCESS
# sentMsgId 185663
# sentMsgOptions -silent-
# sentMsgPeer X
# sentMsgPeerId 1xxxxxxxxxx
# sentMsgResult SUCCESS
# sentMsgText Alles OK
# sourceVersion $Id: 50_TelegramBot.pm 27218 2023-02-13 22:45:48Z viegener $
# AliasCmds:
# Contacts:
# 1xxxxxxxxxx 1xxxxxxxxxx:X:
# 6xxxxxxxxx 6xxxxxxxx:X:
# HU_DO_PARAMS:
# NAME
# addr https://api.telegram.org:443
# auth 0
# boundary TelegramBot_boundary-x0123
# buf
# code 200
# conn
# data
# displayurl <hidden>
# header agent: TelegramBot/1.0
#User-Agent: TelegramBot/1.0
#Accept: application/json
#Accept-Charset: utf-8
#Content-Type: multipart/form-data; boundary=TelegramBot_boundary-x0123
# hideurl 1
# host api.telegram.org
# httpheader HTTP/1.1 200 OK
#Server: nginx/1.18.0
#Date: Wed, 14 Feb 2024 09:34:34 GMT
#Content-Type: application/json
#Content-Length: 220
#Connection: close
#Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
#Access-Control-Allow-Origin: *
#Access-Control-Allow-Methods: GET, POST, OPTIONS
#Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection
# hu_blocking 0
# hu_filecount 123
# hu_port 443
# hu_portSfx
# loglevel 4
# method POST
# path /botXXX/sendMessage
# protocol https
# redirects 0
# timeout 60
# url https://api.telegram.org/botXXX/sendMessage
# args:
# 1xxxxxxxxxx
# Alles OK
# undef
# 0
# undef
# -silent-
# 2
# hash:
# sslargs:
# HU_UPD_PARAMS:
# FD 16
# NAME
# addr https://api.telegram.org:443
# auth 0
# buf
# code 200
# displayurl <hidden>
# header agent: TelegramBot/1.0
#User-Agent: TelegramBot/1.0
#Accept: application/json
#Accept-Charset: utf-8
# hideurl 1
# host api.telegram.org
# hu_blocking 0
# hu_filecount 2010
# hu_inProgress TelegramBot_UpdatePoll:2434 TelegramBot_Callback:755 __ANON__:783
# hu_port 443
# hu_portSfx
# isPolling update
# loglevel 4
# method GET
# offset 0
# path /botXXX/getUpdates?offset=0&limit=5&timeout=60
# protocol https
# redirects 0
# timeout 125
# url https://api.telegram.org/botXXXX/getUpdates?offset=0&limit=5&timeout=60
# hash:
# sslargs:
# READINGS:
# 2024-02-07 09:43:55 Contacts 1xxxxxxxxxx:X: 6xxxxxxxx:X:
# 2024-02-14 10:46:38 PollingErrCount 4
# 2024-02-14 10:46:38 PollingLastError Callback returned error :Conflict: terminated by other getUpdates request; make sure that only one bot instance is running:
# 2024-02-14 09:34:39 deleteOffset 08:00:00
# 2024-02-07 09:43:55 msgChat X
# 2024-02-07 09:43:55 msgChatId 1xxxxxxxxx
# 2024-02-07 09:43:55 msgDate 2024-02-07 09:43:55
# 2024-02-07 09:43:55 msgFileId
# 2024-02-07 09:43:55 msgId 184736
# 2024-02-07 09:43:55 msgPeer X
# 2024-02-07 09:43:55 msgPeerId 1xxxxxxxxxx
# 2024-02-07 09:43:55 msgReplyMsgId
# 2024-02-07 09:43:55 msgText /Befehl1
# 2024-02-07 09:43:55 prevMsgChat X
# 2024-02-07 09:43:55 prevMsgDate 2024-02-06 11:32:22
# 2024-02-07 09:43:55 prevMsgFileId
# 2024-02-07 09:43:55 prevMsgId 184679
# 2024-02-07 09:43:55 prevMsgPeer X
# 2024-02-07 09:43:55 prevMsgPeerId 1xxxxxxxxx
# 2024-02-07 09:43:55 prevMsgReplyMsgId
# 2024-02-07 09:43:55 prevMsgText /Befehl1
# 2024-02-14 10:34:34 sentMsgId 185663
# 2024-02-14 10:34:34 sentMsgPeerId 1xxxxxxxxx
# 2024-02-14 10:34:34 sentMsgResult SUCCESS
# inlinechats:
# sentQueue:
#
setstate TelegramBot2 Polling
setstate TelegramBot2 2024-02-07 09:43:55 Contacts 1xxxxxxxxx:X: 6xxxxxxxxx:X:
setstate TelegramBot2 2024-02-14 10:46:38 PollingErrCount 4
setstate TelegramBot2 2024-02-14 10:46:38 PollingLastError Callback returned error :Conflict: terminated by other getUpdates request;; make sure that only one bot instance is running:
Dort sieht man schon, dass es Konflikte gibt.
Beim zweiten fhem ist das polling deaktiviert damit der Telegrambot nicht durch gleichzeitige Anfrage blockiert, ansonsten ist die Konfiguration fast identisch.
Muss ich für jeden Raspberry einen Telegrambot einrichten? Muss für die separate Anwendung auch ein Bot eingerichtet werden?
Wie verknüpfe ich die dann auf dem Smartphone, ohne dass ich 3 verschiedene Fenster öffnen muss?
Beschreibe mal Deine Problem/Aufgabe ohne die Lösung Bot. Ich das so nicht.
Vermutung:
Je FHEM brauchst Du einen Bot.
Beim Empfang würde ich mal über Gruppen in Telegram nachdenken.
Bei mir gibt es für FHEM einen Bot, der mit allen Familienmitgliedern zusammen in einer Gruppe ist. Zusätzlich noch in einer Gruppe mit Familie und Katze (Sensor an der Katzenklappe).
Hallo,
ich lasse mir von den Rasperries mehrere Informationen übermitteln. Ua einen regelmäßigen "ping" dass der Raspberry noch arbeitet, dann noch den Fensterstatus.
Vom Smartphone aus lasse ich mir aktuell einige SVGs übermitteln, wenn ich keinen PC zur Verfüng habe. Und ich möchte Lampen und Steckdosen aus der Ferne schalten, die über fhem eingebunden sind.
Die Einzelloösung ist eine Kameraüberwachung die mir Bilder bei Aktivität überträgt.
Das funktioniert bislang mit einem Telegrambot sehr gut, bis auf dass einige Meldungen nicht übertragen werden.
Zitat von: _fhemuser_ am 14 Februar 2024, 13:39:06Vom Smartphone aus lasse ich mir aktuell einige SVGs übermitteln
würde ich anzweifeln, bzw. wohin?
ich fordere über das Telegram Programm auf dem Smartphone den versand der SVGs an.
fhem 'set TelegramBot2 cmdSendSilent {plotAsPng("SVG_")}';
Die Bilder werden im Telegram Chat dargestellt.
Funktioniert genau so gut wie das schalten
fhem("set WZ_Dekolicht off");
Das geht auch viel einfacher, außerdem benötigt man immer nur einen TelegramBot.
1. Mehrere Server (FHEM oder andere Komponenten der Hausautomatisierung) so miteinander verbinden, dass wichtige Daten auch auf dem Gerät mit dem Bot vorhanden sind. Geht mit dem Modul RFHEM oder FHEM2FHEM. (Abschnitt 4.4)
2. Kommandos definieren, die einen FHEM-Befehl auf einer anderen Kiste ausführen. Beispiel:
defmod Task_9x FHEM2FHEM 192.168.0.9x:7073 LOG:none
attr Task_9x room System->Server
sub fhem9xCmd($){
my ($cmd) = @_;
fhem("set Task_9x cmd ".$cmd);
}
Der Aufruf
fhem9xCmd('set TelegramBot msg blabla')
versendet dann eine Nachricht vom anderen Server aus.
3. Für die Steuerung und Abfrage muss man etwas tiefer einsteigen: Bei Telegram gibt es so genannte Keyboards, die beim Empfänger niedliche Buttons erzeugen. Wenn einer von denen angeklickt wird, muss man nur die entsprechende Message-Id in FHEM abfangen und auswerten. In den untenstehenden Beispielen ist das gezeigt: Ich habe eine ganze Menüstruktur aufgebaut, mit der ich nicht nur Informationen über den Zustand des Hauses bekommen kann, sondern ganz gezielt Dinge steuere (etwa die Alarmanlage scharf mache, oder mir ein Foto schicken lasse). Eine detaillierte Beschreibung mit einem Codebeispiel für eine Sportplatzampel findet sich im Abschnitt 10.3 - und die Angabe des Abschnitts bezieht sich auf das Buch "SmartHome mit FHEM").
LG
pah
Vielen Dank für die Anregungen.
fhem2fhem läuft bereits aus den Raspberries, das ich dann erweitern werde und im Moment nutze ich die Favoriten bei Telegram.
Die Screenshots deuten auf die modernere Version der Menüs bei Telegram hin.
Die werde ich mir auch noch genauer ansehen.