Autor Thema: chatBot (vordefinierte Dialoge) für Telegram  (Gelesen 16944 mal)

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1885
  • RTFM
chatBot (vordefinierte Dialoge) für Telegram
« am: 27 März 2016, 17:17:32 »
Hallo zusammen,

ich habe die Ostertage ein bisschen genutzt um einfache Dialoge mit FHEM über Telegram führen zu können. Realisiert habe ich dies mit einem DOIF. Bisher finde ich das noch relativ umständlich, aber es funktioniert.

Was brauchen wir dazu?
1. Ein Chat-Interface, bei mir Telegram.
2. Einen Filter auf meine Nachrichten, mein FHEM soll ja nicht mit Fremden reden ;)
define Michael_Telegram DOIF
([myTelegramBot:"msgText"] and
 [?myTelegramBot:msgPeerId] =~ /XXXXXXXX/
)(
  setreading Michael_Telegram msgText [myTelegramBot:msgText]
)

attr Michael_Telegram do always
attr Michael_Telegram event-on-update-reading msgText
3. Einen Primärdialog, der mir alle verfügbaren Dialoge auflistet
define heimdall_dialog DOIF
### heimdall ###
([Michael_Telegram:msgText:"(^\/(heimdall|start)$)"])(
  ({my @dialogs = devspec2array(".*_dialog:FILTER=disable!=1");;
    my $msg = "Ich kann folgendes für dich tun:\n\n";;

    if (@dialogs > 0 and defined($defs{$dialogs[0]})){
      foreach (@dialogs){
        my $dialog = (split(" ", InternalVal($_, "DEF", undef), 3))[1];;
        $msg .= "/".$dialog."\n"if!($dialog =~ /heimdall/i);;
      }
    }
    $msg .= "\n/heimdall\n";;

    fhem("set myTelegramBot message \@[myTelegramBot:msgPeerId] $msg");;
   }
  ),
  sleep 1; set .*_dialog initialize
)
### abbrechen ###
DOELSEIF
([Michael_Telegram:msgText:"(^\/abbrechen$)"])(
  set myTelegramBot message @[myTelegramBot:msgPeerId]
    Dialog abgebrochen.
    \n
    \n/heimdall
  ,
  sleep 1; set .*_dialog initialize
)
4.1 Den eigentlichen Dialog. Zu Anfang ein einstufiger Dialog, eine Statusabfrage welche Fenster noch geöffnet sind.
define openedWindows_dialog DOIF
### Fenster ###
([Michael_Telegram:msgText:"(^\/Fenster$)"])(
  ({my @windows = devspec2array('model=HM-SEC-SC(-\d)?:FILTER=state!=closed');;
    my $msg = "Es sind folgenede Fenster geöffnet:\n";;

    if (@windows > 0 and defined($defs{$windows[0]})){
      foreach (@windows){
        $msg .= "\n".AttrVal($_, "alias", $_);;
      }
    }else{
      $msg = "Es sind alle Fenster geschlossen.";;
    }
    $msg .= "\n
             \n/heimdall
            ";;
 
    fhem("set myTelegramBot message \@[myTelegramBot:msgPeerId] $msg");;
   }
  ),
  sleep 0.001; setreading openedWindows_dialog state send status
)
Anbei noch der Verlauf von dem Dialog:
(17:08:00) Michael:
  /start
(17:08:00) heimdall:
  Ich kann folgendes für dich tun:

  /Verlaufsdiagramm
  /BBQ
  /Fenster
  /Waschmaschine

  /heimdall
(17:08:06) Michael:
  /Fenster
(17:08:06) heimdall:
  Es sind folgenede Fenster geöffnet:

  2.5 Arbeitszimmer: Fenster 2
   
  /heimdall
4.2 Noch ein Dialog. Diesmal zweistufig um mir ein belibiges SVG zu senden
define SVG_dialog DOIF
### Verlaufsdiagramm ###
([Michael_Telegram:msgText:"(^\/Verlaufsdiagramm$)"])(
  {my @SVGS = devspec2array("TYPE=SVG");;
   my $msg = "Welches Verlaufsdiagramm möchtest du sehen?\n";;
   
   foreach (@SVGS){
     $msg .= "\n/".$_;;
   }
   $msg .= "\n
            \n/abbrechen
           ";;
   fhem("set myTelegramBot message \@[myTelegramBot:msgPeerId] $msg");;
  },
  sleep 0.001; setreading SVG_dialog state request SVG
)
  ### SVG ###
  DOELSEIF(
    [?SVG_dialog:state] eq "request SVG" and
    [Michael_Telegram:msgText:"(^\/(.+SVG|SVG.+))"]
  )(
    ({Plot2JPEG('[myTelegramBot:msgText:"(\/)(.*)":"$2"]', "/opt/fhem/log/SVG.jpg");;}),
    set myTelegramBot sendImage @[myTelegramBot:msgPee Das könnte man vllt mit dem userattr subType umgehen.rId] /opt/fhem/log/SVG.jpg,
    set myTelegramBot message @[myTelegramBot:msgPeerId] /heimdall,
    sleep 0.001; setreading SVG_dialog state send SVG
  )

Hier noch der Verlauf von dem Waschmaschinen Dialog (etwas Umfangreicher)
(17:11:02) Michael:
  /heimdall
(17:11:03) heimdall:
  Ich kann folgendes für dich tun:

  /Verlaufsdiagramm
  /BBQ
  /Fenster
  /Waschmaschine

  /heimdall
(17:11:06) Michael:
  /Waschmaschine
(17:11:06) heimdall:
  Waschmaschine: ausgeschaltet
  Modus: Manuell

  /einschalten
  /programmieren
  /Verlaufsdiagramm
 
  /abbrechen
(17:11:10) Michael:
  /programmieren
(17:11:10) heimdall:
  Wann soll die Wäsche fertig sein?
  Bitte Uhrzeit in HH:MM angeben.
  Aktuell ist 17:00 eingestellt.
   
  /bestaetigen

  /abbrechen
(17:11:13) Michael:
  /bestaetigen
(17:11:16) heimdall:
  Das Zeitprogramm wurde eingestellt.
  Die Wäsche wird voraussichtlich um 17:00 Uhr fertig sein.
  Bitte die Waschmaschine vorbereiten.
   
  /heimdall

Nun ein bisschen Erklärung:
1. Alle Namen der Dialoge müssen auf _dialog enden. (Das könnte man mit dem userattr subType umgehen.)
2.1. Der Dialog ist Folgendermaßen aufgebaut. Als erstes muss immer die Zeile
### <Keyword> ###
stehen. Damit werden die Dialoge vom Primärdialog ausgewertet.
2.2. Danach folgt die Zeile
([Michael_Telegram:msgText:"(^\/<Keyword>$)"])
Telegram ermöglicht es direkt eine Nachricht beim tippen auf eine Zeichenkette zu senden die mit einem "/" anfängt. So muss ich bei dem Dialog auch nie schreiben.
2.3. Anschließend folgt die Antwort die FHEM senden soll. Diese endet mit
sleep 0.001; setreading <dialog NAME> state <dialog STATE>
Dies könnte man auch über das cmdState Attribut machen, wird aber schnell unübersichtlich, besonders wenn man einen Dialog erweitert.
2.4. Falls benötigt folgen nun weitere Stufen des Dialogs. Diese beginnen auch wie die erste Stufe, haben aber zusätzliche eine Abfrage auf die vorherige Stufe
([?<dialog NAME>:state] eq "<dialog STATE> and
 [Michael_Telegram:msgText:"(^\/<Keyword>$)"]
)

Im Grunde ist das schon alles. Ich setze ans Ende jeder Stufe noch ein "/abbrechen" um den Dialog abzubrechen und bei der letzten Stufe ein "/heimdall" (Name meines Bots). Damit kann ich dann ohne schreiben einen neuen Dialog beginnen.

Was mich noch stört:
1. Keine einfache Syntax, wahrscheinlich wäre ein eigenes Modul am besten geeignet.
2. Nicht wirklich Mehrbenutzerfreundlich

Ich habe die Dialog während des schreibens noch angepasst und anschließend getestet. Trotzdem kann es sein, dass sich Fehler eingeschlichen haben.

Ich wünsche euch noch schöne Ostertage und freue mich über Anregungen und Unterstützung bei der Verbesserung um in Zukunft leichter mit FHEM Dialoge zu führen. Denn sich jedes Mal durch ein Webinterface zu klicken hat keinen hohen WAF;)

Grüße
igami
Pi3 mit fhem.cfg + DbLog/logProxy
FHEM Module: archetype, LuftdatenInfo, monitoring, Nmap
FHEM Module ToDo: alexaWebApp, DaikinD3nIU, DaikinHTTPinterface, TBot_Dialog
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Ferdy2003

  • New Member
  • *
  • Beiträge: 6
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #1 am: 09 Juni 2016, 10:29:41 »
Hallo zusammen,

mein "Chat"-Bot sieht wie folgt aus:

Harald:msgText:.* {

my $sender = ReadingsVal($NAME, "msgPeerId", 0);
my $nachricht = ReadingsVal($NAME, "msgText", "");

Log "Sender", "$sender";
Log "Nachricht", "$nachricht";

if ($nachricht =~ /Advent/) {
if ($nachricht =~ /an/) {
  fhem("set Harald message \@$sender Advent Advent ein Lichtlein brennt..");
fhem("set EG_WZ_STD_Advent on");
} else {
fhem("set Harald message \@$sender Da geht sie hin die Stimmung...");
    fhem("set EG_WZ_STD_Advent off");
}
} elsif ($nachricht =~ /Trockner/) {
if ($nachricht =~ /an/) {
  fhem("set Harald message \@$sender Trocker ist an!");
  fhem("set OG_BD_STD_Trockner on");
} else {
fhem("set Harald message \@$sender Trockner ist aus!.");
    fhem("set OG_BD_STD_Trockner off");
}
} elsif ($nachricht =~ /Fritz/) {
$nachricht =~ s/Fritz //;
  fhem("set FritzBox ring 610,611,612 say:$nachricht");
} elsif ($nachricht =~ /Sonos/) {
$nachricht =~ s/Sonos //;
  fhem("set Sonos_Bad speak 55 de $nachricht");
fhem("set Sonos_Esszimmer speak 55 de $nachricht");
} elsif ($nachricht =~ /Status/) {
  fhem("set Harald message \@$sender Uptime: [sysmon:uptime_text]");;
  fhem("set Harald message \@$sender Startzeit: [sysmon:starttime_text]");
  fhem("set Harald message \@$sender CPU-Temperatur: [sysmon:cpu_temp]°");
  fhem("set Harald message \@$sender RAM: [sysmon:ram]");
} elsif ($nachricht =~ /Müll/) {
  fhem("set Harald message \@$sender Gelber Sack: [MuellterminDummy:GelberSack] Tage");
  fhem("set Harald message \@$sender Papiermüll: [MuellterminDummy:GrueneTonne] Tage");
  fhem("set Harald message \@$sender Restmüll: [MuellterminDummy:Restmuell] Tage");
} else {
    fhem("set Harald message \@$sender Wat willst du den?");
}
}

Offline tiroso

  • Full Member
  • ***
  • Beiträge: 146
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #2 am: 17 Juni 2016, 14:18:22 »
Hallo,

Ich habe vor einiger Zeit auch ein Youtube Video gepostet und wurde gefragt ob ich den Code dazu auch einstellen kann.

https://www.youtube.com/watch?v=at6fRLsXfEs

Wie habe ich es gelöst?

Im wesentlichen über 3 Punkte
  • Anlegen und einstellen des TelegramBot Moduls (in meinem Beispiel TelegramBot)
  • Anlegen eines notify der TelegramBot überwacht
  • Eigene MyUtils Datei (in meinem Beispiel 99_myUtilsTelegram.pm

Zuerst das Notify:
TelegramBot:msgText:.* {
my $msgText = ReadingsVal("TelegramBot","msgText","");
my $msgPeerId = ReadingsVal("TelegramBot","msgPeerId","");
if($msgPeerId eq "DEINETELEGRAMID"){
tg_analyse($msgPeerId,$msgText);
}
}

Und hier die 99_myUtilsTelegram.pm:
##############################################
# 99_myUtilsTelegramMessenger.pm
#


package main;

use strict;
use warnings;
use POSIX;

sub
myUtilsTelegram_Initialize($$)
{
my ($hash) = @_;
}
sub tg_analyse($$){
my ($msgPeerId, $msgText) = @_;
$msgText = lc $msgText;
Log "TelegramBot", "Sender: $msgPeerId";
Log "TelegramBot", "Text: $msgText";
if($msgText eq "/start"){
fhem "set TelegramBot message \@$msgPeerId Hallo
ich gebe dir die Möglichkeit mit FHEM zu kommunizieren
Mit /hilfe bekommst du eine Liste derzeitigen Befehle";
}
if($msgText eq "/hilfe" || $msgText eq "/hauptmenue"){
fhem "set TelegramBot message \@$msgPeerId Hier sind alle Befehle:
--Generell
/hilfe - Hilfetext
/hauptmenue -Hilfetext
/okfhem - Direktbefehl
/system
--Umwelt
/wetterjetzt
/wetterheute
/wettermorgen
/wettervorhersage
--Media
/sonosstop - Stoppe SonosBoxen
--Heizung
/heizung - Heizung Info
--Sonstiges
/sendeplot
/batterie
/TurStatus
/muelltonne";
}
if($msgText eq "/sonnenaufgang"){
my $temp = sunrise("REAL");
fhem "set TelegramBot message \@$msgPeerId Sonnenaufgang:
$temp";
fhem "set TelegramBot message \@$msgPeerId /hauptmenue";
}
if($msgText eq "/turstatus"){
if(ReadingsVal('FL.TS.Tuersensor','state','0') eq "open"){
fhem "set TelegramBot message \@$msgPeerId Die Haustüre ist offen";
}
if(ReadingsVal('FL.TS.Tuersensor','state','0') eq "closed"){
fhem "set TelegramBot message \@$msgPeerId Die Haustüre ist geschlossen";
}
fhem "set TelegramBot message \@$msgPeerId /hauptmenue";
}
    if($msgText eq "/updatecheck"){
my $temp = fhem "update check";
fhem "set TelegramBot message \@$msgPeerId UpdateCheck:
$temp";
fhem "set TelegramBot message \@$msgPeerId /system
/hauptmenue";
}
if($msgText eq "/update"){
my $temp = fhem "update";
fhem "set TelegramBot message \@$msgPeerId Update:
$temp";
fhem "set TelegramBot message \@$msgPeerId /system
/hauptmenue";
}
if($msgText eq "/fhemneustar"){
#ACHTUNG - NOCH NICHT NUTZEN. Der Neustart wird gespeichert und FHEM startet immer wieder neu!!!
fhem "set TelegramBot message \@$msgPeerId FHEM wird nun neu gestartet.
Sollte dieser Vorgang erfolgreich sein wird FHEM sich per Telegram melden.";
#my $temp = fhem "shutdown restart";
}
if($msgText eq "/reloadtelegramutils"){
fhem "set TelegramBot message \@$msgPeerId Die Datei 99_myUtilsTelegram.pm wird neu geladen.";
my $temp = fhem "reload 99_myUtilsTelegram.pm";
fhem "set TelegramBot message \@$msgPeerId /system
/hauptmenue";
}
if($msgText eq "/sonosstop"){
fhem "set Sonos StopAll";
fhem "set TelegramBot message \@$msgPeerId Alle Sonos-Boxen wurden gestoppt";
}
if($msgText eq "/sonnenuntergang"){
my $temp = sunset("REAL");
fhem "set TelegramBot message \@$msgPeerId Sonnenuntergang:
$temp";
fhem "set TelegramBot message \@$msgPeerId /hauptmenue";
}
if($msgText eq "/system"){
fhem "set TelegramBot message \@$msgPeerId /updatecheck
/update
/reloadTelegramUtils
/fhemneustart
/status";
fhem "set TelegramBot message \@$msgPeerId /hauptmenue";
}
if($msgText eq "/status"){
fhem "set TelegramBot message \@$msgPeerId FHEM gestartet:
".ReadingsVal('sysmon','fhemstarttime_text','0')."
FHEM läuft seit:
".ReadingsVal('sysmon','fhemuptime_text','0')."

System gestartet:
".ReadingsVal('sysmon','starttime_text','0')."
System läuft seit:
".ReadingsVal('sysmon','uptime_text','0')."
Erreichbar unter:
".ReadingsVal('sysmon','eth0_ip','0')."

Power:
".ReadingsVal('sysmon','power_ac_text','0');
fhem "set TelegramBot message \@$msgPeerId /system
/hauptmenue";
}
if($msgText eq "/wetterjetzt"){
fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/www/images/default/weather/".ReadingsVal('XX.XX.YahooWetter','icon','0').".png Das Wetter jetzt: ".ReadingsVal('XX.XX.YahooWetter','day_of_week','0')." den ".ReadingsVal('XX.XX.YahooWetter','fc1_date','0')."
".ReadingsVal('XX.XX.YahooWetter','condition','0')."
".ReadingsVal('XX.XX.YahooWetter','temp_c','0')."C° ".ReadingsVal('XX.XX.YahooWetter','humidity','0')."%
".ReadingsVal('XX.XX.YahooWetter','wind_condition','0');
fhem "set TelegramBot message \@$msgPeerId /hauptmenue";
}
if($msgText eq "/wetterheute"){
fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/www/images/default/weather/".ReadingsVal('XX.XX.YahooWetter','fc1_icon','0').".png Das Wetter heute: ".ReadingsVal('XX.XX.YahooWetter','fc1_day_of_week','0')." den ".ReadingsVal('XX.XX.YahooWetter','fc1_date','0')."
".ReadingsVal('XX.XX.YahooWetter','fc1_condition','0')."
Min ".ReadingsVal('XX.XX.YahooWetter','fc1_low_c','0')."C° Max".ReadingsVal('XX.XX.YahooWetter','fc1_high_c','0')."C°";
fhem "set TelegramBot message \@$msgPeerId /hauptmenue";
}
if($msgText eq "/wettermorgen"){
fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/www/images/default/weather/".ReadingsVal('XX.XX.YahooWetter','fc2_icon','0').".png Das Wetter morgen: ".ReadingsVal('XX.XX.YahooWetter','fc2_day_of_week','0')." den ".ReadingsVal('XX.XX.YahooWetter','fc2_date','0')."
".ReadingsVal('XX.XX.YahooWetter','fc2_condition','0')."
Min ".ReadingsVal('XX.XX.YahooWetter','fc2_low_c','0')."C° Max".ReadingsVal('XX.XX.YahooWetter','fc2_high_c','0')."C°";
fhem "set TelegramBot message \@$msgPeerId /hauptmenue";
}
if($msgText eq "/sendeplot"){
fhem "set TelegramBot message \@$msgPeerId /KinderzimmerPlot
/KleinesBadezimmerPlot
/MittleresBadezimmerPlot
/EGPlot
/AlleHeizungPlot
/SpeedtestPlot";
fhem "set TelegramBot message \@$msgPeerId /hauptmenue";
}
if($msgText eq "/kleinesbadezimmerplot"){
my $filename = 'plot.png';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
print $fh plotAsPng("KBZ.XX.Heizung.svg");
close $fh;
fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/plot.png SVG Plot Kleines Badezimmer";
fhem "set TelegramBot message \@$msgPeerId /sendeplot
/hauptmenue";
}
if($msgText eq "/speedtestplot"){
my $filename = 'plot.png';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
print $fh plotAsPng("XX.XX.Speedtest.svg");
close $fh;
fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/plot.png SVG Plot Speedtest";
fhem "set TelegramBot message \@$msgPeerId /sendeplot
/hauptmenue";
}
if($msgText eq "/kinderzimmerplot"){
my $filename = 'plot.png';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
print $fh plotAsPng("KZ.XX.Heizung.svg");
close $fh;
fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/plot.png SVG Plot Kinderzimmer";
fhem "set TelegramBot message \@$msgPeerId /sendeplot
/hauptmenue";
}
if($msgText eq "/mittleresbadezimmerplot"){
my $filename = 'plot.png';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
print $fh plotAsPng("MBZ.XX.Heizung.svg");
close $fh;
fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/plot.png SVG Plot Mittleres Badezimmer";
fhem "set TelegramBot message \@$msgPeerId /sendeplot
/hauptmenue";
}
if($msgText eq "/egplot"){
my $filename = 'plot.png';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
print $fh plotAsPng("EG.XX.Heizung.svg");
close $fh;
fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/plot.png SVG Plot Erdgeschoss";
fhem "set TelegramBot message \@$msgPeerId /sendeplot
/hauptmenue";
}
if($msgText eq "/alleheizungplot"){
my $filename = 'plot1.png';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
print $fh plotAsPng("EG.XX.Heizung.svg");
close $fh;
my $filename = 'plot2.png';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
print $fh plotAsPng("KBZ.XX.Heizung.svg");
close $fh;
my $filename = 'plot3.png';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
print $fh plotAsPng("MBZ.XX.Heizung.svg");
close $fh;
my $filename = 'plot4.png';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
print $fh plotAsPng("KZ.XX.Heizung.svg");
close $fh;
fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/plot1.png 'SVG Plot Erdgeschoss'";
fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/plot2.png SVG Plot Kleines Badezimmer";
fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/plot3.png SVG Plot Mittleres Badezimmer";
fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/plot4.png SVG Plot Kinderzimmer";
fhem "set TelegramBot message \@$msgPeerId /sendeplot
/hauptmenue";
}
if($msgText eq "/wettervorhersage"){
fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/www/images/default/weather/".ReadingsVal('XX.XX.YahooWetter','fc2_icon','0').".png Das Wetter am: ".ReadingsVal('XX.XX.YahooWetter','fc2_day_of_week','0')." den ".ReadingsVal('XX.XX.YahooWetter','fc2_date','0')."
".ReadingsVal('XX.XX.YahooWetter','fc2_condition','0')."
Min ".ReadingsVal('XX.XX.YahooWetter','fc2_low_c','0')."C° Max".ReadingsVal('XX.XX.YahooWetter','fc2_high_c','0')."C°";

fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/www/images/default/weather/".ReadingsVal('XX.XX.YahooWetter','fc3_icon','0').".png Das Wetter am: ".ReadingsVal('XX.XX.YahooWetter','fc3_day_of_week','0')." den ".ReadingsVal('XX.XX.YahooWetter','fc3_date','0')."
".ReadingsVal('XX.XX.YahooWetter','fc3_condition','0')."
Min ".ReadingsVal('XX.XX.YahooWetter','fc3_low_c','0')."C° Max".ReadingsVal('XX.XX.YahooWetter','fc3_high_c','0')."C°";

fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/www/images/default/weather/".ReadingsVal('XX.XX.YahooWetter','fc4_icon','0').".png Das Wetter am: ".ReadingsVal('XX.XX.YahooWetter','fc4_day_of_week','0')." den ".ReadingsVal('XX.XX.YahooWetter','fc4_date','0')."
".ReadingsVal('XX.XX.YahooWetter','fc4_condition','0')."
Min ".ReadingsVal('XX.XX.YahooWetter','fc4_low_c','0')."C° Max".ReadingsVal('XX.XX.YahooWetter','fc4_high_c','0')."C°";

fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/www/images/default/weather/".ReadingsVal('XX.XX.YahooWetter','fc5_icon','0').".png Das Wetter am: ".ReadingsVal('XX.XX.YahooWetter','fc5_day_of_week','0')." den ".ReadingsVal('XX.XX.YahooWetter','fc5_date','0')."
".ReadingsVal('XX.XX.YahooWetter','fc5_condition','0')."
Min ".ReadingsVal('XX.XX.YahooWetter','fc5_low_c','0')."C° Max".ReadingsVal('XX.XX.YahooWetter','fc5_high_c','0')."C°";

fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/www/images/default/weather/".ReadingsVal('XX.XX.YahooWetter','fc6_icon','0').".png Das Wetter am: ".ReadingsVal('XX.XX.YahooWetter','fc6_day_of_week','0')." den ".ReadingsVal('XX.XX.YahooWetter','fc6_date','0')."
".ReadingsVal('XX.XX.YahooWetter','fc6_condition','0')."
Min ".ReadingsVal('XX.XX.YahooWetter','fc6_low_c','0')."C° Max".ReadingsVal('XX.XX.YahooWetter','fc6_high_c','0')."C°";

fhem "set TelegramBot sendImage \@$msgPeerId /opt/fhem/www/images/default/weather/".ReadingsVal('XX.XX.YahooWetter','fc7_icon','0').".png Das Wetter am: ".ReadingsVal('XX.XX.YahooWetter','fc7_day_of_week','0')." den ".ReadingsVal('XX.XX.YahooWetter','fc7_date','0')."
".ReadingsVal('XX.XX.YahooWetter','fc7_condition','0')."
Min ".ReadingsVal('XX.XX.YahooWetter','fc7_low_c','0')."C° Max".ReadingsVal('XX.XX.YahooWetter','fc7_high_c','0')."C°";
fhem "set TelegramBot message \@$msgPeerId /hauptmenue";
}
if($msgText eq "/heizung"){

fhem "set TelegramBot message \@$msgPeerId Erdgeschoss:
Ist Temperatur: " . ReadingsVal('KU.TH.Wandthermostat','measured-temp','0') . " C°
SOLL Temperatur: " . ReadingsVal('KU.TH.Wandthermostat','desired-temp','0') . " C°
Küche Ventil: " . ReadingsVal('KU.TH.Heizung','actuator','0') . " %
WZlinks Ventil: " . ReadingsVal('WZ.TH.Heizunglinks','actuator','0') . " %
WZrechts Ventil: " . ReadingsVal('WZ.TH.Heizungrechts','actuator','0') . " %";

fhem "set TelegramBot message \@$msgPeerId Kinderzimmer:
Ist Temperatur: " . ReadingsVal('KZ.TH.Heizung','measured-temp','0') . " C°
SOLL Temperatur: " . ReadingsVal('KZ.TH.Heizung','desired-temp','0') . " C°
Ventil: " . ReadingsVal('KZ.TH.Heizung','actuator','0') . " %";

fhem "set TelegramBot message \@$msgPeerId Kleines Badezimmer:
Ist Temperatur: " . ReadingsVal('KBZ.TH.Heizung','measured-temp','0') . " C°
SOLL Temperatur: " . ReadingsVal('KBZ.TH.Heizung','desired-temp','0') . " C°
Ventil: " . ReadingsVal('KBZ.TH.Heizung','actuator','0') . " %";

fhem "set TelegramBot message \@$msgPeerId Mittleres Badezimmer:
Ist Temperatur: " . ReadingsVal('MBZ.TH.Heizung','measured-temp','0') . " C°
SOLL Temperatur: " . ReadingsVal('MBZ.TH.Heizung','desired-temp','0') . " C°
Ventil: " . ReadingsVal('MBZ.TH.Heizung','actuator','0') . " %";

fhem "set TelegramBot message \@$msgPeerId /hauptmenue";
}
if($msgText eq "/batterie"){
my $temp = fhem "list NAME=.*:FILTER=battery=.* battery";
fhem "set TelegramBot message \@$msgPeerId $temp";

fhem "set TelegramBot message \@$msgPeerId /hauptmenue";
}
if($msgText eq "/muelltonne"){

my $terminanzahl = ReadingsVal("MuellKalenderView","c-term",0);
$terminanzahl += 0;
if ($terminanzahl > 10){ $terminanzahl = 10;}
my $temp = "";
for (my $i=1; $i <= $terminanzahl; $i++) {
$i = sprintf ('%03d', $i);

$temp = $temp . ReadingsVal('MuellKalenderView','t_' . $i . '_bdate','01.01.2016'). ":
" . ReadingsVal('MuellKalenderView','t_' . $i . '_summary','01.01.2016') . "

";
}
$temp =~ s/RSAG\s//gio;
$temp =~ s/oder\s-sack\s//gio;
fhem("set TelegramBot message \@msgPeerId " . $temp);

fhem "set TelegramBot message \@$msgPeerId /hauptmenue";
}
}


1;

Installiert habe ich FHEM unter den StandartPfaden wie es in den ganzen Tutorials steht /opt/fhem/
Ich hoffe ihr könnt etwas damit anfangen.

Gruß
Gefällt mir Gefällt mir x 7 Hilfreich Hilfreich x 2 Liste anzeigen

Offline Floca

  • Jr. Member
  • **
  • Beiträge: 56
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #3 am: 18 Juni 2016, 00:01:01 »
Ich hatte dich auf Youtube gefragt ;)

