msgDialog: Instant Messaging als FHEM Interface

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

Vorheriges Thema - Nächstes Thema

Marlen

Hallo,

    "commands": [
  "set %PostMe% add %list% $message --> $today",


Das hab ich schon funktioniert, geht wohl nicht da $today in Perl ausgewertet wird.

LG
  Marlen

igami

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

Thargor


Ich versuche mich auch gerade an den Dialogen ... stehe aber irgendwie auf dem Schlauch. Vielleicht kann mich jemand erleuchten:

Ich habe drei Dialoge definiert: Eingang, Drucker, Verkehr.
Melde ich mich über Telegram mit meinem Keyword sehe ich einen Dialog, bei dem ich Eingang, Drucker, Verkehr auswählen kann.
Gehe ich dann zum Beispiel auf Eingang, wird mir der passende Dialog angezeigt und nach der Auswahl auch die enstprechende Aktion auch ausgeführt. Will ich aber die gleiche Aktion nochmal durchführen, dann funktioniert das nicht. Ich muss zunächst wieder per Keyword in den "Übersichtsdialog": Eingang, Drucker, Verkehr und kann dann eine weitere Aktion ausführen.

Ich vermute mal, dass das so eigentlich nicht Sinn der Sache ist, oder? Kann ich das Verhalten ändern bzw. woran liegt das?

Vielen Dank!

Wuehler

Bin jetzt noch kein msgDialog-Experte, vermute aber (ohne List des Dialogs kann man nur raten), dass du in einer tiefern Dialogebene bist und dort nicht anbietest, denselben Befehl nochmal zu senden. Du kommst also runter in den Ebenen, aber nicht wieder hoch.

Thargor

Zitat von: Wuehler am 21 März 2018, 10:56:17
Bin jetzt noch kein msgDialog-Experte, vermute aber (ohne List des Dialogs kann man nur raten), dass du in einer tiefern Dialogebene bist und dort nicht anbietest, denselben Befehl nochmal zu senden. Du kommst also runter in den Ebenen, aber nicht wieder hoch.

Jein. Im Dialog wird der Befehl noch angeboten und ich kann ich auch auslösen, er wird auch an FHEM übermittelt, aber die Aktion wird nicht mehr ausgelöst.

Beispiel:
Mein Keyword startet den Startdialog, ich wähle Drucker und im Druckerdialog dann Anschalten. Funktioniert. Wenn ich dann aber im noch offenen Druckerdialog Ausschalten wähle, wird der Befehl zwar an FHEM geschickt aber nicht ausgeführt. Wenn ich wieder über das Keyword im Startdialog starte, dann Drucker wähle und dann Ausschalten, dann klappt es.

Amenophis86

Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Thargor

#411
Damit kann ich dienen:
Der Metadialog:

{   "%me%":
{
"match": "\/?(start|%me%)",
"commands": "deletereading TYPE=msgDialog $recipient_history",
"message": ["{return('(' . join(') (', sort(split('\n', fhem('get TYPE=msgDialog:FILTER=NAME!=$SELF:FILTER=allowed=.*($recipient|everyone).* trigger'))), 'abbrechen') . ') ')}", "Ich kann folgendes für dich tun:" ]   
}, 
"zurück":
{     
"commands": "set $recipient_history=.+|.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/; return $2 ? $2 : $1;)}"   
},   
"abbrechen":
{     
"match": "\/?abbrechen",     "commands": "deletereading TYPE=msgDialog $recipient_history",     
"message": ["TelegramBot_MTYPE=queryInline (%me%) ","Dialog abgebrochen."]   
},   
"beenden":
{
"match": "\/?beenden",     "commands": "deletereading TYPE=msgDialog $recipient_history",     
"message": ["TelegramBot_MTYPE=queryInline (%me%) ","Dialog beendet."]   
}
}


Und hier beispielhaft einer der Dialoge:

{
  "Drucker":{
       "message": [ "(Bild) ", "(Anschalten) ",  "(Ausschalten) ",  "(%me%) ", "{'Aktueller Status: '.ReadingsVal('Drucker','progress','').' %'}", "Was kann ich für dich tun? ],
       "Bild":{
           "commands":[ "{get_octoprint_image();}", "set WeidenstationBot sendImage /public/temp/drucker.jpg" ]
        },
       "Anschalten":{
          "commands":["set PowerDrucker on"]
       },
      "Ausschalten":{
          "commands":["set PowerDrucker off"]
      }
}
}

Wuehler

Ich vermute, da fehlt dann sowas wie bei Marlen eine Seite vorher in diesem Thread. Du kommst zwar tiefer im Dialog, der Dialog kommt von alleine aber nicht wieder hoch.
Im letzten command noch sowas wie
set $SELF say $recipient Drucker
Im Drucker Dialog fehlt auch noch ein abbrechen oder du nimmst in meinem code nicht Drucker sondern dein codewot für den Metadialog. Dann muss du aber immer wenn du auf Drucker klickst entweder an oder ausschalten.

igami

Meiner Meinung nach wurde das Problem erkannt und beschrieben.
Ich finde es sehr schön zu sehen, dass hier so viel Hilfe aus der Community kommt :)
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

Wuehler

Danke  :) und dir auch für das Modul. Der Grillthermometerdialog funktioniert übrigens Klasse.

