Autor Thema: Übersicht "Telegram" und "Telegram Funktionen"  (Gelesen 1825 mal)

Offline curt

  • Sr. Member
  • ****
  • Beiträge: 983
Antw:Übersicht "Telegram" und "Telegram Funktionen"
« Antwort #15 am: 14 Juli 2019, 23:30:35 »
Hallo @Meck und alle anderen,

ich kämpfe mich gerade durch die Installation an Hand von https://wiki.fhem.de/wiki/TelegramBot (Du hast das im anderen Thread sicher gelesen) und habe Anmerkungen zu dieser Wiki-Seite:

1) Referenz ist commandref, daher wäre aus meiner Sicht gut, wenn der Wiki-Artiekl wie ein Kochrezept mit nachvollziehbaren Beispielen einen wie mich an die Hand nimmt. Leider hat der Artikel aber Brüche.

2) Im Artikel ist die Beispiel-Device nicht einheitlich benannt; mindestens drei verschiedene Namen für die Beispiel-Device. Das könnte, sollte vereinheitlicht werden.

3) https://wiki.fhem.de/wiki/TelegramBot sagt zu notify:
"Nebenbemerkung: hier ist eine erweiterte Strukturierung evt. empfehlenswert: statt jede Notify-Syntax o.ä. direkt auf TelegramBot-Spezifika gehen zu lassen, kann man sich eine Helper-Funktion (zur Vermittlung all solcher "Alarmtexte") bauen (99_myUtils_anlegen), die entsprechende Alarm-Meldungen dann nur intern auf (u.a.) einen Messaging-Service wie (momentan!) Telegram schickt."

Ja, schön. Und das baut sich jeder selbst? Da wäre es doch wohl wirklich klüger, den Code vorzugeben. Es ist doch völliger Quatsch, dass sich das jeder mehr oder weniger mühsam selbst zusammencodet.

Nur meine Wahrnehmungen dazu ..
RPI 3 Busware-CC1101 Jeelink HomeMatic Z-Wave (USB) + viele RPI Zero W

Offline Meck

  • Jr. Member
  • **
  • Beiträge: 55
Antw:Übersicht "Telegram" und "Telegram Funktionen"
« Antwort #16 am: 15 Juli 2019, 10:25:21 »
1) Referenz ist commandref, daher wäre aus meiner Sicht gut, wenn der Wiki-Artiekl wie ein Kochrezept mit nachvollziehbaren Beispielen einen wie mich an die Hand nimmt. Leider hat der Artikel aber Brüche.

Kochrezept fehlt mir auch denke auch, dass genauso weitere Hinweise hineinmüssen. Wie z.B..du auch gelesen hast das eine Verschlüsslung zum Bot nicht möglich ist.

https://forum.fhem.de/index.php/topic,38328.msg890800.html#msg890800


2) Im Artikel ist die Beispiel-Device nicht einheitlich benannt; mindestens drei verschiedene Namen für die Beispiel-Device. Das könnte, sollte vereinheitlicht werden.

Finde ich ein guter Ansatz. Würdest du uns dabei unterstützen? Denn Aktuell ist Beta_User Sonett und hat meine Anmerkungen eingepflegt aber Inhaltlich steh ich aktuell allein da.
3) https://wiki.fhem.de/wiki/TelegramBot sagt zu notify:
"Nebenbemerkung: hier ist eine erweiterte Strukturierung evt. empfehlenswert: statt jede Notify-Syntax o.ä. direkt auf TelegramBot-Spezifika gehen zu lassen, kann man sich eine Helper-Funktion (zur Vermittlung all solcher "Alarmtexte") bauen (99_myUtils_anlegen), die entsprechende Alarm-Meldungen dann nur intern auf (u.a.) einen Messaging-Service wie (momentan!) Telegram schickt."
Ja, schön. Und das baut sich jeder selbst? Da wäre es doch wohl wirklich klüger, den Code vorzugeben. Es ist doch völliger Quatsch, dass sich das jeder mehr oder weniger mühsam selbst zusammencodet.

Nur meine Wahrnehmungen dazu ..

Dann lass uns doch gemeinsam was daran ändern.

Ich komme aktuell alleine mit meiner begrenzten Zeit nur nicht so schnell voran wie ich es gern hätte.
RaspberryPI 3 B+, SIGNALduino433, SOMFY TAHOMA IO und RTS, IT Steckdosen, MQTT Broker, XIAOMI Sensoren, XIOMO Roborock S50, MySensors,

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7325
  • eigentlich eher user wie "developer"
Antw:Übersicht "Telegram" und "Telegram Funktionen"
« Antwort #17 am: 15 Juli 2019, 10:27:34 »
(Fast zeitgleich...) Vorab kurz:

ich habe mich auch eher soso lala durch diese Themen durchgewurstelt und von daher auch keinen besonders vertieften Einblick in viele Teilaspekte...

Daher nur kurz ein paar Anmerkungen zu dem, das ich halbwegs zu überblicken glaube bzw. wie ich manches "damals" verstanden hatte:

2) Im Artikel ist die Beispiel-Device nicht einheitlich benannt; mindestens drei verschiedene Namen für die Beispiel-Device. Das könnte, sollte vereinheitlicht werden.
Grundsätzlich gebe ich dir recht, nutze aber z.B. in meiner Installation zwei Instanzen. Das hat was damit zu tun, dass beide unterschiedliche Berechtigungslevel und Favoritenlisten haben und unterschiedliche Nutzer kennen. Zwei Instanzen (=Namen) ist daher evtl. sogar noch zu wenig ??? .

Das Thema Absicherung ist mir in dem Zusammenhang insgesamt eigentlich zu spärlich (es gibt nur den Infokasten dazu, dass man die ID verwenden soll statt des Namens, oder?).

Langer Rede kurzer Sinn:
- zwei oder mehr Devices machen m.E. Sinn, aber man (=jemand, der weiß, wovon er redet) sollte erklären, warum (oder eben ggf. warum nicht), und die Benennung darf gerne "selbsterklärend" sein...

Zitat
3) https://wiki.fhem.de/wiki/TelegramBot sagt zu notify:
"Nebenbemerkung: hier ist eine erweiterte Strukturierung evt. empfehlenswert: statt jede Notify-Syntax o.ä. direkt auf TelegramBot-Spezifika gehen zu lassen, kann man sich eine Helper-Funktion (zur Vermittlung all solcher "Alarmtexte") bauen (99_myUtils_anlegen), die entsprechende Alarm-Meldungen dann nur intern auf (u.a.) einen Messaging-Service wie (momentan!) Telegram schickt."

Ja, schön. Und das baut sich jeder selbst? Da wäre es doch wohl wirklich klüger, den Code vorzugeben. Es ist doch völliger Quatsch, dass sich das jeder mehr oder weniger mühsam selbst zusammencodet.
Was rausgehende Meldungen angeht, scheint mir die "MSG"-Familie (der Befehl samt msgConfig und msgDialog) in die Richtung zu gehen. (Da ist es aber so, dass die Doku zu MSG nicht in der cref, sondern im Forum zu finden ist?!?!)

Eingehende Meldungen sind schwieriger: Das ist sehr individuell, da die Verarbeitung z.B. die vorhandenen Geräte berücksichtigen muß usw.. Bei Gelegenheit und Interesse kann ich gerne mal einen Teil meiner Verarbeitungslogik versuchen aufzuarbeiten. Z.B. Kann ein eher selten anwesender Bewohner melden, dass er plant, in 2h zuhause zu sein und er daher gerne hätte, dass schon mal die Heizung angestellt wird...
Insbesondere die letzten zwei Aspekte werden sich m.E. nie komplett auflösen lassen, sondern es ist vermutlich so, dass sich jeder seinen Code mind. teilweise selber stricken muß. Und dann ist es in Teilen besser, Dinge eher wieder zentral zu erklären und nicht überall z.B. kompliziertere myUtils-Beispiele zu verstreuen (das ist m.E. nicht wartbar, weil der nächste, der das ggf. überarbeitet andere Devices hat und daher die Finger vom code lassen wird, oder "auf Verdacht" ändern...).
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM@VCCU | MySensors: seriell, v.a. 2.3.1@RS485 | MQTT2: MiLight@ESP-GW | SIGNALduino | MapleCUN | ZWave | HUE@deCONZ@docker
svn:MySensors, WeekdayTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline Meck

  • Jr. Member
  • **
  • Beiträge: 55
