[gelöst] Kann der TelegramBot auch fragen stellen

Begonnen von sw85, 03 Dezember 2016, 13:13:33

Vorheriges Thema - Nächstes Thema

sw85

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

igami

Das kannst du über DOIF lösen.
Ich lasse mir jeden Nachmittag eine Nachricht schicken wenn es in der Nacht zu Frost kommen kann
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

CBSnake

Moin,

Bitte schön

https://forum.fhem.de/index.php?topic=51425.0

Grüße
Achim

Gesendet von meinem SM-P605 mit Tapatalk

FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

igami

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

münchner

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  :)

MadMax-FHEM

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

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

sw85

Vielen Dank für die Hilfe.
Mit 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
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

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

sw85

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