chatBot (vordefinierte Dialoge) für Telegram

Begonnen von igami, 27 März 2016, 17:17:32

Vorheriges Thema - Nächstes Thema

pole23

#30
versuch mal folgendes:
my $TelegramBot_Device = "jarvisAThome";

ripper

Zitat von: pole23 am 20 Juli 2016, 14:01:39
versuch mal folgendes:
my $TelegramBot_Device = "jarvisAThome";

wenn ichs so eintrage dann bekomme ich leider folgenden Fehler

Undefined subroutine &main::myChat_Utils_Initialize called at fhem.pl line 2271.

ansonsten bleibt alles wie vorher schon beschrieben :-[

ripper

#32
ich habe jetzt einfach mal zum testen ein Stück vom "original" Code, in dem Sonos Boxen geschallten werden, in meinen Code mit eingefügt. Die Boxen gibt es bei mir natürlich nicht.

if($msgText eq "/sonosstop"){
fhem_bot_fhem_cmd(
"set Sonos StopAll",
);
fhem_bot_response(
"Alle Sonos Boxen wurden gestoppt.\n/hauptmenue",
);
}


wenn ich jetzt /sonosstop an meinen Bot schicke bekomme ich im Event Monitor mit eingeschaltetem Log folgende Meldung:


2016.07.20 19:28:37 3 : set Sonos StopAll : Please define Sonos first
2016-07-20 19:28:37 TelegramBot jarvisAThome msgId: 421
2016-07-20 19:28:37 TelegramBot jarvisAThome msgPeer: Florian
2016-07-20 19:28:37 TelegramBot jarvisAThome msgChat:
2016-07-20 19:28:37 TelegramBot jarvisAThome msgPeerId: 22247xxxx
2016-07-20 19:28:37 TelegramBot jarvisAThome msgText: /sonosstop
2016-07-20 19:28:37 TelegramBot jarvisAThome msgFileId:
2016-07-20 19:28:38 TelegramBot jarvisAThome sentMsgResult: SUCCESS
2016-07-20 19:28:38 TelegramBot jarvisAThome sentMsgId: 422


wenn ich jetzt
set Sonos StopAll gegen set .*rollo.* zu tausche und /sonosstop an meinen Bot schicke dann fahren alle meine Jalousien runter. Das Versteh ich jetzt nicht.

Ich habe das "Sonos if" jetzt komplett umbenannt und umgeschrieben:
if($msgText eq "/alleauf"){
fhem_bot_fhem_cmd(
"set .*rollo.* auf",
);
fhem_bot_response(
"Alle Jalousien werden geöffnet.\n/hauptmenue",
);
}


und auch in meine Auswahlliste mit eingefügt:
if($msgText eq "/jalousie"){
fhem_bot_response(
"/AlleAuf\n/AlleZu\n/SchlafzimmerAnkippen\n/alleauf\n/hauptmenue",
);
}

ich kann /alleauf an meinen Bot schicken oder über das "Menü" hinnavigieren und dann auf /alleauf klicken. Die Jalousien fahren hoch.
Kann mir vielleicht jemand erklären was der Unterschied zwischen dem eingefügten Code von tiroso und dem von mir selber geschriebenen ist??

Hier nochmal von mir selber getippt. Dies funktioniert nicht:
if($msgText eq "/AlleAuf"){
fhem_bot_fhem_cmd(
"set .*rollo.* auf",
);
fhem_bot_response(
"Alle Jalousien werden geöffnet.\n/jalousie\n/hauptmenue",
);
}


----------------------------------------------------------
OK....ich glaub ich habs rausgefunden was mein Problem war. Sobald in $msgText ein Großbuchstabe enthalten war hat es nicht funktioniert. Wenn ich alles klein schreibe dann geht es.
Was mich an der Stelle allerdings doch noch interessieren würde: Warum ist dass so?? Kann mir dass ein Perl Profi vielleicht erklären??

jostereo

Ich bin zwar kein Perl Profi aber die Antwort weiß ich trotzdem :)

Ist liegt an der Zeile
$msgText = lc $msgText;

Am Anfang der Funktion "sub tg_analyse($$$)".

