msgDialog: Instant Messaging als FHEM Interface

Begonnen von igami, 30 September 2017, 15:09:01

Vorheriges Thema - Nächstes Thema

Marlen

Gibt es eigentlich auch die Möglichkeit einen Code einzugeben?

z.B.: gleiche ich meine Strom-, Wasser-, Gaszähler immer mal per Telegram ab.

Wie kann man sowas mit dem Modul msgDialog machen?

LG
  Marlen

binford6000

ZitatWas ist denn
Code: [Auswählen]
$recipient_history'
? Wo kommt das her?

Das ist ein Reading in einem Dialog vom aufrufenden ROOMATE (recipient):

rr_Sebastian_history  1.Beleuchtung|Lampen einschalten

Es wird vom Meta-Dialog beim Aufrufen eines Dialogs erstellt, beim Benutzen des Dialogs geändert
und beim Beenden/Abbrechen des Dialogs wieder gelöscht.


Marlen

Hmmm.....

das reading wird beim aufruf angelegt, aber leer.

Beim beenden wird das wieder gelöscht.

Lg
  Marlen

igami

Wenn der Dialog beendet wird, also es keine nachfolgenden Stufen mehr gibt, wird das reading wieder gelernt.
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

Marlen

Also, jetz mal für blondi's:

Hier mein Heizung_Dialog (noch im Aufbau):
{ "Heizung": {
    "message": [
  "{return('(WarmWasser) ')}",
  "{return('(Wohnzimmer) ')}",
  "{return('(Kinderzimmer) ')}",
  "{return('(abbrechen|zurück) ')}",
  "Aktuell Temperaturen:",
  "Warmwasser: [WarmWasser:temperature]°C.",
  "Wohnzimmer: [Fuehler_Wz:temperature]°C.",
  "Kinderzimmer:[ESPEasy_Steckdose_03_Temp:Temperature]°C.",
  "Bitte auswählen"
    ]
},
"WarmWasser": {
    "message": [
  "{return('(Anlage AN|Anlage AUS) ')}",
  "{return('(bis 6 Uhr scharf stellen) ')}",
  "{return('(Innen-Sirene aktiv|Innen-Sirene inaktiv) ')}",
  "{return('(Außen-Sirene aktiv|Außen-Sirene inaktiv) ')}",
  "{return('(Urlaubsmodus AN|Urlaubsmodus AUS) ')}",
  "{return('(letzter Urlaubstag) ')}",
  "{return('(Anwesneheitssimulation AN|Anwesneheitssimulation AUS) ')}",
  "{return('(abbrechen|zurück) ')}",
  "Bitte auswählen"
    ]
},
"Kinderzimmer": {
    "message": [
  "{return('(Aktuelle-Temperatur) ')}",
  "{return('(Tages-Temperatur) ')}",
  "{return('(Absenk-Temperatur) ')}",
  "{return('(Nacht-Temperatur) ')}",
  "{return('(abbrechen|zurück) ')}",
  "Welche Temperatur willst du für Kinderzimmer ändern?"
    ]
},
"Wohnzimmer": {
    "message": [
  "{return('(Aktuelle-Temperatur) ')}",
  "{return('(Tages-Temperatur) ')}",
  "{return('(Absenk-Temperatur) ')}",
  "{return('(Nacht-Temperatur) ')}",
  "{return('(abbrechen|zurück) ')}",
  "Welche Temperatur willst du für Kinderzimmer ändern?"
    ],
    "Aktuelle-Temperatur": {
          "message": [
        "(bestätigen|abbrechen) ",
"(zurück|zurückalt) ",
        "(aus:04.5|5°C:05.0|6°C:06.0|7°C:07.0) ",
"(8°C:08.0|9°C:09.0|10°C:10.0|11°C:11.0) ",
"(12°C:12.0|13°C:13.0|14°C:14.0|15°C:15.0) ",
"(15.5°C:15.5|16°C:16.0|16.5°C:16.5|17°C:17.0) ",
"(17.5°C:17.5|18°C:18.0|18.5°C:18.5|19°C:19.0) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
"(27°C:27|28°C:28|29°C:29|voll:29.5) ",
        "Aktuell Wohnzimmer: [Fuehler_Wz:temperature]°C.",
"Treffen Sie das Setup."
      ],
      "Setup": {
        "match": "[0-2][0-9][:.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';; fhem(\"set data1 $temperatur\");;}"
        ]
}
}
}

}