Antw:Übersicht "Telegram" und "Telegram Funktionen"
« Antwort #18 am: 15 Juli 2019, 15:12:24 »
Grundsätzlich gebe ich dir recht, nutze aber z.B. in meiner Installation zwei Instanzen. Das hat was damit zu tun, dass beide unterschiedliche Berechtigungslevel und Favoritenlisten haben und unterschiedliche Nutzer kennen. Zwei Instanzen (=Namen) ist daher evtl. sogar noch zu wenig ??? .

Das Thema Absicherung ist mir in dem Zusammenhang insgesamt eigentlich zu spärlich (es gibt nur den Infokasten dazu, dass man die ID verwenden soll statt des Namens, oder?).
 

Ich Denke die Themen sollten auch mit aufgenommen werden. Ich werde die Vorschläge im ersten Post einpflegen, dann gibt es eine Übersicht was noch gemacht werden kann. Denke, dass ich heute Abend die Device Namen vereinheitliche.

Langer Rede kurzer Sinn:
- zwei oder mehr Devices machen m.E. Sinn, aber man (=jemand, der weiß, wovon er redet) sollte erklären, warum (oder eben ggf. warum nicht), und die Benennung darf gerne "selbsterklärend" sein...
Wer ist den aktuell aktiv hier im Forum und könnte da uns Input liefern?

Was rausgehende Meldungen angeht, scheint mir die "MSG"-Familie (der Befehl samt msgConfig und msgDialog) in die Richtung zu gehen. (Da ist es aber so, dass die Doku zu MSG nicht in der cref, sondern im Forum zu finden ist?!?!)
Ja, so ist es! Die Doku ist leider nur im Forum. Aber wenn ich die Gegebenheiten von FHEM richtig verstehe müsste, dass der Modulersteller einpflegen, also kein anderen kann das machen oder?

Eingehende Meldungen sind schwieriger: Das ist sehr individuell, da die Verarbeitung z.B. die vorhandenen Geräte berücksichtigen muß usw.. Bei Gelegenheit und Interesse kann ich gerne mal einen Teil meiner Verarbeitungslogik versuchen aufzuarbeiten. Z.B. Kann ein eher selten anwesender Bewohner melden, dass er plant, in 2h zuhause zu sein und er daher gerne hätte, dass schon mal die Heizung angestellt wird...
Insbesondere die letzten zwei Aspekte werden sich m.E. nie komplett auflösen lassen, sondern es ist vermutlich so, dass sich jeder seinen Code mind. teilweise selber stricken muß. Und dann ist es in Teilen besser, Dinge eher wieder zentral zu erklären und nicht überall z.B. kompliziertere myUtils-Beispiele zu verstreuen (das ist m.E. nicht wartbar, weil der nächste, der das ggf. überarbeitet andere Devices hat und daher die Finger vom code lassen wird, oder "auf Verdacht" ändern...).

Das wäre sehr nett, wenn du dein ein Teil deiner Verarbeitungslogik zeigen könntest.

Das mit dem zusammenstricken gebe ich dir recht, aber vielleicht kann man hier es noch besser für das Verständnis darstellen.


Was ich gerade noch gefunden habe bezüglich der Wiki Darstellung ist die passende Kategorie. Sehr ihr hier auch noch Handlungsbedraf?
RaspberryPI 3 B+, SIGNALduino433, SOMFY TAHOMA IO und RTS, IT Steckdosen, MQTT Broker, XIAOMI Sensoren, XIOMO Roborock S50, MySensors,

Offline Meck

  • Jr. Member
  • **
  • Beiträge: 55
Antw:Übersicht "Telegram" und "Telegram Funktionen"
« Antwort #19 am: 15 Juli 2019, 15:48:39 »
Ich habe eben mal alle Bots vereinheitlicht und mich an die Commandref Beispiele gehalten und das Kind "aTelegramBotDevice" genannt.
Bitte um Feedback!

{{Infobox Modul
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram
|ModType=d
|ModForumArea=Unterstützende Dienste
|ModFTopic=38328
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}

Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/).
Es entsteht eine Möglichkeit Benachrichtungen aus FHEM zu versenden, zum Beispiel Alarmmeldungen.
Ausserdem können auch Kommandos über Telegram an FHEM gesendet werden um Steuerungsbefehle in FHEM auszulösen.

Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem FHEM-Server<ref>anders als die Vorläufer-Variante über das [[Telegram - old API method|Telegram-API]]</ref>, sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe. Es muss jedoch das [http://www.fhemwiki.de/wiki/Raspberry_Pi#N.C3.BCtzliche_Zusatzpakete perl JSON modul] installiert sein.

== Über Telegram Instant Messaging ==
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei.
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und
können auch aus dem WebBrowser verwendet werden.
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt.
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.

Für die Unterstützung von ''WhatsApp'' siehe Modul [[yowsup]].

== Features ==
Unterstützt werden:

* Versand von Textnachrichten
* Versand und Empfang von Bildern/Audio/etc
* Empfang von Textnachrichten von beliebigen Kontakten
* Kommandos in FHEM über Telegram-Nachrichten von aussen auslösen
* Ergebnisse der Kommandos zusenden lassen

Eine detaillierte Beschreibung des Moduls ist im FHEM Forum und in der (englischen) Dokumentation zum Modul in der {{Link2CmdRef|Anker=TelegramBot}} und in diesem  {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über FHEM-Update verteilt.

Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.

== Hinweise zum Betrieb mit FHEM ==
{{Randnotiz|RNTyp=Info|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.
}}

Für die Anlage eines TelegramBot Devices in FHEM ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#6-botfather BotFather] erzeugt. Dafür muss der BotFather mit einem Telegram-Client kontaktiert werden. Dort mit dem Telegram-Befehl <code>/newbot</code> einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf "Bot" enden.<br>

Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:

<code>define &lt;name&gt; TelegramBot  &lt;token&gt; </code>

Beispiel: <code>define aTelegramBotDevice TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw</code>

'''Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes'''
<code>pollingTimeout</code> '''auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.'''

Beispiel: <code>attr aTelegramBotDevice pollingTimeout 120</code>

'''Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.'''
Dafür muss man in seinem Telegram-Client den Kontakt @botName suchen und dann eine Nachricht daran versenden.

'''Der TelegramBot kann keine Nachrichten an andere Bots senden. Ein anderer Bot erhält die Nachrichten auch nicht wenn er in einer Gruppe enthalten ist.''' Dies ist eine Beschränkung in der Bot-Funktion bei Telegram. Das Versenden an einen anderen Bot (wenn man den Kontakt manuell hinzugefügt hat) führt zur Fehlermeldung
<code>sentMsgResult - Callback returned error :Bad Request: chat not found:</code>

{{Randnotiz|RNTyp=Info|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.
}}

== Registrierung eines neuen Bot ==
Zur Registrierung wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm)benötigt. Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.
Hier ein Beispiel, wie so ein Chat aussehen könnte:
<pre>Client:
/newbot
----------------
BotFather:
Alright, a new bot. How are we going to call it? Please choose a name for your bot.
----------------
Client:
Mein Name
----------------
BotFather:
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.
----------------
Client:
fhem_bot
----------------
BotFather:
Sorry, this username is already taken. Think of something different.
----------------
Client:
fhem1234_bot
----------------
BotFather:
Done! Congratulations on your new bot.
You will find it at telegram.me/fhem1234_bot.
You can now add a description, about section and profile picture for your bot, see /help for a list of commands.
----------------
Use this token to access the HTTP API:
1234567890:AbCdefgHIJklmnOPQRst-uvwxyz

For a description of the Bot API, see this page: https://core.telegram.org/bots/api
</pre>
Um einen Chat an einen "Contact" versenden zu können, muss zuerst in Contacts (bei Readings) ein Kontakt auftauchen. Wenn man sich zum allerersten Mal bei Telegram angemeldet hat, gibt es noch keinen Chat mit irgendjemanden. Man muss sich zuerstmal selbst eine Nachricht im Smartphone zusenden, dann taucht unter Readings der Eintrag Contacts auf. Erst dann kann man eine Nachricht mit @msgPeerId (das ist Ziffernfolge des Contacts ) oder mit @msgPeer (das ist der Name nach dem Doppelpunkt) vom TelegramBot auf sein Smartphone senden.

== Tipps ==

=== Privacyeinstellungen ===

Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.<br>Beispielchat:<pre>Client:
/setprivacy
----------------
BotFather:
Choose a bot to change group messages settings.
----------------
Client:
@fhem1234_bot
----------------
BotFather:
'Enable' - your bot will only receive messages that either start with the '/' symbol or mention the bot by username.
'Disable' - your bot will receive all messages that people send to groups.
Current status is: ENABLED
----------------
Client:
Disable
----------------
BotFather:
Success! The new status is: DISABLED. /help</pre>

=== Kontakte ===

Der Bot merkt sich die bereits bekannten Kontakte im Reading <code>Contacts</code>. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge gespeichert - bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @).

