FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Thema gestartet von: cRossi am 09 Februar 2020, 15:46:46

Titel: [gelöst] msgDialog im Telegram Bot
Beitrag von: cRossi am 09 Februar 2020, 15:46:46
Hallo,
nach durchaus längeren Herumprobieren habe ich mittlerweile einen einigermaßen passablen Dialog mit dem msgDialog in Telegram hinbekommen.

Allerdings scheint das Beispiel mit der Waschmaschine in der commandRef und Wiki nicht wirklich richtig zu sein?!

Jedenfalls habe ich versucht den Dialog mit den Zeiten nachzubauen, aber


"Weckzeit": {
"message": [
"( 05.00 | 06.00 | 07.00 | 08.00 ) ",
"( 05.05 | 06.05 | 07.05 | 08.05 ) ",
"( 05.10 | 06.10 | 07.10 | 08.10 ) ",
"( 05.15 | 06.15 | 07.15 | 08.15 ) ",
"( 05.20 | 06.20 | 07.20 | 08.20 ) ",
"( 05.25 | 06.25 | 07.25 | 08.25 ) ",
"( 05.30 | 06.30 | 07.30 | 08.30 ) ",
"( 05.35 | 06.35 | 07.35 | 08.35 ) ",
"( 05.40 | 06.40 | 07.40 | 08.40 ) ",
"( 05.45 | 06.45 | 07.45 | 09.45 ) ",
"( 05.50 | 06.50 | 07.50 | 05.50 ) ",
"( 05.55 | 06.55 | 07.55 | 04.55 ) ",
"(zurück|home) ",
"Welche Weckzeit soll eingestellt werden...?",
"Aktuelle Weckzeit: [Wecker:stunde]:[Wecker:minute]"
],
"Uhrzeit": {
"match": " ?([0-1][0-9]|2[0-3]).[0-5][0-9] ?",
"commands": [
"{getHour('msgDlg_calendar','time',$message)}",
"set $SELF say @$recipient Kalender"
]
}


Mein Test war den auswählten Wert über eine Funktion in ein Reading des msgDialog-Device zu schreiben.
Bei Zeiten zwischen 04:00 und 07:55 klappt das auch, nur ab 08:00 geht das komischerweise nicht.

Die Funktion getHour sieht wie folgt aus:


sub getHour($$$) {
my ($device,$reading,$time) = @_;

$time = ReadingsVal("teleBot","queryData","");  ## zu testzwecken direkt aus dem richtig gesetzten reading gelesen
fhem("setreading $device time $time");

my $hour = substr($time,1,2);
fhem("setreading $device hour $hour");

my $minute = substr($time,4,2);
fhem("setreading $device minute $minute");
}


Was kann ich tun um den Fehler mit den Uhrzeiten ab 8 Uhr und dem nichtfunktionierenden Doppelpunkt im Dialog zu finden...?

Danke und Gruß
cRossi


Titel: Antw:msgDialog im Telegram Bot
Beitrag von: cRossi am 09 Februar 2020, 16:47:05
Ok, den 8 Uhr Fehler habe wohl rein zufällig eben gefunden, denn wenn ich

"{getHour('msgDlg_calendar','time',$message)}",

in

"{getHour('msgDlg_calendar','time','$message')}",

ändere wird es richtig gelesen, aber warum das mit allen Zeiten kleiner 8 funktioniert bleibt ein Rätzel...  :o


Das andere Problem mit dem Doppelpunkt besteht aber immer noch und maskieren oder doppelt-dreichfache Doppelpunkte gehen auch nicht.
Irgendwelche Vorschläge...?

Danke und Gruß
cRossi
Titel: Antw:msgDialog im Telegram Bot
Beitrag von: binford6000 am 09 Februar 2020, 16:52:58
ZitatIrgendwelche Vorschläge...?
Poste mal den ganzen Dialog als RAW  ;)
Titel: Antw:msgDialog im Telegram Bot
Beitrag von: binford6000 am 09 Februar 2020, 16:58:17
Also mein Wecker-Dialog sieht so aus und tut was er soll:
defmod 12.Wecker_Dialog_fav msgDialog {"07.⏰....Wecker.....⏰":{\
    "message":[\
  "(Aus) ",\
      "(5:00 Uhr:05_00|5:30 Uhr:05_30) ",\
      "(6:00 Uhr:06_00|6:30 Uhr:06_30) ",\
  "(7:00 Uhr:07_00|7:30 Uhr:07_30) ",\
  "(zurück:%me%) ",\
  "Aktuell ist [SebastianWecker:AlarmTomorrow] Uhr eingestellt.",\
      "Wähle aus oder gib [HH:MM] als Text ein..."\
],\
"Aus":{\
      "match": "(aus)",\
      "commands": [\
  "set %wecker% weckzeit Aus"\
]\
    },\
"stellen_Wecker":{\
      "match": "(([0-1][0-9]|2[0-3])[:_][0-5][0-9])|(aus)",\
      "commands": [\
  "{my $time = '$message';;;; $time =~ s/_/:/;;;; fhem(\"set %wecker% weckzeit $time\");;;;}"\
]\
    }\
  }\
}
attr 12.Wecker_Dialog_fav allowed everyone
attr 12.Wecker_Dialog_fav disable 0
attr 12.Wecker_Dialog_fav evalSpecials wecker=sebastian_wecker.dum
Titel: Antw:msgDialog im Telegram Bot
Beitrag von: cRossi am 09 Februar 2020, 17:06:00
Servus, nimm mal das "Uhr" raus und lass nur die Zeiten drin - tät mich mal interessieren was passiert.