Vielen Dank für die Daten  ;D

Offline tiroso

  • Full Member
  • ***
  • Beiträge: 146
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #4 am: 18 Juni 2016, 10:39:49 »
Hat es denn geklappt?

Gesendet von meinem SM-G900F mit Tapatalk


Offline Puschel74

  • Hero Member
  • *****
  • Beiträge: 9787
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #5 am: 19 Juni 2016, 21:32:01 »
Hallo tiroso,

danke für deine Vorlage  ;)
Als Inspiration war dein Code einwandfrei aber ich erlaube mir mal den einen onder anderen Punkt anzumerken - bitte nicht falsch verstehen.

Da du in der sub auf das Device "TelegramBot" zurückgreifst habe ich mir erlaubt den Aufruf der sub dahingehend zu ändern:
tg_analyse($NAME,$msgPeerId,$msgText);Nun wird auch das Device - bei dir TelegramBot (bei mir FHEMBOT bei anderen evtl. anders benannt) mitübergeben.

In der sub muss dann natürlich auch
sub tg_analyse($$$){
  my ($Name, $msgPeerId, $msgText) = @_;
geändert werden - aus Bequemlichkeit mache ich aus $NAME (was innerhalb von FHEM ausgewertet werden kann aber nicht in Perl) $Name
Sämtliche Angaben die sich bei dir auf TelgramBot beziehen können dann recht einfach durch $Name ersetzt werden - Notepad++ bringt dafür ja Suchen und Ersetzen mit.

Kurz und knapp und auch als Code - mein Device heisst FHEMBOT.
Das notify sieht im DEF so aus:
FHEMBOT:msgText:.* {
  my $msgText = ReadingsVal($NAME,"msgText","");
  my $msgPeerId = ReadingsVal($NAME,"msgPeerId","");
  if($msgPeerId eq "meinePEERID"){
    tg_analyse($NAME,$msgPeerId,$msgText);
  }
}
Und die Auswertung in der sub sieht dann so aus - erstmal nur für /start und /hilfe (den Rest muss ich noch für mich passend umbauen):
sub tg_analyse($$$){
  my ($Name, $msgPeerId, $msgText) = @_;
  $msgText = lc $msgText;
#  Log(0,"$Name - Sender: $msgPeerId");
#  Log(0,"Text: $msgText");
  if($msgText eq "/start"){
fhem "set $Name message \@$msgPeerId Hallo
ich gebe dir die Möglichkeit mit FHEM zu kommunizieren
Mit /hilfe bekommst du eine Liste der momentan möglichen Befehle";
  }
  if($msgText eq "/hilfe" || $msgText eq "/hauptmenue"){
fhem "set $Name message \@$msgPeerId Hier sind alle Befehle:
--Generell
/hilfe - Hilfetext
/hauptmenue -Hilfetext
/okfhem - Direktbefehl
/system
--Umwelt
/wetterjetzt
/wetterheute
/wettermorgen
/wettervorhersage
--Media
/sonosstop - Stoppe SonosBoxen
--Heizung
/heizung - Heizung Info
--Sonstiges
/sendeplot
/batterie
/TurStatus
/muelltonne";
  }
}
Log-Einträge habe ich gern drinnen zum schauen was ankommt um dann passend weiterprogrammieren zu können - ich mach das ja auch nur in meiner Freizeit und hab nicht immer alles im Kopf (aber ich weiß wo ich nachschauen kann)  ;D

Wie geschrieben - meine Anmerkung bitte nur als konstruktive Kritik verstehen und nicht als destruktive  ;)

Daher auf alle Fälle einen grünen Daumen nach oben (wenn es sowas geben würde).
Cubietruck als Server mit DBLog
CUNO für FHT80B und FS20, HM-Lan, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1885
  • RTFM
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #6 am: 20 Juni 2016, 20:23:50 »
Hat sich von euch schon mal wer Gedanken gemacht wie man ein eigenes Modul für Dialoge schreiben könnte?
Ich würde es ja Begrüßen die Dialoge zu vereinzeln um nicht eine unübersichtliche 99_myXXX.pm zu haben. Allerdings fällt mir noch keine vernünftige Syntax ein.
Eventuell sowas:
[<keyword>:<regexp>:<description>:<list>](
  response(
    "Was auch immer er sagen soll",
    ListAllKeywords
  ),
  <fhem commands>,
  <{perl commands}>,
  [<keyword>:<regexp>:<description>:<list>](),
  [<keyword>:<regexp>:<description>:<list>]()
)
<list> soll 1 oder 0 sein um autmatisch über ListAllKeywords aufgelistet zu werden, oder auch nicht wenn es sich um eine regexp handelt. Z.B.
...
response(
  "Wann soll ich dich wecken?",
  "Bitte Uhrzeit in HH:MM angeben"
),
[Uhrzeit:(\d\d):(\d\d)::0](
  "Ich werde dich um $0:$1 Uhr wecken."
  set Wecker $0:$1
)
da ich momentan leider nur wenig Zeit für fhem habe komme ich da auch nicht weiter. Wahrscheinlich gibt es ja ähnliche Aufbauten schon für IRC/Jabber bots

Pi3 mit fhem.cfg + DbLog/logProxy
FHEM Module: archetype, LuftdatenInfo, monitoring, Nmap
FHEM Module ToDo: alexaWebApp, DaikinD3nIU, DaikinHTTPinterface, TBot_Dialog
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.

Offline tiroso

  • Full Member
  • ***
  • Beiträge: 146
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #7 am: 21 Juni 2016, 08:37:38 »
Ach quatsch. Ich versteh das doch nicht falsch, sondern nehme die Kritik gerne mit. Mache ich ja ebenfalls in meiner Freizeit und von daher passt das schon ganz gut.

Wieso gibt's du denn den Device Namen mit? Wofür brauchst du den noch? hat sich erledigt. Habs gelesen ;)

Ich werde mir mal Gedanken machen ob man so ein Modul nicht ausbauen könnte.
« Letzte Änderung: 21 Juni 2016, 08:40:59 von tiroso »

Offline Floca

  • Jr. Member
  • **
  • Beiträge: 56
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #8 am: 21 Juni 2016, 11:36:03 »
Hi tiroso, sicher hast du dir gedacht "da fragt er schon und nun lässt er nichts mehr von sich hören"...

Bin erst gestern dazu gekommen den Code in mein System einzuschachteln. Ich muss sagen du hast da großartige arbeit geleistet... Ich finde die Utils dafür übrigens sehr gut, so ist ein notify nicht vollgestopft bis oben hin.

Hab deine "Vorlage" schon kräftig erweitert und alles funktioniert super.


Ich komme gut mit der Utils klar, aber unerfahrene nutzen dann besser die fertige /syntax im bot Modul. Lest mal im Wiki das geht pber ein Attribut wenn man nicht zu viel hat.

Für mich jedenfalls ist die Lösung von Tiroso absolut perfekt...

Offline SirUli

  • Full Member
  • ***
  • Beiträge: 122
    • wolf-u.li
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #9 am: 21 Juni 2016, 13:04:40 »
Hi zusammen,

weil ich das grad hier sehe: Ich baue gerade einen Chatbot (so in etwa wie bei verschiedenen Webseiten) für genau diesen Zweck.

Ich lade das mal heute abend hoch, ist dann relativ einfach Dialoge zu bauen. Habe ich im Einsatz, um Meldungen auszugeben (die dann Dialoge zur Folge haben - "Wassermelder Küche sagt: "WASSER", willst du diesen Alarm für 24 Stunden ignorieren?) und mein FHEM zu befragen ("Temperatur Büro" als Beispiel).

Cheers,
Uli
FHEM auf RaspberryPI mit SCC 868Mhz (MAX!), SCC 868Mhz (SlowRF), SCC 433Mhz, Homematic - Verschiedene Netzwerk-Devices (Hue/Onkyo/LG)

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1885
  • RTFM
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #10 am: 21 Juni 2016, 20:52:30 »
Ich lade das mal heute abend hoch, ist dann relativ einfach Dialoge zu bauen.
Da bin ich ja mal gespannt :)
Pi3 mit fhem.cfg + DbLog/logProxy
FHEM Module: archetype, LuftdatenInfo, monitoring, Nmap
FHEM Module ToDo: alexaWebApp, DaikinD3nIU, DaikinHTTPinterface, TBot_Dialog
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.

Offline SirUli

  • Full Member
  • ***
  • Beiträge: 122
    • wolf-u.li
FHEM auf RaspberryPI mit SCC 868Mhz (MAX!), SCC 868Mhz (SlowRF), SCC 433Mhz, Homematic - Verschiedene Netzwerk-Devices (Hue/Onkyo/LG)

Offline tiroso

  • Full Member
  • ***
  • Beiträge: 146
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #12 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); }

In der anschließenden 99_myUtilsTelegram.pm kommt dann folgender Code rein:Ich habe mir die Freiheit genommen ein paar Beispiele drin zu lassen. Wer mein kompletten Code haben will inkl aller Keywords kann gerne Bescheid geben
##################################################
# 99_myUtilsTelegramMessenger.pm
#
##################################################
# Ein ChatBot mit dem sich auch FHEM steuern
# lässt. Die Keywords lassen sich selber fest-
# legen.
#
# Bitte dran denken im TelegramBot Device die
# userattr:
# -FhemBot_ReceiveRestrictedPeer (1/1)
# -FhemBot_ReceiveCustomPeer (Custom Peers)
# zu setzen.
# Die Sicherheitsbestimmungen sehen folgendermaßen
# aus:
# -Sollte FhemBot_ReceiveRestrictedPeer gesetzt
#  sein, aber kein RestrictedPeer angegeben ist
#  werden die Befehle NICHT angenommen
# -Sollte FhemBot_ReceiveRestrictedPeer NICHT
#  gesetzt sein, und ebenfalls keine
#  FhemBot_ReceiveCustomPeer so werden die Befehle
#  ebenfalls NICHT angenommen.
#
# Innerhalb der Kontrolle eines Keywords werden
# folgende Befehle unterstützt:
#
# --Rückantworten an die ankommende PeerID
#   Es können beliebig viele Texte gesendet werden
# fhem_bot_response(
# "Textbox 1\nMit #ein bisschen Text",
# "Textbox 2",
# "Textbox 3\nWieder mit ein bisschen Test\nAber noch einer Zeile",
# );
#
# --Rückantworten mit Bild an die ankommende PeerID
#   Es können beliebig viele Bilder gesendet werden
# fhem_bot_imgresponse(
# "/opt/fhem/bild1.png Das ist ein Testbild",
# "/opt/fhem/bild2.png Das ist ein Testbild von eine anderem Bild\nAber sonst alles gut",
# "/opt/fhem/bild1.png Wieder das erste Bild",
# );
#
# --SVG Plot als Bild an die ankommende PeerID
#   Es können beliebig viele SVG Plots gesendet werden
# fhem_bot_svgresponse(
# ["EG.XX.Heizung.svg","SVG Plot Beschreibung Erdgeschoss"],
# ["KBZ.XX.Heizung.svg","SVG Plot Beschreibung Kleines Badezimmer"],
# ["MBZ.XX.Heizung.svg","SVG Plot Beschreibung Mittleres Badezimmer"],
# );
#
# --FHEM Befehle die ausgeführt werden können
#   Es können beliebig viele Befehle abgesetzt werden
# fhem_bot_fhem_cmd(
# "set lampe1 on",
# "set fernseher off",
# "define temp_timer at +00:00:10 set lampe1 on",
# );
 
 


package main;

use strict;
use warnings;
use POSIX;

my $msgPeerId = "";
my $TelegramBot_Device = "";

