Autor Thema: msgDialog: Instant Messaging als FHEM Interface  (Gelesen 139053 mal)

Offline Amenophis86

  • Hero Member
  • *****
  • Beiträge: 2920
  • Anti-Statement befreite Zone ;)
Antw:msgDialog: Instant Messaging als FHEM Interface
« Antwort #765 am: 08 August 2021, 10:35:03 »
Das Problem ist glaube, dass die get Abfrage keine Antwort erhält. Gebe ich folgendes in die Commandline ein:
get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Etienne|everyone).* trigger
bekomme ich ein leeres Popup. Und das obwohl ich ja einen Test Dialog noch angelegt habe.
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...

Offline Amenophis86

  • Hero Member
  • *****
  • Beiträge: 2920
  • Anti-Statement befreite Zone ;)
Antw:msgDialog: Instant Messaging als FHEM Interface
« Antwort #766 am: 08 August 2021, 10:38:27 »
Fehler gefunden. In meinem Test Dialog fehlte der Trigger:
"%me%": { zu Beginn. Damit war die get Abfrage immer 0 und damit hat die Nachricht nicht geklappt. Jetzt geht es :)
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...

Offline GammaTwin

  • Full Member
  • ***
  • Beiträge: 135
Antw:msgDialog: Instant Messaging als FHEM Interface
« Antwort #767 am: 10 August 2021, 21:14:50 »
Dein Konstrukt ist trotzdem nicht klar. Ich habe in keinem Dialog den Trigger "%me%": {, außer im Meta-Dialog.

Dein me ist ja "Meta"
evalSpecials me=MetaDaher sollte nach der Eingabe von "Meta" aus dem Test-Dialog der Trigger "Test" angezeigt werden, aus:
"Test": {Und zusätzlich "abbrechen", in Summe:
Schaltflächen:
Test
abbrechen
angezeigter Text:
Ich kann folgendes für dich tun:
Aber wenn es funktioniert  :)

Offline Amenophis86

  • Hero Member
  • *****
  • Beiträge: 2920
  • Anti-Statement befreite Zone ;)
Antw:msgDialog: Instant Messaging als FHEM Interface
« Antwort #768 am: 12 August 2021, 16:07:08 »
Es war nicht expliziert der Trigger %me% sondern es hatte wohl generell der Trigger gefehlt.

So sah der fehlerhafte Code aus:
{
  "Test": {
    "match": "Test",
    "setOnly": false,
    "commands": ["set test off",
"set test on"],
    "message": [
      "Schalte test Dummy:"
    ]
  }
}

Was fehlte war noch ein Trigger vor allem. Bei meinem Test, dann der Trigger %me%. Inzwischen ist es ein anderer Trigger. Aber ich kam nur drauf, weil ich den Meta Dialog einfach nochmal kopiert und angepasst hatte und dabei ist das %me% stehen geblieben und hat mir dann gezeigt was der Fehler war.
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...

Offline SmiL3

  • New Member
  • *
  • Beiträge: 3
Antw:msgDialog: Instant Messaging als FHEM Interface
« Antwort #769 am: 24 August 2021, 00:32:44 »
Hallo
Ich bekomme es nicht zum Laufen / finde nicht den Fehler.
Es lief mal kurz, dann bekam ich nur noch Text als Antwort.
message @rr_Matti (test) (abbrechen)
Ich kann folgendes für dich tun:

Ok dachte ich, setzte ich alles nochmal neu auf. Danach wird es schon gehen.
Pustekuchen
Immernoch der selbe Fehler, nur Text dazu kommt das in Telegamm alte normale Keyboard angezeit werden.

Ich hoffe Ihr könnt mir helfen es hin zubekommen.
Telegam
defmod Telegram TelegramBot
attr Telegram defaultPeer 1xxxxxxxx
attr Telegram pollingTimeout 120
attr Telegram utf8Special 1

