msgDialog: Instant Messaging als FHEM Interface

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

Vorheriges Thema - Nächstes Thema

igami

Zitat von: andy19850 am 10 Oktober 2017, 14:07:49
Nur als hint:
Habe jetzt es jetzt stundenlang probiert und dabei festgestellt, dass ich ein event-on-change-reading state im Bewohner hatte. Das muss man anpassen, sonst antwortet der Bot nichts  ::)
Werde ich in der commandref als Hinweis platzieren. Habe leider momentan nur wenig Zeit um daran weiter zu arbeiten.

Ich würde mich übrigens sehr freuen, wenn jemand einen Wiki Artikel für das Modul schreiben würde. Korrekturlesen würde ich den auch wohl :)
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

Flipper92

Danke für deine Antwort.
Ich werde mir deine Anregungen mal anschauen.
Bin leider kein super Programmiere, sondern kann nur gut kopieren und anpassen.  ;D ;D

Ich bin am überlegen ob es nicht Sinn macht irgendwo ein paar Dialoge zu sammeln.
Denn es ist schon mehr programmier arbeit von Nöten als ein einfaches Device setzen.
Zumindest finde ich es aktuell als eins der aufwändigsten Module die ich aktuell verwende.
Sollte aber übersichtlich und kommentierbar bleiben.


Zitat von: igami am 12 Oktober 2017, 20:18:13
Was meinst du damit? Ich verwende selbst keine cmdFavourites, sondern mache alles über msgDialog.
Ich wollte mir nur die Arbeit sparen ein eigenes Dialog dafür zu erstellen.
Da ich davor schon die cmdFavourites hatte wollte ich diese nur noch einbinden.
In diesem Fall werde ich sie aber vermutlich abschalten.

Zitat von: igami am 12 Oktober 2017, 20:18:13
Wird mit perl sort sortiert, alphabetisch, case sensitive. Eine eigene Sortierung würde ich in die myUtils auslagern.
Nach Device oder nach Befehl?

Grüße

binford6000

ZitatNach Device oder nach Befehl?
Müsste nach Name sortiert sein. Ich verwende noch Emoticons davor. Dann wird natürlich nach dem Unicode sortiert:
1F3E0Haus,
1F4A1Beleuchtung
1F4F7Cam
...

Siehe auch hier: https://apps.timwhitlock.info/emoji/tables/unicode ;)
VG Sebastian

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

igami

Habe das Modul nun offiziell eingecheckt. Wer nicht bis morgen warten möchte: SVN 76_msgDialog.pm

Änderungen gegenüber der vorherigen Version:
- im msgConfig device gibt es nun das Attribut msgDialog_evalSpecials anstelle von evalSpecials.
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

binford6000

@igami
ZitatIch würde mich übrigens sehr freuen, wenn jemand einen Wiki Artikel für das Modul schreiben würde. Korrekturlesen würde ich den auch wohl :)
Ich würde mich da bereit erklären!  ;)

Das Logging im meta_Dialog ist noch aktiv - dachte Du wolltest das noch ändern...:
2017.10.16 13:53:10 3: get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Sebastian|everyone).* trigger :
Verreist
Beleuchtung
Fahrzeiten
Gast
Haus-Automatisierung
Kamera
FHEM-Log
Tagesschau
VirtualPC

ZitatIch bin am überlegen ob es nicht Sinn macht irgendwo ein paar Dialoge zu sammeln.
@Flipper92: Gute Idee! Hier im Forum und/oder im Wiki...

VG Sebastian

igami

#96
Die Meldung hat verbose 3 und das ist so gewollt

Edit: Ich muss mich korrigieren: Die Meldung kommt nicht aus dem Modul.
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

binford6000

ZitatEdit: Ich muss mich korrigieren: Die Meldung kommt nicht aus dem Modul.
Korrekt. attr global verbose 2 lässt die Logeinträge bei jedem Menü-Aufruf verschwinden.
VG Sebastian

binford6000

Hi igami, gibt es eine Möglichkeit aus einem beliebigen Dialog direkt in den Meta-Dialog zu wechseln? Also eine Art "Hauptmenü" zur Anzeige aller verfügbaren Dialoge? 
Manuell eingegeben funktioniert es. Aber als Menüpunkt innerhalb eines Dialogs nicht. Dann erscheint nur der Menüpunkt für den Meta-Dialog und nicht die Auflistung aller Dialoge...