sub
myUtilsTelegram_Initialize($$)
{
my ($hash) = @_;
}
sub fhem_bot($){
($TelegramBot_Device) = @_;

if (fhem_bot_check_permission($TelegramBot_Device)){
my $msgText = lc ReadingsVal($TelegramBot_Device,"msgText","");
$msgPeerId = ReadingsVal($TelegramBot_Device,"msgPeerId","");
my $msgPeer = ReadingsVal($TelegramBot_Device,"msgPeer","");
##################################################
#
# Ab hier können die Keywords eingetragen werden
#
##################################################
if($msgText eq "/start"){
fhem_bot_response(
"Hallo\nich gebe dir die Möglichkeit mit FHEM zu kommunizieren\nMit /hilfe bekommst du eine Liste derzeitigen Befehle"
);
}
if($msgText eq "/hilfe" || $msgText eq "/hauptmenue"){
fhem_bot_response(
"Hier sind alle Befehle:",
"--Generell\n/hilfe - Hilfetext\n/hauptmenue -Hilfetext\n/okfhem - Direktbefehl\n/system",
"--Umwelt\n/wetterjetzt\n/wetterheute\n/wettermorgen\n/wettervorhersage",
"--Media\n/sonosstop - Stoppe SonosBoxen","--Heizung\n/heizung - Heizung Info",
"--Sonstiges\n/sendeplot\n/batterie\n/TurStatus\n/muelltonne",
);
}
if($msgText eq "/sonnenaufgang"){
fhem_bot_response(
"Sonnenaufgang:\n" . sunrise("REAL"),
"/hauptmenue",
);
}
if($msgText eq "/updatecheck"){
fhem_bot_response(
"UpdateCheck:\n" . fhem "update check",
"/hauptmenue",
);
}
if($msgText eq "/sonosstop"){
fhem_bot_fhem_cmd(
"set Sonos StopAll",
);
fhem_bot_response(
"Alle Sonos Boxen wurden gestoppt.\n/hauptmenue",
);
}
if($msgText eq "/sonnenuntergang"){
fhem_bot_response(
"Sonnenaufgang:\n" . sunset("REAL"),
"/hauptmenue",
);
}
if($msgText eq "/system"){
fhem_bot_response(
"/updatecheck\n/update\n/status",
"/hauptmenue",
);
}
if($msgText eq "/status"){
fhem_bot_response(
"FHEM gestartet:\n".ReadingsVal('sysmon','fhemstarttime_text','0')."\nFHEM läuft seit:\n".ReadingsVal('sysmon','fhemuptime_text','0')."\n\nSystem gestartet:\n".ReadingsVal('sysmon','starttime_text','0')."\nSystem läuft seit:\n".ReadingsVal('sysmon','uptime_text','0')."\nErreichbar unter:\n".ReadingsVal('sysmon','eth0_ip','0')."\n\nPower:\n".ReadingsVal('sysmon','power_ac_text','0'),
"/system\n/hauptmenue",
);
}
if($msgText eq "/sendeplot"){
fhem_bot_response(
"/KinderzimmerPlot\n/KleinesBadezimmerPlot\n/MittleresBadezimmerPlot\n/EGPlot\n/AlleHeizungPlot\n/SpeedtestPlot",
"/hauptmenue",
);
}
if($msgText eq "/alleheizungplot"){
fhem_bot_svgresponse(
["EG.XX.Heizung.svg","SVG Plot Erdgeschoss"],
["KBZ.XX.Heizung.svg","SVG Plot Kleines Badezimmer"],
["MBZ.XX.Heizung.svg","SVG Plot Mittleres Badezimmer"],
["KZ.XX.Heizung.svg","SVG Plot Kinderzimmer"],
);
fhem_bot_response(
"/sendeplot\n/hauptmenue",
);
}
if($msgText eq "/heizung"){
fhem_bot_response(
"Erdgeschoss:\nIst Temperatur: " . ReadingsVal('KU.TH.Wandthermostat','measured-temp','0') . " C°\nSOLL Temperatur: " . ReadingsVal('KU.TH.Wandthermostat','desired-temp','0') . " C°\nKüche Ventil: " . ReadingsVal('KU.TH.Heizung','actuator','0') . " %\nWZlinks Ventil: " . ReadingsVal('WZ.TH.Heizunglinks','actuator','0') . " %\nWZrechts Ventil: " . ReadingsVal('WZ.TH.Heizungrechts','actuator','0') . " %",
"Kinderzimmer:\nIst Temperatur: " . ReadingsVal('KZ.TH.Heizung','measured-temp','0') . " C°\nSOLL Temperatur: " . ReadingsVal('KZ.TH.Heizung','desired-temp','0') . " C°\nVentil: " . ReadingsVal('KZ.TH.Heizung','actuator','0') . " %",
"Kleines Badezimmer:\nIst Temperatur: " . ReadingsVal('KBZ.TH.Heizung','measured-temp','0') . " C°\nSOLL Temperatur: " . ReadingsVal('KBZ.TH.Heizung','desired-temp','0') . " C°\nVentil: " . ReadingsVal('KBZ.TH.Heizung','actuator','0') . " %",
"Mittleres Badezimmer:\nIst Temperatur: " . ReadingsVal('MBZ.TH.Heizung','measured-temp','0') . " C°\nSOLL Temperatur: " . ReadingsVal('MBZ.TH.Heizung','desired-temp','0') . " C°\nVentil: " . ReadingsVal('MBZ.TH.Heizung','actuator','0') . " %",
"/hauptmenue",
);
}
if($msgText eq "/batterie"){
fhem_bot_response(
fhem "list NAME=.*:FILTER=battery=.* battery",
"/hauptmenue",
);
}
##################################################
#
# Bis hier können die Keywords eingetragen werden
#
##################################################
}
}

sub fhem_bot_check_permission{
($TelegramBot_Device) = @_;

if (AttrVal($TelegramBot_Device,'FhemBot_ReceiveRestrictedPeer','0')){
return 0 if ( AttrVal($TelegramBot_Device,'cmdRestrictedPeer','') eq '' );

$msgPeerId = ReadingsVal($TelegramBot_Device,"msgPeerId","");
my @peers = split( " ", AttrVal($TelegramBot_Device,'cmdRestrictedPeer','')); 
foreach my $checkpeer (@peers) {
return 1 if ( $checkpeer eq $msgPeerId );
}
return 0;
}else{
return 0 if ( AttrVal($TelegramBot_Device,'FhemBot_ReceiveCustomPeer','') eq '' );

$msgPeerId = ReadingsVal($TelegramBot_Device,"msgPeerId","");
my @peers = split( " ", AttrVal($TelegramBot_Device,'FhemBot_ReceiveCustomPeer','')); 
foreach my $checkpeer (@peers) {
return 1 if ( $checkpeer eq $msgPeerId );
}
return 0;
}
}
sub fhem_bot_response{
foreach my $responsetext (@_) {
fhem "set $TelegramBot_Device message \@$msgPeerId $responsetext";
}
}
sub fhem_bot_imgresponse{
foreach my $responseimg (@_) {
fhem "set $TelegramBot_Device sendImage \@$msgPeerId $responseimg";
}
}
sub fhem_bot_svgresponse{
my $svgentries = 0;
foreach (@_){$svgentries++;}
for(my $i = 0; $i < $svgentries; $i++) {
my @data = @{$_[$i]};
my $filename = 'plot'.$i.'.png';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
print $fh plotAsPng($data[0]);
close $fh;
fhem_bot_imgresponse(
"/opt/fhem/plot".$i.".png ".$data[1],
);
}
}
sub fhem_bot_fhem_cmd{
foreach my $fhemcmd (@_) {
fhem "$fhemcmd";
}
}
1;

Ich habe die Keywords folgendermaßen eingetragen:
if($msgText eq "/start"){
...CODE...
}

Innerhalb eines Keywords habe ich folgende Befehle vereinfacht

Rückantworten an die ankommende PeerID.Es können beliebig viele Texte gesendet werden:
fhem_bot_response(
"Textbox 1\nMit #ein bisschen Text",
"Textbox 2",
"Textbox 3\nWieder mit ein bisschen Test\nAber noch einer Zeile",
 );

Rückantworten mit Bild an die ankommende PeerID. Es können beliebig viele Bilder gesendet werden:
fhem_bot_imgresponse(
"/opt/fhem/bild1.png Das ist ein Testbild",
"/opt/fhem/bild2.png Das ist ein Testbild von eine anderem Bild\nAber sonst alles gut",
"/opt/fhem/bild1.png Wieder das erste Bild",
 );

SVG Plot als Bild an die ankommende PeerID. Es können beliebig viele SVG Plots gesendet werden:
fhem_bot_svgresponse(
["EG.XX.Heizung.svg","SVG Plot Beschreibung Erdgeschoss"],
["KBZ.XX.Heizung.svg","SVG Plot Beschreibung Kleines Badezimmer"],
["MBZ.XX.Heizung.svg","SVG Plot Beschreibung Mittleres Badezimmer"],
 );

FHEM Befehle die ausgeführt werden können. Es können beliebig viele Befehle abgesetzt werden:
fhem_bot_fhem_cmd(
"set lampe1 on",
"set fernseher off",
"define temp_timer at +00:00:10 set lampe1 on",
 );

Sooooooo....ich weiß allerdings nicht ob das mit kompletten Modulen wie bsp. von Uli mithalten kann.
Feedback erwünscht ;)
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Esjay

  • Full Member
  • ***
  • Beiträge: 412
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #13 am: 23 Juni 2016, 10:25:43 »
So ich habe heute etwas Zeit gehabt und habe mein FHEMBot-Script noch was angepasst.

Danke für deine Mühe,und das du es zur Verfügung stellst!
Ich hätte noch ein oder zwei Verständnissfragen!

Du lässt dir ja deine SVG Datein, wie z.B
fhem_bot_svgresponse(
["EG.XX.Heizung.svg","SVG Plot Erdgeschoss"]
zuschicken.

Woher weiß er denn, wo er die Datein suchen muss? Die liegen doch wenn ich mich nicht täusche in /opt/fhem/www/gplot. Ich finde allerdings keinen Hinweis darauf in deinem Code!

Ich vermute allerdings, dass das bei dir hier geschieht,und du schlicht deine Daten woanders abspeicherst?!??
 sub fhem_bot_svgresponse{
my $svgentries = 0;
foreach (@_){$svgentries++;}
for(my $i = 0; $i < $svgentries; $i++) {
my @data = @{$_[$i]};
my $filename = 'plot'.$i.'.png';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
print $fh plotAsPng($data[0]);
close $fh;
fhem_bot_imgresponse(
"/opt/fhem/plot".$i.".png ".$data[1],
);
}
}

Desweiteren finde ich diesen Part sehr interessant
if($msgText eq "/status"){
fhem_bot_response(
"FHEM gestartet:\n".ReadingsVal('sysmon','fhemstarttime_text','0')."\nFHEM läuft seit:\n".ReadingsVal('sysmon','fhemuptime_text','0')."\n\nSystem gestartet:\n".ReadingsVal('sysmon','starttime_text','0')."\nSystem läuft seit:\n".ReadingsVal('sysmon','uptime_text','0')."\nErreichbar unter:\n".ReadingsVal('sysmon','eth0_ip','0')."\n\nPower:\n".ReadingsVal('sysmon','power_ac_text','0'),
"/system\n/hauptmenue",
);
}

Wärst du bereit deine define aus deiner fhem.cfg zu teilen?

In deinem vorherigen Post findet sich der Code
if($msgText eq "/turstatus"){
if(ReadingsVal('FL.TS.Tuersensor','state','0') eq "open"){
fhem "set TelegramBot message \@$msgPeerId Die Haustüre ist offen";
}
if(ReadingsVal('FL.TS.Tuersensor','state','0') eq "closed"){
fhem "set TelegramBot message \@$msgPeerId Die Haustüre ist geschlossen";
}
fhem "set TelegramBot message \@$msgPeerId /hauptmenue";
}

Überwacht er FL.TS.Tuersensor aus Fhem heraus, oder hast du das i-wo noch als Attribut oder wie auch immer in Telegram mit eingebunden?

Viele Grüße

Offline tiroso

  • Full Member
  • ***
  • Beiträge: 146
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #14 am: 23 Juni 2016, 12:58:34 »
Hey,

Ich versuche mal die Fragen bestmöglich zu beantworten.
Es gibt...ich habe sie mal gefunden, weiß allerdings nicht mehr wo...die Funktion plotaspng() mit der Funktion ( und den entsprechenden Paketen ) ist es möglich deine SVG Plots als PNG Stream zu verschicken oder, so wie ich es gemacht habe, als PNG zu speichern. Da das ganze in /opt/fhem/ passiert werden hier auch die plot.png abgelegt. Die hattest du ja quasi in dem Teil gefunden:
Zitat
sub fhem_bot_svgresponse{
   my $svgentries = 0;
   foreach (@_){$svgentries++;}
   for(my $i = 0; $i < $svgentries; $i++) {
      my @data = @{$_[$i]};
      my $filename = 'plot'.$i.'.png';
      open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
      print $fh plotAsPng($data[0]);
      close $fh;
      fhem_bot_imgresponse(
         "/opt/fhem/plot".$i.".png ".$data[1],
      );
   }
}
In der selben Funktion wird diese gerade erstellte PNG per Telegram wieder versendet.
Die Funktion plotaspng("SVG_PLOT"); nimmt sich dein definierten Plot und stellt diese als PNG zur Verfügung. Vorraussetzung:
sudo apt-get install libimage-librsvg-perl
sudo apt-get install libgd-graph-perl
sudo apt-get install libgd-text-perl

Das Keyword /start greift sich die Readings aus dem MODUL Sysmon.
define sysmon SYSMON 1 1 1 10
Der Türstatus ist keine Überwachung. Ich bekomme ja nur eine Anwort wenn ich /tuerstatus an FHEM schicke. Wenn es jetzt wirklich eine Überwachung sein soll (Tür steht auf für 5 Minuten oder so) dann leg ein seperates notify an.
Wenn ich /tuerstatus geschickt habe, wird in der Funktion der State meines Fensterkontaktes (HOMEMATIC ebenfalls in FHEM eingebunden) ausgelesen und verschickt.
Der jetzige Teil dafür sieht folgendermaßen aus:
if($msgText eq "/turstatus"){
my $temptext = "";
if(ReadingsVal('FL.TS.Tuersensor','state','0') eq "open"){
$temptext = "Die Haustüre ist offen";
}elsif(ReadingsVal('FL.TS.Tuersensor','state','0') eq "closed"){
$temptext = "Die Haustüre ist geschlossen";
}
fhem_bot_response(
$temptext,
"/hauptmenue",
);
}

Ich hoffe ich konnte helfen.

Offline Esjay

  • Full Member
  • ***
  • Beiträge: 412
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #15 am: 23 Juni 2016, 13:34:07 »
Danke für die schnelle und ausführliche Antwort!

Also mit den von dir genannten Paketen,geht das abspeichern der SVG Datein als PNG komplett automatisch von statten ja?

Das Sysmon Modul hab ich sogar bereits definiert.Hab die Readings wohl nur nicht wahr genommen. :o

Das Wort "Überwachung" wahr wohl ein bisschen irreführend!
Ich schalte über pilight meine Funksteckdosen und habe dementsprechend eine Steckdose mit "define Schlafzimemr pilight_switch kaku_switch  19864566 0" formuliert, die mir auch als state "on" und "off" liefert.

Also müsste doch mein Code dann so aussehen!?

if($msgText eq "/StStatus"){
my $temptext = "";
if(ReadingsVal('Schlafzimmer','state','0') eq "off"){
$temptext = "Die Steckdose ist aus";
}elsif(ReadingsVal('Schlafzimmer','state','0') eq "on"){
$temptext = "Die Steckdose ist an";
}
fhem_bot_response(
$temptext,
"/hauptmenue",
);
}

Bin gerade noch auf der Arbeit,deswegen kann ich nicht direkt testen.

Ich hoffe das kommt alles nicht all zu "der hat ja gar keine Ahnung" rüber.

Grüße
 

Offline tiroso

  • Full Member
  • ***
  • Beiträge: 146
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #16 am: 23 Juni 2016, 14:01:32 »
Wenn dein Device Schlafzimmer heisst ist es korrekt. Aber ich glaube es heisst bei dir Schlafzimmer_pilight_switch.

Ja wenn dein FHEM unter /opt/fhem/ läuft werden dort auch die PNGs abgelegt.

Ach ist ja kein Problem. Dafür ist es ja da um drüber zu reden. ;)

Offline andre07

  • Jr. Member
  • **
  • Beiträge: 83
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #17 am: 04 Juli 2016, 13:08:41 »
Hallo tiroso

Komme mit deinen sicherheitseinstellungen nicht ganz klar
Im telgram_bot fhem habe ich das ergänzt
userattr   -FhemBot_ReceiveRestrictedPeer 1 , -FhemBot_ReceiveCustomPeer 22042539XIn deinen code das dies ergänzt
my $msgPeerId = "22042539X";
my $TelegramBot_Device = "andre_telegram";
wobei 22042539X die  msgPeerId von meinen  handy contact ist und andre_telegram mein bot in fhem.
Funktioniert so leider nicht kannst du mir vielleicht auf die Sprünge helfen was da flasch ist.

Offline RoBra81

  • Sr. Member
  • ****
  • Beiträge: 796
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #18 am: 04 Juli 2016, 15:18:39 »
Hallo,

da ich auch mal Dialoge auf diese Art gebaut habe und nun aber ein neues Modul entdeckt habe, mit welche ich meine Dialoge umgebaut und erweitert habe, möchte ich hier zur Info mal darauf verweisen - vielleicht ist das ja was für den einen oder anderen...

https://forum.fhem.de/index.php/topic,54863.0.html

Ronny

Online networker

  • Jr. Member
  • **
  • Beiträge: 64
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #19 am: 05 Juli 2016, 11:16:40 »
hallo andre07

Bist du dir mit den userattr sicher?
userattr   -FhemBot_ReceiveRestrictedPeer 1 , -FhemBot_ReceiveCustomPeer 22042539X
Im Code fragt er die userattr ohne den führenden "-" ab.

lG, Michael

Offline andre07

  • Jr. Member
  • **
  • Beiträge: 83
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #20 am: 05 Juli 2016, 16:06:17 »
Ich habe das so im Telegram_bot definiert wie muß es denn genau
aussehen
so dann ???
userattr  FhemBot_ReceiveRestrictedPeer 1 , FhemBot_ReceiveCustomPeer 22042539Xkannst du mir helfen

Andre

Offline marvin78

  • Hero Member
  • *****
  • Beiträge: 4374
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #21 am: 06 Juli 2016, 14:30:34 »
Wie wäre es denn, mal die Doku von FHEM zu userattr zu konsultieren?

userattr erhält durch Leerzeichen getrennt die neuen Attribute:

attr DEV userattr FhemBot_ReceiveRestrictedPeer FhemBot_ReceiveCustomPeer
Dann bekommt das Device die neuen Attribute und diese setzt du dann, wie beschrieben.

Bitte ein wenig mit den FHEM Grundlagen beschäftigen.

Offline andre07

  • Jr. Member
  • **
  • Beiträge: 83
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #22 am: 06 Juli 2016, 18:17:55 »
Hallo marvin

Soweit war ich schon hatte FhemBot_ReceiveRestrictedPeer den wert 1 gegeben und FhemBot_ReceiveCustomPeer 22042539X
was aber so anscheinend falsch ist weil der chatbot nicht reagiert
rnals:
   DEF        206056671:AAH__ifJ9WnkHqupXzKYmXb87rYw6rHdxxx
   FAILS      0
   NAME       telegram_andre
   NR         625
   OLD_POLLING 14
   POLLING    14
   SNAME      telegram_andre
   STATE      Polling
   TYPE       TelegramBot
   Token      206056671:AAH__ifJ9WnkHqupXzKYmXb87rYw6rHdxxx
   UPDATER    0
   URL        https://api.telegram.org/bot206056671:AAH__ifJ9WnkHqupXzKYmXb87rYw6rHdxxx/
   WAIT       0
   me         206056671:andre:@andreg8_bot
   Aliascmds:
     /lichtan   set RemotePI cmd set Schlafzimmer_Nachttisch on
     /lichtaus  set RemotePI cmd set Schlafzimmer_Nachttisch off
     /speakvolume setreading telegram_andre currentSpeakVolume
     /stromverbrauch {plotAsPng("SVG_FileLog_stromsensor.haus_4")}
     /tv        set RemotePI cmd set Schlafzimmer_Fernseher on
     /wohnzimmer setreading telegram_andre currentSpeakPlayer Sonos_Schlafzimmer
   Contacts:
     220425399  220425399:gustav:@adolfo
   Hu_do_params:
     header     agent: TelegramBot/1.0
 
User-Agent: TelegramBot/1.0
 
Accept: application/json
 
Accept-Charset: utf-8
     hideurl    1
     method     GET
     timeout    30
     url
   Hu_upd_params:
     FD         106
     NAME
     addr       https://api.telegram.org:443
     buf
     code       200
     displayurl <hidden>
     header     agent: TelegramBot/1.0
 
User-Agent: TelegramBot/1.0
 
Accept: application/json
 
Accept-Charset: utf-8
     hideurl    1
     host       api.telegram.org
     httpheader HTTP/1.1 200 OK
 
Server: nginx/1.10.0
 
Date: Wed, 06 Jul 2016 16:10:59 GMT
 
Content-Type: application/json
 
Content-Length: 23
 
Connection: close
 
Access-Control-Allow-Origin: *
 
Access-Control-Allow-Methods: GET, POST, OPTIONS
 
Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection
 
