Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

rohlande

#1725
Hi Experten,

arbeite gerade an meinen Button für Telegram.
Bisher finde ich die inline Button sehr schick. Zumindest besser als [/....]!
Nun zur Frage: Kann mann ICONS in einer angenehmen Größe versenden via Bot???
Wenn ich es mit den ICONS aus dem ./FHEM..... Path versuche kommen die immer zu groß am Handy an.


VG Denny

Update:
Hat sich erledigt. Habe herausgefunden wie man dem Button ein Symbol mit übergibt und Inhalten dieses Symbol auch hinzufügt.
HostSystem: Synology DS918 | FHEM im Docker Version: 6.0-s22528_v2.2.4 (dedizierte IP Adresse) | MQTT_Broker auf DS918 NAS | MQTT_FHEM | TASMOTA_DEVICE | SSChatBot | SSCam | LaMetric | FBAHAHTTP | CUL | SONOS | HUEBridge (deCONZ) Zigbee | FB_CALLMONITOR | InfluxDBLogger

nean00

Hallo zusammen,

ich hoffe die Frage wurde nicht schon zu oft gestellt, aber ich habe nichts dazu gefunden.

Ich möchte eine DOIF definition per telegram ändern. Das klappt auch grundsätzlich. Aber wenn ich an meinen telegram bot z.b. folgendes schicke

modify DI_HeizungsAUTOMATIK ([Gasverbrauch:Brenner_status] == 1)
(setreading HeizungsSteuerung differenzTempErweitert {([HeizungsSteuerung:differenzTemp]+5)})


dann werden die Readings Abfragen anscheinend direkt ausgewertet und das DOIF so erstellt:

modify DI_HeizungsAUTOMATIK (0 == 1)
(setreading HeizungsSteuerung differenzTempErweitert 12)


Damit macht das DOIF ja keinen Sinn.
Muss ich noch etwas beachten, damit die Abfragen auch in die DOIF Definition eingehen?

Vielen Dank

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

andies

Zitat von: rohlande am 03 November 2017, 00:03:17
Hat sich erledigt. Habe herausgefunden wie man dem Button ein Symbol mit übergibt und Inhalten dieses Symbol auch hinzufügt.
Kannst du das mal kurz beschreiben?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

rohlande

Entschuldigung. Wollte es nicht vorenthalten.
Ist eigentlich ganz einfach. Ich verwende im jeweiligen String die "Emoji" welche ich zuvor an meinen Bot gesendet habe vom Handy aus.
Dann habe ich diese einfach mit ins notify eingebunden.
define teleBot1_INFOS_ntfy notify teleBot1:queryData.*❓INFOS set teleBot1 queryInline (❓FRITZBox|📶ESPEasy) (🖥GATEWAY|📲AMAD|📡MQTT) (⛽️SPRITT-PREISE|📺TV-PROGRAMM) (HAUPTMENÜ) Wähle eine Gruppe aus! Die gewählte Gruppe gibt Dir Infos zum Status zurück!

siehe Bilder!

HostSystem: Synology DS918 | FHEM im Docker Version: 6.0-s22528_v2.2.4 (dedizierte IP Adresse) | MQTT_Broker auf DS918 NAS | MQTT_FHEM | TASMOTA_DEVICE | SSChatBot | SSCam | LaMetric | FBAHAHTTP | CUL | SONOS | HUEBridge (deCONZ) Zigbee | FB_CALLMONITOR | InfluxDBLogger

andies

FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

nean00