Hier meine Definition:


defmod msgDlg_calendar msgDialog {\
"Kalender": {\
"message": [\
"{return('(' . (ReadingsVal('Sleep','state','') eq 'nein' ? 'Schlafen' : 'Fernsehen') . '|' . (ReadingsVal('Calendar_Vacation','state','') eq 'nein' ? 'Urlaub' : 'Arbeiten') . ') ')}",\
"{return('(' . (ReadingsVal('Wecker','state','') eq 'aus' ? 'Wecken' : 'Ausschlafen') . (ReadingsVal('Wecker','state','') eq 'aus' ? '' : '|Weckzeit') . ') ')}",\
"(home) ", \
"Was soll ain-/ausgeschaltet werden...?",\
"Schlafen: [Sleep:state]",\
"Urlaub: [Calendar_Vacation:state]",\
"{return('Wecker: ' . ReadingsVal('Wecker','state','') . (ReadingsVal('Wecker','state','') eq 'aus' ? '' : ' (' . ReadingsVal('Wecker','stunde','') . ':' . ReadingsVal('Wecker','minute','') . ')' ))}"\
],\
"Schlafen": {\
"commands": [\
"set Sleep ja",\
"set $SELF say @$recipient Kalender"\
]\
},\
"Fernsehen": {\
"commands": [\
"set Sleep nein",\
"set $SELF say @$recipient Kalender"\
]\
},\
"(Urlaub": {\
"commands": [\
"set Calendar_Vacation ja",\
"set $SELF say @$recipient Kalender"\
]\
},\
"Arbeiten": {\
"commands": [\
"set Calendar_Vacation nein",\
"set $SELF say @$recipient Kalender"\
]\
},\
"Wecken": {\
"commands": [\
"set Wecker an",\
"set $SELF say @$recipient Kalender"\
]\
},\
"Ausschlafen": {\
"commands": [\
"set Wecker aus",\
"set $SELF say @$recipient Kalender"\
]\
},\
"Weckzeit": {\
"message": [\
"( 05.00 | 06.00 | 07.00 | 08.00 ) ",\
"( 05.05 | 06.05 | 07.05 | 08.05 ) ",\
"( 05.10 | 06.10 | 07.10 | 08.10 ) ",\
"( 05.15 | 06.15 | 07.15 | 08.15 ) ",\
"( 05.20 | 06.20 | 07.20 | 08.20 ) ",\
"( 05.25 | 06.25 | 07.25 | 08.25 ) ",\
"( 05.30 | 06.30 | 07.30 | 08.30 ) ",\
"( 05.35 | 06.35 | 07.35 | 08.35 ) ",\
"( 05.40 | 06.40 | 07.40 | 08.40 ) ",\
"( 05.45 | 06.45 | 07.45 | 08.45 ) ",\
"( 05.50 | 06.50 | 07.50 | 08.50 ) ",\
"( 05.55 | 06.55 | 07.55 | 08.55 ) ",\
"(zurück|home) ",\
"Welche Weckzeit soll eingestellt werden...?",\
"Aktuelle Weckzeit: [Wecker:stunde]:[Wecker:minute]"\
],\
"Uhrzeit": {\
"match": " ?([0-1][0-9]|2[0-3]).[0-5][0-9] ?",\
"commands": [\
"{setAlarmClock('msgDlg_calendar','time','$message')}",\
"set $SELF say @$recipient Kalender"\
]\
}\
}\
}\
}\

attr msgDlg_calendar allowed cRossi
attr msgDlg_calendar room Telegram