Strict-Transport-Security: max-age=31536000; includeSubdomains
     hu_blocking 0
     hu_filecount 3
     isPolling  update
     loglevel   4
     method     GET
     offset     0
     path       /bot206056671:AAH__ifJ9WnkHqupXzKYmXb87rYw6rHdCZU/getUpdates?offset=0&limit=5&timeout=120
     protocol   https
     redirects  0
     timeout    245
     url        https://api.telegram.org/bot206056671:AAH__ifJ9WnkHqupXzKYmXb87rYw6rHdxxx/getUpdates?offset=0&limit=5&timeout=120
     Hash:
     Sslargs:
   Readings:
     2016-06-05 14:20:25   Contacts        22042539x:gustav:@adolfo
     2016-07-06 18:08:28   PollingErrCount 3
     2016-07-06 18:08:28   PollingLastError NonBlockingGet timed out on read from <hidden> after 245s
     2016-06-06 19:21:44   currentSpeakPlayer Sonos_Schlafzimmer
     2016-07-04 12:24:47   msgChat
     2016-07-04 12:24:47   msgFileId
     2016-07-04 12:24:47   msgId           1241
     2016-07-04 12:24:47   msgPeer         gustav
     2016-07-04 12:24:47   msgPeerId       22042539x
     2016-07-04 12:24:47   msgText         /start
     2016-07-04 12:24:47   prevMsgChat
     2016-07-04 12:24:47   prevMsgFileId
     2016-07-04 12:24:47   prevMsgId       1240
     2016-07-04 12:24:47   prevMsgPeer     gustav
     2016-07-04 12:24:47   prevMsgPeerId   22042539x
     2016-07-04 12:24:47   prevMsgText     /start
     2016-07-06 06:16:38   sentMsgId       1318
     2016-07-06 06:16:38   sentMsgResult   SUCCESS
Attributes:
   FhemBot_ReceiveCustomPeer 22042539x
   FhemBot_ReceiveRestrictedPeer 1
   defaultPeer @adolfo
   favorites  /lichtan=set RemotePI cmd set Schlafzimmer_Nachttisch on;/tv=?set RemotePI cmd set Schlafzimmer_Fernseher on;set RemotePI cmd set Schlafzimmer_Fernseher off;/wohnzimmer=setreading telegram_andre currentSpeakPlayer Sonos_Schlafzimmer ; /speakvolume=setreading telegram_andre currentSpeakVolume;/stromverbrauch={plotAsPng("SVG_FileLog_stromsensor.haus_4")};/lichtaus=set RemotePI cmd set Schlafzimmer_Nachttisch off
   maxRetries 3
   pollingTimeout 120
   room       Status
   userattr   FhemBot_ReceiveRestrictedPeer FhemBot_ReceiveCustomPeer

Habs rausgefunden
 FhemBot_ReceiveRestrictedPeer wert 0 und es geht :)
aber warum steht dann im code das

# Bitte dran denken im TelegramBot Device die
# userattr:
# -FhemBot_ReceiveRestrictedPeer   (1/1)
# -FhemBot_ReceiveCustomPeer      (Custom Peers)
# zu setzen.
« Letzte Änderung: 06 Juli 2016, 19:05:59 von andre07 »

Offline tiroso

  • Full Member
  • ***
  • Beiträge: 146
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #23 am: 06 Juli 2016, 23:29:29 »
Hallöchen,

Andre sorry hatte vergessen zu antworten...mache es jetzt hier.

Ich habe diese zwei UserAttr mit dazu genommen um auf verschiedene Peerszu reagieren.

FhemBot_ReceiveRestrictedPeer -> Wenn gesetzt werden nur Peers akzeptiert die im Attr cmdRestrictedPeer stehen. Das ist ein Attr vom TelegramMessenger selber. Wenn FhemBot_ReceiveRestrictedPeer = 0 werden die Peers im UserAttr FhemBot_ReceiveCustomPeer nur akzeptiert.

Ich sehe das ist was verwirrend ... Tut mir Leid:(


:D
Hatte versucht mein unsortierten Code zu sortieren und Userfreundlicher zu gestalten und dann sowas

Offline andre07

  • Jr. Member
  • **
  • Beiträge: 83
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #24 am: 07 Juli 2016, 15:48:31 »
Danke noch jetzt läuft es ja ein Problem hätte ich noch den Versand von plots
der will bei mir nicht so richtig, bekomme  nur  Grafiken mit "no logdevice" zugesandt
definiert ist das so bei mir if($msgText eq "/heizungsplot"){
fhem_bot_svgresponse(
["SVG_Filelog.Thermostat.WZ_Clima_1.svg","SVG Plot Wohnzimmer"],
["Bad_Heizung_Clima_1.svg","SVG Plot Badezimmer"],
["SVG_FileLog_Dach_Heizung_Clima_1.svg","SVG Plot Dachboden"],
                                ["SVG_FileLog_stromsensor.haus_4.svg","Stromverbrauch"],
);
Die gleichnamigen plots befinden sich bei mir /opt/fhem/www/glot/SVG_Filelog.Thermostat.WZ_Clima_1.gplot......
Dies hier geht definiert bei favorites /stromverbrauch={plotAsPng("SVG_FileLog_stromsensor.haus_4")}
plotAsPng funktioniert also
Andre

Offline tiroso

  • Full Member
  • ***
  • Beiträge: 146
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #25 am: 07 Juli 2016, 21:42:19 »
Was steht denn im Log?

Offline andre07

  • Jr. Member
  • **
  • Beiträge: 83
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #26 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.
« Letzte Änderung: 08 Juli 2016, 12:07:08 von andre07 »

Online ripper

  • Jr. Member
  • **
  • Beiträge: 51
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #27 am: 19 Juli 2016, 22:22:13 »
Hallo,

ich teste jetzt schon einige Stunden mit dem Code von tiroso. Danke erst mal dafür!!

Allerdings habe ich ein hoffentlich kleines Problem an dem ich nicht weiter komme. Ich kann zwar mit dem Bot chatten und er gibt mir z.B. auch mein Menü aus. Allerdings werden keine Befehle ausgeführt.
Befehle für die Jalousien schauen bei mir so aus:
if($msgText eq "/AlleAuf"){
fhem_bot_fhem_cmd(
"set .*rollo.* auf",
);
fhem_bot_response(
"Alle Jalousien werden geschlossen.\n/jalousie\n/hauptmenue",
);
}
if($msgText eq "/AlleZu"){
fhem_bot_fhem_cmd(
"set .*rollo.* zu",
);
fhem_bot_response(
"Alle Jalousien werden geöffnet.\n/jalousie\n/hauptmenue",
);
}
if($msgText eq "/SchlafzimmerAnkippen"){
fhem_bot_fhem_cmd(
"set Sc_rollo pct 2",
);
fhem_bot_response(
"Schlafzimmer Jalousie wurde gekippt",
);
}

 Wenn ich mein "99_myChat_Utils.pm" speichere bekomme ich folgenden Fehler:

Bareword "jarvisAThome" not allowed while "strict subs" in use at ./FHEM/99_myChat_Utils.pm line 69.
Wobei jarvisAThome mein Bot ist.
Ich steh hier gerade echt auf dem Schlauch. Kann mir vielleicht jemand einen "Schupser" oder einen Tipp geben??
Wenn noch weitere Infos benötigt werden liefere ich die natürlich gerne nach.

Vielen Dank schon mal :-)

Offline Maista

  • Full Member
  • ***
  • Beiträge: 102
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #28 am: 20 Juli 2016, 11:38:06 »
Moin ripper

Was steht denn in der Zeile 69 deines Moduls?

Grussig Gerd

Online ripper

  • Jr. Member
  • **
  • Beiträge: 51
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #29 am: 20 Juli 2016, 12:03:33 »


oh..ja klar..

my $TelegramBot_Device = jarvisAThome;
an der stelle wird das TelegramBot Device hinterlegt. Deswegen versteh ichs auch nicht. Wenn ich meinem Bot etwas schicke, bekomme ich z.B. mein Menü zurück und kann dann auf mein Jalousie Menü drücken. Auch meine eigene Auswahl, AlleAuf, AlleZu und SchlafzimmerAnkippen bekomme ich im Chat angezeigt. Nur der Befehl wird nicht abgesetzt.
Hab mal noch was anderes getestet:
Im Code von toriso steht:

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

wenn ich dass drinnen lasse und meinem Bot /sonosstop schicke bzw. anklicke dann bekomme ich einen log Eintrag dass ich Sonos erst definieren muss. Wenn ich meine rollo befehle direkt über die fhem Eingabezeile ausführe dann bewegen sich die Jalousien.



Offline pole23

  • Full Member
  • ***
  • Beiträge: 106
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #30 am: 20 Juli 2016, 14:01:39 »
versuch mal folgendes:
my $TelegramBot_Device = "jarvisAThome";
« Letzte Änderung: 20 Juli 2016, 14:08:49 von pole23 »

Online ripper

  • Jr. Member
  • **
  • Beiträge: 51
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #31 am: 20 Juli 2016, 16:30:55 »
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 :-[

Online ripper

  • Jr. Member
  • **
  • Beiträge: 51
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #32 am: 20 Juli 2016, 19:55:59 »
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??
« Letzte Änderung: 20 Juli 2016, 20:40:40 von ripper »

Offline jostereo

  • New Member
  • *
  • Beiträge: 35
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #33 am: 21 Juli 2016, 06:50:33 »
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.

Online ripper

  • Jr. Member
  • **
  • Beiträge: 51
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #34 am: 21 Juli 2016, 09:23:51 »
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.

Offline mattes1007

  • Full Member
  • ***
  • Beiträge: 100
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #35 am: 06 August 2016, 14:02:49 »
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

Offline tiroso

  • Full Member
  • ***
  • Beiträge: 146
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #36 am: 07 August 2016, 07:27:51 »
Puh im Moment weiss ich es leider auch nicht.
Hmm...ich suche weiter

Offline davedeluxe

  • Full Member
  • ***
  • Beiträge: 102
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #37 am: 09 September 2016, 13:19:04 »
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.

Offline kalle0103

  • New Member
  • *
  • Beiträge: 5
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #38 am: 10 September 2016, 14:54:04 »
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") }

Offline Ascos

  • Full Member
  • ***
  • Beiträge: 110
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #39 am: 12 September 2016, 19:14:13 »
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


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

Offline gs62

  • New Member
  • *
  • Beiträge: 3
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #40 am: 18 September 2016, 17:38:53 »
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.
« Letzte Änderung: 20 September 2016, 09:58:44 von gs62 »

Offline ReinerZ

  • New Member
  • *
  • Beiträge: 28
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #41 am: 28 September 2016, 23:33:17 »
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

Offline Ascos

  • Full Member
  • ***
  • Beiträge: 110
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #42 am: 01 Oktober 2016, 11:41:30 »
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

Offline Dersch

  • Full Member
  • ***
  • Beiträge: 238
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #43 am: 10 Oktober 2016, 14:39:30 »
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

Offline Markus80

  • Full Member
  • ***
  • Beiträge: 114
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #44 am: 16 Oktober 2016, 17:31:50 »
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


Offline BKSolo

  • Jr. Member
  • **
  • Beiträge: 66
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #45 am: 14 November 2016, 19:10:32 »
Ich habe TelegramBot nun auch am Laufen inkl. vordefinierten Dialoge.
Dazu hat mir der Beitrag #12 vom 22 Juni 2016, 23:14:03 » von tiroso  viel geholfen. Danke euch.

Etwas Zeit brauchte ich für die userattr korrekt zu definieren, da ich das noch nicht kannte.

Weiter brauchte ich etwas Zeit bis ich herausgefunden hatte, was z.B. /alleheizungplot als Wert eingetragen werden muss.
Die Antwort ist - es muss die Bezeichnung aus der SVG Definition im fhem.cfg verwendet werden.
fhem.cfg:  define SVG_FS20_S8_3_T1 SVG FS20_S8_3_T1:SVG_FS20_S8_3_T1:CURRENT 
99_myUtilsTelegram.pm: ["SVG_FS20_S8_3_T1","SVG Plot T1"],

Es werden über Telegram Messages die Ausgänge eines FS20 SM8 über CUL (drahtlos) in meinem Wohnmobil geschaltet.
Dazu habe ich im WoMo ein Raspberry mit FHEM im Einsatz. Setze auch den neuen Touchscreen ein.
Der Floorplan des Wohnmobils mit den Schaltern lässt die Ausgänge auch lokal schalten.

Der Remote Zugang läuft über ein Mobile Wi-Fi, wo alles im WoMo per WLAN untereinander kommuniziert.

Als nächstes geht es daran es mit Sensoren zu erweitern, die mir Zustände / Grenzwertüberschreitungen etc.  per Telegram Messages melden werden.

Gruss, Bruno




Raspberry PI 2/3 - CUL-433(V3) - CUL-868 (V3) - Jeelink 868 - 433 S/E Eigenbau
TX29DTH-IT - FHT80B - FHT80TF - FS20KSE
FHEMobile 3.7r803 - Fhem2Fhem - Alpha2 - OZW672 - TelegramBot

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1885
  • RTFM
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #46 am: 15 November 2016, 05:56:38 »
Ich habe meine Methode, die auf DOIF basiert, mittlerweile auch weiter entwickelt und werde die dann vorstellen, wenn sie komplett funktioniert.
Mittlerweile kann ich Berechtigungen für Dialoge vergeben (ich kann alles, meine bessere Hälfte nur ausgewählte Sachen). Weiterhin nutzte ich nun aufgrund von Wurstfingern Keyboards statt /Text. Auch können mehrere Nutzer parallel den gleichen Dialog ausführen.
Pi3 mit fhem.cfg + DbLog/logProxy
FHEM Module: archetype, LuftdatenInfo, monitoring, Nmap
FHEM Module ToDo: alexaWebApp, DaikinD3nIU, DaikinHTTPinterface, TBot_Dialog
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.

Offline jazzor

  • New Member
  • *
  • Beiträge: 20
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #47 am: 01 Dezember 2016, 17:05:01 »
Ich habe meine Methode, die auf DOIF basiert, mittlerweile auch weiter entwickelt und werde die dann vorstellen, wenn sie komplett funktioniert.
Mittlerweile kann ich Berechtigungen für Dialoge vergeben (ich kann alles, meine bessere Hälfte nur ausgewählte Sachen). Weiterhin nutzte ich nun aufgrund von Wurstfingern Keyboards statt /Text. Auch können mehrere Nutzer parallel den gleichen Dialog ausführen.
Igami, genau so etwas versuche ich auch gerade aufzubauen.
Wärst du bereit, deinen Code/ deine Method auch im 'unfertigen' Zustand schon zu teilen?
Vielleicht kann man dann zusammen weiter machen, man muss ja nicht das Rad neu erfinden :-)

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1885
  • RTFM
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #48 am: 01 Dezember 2016, 18:58:41 »
Hakki
Wärst du bereit, deinen Code/ deine Method auch im 'unfertigen' Zustand schon zu teilen?
Hallo jazzor,

kann ich gerne machen. Ich möchte aber betonen, dass ich keine Lust habe großartig Support dafür zu übernehmen. Meine Lösung ist eher was für welche die fundierte Grundkenntnisse in DOIF und perl haben.

Vorab:
  • das TelegramBot device hat den name TelegramBot
  • meinen Bot spreche ich mit heimdall an (Wikipedia)
  • für meine Telegram ID nutze ich hier im Forum 12345678
  • für die Telegram ID meiener Freundin nutze ich hier im Foum 87654321

global userattr erweitern:
{addToAttrList("subType")}

TelegramBot einrichten
attr <TelegramBot> userReadings replyId:msgText.* {ReadingsVal($name, "msgChat", "") eq "" ? ReadingsVal($name, "msgPeerId", "") : (split(" ", ReadingsVal($name, "msgChat", ""), 2))[0]}

notify um Kontakte bequem zuzuweisen
defmod Contacts_notify notify .*Contacts:.* {\
  return if(InternalVal($NAME, "TYPE", "undef") ne "TelegramBot");;\
  my @Contacts = split(" ", ReadingsVal($NAME, "Contacts", ""));;\
  $_ = join(":", (split(":", $_))[0,1]) for (@Contacts);;\
  fhem("attr subType=dialog widgetOverride msgPeerId:multiple-strict,".join(",", @Contacts));;\
  return;;  \
}
attr Contacts_notify devStateIcon {ReadingsVal($name, "state", "inactive") eq "active" ? ".*:ios-on-blue:inactive" : ".*:ios-off:active"}
attr Contacts_notify icon audio_mic
attr Contacts_notify room Telegram

myUtils erweitern:
sub TelegramBot_SendKeyboard($$$@) {
  my ($name, $peer, $msg, @rows) = @_;
  my $hash = $defs{$name};
  my @keys;
  for (@rows){
    my @columns = split("\\|", $_);
    push(@keys, \@columns);
  }
  my $jsonkb = TelegramBot_MakeKeyboard($hash, 1, 0, @keys);
  TelegramBot_SendIt($hash, $peer, $msg, $jsonkb, 0);
  return;
}

Notify um Nachrichten an die Dialoge weiter zu leiten:
defmod dialog_notify notify .*msgText:.* {\
  return if(InternalVal($NAME, "TYPE", "undef") ne "TelegramBot");;\
  my $msgPeerId = ReadingsVal($NAME, "msgPeerId", undef);;\
  my $msgChat = ReadingsVal($NAME, "msgChat", "");;\
    $msgChat = (split(" ", $msgChat, 2))[0] if($msgChat ne "");;\
  my $msgText = ReadingsVal($NAME, "msgText", undef);;\
\
  my @a = devspec2array("subType=dialog:FILTER=disable!=1");;\
  my @dialogs;;\
    for (@a){\
      push(@dialogs, $_)\
        if\
        (grep(/$msgPeerId/, split(",", AttrVal($_, "msgPeerId", ""))) and\
         (grep(/$msgChat/, split(",", AttrVal($_, "msgChat", ""))) or\
           $msgChat eq ""\
         ) and\
         trim($defs{$_}->{devices}{0}) eq $_\
        );;;;\
    }\
\
  fhem("trigger $_ msg: $msgText", 0) for (@dialogs);;\
  return;;  \
}
attr dialog_notify devStateIcon {ReadingsVal($name, "state", "inactive") eq "active" ? ".*:ios-on-blue:inactive" : ".*:ios-off:active"}
attr dialog_notify icon audio_mic
attr dialog_notify room Telegram

Hauptdialog:
defmod heimdall_dialog DOIF ### heimdall ###\
  ([$SELF:"^msg: /(heimdall|start)$"])(\
    ({my @a = devspec2array("subType=dialog:FILTER=disable!=1:FILTER=NAME!=$SELF");;;;\
      my $msgChat = ReadingsVal("TelegramBot", "msgChat", "");;;;\
        $msgChat = (split(" ", $msgChat, 2))[0] if($msgChat ne "");;;;\
      my @dialogs;;;;\
      for (@a){\
        push(@dialogs, $_)\
          if(grep(/[TelegramBot:msgPeerId]/, split(",", AttrVal($_, "msgPeerId", ""))) and\
            ((grep(/$msgChat/, split(",", AttrVal($_, "msgChat", ""))) or\
              $msgChat eq ""\
             ) and\
             trim($defs{$_}->{devices}{0}) eq $_\
            )\
          );;;;\
      }\
      if($dialogs[0] and defined($defs{$dialogs[0]})){\
        $_ = trim((split("\#\#\#", InternalVal($_, "DEF", undef), 3))[1]) for (@dialogs);;;;\
        @dialogs = sort(@dialogs);;;;\
      }\
      else{\
        return;;;;\
      }\
      push(@dialogs, "abbrechen");;;;\
\
      TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:replyId]", "Ich kann folgendes für dich tun:", @dialogs);;;;\
     }\
    ),\
    sleep 0.001;; setreading subType=dialog [TelegramBot:msgPeerId] initialized\
  )\
### abbrechen ###\
  DOELSEIF\
  ([$SELF:"^msg: /?abbrechen$"])(\
    ({Telegram_reply("TelegramBot", "Dialog abgebrochen.\n\n/heimdall");;;;}),\
    sleep 0.001;; setreading subType=dialog [TelegramBot:msgPeerId] initialized\
  )\
### beenden ###\
  DOELSEIF\
  ([$SELF:"^msg: /?beenden$"])(\
    ({Telegram_reply("TelegramBot", "Dialog beendet.\n\n/heimdall");;;;}),\
    sleep 0.001;; setreading subType=dialog [TelegramBot:msgPeerId] initialized\
  )
attr heimdall_dialog userattr msgPeerId
attr heimdall_dialog alias Telegram: heimdall Dialog
attr heimdall_dialog cmdState heimdall|abbrechen|beenden
attr heimdall_dialog do always
attr heimdall_dialog event-on-change-reading none
attr heimdall_dialog group Dialog
attr heimdall_dialog icon audio_playlist
attr heimdall_dialog msgPeerId 12345678:Michael,87654321:Riku
attr heimdall_dialog notexist notexist
attr heimdall_dialog repeatsame 0:1
attr heimdall_dialog room Telegram
attr heimdall_dialog subType dialog
attr heimdall_dialog widgetOverride msgPeerId:multiple-strict,12345678:Michael,87654321:Riku

Das sind die Grundeinstellungen. Nun zu den Dialogen:
  • alle Dialoge sind DOIF
  • alle Dialoge müssen mit "### <Dialog> ###" beginnen
  • ich habe für alle Dialoge die Attribute mit Werten: "do always", "notexist notexist", "repeatsame 0:1" und "subType dialog" gesetzt
  • zum Auswerten der Nachrichten wird [$SELF:"^msg: <msg>$"] verwendet (siehe Commandref zu DOIF Events)

Ich habe folgende Dialoge definiert:
INITIALIZED_dialog
Michael_alarm_dialog
PostMe_Einkaufsliste_dialog
PostMe_Geschenke_dialog
Schlafzimmer_alarm_dialog
Tankstelle_dialog
Waschkeller_clothesline_dialog
Waschkeller_washer_dialog
Weather_frost_dialog
Wohnzimmer_alarm_dialog
grill_dialog
ip_dialog
lightning_dialog
opened_windows_dialog
Falls ein bestimmter davon interessant erscheint kann ich Raw defintion davon posten.

Hier ein paar ausgewählte Dialoge (das Attribut MsgPeerId poste ich dabei nicht mit, dies ist jedoch zwingend erforderlich)

opened_windows_dialog
defmod opened_windows_dialog DOIF ### Fenster ###\
  ([$SELF:"^msg: Fenster$"])(\
    ({my @windows = devspec2array("model=HM-SEC-SC.*:FILTER=state!=closed");;;;\
      my $msg = "Es sind noch folgenede Fenster geöffnet:\n";;;;\
\
      if(@windows > 0){\
        $msg .= "\n".AttrVal($_, "alias", $_) for (@windows);;;;\
      }else{\
        $msg = "Es sind alle Fenster geschlossen.";;;;\
      }\
      $msg .= "\n\n/heimdall";;;;\
\
      Telegram_reply("TelegramBot", $msg);;;;\
     }\
    )\
  )
attr opened_windows_dialog userattr do notexist msgPeerId repeatsame
attr opened_windows_dialog alias Telegram: Fenster Dialog
attr opened_windows_dialog cmdState Fenster Status gesendet
attr opened_windows_dialog description {trim((split("\#\#\#", InternalVal($name, "DEF", undef), 3))[1])}
attr opened_windows_dialog do always
attr opened_windows_dialog event-on-change-reading none
attr opened_windows_dialog group Dialog
attr opened_windows_dialog icon audio_playlist
attr opened_windows_dialog notexist notexist
attr opened_windows_dialog repeatsame 0:1
attr opened_windows_dialog room Telegram
attr opened_windows_dialog subType dialog

und die Keule
lightning_dialog:
defmod lightning_dialog DOIF ### Beleuchtung ###\
  ([$SELF:"^msg:.+Beleuchtung$"])(\
    set HUEDevice(\d)+ statusRequest\
  )(\
    ({my $msg = q{\
        Welche Beleuchtung möchtest du schalten?\
        \nDu kannst auch eine Beleuchtung und einen Wert in % angeben.\
        \nZum Beispiel "Schlafzimmer Deckenlampe 20" oder "Sz d 20".\
      };;;;\
      \
      my @rows;;;;\
        push(@rows, "Beleuchtung");;;;\
        push(@rows, q{[HM_24074C_Sw_01:state:"(.*)":$1 =~ "off" ? "Flur Beleuchtung ein" : "Flur Beleuchtung aus"]});;;;\
        push(@rows, (("[HUEDevice6:state]" !~ /unreachable|off/ or "[HUEDevice7:state]" !~ /unreachable|off/ or "[HUEDevice8:state]" !~ /unreachable|off/) ? "Küche Deckenlampe aus" : "Küche Deckenlampe ein"))\
          if\
          ("[HUEDevice6:state]" !~ /unreachable/ or\
           "[HUEDevice7:state]" !~ /unreachable/ or\
           "[HUEDevice8:state]" !~ /unreachable/\
          );;;;\
        push(@rows, (("[HUEDevice6:state]" !~ /unreachable|off/ or "[HUEDevice7:state]" !~ /unreachable|off/ or "[HUEDevice8:state]" !~ /unreachable|off/) ? "Küche Deckenlampe dimmen" : "Küche Deckenlampe dimmen"))\
          if\
          ("[HUEDevice6:state]" !~ /unreachable/ or\
           "[HUEDevice7:state]" !~ /unreachable/ or\
           "[HUEDevice8:state]" !~ /unreachable/\
          );;;;\
        push(@rows, q{[HUEDevice9:state:"(.*)":$1 =~ "off" ? "Schlafzimmer Deckenlampe ein" : "Schlafzimmer Deckenlampe aus"]}) if("[HUEDevice9:state]" !~ /unreachable/);;;;\
        push(@rows, q{[HUEDevice9:state:"(.*)":$1 =~ "off" ? "Schlafzimmer Deckenlampe dimmen" : "Schlafzimmer Deckenlampe dimmen"]}) if("[HUEDevice9:state]" !~ /unreachable/);;;;\
        push(@rows, q{[HUEDevice5:state:"(.*)":$1 =~ "off" ? "Schlafzimmer Nachttischlampe ein" : "Schlafzimmer Nachttischlampe aus"]}) if("[HUEDevice5:state]" !~ /unreachable/);;;;\
        push(@rows, q{[HUEDevice5:state:"(.*)":$1 =~ "off" ? "Schlafzimmer Nachttischlampe dimmen" : "Schlafzimmer Nachttischlampe dimmen"]}) if("[HUEDevice5:state]" !~ /unreachable/);;;;\
        push(@rows, (("[HUEDevice2:state]" !~ /unreachable|off/ or "[HUEDevice3:state]" !~ /unreachable|off/ or "[HUEDevice4:state]" !~ /unreachable|off/) ? "Arbeitszimmer Deckenlampe aus" : "Arbeitszimmer Deckenlampe ein"))\
          if\
          ("[HUEDevice2:state]" !~ /unreachable/ or\
           "[HUEDevice3:state]" !~ /unreachable/ or\
           "[HUEDevice4:state]" !~ /unreachable/\
          );;;;\
        push(@rows, (("[HUEDevice2:state]" !~ /unreachable|off/ or "[HUEDevice3:state]" !~ /unreachable|off/ or "[HUEDevice4:state]" !~ /unreachable|off/) ? "Arbeitszimmer Deckenlampe dimmen" : "Arbeitszimmer Deckenlampe dimmen"))\
          if\
          ("[HUEDevice2:state]" !~ /unreachable/ or\
           "[HUEDevice3:state]" !~ /unreachable/ or\
           "[HUEDevice4:state]" !~ /unreachable/\
          );;;;\
        push(@rows, q{[HUEDevice1:state:"(.*)":$1 =~ "off" ? "Wohnzimmer Deckenlampe ein" : "Wohnzimmer Deckenlampe aus"]}) if("[HUEDevice1:state]" !~ /unreachable/);;;;\
        push(@rows, q{[HUEDevice1:state:"(.*)":$1 =~ "off" ? "Wohnzimmer Deckenlampe dimmen" : "Wohnzimmer Deckenlampe dimmen"]}) if("[HUEDevice1:state]" !~ /unreachable/);;;;\
        push(@rows, q{[HM_273CDB:state:"(.*)":$1 =~ "off" ? "Wohnzimmer Spots ein" : "Wohnzimmer Spots aus"]});;;;\
        push(@rows, q{[HM_273CDB:state:"(.*)":$1 =~ "off" ? "Wohnzimmer Spots dimmen" : "Wohnzimmer Spots dimmen"]});;;;\
        push(@rows, "abbrechen");;;;\
\
      TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:replyId]", $msg, @rows);;;;\
     }\
    ),\
    sleep 0.001;; setreading $SELF state send status\
  )\
### Flur Beleuchtung aus ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Flur|[Ff]) (Beleuchtung|[Bb]) (aus|0)"])(\
    set HM_24074C_Sw_01 off,\
    ({Telegram_reply("TelegramBot", "Flur Beleuchtung ausgeschaltet.\n\n/heimdall")}),\
    sleep 0.001;; setreading $SELF state Flur Beleuchtung aus\
  )\
### Flur Beleuchtung ein ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Flur|[Ff]) (Beleuchtung|[Bb]) (ein|100|[1-9][0-9]|[1-9])"])(\
    set HM_24074C_Sw_01 on,\
    ({Telegram_reply("TelegramBot", "Flur Beleuchtung eingeschaltet.\n\n/heimdall")}),\
    sleep 0.001;; setreading $SELF state Flur Beleuchtung ein\
  )\
### Küche Deckenlampe aus ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Küche|[Kk]) (Deckenlampe|[Dd]) (aus|0)"])(\
    set HUEGroup3 off,\
    ({Telegram_reply("TelegramBot", "Küche Deckenlampe ausgeschaltet.\n\n/heimdall")}),\
    sleep 0.001;; setreading $SELF state Küche Deckenlampe aus\
  )\
### Küche Deckenlampe ein ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Küche|[Kk]) (Deckenlampe|[Dd]) (ein|100)"])(\
    set HUEGroup3 pct 100,\
    ({Telegram_reply("TelegramBot", "Küche Deckenlampe eingeschaltet.\n\n/heimdall")}),\
    sleep 0.001;; setreading $SELF state Küche Deckenlampe ein\
  )\
