msgDialog: Instant Messaging als FHEM Interface

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

Vorheriges Thema - Nächstes Thema

igami

Es wird kein notify mehr benötigt. Falls noch vorhanden, kann dies zur Doppelung führen.
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

ZitatHast du mehrere Residents eingetragen?
Residents wo eingetragen?

ZitatEs wird kein notify mehr benötigt. Falls noch vorhanden, kann dies zur Doppelung führen.
Welchen notify wird nicht mehr benötigt?

LG
  Marlen


schnitzelbrain

Zitat von: Marlen am 01 Dezember 2017, 16:34:25
Residents wo eingetragen?
Welchen notify wird nicht mehr benötigt?

LG
  Marlen
Nach welcher Anleitung hast du denn das ganze aufgesetzt?

Hier https://wiki.fhem.de/wiki/MsgDialog

Kommt ziemlich am Anfang gleich das Thema roommate/guest das in Verbindung mit dem Modul residents.

Grüße

Schnitzelbrain


Marlen

Ach so, ne, Modul residents hab ich nicht, is ja nicht zwingend erforderlich.

igami

Ja, ROOMMATE bzw. GUEST reicht.
Wenn du kein notify angelegt hast habe ich nichts gesagt.
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

Ach....... doch, da hab ich doch den Übeltäter gefunden
ZitatmsgPushReceived
.
Das hab ich nach Anleitung angelegt und total aus den Augen verloren.
Danke für eure Hilfe.

Aber das zurück geht nicht.

LG
  Marlen

Marlen

Hallo,

warum geht denn mein zurück nicht?

Es ist im metaDialog so definiert:

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


Und noch eine "blöde" Frage, wie macht man das, wenn ich im
1. Menüpunkt
- Einstellungen möchte und im
und der Einstellungen dann
--- Steckdosen und dann das Menü für
------ Steckdose xyz an| aus?

Muss ich das dann alles irgendwie in den Dialog für Einstellungen packen?
Oder ist dafür das "setOnly" gedacht?

LG
  Marlen

binford6000

Hi Marlen,
Zitatwarum geht denn mein zurück nicht?
Sollte so funktionieren. Bei mir sieht es genauso aus.
ZitatMuss ich das dann alles irgendwie in den Dialog für Einstellungen packen?
Oder ist dafür das "setOnly" gedacht?
Ja das kann man so machen. Hier mal ein Beispiel von meinem Systeminfo-Dialog (mit zurück):
defmod Systemverwaltung_Dialog msgDialog {"9.🛠Systemverwaltung":{\
  "message": [\
    "(⚙️FHEM) ",\
    "(📡FritzBox) ",\
"(🖥VirtualPC) ",\
    "(abbrechen|zurück:%me%) ",\
"Was möchtest Du wissen?"\
  ],\
  "⚙️FHEM":{\
    "message":[\
      "(⚙️FHEM-Infos) ",\
  "(⚙️FHEM-Update vorhanden?) ",\
  "(⚙️FHEM-Log) ",\
  "(abbrechen|zurück) ",\
  "Wähle aus:"\
    ],\
"⚙️FHEM-Infos":{\
    "message":[\
      "(%me%) ",\
      "Ich wurde gestartet vor\n[sysmon:uptime_text]\nMeine Version ist folgende:\n[global:version]"\
    ]\
    },\
"⚙️FHEM-Update vorhanden?":{\
    "commands": "set device off",\
    "message":[\
      "(%me%) ",\
      "Ich habe folgende Updates gefunden:\n[FHEM_Sys_Dialog.DUM:updates]"\
    ]\
    },\
    "⚙️FHEM-Log":{\
    "message":[\
      "(%me%) ",\
      "Hier sind meine letzten 10 Logeinträge:\n[FHEM_Sys_Dialog.DUM:last_10]"\
    ]\
}\
},\
    "📡FritzBox":{\
    "message":[\
      "{return('(📡Gast-WLAN einschalten) ') if(ReadingsVal('FritzBox', 'box_guestWlan', '') eq 'off')}",\
  "{return('(📡Gast-WLAN ausschalten) ') if(ReadingsVal('FritzBox', 'box_guestWlan', '') ne 'off')}",\
  "(📡Reboot) ",\
  "(abbrechen|zurück) ",\
  "Wähle aus:"\
    ],\
    "📡Gast-WLAN einschalten":{\
    "commands":[\
"set FritzBox guestWlan on",\
"set fhemBot sendImage ./www/images/default/gastwlan.png"\
],\
    "message":[\
      "(%me%) ",\
      "Ich habe das Gast-WLAN eingeschaltet. DAs PAsswort lautet: g8stwl8n."\
    ]\
    },\
    "📡Gast-WLAN ausschalten":{\
    "commands": "set FritzBox guestWlan off",\
    "message":[\
      "(%me%) ",\
      "Ich habe das Gast-WLAN wieder ausgeschaltet."\
    ]\
    },\
"📡Reboot":{\
    "commands": "sleep 10;;;; get FritzBox tr064Command DeviceConfig:1 deviceconfig Reboot",\
    "message":[\
      "(%me%) ",\
      "Ich starte deine Fritzbox in 10 Sekunden neu. Es kann etwas dauern bis ich wieder für Dich da bin!"\
    ]\
}\
},\
"🖥VirtualPC":{\
    "message":[\
      "{return('(🖥VirtualPC einschalten) ') if(ReadingsVal('VShuttle.PRE', 'state', '') eq 'absent')}",\
  "{return('(🖥VirtualPC ausschalten) ') if(ReadingsVal('VShuttle.PRE', 'state', '') eq 'present')}",\
  "(abbrechen|zurück) ",\
  "Wähle aus:"\
    ],\
    "🖥VirtualPC einschalten":{\
    "commands": [\
"set VShuttleUpDown.DOIF switch on",\
    "set $SELF say @$recipient 9.🛠Systemverwaltung"\
]\
},\
    "🖥VirtualPC ausschalten":{\
    "commands": [\
"set VShuttleUpDown.DOIF switch off",\
    "set $SELF say @$recipient 9.🛠Systemverwaltung"\
]\
    }\
  }\
}\
}\
\
\

