Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

Begonnen von viegener, 20 Juni 2015, 18:59:41

Vorheriges Thema - Nächstes Thema

SlrG

@Mad-MaxFHEM:
Vielen Dank für die Info! Das schaue ich mir mal an.  :)

gelbwichtel

Hallo viegener,
in der Tat hab ich auf der Oberfläche den gleichen Fehler, wenn ich das set Kommand eingebe, obwohl ja als Gerät im Raum FS20 der Alias Leuchter und nicht Leuchte angezeigt wird.

Von daher denke ich jetzt auch, dass das Problem an der Konfiguration liegt und absolut nichts mit dem telebot zu tun hat. Somit bin ich hier falsch.

Aber was das falsch ist sehe ich beim besten Willen nicht.

Wenn du den Fehler auch nicht entdeckst, werde ich mir wohl nochmal die allg. Doku zum Alias ansehen bzw. ins Anfängerforum geh'n müssen.

Trotzdem Danke.
cu
gelbwichtel

wthiess

Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......

gelbwichtel

@wthiess: Danke

Hab parallel noch was im alten Forum dazu gefunden: https://groups.google.com/forum/#!topic/fhem-users/oUONkKXvxdk

Scheint also außer Workarounds nichts offizielles zu geben, was ja auch so in der commandref steht:

Globale Attribute für alle Geräte
alias
Wird in FHEMWEB benutzt, um ein en anderen Namen für ein Gerät anzuzeigen z.B. wenn Sonderzeichen/Leerzeichen nicht in der Gerätedefinition verwendet werden können.


Wobei ein echt nutzbarer Alias es ermöglichen würde die durch ein autocreate angelegten Devices zur besseren Identifizierung in ihrer Urform bestehen zu lassen und durch sprechende Namen ersetzen zu können.

Fazit: Alias benutzen klappt zumindest auf offiziellem Weg nicht. Werde die Diskussion im anderen Thread verfolgen.

Danke Euch.
cu
gelbwichtel

wmr72

Hallo,
ich benutze seit kurzem auch das TelegramBot-Modul, funktioniert auch einwandfrei. Ich fand es allerdings recht ungünstig, dass das API-Token in der fhem.cfg landet, die "Gefahr" dass sowas versehentlich öffentlich wird, beispielsweise auch wenn man seine Konfiguration in ein öffentliches git-Repo schiebt, ist doch recht groß. Ich habe das Modul deswegen so gepatcht, dass das Token per getKeyValue/setKeyValue() weggespeichert wird, so wie das z.B. auch vom FRITZBOX-Modul oder ESPEasy gemacht wird. In den Internals taucht das Token dann auch nicht mehr auf, das kann man sowohl als Vor- als auch als Nachteil sehen. Besteht Interesse an dem Patch?
Wolfgang

viegener

Zitat von: wmr72 am 03 Februar 2017, 22:34:40
Hallo,
ich benutze seit kurzem auch das TelegramBot-Modul, funktioniert auch einwandfrei. Ich fand es allerdings recht ungünstig, dass das API-Token in der fhem.cfg landet, die "Gefahr" dass sowas versehentlich öffentlich wird, beispielsweise auch wenn man seine Konfiguration in ein öffentliches git-Repo schiebt, ist doch recht groß. Ich habe das Modul deswegen so gepatcht, dass das Token per getKeyValue/setKeyValue() weggespeichert wird, so wie das z.B. auch vom FRITZBOX-Modul oder ESPEasy gemacht wird. In den Internals taucht das Token dann auch nicht mehr auf, das kann man sowohl als Vor- als auch als Nachteil sehen. Besteht Interesse an dem Patch?
Wolfgang

Du kannst den Patch gerne hier einstellen oder auch als pull request auf github.
Ich habe das bisher nicht verändert, weil ich dazu vermutlich das Modul inkompatibel ändern müsste, oder hast Du dafür eine Lösung gefunden?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

wmr72

Zitat von: viegener am 03 Februar 2017, 22:49:20
Du kannst den Patch gerne hier einstellen oder auch als pull request auf github.
Ich habe das bisher nicht verändert, weil ich dazu vermutlich das Modul inkompatibel ändern müsste, oder hast Du dafür eine Lösung gefunden?

Ok, patch im Anhang, ist ein diff gegen die aktuelle SVN-Version. Ich hab damit erstmal nur rudimentäre Tests gemacht, für mich funktioniert es, ich nutze aber auch nur kleine Teile des Funktionsumfangs.

Was meinst Du mit inkompatiblen Änderungen? Ich habe das API-Token beim "define" optional gemacht, damit ändert sich erstmal nichts, nach einem Neustart mit der neuen Version kann man es aber aus der Definition löschen.

viegener

Zitat von: wmr72 am 04 Februar 2017, 12:09:56
Ok, patch im Anhang, ist ein diff gegen die aktuelle SVN-Version. Ich hab damit erstmal nur rudimentäre Tests gemacht, für mich funktioniert es, ich nutze aber auch nur kleine Teile des Funktionsumfangs.