Thargor

Vielen Dank für die Hilfestellung.

Zitat von: Wuehler am 21 März 2018, 20:28:55
Ich vermute, da fehlt dann sowas wie bei Marlen eine Seite vorher in diesem Thread. Du kommst zwar tiefer im Dialog, der Dialog kommt von alleine aber nicht wieder hoch.
Im letzten command noch sowas wie
set $SELF say $recipient Drucker

Leider verstehe ich das nicht. In welchem letzten Command? Nach jedem Kommando, dass ich schicken möchte?

Zitat von: Wuehler am 21 März 2018, 20:28:55
Im Drucker Dialog fehlt auch noch ein abbrechen oder du nimmst in meinem code nicht Drucker sondern dein codewot für den Metadialog. Dann muss du aber immer wenn du auf Drucker klickst entweder an oder ausschalten.

Die Funktion hat doch "(%me%) ". Damit komm ich wieder in den Startdialog.

Wuehler

Stimmt. Das me wirkt wie abbrechen. Dann musst du nur bei den unterdialogen Bild, anschalten und ausschalten ein zusätzliches Kommando einfügen. Siehe im Dialog von Marlen. Wenn du in der tiefsten Dialogebene bist bringst du deen Dialog damit automatisch wieder in eine höhere Ebene. Ansonsten bleibt er dort stehen und du bekommst weder ein neues Menü noch reagiert er auf eine Eingabe, da ja keine tiefere Ebene zur Verfügung steht.

Thargor

Vielen Dank!
So klappt es, allerdings kommt dann natürlich wieder der Dialogtext ... je nach Kommando sogar vor der eigentlichen Antwort des Befehls, was ein wenig doof aussieht. Ich fürchte das kann man nicht unterdrücken? Wäre nett, aber damit kann ich leben :-)

Wuehler