attr Systemverwaltung_Dialog allowed rr_Sebastian
attr Systemverwaltung_Dialog disable 0
attr Systemverwaltung_Dialog group Dialog
attr Systemverwaltung_Dialog icon dialog@green
attr Systemverwaltung_Dialog room 91_Webdevices
attr Systemverwaltung_Dialog verbose 0

VG Sebastian

netdom

Hallo,

ich stehe auf dem Schlauch. Ich versuche den msgDialog einzurichten und habe bis jetzt folgenden Aufbau aus dem Wiki:

Zuerst habe ich das myMsgConfig Device angelegt

defmod myMsgConfig msgConfig
attr myMsgConfig userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig group Global
attr myMsgConfig msgContactPush fhembot
attr myMsgConfig msgDialog_evalSpecials me=doit TelegramBot=fhembot
attr myMsgConfig msgType text
attr myMsgConfig room Arbeitszimmer,Bridges
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 0


Dann den Resident "dominic":

defmod rr_dominic ROOMMATE rr_home
attr rr_dominic alias Status
attr rr_dominic comment Auto-created by rr_home
attr rr_dominic devStateIcon .*home:user_available:absent .*absent:user_away:home .*gone:user_ext_away:home .*gotosleep:scene_toilet:asleep .*asleep:scene_sleeping:awoken .*awoken:scene_sleeping_alternat:home .*:user_unknown:home
attr rr_dominic group dominic
attr rr_dominic icon people_sensor
attr rr_dominic msgContactPush fhembot:@1234567890(meine echte ID natürlich)
attr rr_dominic room Residents
attr rr_dominic rr_realname group
attr rr_dominic sortby 1
attr rr_dominic webCmd state

setstate rr_dominic home
setstate rr_dominic 2017-12-03 16:43:33 fhemMsgPush Test
setstate rr_dominic 2017-12-03 16:43:33 fhemMsgPushGw  fhembot:@1234567890:OK
setstate rr_dominic 2017-12-03 16:43:33 fhemMsgPushPrio 0
setstate rr_dominic 2017-12-03 16:43:33 fhemMsgPushState 1
setstate rr_dominic 2017-12-03 16:43:33 fhemMsgPushTitle -
setstate rr_dominic 2017-12-03 16:41:17 fhemMsgRcvPush /start
setstate rr_dominic 2017-12-03 16:41:17 fhemMsgRcvPushGw fhembot
setstate rr_dominic 2017-12-03 16:43:33 fhemMsgState 1
setstate rr_dominic 2017-12-03 16:43:33 fhemMsgStateTypes push:1
setstate rr_dominic 2017-12-03 16:01:19 lastArrival 2017-12-03 16:01:19
setstate rr_dominic 2017-12-03 16:01:19 lastState initialized
setstate rr_dominic 2017-12-03 16:01:19 mood calm
setstate rr_dominic 2017-12-03 16:01:19 presence present
setstate rr_dominic 2017-12-03 16:01:19 state home




