Wie viele Telegrambots benötige ich?

Begonnen von _fhemuser_, 14 Februar 2024, 11:49:09

Vorheriges Thema - Nächstes Thema

_fhemuser_

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?

fhem in der aktuellsten Version auf:
Raspberry 4 mit SSD | fhem2fhem | NanoCul433 Selbstbau | NanoCul868 Selbstbau | DbLog | MAX! | zigbee2MQTT | alexa | Solar
inkl zigbee2MQTT Server, Unifi-Server

Raspberry 4 mit SD Karte | fhem2fhem | motioneye

rabehd

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).
Auch funktionierende Lösungen kann man hinterfragen.

_fhemuser_

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.
fhem in der aktuellsten Version auf:
Raspberry 4 mit SSD | fhem2fhem | NanoCul433 Selbstbau | NanoCul868 Selbstbau | DbLog | MAX! | zigbee2MQTT | alexa | Solar
inkl zigbee2MQTT Server, Unifi-Server

Raspberry 4 mit SD Karte | fhem2fhem | motioneye

rabehd

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?
Auch funktionierende Lösungen kann man hinterfragen.

_fhemuser_

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");
fhem in der aktuellsten Version auf:
Raspberry 4 mit SSD | fhem2fhem | NanoCul433 Selbstbau | NanoCul868 Selbstbau | DbLog | MAX! | zigbee2MQTT | alexa | Solar
inkl zigbee2MQTT Server, Unifi-Server

Raspberry 4 mit SD Karte | fhem2fhem | motioneye

Prof. Dr. Peter Henning

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


_fhemuser_

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.

fhem in der aktuellsten Version auf:
Raspberry 4 mit SSD | fhem2fhem | NanoCul433 Selbstbau | NanoCul868 Selbstbau | DbLog | MAX! | zigbee2MQTT | alexa | Solar
inkl zigbee2MQTT Server, Unifi-Server

Raspberry 4 mit SD Karte | fhem2fhem | motioneye