### Küche Deckenlampe % ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Küche|[Kk]) (Deckenlampe|[Dd]) ([1-9]|[1-9][0-9])$"])(\
    set HUEGroup3 pct [TelegramBot:msgText:".* (.*)$":$1],\
    ({Telegram_reply("TelegramBot", q{Küche Deckenlampe auf [TelegramBot:msgText:".* (.*)$":$1] % gedimmt.\n\n/heimdall})}),\
    sleep 0.001;; setreading $SELF state Küche Deckenlampe [TelegramBot:msgText:".* (.*)$":$1]\
  )\
### request K D dim ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Küche|[Kk]) (Deckenlampe|[Dd]) (dimmen|[Dd])$"])(\
    ({TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:replyId]", "Welchen Wert soll ich einstellen?", "5|10|15|20|25", "30|35|40|45|50", "55|60|65|70|75", "80|85|90|95|100", "0|abbrechen")}),\
    setreading $SELF [TelegramBot:msgPeerId] request K D dim,\
    sleep 0.001;; setreading $SELF state request K D dim\
  )\
  ### request K D dim set done ###\
    DOELSEIF\
    ([$SELF:"^msg:.+([0-9]|[1-9][0-9]|100)$"] and\
     ReadingsVal("$SELF", [TelegramBot:msgPeerId], "") eq "request K D dim"\
    )(\
      set HUEGroup3 pct [TelegramBot:msgText],\
      ({TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:replyId]",  q{Küche Deckenlampe auf [TelegramBot:msgText] % gedimmt.}, "5|10|15|20|25", "30|35|40|45|50", "55|60|65|70|75", "80|85|90|95|100", "0|beenden")}),\
      sleep 0.001;; setreading $SELF state Küche Deckenlampe [TelegramBot:msgText]\
    )\
### Schlafzimmer Deckenlampe aus ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Schlafzimmer|[Ss][Zz]) (Deckenlampe|[Dd]) (aus|0)"])(\
    set HUEDevice9 off,\
    ({Telegram_reply("TelegramBot", "Schlafzimmer Deckenlampe ausgeschaltet.\n\n/heimdall")}),\
    sleep 0.001;; setreading $SELF state Schlafzimmer Deckenlampe aus\
  )\
### Schlafzimmer Deckenlampe ein ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Schlafzimmer|[Ss][Zz]) (Deckenlampe|[Dd]) (ein|100)"])(\
    set HUEDevice9 pct 100,\
    ({Telegram_reply("TelegramBot", "Schlafzimmer Deckenlampe eingeschaltet.\n\n/heimdall")}),\
    sleep 0.001;; setreading $SELF state Schlafzimmer Deckenlampe ein\
  )\
### Schlafzimmer Deckenlampe % ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Schlafzimmer|[Ss][Zz]) (Deckenlampe|[Dd]) ([1-9]|[1-9][0-9])$"])(\
    set HUEDevice9 pct [TelegramBot:msgText:".* (.*)$":$1],\
    ({Telegram_reply("TelegramBot", q{Schlafzimmer Deckenlampe auf [TelegramBot:msgText:".* (.*)$":$1] % gedimmt.\n\n/heimdall})}),\
    sleep 0.001;; setreading $SELF state Schlafzimmer Deckenlampe [TelegramBot:msgText:".* (.*)$":$1]\
  )\
### request SZ D dim ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Schlafzimmer|[Ss][Zz]) (Deckenlampe|[Dd]) (dimmen|[Dd])$"])(\
    ({TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:replyId]", "Welchen Wert soll ich einstellen?", "5|10|15|20|25", "30|35|40|45|50", "55|60|65|70|75", "80|85|90|95|100", "0|abbrechen")}),\
    setreading $SELF [TelegramBot:msgPeerId] request SZ D dim,\
    sleep 0.001;; setreading $SELF state request SZ D dim\
  )\
  ### request SZ D dim set done ###\
    DOELSEIF\
    ([$SELF:"^msg:.+([0-9]|[1-9][0-9]|100)$"] and\
     ReadingsVal("$SELF", [TelegramBot:msgPeerId], "") eq "request SZ D dim"\
    )(\
      set HUEDevice9 pct [TelegramBot:msgText],\
      ({TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:replyId]",  q{Schlafzimmer Deckenlampe auf [TelegramBot:msgText] % gedimmt.}, "5|10|15|20|25", "30|35|40|45|50", "55|60|65|70|75", "80|85|90|95|100", "0|beenden")}),\
      sleep 0.001;; setreading $SELF state Schlafzimmer Deckenlampe [TelegramBot:msgText]\
    )\
### Schlafzimmer Nachttischlampe aus ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Schlafzimmer|[Ss][Zz]) (Nachttischlampe|[Nn]) (aus|0)"])(\
    set HUEDevice5 off,\
    ({Telegram_reply("TelegramBot", "Schlafzimmer Nachttischlampe ausgeschaltet.\n\n/heimdall")}),\
    sleep 0.001;; setreading $SELF state Schlafzimmer Nachttischlampe aus\
  )\
### Schlafzimmer Nachttischlampe ein ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Schlafzimmer|[Ss][Zz]) (Nachttischlampe|[Nn]) (ein|100)"])(\
    set HUEDevice5 pct 100,\
    ({Telegram_reply("TelegramBot", "Schlafzimmer Nachttischlampe eingeschaltet.\n\n/heimdall")}),\
    sleep 0.001;; setreading $SELF state Schlafzimmer Nachttischlampe ein\
  )\
### Schlafzimmer Nachttischlampe % ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Schlafzimmer|[Ss][Zz]) (Nachttischlampe|[Nn]) ([1-9]|[1-9][0-9])$"])(\
    set HUEDevice5 pct [TelegramBot:msgText:".* (.*)$":$1],\
    ({Telegram_reply("TelegramBot", q{Schlafzimmer Nachttischlampe auf [TelegramBot:msgText:".* (.*)$":$1] % gedimmt.\n\n/heimdall})}),\
    sleep 0.001;; setreading $SELF state Schlafzimmer Nachttischlampe [TelegramBot:msgText:".* (.*)$":$1]\
  )\
### request SZ N dim ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Schlafzimmer|[Ss][Zz]) (Nachttischlampe|[Nn]) (dimmen|[Dd])$"])(\
    ({TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:replyId]", "Welchen Wert soll ich einstellen?", "5|10|15|20|25", "30|35|40|45|50", "55|60|65|70|75", "80|85|90|95|100", "0|abbrechen")}),\
    setreading $SELF [TelegramBot:msgPeerId] request SZ N dim,\
    sleep 0.001;; setreading $SELF state request SZ N dim\
  )\
  ### request SZ N dim set done ###\
    DOELSEIF\
    ([$SELF:"^msg:.+([0-9]|[1-9][0-9]|100)$"] and\
     ReadingsVal("$SELF", [TelegramBot:msgPeerId], "") eq "request SZ N dim"\
    )(\
      set HUEDevice5 pct [TelegramBot:msgText],\
      ({TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:replyId]",  q{Schlafzimmer Nachttischlampe auf [TelegramBot:msgText] % gedimmt.}, "5|10|15|20|25", "30|35|40|45|50", "55|60|65|70|75", "80|85|90|95|100", "0|beenden")}),\
      sleep 0.001;; setreading $SELF state Schlafzimmer Nachttischlampe [TelegramBot:msgText]\
    )\
### Arbeitszimmer Deckenlampe aus ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Arbeitszimmer|[Aa][Zz]) (Deckenlampe|[Dd]) (aus|0)"])(\
    set HUEGroup1 off,\
    ({Telegram_reply("TelegramBot", "Arbeitszimmer Deckenlampe ausgeschaltet.\n\n/heimdall")}),\
    sleep 0.001;; setreading $SELF state Arbeitszimmer Deckenlampe aus\
  )\
### Arbeitszimmer Deckenlampe ein ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Arbeitszimmer|[Aa][Zz]) (Deckenlampe|[Dd]) (ein|100)"])(\
    set HUEGroup1 pct 100,\
    ({Telegram_reply("TelegramBot", "Arbeitszimmer Deckenlampe eingeschaltet.\n\n/heimdall")}),\
    sleep 0.001;; setreading $SELF state Arbeitszimmer Deckenlampe ein\
  )\
### Arbeitszimmer Deckenlampe % ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Arbeitszimmer|[Aa][Zz]) (Deckenlampe|[Dd]) ([1-9]|[1-9][0-9])$"])(\
    set HUEGroup1 pct [TelegramBot:msgText:".* (.*)$":$1],\
    ({Telegram_reply("TelegramBot", q{Arbeitszimmer Deckenlampe auf [TelegramBot:msgText:".* (.*)$":$1] % gedimmt.\n\n/heimdall})}),\
    sleep 0.001;; setreading $SELF state Arbeitszimmer Deckenlampe [TelegramBot:msgText:".* (.*)$":$1]\
  )\
### request AZ D dim ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Arbeitszimmer|[Aa][Zz]) (Deckenlampe|[Dd]) (dimmen|[Dd])$"])(\
    ({TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:replyId]", "Welchen Wert soll ich einstellen?", "5|10|15|20|25", "30|35|40|45|50", "55|60|65|70|75", "80|85|90|95|100", "0|abbrechen")}),\
    setreading $SELF [TelegramBot:msgPeerId] request AZ D dim,\
    sleep 0.001;; setreading $SELF state request AZ D dim\
  )\
  ### request AZ D dim set done ###\
    DOELSEIF\
    ([$SELF:"^msg:.+([0-9]|[1-9][0-9]|100)$"] and\
     ReadingsVal("$SELF", [TelegramBot:msgPeerId], "") eq "request AZ D dim"\
    )(\
      set HUEGroup1 pct [TelegramBot:msgText],\
      ({TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:replyId]",  q{Arbeitszimmer Deckenlampe auf [TelegramBot:msgText] % gedimmt.}, "5|10|15|20|25", "30|35|40|45|50", "55|60|65|70|75", "80|85|90|95|100", "0|beenden")}),\
      sleep 0.001;; setreading $SELF state Arbeitszimmer Deckenlampe [TelegramBot:msgText]\
    )\
### Wohnzimmer Deckenlampe aus ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Wohnzimmer|[Wz][Zz]) (Deckenlampe|[Dd]) (aus|0)"])(\
    set HUEDevice1 off,\
    ({Telegram_reply("TelegramBot", "Wohnzimmer Deckenlampe ausgeschaltet.\n\n/heimdall")}),\
    sleep 0.001;; setreading $SELF state Wohnzimmer Deckenlampe aus\
  )\
### Wohnzimmer Deckenlampe ein ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Wohnzimmer|[Wz][Zz]) (Deckenlampe|[Dd]) (ein|100)"])(\
    set HUEDevice1 pct 100,\
    ({Telegram_reply("TelegramBot", "Wohnzimmer Deckenlampe eingeschaltet.\n\n/heimdall")}),\
    sleep 0.001;; setreading $SELF state Wohnzimmer Deckenlampe ein\
  )\