setstate msgDlg_calendar cRossi: Kalender
setstate msgDlg_calendar 2020-02-09 16:46:48 state cRossi: Kalender
setstate msgDlg_calendar 2020-02-09 16:46:44 time 05.45



Titel: Antw:msgDialog im Telegram Bot
Beitrag von: cRossi am 09 Februar 2020, 17:07:55
Wie sehe hast du vor und nach dem Doppelpunkt eine Zeit stehen, das Besipiel im Wiki und commandRef zeigt jedoch was anderes...
Titel: Antw:msgDialog im Telegram Bot
Beitrag von: binford6000 am 09 Februar 2020, 17:10:53
ZitatServus, nimm mal das "Uhr" raus und lass nur die Zeiten drin - tät mich mal interessieren was passiert.
Das Gleiche wie mit "Uhr"  8)
Titel: Antw:msgDialog im Telegram Bot
Beitrag von: binford6000 am 09 Februar 2020, 17:19:44
Lass mal die "?" in deinem Uhrzeit-Match weg
Titel: Antw:msgDialog im Telegram Bot
Beitrag von: cRossi am 09 Februar 2020, 17:20:59
Auch wenn 5:00 Uhr:05_00|5:30 Uhr:05_30 in 5:00|5:30 geändert wird?

Mich dünkt das mit den bei dir 2x verwendeten Doppelpunkten für einen Wert könnte die Lösung bringen, wobei ich auch schon 2 Doppelpunkte hintereinander hatte, ohne Ergebnis.

Ich Spiel noch mal.

Titel: Antw:msgDialog im Telegram Bot
Beitrag von: cRossi am 09 Februar 2020, 17:24:36
So geht es auch mit dem Doppelpunkt

05:00:0500

:-\
Titel: Antw:msgDialog im Telegram Bot
Beitrag von: binford6000 am 09 Februar 2020, 17:34:46
ZitatAuch wenn 5:00 Uhr:05_00|5:30 Uhr:05_30 in 5:00|5:30 geändert wird?
Nein, dann natürlich nicht wegen:
https://wiki.fhem.de/wiki/MsgDialog#.22:.22_bei_Inline_Keyboards (https://wiki.fhem.de/wiki/MsgDialog#.22:.22_bei_Inline_Keyboards)
Titel: Antw:msgDialog im Telegram Bot
Beitrag von: cRossi am 09 Februar 2020, 17:47:16
I see, und tadaa, et goit wenn ich es so baue:


"Weckzeit": {
"message": [
"( 05:00:0500 | 06:00:0600 | 07:00:0700 | 08:00:0800 ) ",
"( 05:05:0505 | 06:05:0605 | 07:05:0705 | 08:05:0805 ) ",
"( 05:10:0510 | 06:10:0610 | 07:10:0710 | 08:10:0810 ) ",
"( 05:15:0515 | 06:15:0615 | 07:15:0715 | 08:15:0815 ) ",
"( 05:20:0520 | 06:20:0620 | 07:20:0720 | 08:20:0820 ) ",
"( 05:25:0525 | 06:25:0625 | 07:25:0725 | 08:25:0825 ) ",
"( 05:30:0530 | 06:30:0630 | 07:30:0730 | 08:30:0830 ) ",
"( 05:35:0535 | 06:35:0635 | 07:35:0735 | 08:35:0835 ) ",
"( 05:40:0540 | 06:40:0640 | 07:40:0740 | 08:40:0840 ) ",
"( 05:45:0545 | 06:45:0645 | 07:45:0745 | 08:45:0845 ) ",
"( 05:50:0550 | 06:50:0650 | 07:50:0750 | 08:50:0850 ) ",
"( 05:55:0555 | 06:55:0655 | 07:55:0755 | 08:55:0855 ) ",
"(zurück|home) ",
"Welche Weckzeit soll eingestellt werden...?",
"Aktuelle Weckzeit: [Wecker:stunde]:[Wecker:minute]"
],
"Uhrzeit": {
"match": " ?([0-1][0-9]|2[0-3])[0-5][0-9] ?",
"commands": [
"{setAlarmClock('msgDlg_calendar','time','$message')}",
"set $SELF say @$recipient Kalender"
]
}
}


und die Funktion:


sub setAlarmClock($$$) {
my ($device,$reading,$time) = @_;

$time = ReadingsVal("teleBot","queryData","");
fhem("setreading $device time $time");

my $hour = substr($time,0,2);
fhem("setreading Wecker stunde $hour");

my $minute = substr($time,2,2);
fhem("setreading Wecker minute $minute");
}



Problem gelöst, danke für die Hilfe - leider ist das alles aus der Doku nicht so einfach ersichtlich...  ::)

Gruß cRossi