Beispiel: <code>123456:Ralf_Mustermann:@ralf</code>

Verschiedene Einträge werden durch Leerzeichen getrennt.

Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl <code>replaceContacts</code>. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.

Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)

=== Reset ===

Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl <code>reset</code>). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt.

=== Gruppen ===

Um eine Nachricht von FHEM an eine Gruppe zu senden, muss der BOT in die Gruppe aufgenommen werden. Nach dem Senden einer Nachricht an die Gruppe kann im Modul die Gruppen-ID ermittelt werden und zum Senden von Nachrichten verwendet werden. Die Gruppen-ID ist eine negative Zahl. Wenn die Privacy-Einstellungen nicht auf 'Disabled' gesetzt wurden, muss die Nachricht mit einem Slash (/) beginnen.

==== Supergroups / Supergruppen ====

Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.

== Beispielszenarien ==

=== Benachrichtigungen über Ereignisse ===

Das einfachste Szenario für die Integration von Messaging-Diensten mit FHEM ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von FHEM zu informieren:

<code>define notify_fhem_reload notify global:INITIALIZED set aTelegramBotDevice message fhem newly started - just now !</code>

In diesem Beispiel wird der Nachrichtentext "fhem newly started - just now !" an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald FHEM neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.

Nebenbemerkung: hier ist eine erweiterte Strukturierung evt. empfehlenswert: statt jede Notify-Syntax o.ä. direkt auf TelegramBot-Spezifika gehen zu lassen, kann man sich eine Helper-Funktion (zur Vermittlung all solcher "Alarmtexte") bauen ([[99_myUtils_anlegen]]), die entsprechende Alarm-Meldungen dann nur intern auf (u.a.) einen Messaging-Service wie (momentan!) Telegram schickt.

=== Versand von Bildern ===

Es ist auch möglich Bilder auf dem FHEM-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.

ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=FHEM-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).


<code>define notify_fhem_reload notify wetter:report set aTelegramBotDevice sendImage /opt/fhem/wetter.jpg</code>

Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich.

=== Versand von SVG-Plots ===

SVG-Plots können mit dem Befehl
<code>cmdSend [ @<peer1> ... @<peerN> ] <fhem command></code>
verschickt werden.

Das angegebene FHEM-Kommando wird ausgeführt und das Ergebnis an die angegebenen Peers bzw. den Standard-Peer verschickt.

Mit dem folgenden Befehl wird der SVG-Plot SVG_FileLog_Aussen an den Standard-Peer geschickt:
<code>set aTelegramBotDevice cmdSend { plotAsPng('SVG_FileLog_Aussen') }</code>

Nach <code>define cmd_sendTelegramSVG cmdalias TGSVG .* AS set aTelegramBotDevice cmdSend { plotAsPng("$EVENT") }</code>
kann man mit einem kurzen
<code>TGSVG SVG_Garten</code>
ein beliebiges SVG über die Kommandozeile per Telegram versenden.

Um das SVG nun noch mit einem Text zu versehen, muss eine Textnachricht dazu gesendet werden, was sich am einfachsten durch das Ausführen eines FHEM-Befehls auf Perl-Ebene realisieren lässt:

<code>{fhem "set aTelegramBotDevice message Bildbeschreibung;; set aTelegramBotDevice cmdSend { plotAsPng('mein_SVG') }" }</code>

'''Hinweis:''' früher wurde zum Verschicken von Plots auch die interne Funktion TelegramBot_ExecuteCommand verwendet; mit dem Update Ende Februar 2017 hat diese Funktion einen zusätzlichen Parameter erhalten und lautet nun
<code>TelegramBot_ExecuteCommand($defs{"aTelegramBotDevice"}, meine_ZielID, undef, '{plotAsPng("mein_SVG")}');</code>


==== Voraussetzungen für den Versand von SVG-Plots ====
Es muss das Modul libimage-librsvg-perl installiert sein:

<code>sudo apt-get install libimage-librsvg-perl</code>

Evtl. sind weitere Module erforderlich:

<code>sudo apt-get install libgd-graph-perl

sudo apt-get install libgd-text-perl</code>

=== Empfang von Bildern oder ähnlichem ===

Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading <code>msgFileId</code> angelegt (<code>123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx</code>) und im Reading <code>msgText</code> steht dann so etwas wie
<code>received photo # Size: 107701</code>

Über das Get-Kommando <code>urlForFile</code> mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt:

<code>https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg</code>


=== Versand von Emojis (Smileys) ===

Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite

http://apps.timwhitlock.info/emoji/tables/unicode (Spalte "Native")

übernehmen und mit der Nachricht verschicken.

Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).

=== Kommandos auslösen ===

Ein wichtiges Szenario ist die Möglichkeit Kommandos in FHEM ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: "cmdKeyword")erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.

<code>attr aTelegramBotDevice cmdKeyword doit</code>

Somit kann man dann durch Nachrichten die mit "doit" beginnen Kommandos an FHEM senden, die ähnlich wie im Kommandoeingabefeld von FHEMweb dann von FHEM ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.

Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.

Beispiele

<code>doit set schalter on</code>

<code>doit list telegrambot</code>

{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut "cmdRestrictedPeer" setzen, damit nicht jeder Kommandos auf dem FHEM-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.
}}

==== Favoriten für Kommandos anlegen ====
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf "Kurzwahl" legt.

Beispiel-Kommandos wie z.B. <code>set TYPE=ROLLLADEN pos 100</code> und <code>set TYPE=ROLLLADEN pos 0</code>, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.

Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:

<code>attr aTelegramBotDevice favorites set TYPE=ROLLLADEN pos 100;set TYPE=ROLLLADEN pos 0</code>

Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.
Nehmen wir mal an man möchte die Favoriten mit <code>/short</code> ausführen können. Dazu muss dann das Attribut "cmdFavorites" setzen

<code>attr aTelegramBotDevice cmdFavorites /short</code>

Wenn man nun im Telegram Client
<code>/short 1</code> an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.

Ausserdem kann man im Telegram Client
<code>/short</code> an den Bot schicken, dann antwortet der Bot mit

<pre>
Favorites

/short1 = set TYPE=ROLLLADEN pos 100

/short2 = set TYPE=ROLLLADEN pos 0

</pre>

Die Antworten werden als Schaltflächen dargestellt (Telegram inline Keyboard) und können am Mobile-Client direkt angeklickt werden um sie auszuführen.
Um die Beschriftung der Schaltflächen zu optimieren, können die Befehle im Attribut favorites mit Beschreibungen versehen werden:

<code>/[Rolllaeden zu ]=set TYPE=ROLLLADEN pos 100;/[Rolllaeden auf]=set TYPE=ROLLLADEN pos 0</code>

Nun antwortet der Bot auf das Schlüsselwort für die Favoriten mit:

<pre>
Favorites

/short1 = Rolllaeden zu

/short2 = Rolllaeden auf

</pre>

=== Nützliche Kombinationen mit weiteren Modulen ===

==== msgConfig ====
{{Link2CmdRef|Anker=msgConfig|Lang=de|Label=msgConfig}}

{{Link2CmdRef|Anker=msgDialog|Lang=de|Label=msgDialog}}

==== msgDialog ====
[[MsgDialog]]

==== MSG ====
[[Msg]]

{{Link2CmdRef|Anker=MSG|Lang=en|Label=MSG}}

{{Link2Forum|Topic=39983|LinkText=Forum-Beitrag}}

