Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

viegener

Zitat von: tagedieb am 12 Januar 2017, 16:13:39
Hallo viegener

vielen Dank für das tolle Hilfeangebot - das FHEM Modul konnte ich anhand der vielen Beispiele und des Threads prima nachvollziehen und einstellen - nur auf dem Smartphon habe ich noch nicht richtig den Durchblick - bitte mal für mich zur Verständigung: Einstellungen am Handy stelle ich im botfather@xyz ein?  befehle und infos bekomme ich im zuhausebot?
BotFather - edit Commands: dort gebe ich die Befehle wie zum Bsp command2 - set irgendwas an oder aus - ich bekomme als Antwort:Success!Command list updated - für meine Kenntnisse heisst das - erfolgreich abgeschlossen - jedoch finde ich nur das commando, welches ich gestern erfolgreich abgespeichert habe, in meinem zuhauseBot - das irritert mich etwas  :o

Gruss tagedieb

Die grundsätzliche Regel ist, dass man im botfather nur die Grundeinstellungen macht, so dass der Bot funktioniert und Nachrichten empfängt etc / Fast alles andere wird in FHEM eingestellt.

Die Commands im botfather haben nur Auswirkungen wenn man später das Zeichen / im Client eingibt. Das ist reine Kosmetik!

Also erstmal Kommandos in FHEM eintragen als Favorites etc, im botfather muss das eigentlich nicht hinterlegt werden

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

wthiess

Hallo viegener!
Nach dem update aus dem Git funktioniert die SVG senden Funktion nicht mehr.
2017.01.12 22:52:15 3: svgsend1 return value: Not enough arguments for main::TelegramBot_ExecuteCommand at (eval 696) line 1, near "'{plotAsPng("SVG_File_Log_DS_1")}')"
lg
Wolfgang
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 ......

viegener

Zitat von: wthiess am 12 Januar 2017, 22:54:47
Hallo viegener!
Nach dem update aus dem Git funktioniert die SVG senden Funktion nicht mehr.
2017.01.12 22:52:15 3: svgsend1 return value: Not enough arguments for main::TelegramBot_ExecuteCommand at (eval 696) line 1, near "'{plotAsPng("SVG_File_Log_DS_1")}')"
lg
Wolfgang


Das ist möglich, die Routine ExecuteCommand ist eine interne sub im Modul, da ist ein Parameter hinzugekommen, damit das mit den chats überhaupt funktionieren kann. Das wird immer wieder passieren, wenn interne subs im Modul aufgerufen werden. Im Prinzip gibt es da kein offizielles API.

Die Änderung ist, dass nun nach dem peer noch ein parameter für den chatid hinzugekommen (und ein weiterer aber optionaler parameter am ende)
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Zitat von: wthiess am 12 Januar 2017, 17:50:16
Hallo viegener!

Ist es möglich ? und ! auch in query Data
define teleBot40 notify teleBot:queryData.*R_WzF_A !set R_WzF Auf
einzubauen? Hier haben die beiden Zeichen keine Auswirkungen.

lg
Wolfgang

Hallo Wolfgang - das verstehe ich leider nicht, wo hat ? und ! keine Auswirkung? Im Regexp (verständlich wg. spezialfunktion im regexp)?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Zitat von: wthiess am 12 Januar 2017, 19:39:39
Hallo viegener!

Ich hab mir nun ein Supermenü gebaut. Alles super.
Nun wollte ich meine Frau einbinden. Ziel ist es jeder soll seinen eigenen chat haben. Wenn ich den Befehl
define teleBot62 notify teleBot:queryData.*Licht set teleBot queryInline (WZ_Licht) (Hauptmenue) Licht 
sende bekomme ich das Untermenü Licht serviert.
Wenn meine Frau ein Menü anfordert soll sie ihres bekommen. Also habe ich
attr teleBot defaultPeer 111111111
ausgeschalten.
und
attr teleBot cmdRespondChat 1
hinzugefügt.

Jetzt bekommt niemand mehr eine Antwort von TelegramBot.

Bitte um Hilfe
Wolfgang