Eine Alternative wäre, dass du jedesmal auf unterer Ebene folgendes mitsendest (kopiert aus dem Notfalldialog von Seite 27):
"message": [
"TelegramBot_MTYPE=queryInline (%me%) "


ErzGabriel

Hallo zusammen.
Ich habe heute meinen Dialog für Geräte um ein Gerät erweitert aber es wird mir nicht angezeigt und somit kann ich es nicht schalten.
Der Dialog ansonsten funktioniert ohne Probleme, nur das neue Gerät wird nicht angezeigt. Habe Fhem aber auch neu gestartet, das alles neu eingelesen wird.
es handelt sich um das Büroladegerät
defmod geraete_Dialog msgDialog {"Geräte":{\
  "message": [\
    "(Geräte einschalten) ",\
    "(Geräte ausschalten) ",\
    "(zurück) ",\
    "(abbrechen) ",\
    "Geräte schalten:"\
  ],\
    "Geräte einschalten":{\
    "message":[\
      "{return('(Spüle einschalten) ') if(ReadingsVal('SPUELE', 'state', '') eq 'off')}",\
      "{return('(Büroventilator einschalten) ') if(ReadingsVal('VENT_BUERO', 'state', '') eq 'off')}",\
  "{return('(Büroladegerät einschalten) ') if(ReadingsVal('LADEGERAET', 'state', '') eq 'off')}",\
      "{return('(Wohnzimmer TV einschalten) ') if(ReadingsVal('TV_WOHN', 'state', '') eq 'off')}",\
      "{return('(Wohnzimmerventilator einschalten) ') if(ReadingsVal('VENT_WOHN', 'state', '') eq 'off')}",\
      "{return('(Ladegerät einschalten) ') if(ReadingsVal('PLUG_BED', 'state', '') eq 'off')}",\
      "{return('(Schlafzimmer TV einschalten) ') if(ReadingsVal('TV_BED', 'state', '') eq 'off')}",\
      "(zurück) ",\
      "(abbrechen) ",\
      "Welches Gerät soll eingeschaltet werden?"\
    ],\
    "Spüle einschalten":{\
    "commands": "set SPUELE on",\
    "message":[\
      "(%me%) ",\
      "Spüle wurde eingeschaltet."\
    ]\
    },\
    "Büroventilator einschalten":{\
    "commands": "set VENT_BUERO on",\
    "message":[\
      "(%me%) ",\
      "Büroventilator wurde eingeschaltet."\
    ]\
    },\
    "Büroladegerät einschalten":{\
    "commands": "set LADEGERAET on",\
    "message":[\
      "(%me%) ",\
      "Büroladegerät wurde eingeschaltet."\
    ]\
    },\
    "Wohnzimmer TV einschalten":{\
    "commands": "set TV_WOHN on",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer TV wurde eingeschaltet."\
    ]\
    },\
    "Wohnzimmerventilator einschalten":{\
    "commands": "set VENT_WOHN on",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmerventilator wurde eingeschaltet."\
    ]\
},\
"Ladegerät einschalten":{\
    "commands": "set PLUG_BED on",\
    "message":[\
      "(%me%) ",\
      "Ladegerät wurde eingeschaltet."\
    ]\
},\
"Schlafzimmer TV einschalten":{\
    "commands": "set TV_BED on",\
    "message":[\
      "(%me%) ",\
      "Schlafzimmer TV wurde eingeschaltet."\
    ]\
}\
    },\
"Geräte ausschalten":{\
    "message":[\
      "{return('(Spüle ausschalten) ') if(ReadingsVal('SPUELE', 'state', '') ne 'off')}",\
      "{return('(Büroventilator ausschalten) ') if(ReadingsVal('VENT_BUERO', 'state', '') ne 'off')}",\
  "{return('(Büroladegerät ausschalten) ') if(ReadingsVal('LADEGERAET', 'state', '') eq 'off')}",\
      "{return('(Wohnzimmer TV ausschalten) ') if(ReadingsVal('TV_WOHN', 'state', '') ne 'off')}",\
      "{return('(Wohnzimmerventilator ausschalten) ') if(ReadingsVal('VENT_WOHN', 'state', '') ne 'off')}",\
      "{return('(Ladegerät ausschalten) ') if(ReadingsVal('PLUG_BED', 'state', '') ne 'off')}",\
      "{return('(Schlafzimmer TV ausschalten) ') if(ReadingsVal('TV_BED', 'state', '') ne 'off')}",\
      "(zurück) ",\
      "(abbrechen) ",\
      "Welches Gerät soll ausgeschaltet werden?"\
    ],\
    "Spüle ausschalten":{\
    "commands": "set SPUELE off",\
    "message":[\
      "(%me%) ",\
      "Spüle wurde ausgeschaltet."\
    ]\
    },\
    "Büroventilator ausschalten":{\
    "commands": "set VENT_BUERO off",\
    "message":[\
      "(%me%) ",\
      "Büroventilator wurde ausgeschaltet."\
    ]\
    },\
    "Büroladegerät ausschalten":{\
    "commands": "set LADEGERAET off",\
    "message":[\
      "(%me%) ",\
      "Büroladegerät wurde ausgeschaltet."\
    ]\
    },\
    "Wohnzimmer TV ausschalten":{\
    "commands": "set TV_WOHN off",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer TV wurde ausgeschaltet."\
    ]\
    },\
    "Wohnzimmerventilator ausschalten":{\
    "commands": "set VENT_WOHN off",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmerventilator wurde ausgeschaltet."\
    ]\
    },\
    "Ladegerät ausschalten":{\
    "commands": "set PLUG_BED off",\
    "message":[\
      "(%me%) ",\
      "Ladegerät wurde ausgeschaltet."\
    ]\
    },\
    "Schlafzimmer TV ausschalten":{\
    "commands": "set TV_BED off",\
    "message":[\
      "(%me%) ",\
      "Schlafzimmer TV wurde ausgeschaltet."\
    ]\
    }\
   }\
}\
}
attr geraete_Dialog allowed rr_Marcus
attr geraete_Dialog room Telegram

setstate geraete_Dialog 2018-03-27 18:33:44 state Initialized



Könnte mal bitte jemand drüber schauen, ob ich da ein Fehler drin habe, den ich selbst nicht sehe. Danke.