==== PostMe ====
[[Modul PostMe#Steuerung per Telegram|PostMe]]

{{Link2CmdRef|Anker=PostMe|Lang=de|Label=PostMe}}

{{Link2CmdRef|Anker=TBot_List|Lang=en|Label=TBot_List}}

==== ROOMATE ====
{{Link2CmdRef|Anker=ROOMMATE|Lang=de|Label=ROOMMATE}}

==== MAX ====
[[MAX#Telegram-Benachrichtigung bei dauergeöffnetem Fenster|Dauer-offenes Fenster melden]]

==== SSCAM - Steuerung von Kameras in Synology Surveillance Station - Schnappschüsse mit TelegramBot versenden ====
[[SSCAM - Steuerung von Kameras in Synology Surveillance Station#Schnappschüsse mit TelegramBot versenden|Schnappschüsse mit TelegramBot versenden]]

==== PRESENCE ====
[[PRESENCE#Hinweis zur Benutzung / Fehlerhandling|Hinweis zur Benutzung / Fehlerhandling]]

==== AMAD ====
[[AMAD]]

==== TALKTOME & TALKTOUSER ====
[[TALKTOME & TALKTOUSER - Sprachverarbeitung für Nutzerinteraktionen#Beleuchtungssteuerung mit Telegram|Beleuchtungssteuerung mit Telegram]]

==== Staumelder ====
[[Staumelder#telegram|Staumelder]]

==== Grafana ====
[[Grafana#Speichern und Senden von Grafiken (zB_mit_Telegram)|Grafana-Plots versenden]]

==== Talk2Fhem ====
[[Modul_Talk2Fhem#Messenger Telegram|Talk2Fhem]]

==== Hausüberwachung ====
[[Hausüberwachung#Nachrichten aus dem Haus|Nachrichten aus dem Haus]]

==== Gäste-WLAN der Fritzbox auswerten und Login per Telegram senden ====

{{Link2Forum|Topic=100119|Message=936495|LinkText=Forum-Beitrag}}

==== Batterieüberwachung nur einmal täglich ====
{{Link2Forum|Topic=99219|Message=926652|LinkText=Forum-Beitrag}}

==== BOTVAC ====
[[BOTVAC#MAPS|Saugroboter-Karten]]

==== Unifi Voucher bereistellen über msgDialog ====
[[Unifi#über Telegram|Unifi Voucher]]

[[Unifi#Erkennung neuer clients|Erkennung unbekannter Clients]]


== Links ==
* Github Repository für die Telegram-FHEM Entwicklung: https://github.com/viegener/Telegram-fhem
* Infos zum Telegram BotFather: https://core.telegram.org/bots#6-botfather

* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm

* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=FHEM-Forum}}
* Telegram messaging system https://telegram.org/
* TelegramBot API https://core.telegram.org/bots/api

<references />
[[Kategorie:Telegram]]
RaspberryPI 3 B+, SIGNALduino433, SOMFY TAHOMA IO und RTS, IT Steckdosen, MQTT Broker, XIAOMI Sensoren, XIOMO Roborock S50, MySensors,

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7325
  • eigentlich eher user wie "developer"
Antw:Übersicht "Telegram" und "Telegram Funktionen"
« Antwort #20 am: 15 Juli 2019, 16:45:51 »
Ich habe eben mal alle Bots vereinheitlicht und mich an die Commandref Beispiele gehalten und das Kind "aTelegramBotDevice" genannt.
Bitte um Feedback!
Na ja, wenn die Terminologie aus der cref übernommen wird und hier erst mal nur Sendeanweisungen die Hauptrolle spielen, gibt's wenig zu meckern... Ist daher schon so im Wiki zu finden (auch wenn mir der Name an sich verbesserungsfähig erscheint ("my_T_Bot" wäre doch ausreichend, oder?), und das in der cref auch nicht 100% einheitlich ist, aber was soll's...).
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM@VCCU | MySensors: seriell, v.a. 2.3.1@RS485 | MQTT2: MiLight@ESP-GW | SIGNALduino | MapleCUN | ZWave | HUE@deCONZ@docker
svn:MySensors, WeekdayTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7325
  • eigentlich eher user wie "developer"
Antw:Übersicht "Telegram" und "Telegram Funktionen"
« Antwort #21 am: 15 Juli 2019, 21:54:26 »
Was ich gerade noch gefunden habe bezüglich der Wiki Darstellung ist die passende Kategorie. Sehr ihr hier auch noch Handlungsbedraf?
Kann ich wenig zu sagen... Eigentlich finde ich zu viele Hauptkategorien nicht so toll, aber leider keine Ahnung, wie man sinnvoll Unterkategorien erstellt bzw. was die Software da tut.

Das wäre sehr nett, wenn du dein ein Teil deiner Verarbeitungslogik zeigen könntest.

Das mit dem zusammenstricken gebe ich dir recht, aber vielleicht kann man hier es noch besser für das Verständnis darstellen.
Hier mal der Versuch (alles RAW-Auszüge):
Der T-Bot
defmod PresenceBot TelegramBot
attr PresenceBot cmdFavorites /kurz
attr PresenceBot cmdRestrictedPeer 123456789 234567890 345678901
attr PresenceBot cmdReturnEmptyResult 0
attr PresenceBot defaultPeer some_Name
attr PresenceBot favorites /[Bin weg]=set devStrich0 absent;;/[Zuhause]=set devStrich0 home;;/[Komme in 2 Stunden]=set devStrich0 home 2h;;/[Komme in 1 Stunde]=set devStrich0 home 1h;;/[Bin 1 Tag weg]=set devStrich0 absent 1d;;/[Bin 2 Tage weg]=set devStrich0 absent 2d;;[/Bin 4 Tage weg]=set devStrich0 absent 4d
attr PresenceBot pollingTimeout 300
attr PresenceBot room Steuerung->Interfaces

devStrich0 ist ein Dummy. Den nutze ich für alles mögliche, was ggf. irgendwie eine Art "Blitzableiter" braucht, hier z.B. der eigentliche set-Befehl. Der geht also FHEM-mäßig zwar ordnungsgemäß an ein Device, effektiv aber ins "digitale Nirvana".

Effektiv interessiere ich mich mehr für den Absender iVm. dem Inhalt. Das macht ein notify:
defmod rr_xn_telegramStateMessage notify PresenceBot:msgPeerId:.* {\
my $msg = ReadingsVal($NAME,"msgText","none");;\
my $target = getKeyValue($EVTPART1);;\
fhem "set $target T_last $msg";;\
if ($msg =~ /^\/kurz.*/) {\
$msg = "absent" if ($msg =~ /^\/kurz.* Bin weg$/ or $msg =~ /^\/kurz 1$/);;\
$msg = "present" if ($msg =~ /^\/kurz.* Zuhause$/ or $msg =~ /^\/kurz 2$/);;\
}\
if ($msg =~ /^(home|absent|present)$/) {\
fhem "set $target T_status $msg";;\
}\
}
Dafür muß mit {setKeyValue("<PeerID>":"<Presence-Dummy-Name>")} eine Verknüpfung zwischen diesen beiden Infos hergestellt werden, die dann auch außerhalb der Konfiguration im engeren Sinn (fhem.cfg) abgespeichert ist.

Das ist auch schon der eigentliche T-Bot-Teil....

Die Weiterverarbeitung für die HK-Steuerung macht dann ein weiteres notify (ich hoffe, das halbwegs richtig bereinigt zu haben):
defmod n_rr_T_status notify rr_.*:T_status:.* {\
\
my $newState = "absent";;\
my $checktimer = $NAME."_timerHK";;\
my $hk_devices = AttrVal($NAME,"HT_Devices","devStrich0");;\
my $message = ReadingsVal($NAME,"T_last","Bin weg");;\
\
if ($EVTPART1 eq "present") {\
  if ($message =~ /Komme/) {\
    if (ReadingsVal("Heizperiode","state","off") eq "on")  {\
      fhem "delete $checktimer" if defined ($main::defs{$checktimer});;\
      foreach my $setdevice (split (/,/,$hk_devices)) {\
        fhem "set $setdevice:FILTER=controlMode!=auto controlMode auto";;\
      }\
      fhem "define $checktimer at +03:00:00 set $hk_devices controlManu 18";;\
    }\
  }\
} elsif ($EVTPART1 eq "absent") {\
  fhem "set $NAME absent";;\
  if (ReadingsVal("Heizperiode","state","off") eq "on") {\
    fhem "set $hk_devices controlManu 18";;\
  }\
}}\
Zumindest, wenn man das inline-Keyboard nutzt, scheint das zu funktionieren, effektiv war das eine Bastelarbeit, die bislang nicht sooo viel genutzt wurde; in der Regel reicht es, wenn die Heizung angeht, sobald man sich ins WLAN einbucht, aber das machen dann andere notify... (da fällt mir ein, dass ich das mal zusammenführen wollte und in myUtils auslagern. Wird wohl im nächsten Winter was, da wird das tendenziell dringender gebraucht, bisher war es eher eine Machbarkeitsstudie...)

Wenn (.... ::) ;D ...) was unklar sein sollte, bitte melden.
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM@VCCU | MySensors: seriell, v.a. 2.3.1@RS485 | MQTT2: MiLight@ESP-GW | SIGNALduino | MapleCUN | ZWave | HUE@deCONZ@docker
svn:MySensors, WeekdayTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline Meck

  • Jr. Member
  • **
  • Beiträge: 55
Antw:Übersicht "Telegram" und "Telegram Funktionen"
« Antwort #22 am: 16 Juli 2019, 08:04:59 »
Hallo Beta-User,

du hast recht in der CommandRef ist die Terminologie auch nicht einheitlich hatte mich dann dem gehalten was am meisten vor kommt. Ich bin keine freund alles zu sehr abzukürzen. Wenn Schlage ich vor myTelegramBot.

Habe mir bis jetzt nur mal die Definition deines TelegramBot angeschaut. Ich glaube du hast ein Fehler in der letzten Definition deines Buttons.
[/Bin 4 Tage weg]=set devStrich0 absent 4d Und ich find es Persönlich schöner mit einem „-„zuarbeiten. Also wie folgt. Aber denke das ist Geschmackssache.
attr PresenceBot favorites /[-Bin weg]=set devStrich0 absent;;/[-Zuhause]=set devStrich0 home;;/[-Komme in 2 Stunden]=set devStrich0 home 2h;;/[-Komme in 1 Stunde]=set devStrich0 home 1h;;/[-Bin 1 Tag weg]=set devStrich0 absent 1d;;/[-Bin 2 Tage weg]=set devStrich0 absent 2d;;/[-Bin 4 Tage weg]=set devStrich0 absent 4d\
 
Mein Ziel wäre es recht viel über Telegram abzubilden, dass meine Frau und ich im normalen Leben das Frontend nicht brauchen.

Mal schauen erst mal das Wiki dann setze ich mich daran.
RaspberryPI 3 B+, SIGNALduino433, SOMFY TAHOMA IO und RTS, IT Steckdosen, MQTT Broker, XIAOMI Sensoren, XIOMO Roborock S50, MySensors,

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7325
  • eigentlich eher user wie "developer"
Antw:Übersicht "Telegram" und "Telegram Funktionen"
« Antwort #23 am: 16 Juli 2019, 09:57:18 »
Moin,
zu "myTelegramBot": Bin da an sich leidenschaftslos...
Meine _Meinung_: Es sollte halbwegs sprechend sein, und möglichst kurz, dabei noch halbwegs einfach zu lesen. In diesem Sinne wäre mir persönlich diese Fassung zu lang. Alternative: "myTgramBot"? (das kann man grade so noch in einem "Augenzug" erfassen).

Was meine Definitionen angeht: Das sind RAW-Auszüge und das ganze ist "auf die Schnelle" zusammengeklöppelt. Das ganze ist wie geschrieben eher eine Machbarkeitsstudie wie eine Musterlösung, von daher darf/kann das gerne verbessert werden. Das mit dem "-" war was, was ich "damals" noch gesucht, aber auf die Schnelle nicht gefunden hatte...
Zu RAW: Vermutlich sind die doppelten ;; "falsch", und wir sollten das in die Richtung nochmal checken. Was das Wiki angeht, würde ich auch darum bitten, ausschließlich RAW-Code zu verwenden, das hat sich m.E. bewährt.


Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM@VCCU | MySensors: seriell, v.a. 2.3.1@RS485 | MQTT2: MiLight@ESP-GW | SIGNALduino | MapleCUN | ZWave | HUE@deCONZ@docker
svn:MySensors, WeekdayTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline Meck

  • Jr. Member
  • **
  • Beiträge: 55
Antw:Übersicht "Telegram" und "Telegram Funktionen"
« Antwort #24 am: 16 Juli 2019, 12:36:02 »
Zu RAW: Vermutlich sind die doppelten ;; "falsch", und wir sollten das in die Richtung nochmal checken. Was das Wiki angeht, würde ich auch darum bitten, ausschließlich RAW-Code zu verwenden, das hat sich m.E. bewährt.

Die ;; kommen von der RAW hatte mich auch gewundert habe deshalb heute morgen schon mal nach geschaut.
Ja gebe ich dir Recht, dass wir das noch auf RAW umstellen sollten. 

Ich habe es jetzt mal auf myTelegramBot angepasst.

{{Infobox Modul
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram
|ModType=d
|ModForumArea=Unterstützende Dienste
|ModFTopic=38328
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}

Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/).
Es entsteht eine Möglichkeit Benachrichtungen aus FHEM zu versenden, zum Beispiel Alarmmeldungen.
Ausserdem können auch Kommandos über Telegram an FHEM gesendet werden um Steuerungsbefehle in FHEM auszulösen.

Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem FHEM-Server<ref>anders als die Vorläufer-Variante über das [[Telegram - old API method|Telegram-API]]</ref>, sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe. Es muss jedoch das [http://www.fhemwiki.de/wiki/Raspberry_Pi#N.C3.BCtzliche_Zusatzpakete perl JSON modul] installiert sein.

== Über Telegram Instant Messaging ==
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei.
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und
können auch aus dem WebBrowser verwendet werden.
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt.
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.

Für die Unterstützung von ''WhatsApp'' siehe Modul [[yowsup]].

== Features ==
Unterstützt werden:

* Versand von Textnachrichten
* Versand und Empfang von Bildern/Audio/etc
* Empfang von Textnachrichten von beliebigen Kontakten
* Kommandos in FHEM über Telegram-Nachrichten von aussen auslösen
* Ergebnisse der Kommandos zusenden lassen

Eine detaillierte Beschreibung des Moduls ist im FHEM Forum und in der (englischen) Dokumentation zum Modul in der {{Link2CmdRef|Anker=TelegramBot}} und in diesem  {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über FHEM-Update verteilt.

Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.

== Hinweise zum Betrieb mit FHEM ==
{{Randnotiz|RNTyp=Info|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.
}}

Für die Anlage eines TelegramBot Devices in FHEM ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#6-botfather BotFather] erzeugt. Dafür muss der BotFather mit einem Telegram-Client kontaktiert werden. Dort mit dem Telegram-Befehl <code>/newbot</code> einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf "Bot" enden.<br>

Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:

<code>define &lt;name&gt; TelegramBot  &lt;token&gt; </code>

Beispiel: <code>define myTelegramBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw</code>

'''Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes'''
<code>pollingTimeout</code> '''auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.'''

Beispiel: <code>attr myTelegramBot pollingTimeout 120</code>

'''Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.'''
Dafür muss man in seinem Telegram-Client den Kontakt @botName suchen und dann eine Nachricht daran versenden.

'''Der TelegramBot kann keine Nachrichten an andere Bots senden. Ein anderer Bot erhält die Nachrichten auch nicht wenn er in einer Gruppe enthalten ist.''' Dies ist eine Beschränkung in der Bot-Funktion bei Telegram. Das Versenden an einen anderen Bot (wenn man den Kontakt manuell hinzugefügt hat) führt zur Fehlermeldung
<code>sentMsgResult - Callback returned error :Bad Request: chat not found:</code>

{{Randnotiz|RNTyp=Info|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.
}}

== Registrierung eines neuen Bot ==
Zur Registrierung wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm)benötigt. Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.
Hier ein Beispiel, wie so ein Chat aussehen könnte:
<pre>Client:
/newbot
----------------
BotFather:
Alright, a new bot. How are we going to call it? Please choose a name for your bot.
----------------
Client:
Mein Name
----------------
BotFather:
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.
----------------
Client:
fhem_bot
----------------
BotFather:
Sorry, this username is already taken. Think of something different.
----------------
Client:
fhem1234_bot
----------------
BotFather:
Done! Congratulations on your new bot.
You will find it at telegram.me/fhem1234_bot.
You can now add a description, about section and profile picture for your bot, see /help for a list of commands.
----------------
Use this token to access the HTTP API:
1234567890:AbCdefgHIJklmnOPQRst-uvwxyz

For a description of the Bot API, see this page: https://core.telegram.org/bots/api
</pre>
Um einen Chat an einen "Contact" versenden zu können, muss zuerst in Contacts (bei Readings) ein Kontakt auftauchen. Wenn man sich zum allerersten Mal bei Telegram angemeldet hat, gibt es noch keinen Chat mit irgendjemanden. Man muss sich zuerstmal selbst eine Nachricht im Smartphone zusenden, dann taucht unter Readings der Eintrag Contacts auf. Erst dann kann man eine Nachricht mit @msgPeerId (das ist Ziffernfolge des Contacts ) oder mit @msgPeer (das ist der Name nach dem Doppelpunkt) vom TelegramBot auf sein Smartphone senden.

== Tipps ==

=== Privacyeinstellungen ===

Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.<br>Beispielchat:<pre>Client:
/setprivacy
----------------
BotFather:
Choose a bot to change group messages settings.
----------------
Client:
@fhem1234_bot
----------------
BotFather:
'Enable' - your bot will only receive messages that either start with the '/' symbol or mention the bot by username.
'Disable' - your bot will receive all messages that people send to groups.
Current status is: ENABLED
----------------
Client:
Disable
----------------
BotFather:
Success! The new status is: DISABLED. /help</pre>

=== Kontakte ===

Der Bot merkt sich die bereits bekannten Kontakte im Reading <code>Contacts</code>. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge gespeichert - bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @).

Beispiel: <code>123456:Ralf_Mustermann:@ralf</code>

Verschiedene Einträge werden durch Leerzeichen getrennt.

Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl <code>replaceContacts</code>. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.

Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)

=== Reset ===

Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl <code>reset</code>). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt.

=== Gruppen ===

Um eine Nachricht von FHEM an eine Gruppe zu senden, muss der BOT in die Gruppe aufgenommen werden. Nach dem Senden einer Nachricht an die Gruppe kann im Modul die Gruppen-ID ermittelt werden und zum Senden von Nachrichten verwendet werden. Die Gruppen-ID ist eine negative Zahl. Wenn die Privacy-Einstellungen nicht auf 'Disabled' gesetzt wurden, muss die Nachricht mit einem Slash (/) beginnen.

==== Supergroups / Supergruppen ====

Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.

== Beispielszenarien ==

=== Benachrichtigungen über Ereignisse ===

Das einfachste Szenario für die Integration von Messaging-Diensten mit FHEM ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von FHEM zu informieren:

<code>define notify_fhem_reload notify global:INITIALIZED set myTelegramBot message fhem newly started - just now !</code>

In diesem Beispiel wird der Nachrichtentext "fhem newly started - just now !" an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald FHEM neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.

Nebenbemerkung: hier ist eine erweiterte Strukturierung evt. empfehlenswert: statt jede Notify-Syntax o.ä. direkt auf TelegramBot-Spezifika gehen zu lassen, kann man sich eine Helper-Funktion (zur Vermittlung all solcher "Alarmtexte") bauen ([[99_myUtils_anlegen]]), die entsprechende Alarm-Meldungen dann nur intern auf (u.a.) einen Messaging-Service wie (momentan!) Telegram schickt.

=== Versand von Bildern ===

Es ist auch möglich Bilder auf dem FHEM-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.

ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=FHEM-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).


<code>define notify_fhem_reload notify wetter:report set myTelegramBot sendImage /opt/fhem/wetter.jpg</code>

Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich.

=== Versand von SVG-Plots ===

SVG-Plots können mit dem Befehl
<code>cmdSend [ @<peer1> ... @<peerN> ] <fhem command></code>
verschickt werden.

Das angegebene FHEM-Kommando wird ausgeführt und das Ergebnis an die angegebenen Peers bzw. den Standard-Peer verschickt.

Mit dem folgenden Befehl wird der SVG-Plot SVG_FileLog_Aussen an den Standard-Peer geschickt:
<code>set myTelegramBot cmdSend { plotAsPng('SVG_FileLog_Aussen') }</code>

Nach <code>define cmd_sendTelegramSVG cmdalias TGSVG .* AS set myTelegramBot cmdSend { plotAsPng("$EVENT") }</code>
kann man mit einem kurzen
<code>TGSVG SVG_Garten</code>
ein beliebiges SVG über die Kommandozeile per Telegram versenden.

Um das SVG nun noch mit einem Text zu versehen, muss eine Textnachricht dazu gesendet werden, was sich am einfachsten durch das Ausführen eines FHEM-Befehls auf Perl-Ebene realisieren lässt:

<code>{fhem "set myTelegramBot message Bildbeschreibung;; set myTelegramBot cmdSend { plotAsPng('mein_SVG') }" }</code>

'''Hinweis:''' früher wurde zum Verschicken von Plots auch die interne Funktion TelegramBot_ExecuteCommand verwendet; mit dem Update Ende Februar 2017 hat diese Funktion einen zusätzlichen Parameter erhalten und lautet nun
<code>TelegramBot_ExecuteCommand($defs{"myTelegramBot"}, meine_ZielID, undef, '{plotAsPng("mein_SVG")}');</code>


==== Voraussetzungen für den Versand von SVG-Plots ====
Es muss das Modul libimage-librsvg-perl installiert sein:

<code>sudo apt-get install libimage-librsvg-perl</code>

Evtl. sind weitere Module erforderlich:

<code>sudo apt-get install libgd-graph-perl

sudo apt-get install libgd-text-perl</code>

=== Empfang von Bildern oder ähnlichem ===

Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading <code>msgFileId</code> angelegt (<code>123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx</code>) und im Reading <code>msgText</code> steht dann so etwas wie
<code>received photo # Size: 107701</code>

Über das Get-Kommando <code>urlForFile</code> mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt:

<code>https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg</code>


=== Versand von Emojis (Smileys) ===

Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite

http://apps.timwhitlock.info/emoji/tables/unicode (Spalte "Native")

übernehmen und mit der Nachricht verschicken.

Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).

=== Kommandos auslösen ===

Ein wichtiges Szenario ist die Möglichkeit Kommandos in FHEM ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: "cmdKeyword")erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.

<code>attr myTelegramBot cmdKeyword doit</code>

Somit kann man dann durch Nachrichten die mit "doit" beginnen Kommandos an FHEM senden, die ähnlich wie im Kommandoeingabefeld von FHEMweb dann von FHEM ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.

Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.

Beispiele

<code>doit set schalter on</code>

<code>doit list telegrambot</code>

{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut "cmdRestrictedPeer" setzen, damit nicht jeder Kommandos auf dem FHEM-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.
}}

==== Favoriten für Kommandos anlegen ====
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf "Kurzwahl" legt.

Beispiel-Kommandos wie z.B. <code>set TYPE=ROLLLADEN pos 100</code> und <code>set TYPE=ROLLLADEN pos 0</code>, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.

Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:

<code>attr myTelegramBot favorites set TYPE=ROLLLADEN pos 100;set TYPE=ROLLLADEN pos 0</code>

Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.
Nehmen wir mal an man möchte die Favoriten mit <code>/short</code> ausführen können. Dazu muss dann das Attribut "cmdFavorites" setzen

<code>attr myTelegramBot cmdFavorites /short</code>

Wenn man nun im Telegram Client
<code>/short 1</code> an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.

Ausserdem kann man im Telegram Client
<code>/short</code> an den Bot schicken, dann antwortet der Bot mit

<pre>
Favorites

/short1 = set TYPE=ROLLLADEN pos 100

/short2 = set TYPE=ROLLLADEN pos 0

</pre>

Die Antworten werden als Schaltflächen dargestellt (Telegram inline Keyboard) und können am Mobile-Client direkt angeklickt werden um sie auszuführen.
Um die Beschriftung der Schaltflächen zu optimieren, können die Befehle im Attribut favorites mit Beschreibungen versehen werden:

<code>/[Rolllaeden zu ]=set TYPE=ROLLLADEN pos 100;/[Rolllaeden auf]=set TYPE=ROLLLADEN pos 0</code>

Nun antwortet der Bot auf das Schlüsselwort für die Favoriten mit:

<pre>
Favorites

/short1 = Rolllaeden zu

/short2 = Rolllaeden auf

</pre>

=== Nützliche Kombinationen mit weiteren Modulen ===

==== msgConfig ====
{{Link2CmdRef|Anker=msgConfig|Lang=de|Label=msgConfig}}

{{Link2CmdRef|Anker=msgDialog|Lang=de|Label=msgDialog}}

==== msgDialog ====
[[MsgDialog]]

==== MSG ====
[[Msg]]

{{Link2CmdRef|Anker=MSG|Lang=en|Label=MSG}}

{{Link2Forum|Topic=39983|LinkText=Forum-Beitrag}}

==== PostMe ====
[[Modul PostMe#Steuerung per Telegram|PostMe]]

{{Link2CmdRef|Anker=PostMe|Lang=de|Label=PostMe}}

{{Link2CmdRef|Anker=TBot_List|Lang=en|Label=TBot_List}}

==== ROOMATE ====
{{Link2CmdRef|Anker=ROOMMATE|Lang=de|Label=ROOMMATE}}

==== MAX ====
[[MAX#Telegram-Benachrichtigung bei dauergeöffnetem Fenster|Dauer-offenes Fenster melden]]

==== SSCAM - Steuerung von Kameras in Synology Surveillance Station - Schnappschüsse mit TelegramBot versenden ====
[[SSCAM - Steuerung von Kameras in Synology Surveillance Station#Schnappschüsse mit TelegramBot versenden|Schnappschüsse mit TelegramBot versenden]]

==== PRESENCE ====
[[PRESENCE#Hinweis zur Benutzung / Fehlerhandling|Hinweis zur Benutzung / Fehlerhandling]]

==== AMAD ====
[[AMAD]]

==== TALKTOME & TALKTOUSER ====
[[TALKTOME & TALKTOUSER - Sprachverarbeitung für Nutzerinteraktionen#Beleuchtungssteuerung mit Telegram|Beleuchtungssteuerung mit Telegram]]

==== Staumelder ====
[[Staumelder#telegram|Staumelder]]

==== Grafana ====
[[Grafana#Speichern und Senden von Grafiken (zB_mit_Telegram)|Grafana-Plots versenden]]

==== Talk2Fhem ====
[[Modul_Talk2Fhem#Messenger Telegram|Talk2Fhem]]

==== Hausüberwachung ====
[[Hausüberwachung#Nachrichten aus dem Haus|Nachrichten aus dem Haus]]

==== Gäste-WLAN der Fritzbox auswerten und Login per Telegram senden ====

{{Link2Forum|Topic=100119|Message=936495|LinkText=Forum-Beitrag}}

==== Batterieüberwachung nur einmal täglich ====
{{Link2Forum|Topic=99219|Message=926652|LinkText=Forum-Beitrag}}

==== BOTVAC ====
[[BOTVAC#MAPS|Saugroboter-Karten]]

==== Unifi Voucher bereistellen über msgDialog ====
[[Unifi#über Telegram|Unifi Voucher]]

[[Unifi#Erkennung neuer clients|Erkennung unbekannter Clients]]


== Links ==
* Github Repository für die Telegram-FHEM Entwicklung: https://github.com/viegener/Telegram-fhem
* Infos zum Telegram BotFather: https://core.telegram.org/bots#6-botfather

* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm

* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=FHEM-Forum}}
* Telegram messaging system https://telegram.org/
* TelegramBot API https://core.telegram.org/bots/api

<references />
[[Kategorie:Telegram]]
RaspberryPI 3 B+, SIGNALduino433, SOMFY TAHOMA IO und RTS, IT Steckdosen, MQTT Broker, XIAOMI Sensoren, XIOMO Roborock S50, MySensors,

Offline curt

  • Sr. Member
  • ****
  • Beiträge: 983
Antw:Übersicht "Telegram" und "Telegram Funktionen"
« Antwort #25 am: 17 Juli 2019, 05:02:01 »
"my_T_Bot" wäre doch ausreichend, oder?

Bei mir heißt der Kerl TeleBot - aber falls wirklich zielführende Vorschläge gewünscht werden: myTelegram

Der T-Bot
attr PresenceBot favorites /[Bin weg]=set devStrich0 absent;;/[Zuhause]=set devStrich0 home;;/[Komme in 2 Stunden]=set devStrich0 home 2h;;/[Komme in 1 Stunde]=set devStrich0 home 1h;;/[Bin 1 Tag weg]=set devStrich0 absent 1d;;/[Bin 2 Tage weg]=set devStrich0 absent 2d;;[/Bin 4 Tage weg]=set devStrich0 absent 4d
devStrich0 ist ein Dummy. Den nutze ich für alles mögliche, was ggf. irgendwie eine Art "Blitzableiter" braucht, ...

Ich habe es leider nicht verstanden. Das liegt sicher an vielen Dingen - zuvörderst an mir. Aber auch daran, dass nicht klar ist, wer da an welchem Ende sendet.

Da lese ich unter anderem "bin weg". Kannst Du bitte freundlicherweise das Einsatzszenario in Prosa erklären? Also wer macht mit welchem Gerät was - über welchen Kanal kommt das wohin, was macht der Bot dazwischen - so etwa.

So eine Beschreibung würde mir sehr helfen zu verstehen, was Du da Tolles hast.
RPI 3 Busware-CC1101 Jeelink HomeMatic Z-Wave (USB) + viele RPI Zero W

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7325
  • eigentlich eher user wie "developer"
Antw:Übersicht "Telegram" und "Telegram Funktionen"
« Antwort #26 am: 17 Juli 2019, 07:50:00 »
"myTelegram" finde ich einen guten Vorschlag, und die doppelten ";;" kommen von RAW und scheinen ok zu sein.

Ob es toll ist, kann ich nicht sagen. "Eigentlich" ging's mal um folgendes, vorab die Vorgeschichte:

Meine Familie ist zwischenzeitlich sehr ungleichförmig zuhause, will sagen: Man kann nicht wirklich gut vorhersagen, wer wann da ist. Da ich aber keine Lust habe, "präventiv" das ganze Haus zu heizen, obwohl nur sehr vielleicht jemand bestimmte Zimmer nutzt, habe ich die relevanten Teile auf eine anwesenheitsbasierte Variante umgestellt, nämlich mittels MAC-Adressenerkennung beim Einbuchen in's WLAN; der Teil funktioniert auch recht gut, ist aber ähnlich gelöst wie hier (dazu unten dann mehr).
Das hat aber einen gravierenden Haken, der dann Anlaß war für diese Sache mit Telegram: Es wird erst dann warm, wenn jemand tatsächlich da ist und auch nicht vergißt, seinen WLAN-Empfang einzuschalten. Den zweiten Punkt kann ich an die Betroffenen delegieren, für den ersten mußte eine Lösung zur Fernsteuerung her.

Lösung per Telegram:
Alle Familienmitglieder dürfen mit dem (einen) Bot kommunizieren, und eigentlich brauchte ich nur eine Anweisung, nämlich "heize bitte mein Zimmer vor". Also muß der Auswertungsteil berücksichtigen, von welchem der Familienmitglieder die message kommt und dann noch den Inhalt analysieren, denn wenn schon, dann sollte der Bot dann gleich etwas universeller sein und nicht nur den einen message-Typ "komme gleich, mach schon mal" erkennen.

Also muß der Auswertungscode zwei Infos extrahieren: WER sagt etwas, und WAS will er mitteilen.
WER läßt sich leicht aus der ID des Senders ableiten, dafür ist der getKeyValue()-Aufruf im ersten notify da, die ID ist dabei $EVTPART1. Im Hintergrund steht eine zentrale Datei (typischerweise ./FHEM/FhemUtils/uniqueID), in die man die betreffende Info über "{setKeyValue("<ID>":"<myDummyName>")}" schreiben kann. Da kommt also schlicht ein Gerätename zurück; ich nutze derzeit noch Dummy-Devices für die Anwesenheit.

Zum WAS:
Das notify schreibt dann zwei Infos zu dem entsprechenden Dummy, nämlich die volle Nachricht und eine Kurzform.
(Mit der vollen Nachricht wollte ich das vielleicht erweitern, indem ich ein paar Timer setze und nach einer gewissen Zeit nachsehe, ob alles noch paßt oder doch was anderes Sache ist... Der Teil ist aber noch nicht weit gediehen).
Auf die Kurzform reagiert dann das weitere notify, das im Prinzip dasselbe macht wie das vorher schon existente MAC-Presence-notify (das ebenso mit getKeyValue() aus der im Event enthaltenen MAC-Adresse den Dummy-Namen extrahiert, diesen dann aber direkt auf an- oder abwesend setzt).
Dort wird ermittelt, welche Heizkörperthermostate betroffen sind, die werden dann bei "schalte doch bitte schon mal an" angeschaltet. Kommt der Betreffende dann nicht innerhalb von 3h tatsächlich nach Hause, werden die Heizkörper wieder auf "ist nicht da" gestellt.

Jetzt haben es also die Betroffenen selbst in der Hand, die Heizung rechtzeitig anzustellen :) . Da die MAC-Presence-Geschichte aber auch so ausgelegt ist, dass nicht gleich reagiert wird, sondern erst mit einem gewissen Nachlauf, habe ich als 2. Variante noch das "Bin jetzt weg, schalte aus"-Kommando reingenommen. Da meine Mitmenschen es jetzt zwar "in der Hand haben", mitzuteilen, wann sie denn da zu sein gedenken, aber von der Option wenig Gebrauch machen, habe ich den Rest erst mal auf Halde gelegt ::) . (Bitte keine Kommentare, dass das ggf. auch über andere Methoden zuverlässiger ginge: Ich will meine Mitmenschen nicht tracken ;) ; es reicht, wenn sie eine an sich komfortable Möglichkeit haben).

Hoffe, das halbwegs einleuchtend erklärt zu haben, notfalls mache ich noch ein paar Kommentare in den Code.

Vielleicht noch eine Anmerkung zu getKeyValue(): Früher hatte ich das über entsprechende Readings direkt bei den Dummy-Devices gelöst und dann mit FILTER gearbeitet, um das richtige Zieldevice zu ermitteln. Da ist es mir leider - aus welchen Gründen auch immer - mehrfach passiert, dass die Info (das ganze Reading) verloren gegangen ist. Das mittels Readings zu lösen sollte den Weg über Attribute und die roten ? vermeiden (wieder so eine Machbarkeitsfrage, diese Infos ändern sich ja nicht ständig ::) ). Da ich vor einiger Zeit dann im Zusammenhang mit myUtils erstellen auf diese setKeyValue()/getKeyValue()-Geschichte gestoßen war, wollte ich das mal ausprobieren, weil sich so sensitive Infos aus der Konfiguration auslagern lassen. Funktioniert m.E. sehr gut, und hat nur den kleinen Nachteil, dass die Infos nicht direkt beim betreffenden Device stehen (aber dafür an zentraler Stelle, zusammen mit email-Accounts usw.).
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM@VCCU | MySensors: seriell, v.a. 2.3.1@RS485 | MQTT2: MiLight@ESP-GW | SIGNALduino | MapleCUN | ZWave | HUE@deCONZ@docker
svn:MySensors, WeekdayTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline curt

  • Sr. Member
  • ****
  • Beiträge: 983
Antw:Übersicht "Telegram" und "Telegram Funktionen"
« Antwort #27 am: 17 Juli 2019, 08:09:43 »
"myTelegram" finde ich einen guten Vorschlag,

Danke.

Ob es toll ist, kann ich nicht sagen. "Eigentlich" ging's mal um folgendes, vorab die Vorgeschichte:

Ahhhh - jetzt verstanden.

Das trifft bei mir nicht zu. Ich habe ein Niedrigenergiehaus, eins der ersten, so um 1996. Da ist es völlig kontraproduktiv, mit der Heizung rumzuspielen: Die Einsparung ist nahe Null, die Hysterese aber gigantisch - anders gesagt: Der Aufheizvorgang ist extrem langsam. Das bedeutet im Fakt, dass ich jedem auf die Finger haue, der an einem Thermostaten rumspielt - selbst wenn wir im Winter eine Woche weg sind, bleibt alles auf Normalbetrieb.

Ich beobachte Deine Ideen aus einem ganz anderen Grund:
Mir persönlich ist WApp verboten, wie es so ist, sah ich mich gezwungen auch allen meinen Angestellten das auf den Diensthandys zu verbieten. Die Gattin vermisst das zwecks mankenntdasja. Nun konnte ich sie auf Telegram umlenken, ihr Freundeskreis hat beruflich auch Probleme mit WApp. [¹]

Sie entdeckt das jedenfalls gerade - und das ergäbe schon Möglichkeiten in Bezug auf FHEM.

Ich bitte um Entschuldigung für OT.

[¹] Ja klar: Telegram ist auch ein ominöser Dienst. Und den Bot-Kanal kann man offenbar nicht in "geheime Kommunikation" (also Ende-zu-Ende-Verschlüsselung) zwingen. Der Weg zur Hölle ist mit guten Vorsätzen gepflastert ...
RPI 3 Busware-CC1101 Jeelink HomeMatic Z-Wave (USB) + viele RPI Zero W

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7325
  • eigentlich eher user wie "developer"
Antw:Übersicht "Telegram" und "Telegram Funktionen"
« Antwort #28 am: 17 Juli 2019, 09:44:45 »
Na ja, eigentlich geht es ja weniger um die konkrete Anwendung, das ist ja nur ein (im Prinzip beliebiges) Beispiel, sondern um das Funktionsprinzip, wie man einen Absender identifizieren kann und dann per standardisiertem Kommando für jeden Nutzer (ggf. unterschiedliche) "Konsequenzen" in FHEM daraus ziehen kann. Geht halt etwas über das übliche "sende mir bitte die Temperatur xyz zurück" raus...

(Beim/nach dem Schreiben ist mir dann aufgefallen, dass ich nach der Umstellung auf getKeyValue() bereits das "Zieldevice" kenne und daher das 2. notify wohl besser direkt auch in das erste integrieren kann... (Dass das vorher schon über devspec2array gegangen wäre, ist auch klar, war mir damals aber erst mal zu umständlich...) Man lernt halt nie aus ::) )

Was Telegram an sich angeht, ist es ein Kompromis. f.*book kommt mir prinzipiell nicht in die Tüte, und das mit dem Inline-Keyboard hatte ich woanders (auf die Schnelle damals) nicht gesehen und fand das chic. Heute würde ich vermutlich auch nochmal einen intensiveren Blick auf Signal werfen (dafür gibt es auch ein FHEM-Modul, siehe hier; das scheint aber auf den ersten Blick nur für den Versand von Nachrichten Optionen vorzusehen. Das schein Jabber besser zu können, das klingt aber auch eher umständlich und wenig verbreitet (?)).

Und so richtig OT fand ich das nicht. Evtl. sollte man Risiken, Nebenwirkungen und Alternativen auch aufführen (so sie denn bekannt sind).
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM@VCCU | MySensors: seriell, v.a. 2.3.1@RS485 | MQTT2: MiLight@ESP-GW | SIGNALduino | MapleCUN | ZWave | HUE@deCONZ@docker
svn:MySensors, WeekdayTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline curt

  • Sr. Member
  • ****
  • Beiträge: 983
Antw:Übersicht "Telegram" und "Telegram Funktionen"
« Antwort #29 am: 18 Juli 2019, 06:38:34 »
@Beta-User
Danke für Deine umfangreiche Darstellung, ich werde sie mir in Ruhe zu Gemüte führen.

Was Telegram an sich angeht, ist es ein Kompromis.

Der Weg zur Hölle ist mit guten Vorsätzen gepflastert.

f.*book kommt mir prinzipiell nicht in die Tüte

Ich nehme an, dass Du darunter auch WApp subsumierst. - Das fällt komplett aus, ich kann doch nicht meiner Belegschaft das dienstlich verbieten und anschließend den Status meines Hauses in die Welt rausblasen.

Heute würde ich vermutlich auch nochmal einen intensiveren Blick auf Signal werfen (dafür gibt es auch ein FHEM-Modul, siehe hier; das scheint aber auf den ersten Blick nur für den Versand von Nachrichten Optionen vorzusehen.

Ich hatte mir vor wenigen Monaten alle Alternativen (die in FHEM unterstützt werden) angesehen - und verworfen. Da mein Gedächtnis dann sofort löscht in aller Unsicherheit: Da gibt es in FHEM (mindestens) zwei Ansätze. Aber der Serverkrempel ist privat verteilt - Du musst einen Server suchen, ggf. bezahlen und dann noch hoffen, dass die Flitzpiepe auch Update einspielt.

Das schein Jabber besser zu können, das klingt aber auch eher umständlich und wenig verbreitet (?)).

Ich dachte, dass seien die Server zu Signal. Egal, das ist alles nix.

Und so richtig OT fand ich das nicht. Evtl. sollte man Risiken, Nebenwirkungen und Alternativen auch aufführen (so sie denn bekannt sind).

Fangen wir an, kurz und knackig, TELEGRAM:
Vorteil: Die private chats sind nach heutigem Wissen nicht zu brechen. Leichtes Problem - Meta-Daten: Die DNS-Anfragen zeigen natürlich grob, wer mit wem kommuniziert.

Nachteile:
1) Die Bot-Chats sind meines Wissens (derzeit) nicht Ende-zu-Ende-verschlüsselt: All unsere Bot-Chats landen auf irgendwelchen weltweit liegenden Clouds von Telegram.

2) (Keine Nationalitäten-Vorurteile bitte, die Russen haben geniale Coder!)
Der Gründer von Telegram war der Gründer von vKontake.ru, das ist das russische Facebook. Er verkaufte seine Anteile, zog da mehrere Milliarden aus Russland raus und lebt angeblich irgendwo.

Es gibt ernstzunehmende Gerüchte, dass der russische Militärgeheimdienst GRU Zugriff auf die Clouds hätte. Dessen Gegenstück, der Inlandsgeheimdienst FSB hat offenbar keinen Zugriff, die schäumen regelmäßig.

Egal wie das ist: Der Dienst ist für jeden ernstzunehmenden Geheimdienst der Welt interessant. Und ich kann mir nicht so wirklich vorstellen, dass ein Milliardär, der zudem einen riesigen Datendienst betreibt, völlig unerkannt irgendwo in der Welt lebt.

Das dazu.
« Letzte Änderung: 18 Juli 2019, 06:40:20 von curt »
RPI 3 Busware-CC1101 Jeelink HomeMatic Z-Wave (USB) + viele RPI Zero W

 

decade-submarginal