#Telegram
define teleBot TelegramBot 333333333:xxxxxxxxxxxxxxxxxx
attr teleBot allowUnknownContacts 0
attr teleBot cmdFavorites /s
attr teleBot cmdKeyword d
attr teleBot allowUnknownContacts 0
attr teleBot cmdRestrictedPeer MeineID FrauID
attr teleBot cmdReturnEmptyResult 0
attr teleBot cmdRespondChat 1
#attr teleBot defaultPeer MeineID
attr teleBot favorites [Buttons]=set teleBot queryInline (Licht|Rollos) (Lueftung|Torantrieb|Temperaturen) Hauptmenü
attr teleBot pollingTimeout 120
attr teleBot room Telegram

define teleBot1 notify teleBot:queryData.*VRein set prxPortA1 on
define teleBot2 notify teleBot:queryData.*VRein set teleBot message VRein
define teleBot3 notify teleBot:queryData.*VRaus set prxPortA1 off
define teleBot4 notify teleBot:queryData.*VRaus set teleBot message VRaus

define teleBot5 notify teleBot:queryData.*VRmax set prxPortB2 on
define teleBot6 notify teleBot:queryData.*VRmax set teleBot message VRmax 1/2 Stunde
define teleBot7 notify teleBot:queryData.*VRmaxoff set prxPortB2 off
define teleBot8 notify teleBot:queryData.*VRmaxoff set teleBot message VRmax_off

define teleBot70 notify teleBot:queryData.*VR_0 set LRegL REG_FAN_SPEED_LEVEL 0
define teleBot71 notify teleBot:queryData.*VR_0 set teleBot message VR aus

define teleBot72 notify teleBot:queryData.*VR_1 set LRegL REG_FAN_SPEED_LEVEL 1
define teleBot73 notify teleBot:queryData.*VR_1 set teleBot message VR min

define teleBot74 notify teleBot:queryData.*VR_2 set LRegL REG_FAN_SPEED_LEVEL 2
define teleBot75 notify teleBot:queryData.*VR_2 set teleBot message VR normal

define teleBot76 notify teleBot:queryData.*VR_3 set LRegL REG_FAN_SPEED_LEVEL 3
define teleBot77 notify teleBot:queryData.*VR_3 set teleBot message VR max

define teleBot78 notify teleBot:queryData.*VR_4 set LRegL REG_FAN_SPEED_LEVEL 4
define teleBot79 notify teleBot:queryData.*VR_4 set teleBot message VR Auto

define teleBot9 notify teleBot:queryData.*Temp set svgsend on
#Tor
define teleBot10 notify teleBot:queryData.*Ja_Tor set prxPortB0 on

define teleBot11 notify teleBot:queryData.*Ja_Tor set teleBot message Tor bewegt sich

define teleBot11a notify teleBot:queryData.*Tor_mit_Abfrage set teleBot queryInline (Ja_Tor|Nein_Tor) Sicher?

define teleBot11b notify teleBot:queryData.*Nein_Tor set teleBot queryInline (Hauptmenue) Abgebrochen

define teleBot12 notify teleBot:queryData.*RolloA set R_alle Auf
define teleBot13 notify teleBot:queryData.*RolloA set teleBot message alle Rollos auf
define teleBot14 notify teleBot:queryData.*RolloZ set R_alle Zu
define teleBot15 notify teleBot:queryData.*RolloZ set teleBot message alle Rollos zu

define teleBot16 notify teleBot:queryData.*R_W_A set R_Wolfgang Auf
define teleBot17 notify teleBot:queryData.*R_W_A set teleBot message Rollo Wolfgang auf
define teleBot18 notify teleBot:queryData.*R_W_Z set R_Wolfgang Zu
define teleBot19 notify teleBot:queryData.*R_W_Z set teleBot message Rollo Wolfgang zu

define teleBot20 notify teleBot:queryData.*R_B_A set R_Birgit Auf
define teleBot21 notify teleBot:queryData.*R_B_A set teleBot message Rollo Birgit auf
define teleBot22 notify teleBot:queryData.*R_B_Z set R_Birgit Zu
define teleBot23 notify teleBot:queryData.*R_B_Z set teleBot message Rollo Birgit zu

define teleBot24 notify teleBot:queryData.*R_V_A set R_Veranda Auf
define teleBot25 notify teleBot:queryData.*R_V_A set teleBot message Rollo Veranda auf
define teleBot26 notify teleBot:queryData.*R_V_Z set R_Veranda Zu
define teleBot27 notify teleBot:queryData.*R_V_Z set teleBot message Rollo Veranda zu