Was meinst Du mit inkompatiblen Änderungen? Ich habe das API-Token beim "define" optional gemacht, damit ändert sich erstmal nichts, nach einem Neustart mit der neuen Version kann man es aber aus der Definition löschen.

Ja genau das ist der Punkt, wenn man es optional macht wird es nicht wirklich sicherer, denn dann steht es bei 99% der Benutzer weiter im cfg file und eine verschlüsselung im keystore bringt dann auch keine Sicherheit.

Erzwingt man das setzen über set apitoken ist es inkompatibel und erfordert manuelle Nacharbeit bei allen Verwendern. 

Generell sind die Änderungen soweit ok, ich werde vermutlich einiges so übernehmen, jetzt kommt es mal auf die todoliste
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

wmr72

Zitat von: viegener am 04 Februar 2017, 16:29:02
Ja genau das ist der Punkt, wenn man es optional macht wird es nicht wirklich sicherer, denn dann steht es bei 99% der Benutzer weiter im cfg file und eine verschlüsselung im keystore bringt dann auch keine Sicherheit.

Ja, das ist natürlich der springende Punkt, mein Gedanke war dass zumindest die Option es nicht im "list" und in der cfg zu haben schon was wert ist aber vermutlich hast Du mit den 99% Recht. Ich hab deswegen gerade noch ein bisschen rumgespielt, sieht so aus als könnte man die Device-Definition im Define selbst verändern:

