Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

JoWiemann

Zitat von: RalfRog am 03 April 2023, 15:27:14Ok... mit dem Thema (non)Blocking hab ihr mich sowieso ein wenig abgehängt.

D.h. durch den Aufruf "get fritzLog" als Blocking statt nonBlocking wird das Thema Zugriff auf Variablen in "anderen" Programmteilen unkritischer - sprich der TelegramBot hat so wie es momentan läuft nötige Variablen-Inhalte nicht zur Verfügung.


Hallo Ralf,

hier mal eine neue Beta: 07.50.12a BETA

Das Reading get <name> fritzLog <hash|table> ... hat für hash noch einen optionalen Parameter [on|off]. on ist default und bedeutet, es wird non Blocking die myUtilsFritzLogExPostnb (...) aufgerufen. Bei off, heißt jetzt wird wieder Blocking abgearbeitet, wird die myUtilsFritzLogExPost (...) aufgerufen.

Bei mir hat Telegram so wieder alles abgearbeitet.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

viegener

Wie bereits von madmax beschrieben, das Problem ist, dass ein blocking call kein "normaler" Aufruf ist.
In einem blocking call wird ein zweiter getrennter Prozess erzeugt mit einer Kopie der Daten, am Ende des blocking calls werden aber Veränderungen nicht zurück in die Daten gemischt. Es gibt deshalb ganz bestimmte Dinge die im blocking call funktionieren und was nicht.

Aus einem blocking call sind damit leider auch keine Nachrichtenversendungen möglich, weil diese wiederum auf fhem-Teile aufsetzen, die so nicht funktionieren können. Denn der Hauptprozess von fhem bekommt ja nichts davon mit (vereinfacht gesagt)...

Das war auch meine Vermutung, deshalb die Fragen nach dem Aufrufsort.

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

RalfRog

Hi viegener, danke. Da war ich mit der "schlecht" formulierten Ausgangsfrage ohne es genau zu wissen quasi auf dem richtigen Dampfer.

Hi Jo
==> Sind wir dann nicht hier raus? Sollen wir zurück in den Support Thread oder einen Neuen gehen?

Zitat von: JoWiemann am 03 April 2023, 13:33:43...
es sieht so aus, als wenn non Blocking in non Blocking nicht funktioniert. Bei mir bleibt Telnet ebenfalls hängen. WhatsApp und DebianMail funktionieren.

Kleine Anmerkung die "12a Beta" hatten wie letzte Woche schon.

Habe die Version auf das Testsystem gebracht. Folgendes habe ich im Log:

  • die myUtilsFritzLogExPostnb fehlte noch
       2023.04.03 20:09:35.599 2: FRITZBOX!0000 [fritzzbox: Lua_Data.5530] - INFO: data.lua not supportet. Fritz!Box or Fritz!OS outdated.
       2023.04.03 20:09:35.607 2: FRITZBOX!0000 [fritzzbox: Run_fritzloginfo.4020] - ERROR: fritzLogInfo: data.lua not supportet
       2023.04.03 20:09:35.615 2: FRITZBOX!0000 [fritzzbox: Run_fritzloginfo.4034] - ERROR: fritzLogExPost: Undefined subroutine &main::myUtilsFritzLogExPostnb called at ./FHEM/72_FRITZBOX.pm line 4031.

  • myUtilsFritzLogExPostnb in 99_myUtil eingebaut
       2023.04.03 20:12:04.986 2: FRITZBOX!0000 [fritzzbox: Lua_Data.5530] - INFO: data.lua not supportet. Fritz!Box or Fritz!OS outdated.
       2023.04.03 20:12:04.993 2: FRITZBOX!0000 [fritzzbox: Run_fritzloginfo.4020] - ERROR: fritzLogInfo: data.lua not supportet

  • dann ein Aufruf get <name> fritzLog hash sys off
    2023.04.03 20:14:04.061 2: FRITZBOX!0000 [fritzzbox: Lua_Data.5530] - INFO: data.lua not supportet. Fritz!Box or Fritz!OS outdated.
    2023.04.03 20:14:04.069 2: FRITZBOX!0000 [fritzzbox: Run_fritzloginfo.4020] - ERROR: fritzLogInfo: data.lua not supportet
    2023.04.03 20:14:04.140 3: FRITZBOX!0000 [fritzzbox: Set_Cmd_Done.3805] - DEBUG: fritzLog to Sub: sys
    {"Error":"data.lua not supportet","Info":"Fritz!Box or Fritz!OS outdated"}
    2023.04.03 20:14:04.145 2: ERROR: fritzLogInfo: data.lua not supportet