Und "zurück" funktioniert ja nur innerhalb eines Dialogs...

VG Sebastian

igami

Zitat von: binford6000 am 19 Oktober 2017, 20:39:45
Hi igami, gibt es eine Möglichkeit aus einem beliebigen Dialog direkt in den Meta-Dialog zu wechseln? Also eine Art "Hauptmenü" zur Anzeige aller verfügbaren Dialoge? 
Manuell eingegeben funktioniert es. Aber als Menüpunkt innerhalb eines Dialogs nicht. Dann erscheint nur der Menüpunkt für den Meta-Dialog und nicht die Auflistung aller Dialoge...

Was spricht gegen "set meta_Dialog say @$recipient %me%" aus einem anderen Dialog raus?
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

binford6000

ZitatWas spricht gegen "set meta_Dialog say @$recipient %me%" aus einem anderen Dialog raus?
Moin, soweit war ich auch schon. Aber Dann erscheint nur der Menüpunkt für den Meta-Dialog und nicht die Auflistung aller Dialoge...
Ich hab mal Screenshots angehängt...
VG Sebastian

Flipper92

#101
Zitat von: binford6000 am 19 Oktober 2017, 20:39:45
Also eine Art "Hauptmenü" zur Anzeige aller verfügbaren Dialoge? 
Manuell eingegeben funktioniert es. Aber als Menüpunkt innerhalb eines Dialogs nicht.

Ich hab bei mir in einem Menü folgendes laufen:
"(zurück:%me%) ",
Dies als "Taste". Also im gesamten:
"message": [
        "(Wohnzi # Soll [Wohnzimmer.Thermostat:desiredTemperature]°C # Ist [Wohnzimmer.Temperatur:state]:Heizungwozi) ",
        "(Schlaf # Soll [Schlafzimmer.Thermostat:desiredTemperature]°C # Ist [Schlafzimmer.Temperatur:state]:Heizungschlaf) ",
"(Jenni # Soll [Jennifer.Thermostat:desiredTemperature]°C # Ist [Jennifer.Temperatur:state]:Heizungjenni) ",
"(Küche # Soll [Kueche.Thermostat:desiredTemperature]°C:Heizungkueche|Bad # Soll [Bad.Thermostat:desiredTemperature]°C:Heizungbad) ",
"(An/Aus:heizunganaus|zurück:%me%) ",
        "Aktuell ist die Heizungsautomation: [Thermostat.Automation:state]"
      ],

Kannst ja Mal testen.


Zitat von: igami am 12 Oktober 2017, 20:18:13

defmod Einkaufsliste_Dialog msgDialog { \
  "Einkaufsliste": {\
    "message": [\
      "(Waren hinzufügen) ", \
      "(Waren entfernen) ", \
      "(einkaufen) ", \
      "(abbrechen) ",\
      "{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
    ],\
    "Waren hinzufügen": {\
      "message": [\
        "Bitte jede Ware als neue Nachricht hinzufügen.",\
        "Das hinzufügen von Waren durch \"/beenden\" beenden."\
      ],\
      "Ware hinzufügen": {\
        "match": "[^/]+",\
        "commands": [\
          "set %PostMe% add %list% $message",\
          "setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen"\
        ]\
      }\
    },\
    "Waren entfernen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'beenden'). ') ')}",\
        "Welche Ware möchtest du entfernen?"\
      ],\
      "Ware entfernen": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|Waren entfernen"\
        ]\
      }\
    },\
    "einkaufen": {\
      "commands": [\
        "setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"\
      ],\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(beenden) ",\
        "Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
      ]\
    },\
    "noch einzukaufen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(beenden) ",\
        "Noch einzukaufen:"\
      ],\
      "Ware eingekauft": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|noch einzukaufen"\
        ]\
      }\
    }    \
  }\
}
attr Einkaufsliste_Dialog evalSpecials PostMe=PostMe\
list=Einkaufsliste

Wie fühlst du da neue Produkte hinzu?
Mit "Käse"{neue Nachricht}"brot" usw.
Oder setzt du da noch was davor wie z.b. / oder + ?

Ich hab gerade noch das Problem, das ich nicht msgDialog_evalSpecials wählen kann, sondern nur evalSpecials. Ich Versuch Mal das Modul neu zu installieren.

