msgDialog: Instant Messaging als FHEM Interface

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

Vorheriges Thema - Nächstes Thema

Esjay

Zitat von: PSI69 am 02 November 2017, 14:13:25
@Esjay
Siehe wiki
defmod myMsgConfig msgConfig
attr myMsgConfig msgDialog_evalSpecials me=<Aktivierungswort bzw. -Nachricht>
TelegramBot=<Name des TelegramBot-device>
attr myMsgConfig msgContactPush TelegramBot
attr myMsgConfig room msg


Der Name hat sich geändert in 'msgDialog_evalSpecials'...

Peter

Danke.. War bisschen verwirrent, da ich das Attribut gar nicht hatte. Bin jetzt einen Schritt weiter. Ich werd mich wahrscheinlich wieder melden wenn es nicht funktioniert.

Grüße

Flipper92

Zitat von: igami am 01 November 2017, 10:05:28
Post mal bitte die Raw definiton von einem ganzen Dialog bei dem es nicht funktioniert. ich kann es nicht nachstellen.

defmod test msgDialog {\
  "test": {\
    "message": [\
      "** test **",\
      "Zeile 2"\
    ]\
  }\
}

der geht bei mir einwandfrei
bei mir funktioniert es auch.

Zitat von: igami am 01 November 2017, 08:49:46
Was meinst du denn mit besser?
Ich finde es etwas mühsam, das nach jeder Zeile ein ", muss. bringt mich immer wieder aus der Spur :-)
Aber \n ist da auch nicht wirkich eine alternative.


Vieleicht kann man im Wiki noch ergenzen wo die Hauptprobleme zu suchen sind.
Ich hätte da schon:
1.  Attributes "allowed" nicht  oder falsch gesetzt.
2. " , " vergessen?
3. Klammern vertauscht? () oder {} oder []?
4. bei Telegram Inline: ist ein : im Text der Text abbricht? z.B. "(Temperatur: [heizung:desiredTemperature]°C:setheiz) "  oder  "([test:state]:weiter) " wenn [test:state] = "Status: ok"

igami

Zitat von: Esjay am 02 November 2017, 15:05:16
Danke.. War bisschen verwirrent, da ich das Attribut gar nicht hatte. Bin jetzt einen Schritt weiter. Ich werd mich wahrscheinlich wieder melden wenn es nicht funktioniert.

Grüße
Ich checke zu morgen eine neue Version ein, die das behebt.
Bisher habe ich beim Laden des Moduls die Attribute hinzugefügt, aber anscheinend existiert das msgConfig device zu dem Zeitpunkt noch nicht ::)

Zitat von: Flipper92 am 02 November 2017, 17:11:49
bei mir funktioniert es auch.
Ich finde es etwas mühsam, das nach jeder Zeile ein ", muss. bringt mich immer wieder aus der Spur :-)
Aber \n ist da auch nicht wirkich eine alternative.
JSON lässt das anders leider nicht zu, falls doch korrigiert mich bitte.

Zitat von: Flipper92 am 02 November 2017, 17:11:49
2. " , " vergessen?
Dann bekommst du ja eine Fehlermeldung ;)

Zitat von: Flipper92 am 02 November 2017, 17:11:49
4. bei Telegram Inline: ist ein : im Text der Text abbricht? z.B. "(Temperatur: [heizung:desiredTemperature]°C:setheiz) "  oder  "([test:state]:weiter) " wenn [test:state] = "Status: ok"
Bei inline ist das Letzte : das Trennzeichen zwischen angezeigtem und übertragenen Text. Finde ich nicht so gut gelöst, ist aber durch das TelegramBot Modul so vorgegeben. Vielleicht lässt sich viegener ja davon überzeugen das zu ändern, wenn genügend Leute den Wunsch äußern ;)
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

Zitat von: igami am 02 November 2017, 17:19:44
Bei inline ist das Letzte : das Trennzeichen zwischen angezeigtem und übertragenen Text. Finde ich nicht so gut gelöst, ist aber durch das TelegramBot Modul so vorgegeben. Vielleicht lässt sich viegener ja davon überzeugen das zu ändern, wenn genügend Leute den Wunsch äußern ;)
Wirklich das letzte? Ich glaub ich hatte Probleme mal das Problem, das es nicht ging, weil im reading ein : hing. (Ich kann gerne aber auch ein anderes Problem gehabt haben :-) )