Mein Reading
rg_Marlen_history  Wohnzimmer|Aktuelle-Temperatur

Wenn ich auf zurück gehe, komm ich wieder in Wohnzimmer, aber von hier komm ich wieder zurück in Heizung und von Heizung will ich eigentlich wieder zum start kommen.

Wie macht man das?

Lg
  Marlen

binford6000

#260
ZitatWie macht man das?
Dein zurück geht eine Ebene höher. Du bist aber bereits auf der höchsten Ebene in deinem Dialog  ;)
Das siehst Du auch daran, dass Kinderzimmer, WarmWasser und Wohnzimmer direkt unter Heizung als Menüpunkt auftauchen.
Mit
"{return('(abbrechen|zurück:%me%) ')}", kommst du wieder zurück zum Meta-Dialog und zur Dialog-Auswahl.
In Antwort #109  hat Flipper92 seinen Heizungs-Dialog gepostet...

Marlen

Also nochmal....ich will es nur verstehen!

Meine Dialog Heizung
1. Ebene: Wohnzimmer
2. Ebene: Aktuelle-Temperatur

ich bin auf der 2.Ebene und drücke zurück, dann bin ich in der 1.Ebene (Wohnzimmer) ....so soll es ja sein.

Drück ich da zurück, passiert nicht's!

Auch bei zurück:%me% passiert nichts,

oder

"set $SELF say @$recipient Heizung"

Irgendwo ist doch da der Wurm drin..... :-[




binford6000

Ich habe jetzt nur mal das Wohnzimmer Beispielhaft zum Laufen gebracht:

defmod Marlen msgDialog { "Heizung": {\
    "message": [\
  "{return('(WarmWasser) ')}",\
  "{return('(Wohnzimmer) ')}",\
  "{return('(Kinderzimmer) ')}",\
  "{return('(abbrechen|zurück:%me%) ')}",\
  "Aktuell Temperaturen:",\
  "Warmwasser: [WarmWasser:temperature]°C.",\
  "Wohnzimmer: [Fuehler_Wz:temperature]°C.",\
  "Kinderzimmer:[ESPEasy_Steckdose_03_Temp:Temperature]°C.",\
  "Bitte auswählen"\
    ],\
"Wohnzimmer": {\
    "message": [\
  "{return('(Aktuelle-Temperatur) ')}",\
  "{return('(Tages-Temperatur) ')}",\
  "{return('(Absenk-Temperatur) ')}",\
  "{return('(Nacht-Temperatur) ')}",\
  "{return('(abbrechen|zurück) ')}",\
  "Welche Temperatur willst du für Kinderzimmer ändern?"\
    ],\
    "Aktuelle-Temperatur": {\
        "message": [\
        "(bestätigen|abbrechen) ",\
"(zurück|zurückalt) ",\
        "(aus:04.5|5°C:05.0|6°C:06.0|7°C:07.0) ",\
"(8°C:08.0|9°C:09.0|10°C:10.0|11°C:11.0) ",\
"(12°C:12.0|13°C:13.0|14°C:14.0|15°C:15.0) ",\
"(15.5°C:15.5|16°C:16.0|16.5°C:16.5|17°C:17.0) ",\
"(17.5°C:17.5|18°C:18.0|18.5°C:18.5|19°C:19.0) ",\
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",\
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",\
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",\
"(27°C:27|28°C:28|29°C:29|voll:29.5) ",\
        "Aktuell Wohnzimmer: [Fuehler_Wz:temperature]°C.",\
"Treffen Sie das Setup."\
      ],\
      "Setup": {\
        "match": "[0-2][0-9][.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set data1 $temperatur\");;;;}",\
  "set $SELF say @$recipient Heizung"\
        ]\
}\
}\
}\
}\
}

Beim "match" war noch ein : zuviel  ;)

