[gelöst] msgDialog im Telegram Bot

Begonnen von cRossi, 09 Februar 2020, 15:46:46

Vorheriges Thema - Nächstes Thema

cRossi

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

  • funktioniert das mit dem Doppelpunkt in der Zeitangabe nicht - hier wird mir in der Inline-Tastatur nur das was vor dem Doppelpunkt steht angezeigt, der Rest danach nicht
  • funktionieren Uhrzeiten größer-gleich 08:00 nicht, es wird kein Wert erzeugt, aber das teleBot-Attribut "queryData" sagt das es richtig ausgewählt wurde, nur machen kann ich dann damit nichts mehr?!


"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


RasPi 3B+
HM-MOD-RPI-PCB
FHEM

cRossi

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
RasPi 3B+
HM-MOD-RPI-PCB
FHEM

binford6000

ZitatIrgendwelche Vorschläge...?
Poste mal den ganzen Dialog als RAW  ;)

binford6000

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

cRossi

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



RasPi 3B+
HM-MOD-RPI-PCB
FHEM

cRossi

Wie sehe hast du vor und nach dem Doppelpunkt eine Zeit stehen, das Besipiel im Wiki und commandRef zeigt jedoch was anderes...
RasPi 3B+
HM-MOD-RPI-PCB
FHEM

binford6000

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)

binford6000

Lass mal die "?" in deinem Uhrzeit-Match weg

cRossi

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.

RasPi 3B+
HM-MOD-RPI-PCB
FHEM

cRossi

So geht es auch mit dem Doppelpunkt

05:00:0500

:-\
RasPi 3B+
HM-MOD-RPI-PCB
FHEM

binford6000

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

cRossi

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

RasPi 3B+
HM-MOD-RPI-PCB
FHEM