Edti: gerade neu runter geladen, bei mir heißt das Attribut weiter evalSpecials. Liegt es daran, das es vor dem Update schon gesetzt war?

binford6000

@Flipper92:
Zitat"(zurück:%me%) "
Bedeutet bei mir dass eine Nachricht "zurück:Q" gesendet wird und danach nichts passiert.
Ich bekomme partout kein "Hauptmenü" hin. Naja, ein Klick mehr macht's ja jetzt auch nicht,
aber schick wäre es schon ;)

@igami:
Wollte aus o.g. Thema mal mein %me% ändern um zu sehen ob es daran liegen könnte.
Beim verändern von msgDialog_evalSpecials in globalMsg bekomme ich diesen Fehler:
globalMsg: unknown attribute msgDialog_evalSpecials. Type 'attr globalMsg ?' for a detailed list.
Im Raw ändern geht auch nicht: Global configuration device already defined: globalMsg
Konnte es mit userattr globalMsg msgDialog_evalSpecials dann wieder veränderbar machen...



igami

Zitat von: binford6000 am 20 Oktober 2017, 08:00:26
Moin, soweit war ich auch schon. Aber Dann erscheint nur der Menüpunkt für den Meta-Dialog und nicht die Auflistung aller Dialoge...
Ich hab mal Screenshots angehängt...
VG Sebastian
Du bekommst ja ein Keyboard angezeigt. Da kann irgendwas nicht passen. Poste mal bitte ein list von dem Dialog in den du es einbauen möchtest.

Zitat von: Flipper92 am 20 Oktober 2017, 21:04:45
Wie fühlst du da neue Produkte hinzu?
Mit "Käse"{neue Nachricht}"brot" usw.
Oder setzt du da noch was davor wie z.b. / oder + ?
Einfach jedes Element als neue Nachricht und dann mit /beenden das Hinzufügen beenden.

Zitat von: Flipper92 am 20 Oktober 2017, 21:04:45
Ich hab gerade noch das Problem, das ich nicht msgDialog_evalSpecials wählen kann, sondern nur evalSpecials. Ich Versuch Mal das Modul neu zu installieren.

Edti: gerade neu runter geladen, bei mir heißt das Attribut weiter evalSpecials. Liegt es daran, das es vor dem Update schon gesetzt war?
Ich gucke mir das morgen noch mal an, eigentlich sollten die Attribute über das userattr im msgConfig device verfügbar sein. Ansonsten wie binford6000 bitte erstmal manuell hinzufügen.
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

binford6000

#104
ZitatDu bekommst ja ein Keyboard angezeigt. Da kann irgendwas nicht passen. Poste mal bitte ein list von dem Dialog in den du es einbauen möchtest.
Das "(zurück:%me%) ", wird auf meinem Keyboard als "zurück:Q" angezeigt. Das solllte ja schon so nicht sein oder?
Hier ein Dialog wo ich es versuchsweise eingebaut habe:
Internals:
   DEF        {"5.Tagesschau in 100s":{
  "message": [
    "(Als mp3 abspielen) ",
    "(Link zur Sendung schicken) ",
    "(abbrechen|zurück:%me%) ",
"Die Tagesschau in 100 Sekunden..."
  ],
  "Als mp3 abspielen":{
  "commands": "set tagesschau100sek.DUM on",
  "message":[
    "(%me%) ",
    "TS in 100s wird abgespielt."
  ]
  },
  "Link zur Sendung schicken":{
  "message":[
    "(%me%) ",
    "Link: [rss_tagesschau100:Link]"
  ]
  }
}
}

   MSGCOMMAND msg push \@$recipients $message
   NAME       Tagesschau_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         228
   NTFY_ORDER 50-Tagesschau_Dialog
   STATE      rr_Sebastian: 5.Tagesschau in 100s
   TRIGGER    5.Tagesschau in 100s
   TYPE       msgDialog
   READINGS:
     2017-10-22 07:39:32   rr_Sebastian_history 5.Tagesschau in 100s
     2017-10-22 07:39:32   state           rr_Sebastian: 5.Tagesschau in 100s
Attributes:
   allowed    rr_Sebastian
   disable    0
   group      Dialog
   icon       dialog@green
   room       91_Webdevices

VG Sebastian

EDIT: Mit Inline Keyboard funktioniert es! Geht das auch mit normalem Keyboard?