### Wohnzimmer Deckenlampe % ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Wohnzimmer|[Wz][Zz]) (Deckenlampe|[Dd]) ([1-9]|[1-9][0-9])$"])(\
    set HUEDevice1 pct [TelegramBot:msgText:".* (.*)$":$1],\
    ({Telegram_reply("TelegramBot", q{Wohnzimmer Deckenlampe auf [TelegramBot:msgText:".* (.*)$":$1] % gedimmt.\n\n/heimdall})}),\
    sleep 0.001;; setreading $SELF state Wohnzimmer Deckenlampe [TelegramBot:msgText:".* (.*)$":$1]\
  )\
### request WZ D dim ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Wohnzimmer|[Wz][Zz]) (Deckenlampe|[Dd]) (dimmen|[Dd])$"])(\
    ({TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:replyId]", "Welchen Wert soll ich einstellen?", "5|10|15|20|25", "30|35|40|45|50", "55|60|65|70|75", "80|85|90|95|100", "0|abbrechen")}),\
    setreading $SELF [TelegramBot:msgPeerId] request WZ D dim,\
    sleep 0.001;; setreading $SELF state request WZ D dim\
  )\
  ### request WZ D dim set done ###\
    DOELSEIF\
    ([$SELF:"^msg:.+([0-9]|[1-9][0-9]|100)$"] and\
     ReadingsVal("$SELF", [TelegramBot:msgPeerId], "") eq "request WZ D dim"\
    )(\
      set HUEDevice1 pct [TelegramBot:msgText],\
      ({TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:replyId]",  q{Wohnzimmer Deckenlampe auf [TelegramBot:msgText] % gedimmt.}, "5|10|15|20|25", "30|35|40|45|50", "55|60|65|70|75", "80|85|90|95|100", "0|beenden")}),\
      sleep 0.001;; setreading $SELF state Wohnzimmer Deckenlampe [TelegramBot:msgText]\
    )\
### Wohnzimmer Spots aus ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Wohnzimmer|[Wz][Zz]) (Spots|[Ss]) (aus|0)"])(\
    set HM_273CDB off,\
    ({Telegram_reply("TelegramBot", "Wohnzimmer Spots ausgeschaltet.\n\n/heimdall")}),\
    sleep 0.001;; setreading $SELF state Wohnzimmer Spots aus\
  )\
### Wohnzimmer Spots ein ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Wohnzimmer|[Wz][Zz]) (Spots|[Ss]) (ein|100)"])(\
    set HM_273CDB pct 100,\
    ({Telegram_reply("TelegramBot", "Wohnzimmer Spots eingeschaltet.\n\n/heimdall")}),\
    sleep 0.001;; setreading $SELF state Wohnzimmer Spots ein\
  )\
### Wohnzimmer Spots % ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Wohnzimmer|[Wz][Zz]) (Spots|[Ss]) ([1-9]|[1-9][0-9])$"])(\
    set HM_273CDB pct [TelegramBot:msgText:".* (.*)$":$1],\
    ({Telegram_reply("TelegramBot", q{Wohnzimmer Spots auf [TelegramBot:msgText:".* (.*)$":$1] % gedimmt.\n\n/heimdall})}),\
    sleep 0.001;; setreading $SELF state Wohnzimmer Spots [TelegramBot:msgText:".* (.*)$":$1]\
  )\
### request WZ S dim ###\
  DOELSEIF\
  ([$SELF:"^msg:.+(Wohnzimmer|[Wz][Zz]) (Spots|[Ss]) (dimmen|[Dd])$"])(\
    ({TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:replyId]", "Welchen Wert soll ich einstellen?", "5|10|15|20|25", "30|35|40|45|50", "55|60|65|70|75", "80|85|90|95|100", "0|abbrechen")}),\
    setreading $SELF [TelegramBot:msgPeerId] request WZ S dim,\
    sleep 0.001;; setreading $SELF state request WZ S dim\
  )\
  ### request WZ S dim set done ###\
    DOELSEIF\
    ([$SELF:"^msg:.+([0-9]|[1-9][0-9]|100)$"] and\
     ReadingsVal("$SELF", [TelegramBot:msgPeerId], "") eq "request WZ S dim"\
    )(\
      set HM_273CDB pct [TelegramBot:msgText],\
      ({TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:replyId]",  q{Wohnzimmer Spots auf [TelegramBot:msgText] % gedimmt.}, "5|10|15|20|25", "30|35|40|45|50", "55|60|65|70|75", "80|85|90|95|100", "0|beenden")}),\
      sleep 0.001;; setreading $SELF state Wohnzimmer Spots [TelegramBot:msgText]\
    )
attr lightning_dialog userattr do notexist msgPeerId repeatsame
attr lightning_dialog alias Telegram: Beleuchtung Dialog
attr lightning_dialog do always
attr lightning_dialog event-on-change-reading none
attr lightning_dialog group Dialog
attr lightning_dialog icon audio_playlist
attr lightning_dialog notexist notexist
attr lightning_dialog repeatsame 0:1
attr lightning_dialog room Telegram
attr lightning_dialog subType dialog

und noch die Waschmaschine:
Waschkeller_washer_dialog
defmod Waschkeller_washer_dialog DOIF ### Waschmaschine ###\
  ([$SELF:"^msg: Waschmaschine$"])(\
    ({my $msg = q{\
        Waschmaschine: [HM_2C10D8_Sw:state:"(.*)":($1 =~ /on/?"eingeschaltet":"ausgeschaltet")]\
        \nModus: [Waschkeller_washer_controlUnit:controlMode:"(.*)":($1 =~ /auto/?"Automatik":"Manuell")]  ([Waschkeller_washer_controlUnit:time])\
      };;;;\
      my @rows;;;;\
        push(@rows, q{Zeitprogramm stoppen}) if("[Waschkeller_washer_controlUnit:controlMode]" eq "auto");;;;\
        push(@rows, q{programmieren}) if("[HM_2C10D8_Sw:state]" ne "on");;;;\
        push(@rows, q{einschalten}) if("[HM_2C10D8_Sw:state]" ne "on");;;;\
        push(@rows, q{Verlaufsdiagramm});;;;\
        push(@rows, q{abbrechen});;;;\
     TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:msgPeerId]", $msg, @rows);;;;\
     }\
    ),\
    setreading $SELF [TelegramBot:msgPeerId] Waschmaschine,\
    sleep 0.001;; setreading $SELF state Waschmaschine\
  )\
### set manual ###\
  DOELSEIF\
  ([$SELF:"^msg: Zeitprogramm stoppen$"] and\
   ReadingsVal("$SELF", [TelegramBot:msgPeerId], "") eq "Waschmaschine"\
  )(\
    set Waschkeller_washer_controlUnit controlMode manual,\
    ({Telegram_reply("TelegramBot", "Das Zeitprogramm wurde gestoppt.\n\n/heimdalll")}),\
    setreading $SELF [TelegramBot:msgPeerId] set manual,\
    sleep 0.001;; setreading $SELF state set manual\
  )\
### program ###\
  DOELSEIF\
  ([$SELF:"^msg: programmieren$"] and\
   ReadingsVal("$SELF", [TelegramBot:msgPeerId], "") eq "Waschmaschine"\
  )(\
    ({my $msg = q{\
        Wann soll die Wäsche fertig sein?\
        \nBitte Uhrzeit in HH:MM angeben.\
        \nAktuell ist [Waschkeller_washer_controlUnit:time] eingestellt.\
      };;;;\
      my @rows;;;;\
        push(@rows, q{bestätigen|abbrechen});;;;\
        push(@rows, q{00:00|00:15|00:30|00:45});;;;\
        push(@rows, q{01:00|01:15|01:30|01:45});;;;\
        push(@rows, q{02:00|02:15|02:30|02:45});;;;\
        push(@rows, q{03:00|03:15|03:30|03:45});;;;\
        push(@rows, q{04:00|04:15|04:30|04:45});;;;\
        push(@rows, q{05:00|05:15|05:30|05:45});;;;\
        push(@rows, q{06:00|06:15|06:30|06:45});;;;\
        push(@rows, q{07:00|07:15|07:30|07:45});;;;\
        push(@rows, q{08:00|08:15|08:30|08:45});;;;\
        push(@rows, q{09:00|09:15|09:30|09:45});;;;\
        push(@rows, q{10:00|10:15|10:30|10:45});;;;\
        push(@rows, q{11:00|11:15|11:30|11:45});;;;\
        push(@rows, q{12:00|12:15|12:30|12:45});;;;\
        push(@rows, q{13:00|13:15|13:30|13:45});;;;\
        push(@rows, q{14:00|14:15|14:30|14:45});;;;\
        push(@rows, q{15:00|15:15|15:30|15:45});;;;\
        push(@rows, q{16:00|16:15|16:30|16:45});;;;\
        push(@rows, q{17:00|17:15|17:30|17:45});;;;\
        push(@rows, q{18:00|18:15|18:30|18:45});;;;\
        push(@rows, q{19:00|19:15|19:30|19:45});;;;\
        push(@rows, q{20:00|20:15|20:30|20:45});;;;\
        push(@rows, q{21:00|21:15|21:30|21:45});;;;\
        push(@rows, q{22:00|22:15|22:30|22:45});;;;\
        push(@rows, q{23:00|23:15|23:30|23:45});;;;\
      TelegramBot_SendKeyboard("TelegramBot", "[TelegramBot:msgPeerId]", $msg, @rows);;;;\
     }\
    ),\
    setreading $SELF [TelegramBot:msgPeerId] request time,\
    sleep 0.001;; setreading $SELF state request time\
  )\
  ### time ###\
    DOELSEIF\
    (([$SELF:"^msg: bestätigen$"] or\
      [$SELF:"^msg: ([0-1][0-9]|2[0-3]):[0-5][0-9]$"]\
     ) and\
     ReadingsVal("$SELF", [TelegramBot:msgPeerId], "") eq "request time"\
    )(\
      IF ([TelegramBot:msgText] =~ /([0-1][0-9]|2[0-3]):[0-5][0-9]/)(\
        set Waschkeller_washer_controlUnit time [TelegramBot:msgText]\
      ),\
      set Waschkeller_washer_controlUnit controlMode auto,\
      ({my $msg = q{\
          Das Zeitprogramm wurde eingestellt.\
        \nDie Wäsche wird voraussichtlich um [Waschkeller_washer_controlUnit:time] Uhr fertig sein.\
        \nBitte die Waschmaschine vorbereiten.\
        \n\
        \n/heimdall\
        };;;;\
        Telegram_reply("TelegramBot", $msg);;;;\
       }\
      ),\
      setreading $SELF [TelegramBot:msgPeerId] set auto,\
      sleep 0.001;; setreading $SELF state set auto\
    )\
### set on ###\
  DOELSEIF\
  ([$SELF:"^msg: einschalten$"] and\
   ReadingsVal("$SELF", [TelegramBot:msgPeerId], "") eq "Waschmaschine"\
  )(\
    set Waschkeller_washer_controlUnit controlMode manual,\
    set HM_2C10D8_Sw on,\
    setreading $SELF [TelegramBot:msgPeerId] set on,\
    sleep 0.001;; setreading $SELF state set on\
  )\
### send plot ###\
  DOELSEIF\
  ([$SELF:"^msg: Verlaufsdiagramm$"] and\
   ReadingsVal("$SELF", [TelegramBot:msgPeerId], "") eq "Waschmaschine"\
  )(\
    ({TelegramBot_ExecuteCommand($defs{TelegramBot}, [TelegramBot:msgPeerId], '{plotAsPng("Waschkeller_washer_SVG")}');;;; return;;;;}),\
    ({Telegram_reply("TelegramBot", "/heimdall")}),\
    setreading $SELF [TelegramBot:msgPeerId] send plot,\
    sleep 0.001;; setreading $SELF state send plot\
  )
attr Waschkeller_washer_dialog userattr do notexist msgPeerId repeatsame
attr Waschkeller_washer_dialog alias Telegram: Waschmaschine Dialog
attr Waschkeller_washer_dialog do always
attr Waschkeller_washer_dialog event-on-change-reading none
attr Waschkeller_washer_dialog group Dialog
attr Waschkeller_washer_dialog icon audio_playlist
attr Waschkeller_washer_dialog notexist notexist
attr Waschkeller_washer_dialog repeatsame 0:1
attr Waschkeller_washer_dialog room Telegram
attr Waschkeller_washer_dialog subType dialog

Zum Abschluss noch ein kleines Video:
Youtube: FHEM Telegram Dialoge
Pi3 mit fhem.cfg + DbLog/logProxy
FHEM Module: archetype, LuftdatenInfo, monitoring, Nmap
FHEM Module ToDo: alexaWebApp, DaikinD3nIU, DaikinHTTPinterface, TBot_Dialog
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline hartenthaler

  • Full Member
  • ***
  • Beiträge: 256
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #49 am: 01 Dezember 2016, 20:14:26 »
Wow! Heftig! Insbesondere die Licht-Keule!

Was mich dabei irritiert ist die enge Vermischung zwischen Funktion (etwa Waschmaschine steuern oder Licht steuern/kontrollieren) und Dialog mit dem Nutzer. Ich denke, dass man da eine Spaghetti-Lösung bekommt, die kaum zu warten ist. Ich denke es ist sinnvoll die Funktionen in perl-Scripte zu verpacken und jeweils zum Beispiel Unterfunktionen anzulegen, die sich an natürlicher Sprache orientieren, also einen Zustand in einem verständlichen Satz ausdrücken.

Der Dialog mit dem Nutzer kann dann per Chat oder alternativ auch über Sprachein-/ausgabe erfolgen. Beides muss möglich sein ohne dass man die zu Grunde liegenden Funktionen anpacken muss. Ein Satz wie "Das Schlafzimmerfenster und das Küchenfenster sind offen." eignet sich für einen Chat, ein Display und eine Sprachausgabe.

Für den Chat per Telegram nutze ich RiveScript per TALKTOME (s. http://www.fhemwiki.de/wiki/TALKTOME_%26_TALKTOUSER_-_Sprachverarbeitung_f%C3%BCr_Nutzerinteraktionen). Sehr flexibel und viel leichter zu warten als eine DOIF-Eigenkonstruktion. Ich bewundere Deine Lösung @igami, befürchte aber dass sie auf Dauer nicht tragen wird.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...
Zustimmung Zustimmung x 1 Liste anzeigen

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1885
  • RTFM
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #50 am: 01 Dezember 2016, 20:31:21 »
Anfangs wollte ich dafür auch ein eigenes Modul schreiben, dann kam SirUli mit TALKTOME (dabei fehlt mir noch die Benutzerverwaltung). Auch wollte ich mir den msg Befehl noch mal genauer anschauen.

Was für mich gegen eine globale Lösung spricht:
- Ich möchte keine Sprachsteuerung haben
- Ich habe Keyboards bei Telegram!

TALKTOME habe ich mir noch nicht sooo genau angesehen, ich vermute aber mal, dass DOIF mächtiger ist was die Abfrage von Status angeht.
Weiterhin finde ich von Vorteil, dass ich mehrere einzelne Dialog Definitionen habe. Beim testen funktioniert dann vielleicht ein Dialog nicht, aber ich mache nicht die ganze Konfiguration zu nichte.

Man könnte auch sagen viele Wege führen nach Rom. Meine Lösung ist sicher nicht perfekt, die TALKTOME aber auch nicht ;)
Auch gilt: never touch a running System und bei mir funktioniert es gut.

Auf meiner ToDo liste steht noch Sub um indirekt zu antworten (z.B. ich stelle die Waschmaschine, also möchte ich auch die Antwort haben wenn sie fertig ist). Hier sehe ich auch wieder den Vorteil von meiner Lösung, ich programmiere morgens die Waschmaschine und bekomme die Antwort wenn die Waschmaschine fertig ist, also FHEM startet den Dialog und ich quittiere nur, dass ich die Aufgabe (Wäsche aufhängen) erledigt habe.
Pi3 mit fhem.cfg + DbLog/logProxy
FHEM Module: archetype, LuftdatenInfo, monitoring, Nmap
FHEM Module ToDo: alexaWebApp, DaikinD3nIU, DaikinHTTPinterface, TBot_Dialog
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.

Offline hartenthaler

  • Full Member
  • ***
  • Beiträge: 256
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #51 am: 02 Dezember 2016, 01:55:36 »
Anfangs wollte ich dafür auch ein eigenes Modul schreiben, dann kam SirUli mit TALKTOME (dabei fehlt mir noch die Benutzerverwaltung). Auch wollte ich mir den msg Befehl noch mal genauer anschauen.
ja, msg ist mächtig und sehr flexibel, wird bei der TALKTOME-Lösung verwendet. Und ja, dass man bei TALKTOME derzeit nur einen Nutzer hat ist einschränkend.

Zitat
Was für mich gegen eine globale Lösung spricht:
- Ich möchte keine Sprachsteuerung haben
- Ich habe Keyboards bei Telegram!
Ich denke, dass gerade zu Hause der Sprachsteuerung zusammen mit einer Gestenerkennung die Zukunft gehört: "Mache diese Lampe an" und deuten auf die Lampe.

Zitat
TALKTOME habe ich mir noch nicht sooo genau angesehen, ich vermute aber mal, dass DOIF mächtiger ist was die Abfrage von Status angeht.
Deswegen mein Vorschlag die Funktionen streng von der Dialogschnittstelle zutrennen. Alles was geschaltet und verwaltet wird, habe ich in fhem (u.a. in Funktionen in der myUtils.pm). Die gesamte Dialogschnittstelle setzt auf msg und TALKOME mit RiveScript auf. Man kann in RiveScript alle Readings von fhem abfragen und so in den Dialog einbauen, aber die gesamte Dialogsteuerung läuft in RiveScript sehr flexibel. Entweder im Freitext Fragen/Antworten-Stil (so habe ich es gemacht) oder in einer Menüform (will ich noch zusätzlich umsetzen, weil das manchmal schneller und übersichtlicher geht als mit Frage/Antwort, allerdings ist das dann nicht mehr für Sprachein-/ausgabe geeignet). RiveScript ist ein wirklich mächtiges und leicht zu administrierendes Chat-Tool (mit ein paar kleineren nervigen Spezialitäten); für diese Funktion ist aus meiner Sicht fhem nicht gut geeignet.

Zitat
Weiterhin finde ich von Vorteil, dass ich mehrere einzelne Dialog Definitionen habe. Beim testen funktioniert dann vielleicht ein Dialog nicht, aber ich mache nicht die ganze Konfiguration zu nichte.
Ja, das ist wichtig. Man kann den RiveScript-Dialog in viele Themenfelder strukturieren, man kann kontextabhängige Dialoge gestalten, man kann alles in einzelne kleine Dateien verpacken. Ist auch sehr flexibel. Aber richtig, wenn man einen Syntaxfehler einbaut ist RiveScript sehr bockig und wenig debug-freundlich. Also immer testen und schwierige Dialoge vorab in einem sehr komfortablen online-Simulator austesten.

Zitat
Auf meiner ToDo liste steht noch Sub um indirekt zu antworten (z.B. ich stelle die Waschmaschine, also möchte ich auch die Antwort haben wenn sie fertig ist). Hier sehe ich auch wieder den Vorteil von meiner Lösung, ich programmiere morgens die Waschmaschine und bekomme die Antwort wenn die Waschmaschine fertig ist, also FHEM startet den Dialog und ich quittiere nur, dass ich die Aufgabe (Wäsche aufhängen) erledigt habe.
Das ist bei TALKTOME auch kein Problem. Ich schiesse zu festen Zeiten (etwa morgens um 7:00 Uhr) oder bei bestimmten Ereignissen in fhem (wie Waschmaschine ist fertig) einfach eine Telegram-Nachricht in den Chat rein. Das mit dem Quittieren ist dann allerdings nicht so elegant, da der Kontext nicht da ist. Das ist wirklich ein Vorteil Deiner Lösung. Wenn ich das gleiche haben möchte, dann müsste ich mir dazu noch eine extra-Telegram-Logik basteln.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

Offline hartenthaler

  • Full Member
  • ***
  • Beiträge: 256
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #52 am: 02 Dezember 2016, 03:42:41 »
Ich habe mal versucht die DOIF-Lösung nachzubauen. Komme aber noch nicht zum Ziel.

Was habe ich gemacht
  • die Grundkonstruktion übernommen
  • beim BotFather einen neuen Bot angelegt
  • ein neues Telegram Device TelegramBot angelegt
  • die Telegram IDs von mir und meiner Frau eingepflegt
  • den opened_windows_dialog als ein Beispiel angelegt (und dabei noch das fehlende userattr description ergänzt)

Nun kann ich per Telegram chatten, d.h. die Kommunikation ist in beiden Richtungen durchgängig. Aber es erfolgt keinerlei Reaktion weder auf /heimdall noch auf /start.

Im Logfile finde ich u.a.
heimdall_dialog: {Telegram_reply("TelegramBot", "Dialog beendet.\n\n/heimdall");;}: Undefined subroutine &main::Telegram_reply called at (eval 3537) line 1.
TelegramBot_SendIt TelegramBot: Failed with :FAILED peer not found :[TelegramBot:replyId]::
TelegramBot_Callback TelegramBot: resulted in :NonBlockingGet: returned FAILED peer not found :[TelegramBot:replyId]:: from SendIt

Kann es sein, dass Du irgendwo noch eine Routine Telegram_reply hast? Die TelegramBot:replyId ist eigentlich vorhanden und richtig gesetzt.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1885
  • RTFM
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #53 am: 02 Dezember 2016, 06:04:07 »
ja, msg ist mächtig und sehr flexibel, wird bei der TALKTOME-Lösung verwendet. Und ja, dass man bei TALKTOME derzeit nur einen Nutzer hat ist einschränkend.
Wie gesagt, ich habe mich damit noch nicht so beschäftigt, da ich keine Sprachausgabe habe und die gesamte Kommunikation eh über Telegram abläuft. Aber anschauen werde ich es mir noch mal. wenn ich Zeit habe  ::)

Ich denke, dass gerade zu Hause der Sprachsteuerung zusammen mit einer Gestenerkennung die Zukunft gehört: "Mache diese Lampe an" und deuten auf die Lampe.
Also das ist nun wirklich noch Zukunftsmusik, zumindest für mich. Meine Anwesenheitserkennung basiert auf LAN-Ping. Von Gestenerkennung bin ich weit entfernt. Und auch wieder keine Hardware zum erkennen der Sprache vorhanden.

Deswegen mein Vorschlag die Funktionen streng von der Dialogschnittstelle zutrennen. Alles was geschaltet und verwaltet wird, habe ich in fhem (u.a. in Funktionen in der myUtils.pm). Die gesamte Dialogschnittstelle setzt auf msg und TALKOME mit RiveScript auf. Man kann in RiveScript alle Readings von fhem abfragen und so in den Dialog einbauen, aber die gesamte Dialogsteuerung läuft in RiveScript sehr flexibel. Entweder im Freitext Fragen/Antworten-Stil (so habe ich es gemacht) oder in einer Menüform (will ich noch zusätzlich umsetzen, weil das manchmal schneller und übersichtlicher geht als mit Frage/Antwort, allerdings ist das dann nicht mehr für Sprachein-/ausgabe geeignet). RiveScript ist ein wirklich mächtiges und leicht zu administrierendes Chat-Tool (mit ein paar kleineren nervigen Spezialitäten); für diese Funktion ist aus meiner Sicht fhem nicht gut geeignet.
Ja, das ist wichtig. Man kann den RiveScript-Dialog in viele Themenfelder strukturieren, man kann kontextabhängige Dialoge gestalten, man kann alles in einzelne kleine Dateien verpacken. Ist auch sehr flexibel. Aber richtig, wenn man einen Syntaxfehler einbaut ist RiveScript sehr bockig und wenig debug-freundlich. Also immer testen und schwierige Dialoge vorab in einem sehr komfortablen online-Simulator austesten.
Das ist bei TALKTOME auch kein Problem. Ich schiesse zu festen Zeiten (etwa morgens um 7:00 Uhr) oder bei bestimmten Ereignissen in fhem (wie Waschmaschine ist fertig) einfach eine Telegram-Nachricht in den Chat rein. Das mit dem Quittieren ist dann allerdings nicht so elegant, da der Kontext nicht da ist. Das ist wirklich ein Vorteil Deiner Lösung. Wenn ich das gleiche haben möchte, dann müsste ich mir dazu noch eine extra-Telegram-Logik basteln.
Ich hab mich auch noch nicht richtig mit RiveScript beschäftigt, da ich ja schon eine "funktionierende" Lösung hatte die auch für mehrere Benutzer möglich ist. Solange diese Einschränkung noch vorhanden ist werde ich mich auch nicht damit auseinandersetzen. Zudem müsste ich dann ja noch eine Sprache neben perl und "DOIF" lernen.

Ich habe mal versucht die DOIF-Lösung nachzubauen. Komme aber noch nicht zum Ziel.

Was habe ich gemacht
  • die Grundkonstruktion übernommen
  • beim BotFather einen neuen Bot angelegt
  • ein neues Telegram Device TelegramBot angelegt
  • die Telegram IDs von mir und meiner Frau eingepflegt
  • den opened_windows_dialog als ein Beispiel angelegt (und dabei noch das fehlende userattr description ergänzt)
description gehört eigentlich gar nicht zum Dialog, sondern zum archetype Modul und dient nur dazu den alias zu setzen.

Nun kann ich per Telegram chatten, d.h. die Kommunikation ist in beiden Richtungen durchgängig. Aber es erfolgt keinerlei Reaktion weder auf /heimdall noch auf /start.

Im Logfile finde ich u.a.
heimdall_dialog: {Telegram_reply("TelegramBot", "Dialog beendet.\n\n/heimdall");;}: Undefined subroutine &main::Telegram_reply called at (eval 3537) line 1.
TelegramBot_SendIt TelegramBot: Failed with :FAILED peer not found :[TelegramBot:replyId]::
TelegramBot_Callback TelegramBot: resulted in :NonBlockingGet: returned FAILED peer not found :[TelegramBot:replyId]:: from SendIt

Kann es sein, dass Du irgendwo noch eine Routine Telegram_reply hast? Die TelegramBot:replyId ist eigentlich vorhanden und richtig gesetzt.
Ja, habe ich tatsächlich noch, ein überbleibsel der eigentlich nicht mehr unbedingt gebraucht wird
sub Telegram_reply($$) {
  my ($name, $msg) = @_;
  my $peer = ReadingsVal($name, "msgChat", "") ne "" ? (split(" ", ReadingsVal($name, "msgChat", ""), 2))[0] : ReadingsVal($name, "msgPeerId", "");
 
  fhem("set $name message \@$peer $msg");
}
Sendet eigentlich nur eine Nachricht an die replyId.
Wie gesagt, alles noch nicht ganz rund.
Pi3 mit fhem.cfg + DbLog/logProxy
FHEM Module: archetype, LuftdatenInfo, monitoring, Nmap
FHEM Module ToDo: alexaWebApp, DaikinD3nIU, DaikinHTTPinterface, TBot_Dialog
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1885
  • RTFM
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #54 am: 06 Dezember 2016, 21:18:14 »
Ich überlege gerade ob ich nicht einfach ein Modul für die Telegram Dialoge bauen soll. Dafür hätte ich jedoch gerne ein bisschen input, damit ich mir die Syntax nicht alleine ausdenken muss ;)