Das sind meinem Verständnis nach die Voraussetzungen, nun habe ich den Beispieldialog 1:1 aus dem Wiki übernommen ohne ihn zu ändern, habe nur bei evalSpecials meinen User und den TelegramBot eingefügt, allowed stand ja schon auf Everyone. Was mir noch aufgefallen ist, beim allowed Attribut kommt ja eine Auswahlliste, dort steht nur "everyone" drin, ich hätte erwartet das dort auch mein Resident "dominic" auftaucht, tut er aber nicht ?!

defmod meta_Dialog msgDialog {1:1 aus Wiki}}
attr meta_Dialog allowed everyone
attr meta_Dialog evalSpecials me=rr_dominic TelegramBot=fhembot
attr meta_Dialog room Arbeitszimmer,Bridges
attr meta_Dialog verbose 5

setstate meta_Dialog rr_dominic: /start
setstate meta_Dialog 2017-12-03 16:14:58 fhemMsgRcvPush fdgd
setstate meta_Dialog 2017-12-03 16:14:58 fhemMsgRcvPushGw fhembot
setstate meta_Dialog 2017-12-03 16:41:17 state rr_dominic: /start



msg push @rr_dominic Test -> Funktioniert auch


Im Logfile sieht es für mich auch so aus als würde er den Trigger erkennen und die erste Antwort des Dialogs versenden, nur leider kommt dies nicht bei meinem User an:

2017-12-03 16:41:17 msgDialog meta_Dialog rr_dominic_history:
2017-12-03 16:41:17 msgDialog meta_Dialog rr_dominic: /start
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgRcvPush: /start
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgRcvPushGw: fhembot
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgPush: (abbrechen)  Ich kann folgendes für dich tun:
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgPushTitle: -
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgPushPrio: 0
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgPushGw:  fhembot:@123456789:OK
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgPushState: 1
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgStateTypes: push:1
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgState: 1
2017-12-03 16:41:17 TelegramBot fhembot msgId: 284
2017-12-03 16:41:17 TelegramBot fhembot msgPeer: Dominic
2017-12-03 16:41:17 TelegramBot fhembot msgPeerId: 123456789
2017-12-03 16:41:17 TelegramBot fhembot msgChat: Dominic
2017-12-03 16:41:17 TelegramBot fhembot msgChatId: 123456789
2017-12-03 16:41:17 TelegramBot fhembot msgText: /start
2017-12-03 16:41:17 TelegramBot fhembot msgReplyMsgId:
2017-12-03 16:41:17 TelegramBot fhembot msgFileId:
2017-12-03 16:41:32 Global global ATTR myMsgConfig msgDialog_evalSpecials me=doit TelegramBot=fhembot
2017-12-03 16:41:47 TelegramBot fhembot sentMsgResult: NonBlockingGet timed out on read from  after 30s
2017-12-03 16:41:47 TelegramBot fhembot sentMsgId:
2017-12-03 16:41:47 TelegramBot fhembot sentMsgPeerId: 123456789




Irgendwo klemmt es noch, aber ich verstehe nicht wo :(


binford6000

Was mir spontan auffällt: der Meta-Dialog benötigt kein evalSpecials...
attr meta_Dialog evalSpecials me=rr_dominic TelegramBot=fhembot
VG Sebastian

igami

Ich tippe auf das utf8specials Attribut beim  TelegramBot
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

netdom

Das uf8Special war es, das fehlte. Nun klappt es direkt, danke.
Ich habe auch das evalSpecials entfernt. Ich dachte das dies die Zuordnung sei um den Dialog mit dem User zu verknüpfen was wohl nicht der Fall ist.

Ist das denn korrekt dass ich bei "allowed" nur "everyone", nicht aber spezifische User (aus Residents) auswählen kann ?

binford6000

Ich habe es im WIKI bei der Fehlersuche mit aufgenommen:
3.3 Das Attribut utf8Special fehlt beim TelegramBot device  ;)
VG Sebastian

netdom

Es steht in der commandref drin:

Hinweise zur Benutzung mit Telegram:
Es kann notwendig sein, dass im TelegramBot das Attribut "utf8specials" auf 1 gesetzt wird, damit Nachrichten mit Umlauten gesendert werden.

Mist, in "für" ist natürlich ein Umlaut drin, wird rund.


Zum allowed Thema, ich weiß jetzt warum es

set <meta_Dialog> updateAllowed

gibt ::) . Das löst exakt mein Problem. Falls noch jemand anders darüber stolpert steht es hier jetzt.

Danke noch mal :-)

Marlen

Zitat von: binford6000 am 02 Dezember 2017, 23:08:55
Hi Marlen,Sollte so funktionieren. Bei mir sieht es genauso aus.

Aber leider geht es nicht!

Was ist denn $recipient_history'? Wo kommt das her?

LG
Marlen