chatBot (vordefinierte Dialoge) für Telegram

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

Vorheriges Thema - Nächstes Thema

igami

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
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Jump2016

@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?

sw85

Zitat von: Jump2016 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?

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

Jump2016

@sw85

Vielen Dank für den Hinweis.

Nun funktionierts  :)

ripper

Zitat von: Jump2016 am 02 April 2017, 09:41:22
@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

Willi91

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";

Willi91

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

ErzGabriel

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.

Esjay

Zitat von: ErzGabriel 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.
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

ErzGabriel

Okay, danke für den Tipp. Werde mir das mal anschauen, mit dem DOIF und AT.

julianG

Zitat von: igami 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

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

Killermike007

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

igami

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
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

igami

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
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

julianG

Super, danke. Dann versuche ich die Tage mal das ganze auch bei mir zum Laufen zu bekommen  :)