Wer wäre denn alles an so einem Modul interessiert?
Pi3 mit fhem.cfg + DbLog/logProxy
FHEM Module: archetype, LuftdatenInfo, monitoring, Nmap
FHEM Module ToDo: alexaWebApp, DaikinD3nIU, DaikinHTTPinterface, TBot_Dialog
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.
Zustimmung Zustimmung x 1 Liste anzeigen

Offline Maista

  • Full Member
  • ***
  • Beiträge: 102
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #55 am: 06 Dezember 2016, 22:36:24 »
Hallo Michael,

ein Modul finde ich gut!

Als Wochenend-FHEM-Versteher ist es nicht immer einfach alles mitzubekommen.
Gerade wenn man nur sporadisch dazu kommt etwas weiter zu machen.

Der Syntax sollte natürlich so einfach wie möglich sein  ;) ;D

Da ich bisher noch nicht wirklich viel probiert habe (manchmal auch weil es um 23:55 nicht funktionieren wollte)
tue ich mich aber schwer genau zu sagen wie das aussehen sollte.

Danke erst einmal für die bisherigen Beispiele!

Gruss Gerd

Offline CBSnake

  • Full Member
  • ***
  • Beiträge: 158
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #56 am: 07 Dezember 2016, 06:30:37 »
Moin,
hätte auch interesse. Primär nutzen wir zwar die FTUI, aber in Gebieten mit schwachem Mobilnetz wären ausgewählt Kommandos per Telegram top. Und ich kann extern, aktuell die Nachbarin die unseren Netzwerkspeicher mit nutzt und diesen per telegram startet, auch einen genau definierten Ausschnitt an Befehlen freigeben.
Grüße
Achim

Gesendet von meinem SM-P605 mit Tapatalk

FHEM auf Raspberry 2, HM-Lan Adapter, RaZberry Modul, JeeLink. Geplant: Fhemduino, Sonos.

Offline münchner

  • Newbie
  • Beiträge: 2
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #57 am: 09 Dezember 2016, 22:09:49 »
Moin,

an so einem Modul wäre ich auch interessiert.  ;D

Vor allem an einer Möglichkeit auf ein Ereignis zu Hause gleich die passenden Auswahlmöglichkeiten zu bekommen und wenn man die dann noch unterschiedlichen PEERS Zuordnen kann wäre es Spitze !

Ich danke schon mal für die Mühe, die Du dir bisher schon gemacht hast !

Viele Grüße

Matze

Online Fixel2012

  • Sr. Member
  • ****
  • Beiträge: 691
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #58 am: 04 Januar 2017, 16:58:59 »
Wäre auch Interessiert!

Würde helfen zu Testen, das ist leider das einzige mit dem ich dienen kann.

Grüße

Fixel

Offline gent

  • Full Member
  • ***
  • Beiträge: 161
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #59 am: 09 Januar 2017, 21:52:34 »
Hi,

warum bekomme ich im logfile immer diese Meldungen:

2017.01.09 21:47:29 1: PERL WARNING: Subroutine myUtilsTelegram_Initialize redefined at ./FHEM/99_myUtilsTelegramMessenger.pm line 73.
2017.01.09 21:47:29 1: PERL WARNING: Subroutine fhem_bot redefined at ./FHEM/99_myUtilsTelegramMessenger.pm line 76.
2017.01.09 21:47:29 1: PERL WARNING: Subroutine fhem_bot_check_permission redefined at ./FHEM/99_myUtilsTelegramMessenger.pm line 180.
2017.01.09 21:47:29 1: PERL WARNING: Subroutine fhem_bot_response redefined at ./FHEM/99_myUtilsTelegramMessenger.pm line 203.
2017.01.09 21:47:29 1: PERL WARNING: Subroutine fhem_bot_imgresponse redefined at ./FHEM/99_myUtilsTelegramMessenger.pm line 208.
2017.01.09 21:47:29 1: PERL WARNING: Subroutine fhem_bot_svgresponse redefined at ./FHEM/99_myUtilsTelegramMessenger.pm line 213.
2017.01.09 21:47:29 1: PERL WARNING: Subroutine fhem_bot_fhem_cmd redefined at ./FHEM/99_myUtilsTelegramMessenger.pm line 227.

Ich habe es so gemacht, wie auf Seite 1 beschrieben. Bis auf die Meldungen im logfile scheint alles so zu funktionieren.

Viele Grüße vom gent
fhem auf rPi3 mit USB boot, 1 x cul886, 1 x cul866 (hm), pilight, homebridge, YeeLight, FlowerSens, ESA2000

Offline binford6000

  • Full Member
  • ***
  • Beiträge: 140
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #60 am: 10 Januar 2017, 08:55:33 »
Zitat
Ich überlege gerade ob ich nicht einfach ein Modul für die Telegram Dialoge bauen soll. Dafür hätte ich jedoch gerne ein bisschen input, damit ich mir die Syntax nicht alleine ausdenken muss ;)

Wer wäre denn alles an so einem Modul interessiert?

Hi Michael,

das sieht alles schon sehr schick aus und ich hätte natürlich auch großes Interesse an einem Modul für einen Chat-Dialog mit FHEM!   :D

VG Sebastian
FHEM 5.8, RPi3 u. RPi1(CUL), InterTechno, EnOcean, PSC234, CRC-2-6-02, 6xHUE Bulbs, 5x AmazonDASH, GTAG, SONOS, ENIGMA2, YAMAHA_AVR, KODI, WINCONNECT, AMAD,  IPCAM, Alexa, HomeKit, TelegramBot, Yowsup, livetracking

Offline sig10680

  • New Member
  • *
  • Beiträge: 32
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #61 am: 10 Januar 2017, 11:54:39 »
Hallo,
ich wäre auch an so einen Modul interessiert.

mfg Sig10680

Offline magix99

  • New Member
  • *
  • Beiträge: 48
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #62 am: 12 Januar 2017, 18:28:03 »
Hi,

ich möchte mir mit dem Befehl ein Plot der Benzinpreise schicken lassen, habe aber von Perl nicht viel Ahnung.
Da ich aber auch eine Gruppe erstellt habe, geht die Nachricht nicht an mich sondern immer an die Gruppe.
Wie kann man das ändern?

if($msgText eq "/benzin_plot")
{TelegramBot_ExecuteCommand($defs{"Telegram"}, meineID, '{plotAsPng("SVG_FileLog_Benzinpreis_1")}');; return;;}

Bei den normalen Befehlen geht es, aber nicht bei dem Format zu Plot versenden.

if($msgText eq "/lampe_an"){
fhem "set FBDECT_Fritzbox_18 on meineID)."

Offline pandabear_de

  • Jr. Member
  • **
  • Beiträge: 63
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #63 am: 24 Januar 2017, 22:41:24 »
Hi,
ich bin gerade über diesen Thread gestoßen und finde ihn sehr interessant. Bisher habe ich meinen Dialog via Telegram komplett über einen Notify abgewickelt. Die Auslagerung in ein Modul macht m.E. Sinn. Ich werde dieses Wochenende mal etwas Spieltzeit reservieren.  ;)

Ein Hinweis an dieser Stelle. Vor ich Schlatungen über Telegram erlauben wollte, war es mir wichtig, dies noch irgendwie mit einem Passwort abzusichern. - Zusammen mit Betateilchen habe ich zu diesem Zweck ein neues Modul (98_GoogleAuth) entwickelt, mit der One-Time-Passwords mit Google Authenticator geprüft werden können.

Also z.B.
Licht an 123456
Wenn 123456 ein gültiger Token ist, geht das Licht an.

Ich prüfe bei mir nun bei jeder Message nach, ob die letzten 6 Zeichen einen gültiger Token ergeben und kann dann bei meinen Schaltungen in der IF Abfrage prüfen, ob eine erfolgreiche Authentifizierung vorliegt.

Weitere Infos unter: https://fhem.de/commandref.html#GoogleAuth

Gruß
Jakob

« Letzte Änderung: 24 Januar 2017, 22:42:59 von pandabear_de »
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline PSI69

  • New Member
  • *
  • Beiträge: 40
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #64 am: 09 Februar 2017, 17:01:15 »
Hi,

ich habe gerade eben diesen Thread komplett gelesen, habe großes Interesse an einem Modul und teste gern!

Tschau Peter
FHEM 5.7 auf RPi 3
1*HMUSB | 2*HMUARTLGW
1*HM-Dis-WM55 | 1*HM-LC-SW1-FM | 1*HM-OU-CFM-PL | 2*HM-PB-6-WM55 | 1*HM-RC-4-3 | 15*HM-SEC-SD | 14*HM-SEC-SCo | SMA | IPCam(s)

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1885
  • RTFM
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #65 am: 09 Februar 2017, 17:28:07 »
Hach, dann muss ich ja wirklich mal was machen :D
Pi3 mit fhem.cfg + DbLog/logProxy
FHEM Module: archetype, LuftdatenInfo, monitoring, Nmap
FHEM Module ToDo: alexaWebApp, DaikinD3nIU, DaikinHTTPinterface, TBot_Dialog
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.

Offline binford6000

  • Full Member
  • ***
  • Beiträge: 140
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #66 am: 09 Februar 2017, 23:01:46 »
Zitat
Hach, dann muss ich ja wirklich mal was machen

Das wäre echt cool! Ich würde mich auch als Betatester anbieten!  8)

VG Sebastian
FHEM 5.8, RPi3 u. RPi1(CUL), InterTechno, EnOcean, PSC234, CRC-2-6-02, 6xHUE Bulbs, 5x AmazonDASH, GTAG, SONOS, ENIGMA2, YAMAHA_AVR, KODI, WINCONNECT, AMAD,  IPCAM, Alexa, HomeKit, TelegramBot, Yowsup, livetracking

Offline Wuehler

  • New Member
  • *
  • Beiträge: 46
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #67 am: 11 Februar 2017, 13:39:39 »
Ich habe mich neulich ein wenig mit dem IBM Watson Conversation-Service beschäftigt. Den kann man privat bis zu einem gewissen Umfang kostenfrei nutzen. War ganz interessant. In recht kurzer Zeit konnte man Dialoge zusammenklicken, die einigermaßen natürlich gegenüber dem Nutzer wirkten.
Ist aber insgesamt recht viel Aufwand, wenn man nicht nur per Codeworten chatten will.