define teleBot28 notify teleBot:queryData.*R_A_A set R_Anna Auf
define teleBot29 notify teleBot:queryData.*R_A_A set teleBot message Rollo Anna auf
define teleBot30 notify teleBot:queryData.*R_A_Z set R_Anna Zu
define teleBot31 notify teleBot:queryData.*R_A_Z set teleBot message Rollo Anna zu

define teleBot32 notify teleBot:queryData.*R_LF_A set R_Lina_F Auf
define teleBot33 notify teleBot:queryData.*R_LF_A set teleBot message Rollo Lina_F auf
define teleBot34 notify teleBot:queryData.*R_LF_Z set R_Lina_F Zu
define teleBot35 notify teleBot:queryData.*R_LF_Z set teleBot message Rollo Lina_F zu

define teleBot36 notify teleBot:queryData.*R_LT_A set R_Lina_T Auf
define teleBot37 notify teleBot:queryData.*R_LT_A set teleBot message Rollo Lina_T auf
define teleBot38 notify teleBot:queryData.*R_LT_Z set R_Lina_T Zu
define teleBot39 notify teleBot:queryData.*R_LT_Z set teleBot message Rollo Lina_T zu

define teleBot40 notify teleBot:queryData.*R_WzF_A set R_WzF Auf
define teleBot41 notify teleBot:queryData.*R_WzF_A set teleBot message Rollo WzF auf
define teleBot42 notify teleBot:queryData.*R_WzF_Z set R_WzF Zu
define teleBot43 notify teleBot:queryData.*R_WzF_Z set teleBot message Rollo WzF zu

define teleBot44 notify teleBot:queryData.*R_WzT_A set R_WzT Auf
define teleBot45 notify teleBot:queryData.*R_WzT_A set teleBot message Rollo WzT auf
define teleBot46 notify teleBot:queryData.*R_WzT_Z set R_WzT Zu
define teleBot47 notify teleBot:queryData.*R_WzT_Z set teleBot message Rollo WzT zu

define teleBot48 notify teleBot:queryData.*M_A set Markise Auf
define teleBot49 notify teleBot:queryData.*M_A set teleBot message Markise auf
define teleBot50 notify teleBot:queryData.*M_Z set Markise Zu
define teleBot51 notify teleBot:queryData.*M_Z set teleBot message Markise zu

define teleBot52 notify teleBot:queryData.*T_VR set teleBot message Temp Vorraum {( return sprintf("%.1f C°", ReadingsVal("DS18B20_C29AB2070000","temperature",0))  )}

define teleBot53 notify teleBot:queryData.*T_SK set teleBot message Temp Sommerküche {( return sprintf("%.1f C°", ReadingsVal("Hideki_30_5","temperature",0))  )}

define teleBot54 notify teleBot:queryData.*T_Pool set teleBot message Temp Pool {( return sprintf("%.1f C°", ReadingsVal("DS18B20_FF532A361604","temperature",0))  )}


define teleBot55 notify teleBot:queryData.*T_W set teleBot message Temp Wolfgang {( return sprintf("%.1f C°", ReadingsVal("DS18B20_7F48B3070000","temperature",0))  )}

define teleBot56 notify teleBot:queryData.*T_WZ set teleBot message Temp Wohnzimmer {( return sprintf("%.1f C°", ReadingsVal("Temp_WZ","Temperatur",0))  )}


define teleBot57 notify teleBot:queryData.*T_L set teleBot message Temp Lina {( return sprintf("%.1f C°", ReadingsVal("DS18S20_7D7319030800","temperature",0))  )}

define teleBot58 notify teleBot:queryData.*T_Aus set teleBot message Temp Aussen {( return sprintf("%.1f C°", ReadingsVal("DS18B20_FFB804361603","temperature",0))  )}

define teleBot59 notify teleBot:queryData.*WZ_Licht set prxPortB7 on
define teleBot60 notify teleBot:queryData.*WZ_Licht set teleBot message WZ_Licht schalten

define teleBot61 notify teleBot:queryData.*Hauptmenue set teleBot queryInline (Licht|Rollos) (Lueftung|Torantrieb|Temperaturen) Hauptmenü

define teleBot62 notify teleBot:queryData.*Licht set teleBot queryInline (WZ_Licht) (Hauptmenue) Licht

