msgDialog: Instant Messaging als FHEM Interface

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

Vorheriges Thema - Nächstes Thema

schnitzelbrain

Hi igami,

bist du sicher ?

m/((.+)\\|.+$)/;; return($2 ? $2 : $1);;)}"\

Die zusätzliche offene Klammer macht es noch schlimmer.
nicht doch vielleicht

m/(.+))\\|.+$)/;; return($2 ? $2 : $1);;)}"\

Es fehlt eigentlich eine geschlossenen Klammer.

Danke für die anderen Informationen.
mit dem Beenden oder Abbrechen hatte ich rumgesucht warum nur ein Dialog Button bei mir auftaucht.
Bin nicht so Perl fest, von JSON ganz zu schweigen.

Ich hatte auch 2 h rumgesucht bis mir aufgefallen ist das die  \  am Ende der Zeilen beim Copy-Paste weg müssen.
Es gab nur Fehlermeldungen  ::) :o :-[

Grüße
P:S: tolles modul  :)


binford6000

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

Füge ich die ( vor "return" ein, funktioniert zwar "zurück:%me%", nicht aber "zurück" :o

VG Sebastian

Keule_09

Hallo Zusammen

habe das Problem das ich msgDialog nicht zum laufen bekomme.
Kann mal jemand darüber schauen ob ich irgendwo ein Fehler bzw ein attr vergessen habe ?
Sitz jetzt schon seid Stunden davor aber komm nicht weiter  >:(
Hier meine defmod zu msgConfiq:
defmod TelebotConfiq msgConfig
attr TelebotConfiq userattr evalSpecials:textField-long msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr TelebotConfiq comment FHEM Global Configuration for command 'msg'
attr TelebotConfiq group Benachrichtigungen
attr TelebotConfiq msgContactPush TelegramBot
attr TelebotConfiq msgDialog_evalSpecials me=test TelegramBot=TelegramBot
attr TelebotConfiq room FHEM
attr TelebotConfiq verbose 3

setstate TelebotConfiq initialized


Hier zu TelegramBot:
defmod TelegramBot TelegramBot
attr TelegramBot allowUnknownContacts 0
attr TelegramBot cmdKeyword test
attr TelegramBot cmdRespondChat 1
attr TelegramBot cmdRestrictedPeer xxxxxxxx xxxxxxxxx xxxxxxxxxx
attr TelegramBot defaultPeer #Visu
attr TelegramBot group Benachrichtigungen
attr TelegramBot pollingTimeout 120
attr TelegramBot room FHEM
attr TelegramBot utf8Special 1


Hab die beiden Module versucht  mit dem Wiki einzurichten. ROOMMATE mit definiertem msgContactPush hab ich erstellt.
TelegramBot sendet und empfängt bzw verarbeitet auch Nachrichten wenn ich sie direkt sende:
test set licht_essen_schalten on

Gruß Marco

binford6000

Moin Marco,
das msgConfig device sieht OK aus.
Hast Du auch den meta_Dialog aus dem Wiki erstellt?
Dann brauchst Du noch einen eigenen Dialog oder Du nimmst zum Test die Waschmaschine aus dem Wiki.
Und natürlich das Attribut allowed in den Dialogen auf deinen ROOMATE oder everyone setzen.

VG Sebastian

schnitzelbrain

Hallo,

ich habe jetzt mehrere Dialoge und kann auch alles was ich möchte soweit steuern.
Wenn ich mich jetzt in einem unter Dialog befinde kann ich einen Befehl ausführen.
Möchte ich jetzt im gleichen Dialog noch ein Befehl ausführen dann muss ich erst zurück zum Meta Dialog und dann den besagten unter Dialog noch einmal aufrufen.

Ich kann meine Raws gerne hier posten aber vielleicht gibt es ja eine direkte Erklärung daür.
Vielleicht so ein DoAlways für Dialoge  ;D

Grüße

binford6000

Schau mal hier : Antwort #198
Unter "Berechtigungen" wird immer der gleiche Dialog aufgerufen:

"set $SELF say @$recipient Berechtigungen|[$SELF:$recipient_user]"

VG Sebastian

schnitzelbrain

#216
Zitat von: binford6000 am 19 November 2017, 11:11:53
Schau mal hier : Antwort #198
Unter "Berechtigungen" wird immer der gleiche Dialog aufgerufen:

"set $SELF say @$recipient Berechtigungen|[$SELF:$recipient_user]"

VG Sebastian

Danke für die Antwort, leider kein Erfolg.

Ich poste mal meine Raws.

Meta
defmod meta_dialog msgDialog {\
  "%me%": {\
    "match": "\/?(start|%me%)",\
    "commands": [\
  "deletereading TYPE=msgDialog $recipient_history",\
  "deletereading %TelegramBot% $recipient_sentMsgId"\
    ],\
    "message": [\
      "{return('(' . join(') (', sort(split('\n', fhem('get TYPE=msgDialog:FILTER=NAME!=$SELF:FILTER=allowed=.*($recipient|everyone).* trigger'))), 'beenden') . ') ')}",\
      "Ich kann folgendes für dich tun: "\
    ]\
  },\
  "beenden": {\
    "match": "\/?beenden",\
    "commands": [\
  "deletereading TYPE=msgDialog $recipient_history",\
  "deletereading %TelegramBot% $recipient_sentMsgId"\
    ],\
    "message": [\
      "TelegramBot_MTYPE=queryInline (%me%) ",\
      "Dialog beendet. "\
    ]\
  }\
}
attr meta_dialog allowed everyone
attr meta_dialog room TeleControl


Licht
defmod licht_dialog msgDialog {\
"Beleuchtung": {\
"message": [\
"(Fernsehbeleuchtung AN|Fernsehbeleuchtung AUS) ",\
"(%me%) ",\
"** Beleuchtung** ",\
"Fernsehbeleuchtung ist: [fernsehbeleuchtung:STATE]",\
" "\
],\
\
  "Fernsehbeleuchtung AN": {\
    "match": "\/?Fernsehbeleuchtung AN",\
    "commands": [\
  "set broadlinkWZ commandSend Power01_on ",\
  "set $SELF say @$recipient Beleuchtung|[$SELF:$recipient_user]"\
    ],\
    "message": [\
      "Fernsehbeleuchtung AN. "\
    ]\
  },\
  "Fernsehbeleuchtung AUS": {\
    "match": "\/?Fernsehbeleuchtung AUS",\
    "commands": [\
  "set broadlinkWZ commandSend Power01_off ",\
  "set $SELF say @$recipient Beleuchtung|[$SELF:$recipient_user]"\
    ],\
    "message": [\
      "Fernsehbeleuchtung AUS. "\
    ]\
  }\
}\
}
attr licht_dialog allowed everyone
attr licht_dialog room TeleControl


Wenn ich beim ersten mal die Beleuchtung anschalte bekomme ich die Rückmeldung geschrieben und das Licht schaltet.
Das menu bleibt das gleiche. Wenn ich dann Licht ausschalte dann bekomme ich keine Rückmeldung und der schaltvorgang wird nicht ausgelöst.

Der %me% button funktioniert immer.


EDIT
Jetzt sehe ich gerade muss ich in jedem Dialog die EvalSpecials setzen ?


Grüße

binford6000

ZitatEDIT
Jetzt sehe ich gerade muss ich in jedem Dialog die EvalSpecials setzen ?
Nein, du musst nicht. Meine (einfachen) Dialoge kommen zu 90% ohne aus...
Aber manchmal ist man froh, wenn man Code wiederverwenden kann. Siehe Berechtigungen-Dialog von Igami  ;)

igami

Habe mal folgendes gebaut was wunderbar funktioniert:

defmod test dummy

setstate test on

defmod test_dialog msgDialog {\
  "test": {\
    "message": [\
      "(Fernsehbeleuchtung AN|Fernsehbeleuchtung AUS) ",\
      "(%me%) ",\
      "** Beleuchtung** ",\
      "Fernsehbeleuchtung ist: [test:STATE]"\
    ],\
    "Fernsehbeleuchtung AN": {\
      "commands": [\
        "set test on",\
        "set $SELF say @$recipient test"\
      ]\
    },\
    "Fernsehbeleuchtung AUS": {\
      "commands": [\
        "set test off",\
        "set $SELF say @$recipient test"\
      ]\
    }\
  }\
}
attr test_dialog allowed everyone

Die message nach dem an- und ausschalten würde ich weglassen, da durch das say ja wieder eine Nachricht kommt.

Bei dem say muss auch nur Beleuchtung stehen, da du den Dialog ja auf der ersten Stufe wieder aufrufen möchtest.



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

schnitzelbrain

#219
Zitat von: igami am 19 November 2017, 13:19:39
Habe mal folgendes gebaut was wunderbar funktioniert:

defmod test dummy

setstate test on

defmod test_dialog msgDialog {\
  "test": {\
    "message": [\
      "(Fernsehbeleuchtung AN|Fernsehbeleuchtung AUS) ",\
      "(%me%) ",\
      "** Beleuchtung** ",\
      "Fernsehbeleuchtung ist: [test:STATE]"\
    ],\
    "Fernsehbeleuchtung AN": {\
      "commands": [\
        "set test on",\
        "set $SELF say @$recipient test"\
      ]\
    },\
    "Fernsehbeleuchtung AUS": {\
      "commands": [\
        "set test off",\
        "set $SELF say @$recipient test"\
      ]\
    }\
  }\
}
attr test_dialog allowed everyone

Die message nach dem an- und ausschalten würde ich weglassen, da durch das say ja wieder eine Nachricht kommt.

Bei dem say muss auch nur Beleuchtung stehen, da du den Dialog ja auf der ersten Stufe wieder aufrufen möchtest.

VIELEN DANK, läuft perfekt. made my (Sun)day  ;D

Ich hab nur in meinem Modul die Message Zeilen gelöscht und in Command den say Teil eingesetzt.

So für die Zukunft, gibt es etwas zu beachten wenn man mit den Messages arbeitet (Modul Bug/Eigenheit bzw. falsch benutzt meinerseits)  oder ist deine Vorgehensweise wie dies benutzt werden muss?

Grüße

EDIT: Genauer beschrieben

igami

Ich verstehe Trotzdem noch nicht was du meinst.
Commands werden vor Message abgearbeitet.
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

schnitzelbrain

Zitat von: igami am 19 November 2017, 18:13:04
Ich verstehe Trotzdem noch nicht was du meinst.
Commands werden vor Message abgearbeitet.

Ich meinte einfach das ich nach WIKI Anleitung und viel copy-paste den Aufbau:
Command
Message

benutzt hatte.
Damit aber Probleme mit der Bedienung aufgetreten sind.
Nach deiner Lösung, Message Teil weg und im Command Teil mit Say die Ausgabe und Ausführung, hat es funktioniert.

Jetzt wollte ich mir zwei Fragen beantworten:
Hab ich bei meiner Definition und Aufbau des JSON (oder auch in meinem FHEM) generell Fehler die zu den besagten Problemen führten.
Oder ist der Aufbau mit dem Message Teil ohne über Say zu gehen überholt oder es muss etwas spezielles dabei beachtet werden.

Wenn ich z.B. dein Beispiel Berechtigungen benutze funktioniert es nicht. Gleiches Problem wie bei meinen eigenen Versuchen.
Abbrechen geht nicht, zurück geht nicht und nach einem Tastendruck geht es erst nach neustart noch einmal weiter. Ich hab als versuch den Meta-Dialog nocheinmal komplett neu angelegt, leider nix.

Jetzt habe ich alles soweit ich konnte mit say angepasst und das zurück eben "hardcoded" dann geht es soweit ist aber halt nicht so flexibel.
Irgendwo hab ich entweder noch große Verständnisprobleme oder es stimmt bei meiner Installation vielleicht was nicht.
Ein Fehler bei deinem Modul ist sicherlich auch möglich aber ich suche den Fehler erst mal bei mir.  :-[

Grüße

Keule_09

Zitat von: binford6000 am 19 November 2017, 08:41:46
Moin Marco,
das msgConfig device sieht OK aus.
Hast Du auch den meta_Dialog aus dem Wiki erstellt?
Dann brauchst Du noch einen eigenen Dialog oder Du nimmst zum Test die Waschmaschine aus dem Wiki.
Und natürlich das Attribut allowed in den Dialogen auf deinen ROOMATE oder everyone setzen.

VG Sebastian

Habe jetzt mal Testweise den Waschmaschine Dialog aus dem Wiki eingefügt aber ohne Erfolg.

Hab im Logfile folgende Meldungen wenn ich in Telegram den Befehl "/start" eingebe :

2017.11.19 21:56:49 5: msgConfig TelebotConfiq: called function msgConfig_Set()
2017.11.19 21:57:09 5: msgConfig TelebotConfiq: called function msgConfig_Notify()
2017.11.19 21:59:09 5: msgConfig TelebotConfiq: called function msgConfig_Notify()
2017.11.19 21:59:09 5: msgConfig TelebotConfiq: called function msgConfig_Notify()
2017.11.19 21:59:09 1: ERROR evaluating my $EVENT='msgText: /start';my $EVTPART0='msgText:';my $TYPE='TelegramBot';my $SELF='TelegramBotNotify';my $EVTPART1='/start';my $NAME='TelegramBot';{ fhem_bot($NAME); }: Undefined subroutine &main::fhem_bot called at (eval 767) line 1.

2017.11.19 21:59:09 3: TelegramBotNotify return value: Undefined subroutine &main::fhem_bot called at (eval 767) line 1.


Hab leider keine Ahnung was ich weiter machen muss bzw wo ich weiter den Fehler suchen soll 

Gruß Marco

igami

kannst du denn den msg Befehl ohne Fehler verwenden?
also "msg push @<ROOMMATE> Test"
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

Keule_09

Zitat von: igami am 20 November 2017, 16:24:43
kannst du denn den msg Befehl ohne Fehler verwenden?
also "msg push @<ROOMMATE> Test"

Hab jetzt mal alles gelöscht und neu konfiguriert.

Kann jetzt den Befehl absetzen und kommt auch an meinem <ROOMMATE> an.

Allerdings passiert immer noch nichts bei wenn ich den Befehl "/start" eingebe.

Habe den meta_Dialog und dein Beispiel_Dialog "Waschmaschine" erstellt.

Logfile gibt bei /start folgendes aus:
2017.11.21 13:34:42 5: msgConfig TelebotConfiq: called function msgConfig_Notify()