Offline hartenthaler

  • Full Member
  • ***
  • Beiträge: 256
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #68 am: 12 Februar 2017, 20:56:05 »
Mit dem Watson Conversation Dienst habe ich mich noch nicht näher beschäftigt. Ich nutze RiveScript mit dem genialen fhem-TALKTOME-Modul (s.
https://forum.fhem.de/index.php/topic,54863.msg583423.html#msg583423). Dort nutze ich den Dialog mit natürlicher Sprache, wobei ich etliches so definiert habe, dass auch mal nur ein eindeutiges Stichwort reicht. Ein anderer Ansatz liesse sich da noch kombinieren nämlich eine Menüführung, die manchmal besser geeignet ist, etwa wenn es um das Schalten von Lampen geht. Ein "schalte die lampe an der decke im wohnzimmer" setzt voraus, dass man für jede Lampe weiß wie man sie nennen kann, und ist für Spracheingabe ok, bei einem Text-Chat aber etwas länglich; da wäre /licht mit der Ausgabe einer anklickbaren Liste aller Räume (keyboards) und dann einer Liste aller Lampen in einem Raum intuitiver, passt aber nicht für einen Sprachdialog. Mein Traum wäre ja die Kombination von Sprache mit Geste: "diese Lampe einschalten" und "Fingerzeig zur Lampe".
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

Offline andies

  • Sr. Member
  • ****
  • Beiträge: 549
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #69 am: 20 März 2017, 13:35:40 »
Ich hätte auch großes Interesse an einem solchen Modul.

<EDIT>Die Fehlermeldung hat sich erledigt, ich wusste nicht, wie man ein userattr setzt. Sorry.</EDIT>
« Letzte Änderung: 20 März 2017, 17:41:21 von andies »
FHEM 5.8 auf RaspPi3 (Raspbian jessie 4.9.35-v7+); Perl: v5.20.2
SIGNALduino (433 MHz) und miniCUL (868 MHz, derzeit noch ungenutzt)
mehrere Brennenstuhl-IT, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor

Offline andies

  • Sr. Member
  • ****
  • Beiträge: 549
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #70 am: 20 März 2017, 22:35:40 »
So ich habe heute was Zeit gehabt und habe mein FHEMBot-Script noch was angepasst.
<EDIT>Wettersymbole habe ich doch noch einbinden können.</EDIT>
« Letzte Änderung: 21 März 2017, 06:50:06 von andies »
FHEM 5.8 auf RaspPi3 (Raspbian jessie 4.9.35-v7+); Perl: v5.20.2
SIGNALduino (433 MHz) und miniCUL (868 MHz, derzeit noch ungenutzt)
mehrere Brennenstuhl-IT, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor

Offline andies

  • Sr. Member
  • ****
  • Beiträge: 549
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #71 am: 21 März 2017, 06:51:02 »
Besteht die Möglichkeit, die Favorite-Keyboards zweispaltig zu machen? In der Commandref steht drin, dass die keyboards noch gar nicht unterstützt werden, was glücklicherweise nicht der Fall ist: gerade die Keyboards sind ein großartiges Tool, danke!
FHEM 5.8 auf RaspPi3 (Raspbian jessie 4.9.35-v7+); Perl: v5.20.2
SIGNALduino (433 MHz) und miniCUL (868 MHz, derzeit noch ungenutzt)
mehrere Brennenstuhl-IT, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1885
  • RTFM
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #72 am: 21 März 2017, 10:51:20 »
Besteht die Möglichkeit, die Favorite-Keyboards zweispaltig zu machen? In der Commandref steht drin, dass die keyboards noch gar nicht unterstützt werden, was glücklicherweise nicht der Fall ist: gerade die Keyboards sind ein großartiges Tool, danke!
Ich glaube du meinst eher das telegramBot modul, dann ist das hier der falsche thread.
Pi3 mit fhem.cfg + DbLog/logProxy
FHEM Module: archetype, LuftdatenInfo, monitoring, Nmap
FHEM Module ToDo: alexaWebApp, DaikinD3nIU, DaikinHTTPinterface, TBot_Dialog
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.

Offline andies

  • Sr. Member
  • ****
  • Beiträge: 549
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #73 am: 21 März 2017, 13:43:04 »
Danke, Anfrage habe ich verschoben.
FHEM 5.8 auf RaspPi3 (Raspbian jessie 4.9.35-v7+); Perl: v5.20.2
SIGNALduino (433 MHz) und miniCUL (868 MHz, derzeit noch ungenutzt)
mehrere Brennenstuhl-IT, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor

Offline andies

  • Sr. Member
  • ****
  • Beiträge: 549
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #74 am: 27 März 2017, 12:42:29 »
Ich unternehme hier einen zweiten Versuch. Ist das die richtige Stelle um das zu diskutieren:
2017.03.27 09:24:21 3: eval: my $EVENT='msgText: /system';my $EVTPART0='msgText:';my $NAME='TelegramBot';my $EVTPART1='/system';my $TYPE='TelegramBot';my $SELF='TelegramBotNotify';{fhem_bot($NAME);}
(process:707): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_bits_per_sample: assertion 'GDK_IS_PIXBUF (pixbuf)' failed
(process:707): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_width: assertion 'GDK_IS_PIXBUF (pixbuf)' failed
(process:707): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_height: assertion 'GDK_IS_PIXBUF (pixbuf)' failed
(process:707): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_rowstride: assertion 'GDK_IS_PIXBUF (pixbuf)' failed
(process:707): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_has_alpha: assertion 'GDK_IS_PIXBUF (pixbuf)' failed
(process:707): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_pixels_with_length: assertion 'GDK_IS_PIXBUF (pixbuf)' failed
Schwerer Fehler in PNG-Bilddatei: Invalid IHDR data2017.03.27 09:30:53 1: Including fhem.cfg

Ausgelöst wurde der Fehler durch folgenden Befehl (in meiner 99_myUtilsTelegram.pm):
fhem_bot_svgresponse(
["wl_sysmon_temp", "CPU Temp"],
["wl_sysmon_load", "CPU Load"],
["wl_sysmon_wlan0", "WLAN"],
["wl_sysmon_fs_root", "Partition"],
["wl_sysmon_ram", "RAM"]
...
sub fhem_bot_svgresponse{
my $svgentries = 0;
foreach (@_){$svgentries++;}
for(my $i = 0; $i < $svgentries; $i++) {
my @data = @{$_[$i]};
my $filename = 'plot'.$i.'.png';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
print $fh plotAsPng($data[0]);
close $fh;
fhem_bot_imgresponse(
"/opt/fhem/plot".$i.".png ".$data[1],
);
}
}
und diese sub habe ich aus dem Forum kopiert.
FHEM 5.8 auf RaspPi3 (Raspbian jessie 4.9.35-v7+); Perl: v5.20.2
SIGNALduino (433 MHz) und miniCUL (868 MHz, derzeit noch ungenutzt)
mehrere Brennenstuhl-IT, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1885
  • RTFM
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #75 am: 27 März 2017, 13:02:59 »
Ich glaube in diesem Thread gibt es mittlerweile vier Mögliche Umsetzungen. Vllt sollte man die thread aufteilen:
chatBot by igami
chatBot by Ferdy2003
chatBot by tiroso
chatBot by Puschel74
Pi3 mit fhem.cfg + DbLog/logProxy
FHEM Module: archetype, LuftdatenInfo, monitoring, Nmap
FHEM Module ToDo: alexaWebApp, DaikinD3nIU, DaikinHTTPinterface, TBot_Dialog
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.

Offline Jump2016

  • New Member
  • *
  • Beiträge: 22
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #76 am: 01 April 2017, 23:46:30 »
@tiroso

Ich habe deine Skripte wie hier https://forum.fhem.de/index.php/topic,51425.msg464928.html#msg464928 beschrieben eingefügt.

Diese funktionieren auch super.

Anschließend hab ich ein zusätzlichen Eintrag (Test) im Hauptmenü gemacht.
if($msgText eq "/hilfe" || $msgText eq "/hauptmenue"){
fhem_bot_response(
"Hier sind alle Befehle:",
"--Generell\n/hilfe - Hilfetext\n/hauptmenue -Hilfetext\n/okfhem - Direktbefehl\n/system",
"--Umwelt\n/wetterjetzt\n/wetterheute\n/wettermorgen\n/wettervorhersage",
"--Media\n/sonosstop - Stoppe SonosBoxen","--Heizung\n/heizung - Heizung Info",
"--Sonstiges\n/sendeplot\n/batterie\n/TurStatus\n/muelltonne",
"--Test\n/Test",
);
}

Und dann folgendes definiert:

if($msgText eq "/Test"){
fhem_bot_response(
"Textbox 1\nMit #ein bisschen Text",
"Textbox 2",
"Textbox 3\nWieder mit ein bisschen Test\nAber noch einer Zeile",
);
}

Der neue Eintrag wird mir im Chat auch angezeigt.
Wenn ich diesen Punkt auswähle, dann wird auch /Test an FHEM geschickt (sehe ich im Log),
ich bekomme aber im Chat keinerlei Rückmeldung.

Hast du eine Idee warum?

Offline sw85

  • New Member
  • *
  • Beiträge: 34
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #77 am: 02 April 2017, 08:01:16 »
@tiroso

Ich habe deine Skripte wie hier https://forum.fhem.de/index.php/topic,51425.msg464928.html#msg464928 beschrieben eingefügt.

Diese funktionieren auch super.

Anschließend hab ich ein zusätzlichen Eintrag (Test) im Hauptmenü gemacht.
if($msgText eq "/hilfe" || $msgText eq "/hauptmenue"){
fhem_bot_response(
"Hier sind alle Befehle:",
"--Generell\n/hilfe - Hilfetext\n/hauptmenue -Hilfetext\n/okfhem - Direktbefehl\n/system",
"--Umwelt\n/wetterjetzt\n/wetterheute\n/wettermorgen\n/wettervorhersage",
"--Media\n/sonosstop - Stoppe SonosBoxen","--Heizung\n/heizung - Heizung Info",
"--Sonstiges\n/sendeplot\n/batterie\n/TurStatus\n/muelltonne",
"--Test\n/Test",
);
}

Und dann folgendes definiert:

if($msgText eq "/Test"){
fhem_bot_response(
"Textbox 1\nMit #ein bisschen Text",
"Textbox 2",
"Textbox 3\nWieder mit ein bisschen Test\nAber noch einer Zeile",
);
}

Der neue Eintrag wird mir im Chat auch angezeigt.
Wenn ich diesen Punkt auswähle, dann wird auch /Test an FHEM geschickt (sehe ich im Log),
ich bekomme aber im Chat keinerlei Rückmeldung.

Hast du eine Idee warum?

Versuch mal Test klein zu schreiben. Ich habe immer wieder das Problem, dass der Bot Großbuchstaben nicht mag. Ich hab zwar noch nicht raus gefunden warum, aber bisher war das bei mir meist die Lösung.
System 1: NUC mit Intel Celeron: Fhem mit Tablet-UI, VPN, Nextcloud und Kodi
System 2: RPI 2 mit DHT22, 433Mhz-Sender und Raspi-Cam
Peripherie: HM-Lan mit Fensterkontakten und Heizkörperthermostaten, HarmonyHub, Altes Tablet als Bildschirm

Offline Jump2016

  • New Member
  • *
  • Beiträge: 22
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #78 am: 02 April 2017, 09:41:22 »
@sw85

Vielen Dank für den Hinweis.

Nun funktionierts  :)

Online ripper

  • Jr. Member
  • **
  • Beiträge: 51
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #79 am: 02 April 2017, 11:14:04 »
@sw85

Vielen Dank für den Hinweis.

Nun funktionierts  :)

die Erklärung steht ein Stück weiter vorne:
https://forum.fhem.de/index.php/topic,51425.msg474200.html#msg474200

hatte am Anfang dass gleiche Problem mit Gr0ß- und Kleinschreibung.

Gruß
Flo

Offline Willi91

  • Newbie
  • Beiträge: 2
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #80 am: 02 Juli 2017, 11:05:54 »
Guten Morgen zusammen,

vor einiger Zeit habe ich diesen Thread hier entdeckt und durch meinen Spieltrieb mich direkt damit beschäftigt.
Ein Modul für 433 MHz war schnell zusammen gelötet, das für 868 MHz wollte nicht so wie ich es wollte... Dafür kommt die Woche dann das von ELV als BiggyPack für den Raspberry.
Angefangen habe ich mit dem ganz am Anfang vorgestellten Script, aber die ganzen "/" Befehle haben mir auf Dauer nicht gefallen, so dass ich da ein wenig umgebaut habe.
Buttons sind doch viel schöner und gehen auch mit der Grundbasis.

if($msgText eq "start"){
# --------ID 1--------
if($msgPeerId eq "ID 1"){
fhem "set $Name message \@$msgPeerId  (Drucker|".ReadingsVal('Drucker_Buero','state','0').") (Kühlschrank|".ReadingsVal('Test_Steckdose','state','0').") (Wohnzimmer|Schlafzimmer) (Wetter) (Jalousie|System) Hey ID 1";
}
# --------ID 2--------
if($msgPeerId eq "ID 2"){
fhem "set $Name message \@$msgPeerId (Licht Schlafzimmer|".ReadingsVal('Licht_Schlafzimmer','state','0').") (Wohnzimmer|Wetter) Hey ID 2 ";
}
}

Eine Übergabe der Werte direkt in die Buttons funktioniert einwandfrei, so kann ich den zwar unnütz drücken, bekomme aber direkt meinen aktuellen Status angezeigt.
Die Überwachung wer welchen Befehl sehen und nutzen kann, erfolgt hier sehr einfach über die direkte Telegram ID im Script.
Das mit der Groß-/Kleinschreibung habe ich auch gemerkt, dabei ist es so simpel. Die angezeigten Texte können ruhig in Groß geschrieben werden, aber die API wertet diese nur in Klein aus, so dass man hier das "erkennen" im Script in klein schreiben muss. ;)

Nun bin ich aber mit den Heizungen dran und würde gerne direkt von Telegram aus, nach Betätigung eines Buttons eine neue Temperatur einstellen.
Hat sich hiermit auf Basis des ersten Grundscripts schon mal jemand beschäftigt?

fhem "set $Name message \@$msgPeerId (Licht Schlafzimmer|".ReadingsVal('Licht_Schlafzimmer','state','0').") (Heizung Ist|".ReadingsVal('TVLicht','measured-temp','0')." °C) (Heizung Soll|".ReadingsVal('TVLicht','desired-temp','0')." °C) (Start) Schlafzimmer";

Offline Willi91

  • Newbie
  • Beiträge: 2
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #81 am: 02 Juli 2017, 19:46:40 »
Doppelpost ist kacke, ich weiß aber ich habe es hinbekommen. Vielleicht für manche was umständlich, aber wenn man es einmal sauber aufgezogen hat, läuft es ja sauber!
Hier die Code Schnippsel für Nachfolgende. :)

f($msgText eq "heizung soll"){
#---------------Schlafzimmer----------
if(ReadingsVal('StatusH','state','0') eq "1"){
if($msgPeerId eq "ID" || $msgPeerId eq "ID"){
fhem "set $Name message \@$msgPeerId (16°|17°|18°|19°|20°) (21°|22°|23°|24°|25°) (Schlafzimmer) Heizung im Schlafzimmer";
}
#---------------Wohnzimmer ----------
} elsif(ReadingsVal('StatusH','state','0') eq "2"){
if($msgPeerId eq "ID" || $msgPeerId eq "ID"){
fhem "set $Name message \@$msgPeerId (16°|17°|18°|19°|20°) (21°|22°|23°|24°|25°) (Wohnzimmer) Heizung im Wohnzimmer";
}
} else {
fhem "set $Name message \@$msgPeerId Funktioniert im Hauptmenü";
}
}
if($msgText eq "18°"){
#---------------Schlafzimmer ----------
if(ReadingsVal('StatusH','state','0') eq "1"){
if($msgPeerId eq "ID"){
fhem "set $Name message \@$msgPeerId  (Drucker|".ReadingsVal('Drucker_Buero','state','0').") (Kühlschrank|".ReadingsVal('Test_Steckdose','state','0').") (Wohnzimmer|Schlafzimmer) (Wetter) (Jalousie|System) Heizung im Schlafzimmer auf 18° eingestellt!";
} elsif($msgPeerId eq "ID"){
fhem "set $Name message \@$msgPeerId (Licht Schlafzimmer|".ReadingsVal('Licht_Schlafzimmer','state','0').") (Wohnzimmer|Wetter) Heizung im Schlafzimmer auf 18° eingestellt!";
}
#---------------Wohnzimmer ----------
} elsif(ReadingsVal('StatusH','state','0') eq "2"){
if($msgPeerId eq "ID"){
fhem "set $Name message \@$msgPeerId  (Drucker|".ReadingsVal('Drucker_Buero','state','0').") (Kühlschrank|".ReadingsVal('Test_Steckdose','state','0').") (Wohnzimmer|Schlafzimmer) (Wetter) (Jalousie|System) Heizung im Wohnzimmer auf 18° eingestellt!";
} elsif($msgPeerId eq "ID2"){
fhem "set $Name message \@$msgPeerId (Licht Schlafzimmer|".ReadingsVal('Licht_Schlafzimmer','state','0').") (Wohnzimmer|Wetter) Heizung im Wohnzimmer auf 18° eingestellt!";
}
} else {
fhem "set $Name message \@$msgPeerId Funktioniert nicht hier";
}
}

Die Set Befehle fehlen noch, da die Heizungen noch nicht gekoppelt sind. Sobald diese aber drin sind, kann ich den Rest ja nachziehen. ;)

Gruß Ernst

Offline ErzGabriel

  • Full Member
  • ***
  • Beiträge: 202
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #82 am: 09 August 2017, 17:29:58 »
Hi.
Das Thema Telegram Bot ist sehr interessant und das kann man gut einsetzen aber leider komme ich damit nicht ganz klar.
Ich habe mir den Bot eingerichtet und kann auch Geräte bei mir schalten, leider kriege ich es nicht hin, das er mir die Temperaturen schickt. Das mag gut dadran liegen, das ich in Perl ne Niete bin. Deswegen wollte ich hier mal um hilfe bitten.
1. Möchte ich auf Abfrage die Temperaturen der Wohnung erhalten
2. Zu bestimmten Zeiten, möchte ich die Außentemperatur erhalten.
3. Später vielleicht noch ne Meldung über leere Batterien.

Offline Esjay

  • Full Member
  • ***
  • Beiträge: 412
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #83 am: 09 August 2017, 18:32:45 »
Hi.
Das Thema Telegram Bot ist sehr interessant und das kann man gut einsetzen aber leider komme ich damit nicht ganz klar.
Ich habe mir den Bot eingerichtet und kann auch Geräte bei mir schalten, leider kriege ich es nicht hin, das er mir die Temperaturen schickt. Das mag gut dadran liegen, das ich in Perl ne Niete bin. Deswegen wollte ich hier mal um hilfe bitten.
1. Möchte ich auf Abfrage die Temperaturen der Wohnung erhalten
2. Zu bestimmten Zeiten, möchte ich die Außentemperatur erhalten.
3. Später vielleicht noch ne Meldung über leere Batterien.
Das hat nicht wirklich etwas mit dem Chatbot zu tun. Guck mal in den normalen Telegram Theard. Das hier ist eher etwas für komplexere Angelegenheiten.Läßt sich relativ einfach mit Doif oder at ausarbeiten..Einfach mal die Commandref zu doif lesen.
Grüße
Zustimmung Zustimmung x 1 Liste anzeigen

Offline ErzGabriel

  • Full Member
  • ***
  • Beiträge: 202
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #84 am: 09 August 2017, 19:02:50 »
Okay, danke für den Tipp. Werde mir das mal anschauen, mit dem DOIF und AT.

Offline julianG

  • New Member
  • *
  • Beiträge: 4
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #85 am: 15 August 2017, 23:49:00 »
Ich glaube in diesem Thread gibt es mittlerweile vier Mögliche Umsetzungen. Vllt sollte man die thread aufteilen:
chatBot by igami
chatBot by Ferdy2003
chatBot by tiroso
chatBot by Puschel74

Wie ist denn der aktuelle Stand bei den genannten Umsetzungen? Was hat sich getan und kann man an den Fortschritten teilhaben?

Viele Grüße
Julian

Offline Killermike007

  • Jr. Member
  • **
  • Beiträge: 64
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #86 am: Gestern um 12:37:21 »
Hi.

Habe die Dialoge von igami auch übernommen.

Leider bekomme ich keinerlei Reaktion auf /start oder /heimdall.

Im Log steht lediglich:
}
  return;;;;
  fhem("attr subType=dialog widgetOverride msgPeerId:multiple-strict,".join(",", @Contacts));;;;
  $_ = join(":", (split(":", $_))[0,1]) for (@Contacts);;;;
  my @Contacts = split(" ", ReadingsVal($NAME, "Contacts", ""));;;;
  return if(InternalVal($NAME, "TYPE", "undef") ne "TelegramBot");;;;
2017.08.16 12:19:18 4: no_contacts exec {
2017.08.16 12:19:18 5: Triggering no_contacts
}
  return;;;; 
  fhem("trigger $_ msg: $msgText", 0) for (@dialogs);;;;

    }
        );;;;;;;;
         trim($defs{$_}->{devices}{0}) eq $_
         ) and
           $msgChat eq ""
         (grep(/$msgChat/, split(",", AttrVal($_, "msgChat", ""))) or
        (grep(/$msgPeerId/, split(",", AttrVal($_, "msgPeerId", ""))) and
        if
      push(@dialogs, $_)
    for (@a){
  my @dialogs;;;;
  my @a = devspec2array("subType=dialog:FILTER=disable!=1");;;;

  my $msgText = ReadingsVal($NAME, "msgText", undef);;;;
    $msgChat = (split(" ", $msgChat, 2))[0] if($msgChat ne "");;;;
  my $msgChat = ReadingsVal($NAME, "msgChat", "");;;;
  my $msgPeerId = ReadingsVal($NAME, "msgPeerId", undef);;;;
  return if(InternalVal($NAME, "TYPE", "undef") ne "TelegramBot");;;;
2017.08.16 12:17:00 4: dialog_notify exec {
2017.08.16 12:17:00 5: Triggering dialog_notify

Das log wird bei mir rückwärts angezeigt.

Jemand ne Idee, warum kein Dialog kommt?

Danke und Gruß

Mike
Cubieboard 3
Cul V3-868,Cul V3-433,JeeLink-868,HM-Lan
MAX Thermostat, MAX Thermostat+, MAX Fensterkontakt, MAX ECO-Taster,HM-Fensterdrehgriff/Klingelsignalsensor/Rolladenaktor,
IT-Funksteckdosen, Wandschalter, Rolladenaktoren, Funkschalter,LaCrosse,YoulessStromzähler,GPIOGaszähler+Türkontakt

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1885
  • RTFM
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #87 am: Gestern um 15:29:11 »
Ich bin momentan dabei mein FHEM komplett auf Vordermann zu bringen und da zählt das Thema Dialoge auch mit rein. Die Anbindung wollte ich noch über das msg Modul machen​. Das dauert aber alles noch. Ich benutze nach wie vor den Stand den ich hier gepostet habe.
Pi3 mit fhem.cfg + DbLog/logProxy
FHEM Module: archetype, LuftdatenInfo, monitoring, Nmap
FHEM Module ToDo: alexaWebApp, DaikinD3nIU, DaikinHTTPinterface, TBot_Dialog
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1885
  • RTFM
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #88 am: Gestern um 15:29:27 »
Ich bin momentan dabei mein FHEM komplett auf Vordermann zu bringen und da zählt das Thema Dialoge auch mit rein. Die Anbindung wollte ich noch über das msg Modul machen​. Das dauert aber alles noch. Ich benutze nach wie vor den Stand den ich hier gepostet habe.
Pi3 mit fhem.cfg + DbLog/logProxy
FHEM Module: archetype, LuftdatenInfo, monitoring, Nmap
FHEM Module ToDo: alexaWebApp, DaikinD3nIU, DaikinHTTPinterface, TBot_Dialog
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.

Offline julianG

  • New Member
  • *
  • Beiträge: 4
Antw:chatBot (vordefinierte Dialoge) für Telegram
« Antwort #89 am: Gestern um 15:57:39 »
Super, danke. Dann versuche ich die Tage mal das ganze auch bei mir zum Laufen zu bekommen  :)

 

decade-submarginal