Ich hab noch ein anderes Problem. Kann man eine Variabele in der Message ausgeben?
Ich hatte in meinem alten Menü ein:
    if($msgText eq "/updatecheck"){
my $temp = fhem "update check";
fhem "set TelegramBot message \@$msgPeerId UpdateCheck:
$temp";
fhem "set TelegramBot message \@$msgPeerId /system
/hauptmenue";
}

nun muss ich das ja zwischen massage und commands aufteilen. bin mir aber nicht sicher, wie ich das machen soll.


Esjay

#154
Kurze Frage in die Runde!
Kann ich das Menü so aufbauen, dass ich es nicht immer anfassen muss wenn ich ein neues Device hinzufüge?
Also zum Beispiel beim Ein und Ausschalten von Steckdosen.

Edit: Ich vermute mal ja, für den Ansatz wäre ich dankbar!!!

Edit 2: Ok zu früh gefreut

Grüße

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

Zitat von: Flipper92 am 02 November 2017, 18:41:07
Wirklich das letzte? Ich glaub ich hatte Probleme mal das Problem, das es nicht ging, weil im reading ein : hing. (Ich kann gerne aber auch ein anderes Problem gehabt haben :-) )
Ich benutze die inline Keyboards selbst kaum, kann sein, dass ich mich irre ::)

Zitat von: Flipper92 am 02 November 2017, 18:41:07
Ich hab noch ein anderes Problem. Kann man eine Variabele in der Message ausgeben?
Ich hatte in meinem alten Menü ein:
    if($msgText eq "/updatecheck"){
my $temp = fhem "update check";
fhem "set TelegramBot message \@$msgPeerId UpdateCheck:
$temp";
fhem "set TelegramBot message \@$msgPeerId /system
/hauptmenue";
}

nun muss ich das ja zwischen massage und commands aufteilen. bin mir aber nicht sicher, wie ich das machen soll.
Klar geht das

...
"message": [
  "{'UpdateCheck: '. fhem('update check')}",
  "/hauptmenue"
]
...

Sollte so funktionieren, getestet habe ich es aber 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

Esjay

So letzter Post für heute. So langsam werde ich warm mit dem Modul.

Warum werden die Kameras nicht getriggert?Ich würde jetzt wieder ein Menü
ZitatEingang
Wohnzimmer
Treppenaufgang
erwarten.

Ich vermute einen Klammerfehler

