msgDialog: Instant Messaging als FHEM Interface

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

Vorheriges Thema - Nächstes Thema

ErzGabriel

Ach so, Du meintest in der Def es zu bearbeiten. Ich mache das immer in der RAW, deswegen war ich wegen dem Button verwirrt.
Das hat leider auch nicht geklappt aber dein Hinweis, das Du mit dem Meta Dialog auch ne Fehlermeldung hast, brachte mich auf die richtige Idee. Ich habe mir hier im Thread einen Meta Dialog gesucht und den benutzt, da hat es geklappt. Ergo schließe ich daraus, das der Meta Dialog im Wiki einen Fehler drin hat.

Danke für die Hilfe.

gestein

Eigenartig.
Deine Definition hat bei mir so geklappt.
Aber wenn es gelöst ist und nun funktioniert, passt es ja.

lg, Gerhard

estege

Ich habe die Konfiguration für MsgDialog entsprechend der Anleitung im Wiki vorgenommen und dabei auch die Hinweise hier im Forum berücksichtigt. Ein Problem mit dem inlineKeyboard konnte ich leider nicht beheben:

Um den inlineKeyboard-Modus zu nutzen, wird mit Hilfe von cmdAlias die TelegramBot-Ausgabefunktion "umgeschrieben". Im Wiki ist hierfür nach Vorschlag von Igami in Post#10 die Funktion message2queryEditInline definiert. Diese Funktion wird bei mir aber NUR beim ersten Aufruf eines msgDialogs aktiviert. Alle nachfolgenden Aufrufe gehen an der Funktion vorbei. Deshalb kann ich nur die erste Ebene eines MsgDialogs aktivieren.

Woran kann das liegen bzw. wie kann ich der Ursache einen Schritt näher kommen kann?

eTax

Hallo zusammen,

ich habe noch Probleme in Zusammenhang mit dem Erzeugen von Google Maps Links mit msgDialog, um Positionen und Distanzen von Livetracking Devices auszugeben.
Ich habe dazu folgenden Beitrag von ToM_ToM gefunden. Jedoch funktioniert bei mir seine Lösung nicht.

Zitat von: ToM_ToM am 06 März 2018, 08:22:18
Funktionierte leider auch nicht. Aber habe den Fehler jetzt gefunden. :)
Das Komma und das Gleichheitszeichen in der URL mussten auch encodiert werden damit die URL im Telegram-Messenger angezeigt wird.


{
  "Notfall": {
    "message": [
"(Standort) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"Letzen Standort abfragen"

    ],
"Standort": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $locLat = ReadingsVal(\"Thomas\", \"locationLat\", \"0\");; my $locLong = ReadingsVal(\"Thomas\", \"locationLong\", \"0\");; my $locLatTimestamp = ReadingsTimestamp(\"Thomas\", \"locationLat\", \"0\"); my $locAddress = ReadingsVal(\"Thomas\", \"locationAddr\", \"0\"); return \"Letzte Position war $locLatTimestamp: $locLat x $locLong $locAddress https:\/\/www.google.de\/maps\/%40\".$locLat.\",$locLong%2C15z?hl%3Dde\"}"
]
}
  }
}


VG, Thomas

Mit dem für mich angepassten Code erhalte ich folgenden Link (Geokoordinaten verändert):
https://www.google.de/maps/%4050.80571,12.66600%2C15z?hl%3Dde

Mein Versuch sieht derzeit so aus. Die Syntax der Google Maps URLs hat sich laut Doku zu der Version von ToM_ToM auch verändert:

"{my $locLat = ReadingsVal(\"RR_Livetracking\", \"latitude\", \"0\");; my $locLong = ReadingsVal(\"RR_Livetracking\", \"longitude\", \"0\");; my $locLatTimestamp = ReadingsTimestamp(\"RR_Livetracking\", \"latitude\", \"0\"); my $locAddress = ReadingsVal(\"RR_Livetracking\", \"place\", \"0\"); return \"Letzte Position war $locLatTimestamp: $locLat x $locLong $locAddress https:\/\/www.google.com\/maps\/search\/%3Fapi%3D1%26query%3D\".$locLat.\",$locLong\"}"