diff --git a/FHEM/50_TelegramBot.pm b/FHEM/50_TelegramBot.pm
index d8794e8..5cd435c 100644
--- a/FHEM/50_TelegramBot.pm
+++ b/FHEM/50_TelegramBot.pm
@@ -369,6 +369,9 @@ sub TelegramBot_Define($$) {
   $hash->{FAILS} = 0;
   $hash->{UPDATER} = 0;
   $hash->{POLLING} = -1;
+  if (int(@a) == 3) {
+      $hash->{DEF} = "$a[0] $a[1]";
+  }

   my %hu_upd_params = (
                   url        => "",


Ich bin mir jetzt nicht sicher ob das sauber und "statthaft" ist, aber es scheint zumindest auf den ersten Blick zu funktionieren.

danillo

Ich benutze Telegram zur Zeit nur, um die Zählerstände für Strom und Wasser nicht extra auf einen Zettel schreiben zu müssen. Ich sende also einen set Befehl an fhem. Aber immer für jeden Zähler extra. Ich würde aber gerne alle Zähler auf einmal übermitteln, weil ich dann den Befehl immer schön kopieren könnte.
Trennen mit ,, hat nicht funktioniert. Der erste Dummy hat dann den ganzen restlichen Befehl als Wert
set dummy1 25;; set dummy2 35
ergibt dann
dummy1 = 25;; set dummy2 35
Ich hab's auch schon so probiert
{fhem("set dummy1 25"); fhem("set dummy2 35")}
Steh da etwas auf dem Schlauch, wie ich das lösen kann. Jemand eine Idee?
Daniel

SlrG

Hallo,

ich habe mir auf Hinweis von @Mad-MaxFHEM den msg Befehl angesehen. Ziel ist es, an alle Bewohner mit dem Status home eine Nachricht einen Push per TelegramBot zu schicken. Der Aufruf von msg sieht so aus:

msg @[rgr_bewohner:residentsHomeDevs] Test

rgr_bewohner ist ein Residents Device. In residentsHomeDevs stehen die Device Namen der Roommate devices, die gerade den Status Home haben. Wenn man seine Roommates, wie die Kontakte im TelegramBot benennt, bekommt der Bot eine durch Komma getrennte Liste von Kontakten.

Könnte man den Bot so modifizieren, dass er die Nachricht an alle diese Kontakte verschickt?

Eigentlich finde ich, dass msg das erledigen sollte, aber im anderen Thread scheint man eher zu denken, ich mache etwas falsch. Das kann zwar sein, aber ich kann mir nicht erklären, was ich anders machen sollte. Vielleicht kann jemand aus den Postings im anderen Thread etwas herauslesen und mich aufklären?
Das wäre super!


viegener

Zitat von: danillo am 06 Februar 2017, 09:47:28
Ich benutze Telegram zur Zeit nur, um die Zählerstände für Strom und Wasser nicht extra auf einen Zettel schreiben zu müssen. Ich sende also einen set Befehl an fhem. Aber immer für jeden Zähler extra. Ich würde aber gerne alle Zähler auf einmal übermitteln, weil ich dann den Befehl immer schön kopieren könnte.
Trennen mit ,, hat nicht funktioniert. Der erste Dummy hat dann den ganzen restlichen Befehl als Wert
set dummy1 25;; set dummy2 35
ergibt dann
dummy1 = 25;; set dummy2 35
Ich hab's auch schon so probiert
{fhem("set dummy1 25"); fhem("set dummy2 35")}
Steh da etwas auf dem Schlauch, wie ich das lösen kann. Jemand eine Idee?
Daniel

Ich bin nicht sicher, ob ich die Erklärung wirklich verstanden habe, aber momentan geht wohl nur Deine 3.Variante allerdings nur mit korrekten Klammern:

{(fhem("set dummy1 25"); fhem("set dummy2 35"))}

Gebe zu das ist nicht optimal
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Zitat von: SlrG am 06 Februar 2017, 14:56:28
Hallo,

ich habe mir auf Hinweis von @Mad-MaxFHEM den msg Befehl angesehen. Ziel ist es, an alle Bewohner mit dem Status home eine Nachricht einen Push per TelegramBot zu schicken. Der Aufruf von msg sieht so aus:

msg @[rgr_bewohner:residentsHomeDevs] Test

rgr_bewohner ist ein Residents Device. In residentsHomeDevs stehen die Device Namen der Roommate devices, die gerade den Status Home haben. Wenn man seine Roommates, wie die Kontakte im TelegramBot benennt, bekommt der Bot eine durch Komma getrennte Liste von Kontakten.

Könnte man den Bot so modifizieren, dass er die Nachricht an alle diese Kontakte verschickt?

Eigentlich finde ich, dass msg das erledigen sollte, aber im anderen Thread scheint man eher zu denken, ich mache etwas falsch. Das kann zwar sein, aber ich kann mir nicht erklären, was ich anders machen sollte. Vielleicht kann jemand aus den Postings im anderen Thread etwas herauslesen und mich aufklären?
Das wäre super!

Habe mir das gerade angeschaut und ich kenne leider auch nicht alle Details des msg-Moduls und die Doku ist leider wohl nicht in der commandref, deshalb kann ich nicht sagen, ob das irgendwie in msg geht. Zumindest die Bemerkung zu @@ würde in FHEM umgesetzt erscheint mir nicht ganz richtig.

Wenn ich es richtig verstehe kann msg leider keine Liste von Adressaten durch Leerzeichen trennen?

Ich habe aber auch keine gute Lösung für Dein Problem, denn ein Komma kann auch in Telegram-Benutzernamen vorkommen und eignet sich deshalb leider nicht gut als Trennzeichen...

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

DeeSPe

Zitat von: viegener am 07 Februar 2017, 01:06:08
Habe mir das gerade angeschaut und ich kenne leider auch nicht alle Details des msg-Moduls und die Doku ist leider wohl nicht in der commandref, deshalb kann ich nicht sagen, ob das irgendwie in msg geht. Zumindest die Bemerkung zu @@ würde in FHEM umgesetzt erscheint mir nicht ganz richtig.

Wenn ich es richtig verstehe kann msg leider keine Liste von Adressaten durch Leerzeichen trennen?

Ich habe aber auch keine gute Lösung für Dein Problem, denn ein Komma kann auch in Telegram-Benutzernamen vorkommen und eignet sich deshalb leider nicht gut als Trennzeichen...

Man kann in msg statt des Telegram Benutzernamens auch einfach die numerische ID verwenden.
msgContactPush <NAME-TELEGRAM-BOT>:@<CONTACT-NR>

Dann würde ich zwei mal den String von residentsHomeDevs bearbeiten:
Ein \@ an den Anfang und hinter jedes Komma noch eins.
my $contacts = "\@".ReadingsVal("rgr_Residents","residentsHomeDevs","");
$contacts =~ s/,/,\\@/;


Nun sollte es mit msg klappen (ungetestet):
msg push $contacts Das ist ein Test

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

SlrG

@viegener:
Danke, dass Du es Dir angeschaut hast. Dass ein Komma nicht als Trennzeichen geeignet ist, ist doch eine wichtige Informationen. Vielen Dank dafür! Wie genau erwartet der TelegramBot eine Liste von mehreren Adressaten? Stört das Komma nicht, wenn jeweils ein @verwendet wird? Oder geht das ganz allgemein gar nicht und es muss immer ein Leerzeichen sein?

@name1,@name2, ...
oder
@name1 @name2 ...

Ich gucke mir bei Gelegenheit mal auch noch den Quellcode vom msg Modul an. Dann müsste sich herausfinden lassen, ob es die Arrays einfach nur durchreicht. Wenn ja, müssten diese erst ähnlich wie @DeeSPe es beschrieben hat vorbearbeitet werden.

@DeeSPe:
Die numerische ID habe ich auch schon probiert. Funktioniert für mich genauso wie der Name. Wenn auch jeweils nur mit einem @ und nicht mit zweien wie Loredo es empfiehlt. Aber auch die numerische ID hilft nicht, wenn msg das gar nicht auswertet und nur das Array mit den Device Namen der durchreicht.

Vielen Dank für Deine Idee das Array selbst zu bearbeiten und es erst dann an msg zu übergeben. Ich probiere das möglichst bald mal aus. Eventuell lässt sich das direkt in das msg Modul einbinden und dann braucht nicht jeder seine eigene Lösung stricken, sondern es ist für alle sofort verfügbar. U.u. ist Loredo ja bereit einen fertigen patch zu akzeptieren. Ich will ihm ja keine Arbeit machen, sondern nur, dass es funktioniert. :)