Denn diese wandelt den MessageText in lowercase (Also komplett in Kleinbuchstaben) um.
Somit kann dein Vergleich:
f($msgText eq "/AlleAuf"){
eigentlich niemals matchen, da "eq" Case-Sensitive ist also auf Groß/Kleinschreibung achtet.

ripper

Hallo jostero,

danke für deine Erklärung!! Ich Nutze zwar den Code aus diese Post:

https://forum.fhem.de/index.php/topic,51425.msg464928.html#msg464928

Aber auch dort hab ichs gefunden:

my $msgText = lc ReadingsVal($TelegramBot_Device,"msgText","");

Die Meldung mit dem Bareword bekomme ich zwar immer noch, aber es funktioniert.

mattes1007

Zitat von: tiroso am 22 Juni 2016, 23:14:03
So ich habe heute was Zeit gehabt und habe mein FHEMBot-Script noch was angepasst.

Dem TelegramBot sind folgende userattr hinzuzufügen:

-FhemBot_ReceiveRestrictedPeer   (1 oder 0)
-FhemBot_ReceiveCustomPeer      (Custom Peers)


Wie funktioniert die Sicherheit? Welche PeerID darf mit FHEM Kontakt aufnehmen?
Sollte FhemBot_ReceiveRestrictedPeer gesetzt sein wird das TelegramBot attr RestrictedPeer eingelesen. Sollte die PeerID dort eingetragen sein wird die Kommunikation freigegeben. Sollte die ID nicht zu finden sein wird die Kommunikation nicht freigegeben.
Sollte FhemBot_ReceiveRestrictedPeer nicht vorhanden oder nicht gesetzt sein wird das userattr FhemBot_ReceiveCustomPeer eingelesen. Die ist z.B. nötig wenn man TelegramBot noch für andere Sachen verwenden will und speziell für die FHEM Kommunikation nur bestimmte IDs freigeben will. Sollte die ID nicht vorhanden sein wird die Kommunikation nicht freigegeben, ansonsten schon.
Die Berechtigung wird in der SubRoutine fhem_bot_check_permission kontrolliert.

Es wird ein Notify angelegt welches Das TelegrammBot Device überwacht:

define TelegramBotNotify notify TelegramBot:msgText:.* { fhem_bot($NAME); }




Hallo,

habe mich die ganze Nacht mit dem TelegramBot beschäftigt...bekomme es nicht zum laufen mit dem Code.
Kann mir Nachrichten und Plots schicken. Aber das mit dem Menü will einfach nicht laufen....

Wenn ich das notify erstelle kommt schon mal Unknown command }, try help.

Habe alle anderen Versionen der notifys und sub getestet aber nichts geht. Es kommt immer nur zurück unknown command /start try help

hier mal meine config

define FHEMBOT TelegramBot 2248xxx9:AAHxxxxxxxxxxxzMDMcQQVlYlJcS84s
attr FHEMBOT userattr FhemBot_ReceiveRestrictedPeer 0 FhemBot_ReceiveCustomPeer 1xxxxxxxxxx
attr FHEMBOT cmdFavorites /cmd
attr FHEMBOT cmdKeyword ok
attr FHEMBOT defaultPeer @xxxxxxxx
attr FHEMBOT favorites [Zaehler]={ plotAsPng('SVG_FileLog_myObis_1') };;\
[Tagesverbrauch]={ plotAsPng('SVG_FileLog_zaehler_stat_1') }
attr FHEMBOT pollingTimeout 20
attr FHEMBOT room TelegramBot
define TelegramBotNotify notify FHEMBOT:msgText:.* { fhem_bot($NAME);; }
attr TelegramBotNotify room TelegramBot


Internals:
   DEF        FHEMBOT:msgText:.* { fhem_bot($NAME); }
   NAME       TelegramBotNotify
   NOTIFYDEV  FHEMBOT
   NR         41
   NTFY_ORDER 50-TelegramBotNotify
   REGEXP     FHEMBOT:msgText:.*
   STATE      active
   TYPE       notify
   Readings:
     2016-08-06 13:55:54   state           active
