msgDialog: Zurück verhält sich nicht wie gewünscht

Begonnen von gestein, 05 Dezember 2019, 01:08:15

Vorheriges Thema - Nächstes Thema

gestein

Hallo,

eigentlich bin ich mit meinen msgDialog-Dialogen sehr zufrieden.
Aber eines stört mich doch: der Zurück-Button funktioniert nicht wie gewünscht.

Daher habe ich heute alle meine Dialog deaktiviert und die beiden Dialoge aus dem Wiki 1:1 übernommen (also met_Dialog und Waschmaschine_Dialog).
Wenn ich nun die Dialoge aufrufe, erscheint als erstes Menü:
   Waschmaschine
   abbrechen

Das funktioniert also schon mal.
Wenn ich nun in "Waschmaschine" reingehe, erscheint folgendes Menü:
   programmieren
   einschalten
   Verlaufsdiagramm
   abbrechen

Auch das klappt ohne Problem.
Wenn ich in "programmieren" reingehe, kommt:
   bestätigen|zurück|abbrechen
   und die ganzen Zeiten

Auch das klappt und hier funktioniert das "zurück". Ich komme wieder in die Übersicht des Waschmaschine_Dialog.

Wenn ich aber nun in der Übersicht statt nur "abbrechen" "zurück|abbrechen" definiere, erscheint zwar der richtige Dialog.
   programmieren
   einschalten
   Verlaufsdiagramm
   zurück|abbrechen

Wenn ich den Button "zurück" drücke, dann passiert aber gar nichts.
Eigentlich dachte ich, dass ich dann in den meta_Dialog zurückkomme.

Stimmt die Definition des "zurück" im Wiki nicht?
Der Befehl muss ja nur im meta_Dialog definiert werden. Richtig?
Oder in jedem Dialog?

Danke im Voraus
lg, Gerhard

binford6000

ZitatDer Befehl muss ja nur im meta_Dialog definiert werden. Richtig?
Oder in jedem Dialog?

Moin Gerhard,
das kommt ganz drauf an, ob und wie du innerhalb eines Dialogs navigieren möchtest!
Hier mal zwei Beispiel-Dialoge mit Navigation - vielleicht wird's dann deutlicher:
defmod 02.Lampen_Dialog msgDialog {\
"02.💡...Lampen....💡": {\
"message": [\
"(💡 Lampe einschalten) ",\
"(💡 Lampe ausschalten) ",\
    "(abbrechen|zurück:%me%) ",\
"Bitte wählen:"\
],\
"💡 Lampe einschalten": {\
"message": [\
"{return(lightsOn())}"\
],\
"Einschalten": {\
"match": ".*_licht",\
"commands": [\
"set $message on",\
"set $SELF say @$recipient 02.💡...Lampen....💡|Lampe einschalten"\
]\
},\
"Zurück": {\
"commands": [\
"set $SELF say @$recipient 02.💡...Lampen....💡"\
]\
}\
},\
"💡 Lampe ausschalten": {\
"message": [\
"{return(lightsOut())}"\
],\
"Ausschalten": {\
"match": ".*_licht",\
"commands": [\
"set $message off",\
"set $SELF say @$recipient 02.💡...Lampen....💡|Lampe ausschalten"\
]\
},\
"Zurück": {\
"commands": [\
"set $SELF say @$recipient 02.💡...Lampen....💡"\
]\
}\
}\
\
}\
}
attr 02.Lampen_Dialog allowed everyone
attr 02.Lampen_Dialog devStateIcon Initialized:ios-on-blue disabled:ios-off
attr 02.Lampen_Dialog group Dialoge
attr 02.Lampen_Dialog icon dialog
attr 02.Lampen_Dialog room 90_System->96_Dialogsteuerung

setstate 02.Lampen_Dialog rr_Sebastian: 02.💡...Lampen....💡
setstate 02.Lampen_Dialog 2019-12-13 08:40:48 rr_Sebastian_history 02.💡...Lampen....💡
setstate 02.Lampen_Dialog 2019-12-13 08:40:48 state rr_Sebastian: 02.💡...Lampen....💡