igami

Hier mein Dialog für die Zählerstände:

myUtils:

sub msgDialog_Zaehlerstaende {
  my @meter = devspec2array("subType=meter:FILTER=disable!=1");
  $_ =
      (split(": ", AttrVal($_, "alias", $_)))[1]
    . "         " . InternalVal($_, "STATE", "")
    . " (" . (split(" ", ReadingsTimestamp($_, "state", "")))[0] . ")"
  for(@meter);;
 
  return("(" . join(") (", @meter) . ") ");
}

sub msgDialog_Zahelerstand_anpassen($$$) {
  my ($SELF, $recipient, $state) = @_;
  my $meter = ReadingsVal("$SELF", ".$recipient\_meter", "");
  $state =~ s/\,/\./;
  if($state < ReadingsNum($meter, "state", 0)){
    fhem("set $SELF say Zähler|Zählerstand anpassen|Zählerstand zu klein");
  }
  else{
    fhem("set $meter $state; deletereading $SELF .$recipient\_meter; set $SELF say \@$recipient Zähler;");
  }
}

sub msgDialog_Zaehler_speichern($$$) {
  my ($SELF, $recipient, $message) = @_;
  # $message = encode('UTF-8', $message);
  my @meter = split(" ", "$message");
  splice(@meter, -3, 3);
  @meter = devspec2array("subType=meter:FILTER=alias=.+@meter");
 
  fhem("setreading $SELF .$recipient\_meter $meter[0]");
}


msgDialog:

defmod Zaehler_Dialog msgDialog {\
  "Zähler": {\
    "message": [\
      "{msgDialog_Zaehlerstaende()}",\
      "(abbrechen) ",\
      "Zählerstände:"\
    ],\
    "Zählerstand anpassen": {\
      "match": ".+zähler.+",\
      "commands": "{msgDialog_Zaehler_speichern('$SELF', '$recipient', '$message')}",\
      "message": [\
        "TelegramBot_MTYPE=queryInline (zurück|abbrechen) ",\
        "{my $meter = AttrVal(ReadingsVal('$SELF', '.$recipient_meter', ''), 'alias', '');;;; return(\"Bitte den neuen Zählerstand für \\\"$meter\\\" angeben.\")}"\
      ],\
      "Zählerstand angepasst": {\
        "match": "\\d+((\\.|\\,)\\d+)?",\
        "commands": "{msgDialog_Zahelerstand_anpassen('$SELF', '$recipient', '$message')}"\
      },\
      "Zählerstand zu klein": {\
        "commands": "setreading $SELF $recipient_history Zähler|Zählerstand anpassen",\
        "message": [\
          "TelegramBot_MTYPE=queryInline (zurück|abbrechen) ",\
          "Der neue Zählerstand darf nicht kleiner als der aktuelle Zählerstand sein."\
        ]\
      }\
    }\
  }\
}
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

Marlen

#264
Zitat von: binford6000 am 04 Dezember 2017, 15:29:22
Ich habe jetzt nur mal das Wohnzimmer Beispielhaft zum Laufen gebracht:

defmod Marlen msgDialog { "Heizung": {\
    "message": [\
  "{return('(WarmWasser) ')}",\
  "{return('(Wohnzimmer) ')}",\
  "{return('(Kinderzimmer) ')}",\
  "{return('(abbrechen|zurück:%me%) ')}",\
  "Aktuell Temperaturen:",\
  "Warmwasser: [WarmWasser:temperature]°C.",\
  "Wohnzimmer: [Fuehler_Wz:temperature]°C.",\
  "Kinderzimmer:[ESPEasy_Steckdose_03_Temp:Temperature]°C.",\
  "Bitte auswählen"\
    ],\
"Wohnzimmer": {\
    "message": [\
  "{return('(Aktuelle-Temperatur) ')}",\
  "{return('(Tages-Temperatur) ')}",\
  "{return('(Absenk-Temperatur) ')}",\
  "{return('(Nacht-Temperatur) ')}",\
  "{return('(abbrechen|zurück) ')}",\
  "Welche Temperatur willst du für Kinderzimmer ändern?"\
    ],\
    "Aktuelle-Temperatur": {\
        "message": [\
        "(bestätigen|abbrechen) ",\
"(zurück|zurückalt) ",\
        "(aus:04.5|5°C:05.0|6°C:06.0|7°C:07.0) ",\
"(8°C:08.0|9°C:09.0|10°C:10.0|11°C:11.0) ",\
"(12°C:12.0|13°C:13.0|14°C:14.0|15°C:15.0) ",\
"(15.5°C:15.5|16°C:16.0|16.5°C:16.5|17°C:17.0) ",\
"(17.5°C:17.5|18°C:18.0|18.5°C:18.5|19°C:19.0) ",\
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",\
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",\
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",\
"(27°C:27|28°C:28|29°C:29|voll:29.5) ",\
        "Aktuell Wohnzimmer: [Fuehler_Wz:temperature]°C.",\
"Treffen Sie das Setup."\
      ],\
      "Setup": {\
        "match": "[0-2][0-9][.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set data1 $temperatur\");;;;}",\
  "set $SELF say @$recipient Heizung"\
        ]\
}\
}\
}\
}\
}

Beim "match" war noch ein : zuviel  ;)

Guten Morgen,

ich bin jetzt total verwirrt!
Wenn ich start eingebe um meine Übersicht über meine Dialoge zu erhalten, steht da u.a. jetzt Heizung, WarmWasser, Kinderzimmer, Wohnzimmer!
Aber WarmWasser, Kinderzimmer, Wohnzimmer sind doch Menüpunkte unter unter Heizung.
Wenn ich auf Heizung klicke kommen sie ja auch. Warum werden die doppelt angezeigt?

Und wenn ich bei der Temperatur Auswahl bin, steht da auf dem Button "19.5°C:19.5" da sollte doch nur 19.5°C stehen, oder?

LG
  Malren

binford6000

ZitatWenn ich start eingebe um meine Übersicht über meine Dialoge zu erhalten, steht da u.a. jetzt Heizung, WarmWasser, Kinderzimmer, Wohnzimmer!
Das hatte ich gestern bei meinem Test auch. Das liegt an den Klammern. Deswegen habe ich die anderen Zimmer erstmal entfernt, um das "zurück" mal zu testen.
Im Post #247 kann man die Struktur der einzelnen "Blöcke" erkennen. Als nicht-JSON-Profi erstelle ich halt für jeden Menüpunkt direkt darunter alle Unterpunkte...
ZitatUnd wenn ich bei der Temperatur Auswahl bin, steht da auf dem Button "19.5°C:19.5" da sollte doch nur 19.5°C stehen, oder?
Ja da sollte nur 19.5 stehen. Tut es bei mir auch (siehe Screenshot).
VG Sebastian

igami

Man weiß ja nicht ob Marlen Inline Keyboards verwendet oder nicht
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

Marlen

Bei mir schaut das so aus:(https://uploads.tapatalk-cdn.com/20171205/6ae1d357a477143436eadbb2755483e4.jpg)


binford6000

Im Wiki https://wiki.fhem.de/wiki/MsgDialog steht auch, wie man schnell zwischen Inline- und normaler Tastatur umschalten kann.
Ist ganz praktisch zum Testen... ;)