Attributes:
   room       TelegramBot

Readings:
     2016-08-06 12:39:58   Contacts        xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
     2016-08-06 13:50:54   PollingErrCount 16
     2016-08-06 13:50:54   PollingLastError NonBlockingGet timed out on read from <hidden> after 45s
     2016-08-06 13:53:33   msgChat
     2016-08-06 13:53:33   msgFileId
     2016-08-06 13:53:33   msgId           132
     2016-08-06 13:53:33   msgPeer         xx
     2016-08-06 13:53:33   msgPeerId       xxxxxxxx
     2016-08-06 13:53:33   msgText         ok /start
     2016-08-06 13:53:33   prevMsgChat
     2016-08-06 13:53:33   prevMsgFileId
     2016-08-06 13:53:33   prevMsgId       130
     2016-08-06 13:53:33   prevMsgPeer     xxxxxx
     2016-08-06 13:53:33   prevMsgPeerId   19xxxxx37
     2016-08-06 13:53:33   prevMsgText     ok
     2016-08-06 13:53:33   sentMsgId       133
     2016-08-06 13:53:33   sentMsgResult   SUCCESS

use warnings;
use POSIX;

my $msgPeerId = "xxxxxxxxxxxxxxxxxxx";
my $TelegramBot_Device = "FHEMBOT";

sub
myUtilsTelegram_Initialize($$)
{


Woran könnte das liegen ?

Gruß mattes

tiroso

Puh im Moment weiss ich es leider auch nicht.
Hmm...ich suche weiter

davedeluxe

Hey,
danke für die Mühe und für´s teilen!

Ich bekomme leider auch Fehler:
Beim Erstellen des Notify: Unknown command }, try help.
Beim speichern der 99_myUtilsTelegramMessenger.pm: Undefined subroutine &main::myUtilsTelegramMessenger_Initialize called at fhem.pl line 2274.

kalle0103

