msgDialog: Instant Messaging als FHEM Interface

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

Vorheriges Thema - Nächstes Thema

Flipper92

Zitat von: igami am 07 Januar 2018, 21:02:54
Was meinst du mit neu einrichten? im TelegramBot utf8-specials auf 1 gesetzt? %me% wird nicht aufgelöst.

Hab gerade mal den pi neu gestartet. Daraufhin waren alle meine Dialogs weg.
Hab sie nun per RAW neu Importiert (ein hoch auf Backups :-) ) und nun läuft es wieder.
Ich weiß nicht was das Problem war. Hauptsache es funktioniert weder. :-D

ToM_ToM

#316
Hey igami, kann es sein dass es zu Problemen kommt wenn der Text der innerhalb des message Feldes per Perl zurückgegeben wird, besondere Zeichen enthält?

Folgendes liefert mir nämlich gar nichts zurück.


defmod TelegramMsgDialog_FritBoxCallList msgDialog {\
  "Anrufliste": {\
    "message": [\
      "{return telegramBotGetFritzBoxCallListMessage('FritzBoxCallList') }",\
      "Anrufliste"\
    ]\
  }\
}
attr TelegramMsgDialog_FritBoxCallList DbLogExclude .*
attr TelegramMsgDialog_FritBoxCallList allowed Thomas
attr TelegramMsgDialog_FritBoxCallList group Telegram
attr TelegramMsgDialog_FritBoxCallList verbose 5


Rufe ich die obige Funktionin FHEM direkt auf, bekomme ich eine Liste zurück die in Etwa folgendermaßen aufgebaut ist (Nummer habe ich hier verfälscht):


10.12.17 - 11:08:30 | - (0123456789123) - 00:47:05
18.12.17 - 07:12:55 | - (0123456789123) - 01:10:41


EDIT: Okay, habe es selbst herausbekommen. :)

So gehts:

defmod TelegramMsgDialog_FritBoxCallList msgDialog {\
  "Anrufliste": {\
    "message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{return telegramBotGetFritzBoxCallListMessage('FritzBoxCallList') }"\
    ]\
  }\
}
attr TelegramMsgDialog_FritBoxCallList DbLogExclude .*
attr TelegramMsgDialog_FritBoxCallList allowed Thomas
attr TelegramMsgDialog_FritBoxCallList group Telegram
attr TelegramMsgDialog_FritBoxCallList verbose 5




VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

Marlen

Hallo,

vielen Dank, für dieses tolle Modul!
Das ist viel besser als meine "alte" Menüführung in Telegram.

Hab mal meine Dialog-Struktur angehängt.

Find das macht schon wenig süchtig.

LG
  Marlen

ErzGabriel

Hi.
Ich habe da ein kleines Problem mit meinem ersten Dialog und finde den Fehler nicht oder sehe ihn nicht.
Schaut Ihr mal bitte drauf.