Sind die Meldungen relevant?
Mein nächster Schritt wäre dann der TelegramBot. Da müsste ich aber auf mein aktives System.
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

JoWiemann

Zitat von: RalfRog am 03 April 2023, 20:42:28Hi Jo
==> Sind wir dann nicht hier raus? Sollen wir zurück in den Support Thread oder einen Neuen gehen?
[/qoute]

Hallo Ralf,

wir können jetzt wieder in den Support Thread zurück.

Zitat von: RalfRog am 03 April 2023, 20:42:28Hi Jo
  • die myUtilsFritzLogExPostnb fehlte noch
      2023.04.03 20:09:35.599 2: FRITZBOX!0000 [fritzzbox: Lua_Data.5530] - INFO: data.lua not supportet. Fritz!Box or Fritz!OS outdated.
      2023.04.03 20:09:35.607 2: FRITZBOX!0000 [fritzzbox: Run_fritzloginfo.4020] - ERROR: fritzLogInfo: data.lua not supportet
      2023.04.03 20:09:35.615 2: FRITZBOX!0000 [fritzzbox: Run_fritzloginfo.4034] - ERROR: fritzLogExPost: Undefined subroutine &main::myUtilsFritzLogExPostnb called at ./FHEM/72_FRITZBOX.pm line 4031.

  • myUtilsFritzLogExPostnb in 99_myUtil eingebaut
      2023.04.03 20:12:04.986 2: FRITZBOX!0000 [fritzzbox: Lua_Data.5530] - INFO: data.lua not supportet. Fritz!Box or Fritz!OS outdated.
      2023.04.03 20:12:04.993 2: FRITZBOX!0000 [fritzzbox: Run_fritzloginfo.4020] - ERROR: fritzLogInfo: data.lua not supportet

  • dann ein Aufruf get <name> fritzLog hash sys off
    2023.04.03 20:14:04.061 2: FRITZBOX!0000 [fritzzbox: Lua_Data.5530] - INFO: data.lua not supportet. Fritz!Box or Fritz!OS outdated.
    2023.04.03 20:14:04.069 2: FRITZBOX!0000 [fritzzbox: Run_fritzloginfo.4020] - ERROR: fritzLogInfo: data.lua not supportet
    2023.04.03 20:14:04.140 3: FRITZBOX!0000 [fritzzbox: Set_Cmd_Done.3805] - DEBUG: fritzLog to Sub: sys
    {"Error":"data.lua not supportet","Info":"Fritz!Box or Fritz!OS outdated"}
    2023.04.03 20:14:04.145 2: ERROR: fritzLogInfo: data.lua not supportet

Sind die Meldungen relevant?
Mein nächster Schritt wäre dann der TelegramBot. Da müsste ich aber auf mein aktives System.


Die Meldungen "INFO: data.lua not supportet. Fritz!Box or Fritz!OS outdated." irritieren mich, da ich sie nicht bekomme und in diesem Code Teil auch gar nichts geändert habe.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

RalfRog

#2734
Vielen Dank für Eure Hilfe auch wenn ich in der Formulierung ungeschickt war. Wusste mich nicht besser zu artikulieren  ::)

Wir sind zurück im Fritz_Support Thread

Edit zum Abschluss:
Lösung im FritzBox Modul erreicht (ab 07.50.12 von Anfang April 2023).
Die Funktion in  99_myUtils kann nun Blocking aufgerufen werden.
Dadurch wird der Aufruf des TelegramBot aus der 99_ korrekt abgearbeitet.
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

swsmily

Hallo. Ich habe eine Verständnisfrage.
In meinem FHEM bekomme ich im Logfile immer den Eintrag "Found from id in message" - sobald man von Telegram etwas an FHEM sendet.

2023.05.07 22:16:15.730 3: TelegramBot TelegramBot: Found from id in message - id : XXXXXXXXX

Mich wundert, dass ich solche Einträge früher im Log nicht hatte und bei zwei anderen FHEM-Installationen, die jeweils auch einen Telegrambot haben diese Meldungen auch nicht im Logfile auftauchen.