{
  "Alarmanlage": {
    "message": [
      "{return('(Alarmanlage Level 0 Ein) ') if(ReadingsVal('AlarmAnlage','level0','') eq 'disarmed')}",
      "{return('(Alarmanlage Level 0 Aus) ') if(ReadingsVal('Alarmanlage','level0','') eq 'armed')}",
  "{return('(Alarmanlage Level 1 Ein) ') if(ReadingsVal('AlarmAnlage','level1','') eq 'disarmed')}",
      "{return('(Alarmanlage Level 1 Aus) ') if(ReadingsVal('Alarmanlage','level1','') eq 'armed')}",
  "{return('(Alarmanlage Level 2 Ein) ') if(ReadingsVal('AlarmAnlage','level2','') eq 'disarmed')}",
      "{return('(Alarmanlage Level 2 Aus) ') if(ReadingsVal('Alarmanlage','level2','') eq 'armed')}",
  "{return('(Alarmanlage Level 3 Ein) ') if(ReadingsVal('AlarmAnlage','level3','') eq 'disarmed')}",
      "{return('(Alarmanlage Level 3 Aus) ') if(ReadingsVal('Alarmanlage','level3','') eq 'armed')}",
      "(Kameras) ",
  "(Send Statuslevel Alarmanlage) ",
      "(Send Status Fenster) ",
      "(Send Status Türen) ",
      "(abbrechen) ",
      "Menü Alarmanlage"
    ],
"Kameras": {
      "message": [
      "(Eingang) ",
  "(Wohnzimmer) ",
  "(Treppenaufgang) "
      ]
    },
    "AlarmAnlage Level 0 Ein": {
      "commands": "set AlarmAnlage armed 0",
      "message": [
      "AlarmLevel 0 Eingeschaltet."
      ]
    },
    "AlarmAnlage Level 0 Aus": {
      "commands": "set AlarmAnlage disarmed 0",
      "message": [
      "AlarmLevel 0 Ausgeschaltet."
      ]
    },
"AlarmAnlage Level 1 Ein": {
      "commands": "set AlarmAnlage armed 1",
      "message": [
      "AlarmLevel 1 Eingeschaltet."
      ]
    },
    "AlarmAnlage Level 1 Aus": {
      "commands": "set AlarmAnlage disarmed 1",
      "message": [
      "AlarmLevel 1 Ausgeschaltet."
      ]
    },
"AlarmAnlage Level 2 Ein": {
      "commands": "set AlarmAnlage armed 2",
      "message": [
      "AlarmLevel 2 Eingeschaltet."
      ]
    },
    "AlarmAnlage Level 2 Aus": {
      "commands": "set AlarmAnlage disarmed 2",
      "message": [
      "AlarmLevel 2 Ausgeschaltet."
      ]
    },
"AlarmAnlage Level 3 Ein": {
      "commands": "set AlarmAnlage armed 3",
      "message": [
      "AlarmLevel 3 Eingeschaltet."
      ]
    },
    "AlarmAnlage Level 3 Aus": {
      "commands": "set AlarmAnlage disarmed 3",
      "message": [
      "AlarmLevel 3 Ausgeschaltet."
      ]
    },
"Send Statuslevel Alarmanlage": {
      "commands": "set TelegramBot msg Status Level 0 = [AlarmAnlage:level0] \nStatus Level 1 = [AlarmAnlage:level1] \nStatus Level 2 = [AlarmAnlage:level2] \nStatus Level 3 = [AlarmAnlage:level3]",
      "message": [
      "Statuslevel der Alarmanlage."
      ]
    }
  }
}


@ binford6000
Wie bekommst du die Bildchen in dein Menü?

Grüße


igami

Du kannst nicht nur Keyboards senden,es muss auch immer noch eine Nachricht mit dazu. Auch so ein Thema für das Wiki
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

Zitat@ binford6000
Wie bekommst du die Bildchen in dein Menü?
Moin, da ich die Unicode Character nicht auswendig kenne schreibe ich sie mir einfach in den Chat  ;)

Sie stehen dann im msgText Reading vom TelegramBot-Device. Von da ab c&p...
Vor dem Posten eines Dialogs mit Emoticons hier musst Du sie aber entfernen. Das Forum unterstützt sie nicht...
Eine Liste aller Emoticons ist hier https://apps.timwhitlock.info/emoji/tables/unicode zu finden.

VG Sebastian

binford6000

"Kameras": {
  "message": [
  "(Eingang) ",
  "(Wohnzimmer) ",
  "(Treppenaufgang) ",
  "Um Keyboards anzuzeigen braucht es auch immer eine normale Nachricht!"
  ]
},


@Esjay: Hast Du in allen anderen auch gemacht, nur nicht in Kameras...  ;)

ZitatAuch so ein Thema für das Wiki
@igami: Jepp, ist notiert.

VG Sebastian


Amenophis86

#161
Kann mir bitte nochmal jemand den Unterschied zwischen Inline und nicht Inline Keyboard erklären? Ich habe zwar das Bild im Wiki gesehen, aber bis auf den Hintergrund sehe ich keinen Unterschied.

Edit: Ok habe es mit den YouTube Videos selbst heraus gefunden, finde die sollten im Wiki beide gelistet sein, dass man den Unterschied besser sieht. Bei Inline ist das Menü quasi ein Text im Dialog und beim normalen ist es unterhalb des Textes, wo die Tastatur normal ist. Jetzt meine Frage, ich habe das Problem, dass beim normalen meine Texttastatur immer wieder angezeigt wird und ich auf den Kasten neben der Klammer klicken muss, dass mir das Dialogmenü angezeigt wird. Jemand eine Ahnung woran das liegt?