defmod beleuchtung_Dialog msgDialog {"Licht":{\
  "message": [\
    "(Lampen einschalten) ",\
    "(Lampen ausschalten) ",\
    "(abbrechen) ",\
    "Lampen schalten:"\
  ],\
    "Lampen einschalten":{\
    "message":[\
      "{return('(Büro einschalten) ') if(ReadingsVal('HUEGroup4', 'state', '') eq 'off')}",\
  "{return('(Diele einschalten) ') if(ReadingsVal('HUEGroup2', 'state', '') eq 'off')}",\
      "{return('(Küche einschalten) ') if(ReadingsVal('HUEGroup5', 'state', '') eq 'off')}",\
      "{return('(Schlafzimmer einschalten) ') if(ReadingsVal('HUEGroup3', 'state', '') eq 'off')}",\
      "(abbrechen) ",\
      "Welche Lampen soll eingeschaltet werden?"\
    ],\
    "Büro einschalten":{\
    "commands": "set HUEGroup4 on",\
    "message":[\
      "(%me%) ",\
      "Die Lampen im Büro wurden eingeschaltet."\
    ]\
    },\
    "Diele einschalten":{\
    "commands": "set HUEGroup2 on",\
    "message":[\
      "(%me%) ",\
      "Die Lampen in der Diele wurden eingeschaltet."\
    ]\
    },\
    "Kueche einschalten":{\
    "commands": "set HUEGroup5 on",\
    "message":[\
      "(%me%) ",\
      "Die Lampen in der Kueche wurden eingeschaltet."\
    ]\
    },\
    "Schlafzimmer einschalten":{\
    "commands": "set HUEGroup3 on",\
    "message":[\
      "(%me%) ",\
      "Die Lampe im Schlafzimmer wurde eingeschaltet."\
    ]\
}\
    },\
"Lampen ausschalten":{\
    "message":[\
      "{return('(Büro ausschalten) ') if(ReadingsVal('HUEGroup4', 'state', '') ne 'off')}",\
  "{return('(Diele ausschalten) ') if(ReadingsVal('HUEGroup2', 'state', '') ne 'off')}",\
      "{return('(Küche ausschalten) ') if(ReadingsVal('HUEGroup5', 'state', '') ne 'off')}",\
      "{return('(Schlafzimmer ausschalten) ') if(ReadingsVal('HUEGroup3', 'state', '') ne 'off')}",\
      "(abbrechen) ",\
      "Welche Lampen soll ausgeschaltet werden?"\
    ],\
    "Büro ausschalten":{\
    "commands": "set HUEGroup4 on",\
    "message":[\
      "(%me%) ",\
      "Die Lampen im Büro wurden ausgeschaltet."\
    ]\
    },\
    "Diele ausschalten":{\
    "commands": "set HUEGroup2 off",\
    "message":[\
      "(%me%) ",\
      "Die Lampen in der Diele wurden ausgeschaltet."\
    ]\
    },\
    "Kueche ausschalten":{\
    "commands": "set HUEGroup5 off",\
    "message":[\
      "(%me%) ",\
      "Die Lampen in der Kueche wurden ausgeschaltet."\
    ]\
    },\
    "Schlafzimmer ausschalten":{\
    "commands": "set HUEGroup3 off",\
    "message":[\
      "(%me%) ",\
      "Die Lampe im Schlafzimmer wurde ausgeschaltet."\
    ]\
    }\
   }\
}\
}
attr beleuchtung_Dialog allowed rr_Marcus
attr beleuchtung_Dialog room Telegram

setstate beleuchtung_Dialog 2018-01-09 16:31:36 state Initialized


Wenn ich auf Lampen einschalten gehe, steht da nur abbrechen.
Gehe ich auf Lampen ausschalten, stehen alle aufgelisteten Lampen und ich kann sie auch schalten.

igami

Probier mal das ReadingsVal direkt in der Kommandozeile, eventuell hat sich ein Tippfehler eingeschlichen. Das solltest du dann erkennen.
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

ErzGabriel

#320
Ich habe es gefunden, nach dem 90 mal durchlesen. War ein zeichenfehler.

ToM_ToM

Hey igami,

gibt's irgendwie die Möglichkeit als TRIGGER auch einen Regex zu verwenden?
Ich würde mir gerne ähnlich deines Waschmaschinen-Beispiels einen Dialog für meine Heizkörperthermostate basteln, aber nicht für jedes Thermostat einen eigenen Dialog bauen wollen.


{
"Raumtemperaturen": {
"message": [
"(Arbeitszimmer) (Badezimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"$message": {
"message": [
"(5.0°C:05.0|10.0°C:10.0|16.0°C:16.0|17.0°C:17.0) ",
"(17.5°C:17.5|18.0°C:18.0|18.5°C:18.5|19.0°C:19.0) ",
"(19.5°C:19.5|20.0°C:20.0|20.5°C:20.5|21.0°C:21.0) ",
"(21.5°C:21.5|22.0°C:22.0|22.5°C:22.5|23.0°C:23.0) ",
"(abbrechen) ",
"Heizung im $message einstellen"
]
}
  }
}


VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

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

ToM_ToM

Zitat von: igami am 10 Januar 2018, 19:37:52
ja, dafür gibt es match ;)
Das mit dem match habe ich gesehen. Aber ich brauche doch zwingend den TRIGGER... oder nicht? Kann das doch nicht leer lassen und nur match verwenden. Kannst du mir das mal bitte anhand meines Beispiels erklären? :)

Gesendet von meinem SM-G930F mit Tapatalk

Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

igami

Bei Trigger schreibst du irgendwas rein. Im Waschmaschine Dialog gibt es das mit der Uhrzeit.
Ich habe auch noch einen anderen Dialog der sowas benutzt, muss ich am Wochenende mal raussuchen.
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