Daraus erhalte ich dann folgenden Link: https://www.google.com/maps/search/%3Fapi%3D1%26query%3D50.80571,12.66600

Beide Links führen noch nicht zum Ergebnis. Mir ist daher noch nicht ganz klar welche Zeichen maskiert und welche per URL Encoding verändert werden müssen.

kumue

#754
Ohne jetzt die 51 Seite durchzustöbern eine kurze Frage...

Ich versuche einen else-Zweig in die Dialog-Ausgabe einzubauen...So wie ich es versucht habe funktioniert es leider nicht.
Ist es überhaupt möglich, dieses in eine Zeile zu packen ?

"{return('Garagentor ist offen') if(ReadingsVal('SW_AU_Garagentor_N', 'state', '') eq 'on') else (return ('Garagentor ist geschlossen'))}",

Esjay

Ich mache das Beispielsweise im message Zweig wie folgt:

{
"Alarmanlage": {
"message": [
"{return('(🔒 Alarmanlage Level 0 Ein) ') if(ReadingsVal('AlarmAnlage','level0','') eq 'disarmed')}",
"{return('(🔓 Alarmanlage Level 0 Aus) ') if(ReadingsVal('AlarmAnlage','level0','') eq 'armed')}",


Schau mal ob du das für dich ableiten kannst.

Grüße

kumue

So hatte ich es bisher auch gemacht, aber wenn die eine Bedingung nicht zutrifft. hat man halt eine Leerzeile und das wollte ich halt nicht.
Reine Kosmetik, deshalb mein Versuch, den else-Zweig in den Einzeiler zu packen...

Danke und Gruß

GammaTwin

Grüße,

mit dem IF (fhem) geht es. Mit if (Perl) ist es mir bisher auch nicht gelungen - und da habe ewig nach einen Fehler gesucht.

...
"commands": [
    "IF ([KNX_0003001:g1] == 0) (set KNX_0003001 g1 1) ELSE (set KNX_0003001 g1 0),"
    ...

kumue

habs mal zum Test mit dummys eingebaut.. es wird bei mir die Befehlszeile als String ausgegeben...hm... na mal weiter probieren
Danke für den Denkanstoss Richtung IF

GammaTwin

Grüße,

vielleicht ein Fehler vor mir :)

Ich benutze es im "commands" nicht in "message".

Amenophis86

Ich habe mein FHEM neu aufgesetzt und wollte jetzt den msgDialog wieder einbauen. Allerdings bekomme ich beim Meta immer folgenden Fehler im Log:
2021.08.02 20:16:46 3: eval: {return('(' . join(') (', sort(split('
', fhem('get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Etienne|everyone).* trigger')))) . ') ')}
2021.08.02 20:16:46 3: msg rr_Etienne: ID=xxx TYPE=push ROUTE=Telegram RECIPIENT=@xxxx STATUS=OK PRIORITY=0 TITLE='' MSG='()
(abbrechen)
Ich kann folgendes für dich tun:'


Hier ein list des Meta Dialogs aus dem Wiki kopiert:
Internals:
   CFGFN     
   DEF        {
  "%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')))) . ') ')}",
      "(abbrechen) ",
      "Ich kann folgendes für dich tun:"
    ]
  },
  "abbrechen": {
    "match": "\/?abbrechen",
    "commands": [
  "deletereading TYPE=msgDialog $recipient_history",
  "deletereading %TelegramBot% $recipient_sentMsgId"
    ],
    "message": [
      "(%me%) ",
      "Dialog abgebrochen."
    ]   
  },
  "beenden": {
    "match": "\/?beenden",
    "commands": [
  "deletereading TYPE=msgDialog $recipient_history",
  "deletereading %TelegramBot% $recipient_sentMsgId"
    ],
    "message": [
      "(%me%) ",
      "Dialog beendet."
    ]
  }
}
   FUUID      61083038-f33f-92c6-2ed8-67692e6f5898a707
   MSGCOMMAND msg push \@$recipients $message
   NAME       meta_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         26980
   NTFY_ORDER 50-meta_Dialog
   STATE      rr_Etienne: Meta
   TRIGGER    beenden,abbrechen,Meta
   TYPE       msgDialog
   OLDREADINGS:
   READINGS:
     2021-08-02 20:16:46   state           rr_Etienne: Meta
Attributes:
   allowed    rr_Etienne
   evalSpecials me=Meta
TelegramBot=Telegram
   verbose    2


Und hier mal ein Test Dialog, dass er was finden kann:
Internals:
   CFGFN     
   DEF        {
  "Test": {
    "match": "Test",
    "setOnly": false,
    "commands": ["set test off",
"set test on"],
    "message": [
      "Schalte test Dummy:"
    ]
  }
}
   FUUID      610831dd-f33f-92c6-4700-f38c0c8cc043d6c1
   MSGCOMMAND msg push \@$recipients $message
   NAME       Test_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         27202
   NTFY_ORDER 50-Test_Dialog
   STATE      Initialized
   TRIGGER   
   TYPE       msgDialog
   READINGS:
     2021-08-02 20:00:09   state           Initialized
Attributes:
   allowed    rr_Etienne
   evalSpecials TelegramBot=Telegram


Kann mich mal einer auf die Antwort für den Fehler schubsen? Ich finde ihn nicht. Ich bekomme als Nachricht auch den Text:
(abbrechen)
Ich kann folgendes für dich tun:

Dabei kann man abbrechen nicht anklicken und alles ist reine Textform. Ich hab kein Plan woran es liegen könnte.
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

echt niemand eine Idee, oder alle im Urlaub? :D
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...

GammaTwin

Grüße,

was mir auffällt: in der Fehlermeldung steht in MSG nichts.
MSG='()

Bei mir steht da immer etwas.

Hast Du im Device "msgConfig" unter "msgDialog_evalSpecials" Dein "me" definiert?
defmod myMsgConfig msgConfig
attr myMsgConfig userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig msgContactPush TelegramBot
attr myMsgConfig msgDialog_evalSpecials me=DeinMe TelegramBot=TelegramBot
attr myMsgConfig msgType text
attr myMsgConfig stateFormat fhemMsgState

PSI69

@GammaTwin
Du warst schneller

@Amenophis86
Ich habe nichts gesehen bei Durchsehen, außer dass Du die evalSpecials in den Dialogen festlegst. Bei mir steht das im msgConfig:

Internals:
   FUUID      5c433c7b-f33f-739f-ec70-8426623598c12e7f
   FVERSION   75_msgConfig.pm:0.189950/2019-03-22
   NAME       myMsgConfig
   NOTIFYDEV  TYPE=(Jabber|TelegramBot|yowsup)
   NR         49
   NTFY_ORDER 50-myMsgConfig
   STATE      0
   TYPE       msgConfig
   READINGS:
     2020-09-22 11:49:54   fhemMsgPush     @rr_Peter,rr_Yvonne,rr_Christine,rr_Cornelia
     2020-09-22 11:49:54   fhemMsgPushGw   TeleBot:ERROR
     2020-09-22 11:49:54   fhemMsgPushPrio 0
     2020-09-22 11:49:54   fhemMsgPushState 0
     2020-09-22 11:49:54   fhemMsgPushTitle -
     2020-09-22 11:49:54   fhemMsgState    0
     2020-09-22 11:49:54   fhemMsgStateTypes push:0
Attributes:
   alias      Globale Konfiguration für Kommando 'msg'
   comment    FHEM Global Configuration for command 'msg'
   group      Konfiguration Benachrichtigungen
   icon       edit_settings
   msgCmdMail {DebianMail('%DEVICE%','%TITLE%','%MSG%')}
   msgContactPush TeleBot
   msgDialog_evalSpecials me=Q
TelegramBot=TeleBot
   msgType    text
   room       Infrastruktur->Messenger
   stateFormat fhemMsgState
   userattr   msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
   verbose    3


Peter
FHEM auf RPi 5 unter Bookworm mit inzwischen einem ganzen Zoo von Geräten...

Amenophis86

Ich hatte die wichtigen evalSpecials im Dialog, weil ich mittels msgconfig eigentlich Pushover nutze. Im resident habe ich dann jedoch Telegram als PushDevice angelegt. Auf meiner alten Version ging das auch so. Werde es mal ändern und schauen, ob es daran liegt. Habt ihr mal meinen MetaDialog gecheckt, ob ihr dort einen Fehler sehr oder der bei euch geht?
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...