Edit2:
Warum auch immer, jetzt klappt es, dass es mir direkt in die richtige Tastatur springt.
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...

Amenophis86

Neues Problem irgendetwas lässt mein FHEM abstürzen folgender Fehler im Log:

2017.11.03 09:31:47 3: msg rr_Etienne: ID=1509697907.68058.1 TYPE=push ROUTE=TelegramBot RECIPIENT=@271028825 STATUS=OK PRIORITY=0 TITLE='' MSG='(Zurück)
Test wurde angeschaltet'
Unmatched ) in regex; marked by <-- HERE in m/%an) <-- HERE
TelegramBot_MTYPE%/ at ./FHEM/75_MSG.pm line 1728.


Hier ein list des Meta und Test Dialogs:
Internals:
   DEF        {
  "meta": {
    "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."
    ]
  }
}
   MSGCOMMAND msg push \@$recipients $message
   NAME       meta_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         27
   NTFY_ORDER 50-meta_Dialog
   STATE      Initialized
   TRIGGER    meta,zurück,beenden,abbrechen
   TYPE       msgDialog
   READINGS:
     2017-11-03 09:35:53   state           Initialized
Attributes:
   allowed    rr_Etienne
   evalSpecials me=meta
TelegramBot=TelegramBot


Internals:
   DEF        {
"Test": {
  "match": "(Test|Zurück)",
  "commands": "deletereading TYPE=msgDialog $recipient_history",
  "message": [
    "TelegramBot_MTYPE=queryInline (Test an)",
  "TelegramBot_MTYPE=queryInline (Test aus)",
  "TelegramBot_MTYPE=queryInline (Zurück)",
  "Wir starten Test:"
]
},
"Test an": {
"commands": ["set Test on",
"deletereading TYPE=msgDialog $recipient_history"
],
"message" : [
"TelegramBot_MTYPE=queryInline (Zurück)",
"Test wurde angeschaltet"
]
},
"Test aus": {
"commands": ["set Test off",
"deletereading TYPE=msgDialog $recipient_history"
],
"message" : [
"TelegramBot_MTYPE=queryInline (Zurück)",
"Test wurde ausgeschaltet"
]
}
}
   MSGCOMMAND msg push \@$recipients $message
   NAME       test_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         25
   NTFY_ORDER 50-test_Dialog
   STATE      Initialized
   TRIGGER    Test an,Test,Test aus
   TYPE       msgDialog
   READINGS:
     2017-11-03 09:36:43   state           Initialized
Attributes:
   allowed    rr_Etienne
   evalSpecials TelegramBot=TelegramBot
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...

Esjay

Zitat von: binford6000 am 03 November 2017, 05:10:29
Moin, da ich die Unicode Character nicht auswendig kenne schreibe ich sie mir einfach in den Chat  ;)

Sie stehen dann im msgText Reading vom TelegramBot-Device. Von da ab c&p...
Vor dem Posten eines Dialogs mit Emoticons hier musst Du sie aber entfernen. Das Forum unterstützt sie nicht...
Eine Liste aller Emoticons ist hier https://apps.timwhitlock.info/emoji/tables/unicode zu finden.

VG Sebastian

Zitat von: igami am 03 November 2017, 05:08:04
Du kannst nicht nur Keyboards senden,es muss auch immer noch eine Nachricht mit dazu. Auch so ein Thema für das Wiki

Manchmal ist es dann doch einfacher als Gedacht. Ich danke euch.

Gruß

binford6000

An dieser Stelle mal ein Hinweis, dass igami den ersten Post um folgendes editiert hat:
ZitatBei Problemen bitte den Dialog als Raw definition posten (siehe https://wiki.fhem.de/wiki/Import_von_Code_Snippets)

Die Dialoge sind als RAW einfach schneller zu importierten und damit auch zu testen! ;)

@Amenophis86: Fehler kommt bei dir vom 75_MSG.pm Modul. Schon der zweite "Nebeneffekt" wie bei mir mit 22_HOMEMODE.pm (siehe Post #145).