ToM_ToM

ZitatBei Trigger schreibst du irgendwas rein. Im Waschmaschine Dialog gibt es das mit der Uhrzeit.

Ah okay, dann hatte ich das noch ein wenig falsch verstanden. Dachte, der Trigger würde ähnlich wie match arbeiten.

Nun habe ich es so hinbekommen. :)


{
"Raumtemperaturen": {
"message": [
"(Arbeitszimmer) (Badezimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Arbeitszimmer|Badezimmer|Wohnzimmer)",
"message": [
"(5.0°C:05.0|10.0°C:10.0|16.0°C:16.0|17.0°C:17.0) ",
"(17.5°C:17.5|18.0°C:18.0|18.5°C:18.5|19.0°C:19.0) ",
"(19.5°C:19.5|20.0°C:20.0|20.5°C:20.5|21.0°C:21.0) ",
"(21.5°C:21.5|22.0°C:22.0|22.5°C:22.5|23.0°C:23.0) ",
"(abbrechen) ",
"Heizung im $message einstellen"
]
}
  }
}
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

ToM_ToM

Kann ich innerhalb einer Struktur eine Variable definieren die ich dann eine Ebenen tiefer wieder aufrufen kann?
Oder müsste ich das über einen externen Dummy lösen?

- Raumtemperatur einstellen
   - Bad, Schlafzimmer, Wohnzimmer
      - 10.0, 12.0, 15.0, 17.0, 20.0, 23.0
      - HIER WÜRDE ICH JETZT GERNE DEN RAUM WISSEN DEN ICH 2 EBENEN ZUVOR AUSGEWÄHLT HATTE
   
VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

RoBra81

Zitat von: ToM_ToM am 11 Januar 2018, 07:43:55
Kann ich innerhalb einer Struktur eine Variable definieren die ich dann eine Ebenen tiefer wieder aufrufen kann?
Oder müsste ich das über einen externen Dummy lösen?

- Raumtemperatur einstellen
   - Bad, Schlafzimmer, Wohnzimmer
      - 10.0, 12.0, 15.0, 17.0, 20.0, 23.0
      - HIER WÜRDE ICH JETZT GERNE DEN RAUM WISSEN DEN ICH 2 EBENEN ZUVOR AUSGEWÄHLT HATTE
   
VG, Thomas
Ich habe es über


setreading $SELF Heizung $message


nach der Raumauswahl gelöst...

Gesendet von meinem SM-G935F mit Tapatalk


Fixel2012

Hi,

ich wollte mich nun auch mal ran machen, um meine Einkaufsliste darüber abzuwickeln.

Da ich kein Residents Device habe, habe ich das Attribut auf "everyone" gestellt. (geht es überhaupt ohne Residents Device?)

Ich verstehe noch nicht so ganz den Zusammenhang der Module msgconifg und msgdialog...

Jedenfalls passiert nichts, wenn ich den Bot mit dem Trigger "Einkaufsliste" anschreibe.

Hier ein list meines dialogs:


Historie löschen
Internals:
   CFGFN     
   DEF        {
  "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"
        ]
      }
    }   
  }
}
   MSGCOMMAND msg push \@$recipients $message
   NAME       Einkaufsliste_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         41197
   NTFY_ORDER 50-Einkaufsliste_Dialog
   STATE      Initialized
   TRIGGER    Einkaufsliste
   TYPE       msgDialog
   READINGS:
     2018-01-11 12:53:27   state           Initialized
Attributes:
   allowed    everyone
   evalSpecials PostMe=PostIt list=Einkaufsliste
   room       Einkauf


Und hier des mdsconfig Devices:

Internals:
   CFGFN     
   NAME       msg
   NOTIFYDEV  TYPE=(Jabber|TelegramBot|yowsup)
   NR         41174
   NTFY_ORDER 50-msgConfig
   STATE      initialized
   TYPE       msgConfig
   READINGS:
     2018-01-11 12:49:24   fhemMsgState    initialized
Attributes:
   comment    FHEM Global Configuration for command 'msg'
   group      Global
   msgContactPush teleBot
   msgType    text
   room       Telegram
   stateFormat fhemMsgState
   userattr   msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
   verbose    3


Was mache ich falsch? *FacePalm*

Danke und Gruß,
Fixel
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

igami

Es wird zwingend ein ROOMMATE oder GUEST device benötigt.
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