Zitat von: amenomade am 03 November 2017, 15:57:22
Evtl. die [ mit \ escapen?

Hey,
wenn ich es so schreibe \[HeizungsSteuerung:differenzTemp\] wandelt er es zwar nicht mehr um, aber das DOIF modul hat dann einen error beim Auslösen Can't find string terminator "'" anywhere before EOF at (eval 546510) line 1.

Hab ich noch was vergessen?

viegener

Zitat von: nean00 am 03 November 2017, 21:53:02
Hey,
wenn ich es so schreibe \[HeizungsSteuerung:differenzTemp\] wandelt er es zwar nicht mehr um, aber das DOIF modul hat dann einen error beim Auslösen Can't find string terminator "'" anywhere before EOF at (eval 546510) line 1.

Hab ich noch was vergessen?

Ich bin zwar immer noch nicht sicher ob das wirklich geht, es könnte sein, dass Du auf perl-Funktionen ausweichen musst (ReadingsVal).

Um jetzt aber zu verstehen was mit der Escapten-Version schief gegangen ist wäre es wichtig ein list vom angelegten DOIF-Device zu sehen
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

nean00

Danke noch an eure Antworten viegener und amenomade.

Hier das list des DOIF:

TelegramBot FHEM -  Befehl:list DI_DI: - Ergebnis:
Internals:
   CFGFN     
   DEF        ([+00:01]) (set telegram message \[HeizungsSteuerung:differenzTemp\])
   NAME       DI_DI
   NR         4509
   NTFY_ORDER 50-DI_DI
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-11-03 20:52:35   cmd             1
     2017-11-03 20:52:35   cmd_event       set_cmd_1
     2017-11-03 20:52:35   cmd_nr          1
     2017-11-03 20:52:35   error           Can't find string terminator "'" anywhere before EOF at (eval 544403) line 1.

     2017-11-03 20:52:35   state           cmd_1
     2017-11-03 20:52:22   timer_01_c01    03.11.2017 20:53:22
   Condition:
     0          DOIF_time_once($hash,0,$wday)
   Days:
   Devices:
   Do:
     0:
       0          set telegram message \[HeizungsSteuerung:differenzTemp\]
   Helper:
     globalinit 1
     last_timer 1
     sleeptimer -1
   Itimer:
   Localtime:
     0          1509738802
   Realtime:
     0          20:53:22
   Regexp:
     All:
   State:
     State:
   Time:
     0          +00:01
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Triggertime:
     1509738802:
       localtime  1509738802
       Hash:
Attributes:
   do         always



Wenn ich es mit ReadingsVal definiere habe ich aber das selbe Problem, dass er direkt den abgefragten Wert in die Definition reinschreibt:

modify DI_DI ([+00:01]) (set telegram message {(ReadingsVal("HeizungsSteuerung","differenzTemp",0))})

Antwort: TelegramBot FHEM -  Befehl:modify DI_DI ([+00:01]) (set telegram message 6): - Ergebnis:
OK


Ich war mir anfangs nicht sicher, ob Telegram es nur in der Antwort direkt umgewandelt hat. Aber ich bekomme in diesem Beispiel immer die "6" geschickt, auch wenn ich das Reading "differenzTemp" manuell ändere zwischendurch. Eine list Abfrage bestätigt es auch, dass es hardcoded ist.

Falls ihr noch mehr Ideen habt, gerne her damit.

viegener

@nean00: Vielleicht nähere ich mich dem Problem doch erstnochmal von der Seite was Du genau machen willst?
Also willst Du wirklich den Befehl in telegram zusammentippen und ändern oder sind es wenige Varianten?
- Bei letzterem könntest Du eine vordefiniertes Makro in FHEM hinterlegen und dann per telegram nur den trigger senden, der das Makro auslöst

Es sieht halt so aus, als ob escapen nicht geht und perl Readingsval würde nur gehen, wenn Du den Teil auch dynamisch zusammensetzt. Ohne das jetzt ausprobiert zu haben wäre das vermutlich so ähnlich:

{( fhem( "modify DI_HeizungsAUTOMATIK (".chr(91)."Gasverbrauch:Brenner_status".chr(93)." == 1)
(setreading HeizungsSteuerung differenzTempErweitert ".chr(123)."(".chr(91)."HeizungsSteuerung:differenzTemp".chr(93)."+5))".chr(125)." )}

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

nean00

hej viegener,

vielen Dank für deine Mühe und die super Antwort, denn so klappt es tatsächlich und darauf wäre ich wohl nicht gekommen.
In deinem Code fehlte zwar eine Klammer, aber ein bisschen Arbeit muss ich ja auch selber machen  ::)

So funktioniert es:
{( fhem( "modify DI_HeizungsAUTOMATIK (".chr(91)."Gasverbrauch:Brenner_status".chr(93)." == 1)
(setreading HeizungsSteuerung differenzTempErweitert ".chr(123)."(".chr(91)."HeizungsSteuerung:differenzTemp".chr(93)."+5)".chr(125).")") )}



Zum Hintergrund: Ich bin momentan längere Zeit nicht zu Hause und habe keinen HTTP Zugriff auf mein FHEM, nur über telegram. Mir ist gestern ein Fehler in meiner HeizungsSteuerung aufgefallen und ich wollte die DOIF Funktion anpassen. Danach ging aber gar nichts mehr. Ist ja auch klar wenn die ganzen dynamischen Abfragen weg sind. Daher war es mir erstmal nur wichtig es wieder gerade biegen zu können.
Ich kann mit deiner Lösung also erstmal gut leben. Es ist zwar etwas aufwändiger zu programmieren, aber es ist auch nur für den Notfall gedacht.

Also besten Dank nochmal!

Forums

Hallo Zusammen,

ich benutze seit kurze Zeit das Telegram um informiert zu  werden, ob die Alarmanlage scharf bzw. unscharf geschaltet wurde. Zum aktivieren  der Anlage benutze ich ein HM-RC-Sec4-3.
Soweit funktioniert alles, jedoch erhalte ich auf meinem iPhone immer 5 Meldungen hintereinander.
Wenn der Alarm ausgelöst wird kommt nur eine Nachricht.


2017-11-04 19:01:32 CUL_HM FB_****_light Short
2017-11-04 19:01:32 TelegramBot Telegram message @**** Alarm AN !
2017-11-04 19:01:32 TelegramBot Telegram message @**** Alarm AN !
2017-11-04 19:01:32 TelegramBot Telegram message @**** Alarm AN !
2017-11-04 19:01:32 TelegramBot Telegram message @**** Alarm AN !
2017-11-04 19:01:32 CUL_HM FB_****_light Short 1_16 (to myHmUART)
2017-11-04 19:01:32 CUL_HM FB_****_light trigDst_583460: noConfig
2017-11-04 19:01:32 CUL_HM FB_****_light trigger: Short_16
2017-11-04 19:01:32 CUL_HM FB_****_light trigger_cnt: 16
2017-11-04 19:01:32 TelegramBot Telegram sentMsgResult: SUCCESS
2017-11-04 19:01:32 TelegramBot Telegram sentMsgId: 461
2017-11-04 19:01:32 TelegramBot Telegram sentMsgPeerId: 123456789
2017-11-04 19:01:32 TelegramBot Telegram sentMsgResult: SUCCESS
2017-11-04 19:01:32 TelegramBot Telegram sentMsgId: 462
2017-11-04 19:01:32 TelegramBot Telegram sentMsgPeerId: 123456789
2017-11-04 19:01:32 TelegramBot Telegram sentMsgResult: SUCCESS
2017-11-04 19:01:32 TelegramBot Telegram sentMsgId: 463
2017-11-04 19:01:32 TelegramBot Telegram sentMsgPeerId: 123456789
2017-11-04 19:01:33 TelegramBot Telegram sentMsgResult: SUCCESS
2017-11-04 19:01:33 TelegramBot Telegram sentMsgId: 464
2017-11-04 19:01:33 TelegramBot Telegram sentMsgPeerId: 123456789
2017-11-04 19:01:33 TelegramBot Telegram sentMsgResult: SUCCESS
2017-11-04 19:01:33 TelegramBot Telegram sentMsgId: 465
2017-11-04 19:01:33 TelegramBot Telegram sentMsgPeerId: 123456789


Config
define notify_fhem_reload notify FB_****.*_light.* set Telegram message @**** Alarm AN !

Woran kann es liegen?

amenomade

Liegt an deine Regex
FB_****.*_light.* reagiert auf alle folgende Events:
2017-11-04 19:01:32 CUL_HM FB_****_light Short
2017-11-04 19:01:32 CUL_HM FB_****_light Short 1_16 (to myHmUART)
2017-11-04 19:01:32 CUL_HM FB_****_light trigDst_583460: noConfig
2017-11-04 19:01:32 CUL_HM FB_****_light trigger: Short_16
2017-11-04 19:01:32 CUL_HM FB_****_light trigger_cnt: 16

Jedes mal wird eine Nachricht geschickt.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Kent

Hi,

@Rohlande: gibts irgendwo ne Beschreibung, wie man die Schaltflächen in Telegram so hinbekommt? Ich hab bisher in Telegram nur meine testweise gesetzten Kurzbefehle über die Inlinie Tastaur und die beiden Buttons sind riesig und nicht schön.

gruß

Markus


Zitat von: rohlande am 03 November 2017, 20:04:55
Entschuldigung. Wollte es nicht vorenthalten.
Ist eigentlich ganz einfach. Ich verwende im jeweiligen String die "Emoji" welche ich zuvor an meinen Bot gesendet habe vom Handy aus.
Dann habe ich diese einfach mit ins notify eingebunden.
define teleBot1_INFOS_ntfy notify teleBot1:queryData.*❓INFOS set teleBot1 queryInline (❓FRITZBox|📶ESPEasy) (🖥GATEWAY|📲AMAD|📡MQTT) (⛽️SPRITT-PREISE|📺TV-PROGRAMM) (HAUPTMENÜ) Wähle eine Gruppe aus! Die gewählte Gruppe gibt Dir Infos zum Status zurück!

siehe Bilder!
HW: Raspberry 4 mit FHEM und IOBroker, 433MHz Signalduino (3.50 Firmware), 868MHz CUL, Elero Drive Stick, 1-Wire Temperatur Sensoren

rohlande

@Kent: Eine Beschreibung zu den "queryInline" zu den Button, habe ich hier im Forum zusammen gesucht.

Ich verwende die "/cmd...." Struktur nicht. Das ist mir zu statisch. Gleichfalls gibt es keine Möglichkeit Untermenüs zu verwenden.  Die gesamten Button Struktur des Systems besteht in dem doch recht aufwendigen "notify".
Somit die Frage: Möchtestb Du das mit "notify" , "sub" oder auch über Modul "MsgDialog" abbilden?

Ich werde versuchen es in Zukunft evtl. mit dem Modul "MsgDialog" von  user igami abzubilden.
Das ist sehr flexibel aber nach meiner Auffassung nocht etwas aufwändiger als "notify".

Wenn Du magst schicke ich Dir meine "notify" Umsetzung.

VG Denny.
HostSystem: Synology DS918 | FHEM im Docker Version: 6.0-s22528_v2.2.4 (dedizierte IP Adresse) | MQTT_Broker auf DS918 NAS | MQTT_FHEM | TASMOTA_DEVICE | SSChatBot | SSCam | LaMetric | FBAHAHTTP | CUL | SONOS | HUEBridge (deCONZ) Zigbee | FB_CALLMONITOR | InfluxDBLogger