Hallo Zusammen,
ich finde leider nichts in die Richtung daher mal hier in die Runde gefragt:
Kann der TelegramBot auch von sich aus Fragen stellen und dann auf die Antwort reagieren?
Ich fände es z.B. cool wenn er mich gegen Feierabend und wenn es draußen kalt ist, fragen würde, ob er schon mal die Heizung hoch drehen soll und wenn ich dann ein ja zurück schicke schaltet er entsprechend.
Das kannst du über DOIF lösen.
Ich lasse mir jeden Nachmittag eine Nachricht schicken wenn es in der Nacht zu Frost kommen kann
Moin,
Bitte schön
https://forum.fhem.de/index.php?topic=51425.0 (https://forum.fhem.de/index.php?topic=51425.0)
Grüße
Achim
Gesendet von meinem SM-P605 mit Tapatalk
Zitat von: CBSnake am 03 Dezember 2016, 17:12:03
Bitte schön
Ich werde mal schauen, dass ich das dieses Jahr noch aufgeräumt bekomme und ein "einfaches" Tutorial dafür schreibe :D
Hallo in die Runde!
An dieser Lösung bin ich auch interessiert, allerdings noch mit einer Erweiterung um eine Antwortauswahl.
Nach dem Motto :
Soll ich die Heizung einschalten ? Antwortvorgabe (vielleicht als Button) Ja oder Nein :)
Hi münchner,
du kannst dir ja etwas "a la chatbot" schicken lassen.
Das sind dann Kommandos die du klicken kannst...
Kuckst du hier:
https://forum.fhem.de/index.php/topic,51425.0.html (https://forum.fhem.de/index.php/topic,51425.0.html)
Mache ich so bei der Waschmaschine, also ich lasse mich solange erinnern dass sie fertig ist, bis ich "quittiert" habe dass ich sie geleert habe...
Und meine Schreibtischsteckdose schickt mir eine Nachricht wenn sie erkennt, dass eigentlich nichts mehr ausser sie selbst läuft mit der "Frage": abschalten?
Habe ich sozusagen unter zuhilfenahme von "chatbot" umgesetzt...
Gruß, Joachim
Vielen Dank für die Hilfe.
Mit https://forum.fhem.de/index.php/topic,51425.0.html (https://forum.fhem.de/index.php/topic,51425.0.html) hat es schon mal sehr gut funktioniert.
Zusätzlich dazu habe ich dann noch ein doif und eine kleine Funktion zusammen gebastelt, welche mir Fragen stellen kann. Das will ich euch natürlich nicht vorenthalten:
DoIF:
define di_TB_Heizung_Wz DOIF ([16:00|12345]) ({ telegram_msg("di_TB_Heizung_Wz") })
attr di_TB_Heizung_Wz do always
attr di_TB_Heizung_Wz group Telegram
attr di_TB_Heizung_Wz room Technik
myUtils:
my $telegram_msg_cmd = "";
my $fhem_bot_text = "";
sub telegram_msg ($){
($telegram_msg_cmd) = @_;
if($telegram_msg_cmd eq "di_TB_Heizung_Wz"){
fhem_bot_msg(
"Du hast bald Feierabend.\nIm Wohnzimmer sind es aktuell " . ReadingsVal('HM_Thermostat_WZ_Clima','measured-temp','0') . " C°.\nDraussen sind es " . ReadingsVal('Wettervorhersage','temp_c','0') . " C°.\nSoll ich die Heizung im Wohnzimmer schon mal anstellen?\n/short1",
);
}
}
sub fhem_bot_msg{
foreach my $fhem_bot_text (@_) {
fhem "set TelegramBot message $fhem_bot_text";
}
}
Vielleicht noch nicht ganz perfekt, aber tut was es soll und wird auf jeden Fall noch erweitert. Nur eine Frage der Zeit, bis der Bot anfängt mich zu zu quatschen ;D
Hallo sw85,
ZitatVielen Dank für die Hilfe.
Gerne!
ZitatDas will ich euch natürlich nicht vorenthalten
So soll es sein...
Vielen Dank zurück!
ZitatVielleicht noch nicht ganz perfekt, aber tut was es soll und wird auf jeden Fall noch erweitert.
Tja so ist es doch immer (zumindest bei mir):
erst mal schön, dass es (in etwa) geht wie gedacht und mit der Zeit lässt sich immer was optimieren...
...ab jetzt wirst du wohl nicht mehr los kommen: infiziert! ;-)
Gruß, Joachim
Ich habe noch mal etwas weiter gebastelt und der Bot versteht jetzt "ja" und "nein".
Dazu habe ich einen Dummy angelegt welcher die letzte Frage, welche der Bot gestellt hat speichert:
define TB_last_Question dummy
attr TB_last_Question room Telegram
Die myUtils ist jetzt um den dummy erweitert:
...
if($telegram_msg_cmd eq "di_TB_Heizung_Wz"){
fhem_bot_msg(
"Du hast bald Feierabend.\nIm Wohnzimmer sind es aktuell " . ReadingsVal('HM_Thermostat_WZ_Clima','measured-temp','0') . " C°.\nDraussen sind es " . ReadingsVal('Wettervorhersage','temp_c','0') . " C°.\nSoll ich die Heizung im Wohnzimmer schon mal anstellen?\n/short1",
);
last_question("heizung_wz_an");
}
...
sub last_question{
foreach my $last_question (@_) {
fhem "set TB_last_Question on";
fhem "setreading TB_last_Question last_question $last_question";
}
}
Und dann noch die Erweiterung des Bots an sich, damit er die antworten verarbeiten kann:
my $question_state = ReadingsVal("TB_last_Question","state","");
if(($msgText eq "ja") and ($question_state eq "on")){
my $question = ReadingsVal("TB_last_Question","last_question","");
#Hier sind die Fragen
if ($question eq "heizung_wz_an"){
fhem_bot_response(
"Ok, ich habe die Heizung auf 21 Grad eingestellt.",
);
fhem_bot_fhem_cmd(
"set HM_Thermostat_WZ_Clima desired-temp 21",
);
}
# Fragen Ende
fhem_bot_fhem_cmd(
"set TB_last_Question off",
"setreading TB_last_Question last_question none",
);
}
if(($msgText eq "ja") and ($question_state eq "off")){
fhem_bot_response(
"Was soll ich tun?\n Ich habe dir keine Frage gestellt",
);
}
if(($msgText eq "nein") and ($question_state eq "on")){
fhem_bot_response(
"Ok",
);
fhem_bot_fhem_cmd(
"set TB_last_Question off",
"setreading TB_last_Question last_question none",
);
}
Als nächstes plane ich dann noch ein "Frag später noch mal".