define teleBot63 notify teleBot:queryData.*Rollos set teleBot queryInline (RolloA|RolloZ) (R_W_A|R_W_Z|R_B_A|R_B_Z) (R_WzF_A|R_WzF_Z|R_WzT_A|R_WzT_Z) (R_LF_A|R_LF_Z|R_LT_A|R_LT_Z) (R_A_A|R_A_Z|R_V_A|R_V_Z) (M_A|M_Z) (Hauptmenue) Rollos

define teleBot64 notify teleBot:queryData.*Lueftung set teleBot queryInline (VRmax)  (VRein|VRaus|VRmax|VRmaxoff) (VR_0|VR_1|VR_2|VR_3|VR_4) (Hauptmenue) Lüftung

define teleBot65 notify teleBot:queryData.*Torantrieb set teleBot queryInline (Tor_mit_Abfrage) (Hauptmenue) Torantrieb

define teleBot66 notify teleBot:queryData.*Temperaturen set teleBot queryInline (T_W|T_WZ|T_L|T_VR) (T_Aus|T_Pool|T_SK) (Temperaturkurve:Temp) (Hauptmenue) Temperaturen


Ich habe mir das jetzt nicht im detail angeschaut und habe ich nicht vollständig verstanden, was Du machst.

Aber ohne default peer muss im entsprechend set ... message Befehl ein peer explizit angegeben werden an wen soll das sonst geschickt werden?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

wthiess

Hallo viegener!

Anders gefragt:
Was muss ich einstellen damit mehrere Personen mit Telegram kommunizieren können?

default peer geht nicht sonst bekommt nur der default peer die Antwort.
peer explizit geht auch nicht da ich ja nicht weis wer den jetzt kommunizieren will.
Also müsste "peer explizit" als Variable ausgeführt werden.
sollte nicht cmdRespondChat für das zuständig sein?
Ich hoffe mich verständlich ausgedrückt zu haben.

lg
Wolfgang
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 ......

viegener

Zitat von: wthiess am 13 Januar 2017, 10:47:38
Hallo viegener!

Anders gefragt:
Was muss ich einstellen damit mehrere Personen mit Telegram kommunizieren können?

default peer geht nicht sonst bekommt nur der default peer die Antwort.
peer explizit geht auch nicht da ich ja nicht weis wer den jetzt kommunizieren will.
Also müsste "peer explizit" als Variable ausgeführt werden.
sollte nicht cmdRespondChat für das zuständig sein?
Ich hoffe mich verständlich ausgedrückt zu haben.

lg
Wolfgang


Nein, cmdRespondChat  sagt nur, dass eine Antwort, die der TelegramBot erzeugt (!) in einem Gruppenchat erfolgt und nicht im persönlichen chat.

Wenn Du selber eine Nachricht verschickst kannd er Bot ja nicht ahnen auf was Du gerade antwortest und an wen das gehen soll. Also musst Du da den peer mitgeben. Analogie - wenn Du einen Brief beantwortest musst Du die Adresse ja auch selber draufschreiben, denn die Post weiss ja nichts vom Inhalt. OK ich gebe zu diese Analogie stammt aus einer anderen Zeit ;)


Also msg / snd... senden entweder an die übergebenen Peers oder an den DefaultPeer wenn keiner drin steht oder es gibt einen Fehler.


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

wthiess

Hallo viegener!

Frage1: Gibt es eine Möglichkeit "queryInline" an den Sender zurückzusenden?
Nach Eingabe von /s kommt der Button zum sender zurück. Wenn ich auf diesen klicke, bekommt nur der defaultPeer das Menü.
attr teleBot favorites [Buttons]=set teleBot queryInline (Licht|Rollos) (Lueftung|Torantrieb|Temperaturen) Hauptmenü
Frage2: Kann in Fhem 2 verschieden Bot verwalten. Damit wäre mein Problem auch gelöst. Ich lege einfach alles 2x an. Ist zwar etwas umständlich aber wenns geht.

lg
Wolfgang

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 ......

Prof. Dr. Peter Henning

Siehe den Beispielcode in der Wiki-Doku für PostMe.

LG

pah

viegener

Zitat von: wthiess am 13 Januar 2017, 17:32:28
Hallo viegener!

Frage1: Gibt es eine Möglichkeit "queryInline" an den Sender zurückzusenden?
Nach Eingabe von /s kommt der Button zum sender zurück. Wenn ich auf diesen klicke, bekommt nur der defaultPeer das Menü.
attr teleBot favorites [Buttons]=set teleBot queryInline (Licht|Rollos) (Lueftung|Torantrieb|Temperaturen) Hauptmenü
Frage2: Kann in Fhem 2 verschieden Bot verwalten. Damit wäre mein Problem auch gelöst. Ich lege einfach alles 2x an. Ist zwar etwas umständlich aber wenns geht.