setstate Telegram Polling
setstate Telegram 2021-08-23 12:10:48 Contacts 1xxxxxxx:Matti:
setstate Telegram 2021-08-23 12:07:40 PollingErrCount 0
setstate Telegram 2021-08-23 23:29:11 msgChat Matti
setstate Telegram 2021-08-23 23:29:11 msgChatId 1xxxxxxx
setstate Telegram 2021-08-23 23:29:11 msgFileId
setstate Telegram 2021-08-23 23:29:11 msgId 44152
setstate Telegram 2021-08-23 23:29:11 msgPeer Matti
setstate Telegram 2021-08-23 23:29:11 msgPeerId 1xxxxxxxx
setstate Telegram 2021-08-23 23:29:11 msgReplyMsgId
setstate Telegram 2021-08-23 23:29:11 msgText Q
setstate Telegram 2021-08-23 23:29:11 prevMsgChat Matti
setstate Telegram 2021-08-23 23:29:11 prevMsgFileId
setstate Telegram 2021-08-23 23:29:11 prevMsgId 44150
setstate Telegram 2021-08-23 23:29:11 prevMsgPeer Matti
setstate Telegram 2021-08-23 23:29:11 prevMsgPeerId 1xxxxxxx
setstate Telegram 2021-08-23 23:29:11 prevMsgReplyMsgId
setstate Telegram 2021-08-23 23:29:11 prevMsgText Q
setstate Telegram 2021-08-23 17:47:47 rr_Matti_sentMsgId 44145
setstate Telegram 2021-08-23 23:29:12 sentMsgId 44153
setstate Telegram 2021-08-23 23:29:12 sentMsgPeerId 1xxxxxxx
setstate Telegram 2021-08-23 23:29:12 sentMsgResult SUCCESS

msgConfig
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 Telegram
attr myMsgConfig msgDialog_evalSpecials me=Q\
TelegramBot=Telegram
attr myMsgConfig msgDialog_msgCommand msg message \@$recipients $message
attr myMsgConfig msgType text
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 5

setstate myMsgConfig 1
setstate myMsgConfig 2021-08-23 23:29:11 fhemMsgPush message @rr_Matti (test) (abbrechen) \
Ich kann folgendes für dich tun:
setstate myMsgConfig 2021-08-23 23:29:11 fhemMsgPushGw  Telegram:OK
setstate myMsgConfig 2021-08-23 23:29:11 fhemMsgPushPrio 0
setstate myMsgConfig 2021-08-23 23:29:11 fhemMsgPushState 1
setstate myMsgConfig 2021-08-23 23:29:11 fhemMsgPushTitle -
setstate myMsgConfig 2021-08-23 23:29:11 fhemMsgState 1
setstate myMsgConfig 2021-08-23 23:29:11 fhemMsgStateTypes push:1 forwards:text>push

Residents
defmod rr_Matti ROOMMATE Residents
attr rr_Matti alias Status
attr rr_Matti comment Auto-created by Residents
attr rr_Matti 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_Matti group Matti
attr rr_Matti icon people_sensor
attr rr_Matti msgContactPush Telegram:@1xxxxxxxx
attr rr_Matti room Residents
attr rr_Matti rr_realname group
attr rr_Matti sortby 1
attr rr_Matti webCmd state

setstate rr_Matti home
setstate rr_Matti 2021-08-23 12:03:40 durTimerAbsence 00:00:00
setstate rr_Matti 2021-08-23 12:03:40 durTimerAbsence_cr 0
setstate rr_Matti 2021-08-24 00:01:36 durTimerPresence 11:57:56
setstate rr_Matti 2021-08-24 00:01:36 durTimerPresence_cr 718
setstate rr_Matti 2021-08-23 12:03:40 durTimerSleep 00:00:00
setstate rr_Matti 2021-08-23 12:03:40 durTimerSleep_cr 0
setstate rr_Matti 2021-08-23 23:29:11 fhemMsgRcvPush Q
setstate rr_Matti 2021-08-23 23:29:11 fhemMsgRcvPushGw Telegram
setstate rr_Matti 2021-08-23 12:03:40 lastArrival 2021-08-23 12:03:40
setstate rr_Matti 2021-08-23 12:03:40 lastState initialized
setstate rr_Matti 2021-08-23 12:03:40 mood calm
setstate rr_Matti 2021-08-23 12:03:40 presence present
setstate rr_Matti 2021-08-23 12:03:40 state home
setstate rr_Matti 2021-08-23 12:03:40 wayhome 0

meta_Dialog
defmod meta_Dialog msgDialog {\
"%me%": {\
      "match": "\/?(start|%me%)",\
      "commands": "deletereading TYPE=msgDialog $recipient_history",\
      "message": [\
         "{return('(' . join(') (', sort{lc($a) cmp lc($b)} (split('\n', fhem('get TYPE=msgDialog:FILTER=NAME!=$SELF:FILTER=allowed=.*($recipient|everyone).* trigger', 1)))) . ') (abbrechen) ')}",\
         "Ich kann folgendes für dich tun:"\
      ]\
   },\
   "zurück": {\
      "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/((.+)\\|.+$)/;;;;;;;; return($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."\
      ]\
   }\
}
attr meta_Dialog allowed everyone
attr meta_Dialog room Dialog