Super Script, leider hat bei mir die Authentification nicht funktioniert. Habe jetzt eine einfach if ID eq ID. Das läuft...
Anbei die Info zum notify was bei mir auch mit der Fehlermeldung { nicht funktionierte...damit klappts:

define TelegramBotNotify notify TelegramBot:msgText:.* { fhem_bot("$NAME") }

Ascos

Hi,

ich klinke mich mal in die Diskussion mit ein. Habe bei mir auch Telegramm eingerichtet und mit dieser tollen Anleitung hier soweit zum Laufen bekommen.
Licht lässt sich schalten, Informationen und Menüs werden gesendet.
Einzig die SVGs wollen nicht zu mir kommen.
Mein Code sieht im Moment noch so aus, wie der von tiroso von Seite 1, will ihn aber noch auf den von Seite 2 ändern.
Von der 2. Seite habe ich auch das SVG-Skript kopiert, aber ich bekomme genau die gleichen Fehlermeldungen, wie andre07.
Leider hab es auf sein Log keine Antwort, deswegen hole ich das noch einmal nach vorne und hoffe, das jemand jetzt vielleicht eine Idee hat, wo das Problem liegen könnte.

Viele Grüße
Tino


Zitat von: andre07 am 08 Juli 2016, 10:32:37
Check ich heute abend
Von der Arbeit gehts ja auch
das steht im log

2016.07.08 11:44:18 3: SVG_Filelog.Thermostat.WZ_Clima_1.svg: space is not allowed in  definition: Corresponding FileLog definition:
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $src in hash element at ./FHEM/98_SVG.pm line 775.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in string eq at ./FHEM/98_SVG.pm line 751.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in concatenation (.) or string at ./FHEM/98_SVG.pm line 763.
2016.07.08 11:44:18 3: SVG_Filelog.Thermostat.WZ_Clima_1.svg: space is not allowed in  definition: define ememlog FileLog /var/log/fhem/emem-%Y.log emem:power.*
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $src in hash element at ./FHEM/98_SVG.pm line 775.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in string eq at ./FHEM/98_SVG.pm line 751.
2016.07.08 11:44:18 1: No Logdevice
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in string eq at ./FHEM/98_SVG.pm line 751.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in concatenation (.) or string at ./FHEM/98_SVG.pm line 763.
2016.07.08 11:44:18 3: Bad_Heizung_Clima_1.svg: space is not allowed in  definition: Display the power reported by the EM1010
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $src in hash element at ./FHEM/98_SVG.pm line 775.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $src in hash element at ./FHEM/98_SVG.pm line 778.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in string eq at ./FHEM/98_SVG.pm line 751.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in concatenation (.) or string at ./FHEM/98_SVG.pm line 763.
2016.07.08 11:44:18 3: Bad_Heizung_Clima_1.svg: space is not allowed in  definition: Corresponding FileLog definition:
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $src in hash element at ./FHEM/98_SVG.pm line 775.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in string eq at ./FHEM/98_SVG.pm line 751.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in concatenation (.) or string at ./FHEM/98_SVG.pm line 763.
2016.07.08 11:44:18 3: Bad_Heizung_Clima_1.svg: space is not allowed in  definition: define ememlog FileLog /var/log/fhem/emem-%Y.log emem:power.*
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $src in hash element at ./FHEM/98_SVG.pm line 775.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in string eq at ./FHEM/98_SVG.pm line 751.
2016.07.08 11:44:18 1: No Logdevice
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in string eq at ./FHEM/98_SVG.pm line 751.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in concatenation (.) or string at ./FHEM/98_SVG.pm line 763.
2016.07.08 11:44:18 3: SVG_FileLog_Dach_Heizung_Clima_1.svg: space is not allowed in  definition: Display the power reported by the EM1010
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $src in hash element at ./FHEM/98_SVG.pm line 775.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $src in hash element at ./FHEM/98_SVG.pm line 778.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in string eq at ./FHEM/98_SVG.pm line 751.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in concatenation (.) or string at ./FHEM/98_SVG.pm line 763.
2016.07.08 11:44:18 3: SVG_FileLog_Dach_Heizung_Clima_1.svg: space is not allowed in  definition: Corresponding FileLog definition:
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $src in hash element at ./FHEM/98_SVG.pm line 775.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in string eq at ./FHEM/98_SVG.pm line 751.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in concatenation (.) or string at ./FHEM/98_SVG.pm line 763.
2016.07.08 11:44:18 3: SVG_FileLog_Dach_Heizung_Clima_1.svg: space is not allowed in  definition: define ememlog FileLog /var/log/fhem/emem-%Y.log emem:power.*
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $src in hash element at ./FHEM/98_SVG.pm line 775.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in string eq at ./FHEM/98_SVG.pm line 751.
2016.07.08 11:44:18 1: No Logdevice
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in string eq at ./FHEM/98_SVG.pm line 751.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in concatenation (.) or string at ./FHEM/98_SVG.pm line 763.
2016.07.08 11:44:18 3: SVG_FileLog_stromsensor.haus_4.svg: space is not allowed in  definition: Display the power reported by the EM1010
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $src in hash element at ./FHEM/98_SVG.pm line 775.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $src in hash element at ./FHEM/98_SVG.pm line 778.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in string eq at ./FHEM/98_SVG.pm line 751.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in concatenation (.) or string at ./FHEM/98_SVG.pm line 763.
2016.07.08 11:44:18 3: SVG_FileLog_stromsensor.haus_4.svg: space is not allowed in  definition: Corresponding FileLog definition:
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $src in hash element at ./FHEM/98_SVG.pm line 775.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in string eq at ./FHEM/98_SVG.pm line 751.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in concatenation (.) or string at ./FHEM/98_SVG.pm line 763.
2016.07.08 11:44:18 3: SVG_FileLog_stromsensor.haus_4.svg: space is not allowed in  definition: define ememlog FileLog /var/log/fhem/emem-%Y.log emem:power.*
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $src in hash element at ./FHEM/98_SVG.pm line 775.
[Fri Jul  8 11:44:18 2016] fhem.pl: Use of uninitialized value $ldType in string eq at ./FHEM/98_SVG.pm line 751.

1x RaspberryPi 3, HMUART, HMLAN
4x HM-CC-RT-DN, 4x HM-Sec-SCo, 4x HM-TC-IT-WM-W-EU, 1 Jeelink, 4 Lacrosse Fühler, 2 LD382A
1x ZBox mit Kodibuntu, mehrere schaltbare Steckdosen

gs62

#40
Hallo,
ich arbeite jetzt auch schon ein paar Tage mit Telegram. Daher wollte ich die Anleitung von tiroso umsetzen. Leider kommt beim Anlegen des Notify die Meldung das die Variablen u.a $msgText nicht bekannt sind. Die 99_myUtilTelegram.pm ist angelegt.
Vielleicht ganz einfach zu lösen aber ich komme nicht weiter. Ich danke schon mal für die Hilfe.

Gunter
Hat sich erledigt, war halt doch blind. Beim kopieren und ändern hatte sich ein Syntaxfehler eingeschlichen. Jetzt funktioniert die Abfrage über Telegram.

ReinerZ

Hallo  ;D

habe gerade das Modul in Betrieb genommen, tiroso's Menü funktioniert perfekt. Habe auch schon einige Befehle angepasst.
Nur mit dem Befehlt     /okfhem - Direktbefehl      habe ich Schwierigkeiten ...

Wie habt ihr den umgesetzt ?

Beste Grüße

Reiner

Ascos

Hey,

ich möchte noch einmal meine Anfragevom 12. September erneuern.
Vielleicht hat ja jemand eine Idee, woran das Problem liegen könnte.

Viele grüße
Tino
1x RaspberryPi 3, HMUART, HMLAN
4x HM-CC-RT-DN, 4x HM-Sec-SCo, 4x HM-TC-IT-WM-W-EU, 1 Jeelink, 4 Lacrosse Fühler, 2 LD382A
1x ZBox mit Kodibuntu, mehrere schaltbare Steckdosen

Dersch

Hi, super Vorlagen hier!!! Ich versuche mich grade reinzufuchsen. Ist ja einiges zu tun damit das komfortabel läuft aber das wird über die Zeit schon.

Was ich überhaupt nicht verstehe ist was ich genau zu den SVG Plots verwenden muss. Ich habe es grade so und schon viel probiert:

if($msgText eq "/sendeplot"){
fhem_bot_response(
"/KinderzimmerPlot\n/BadezimmerPlot\n/WaeschekellerPlot\n/ServerSchrankPlot\n/WohnzimmerPlot\n/KuecheDeckePlot\n/KuecheMagicMirrorPlot",
"/hauptmenue",
);
}
if($msgText eq "/alleplots"){
fhem_bot_svgresponse(
["WaeschekellerPlot.svg","SVG Plot Wäschekeller"],
["BadTempFeuchte_1.svg","SVG Plot Badezimmer"],
["ServerSchrankPlot.svg","SVG Plot Serverschrank"],
["WohnzimmerPlot.svg","SVG Plot Wohnrzimmer"],


HIer ist ein List eines meiner Plots

Internals:
   DEF        FileLog_WzTempFeuchte:SVG_FileLog_WzTempFeuchte_1:CURRENT
   GPLOTFILE  SVG_FileLog_WzTempFeuchte_1
   LOGDEVICE  FileLog_WzTempFeuchte
   LOGFILE    CURRENT
   NAME       SVG_FileLog_WzTempFeuchte_1
   NR         116
   STATE      initialized
   TYPE       SVG
Attributes:
   room       Wohnzimmer


Wenn ich nun /WohnzimmerPlot eingebe passiert gar nichts. Wenn ich /allplots sende kommen zwar Bilder aber ohne Inhalt. Es steht nur "No Logdevice" drin.
Im /opt/fhem Ordner werden aber nummerierte Plot.png erstellt. 

Ich vermute ich sage ihm einfach den falschen Namen für die SVG aber ich weiß nun auch nicht was das Richtige ist da alle meine Versuche nicht zum Erfolg geführt haben :(

Grüße
Dirk

Markus80

Hammer coole Idee das ganze hier....

Werde am Ball bleiben und mir auch so ein Menü erstellen...

Telegram funzt schonmal perfekt

Gesendet von meinem C6903 mit Tapatalk