FHEM ist bei allen 3 Installationen auf dem gleichen Stand (update überall am gleichen Tag gemacht). Attribute sind ebenso gleich gesetzt.
Einziger Unterschied, das betroffene FHEM hat nur einen Contact, die anderen beiden Installationen haben jeweils 3 Contacts (einer davon ist der, der ersten FHEM Installationen).

Warum kommen bei einem FHEM diese Meldungen, bei anderen nicht? Verbose ist global und für den Telegrambot bei allen gleich.


viegener

Zitat von: swsmily am 07 Mai 2023, 22:28:10Hallo. Ich habe eine Verständnisfrage.
In meinem FHEM bekomme ich im Logfile immer den Eintrag "Found from id in message" - sobald man von Telegram etwas an FHEM sendet.

2023.05.07 22:16:15.730 3: TelegramBot TelegramBot: Found from id in message - id : XXXXXXXXX

Mich wundert, dass ich solche Einträge früher im Log nicht hatte und bei zwei anderen FHEM-Installationen, die jeweils auch einen Telegrambot haben diese Meldungen auch nicht im Logfile auftauchen.

FHEM ist bei allen 3 Installationen auf dem gleichen Stand (update überall am gleichen Tag gemacht). Attribute sind ebenso gleich gesetzt.
Einziger Unterschied, das betroffene FHEM hat nur einen Contact, die anderen beiden Installationen haben jeweils 3 Contacts (einer davon ist der, der ersten FHEM Installationen).

Warum kommen bei einem FHEM diese Meldungen, bei anderen nicht? Verbose ist global und für den Telegrambot bei allen gleich.


Die Meldung kommt, wenn der entsprechende Kontakt in der Nachricht gefunden wurde. Diese Nachricht ist auch schon seit langer Zeit enthalten. Der Unterschied kann entweder darin liegen, dass der Contact nicht gefunden wird oder dass auf den Installation das verbose level unterschiedlich eingestellt ist.

Mit verbose level 2 erscheint die entsprechende Nachricht nicht mehr
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

swsmily

Zitat von: viegener am 11 Mai 2023, 22:40:55Der Unterschied kann entweder darin liegen, dass der Contact nicht gefunden wird oder dass auf den Installation das verbose level unterschiedlich eingestellt ist.


oh man wie peinlich. Ich hatte wohl Tomaten auf den Augen. Tatsächlich ist bei den beiden FHEM-Installationen, wo die Meldung nicht kommt verbose auf 2 gesetzt und bei dem FHEM, wo die Meldung kommt ist das Attribut gar nicht gesetzt, wodurch das Global verbose 3 genutzt wird :o

Danke fürs Augen öffnen  ;D

wowogiengen

Hallo,
ich weiß nicht wodurch es passiert ist, aber irgendwann einmal habe ich das attribut für die Favoriten angepasst, um weitere Kommandos zu haben...
attribute teleBot favorites
set RolladenWohnzimmer Auf;
set RolladenWohnzimmer Zu;
set RolladenWohnzimmer pct 100;
set RolladenWohnzimmer pct 60;
set RolladenWohnzimmer pct 0 ;
set HzgAktorBuero on;
set HzgAktorBuero off;
set HzgSetBad desired-temp 29;
set HzgSetBad desired-temp 22;
set AlleRolladen Zu;
set AlleRolladen Auf
Jetzt ist mir aufgefallen, dass mein Client die Favoriten nicht aktualisiert hat, und somit das falsche Kommando gesendet hat (wahrscheinlich, weil ich die Kommandos für den Wohnzimmerrolladen ergänzt habe) und der Client das nicht mitbekommen hat.

Wie kann man das in Zukunft automatisieren, oder durch eine bestimmte Vorgehensweise gleich ganz eliminieren?

Viele Grüße
Wolfgang

Maista

Zitat von: wowogiengen am 13 Mai 2023, 22:59:14Hallo,
ich weiß nicht wodurch es passiert ist, aber irgendwann einmal habe ich das attribut für die Favoriten angepasst, um weitere Kommandos zu haben...
attribute teleBot favorites
set RolladenWohnzimmer Auf;
set RolladenWohnzimmer Zu;
set RolladenWohnzimmer pct 100;
set RolladenWohnzimmer pct 60;
set RolladenWohnzimmer pct 0 ;
set HzgAktorBuero on;
set HzgAktorBuero off;
set HzgSetBad desired-temp 29;
set HzgSetBad desired-temp 22;
set AlleRolladen Zu;
set AlleRolladen Auf
Jetzt ist mir aufgefallen, dass mein Client die Favoriten nicht aktualisiert hat, und somit das falsche Kommando gesendet hat (wahrscheinlich, weil ich die Kommandos für den Wohnzimmerrolladen ergänzt habe) und der Client das nicht mitbekommen hat.