setstate meta_Dialog rr_Matti: Q
setstate meta_Dialog 2021-08-23 23:29:11 state rr_Matti: Q

test_dialog
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
attr test_dialog room Dialog

setstate test_dialog 2021-08-23 17:22:16 state Initialized

dummy
defmod test dummy

setstate test on

message2queryEditInline
defmod message2queryEditInline cmdalias set .+ message (.|\n)+ AS {\
  my ($NAME, $cmd, $message) = split(/[\s]+/, $EVENT, 3);;\
  my $TYPE = InternalVal($NAME, "TYPE", "");;\
  (my $recipient, $message) = ($message =~ m/(@\S+)? (.+)/s);;\
  \
  if($TYPE eq "TelegramBot" && $recipient){\
    my ($contact) = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$recipient.*");;\
    my $sentMsgId = ReadingsVal($NAME, "$contact\_sentMsgId", "");;\
\
    if($sentMsgId ne ""){\
      fhem("set $NAME queryEditInline $sentMsgId $recipient $message");;\
    }\
    else{\
      fhem("set $NAME queryInline $recipient $message");;\
    }\
  }\
  else{\
    fhem("set $EVENT");;\
  }\
}
attr message2queryEditInline room msg

setstate message2queryEditInline defined

sentMsgIdByPeerId
defmod sentMsgIdByPeerId notify .+:sentMsgId.+ {\
  return unless($TYPE eq "TelegramBot");;\
  \
  my $dev_hash = $defs{$NAME};;\
  my $sentMsgId = ReadingsVal($NAME, "sentMsgId", "");;\
  my $sentMsgPeerId = ReadingsVal($NAME, "sentMsgPeerId", "");;\
  my ($contact) = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$sentMsgPeerId.*");;\
  \
  readingsSingleUpdate($dev_hash, "$contact\_sentMsgId", $sentMsgId, 1);;\
}
attr sentMsgIdByPeerId devStateIcon {ReadingsVal($name, "state", "inactive") eq "active" ? ".*:ios-on-blue:inactive" : ".*:ios-off:active"}
attr sentMsgIdByPeerId icon audio_mic
attr sentMsgIdByPeerId room msg

setstate sentMsgIdByPeerId active
setstate sentMsgIdByPeerId 2021-08-24 00:08:17 state active

inline_normal.NOT
defmod inline_normal.NOT notify inline_normal.DUM:.* {\
if ("$EVENT" =~ "on") {\
  fhem "set sentMsgIdByPeerId active;; attr message2queryEditInline disable 0";;\
  } \
elsif ("$EVENT" =~ "off") {\
  fhem "set sentMsgIdByPeerId inactive;; attr message2queryEditInline disable 1";;\
  }\
}
attr inline_normal.NOT room msg

setstate inline_normal.NOT active
setstate inline_normal.NOT 2021-08-23 17:43:48 state active

Wenn ich Q sende zum Bot steht das im log
2021.08.24 00:20:30 5: msgConfig myMsgConfig: called function msgConfig_Notify()
2021.08.24 00:20:30 5: msg myMsgConfig: msgType lookup for myMsgConfig:
2021.08.24 00:20:30 5: msg myMsgConfig:    Adding to @typesOr: text
2021.08.24 00:20:30 5: msg myMsgConfig:       Adding to @type: text
2021.08.24 00:20:30 5: msg myMsgConfig: Checking for available routes (triggered by type text)
2021.08.24 00:20:30 5: msg myMsgConfig: screen route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: light route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: audio route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: push route check result: ROUTE_AVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: mail route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 4: msg myMsgConfig: Available routes: screen=0 light=0 audio=0 text=1 push=1 mail=0
2021.08.24 00:20:30 4: msg myMsgConfig: Text routing decision: push(4)
2021.08.24 00:20:30 5: msg myMsgConfig: Checking for available routes (triggered by type push)
2021.08.24 00:20:30 5: msg myMsgConfig: screen route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: light route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: audio route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: push route check result: ROUTE_AVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: mail route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 4: msg myMsgConfig: Available routes: screen=0 light=0 audio=0 text=1 push=1 mail=0
2021.08.24 00:20:30 5: msg myMsgConfig: Trying to send message via gateway Telegram
2021.08.24 00:20:30 5: msg myMsgConfig: Determined default title:
2021.08.24 00:20:30 5: msg myMsgConfig: msgSchema: replacing %RECIPIENT% and $RECIPIENT by ''
2021.08.24 00:20:30 5: msg myMsgConfig: msgSchema: replacing %TelegramBot_MTYPE% and $TelegramBot_MTYPE by 'message'
2021.08.24 00:20:30 5: msg myMsgConfig: push route command (fhem): set Telegram message  message @rr_Matti (test) (abbrechen)
Ich kann folgendes für dich tun:
2021.08.24 00:20:30 3: cmdalias message2queryEditInline called recursively, skipping execution
2021.08.24 00:20:30 3: msg myMsgConfig: ID=1629757230.57401.1 TYPE=push ROUTE=Telegram STATUS=OK PRIORITY=0 TITLE='' MSG='message @rr_Matti (test) (abbrechen)
Ich kann folgendes für dich tun:'
2021.08.24 00:20:30 5: msgConfig myMsgConfig: called function msgConfig_Notify()
2021.08.24 00:20:30 3: sentMsgIdByPeerId return value: rr_Matti_sentMsgId: 44157
Event Monitor
2021-08-24 00:20:30 msgDialog meta_Dialog rr_Matti_history:
2021-08-24 00:20:30 msgDialog meta_Dialog rr_Matti: Q
2021-08-24 00:20:30 msgConfig myMsgConfig fhemMsgPush: message @rr_Matti (test) (abbrechen)  Ich kann folgendes für dich tun:
2021-08-24 00:20:30 msgConfig myMsgConfig fhemMsgPushTitle: -
2021-08-24 00:20:30 msgConfig myMsgConfig fhemMsgPushPrio: 0
2021-08-24 00:20:30 msgConfig myMsgConfig fhemMsgPushGw:  Telegram:OK
2021-08-24 00:20:30 msgConfig myMsgConfig fhemMsgPushState: 1
2021-08-24 00:20:30 msgConfig myMsgConfig fhemMsgStateTypes: push:1 forwards:text>push
2021-08-24 00:20:30 msgConfig myMsgConfig fhemMsgState: 1
2021-08-24 00:20:30 ROOMMATE rr_Matti fhemMsgRcvPush: Q
2021-08-24 00:20:30 ROOMMATE rr_Matti fhemMsgRcvPushGw: Telegram
2021-08-24 00:20:30 TelegramBot Telegram msgId: 44156
2021-08-24 00:20:30 TelegramBot Telegram msgPeer: Matti
2021-08-24 00:20:30 TelegramBot Telegram msgPeerId: 1xxxxxx
2021-08-24 00:20:30 TelegramBot Telegram msgChat: Matti
2021-08-24 00:20:30 TelegramBot Telegram msgChatId: 1xxxxxx
2021-08-24 00:20:30 TelegramBot Telegram msgText: Q
2021-08-24 00:20:30 TelegramBot Telegram msgReplyMsgId:
2021-08-24 00:20:30 TelegramBot Telegram msgFileId:
2021-08-24 00:20:30 TelegramBot Telegram sentMsgResult: SUCCESS
2021-08-24 00:20:30 TelegramBot Telegram sentMsgId: 44157
2021-08-24 00:20:30 TelegramBot Telegram sentMsgPeerId: 1xxxxx
2021-08-24 00:20:30 TelegramBot Telegram rr_Matti_sentMsgId: 44157

Gruß Matti

Offline Frieder

  • New Member
  • *
  • Beiträge: 7
Antw:msgDialog: Instant Messaging als FHEM Interface
« Antwort #770 am: 16 September 2021, 15:49:23 »
Hallo allerseits,
Ich habe mich grade neu angemeldet, habe aber mit Hilfe dieses Forums schon so einige Probleme gelöst!

Ich möchte fhem gern über telegram steuern und auslesen, was mit Hilfe des msgDialog auch problemlos funktioniert.

Was aber absolut nicht klappen will ist das Inline Keyboard. Ohne Inline (also mit schaltflächen unten) reagiert fhem wie erwartet auf eingehende Nachrichten. Inline schaltflächen werden auf dem Handy auch angezeigt, aber fhem reagiert nicht, wenn ich darauf klicke...
Habt ihr einen Tipp, was ich übersehe?
Danke