lg
Wolfgang

Ich bin mir nicht sicher, wie ich es noch erklären soll, Du musst einen peer angeben beim senden. Also wird ein statement in einem notify set teleBot message VRein an den Default peer und nicht an einen von Dir gefühlten Sender gehen.

Also musst Du Dir diesen Peer irgendwo merken (z.B. in einem Dummy) oder in perl code oder durch duplizieren des gesamten Bots und der notifies etc

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

wthiess

Hallo!
Ich habe es nun über einen dummy gelöst. Allerdings passiert die Änderung der ID erst wenn ich ein Telegram an den Bot sende. Deshalb kann es sein das die erste Antwort der andere bekommt. ansonsten funktioniert mein System wie gewollt. Danke für die Hilfe.
Hier muss ich noch etwas feilen.
lg
Wolfgang
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 ......

blommaep

Hallo. Bin gerade noch im aufbau meiner bot. Habe dabei ein kleines Idee: Es ware einfach (mit was ich davon geplant hab) um neben die "allowedCommands" einfach ein attribut/möglichkeit zu haben die Commands zu limitieren auf die "favourites". Also, ich mache gerade favourites fur alles was ich an commands annehmen woll uber ein bot. Ich sollte diese also in allowedCommands irgendwie duplizieren. Ein spezifikes attribut wäre schon. Nur ein kleines idee?

viegener

Zitat von: blommaep am 16 Januar 2017, 17:17:56
Hallo. Bin gerade noch im aufbau meiner bot. Habe dabei ein kleines Idee: Es ware einfach (mit was ich davon geplant hab) um neben die "allowedCommands" einfach ein attribut/möglichkeit zu haben die Commands zu limitieren auf die "favourites". Also, ich mache gerade favourites fur alles was ich an commands annehmen woll uber ein bot. Ich sollte diese also in allowedCommands irgendwie duplizieren. Ein spezifikes attribut wäre schon. Nur ein kleines idee?

@blommaep:
generell wäre das wohl eine sinnvolle Idee, das würde aber erforderen, dass beim Setzen der Favoriten im TelegramBot die Kommandos extrahiert werden. Das passiert heute nicht. Ich möchte das parsen von Commands im TelegramBot nicht nachbilden, deshalb ist das momentan ein manueller Schritt. Allerdings verwende ich allowedCommands bei mir sogar gar nicht, denn in meinen Favoriten stecken soviele verschiedene Kommands (inkl perl-Aufrufe), dass eine Einschränkung über allowedCommands sinnlos wäre.

Generell gilt aus meiner Sicht, wenn man viele verschiedene Kommandos per favoriten aufruft, hilft allowedCommands nicht weiter. Generell gilt der TelegramBot öffnet einen Zugang von aussen, hier sollte man immer bewusst wissen was man tut.

Let me know if english would be better for a reply?

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

viegener

Nachdem meine Kopplung des TelegramBots mit dem PostMe Modul in myutils auf über 600 Zeilen angewachsen war, habe ich am Sonntag angefangen dafür ein Modul zu implementieren, dass diese Kopplung auch für andere nutzbar zu machen. Die Kopplung zwischen TelegramBot und dem ListManagerBot ist komplett ohne zusätzliche notify devices und perl code lauffähig alles läuft über Attribute und set-Befehle.

Hintergrund, es geht darum Einkaufs- oder Todolisten (PostMe-Modul) mit Telegrambot zu pflegen und anzuzeigen über telegramBot-Dialoge (inline keyboards). Ziel ist die darin enthaltenen Funktionen - umsortieren / zweispaltige Liste / entfernen und verändern von Einträgen, die jetzt schon funktionieren bereitzustellen und anderes dazu...

Gibt es Interesse an einem solchen Modul?

Ich habe mal ein paar screenshots angehängt

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

JoeALLb

Klar habe ich interesse, verfolge die Entwicklung dort schon lange, bisher wurde mir nur zuviel Code geändert, um es bei mir schon produktiv einzusetzen...
Aber mit so einem Modul wird das natürlich alles gleich viel einfacher!!
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270