Wie kann man das in Zukunft automatisieren, oder durch eine bestimmte Vorgehensweise gleich ganz eliminieren?

Hallo Wolfgang,

hast Du den in deinem Telegram-Client nach dem Ändern ein
Zitat/start
(Menüe holen, falls /start" dein Kommando ist) gemacht?

wowogiengen

Hallo Maista,
nein, das habe ich erst gemacht, als ich versucht habe, die Kommandos wieder gerade zu biegen.
Aber das ist ja eigentlich genau das, was ich vermeiden möchte... Der Chat sollte selber wissen, wann die Kommandos zu aktualisieren sind...


Maista

Zitat von: wowogiengen am 15 Mai 2023, 19:25:43Hallo Maista,
nein, das habe ich erst gemacht, als ich versucht habe, die Kommandos wieder gerade zu biegen.
Aber das ist ja eigentlich genau das, was ich vermeiden möchte... Der Chat sollte selber wissen, wann die Kommandos zu aktualisieren sind...


Woher soll der Client das wissen?

ocin4

Hallo,

ich würde gerne eine Nachricht tabellarisch darstellen.
Ich hab parseModeSend auf 2_HTML gestellt, die Nachricht in <pre> eingeschlossen und mit mehreren Leerzeichen nacheinander versucht, den Text auszurichten. Laut verschiedenen Stackoverflow-Seiten und der Beschreibung der TelegramBot-API sollte es funktionieren, aber mehrere Leerzeichen werden auch zwischen <pre> und </pre> (oder <code> und </code>) zu einem Leerzeichen zusammengefasst. HTML an sich funktioniert, es wird in der Ausgabe eine Festbreitenschrift verwendet. Auch mit Markdown und den drei Backticks werden die Leerzeichen zusammengefasst. \t wird auch nur zu einem Leerzeichen.
Woran kann das liegen?

Danke im Voraus,
Nico

Edit: Ich hab es auch schon mit &#160; probiert, laut API-Beschreibung: All numerical HTML entities are supported. Aber dann wird die Nachricht gar nicht gesendet.

viegener

#2743
Zitat von: ocin4 am 15 Juli 2023, 21:35:48Hallo,

ich würde gerne eine Nachricht tabellarisch darstellen.
Ich hab parseModeSend auf 2_HTML gestellt, die Nachricht in <pre> eingeschlossen und mit mehreren Leerzeichen nacheinander versucht, den Text auszurichten. Laut verschiedenen Stackoverflow-Seiten und der Beschreibung der TelegramBot-API sollte es funktionieren, aber mehrere Leerzeichen werden auch zwischen <pre> und </pre> (oder <code> und </code>) zu einem Leerzeichen zusammengefasst. HTML an sich funktioniert, es wird in der Ausgabe eine Festbreitenschrift verwendet. Auch mit Markdown und den drei Backticks werden die Leerzeichen zusammengefasst. \t wird auch nur zu einem Leerzeichen.
Woran kann das liegen?

Danke im Voraus,
Nico

Edit: Ich hab es auch schon mit &#160; probiert, laut API-Beschreibung: All numerical HTML entities are supported. Aber dann wird die Nachricht gar nicht gesendet.

Die Leerzeichen werden bereits in FHEM ausgefiltert, denn die Leerzeichen (eins oder mehrere) werden als Trenner zwischen den einzelnen Argumenten des set-Befehls verwendet. Die Information, dass es mehrere Leerzeichen waren geht dabei verloren.

Versuche mal die Leerzeichen durch \s zu ersetzen, sonst wäre diedie einzige Möglichkeit über perl die Methode
TelegramBot_Set im Modul direkt aufzurufen
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

ocin4

Zitat von: viegener am 16 Juli 2023, 00:39:27Versuche mal die Leerzeichen durch \s zu ersetzen,
Das hat nicht funktioniert (siehe Anhang)
Zitat von: viegener am 16 Juli 2023, 00:39:27sonst wäre diedie einzige Möglichkeit über perl die Methode
TelegramBot_Set im Modul direkt aufzurufen
Das versteh ich nicht.

VG, Nico