defmod 10.Anwesenheit_Dialog_user msgDialog {"10.🙋🏼...Anwesenheit...🙋🏼":{\
  "message": [\
    "(🙋🏻‍♂️Sebastian|🙋🏼Christine) ",\
"(🙋🏼Antonia|🙋🏼Hannah) ",\
"(abbrechen|zurück:%me%) ",\
"Welchen Bewohner soll ich schalten?"\
    ],\
    "🙋🏻‍♂️Sebastian":{\
"message": [\
    "{return('(bin abwesend) ') if(ReadingsVal('rr_Sebastian','presence','absent') eq 'present')}",\
    "{return('(bin anwesend) ') if(ReadingsVal('rr_Sebastian','presence','absent') =~ /gone|absent/)}",\
"(abbrechen|zurück) ",\
    "Bist du anwesend oder abwesend?"\
    ],  \
    "bin anwesend":{\
    "commands": [\
"set Sebastian.dum present",\
"set $SELF say @$recipient 10.🙋🏼...Anwesenheit...🙋🏼"\
    ]\
    },\
"bin abwesend":{\
    "commands": [\
"set Sebastian.dum absent",\
"set $SELF say @$recipient 10.🙋🏼...Anwesenheit...🙋🏼"\
    ]\
    }\
},\
"🙋🏼Antonia":{\
"message": [\
    "{return('(ist abwesend) ') if(ReadingsVal('rr_Antonia','presence','absent') eq 'present')}",\
    "{return('(ist anwesend) ') if(ReadingsVal('rr_Antonia','presence','absent') =~ /gone|absent/)}",\
    "(abbrechen|zurück) ",\
"Ist Toni anwesend oder abwesend?"\
],  \
    "ist anwesend":{\
    "commands": [\
"set Antonia.dum present",\
"set $SELF say @$recipient 10.🙋🏼...Anwesenheit...🙋🏼"\
    ]\
    },\
    "ist abwesend":{\
    "commands": [\
"set Antonia.dum absent",\
"set $SELF say @$recipient 10.🙋🏼...Anwesenheit...🙋🏼"\
    ]\
    }\
},\
"🙋🏼Christine":{\
"message": [\
    "{return('(ist abwesend) ') if(ReadingsVal('rr_Christine','presence','absent') eq 'present')}",\
    "{return('(ist anwesend) ') if(ReadingsVal('rr_Christine','presence','absent') =~ /gone|absent/)}",\
    "(abbrechen|zurück) ",\
"Ist Christine anwesend oder abwesend?"\
    ],  \
    "ist anwesend":{\
    "commands": [\
"set Christine.dum present",\
"set $SELF say @$recipient 10.🙋🏼...Anwesenheit...🙋🏼"\
    ]\
    },\
    "ist abwesend":{\
    "commands": [\
"set Christine.dum absent",\
"set $SELF say @$recipient 10.🙋🏼...Anwesenheit...🙋🏼"\
    ]\
    }\
},\
"🙋🏼Hannah":{\
"message": [\
    "{return('(ist abwesend) ') if(ReadingsVal('rr_Hannah','presence','absent') eq 'present')}",\
    "{return('(ist anwesend) ') if(ReadingsVal('rr_Hannah','presence','absent') =~ /gone|absent/)}",\
    "(abbrechen|zurück) ",\
"Ist Hannah anwesend oder abwesend?"\
    ],  \
    "ist anwesend":{\
    "commands": [\
"set Hannah.dum present",\
"set $SELF say @$recipient 10.🙋🏼...Anwesenheit...🙋🏼"\
    ]\
    },\
    "ist abwesend":{\
    "commands": [\
"set Hannah.dum absent",\
"set $SELF say @$recipient 10.🙋🏼...Anwesenheit...🙋🏼"\
    ]\
    }\
}\
  }\
}\
\

attr 10.Anwesenheit_Dialog_user allowed everyone
attr 10.Anwesenheit_Dialog_user devStateIcon Initialized:ios-on-blue disabled:ios-off
attr 10.Anwesenheit_Dialog_user disable 0
attr 10.Anwesenheit_Dialog_user group Dialoge
attr 10.Anwesenheit_Dialog_user icon dialog
attr 10.Anwesenheit_Dialog_user room 90_System->96_Dialogsteuerung

setstate 10.Anwesenheit_Dialog_user rr_Sebastian: 10.🙋🏼...Anwesenheit...🙋🏼
setstate 10.Anwesenheit_Dialog_user 2019-12-13 08:39:18 state rr_Sebastian: 10.🙋🏼...Anwesenheit...🙋🏼



In beiden fällen ist zurück%me% der Weg zum Metadialog und zurück (mit oder ohne Sprungmarke) der
Rückweg innerhalb eines Dialogs.

VG Sebastian

gestein

Hallo Sebastian,

vielen Dank. Das hilft mir schon mal sehr.

Wenn ich das nun richtig verstehe, dann wird das einfache "zurück" im Dialog selbst behandelt.
Das "zurück:%me%" wird im Meta-Dialog behandelt.
Also die Zeilen hier aus dem Wiki (https://wiki.fhem.de/wiki/MsgDialog#Define)
"zurück": {\
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/((.+)\\|.+$)/;;;; return($2 || $1);;;;)}"\
  },\


Stimmt das so?
Und Dein "lightsOn" ist das hier: https://forum.fhem.de/index.php/topic,77297.msg930299.html#msg930299
Richtig?

Danke, lg, Gerhard

binford6000

ZitatStimmt das so?
Korrekt.
ZitatUnd Dein "lightsOn" ist das hier: https://forum.fhem.de/index.php/topic,77297.msg930299.html#msg930299
Das ist die Funktion aus dem Lampen-Dialog.

VG Sebastian

gestein

Hallo Sebastian,

Danke. Ich kämpfe noch etwas mit meinem zeitlichen Ressourcen.
Eine Frage hätte ich noch:
Wenn Du in Deinem Dialog 02.Lampen_Dialog die Zeile "(abbrechen|zurück:%me%)" angibst, was erscheint dann als Label in Deinem Telegramm?
Bei mir sind es 2 Button: einer mit der Beschriftung "abbrechen" und einer mit "zurück:Marvis" (mein System heißt so).

Sollte dort aber nicht eigentlich "abbrechen" und "zurück" stehen?

Danke im Voraus
lg, Gerhard

binford6000

ZitatWenn Du in Deinem Dialog 02.Lampen_Dialog die Zeile "(abbrechen|zurück:%me%)" angibst, was erscheint dann als Label in Deinem Telegramm?

"(abbrechen|zurück:%me%) ",
sieht bei mir wie im Bild unten aus.
VG Sebastian

gestein

Das dachte ich mir.
Bei mir steht statt "zurück" "zurück:Marivs". Eigenartig.

Das muss ich mir auch mal näher anschauen.
Vielleicht ist auch das das ursächliche Problem.
lg, Gerhard

binford6000

Zitat von: gestein am 18 Dezember 2019, 11:55:26
Das dachte ich mir.
Bei mir steht statt "zurück" "zurück:Marivs". Eigenartig.

Das muss ich mir auch mal näher anschauen.
Vielleicht ist auch das das ursächliche Problem.
lg, Gerhard

Aber du bekommst schon einen Button angezeigt oder?

gestein

Ja, angezeigt wird ein Button.
Aber auf dem Button steht "🔙zurück:Marvis".

lg, Gerhard

binford6000

Zitat von: gestein am 18 Dezember 2019, 15:11:51
Ja, angezeigt wird ein Button.
Aber auf dem Button steht "🔙zurück:Marvis".

lg, Gerhard

Ah OK, das funktioniert anscheinend nur mit der Inline Tastatur. Ohne Inline Tastatur siehts bei mir dann auch so aus  ;)
VG Sebastian

gestein


gestein

Hallo,

ich habe mich noch etwas damit beschäftigt und jedesmal wenn ich in einem Dialog den "zurück"-Button drücke, kommt folgender Log-Eintrag:
ERROR evaluating my $DEV='Heizung_Dialog';ReadingsVal($DEV, 'rr_Gerhard_history', '') =~ m/((.+)\|.+$/;; return($2 || $1);;: Unmatched ( in regex; marked by <-- HERE in m/( <-- HERE (.+)\|.+$/ at (eval 46176) line 1.

Woran kann das liegen?

Danke im Voraus
lg, Gerhard

gestein

Hallo,

Ich habe noch einen Klammerfehler bei der Definition des ,,zurück" im meta_Dialog gefunden.
Keine Ahnung, wie das entstanden ist.
Jetzt kommt zwar der Fehler nicht mehr, dafür funktioniert das ,,zurück" immer noch nicht.

Wo wird eigentlich diese History gespeichert?
Mein receipient heißt: rr_Gerhard

Also müsste ich doch mit dem folgenden Befehl in der fhem-Befehlszeile was sehen. Oder?
{ReadingsVal(meta_Dialog, 'rr_Gerhard_history', '')}

Das ist aber immer leer.
Wo liegt mein Denkfehler?

Lg, Gerhard

igami

Zitat von: gestein am 02 Januar 2020, 18:12:10
Wo wird eigentlich diese History gespeichert?
Wird in jedem Dialog gespeichert.
Siehe commandref abschnitt readings: https://commandref.fhem.de/commandref_DE.html#msgDialog
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

gestein

Hallo Igami,

Danke für den Hinweis.
Ganz verstehe ich das aber noch immer nicht.

Sobald ich den entsprechenden Dialog (z.B. "🌡️Heizung") in Telegram aufrufe, gibt es im Dialog das Reading "rr_Gerhard_history" und dort steht dann nur der Name des Dialogs ("🌡️Heizung").
Wenn in dem Dialog "🌡️Heizung" ein Befehl ausgeführt wird, dann wird das Reading "rr_Gerhard_history" auf leer gesetzt.
Leider funktioniert dann kein zweiter Befehl im Dialog mehr (aber das ist wahrscheinlich ein anderes Problem).

Wenn ich den Dialog "🌡️Heizung" aufrufe und dann gleich auf "zurück" drücke, wird auch das Reading "rr_Gerhard_history" auf leer gesetzt.
Es tut sich aber sonst nichts.

In meinem Meta_Dialog steht für "zurück":
  "🔙zurück": {
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/((.+)\\|.+$)/;;;; return($2 || $1);;;;)}"
  },
  "zurück": {
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/((.+)\\|.+$)/;;;; return($2 || $1);;;;)}"
  },



lg, Gerhard