FHEM Forum

FHEM => Frontends => Sprachsteuerung => Thema gestartet von: igami am 30 September 2017, 15:09:01

Titel: msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 30 September 2017, 15:09:01
Link zum Wiki Artikel: https://wiki.fhem.de/wiki/MsgDialog

Bei Problemen bitte den Dialog als Raw definition posten (siehe https://wiki.fhem.de/wiki/Import_von_Code_Snippets)



Originalbeitrag:


Hi zusammen,

hier möchte ich euch mein neues Modul msgDialog vorstellen, welches es erlaubt chat Dialoge zu definieren und für jeden Dialog verschiedene Benutzer zu berechtigen.
Selbst nutze ich nur Telegram in FHEM, aber das Modul sollte auch mit Jabber und Whatsapp funktionieren.

Momentan befinde ich mich noch in der Testphase, möchte euch aber doch schon mal ein Video von der Anwendung mit Telegram präsentieren.
https://youtu.be/oRDy2918mVI

Ich hoffe es gefällt euch.
Eine erste Version und Beschreibung folgt nächste Woche.

Grüße,
igami
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: tiroso am 30 September 2017, 15:27:15
Das Video ist nicht verfügbar
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 30 September 2017, 15:30:43
Zitat von: tiroso am 30 September 2017, 15:27:15
Das Video ist nicht verfügbar
Sollte nun gehen, stand noch auf Privat :-[
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 30 September 2017, 16:35:05
ZitatSollte nun gehen, stand noch auf Privat :-[

Jepp geht. Sieht bombe aus!

ZitatIch hoffe es gefällt euch.
Eine erste Version und Beschreibung folgt nächste Woche.

Ich bin schon sehr gespannt! An der Stelle schon mal vielen Dank im Voraus deine Mühe!
VG Sebastian

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 30 September 2017, 17:30:16
Hallo  igami,

ich habe mir etwas Ähnliches selbst programmiert. Bin aber mal gespannt wenn das von dir fertig ist. Vielleicht ist es damit einfacher und ich kann meine Eigenentwicklung ersetzen. :)

VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 30 September 2017, 19:08:08
Wow, das sieht echt Hammer aus!

Mal schauen, was sich da so Implementieren lässt.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: mrfloppy am 30 September 2017, 19:46:46
VOll genial. Freue mich schon darauf.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Ma_Bo am 30 September 2017, 21:27:41
Sieht interessant aus, bin auf die erste Version gespannt...
Grüße Marcel


Tapatalk iPhone, daher kurz gehalten.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: nanocosmos am 30 September 2017, 21:42:39
Echt klasse!
Freue mich ebenfalls auf die ersten Versionen. [emoji4]
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 01 Oktober 2017, 08:48:16
Mit dem msgDialog Modul können Dialoge definiert werden, die dann per Instant Messaging durchgegangen werden.
Die Idee zu dem Modul kam mir dadurch, dass ich meine Waschmaschine über eine Funksteckdose schalte. Ich bereite sie meist morgens vor der Arbeit vor und lege dann eine Uhrzeit fest, wann Sie fertig sein soll. Damit ich dabei aber nicht immer auf einen Browser angewiesen bin habe ich mir eine Lösung über Telegram auf Basis von DOIF gebastelt. Diese hat zwar funktioniert, war aber nicht sehr Intuitiv.
Wichtig dabei war mir von Anfang an, dass ich die einzelnen Dialoge für verschiedene Benutzer freigeben kann.
Das msg Dialog Modul baut auf dem msg Befehl auf. Der msg Befehl kann mit ROOMMATE und GUEST devices genutzt werden. Für jeden Bewohner wird die Kontaktart festgelegt. Leider unterstützt der msg Befehl nur ausgehende Nachrichten. Daher habe ich mir für eingehnde Nachrichten ein notify erstellt, welches für Telegram, Jabber und Whatsapp eingehende Nachrichten als readings in die entsprechenden ROOMMATE/GUEST devices schreibt.
Raw definition:

defmod msgPushReceived notify .*(msgText|queryData|(OTR)?LastMessage|message):(\n|.)* {\
  my ($recipient, $received);;\
  my $TYPE = InternalVal($NAME, "TYPE", "");;\
\
  if($TYPE eq "TelegramBot" && $EVENT =~ m/^msgText/){\
    $recipient = ReadingsVal($NAME, "msgPeerId", undef);;\
    $received = ReadingsVal($NAME, "msgText", undef);;\
  }\
  elsif($TYPE eq "TelegramBot" && $EVENT =~ m/^queryData/){\
    $recipient = ReadingsVal($NAME, "queryPeerId", undef);;\
    $received = ReadingsVal($NAME, "queryData", undef);;\
  }\
  elsif($TYPE eq "Jabber" && $EVENT =~ m/^((OTR)?Last)Message/){\
    $received = ReadingsVal($NAME, $1."Message", undef);;\
    ($recipient) = (ReadingsVal($NAME, $1."SenderJID", undef) =~ m/[^\/]+/g);;\
  }\
  elsif($TYPE eq "yowsup" && $EVENT =~ m/^message/){\
    $recipient = $NAME;;\
    $NAME = $modules{yowsup}{defptr}{yowsup}->{NAME};;\
    $received = ReadingsVal($NAME, "message", undef);;\
  }\
\
  return unless($recipient && $received ne "");;\
  \
  my @contacts = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$recipient.*");;\
  \
  if(@contacts){\
    foreach (@contacts){\
      my $dev_hash = $defs{$_};;\
\
      readingsBeginUpdate($dev_hash);;\
      readingsBulkUpdate($dev_hash, "fhemMsgPushReceived", $received);;\
      readingsBulkUpdate($dev_hash, "fhemMsgPushReceivedContact", $NAME);;\
      readingsEndUpdate($dev_hash, 1);;\
    }\
  }\
  else{\
    fhem("msg push Unbekannter Kontaktversuch über $NAME von $recipient:\n$received");;\
  }\
}
attr msgPushReceived devStateIcon {ReadingsVal($name, "state", "inactive") eq "active" ? ".*:ios-on-blue:inactive" : ".*:ios-off:active"}
attr msgPushReceived icon audio_mic
attr msgPushReceived room msg

Dadurch bekommen wir nun die Readings "fhemMsgPushReceived", mit dem Inhalt der Nachricht, und "fhemMsgPushReceivedContact" mit dem device aus dem die Nachricht stammt, wobei letzteres bisher noch keine Rolle spielt. Vielleicht kann man das mal weiterentwickeln, dass man eben pro Benutzer mehrere Schnittstellen definieren kann.
Wer den msg Befehl bereits verwendet hat schon ein device vom Typ msgConfig. Alle anderen müssen dies erst noch anlegen.
Meins sieht so aus
Raw definition:

defmod myMsgConfig msgConfig
attr myMsgConfig userattr evalSpecials:textField-long
attr myMsgConfig evalSpecials me=kanaan\
TelegramBot=TelegramBot
attr myMsgConfig msgContactPush TelegramBot
attr myMsgConfig room msg

Dann gibt es noch die verschiedenen ROOMMATEs, bei dem das Attribut  msgContactPush gesetzt werden muss.
Für Telegram sieht das dabei so aus:

attr <ROOMMATE|GUEST> msgContactPush <TelegramBot>:@<PeerID>

Bei Telegram gibt es noch eine weitere Besonderheit. Ich musste das Attribut utf8Special auf 1 setzen, damit ich Nachrichten mit Umlauten gesendet bekomme.

Damit sind alle Vorbereitungen getroffen und wir können den ersten Dialog schreiben.

define Waschmaschine_Dialog msgDialog {}

So bekommen wir einen leeren Dialog und können ihn bequem über das DEF Feld bearbeiten. Die Dialoge sind als JSON aufgebaut und es gibt verschiedene besondere keys.
message: definiert die Antwort, die von dem Bot kommt. Kann entweder eine Einzeilige Nachricht sein, oder ein Array bei dem die Werte dann durch ein \n verbunden werden.
commands: definiert die Befehle die ausgeführt werden, wenn dieser Status des Dialog erreicht ist. Die Befehle werden vor der Antwort ausgeführt. Kann auch entweder ein Befehl sein, oder ein Array von Befehlen. Die Befehle müssen dabei genau so eingegeben werden, wie in der Kommandozeile von FHEM.
match: Hier kann eine REGEX angegeben werden auf die die eingehende Nachricht geprüft wird. Wenn diese zutrifft wird der Dialog an dieser Stelle fortgeführt
setOnly: kann true oder false sein. Bei true wird der Bot nicht auf die Nachricht antworten, auch wenn sie passt. Das ist dazu gedacht um eine Benachrichtigung vom Bot aus zu senden.

Dann gibt es noch das Attribut evalSpecials, was einigen vielleicht auch schon als userattr beim msgConfig device aufgefallen ist. Hier können Synonyme definiert werden. In allen Dialogen wird dann %me% durch "kannan" ersetzt und %TelegramBot% durch "TelegramBot", der name meines TelegramBots. Wenn ich in einem Dialog dann auch noch mal "me" definiere gilt dies nur für diesen Dialog.

Weiterhin gibt es noch einige Variablen:
$SELF: Der Name des Dialog
$recipient: Kommagetrennte Liste aller angesprochenen Empfänger. Im Dialog selbst ist das immer nur ein Empfänger
$message: Inhalt der empfangenen Nachricht

Nun aber weiter zum Dialog. In die DEF schreibe ich nun folgenden:

{ "Waschmaschine": {
    "message": [
      "{return('(Zeitprogramm stoppen) ') if(ReadingsVal('%controlUnit%', 'controlMode', '') eq 'auto')}",
      "{return('(programmieren) (einschalten) ') if(ReadingsVal('%actor%', 'state', '') ne 'on')}",
      "(Verlaufsdiagramm) ",
      "(abbrechen) ",
      "{return('Waschmaschine: ' . (ReadingsVal('%actor%', 'state', '') eq 'on' ? 'eingeschaltet' : 'ausgeschaltet'))}",
      "{return('Modus: ' . (ReadingsVal('%controlUnit%', 'controlMode', '') eq 'auto' ? 'Automatik' : 'Manuell (' . ReadingsVal('%controlUnit%', 'time', '') . ')'))}"
    ],
    "Zeitprogramm stoppen": {
      "commands": "set %controlUnit% controlMode manual",
      "message": [
        "(%me%) ",
        "Das Zeitprogramm wurde gestoppt."
      ]
    },
    "programmieren": {
      "message": [
        "(bestätigen|abbrechen) ",
        "(00:00:00_00|00:30:00_30|01:00:01_00|01:30:01_30|02:00:02_00|02:30:02_30) ",
        "(03:00:03_00|03:30:03_30|04:00:04_00|04:30:04_30|05:00:05_00|05:30:05_30) ",
        "(06:00:06_00|06:30:06_30|07:00:07_00|07:30:07_30|08:00:08_00|08:30:08_30) ",
        "(09:00:09_00|09:30:09_30|10:00:10_00|10:30:10_30|11:00:11_00|11:30:11_30) ",
        "(12:00:12_00|12:30:12_30|13:00:13_00|13:30:13_30|14:00:14_00|14:30:14_30) ",
        "(15:00:15_00|15:30:15_30|16:00:16_00|16:30:16_30|17:00:17_00|17:30:17_30) ",
        "(18:00:18_00|18:30:18_30|19:00:19_00|19:30:19_30|20:00:20_00|20:30:20_30) ",
        "(21:00:21_00|21:30:21_30|22:00:22_00|22:30:22_30|23:00:23_00|23:30:23_30) ",
        "Wann soll die Wäsche fertig sein?",
        "Bitte Uhrzeit in HH:MM angeben.",
        "Aktuell ist [%controlUnit%:time] Uhr eingestellt."
      ],
      "Uhrzeit": {
        "match": "([0-1][0-9]|2[0-3])[:_][0-5][0-9]",
        "commands": [
          "{my $time = '$message';; $time =~ s/_/:/;; fhem(\"set %controlUnit% time $time\");;}",
          "set $SELF say @$recipient Waschmaschine|programmieren|bestätigen"
        ]
      },
      "bestätigen": {
        "commands": "set %controlUnit% controlMode auto",
        "message": [
          "(%me%) ",
          "Das Zeitprogramm wurde eingestellt.",
          "Die Wäsche wird voraussichtlich um [%controlUnit%:time] Uhr fertig sein.",
          "Bitte die Waschmaschine vorbereiten."
        ]
      }
    },
    "einschalten": {
      "commands": [
        "set %controlUnit% controlMode manual",
        "set %actor% on"
      ]
    },
    "Verlaufsdiagramm": {
      "commands": "set %TelegramBot% cmdSend {plotAsPng('%plot%')}",
      "message": [
        "(%me%) ",
        "Waschkeller: Waschmaschine"
      ]
    }
  },
  "auto": {
    "setOnly": true,
    "commands": [
      "set %actor% on",
      "set %controlUnit% controlMode manual"
    ],
    "message": [
      "(%me%) ",
      "Die Wachmaschine wurde automatisch eingeschaltet."
    ]
  },
  "manual": {
    "setOnly": true,
    "message": [
      "(%me%) ",
      "Die Wachmaschine wurde manuell eingeschaltet."
    ]
  },
  "done": {
    "setOnly": true,
    "commands": "set %actor% off",
    "message": [
      "(%me%) ",
      "Die Wachmaschine ist fertig."
    ]
  }
}

Wenn ich nun "Waschmaschine" an meinen Bot sende bekomme ich eine Nachricht abhängig von dem Status zurück.
Ich kann das "Zeitprogramm stoppen", wenn die Waschmaschine vorbereitet is, die Waschmaschine "programmieren" oder "einschalten", wenn sie nicht läuft, ein "Verlaufsdiagramm" anfordern oder den Dialog "abbrechen". Weiterhin bekomme ich noch den "Modus" und den "Status" der Waschmaschine angezeigt.
Lautet meine nächste Nachricht dann "programmieren" bekomme ich die Nachricht
Zitat
Wann soll die Wäsche fertig sein?
Bitte Uhrzeit in HH:MM angeben.
Aktuell ist [%controlUnit%:time] Uhr eingestellt.
Und ein Keyboard mit Uhrzeiten im halbstunden Takt, sowie "bestätigen" und "abbrechen". [%controlUnit%:time] wird natürlich durch das Reading time von meiner controlUnit ersetzt.
Nun kann ich eine beliebige Uhrzeit eingeben oder auf einen der Buttons drücken um dadurch eine Uhrzeit zu senden.
Hier greift dann "match" von dem nächsten Dialog-Schritt "Uhrzeit". Es wird geprüft ob ich eine valide Uhrzeit angegeben habe. Falls ja, werden die Befehle ausgeführt:

"{my $time = '$message';; $time =~ s/_/:/;; fhem(\"set %controlUnit% time $time\");;}"

ersetzt in meiner Nachricht das _ durch einen : und set meine controlUnit dann auf diesen Wert. Das muss ich machen, da ich inlineKeyboards verwende und : dort das Trennzeichen zwischen angezeigtem und gesendetem Text ist.

"set $SELF say @$recipient Waschmaschine|programmieren|bestätigen"

Nachdem ich die Uhrzeit festgelegt habe ist es genau so, als wenn ich die vorherige Uhrzeit bestätigt habe.
Es werden dann alle Befehle die dort angegeben sind ausgeführt und ich bekomme die angegebene Nachricht gesendet.

Intern passiert nun noch folgendes. Um den Verlauf eines Dialogs zu speichern wird pro Benutzer ein Readings <ROOMMATE|GUEST>_history angelegt.
Zuerst nimmt dieses den Wert "Waschmaschine" an. Danach den Wert "Waschmaschine|programmieren" und danach den Wert "", da der Dialog an dieser Stelle beendet ist.

Der Vollständigkeithalber noch mein DOIF welches dann die Waschmaschine schaltet:
Raw definition:

defmod Waschkeller_washer_automation DOIF ### automated on ###\
([([Waschkeller_washer_controlUnit:time]-[HM_2C10D8_Sw_HourCounter:pulseTimeAverage])] and \
[Waschkeller_washer_controlUnit:controlMode] eq "auto"\
)(\
  set Waschmaschine_Dialog say auto\
)\
### done ###\
DOELSEIF\
([HM_2C10D8_Pwr:power] < [Waschkeller_washer_controlUnit:R-powerDone])(\
  set Waschmaschine_Dialog say done\
)\
### manual on ###\
DOELSEIF\
([HM_2C10D8_Sw:"on"] and \
[Waschkeller_washer_controlUnit:controlMode] eq "manual" and \
[$SELF:cmd] != 1\
)(\
  set Waschmaschine_Dialog say manual\
)
attr Waschkeller_washer_automation alias Waschkeller: Waschmaschine Automatik
attr Waschkeller_washer_automation cmdState automated on|done|manual on
attr Waschkeller_washer_automation group Waschmaschine
attr Waschkeller_washer_automation icon time_automatic
attr Waschkeller_washer_automation room Waschkeller
attr Waschkeller_washer_automation wait 0:180:0

Da die Befehle die beim Einschalten erfolgen sollen im Dialog angegeben sind, reicht es aus ein "set Waschmaschine_Dialog say auto" auszuführen. Dann werden alle Berechtigten Nutzer informiert, dass die Waschmaschine eingeschaltet wurde.

Unser Waschmaschine Dialog wird aber noch nicht funktionieren. Wir müssen noch über das Attribut "allowed" festlegen wer Berechtigt ist. Hier werden alle ROOMMATE/GUEST angezeigt, bei denen das "msgContactPush" gepflegt ist. Weiterhin gibt es dort auch die Möglichkeit "everyone" auszuwählen, dann betrifft es alle ROOMMATE/GUEST mit dem Attribut "msgContactPush".

Weiterhin muss auch noch das Attribut "evalSpecials" befüllt werden
Raw definition:

attr Waschmaschine_Dialog evalSpecials actor=HM_2C10D8_Sw\
controlUnit=Waschkeller_washer_controlUnit\
plot=Waschkeller_washer_SVG


Herzlichen Glückwunsch! Wir haben unseren ersten funktionsfähigen Dialog.
Aber es geht direkt weiter. Ich müsste mir ja nun merken was ich alles für Dialoge angelegt habe und wie genau die benannt sind. Da lege ich mir doch lieber einen Dialog für an, der mich darüber informiert:
Raw definition:

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')))) . ') ')}",\
      "(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."\
    ]\
  }\
}
attr meta_Dialog DbLogExclude .*
attr meta_Dialog allowed everyone
attr meta_Dialog room msg

Wenn wir nun in meinem Fall "kanaan" senden, bekommen wir eine Auflistung aller Berechtigten Dialoge. Bisher nur Waschmaschine.
"abbrechen" und "beenden" verhalten sich bis auf die Nachricht identisch.
In allen drei Fällen wird aber das history Reading in allen Dialogen gelöscht.
Das mit dem "deletereading %TelegramBot% $recipient_sentMsgId" hat etwas mit den inlineKeyboards zu tun und das erkläre ich ein anderes Mal.

Viel Spaß beim Testen und umsetzen.
Ich würde mich freuen, wenn sich jemand findet der einen Wiki Artikel dazu schreibt, das liegt mir nicht so.
Im Anhang die erste Version des Moduls, allerdings noch ohne commandref.

Grüße,
igami
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 01 Oktober 2017, 09:41:45
Hier nun etwas eher für Bastler:
Wie nutze ich inlineKeyboards und modifiziere die letzte Nachricht bei Telegram

Vorab, das ist alles noch Beta und ich finde die normalen Keyboards besser :D

Um eine Nachricht bei Telegram zu verändern gibt es den Befehl "queryEditInline".
Dafür wird aber die MsgId von der Nachricht benötigt. Also erstmal ein notify, welches die msgId pro Peer abspeichert.
Raw definition:

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


Dann müssen wir aus dem "set <TelegramBot> message" noch das "set <TelegramBot> queryEditInline" machen.
Dafür ein cmdAlias:
Raw definition:

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


Warum mir das ganze nicht gefällt:
1. Die inlineKeyboards sind immer nur so Breit wie die Nachricht. Im Video sieht man das an der Einkaufsliste. "Waren hinzufügen" ist nicht komplett ausgeschrieben
2. Die inlineKeyboars können lang sein, man muss also immer scrollen. Normale Keyboards sind nur so groß wie die normale Tastatur
3. Wenn eine Nachricht geändert wird ist es keine neue Nachricht und man erhält keine Benachrichtigung darüber. Aktuell ist es so, dass die letzte ID nur im meta_Dialog gelöscht wird. Bekomme ich nun zwischendurch eine Nachricht wie: "Die Waschmaschine ist fertig" Bekomme ich das nicht mit, da es keine neue Nachricht ist.

Warum das ganze aber doch was hat:
1. Im Beleuchtungs-Dialog sieht man sehr schön, wie sich nur der Prozentwert in der Nachricht ändert, ohne dass man eine Wall-of-Text bekommt.
2. Man kann andere Texte anzeigen als gesendet werden.

Man müsste den cmdAlias also so umbauen, dass er am besten nur einen Befehl "set <TelegramBot> message @<Peer> queryInline" ändert.
Das ganze ist aber sehr Telegram Spezifisch und ich weiß nicht was die Mehrheit hier im Forum für IM nutzt. Das Modul sollte ja auch mit Jabber und Whatsapp funktionieren.

Ich werde meine Dialoge aber wieder auf das normale Keyboard umstellen und erst noch weiter damit experimentieren.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 01 Oktober 2017, 11:36:58
Hier noch ein Video mit normalem Keyboard: https://youtu.be/yiCOTeR1YVQ
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 01 Oktober 2017, 14:16:04
Hi igami,
wenn ich hier
ZitatNun aber weiter zum Dialog. In die DEF schreibe ich nun folgenden:
deinen Code einfüge bekomme ich folgenden Fehler:
Usage: define <name> msgDialog {JSON}
libjson-perl ist natürlich installiert. Sonst käme laut deinem Modul-Code ja auch ein anderer Fehler...
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 01 Oktober 2017, 14:19:45
Zitat von: binford6000 am 01 Oktober 2017, 14:16:04
Hi igami,
wenn ich hier  deinen Code einfüge bekomme ich folgenden Fehler:
Usage: define <name> msgDialog {JSON}
libjson-perl ist natürlich installiert. Sonst käme laut deinem Modul-Code ja auch ein anderer Fehler...
VG Sebastian
Habe das grad selbt noch mal getestet und bekomme keinen Fehler. Hast du vielleicht vergessen eine Klammer mit zu nehmen?
Ansonsten lässt sich das auch super mit https://jsonlint.com/ überprüfen und ggf. aufzeigen wo ein Fehler ist.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 01 Oktober 2017, 15:39:10
ZitatHast du vielleicht vergessen eine Klammer mit zu nehmen?
Habe deinen Code kopiert. JSONLint sagt der Code sei OK. Aber weder
define Waschmaschine_Dialog msgDialog {} und dann über DEF den Code einfügen noch
das Ganze per defmod und Raw definition anzulegen funktioniert und liefern beide den gleichen Fehler...
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 01 Oktober 2017, 15:55:51
Änder die Zeile 87 doch mal bitte zu

    return("Usage: define <name> $TYPE {JSON}\n\n$@");

Dann bekommst du ja auch den Fehler zu sehen. Das werde ich auch erstmal noch als Logging einbauen :D
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 01 Oktober 2017, 16:12:20
OK, dann bekomme ich:
Usage: define <name> msgDialog {JSON}
illegal backslash escape sequence in string, at character offset 714 (before "\\) ",\n        "Das...") at ./FHEM/76_msgDialog.pm line 84.

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 01 Oktober 2017, 16:40:03
Aber das ist ja nicht der Fehler, der bei

define Waschmaschine_Dialog msgDialog {}

kommt, oder? ;)

Guck mal in die evalSpecials von deinem msgConfig device, da steht bestimmt ein \ drin
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 01 Oktober 2017, 17:03:58
Bei define Waschmaschine_Dialog msgDialog {} kommt ja auch kein Fehler.
Das device wird angelegt. Nur wenn ich die Klammern mit deinem Code befülle mag er nicht.

ZitatGuck mal in die evalSpecials von deinem msgConfig device, da steht bestimmt ein \ drin
Da habe ich 1:1 das hier eingebaut:
attr myMsgConfig evalSpecials me=kanaan\
TelegramBot=TelegramBot

Ich wollte erstmal alles 1:1 übernehmen um dann Anpassungen vorzunehmen. Aber soweit komme ich ja gar nicht...
Hier mal die beiden devices:

Internals:
   NAME       globalMsg
   NR         139
   STATE      1
   TYPE       msgConfig
   READINGS:
     2017-10-01 14:00:04   fhemMsgAudio    Steigender Luftdruck! Aktuell: 1024 hPa.
     2017-10-01 14:00:04   fhemMsgAudioGw  Sonos_Kueche:OK
     2017-10-01 14:00:04   fhemMsgAudioPrio 0
     2017-10-01 14:00:04   fhemMsgAudioState 1
     2017-10-01 14:00:04   fhemMsgAudioTitle -
     2017-10-01 14:57:43   fhemMsgPushGw    fhemBot:OK
     2017-10-01 14:57:43   fhemMsgPushPrio 0
     2017-10-01 14:57:43   fhemMsgPushState 1
     2017-10-01 14:57:43   fhemMsgPushTitle -
     2017-10-01 14:57:43   fhemMsgState    1
     2017-10-01 14:57:43   fhemMsgStateTypes push:1 forwards:text>push
Attributes:
   comment    FHEM Global Configuration for command 'msg'
   evalSpecials me=kanaan\
TelegramBot=TelegramBot
   group      Global
   icon       rc_SETUP
   msgContactAudio Sonos_Kueche
   msgContactLight Flur
   msgContactPush fhemBot
   msgContactScreen KODI
   msgFwPrioGoneAudio -2
   msgResidentsDev rgr_AufderDahl
   msgTitleAudio jingle
   msgType    text
   room       90_System
   stateFormat fhemMsgState
   userattr   evalSpecials:textField-long
   verbose    0



Internals:
   CFGFN
   DEF        {}
   NAME       Waschmaschine_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         3523
   NTFY_ORDER 50-Waschmaschine_Dialog
   STATE      Initialized
   TRIGGER
   TYPE       msgDialog
   READINGS:
     2017-10-01 16:04:16   state           Initialized
Attributes:
   room       msg
   verbose    5

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 01 Oktober 2017, 17:07:01
Zitat von: binford6000 am 01 Oktober 2017, 17:03:58
Bei define Waschmaschine_Dialog msgDialog {} kommt ja auch kein Fehler.
Das device wird angelegt. Nur wenn ich die Klammern mit deinem Code befülle mag er nicht.
Da habe ich 1:1 das hier eingebaut:
attr myMsgConfig evalSpecials me=kanaan\
TelegramBot=TelegramBot

Ich wollte erstmal alles 1:1 übernehmen um dann Anpassungen vorzunehmen. Aber soweit komme ich ja gar nicht...
Deswegen steht extra dabei, dass es Raw definition ist ;)
Im Attribut selbst steht nämlich nur

me=kanaan
TelegramBot=TelegramBot

Einfach anpassen und dann gehts.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 01 Oktober 2017, 18:15:17
ZitatEinfach anpassen und dann gehts.
Jep, danke für deinen support!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 01 Oktober 2017, 18:21:19
Zitat von: binford6000 am 01 Oktober 2017, 18:15:17
Jep, danke für deinen support!
Du kannst dich einfach revangieren in dem du das mit Whatsapp testest :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 01 Oktober 2017, 19:14:27
ZitatDu kannst dich einfach revangieren in dem du das mit Whatsapp testest :)
Würde ich gerne machen aber habe yowsup rausgeschmissen und mich auf Telegram festgelegt.
U.a. wegen der einfacheren Integration und der Inline Tastatur...
Ich werde mich mal an meine eigenen Dialoge wagen und den Thread weiterhin aufmerksam verfolgen.
Vielleicht kann ich mich ja an anderer Stelle mal revanchieren  ;)
Danke und VG, Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 02 Oktober 2017, 13:05:51
Hallo.
Bei mir kommt immer die Meldung: Modul kann nicht geladen werden.
Habe es ins richtige Verzeichnis geladen und FHEM neu gestartet.
Woran kann das liegen?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 02 Oktober 2017, 13:12:58
Zitat von: ErzGabriel am 02 Oktober 2017, 13:05:51
Hallo.
Bei mir kommt immer die Meldung: Modul kann nicht geladen werden.
Habe es ins richtige Verzeichnis geladen und FHEM neu gestartet.
Woran kann das liegen?
Was bekommst du denn genau für eine Meldung? Ich könnte mir nur vorstellen, dass die Perl Module utf8 oder JSON nicht installiert sind.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 02 Oktober 2017, 15:26:26
Versuche ich einen Dialog einzurichten, kommt nur:
Cannot load modul msgDialog
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 02 Oktober 2017, 15:28:11
Wo hast du es denn hin kopiert?

Edit: Daran kann es nicht liegen, sonst käme "Unknown module msgDialog"
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 02 Oktober 2017, 17:05:12
Versuch mal bitte die Version hier aus dem Anhang.
Kannst du mal bitte die gesamte Fehlermeldung aus dem Log posten?

Wer heute schon ein update vom msgConfig gemacht hat braucht mit der neuen Version das notify nicht mehr :)
In der neuen Version ist auch eine Commandref enthalten. Bitte nach dem speichern FHEM neustarten.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 02 Oktober 2017, 18:29:02
Kopiert habe ich es, ins Verzeichnis:
/fhem/FHEM
Da liegen ja auch alle anderen Dateien.

Fehlermeldung mit der neuen Version, der Datei:
2017.10.02 18:26:52 1: reload: Error:Modul 76_msgDialog deactivated:
Too many arguments for main::parseParams at ./FHEM/76_msgDialog.pm line 336, near "" ")"

2017.10.02 18:26:52 0: Too many arguments for main::parseParams at ./FHEM/76_msgDialog.pm line 336, near "" ")"
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 02 Oktober 2017, 18:30:36
Aha, da steht also doch noch mehr ;)
Ist dein FHEM aktuell?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 02 Oktober 2017, 18:38:14
Nein, ist nicht die aktuellste Version. Ist Version 5.6 mit ein paar PM-Dateien geupdatet.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 02 Oktober 2017, 19:58:24
Hi, habe meinen ersten kleinen lauffähigen Dialog gebaut. Nur wird das "Menü" - also "Einschalten, "Ausschalten" und "abbrechen" nur als normale Textnachricht angezeigt. Bei Eingabe von "Einschalten", "Ausschalten" oder "abbrechen" wird der Dialog korrekt ausgeführt und landet danach wieder im Hauptmenü. Woran kann das liegen?

{"Flur":{
  "message": [
    "(Einschalten)",
    "(Ausschalten)",
    "(abbrechen)"
  ],
  "Einschalten":{
  "commands": "set fl_sw_1 on",
  "message":[
    "(%me%) ",
    "Die Lampe im Flur wurde eingeschaltet."
  ]
  },
  "Ausschalten":{
  "commands": "set fl_sw_1 off",
  "message":[
    "(%me%) ",
    "Die Lampe im Flur wurde ausgeschaltet."
  ]
  }
}
}

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 03 Oktober 2017, 01:01:39
ParseParams ist noch nicht sooo alt, da ist dann ein Update fällig.


Zu einem Keyboard Gehört auch immer eine  normale Nachricht.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 03 Oktober 2017, 07:58:55
Schade, dann kann ich es nicht nutzen, weil ein Update mache ich nicht.
Beim letzten Versuch des Updates auf die aktuelle Version lief meine Ha_bridge nicht mehr und ich habe sie auch nicht mehr zum laufen bekommen.
Danke für Deine Hilfe.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 03 Oktober 2017, 08:38:19
Du könntest in fhem.pl die sub updaten

sub parseParams($;$$);


sub
parseParams($;$$)
{
  my($cmd, $separator, $joiner) = @_;
  $separator = ' ' if(!$separator);
  $joiner = $separator if(!$joiner); # needed if separator is a regexp
  my(@a, %h);

  my @params;
  if( ref($cmd) eq 'ARRAY' ) {
    @params = @{$cmd};
  } else {
    @params = split($separator, $cmd);
  }

  while (@params) {
    my $param = shift(@params);
    next if($param eq "");
    my ($key, $value) = split( '=', $param, 2 );

    if( !defined( $value ) ) {
      $value = $key;
      $key = undef;

    # the key can not start with a { -> it must be a perl expression # vim:}
    } elsif( $key =~ m/^\s*{/ ) { # for vim: }
      $value = $param;
      $key = undef;
    }

    #collect all parts until the closing ' or "
    while( $param && $value =~ m/^('|")/ && $value !~ m/$1$/ ) {
      my $next = shift(@params);
      last if( !defined($next) );
      $value .= $joiner . $next;
    }
    #remove matching ' or " from the start and end
    if( $value =~ m/^('|")/ && $value =~ m/$1$/ ) {
      $value =~ s/^.(.*).$/$1/;
    }

    #collect all parts until opening { and closing } are matched
    if( $value =~ m/^\s*{/ ) { # } for match
      my $count = 0;
      for my $i (0..length($value)-1) {
        my $c = substr($value, $i, 1);
        ++$count if( $c eq '{' );
        --$count if( $c eq '}' );
      }

      while( $param && $count != 0 ) {
        my $next = shift(@params);
        last if( !defined($next) );
        $value .= $joiner . $next;

        for my $i (0..length($next)-1) {
          my $c = substr($next, $i, 1);
          ++$count if( $c eq '{' );
          --$count if( $c eq '}' );
        }
      }
    }

    if( defined($key) ) {
      $h{$key} = $value;
    } else {
      push @a, $value;
    }

  }
  return(\@a, \%h);
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 03 Oktober 2017, 09:17:51
Hat geklappt. Danke.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 03 Oktober 2017, 09:49:27
Zitat von: binford6000 am 02 Oktober 2017, 19:58:24
Hi, habe meinen ersten kleinen lauffähigen Dialog gebaut. Nur wird das "Menü" - also "Einschalten, "Ausschalten" und "abbrechen" nur als normale Textnachricht angezeigt. Bei Eingabe von "Einschalten", "Ausschalten" oder "abbrechen" wird der Dialog korrekt ausgeführt und landet danach wieder im Hauptmenü. Woran kann das liegen?

{"Flur":{
  "message": [
    "(Einschalten)",
    "(Ausschalten)",
    "(abbrechen)"
  ],
  "Einschalten":{
  "commands": "set fl_sw_1 on",
  "message":[
    "(%me%) ",
    "Die Lampe im Flur wurde eingeschaltet."
  ]
  },
  "Ausschalten":{
  "commands": "set fl_sw_1 off",
  "message":[
    "(%me%) ",
    "Die Lampe im Flur wurde ausgeschaltet."
  ]
  }
}
}

VG Sebastian
Du könntest für fl_sw_1 auch noch einen Platzhalter, z.B. %actor%, ersetzen, dann ist es nachher einfacher wenn man den Dialog für andere Räume kopierst ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 03 Oktober 2017, 10:57:01
ZitatDu könntest für fl_sw_1 auch noch einen Platzhalter, z.B. %actor%, ersetzen, dann ist es nachher einfacher wenn man den Dialog für andere Räume kopierst ;)
Hab ich schon gesehen, aber eins nach dem anderen...  ;) Die bedingte Anzeige steht auch auf dem ToDo:
"{return('(Einschalten) ') if(ReadingsVal('%controlUnit%', 'state', '') eq off')}",
ZitatZu einem Keyboard Gehört auch immer eine  normale Nachricht.
Hab jetzt eine normale Nachricht dazugeschrieben und schwupps funktionierts  :)
{"Flur":{
  "message": [
    "(Einschalten) ",
    "(Ausschalten) ",
    "(abbrechen) ",
    "Bitte auswählen:"
  ],

Danke und noch einen schönen Feiertag!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 03 Oktober 2017, 11:57:16
Ich bräuchte nochmals Hilfe, bin zu blöde den Fehler zu finden.
Wollte als Test erstmal den Waschmaschinen Dialog anlegen.
define Waschmaschine_Dialog msgDialog {}
Klappt ohne Probleme.

Füge ich dann den Code in die def ein, kommt folgendes beim speichern:
Usage: define <name> msgDialog {JSON}

illegal backslash escape sequence in string, at character offset 714 (before "\\) ",\n        "Das...") at ./FHEM/76_msgDialog.pm line 85.


Und da will mir nicht in den Kopf warum, habe mir den Thread mittlerweile mehrmals durch gelesen aber ich sehe meinen Fehler nicht.
Habe die Zeile:
attr myMsgConfig evalSpecials me=kanaan\
TelegramBot=TelegramBot

mit meinen Daten angepasst.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 03 Oktober 2017, 12:00:40
attr myMsgConfig evalSpecials me=kanaan\
Hast Du auch den Backslash entfernt? Da bin ich auch drübergestolpert...
Sieht bei mir zB. so aus:
me=Q
TelegramBot=fhemBot

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 03 Oktober 2017, 12:07:04
Zitat von: ErzGabriel am 03 Oktober 2017, 11:57:16
Habe die Zeile:
attr myMsgConfig evalSpecials me=kanaan\
TelegramBot=TelegramBot

mit meinen Daten angepasst.
Sind ja auch zwei Zeilen und der \ steht in der Raw definition für den Zeilenumbruch ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 03 Oktober 2017, 13:05:53
Alles klar, gleiche Stelle gefallen, der Backslash.  ::)

Danke euch.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 03 Oktober 2017, 17:12:44
Hi.
Leute, ich stell mich zu dämlich an. Ich habe die ersten Dialoge definiert aber kriege vom Bot keine Antwort.
In myMsgConfig:
evalSpecials me=Marcus
TelegramBot=Jarvis_RPibot


In Residents rr_Marcus
msgContactPush Jarvis:@Jarvis_RPibot

Zum testen habe ich den Dialog Waschmaschine übernommen. Schicke ich jetzt per Telegram an den Bot: Waschmaschine, wird der Text in Fhem angezeigt aber vom Bot kommt keine Antwort.
Ich habe jetzt auch sämtliche Kombinationen ausprobiert, die mir einfallen, ich wüsste nicht mehr, wo jetzt noch was falsch ist.
Sorry, aber ich bräuchte nochmal Eure Hilfe.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 03 Oktober 2017, 17:17:29
Zitat von: ErzGabriel am 03 Oktober 2017, 17:12:44
Hi.
Leute, ich stell mich zu dämlich an. Ich habe die ersten Dialoge definiert aber kriege vom Bot keine Antwort.
In myMsgConfig:
evalSpecials me=Marcus
TelegramBot=Jarvis_RPibot


In Residents rr_Marcus
msgContactPush Jarvis:@Jarvis_RPibot

Zum testen habe ich den Dialog Waschmaschine übernommen. Schicke ich jetzt per Telegram an den Bot: Waschmaschine, wird der Text in Fhem angezeigt aber vom Bot kommt keine Antwort.
Ich habe jetzt auch sämtliche Kombinationen ausprobiert, die mir einfallen, ich wüsste nicht mehr, wo jetzt noch was falsch ist.
Sorry, aber ich bräuchte nochmal Eure Hilfe.
das msgContactPush Attribut ist falsch definiert.
Es muss sein

msgContactPush Jarvis_RPibot:@<PeerId>

Dann sollte im rr_Marcus auch ein neues Reading auftauchen in dem deine Nachricht steht.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 03 Oktober 2017, 20:02:55
Habe es jetzt mit Jarvis_RPibot und Jarvis probiert, keines bringt den gewünschten Erfolg.
Die me Zeile im Bot, sieht wie folgt aus:
me 428936987:Jarvis:@Jarvis_RPibot

Vermute, das ich da noch was falsch mache.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 03 Oktober 2017, 20:07:11
Es muss sein:

<NAME des TelegramBot Device>:@<deine Telegram ID>

Ich vermute, dass du da was durcheinander bringst. Wenn du magst kannst du mir ein List von deinem TelegramBot per PM schicken, dann kann ich es dir genau sagen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 03 Oktober 2017, 22:03:17
Zitat von: igami am 02 Oktober 2017, 17:05:12
Versuch mal bitte die Version hier aus dem Anhang.
...
Wer heute schon ein update vom msgConfig gemacht hat braucht mit der neuen Version das notify nicht mehr :)

Hey,
Ich verwende die zweite Version (aus dem Zitat) und bekomme die normale Keyboards zum laufen, nicht aber die inline. Würde die wieder deaktiviert oder hab ich was übersehen?

Elche notify wird mit dem Update der msgConfig nicht mehr benötigt?

PS: nutze auch Telegram.

Gruß Dominik
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 04 Oktober 2017, 06:20:24


Zitat von: Flipper92 am 03 Oktober 2017, 22:03:17
Hey,
Ich verwende die zweite Version (aus dem Zitat) und bekomme die normale Keyboards zum laufen, nicht aber die inline. Würde die wieder deaktiviert oder hab ich was übersehen?

Elche notify wird mit dem Update der msgConfig nicht mehr benötigt?

PS: nutze auch Telegram.

Gruß Dominik

Für inline brauchst du noch den cmdalias den ich weiter vorne gepostet habe. Ich persönlich finde die normalen Keyboards angenehmer.

Mit dem Update von msgConfig braucht man das msgPushReceived notify nicht mehr.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 04 Oktober 2017, 10:02:57
Zitat von: igami am 04 Oktober 2017, 06:20:24
Für inline brauchst du noch den cmdalias den ich weiter vorne gepostet habe. Ich persönlich finde die normalen Keyboards angenehmer.

Grad den halben Text gelöscht :-) Da es beim nächsten Test doch funktioniert hat mit dem inline.

Woran kann es liegen, das Waschmaschine funktioniert, aber kanaan nicht.
abbrechen funktioniert bei mir auch nicht.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 04 Oktober 2017, 10:06:25
Kein allowed gesetzt?
Am besten Mal ein list posten, dann kann ich gucken
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Andy89 am 04 Oktober 2017, 21:49:23
Guten Tag,
ich bin heute auch auf Telegram umgestiegen und hab direkt dieses coole Modul gefunden. Normale Nachrichten, Fotos etc kann ich senden, jedoch bekomme ich das mit dem Menü gar nicht hin. Egal was ich an den Bot schreibe, es kommt kein Menü. Vielleicht findet ja jemand den Fehler...

hier ein list von telegramBot:
Internals:
   FAILS      0
   NAME       telegramBot
   NR         1547
   OLD_POLLING 183
   POLLING    183
   SNAME      telegramBot
   STATE      Polling
   TYPE       TelegramBot
   UPDATER    0
   WAIT       0
   me         460***817:A***Bot:@A***Bot
   offset_id  688***981
   sentLastResult SUCCESS
   sentMsgId  134
   sentMsgOptions
   sentMsgPeer Andy****
   sentMsgPeerId 158***404
   sentMsgResult SUCCESS
   sentMsgText test
   AliasCmds:
   Contacts:
     158***404  158***404:Andy****:@Andreas*****
   HU_DO_PARAMS:
     NAME
     addr       https://api.telegram.org:443
     boundary   TelegramBot_boundary-x0123
     buf
     code       200
     conn
     data
     displayurl <hidden>
     header     agent: TelegramBot/1.0

User-Agent: TelegramBot/1.0

Accept: application/json

Accept-Charset: utf-8

Content-Type: multipart/form-data; boundary=TelegramBot_boundary-x0123
     hideurl    1
     host       api.telegram.org
     httpheader HTTP/1.1 200 OK

Server: nginx/1.10.0

Date: Wed, 04 Oct 2017 09:57:21 GMT

Content-Type: application/json

Content-Length: 259

Connection: close

Access-Control-Allow-Origin: *

Access-Control-Allow-Methods: GET, POST, OPTIONS

Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection

Strict-Transport-Security: max-age=31536000; includeSubdomains
     hu_blocking 0
     hu_filecount 38
     hu_port    443
     hu_portSfx
     loglevel   4
     method     POST
     path       /bot460***817:AA***x8/sendMessage
     protocol   https
     redirects  0
     timeout    30
     url        https://api.telegram.org/bot460***817:AA***x8/sendMessage
     args:
       @Andreas*****
       test
       undef
       0
       undef
       undef
       1
     hash:
     sslargs:
   HU_UPD_PARAMS:
     FD         53
     NAME
     addr       https://api.telegram.org:443
     buf
     code       200
     displayurl <hidden>
     header     agent: TelegramBot/1.0

User-Agent: TelegramBot/1.0

Accept: application/json

Accept-Charset: utf-8
     hideurl    1
     host       api.telegram.org
     hu_blocking 0
     hu_filecount 182
     hu_port    443
     hu_portSfx
     isPolling  update
     loglevel   4
     method     GET
     offset     688***981
     path       /bot460***817:AA***x8/getUpdates?offset=688***981&limit=5&timeout=120
     protocol   https
     redirects  0
     timeout    245
     url        https://api.telegram.org/bot460***817:AA***x8/getUpdates?offset=688***981&limit=5&timeout=120
     hash:
     sslargs:
   READINGS:
     2017-10-04 08:52:24   Contacts        158***404:Andy****:@Andreas*****
     2017-10-04 08:46:32   PollingErrCount 0
     2017-10-04 11:52:21   StoredCommands  fhem

     2017-10-04 11:57:48   fhemMsgRcvPush  Flur
     2017-10-04 11:57:48   fhemMsgRcvPushGw telegramBot
     2017-10-04 11:57:48   msgChat         Andy****
     2017-10-04 11:57:48   msgChatId       158***404
     2017-10-04 11:57:48   msgFileId
     2017-10-04 11:57:48   msgId           135
     2017-10-04 11:57:48   msgPeer         Andy****
     2017-10-04 11:57:48   msgPeerId       158***404
     2017-10-04 11:57:48   msgReplyMsgId
     2017-10-04 11:57:48   msgText         Flur
     2017-10-04 11:57:48   prevMsgChat     Andy****
     2017-10-04 11:57:48   prevMsgFileId
     2017-10-04 11:57:48   prevMsgId       133
     2017-10-04 11:57:48   prevMsgPeer     Andy****
     2017-10-04 11:57:48   prevMsgPeerId   158***404
     2017-10-04 11:57:48   prevMsgReplyMsgId
     2017-10-04 11:57:48   prevMsgText     test
     2017-10-04 11:52:05   queryData       TBOT_FAVORITE_CANCEL
     2017-10-04 11:52:05   queryID         680419048323465712
     2017-10-04 11:52:05   queryPeer       Andy****
     2017-10-04 11:52:05   queryPeerId     158***404
     2017-10-04 11:52:05   queryReplyMsgId 127
     2017-10-04 11:57:21   sentMsgId       134
     2017-10-04 11:57:21   sentMsgPeerId   158***404
     2017-10-04 11:57:21   sentMsgResult   SUCCESS
   inlinechats:
   sentQueue:
Attributes:
   DbLogExclude .*
   allowUnknownContacts 0
   cmdFavorites /cmd
   cmdKeyword fhem
   cmdRestrictedPeer 158***404
   defaultPeer @Andreas*****
   event-on-change-reading .*
   favorites  /[-Flur Cam Bild] = set FZ_CAM_IT on;; sleep 65;; get cam_tuer image;
/[-Flur Cam aus] = set FZ_CAM_IT off
   favoritesInline 1
   msgContactPush telegramBot:@158***404
   pollingTimeout 120
   room       z_Module
   utf8Special 1


hier ein gekürztes list vom residents-device:
Internals:
   .eventMapCmd zuhause:noArg abwesend:noArg verreist:noArg bettfertig:noArg schläft:noArg aufgestanden:noArg
   DEF        rgr_Residents
   NAME       rr_Andy
   NOTIFYDEV  global,rr_Andy_wakeuptimer1,rr_Andy_wakeuptimer2
   NR         823
   NTFY_ORDER 50-rr_Andy
   READY      1
   RESIDENTGROUPS rgr_Residents
   STATE      zuhause
   TYPE       ROOMMATE
   READINGS:
     2017-10-04 11:55:47   fhemMsgPush     (Please define first) (abbrechen) Ich kann folgendes für dich tun:
     2017-10-04 11:55:47   fhemMsgPushGw    telegramBot:@Andreas***:ERROR
     2017-10-04 11:55:47   fhemMsgPushPrio 0
     2017-10-04 11:55:47   fhemMsgPushState 0
     2017-10-04 11:55:47   fhemMsgPushTitle -
     2017-10-04 12:06:50   fhemMsgRcvPush  Flur
     2017-10-04 12:06:50   fhemMsgRcvPushGw telegramBot
     2017-10-04 11:55:47   fhemMsgState    0
     2017-10-04 11:55:47   fhemMsgStateTypes push:0
     2017-07-29 19:00:58   lastArrival     2017-07-29 19:00:58
   TIMER:
Attributes:
  event-on-change-reading .* 
   msgContactPush telegramBot:@158***404


hier ein list vom msgConfig device:
Internals:
   CFGFN
   NAME       myMsgConfig
   NOTIFYDEV  TYPE=(Jabber|TelegramBot|yowsup)
   NR         4308
   NTFY_ORDER 50-myMsgConfig
   STATE      1
   TYPE       msgConfig
   Helper:
     DBLOG:
       fhemMsgState:
         logdb:
           TIME       1507107692.41934
           VALUE      initialized
   READINGS:
     2017-10-04 11:17:53   fhemMsgPush     @ (andy)
Die Wachmaschine ist fertig.
     2017-10-04 11:17:53   fhemMsgPushGw    telegramBot:OK
     2017-10-04 11:17:53   fhemMsgPushPrio 0
     2017-10-04 11:17:53   fhemMsgPushState 1
     2017-10-04 11:17:53   fhemMsgPushTitle -
     2017-10-04 11:17:53   fhemMsgState    1
     2017-10-04 11:17:53   fhemMsgStateTypes push:1
Attributes:
   DbLogExclude .*
   comment    FHEM Global Configuration for command 'msg'
   evalSpecials me=rr_Andy
TelegramBot=telegramBot
   event-on-change-reading .*
   group      Global
   msgContactPush telegramBot
   msgType    text
   room       msg,z_Module
   stateFormat fhemMsgState
   userattr   evalSpecials:textField-long
   verbose    3


und natürlich gibts auch den cmdalias für die inlines:
Internals:
   ALIAS      set
   CFGFN
   DEF        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");
  }
}
   NAME       message2queryEditInline
   NEWCMD     {
  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");
  }
}
   NR         4879
   PARAM      .+ message (.|\n)+
   STATE      defined
   TYPE       cmdalias
Attributes:
   DbLogExclude .*
   room       msg
   verbose    5


und dann noch ein list von Test Menü:
Internals:
   CFGFN
   CHANGED
   DEF        {"Flur":{
  "message": [
    "(Einschalten)",
    "(Ausschalten)",
    "(abbrechen) "
  ],
  "Einschalten":{
  "commands": "set %actor% on",
  "message":[
    "(%me%) ",
    "Die Lampe im Flur wurde eingeschaltet."
  ]
  },
  "Ausschalten":{
  "commands": "set %actor% off",
  "message":[
    "(%me%) ",
    "Die Lampe im Flur wurde ausgeschaltet."
  ]
  }
}
}
   NAME       Flur_dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         6127
   NTFY_ORDER 50-Flur_dialog
   STATE      rr_Andy: Flur
   TRIGGER    Flur
   TYPE       msgDialog
   Helper:
     DBLOG:
       state:
         logdb:
           TIME       1507110062.74787
           VALUE      Initialized
   READINGS:
     2017-10-04 13:02:58   everyone_history Flur
     2017-10-04 13:42:16   rr_Andy_history Flur
     2017-10-04 13:42:16   state           rr_Andy: Flur
Attributes:
   DbLogExclude .*
   allowed    rr_Andy
   evalSpecials actor=FZ_Deckenlampe
   event-on-change-reading .*
   room       msg


leider finde ich den Fehler nicht. Vielleicht hatte jemand ja das gleiche.
Liegt es evtl an den Favoriten im telegramBot, die auch commands erlauben?

hmmm ??? ???
Danke schon mal für die Hilfe.

Beste Grüße
Andy
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 04 Oktober 2017, 22:17:32
Zitat von: igami am 04 Oktober 2017, 10:06:25
Kein allowed gesetzt?

Ups. Das wars.

Hab aber nun auch ein Punkt wo ich nicht weiter komme.
Hab die Waschmaschinen Timer mal für eine Heizung ummoduliert.
Aktuell sieht es so aus (komplett)
{ "Heizung": {
      "message": [
        "(bestätigen|abbrechen) ",
        "(aus:04.5|5°C:05.0|6°C:06.0|7°C:07.0) ",
"(8°C:08.0|9°C:09.0|10°C:10.0|11°C:11.0) ",
"(12°C:12.0|13°C:13.0|14°C:14.0|15°C:15.0) ",
"(15.5°C:15.5|16°C:16.0|16.5°C:16.5|17°C:17.0) ",
"(17.5°C:17.5|18°C:18.0|18.5°C:18.5|19°C:19.0) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
"(27°C:27|28°C:28|29°C:29|voll:29.5) ",
        "Aktuell ist [Wohnzimmer.Thermostat:desiredTemperature] eingestellt.",
"Treffen Sie das Setup."
      ],
      "Setup": {
        "match": "[0-2][0-9][:.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';; fhem(\"set Wohnzimmer.Thermostat desiredTemperature $temperatur\");;}",
          "set $SELF say @$recipient Waschmaschine|programmieren|bestätigen"
        ]
}
    }
}


Tastatur geht auf, aber es geht nicht weiter wenn ich eine Temperatur auswähle.

Grüße
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Andy89 am 04 Oktober 2017, 22:19:35
ich hab nun einen Erfolg... ich hatte nicht die neuste Version  ??? ??? ???
hab den Thread zwar mehrfach gelesen, aber dennoch hatte ich nicht die aktuellste Version genommen  :-X :-X :-X :-X
nun kommen immerhin schon die Menüs richtig an  ;D

so nun kann ich auch drauf reagieren. Was mir aufgefallen ist, da bei mir im "Flur" erstmal nichts anklickbar war, ist dass hinter einem Befehl in Klammern zwingend ein Leerzeichen vorhanden sein muss:

defmod Flur_dialog msgDialog {"Flur":{\
  "message": [\
    "(Einschalten) ",\
    "(Ausschalten) ",\
    "(abbrechen) ",\
"{return('Lampe: ' . (ReadingsVal('%actor%', 'state', '') eq 'on' ? 'eingeschaltet' : 'ausgeschaltet'))}"\
  ],\
  "Einschalten":{\
  "commands": "set %actor% on",\
  "message":[\
    "(%me%) ",\
    "Die Lampe im Flur wurde eingeschaltet."\
  ]\
  },\
  "Ausschalten":{\
  "commands": "set %actor% off",\
  "message":[\
    "(%me%) ",\
    "Die Lampe im Flur wurde ausgeschaltet."\
  ]\
  }\
}\
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 05 Oktober 2017, 08:52:21
Hallo Zusammen,
ich habe mal versucht, meine Lampen und Lightscenes in einen Dialog zu gießen.
Der Dialog lässt sich komplett navigieren und die Menüeinträge sind auch dynamisch.  :D

Aber leider schaltet keines der commands! Im Log ist auch nichts zu finden (auch Verbose 5)
Der Dialog bleibt einfach dort stehen. Die dazugehörige Nachricht wir auch nicht versendet.  :(

Picke ich mir eine Lampe heraus
und baue daraus einen Minidialog wird das command auch ausgeführt und das device korrekt geschaltet  ???
{"Beleuchtung":{
  "message": [
    "(Szenen) ",
    "(Lampen einschalten) ",
    "(Lampen ausschalten) ",
    "(abbrechen) ",
"Szenen einstellen oder Lampen schalten:"
  ],
  "Szenen":{
  "message":[
    "{return('(abwesend einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'abwesend')}",
"{return('(anwesend einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'anwesend')}",
"{return('(anwesend_alle einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'anwesend_alle')}",
"{return('(anwesend_alle_farbe einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'anwesend_alle_farbe')}",
"{return('(schlafen einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'schlafen')}",
"{return('(kino einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'kino')}",
"(abbrechen) ",
"Welche Lichtszene soll aktiviert werden?"
  ]
  },
  "abwesend einschalten":{
  "commands": "set Standard.LS scene abwesend",
  "message":[
    "(%me%) ",
    "Die Szene abwesend wurde aktiviert."
  ]
  },
  "anwesend einschalten":{
  "commands": "set Standard.LS scene anwesend",
  "message":[
    "(%me%) ",
    "Die Szene anwesend wurde aktiviert."
  ]
  },
  "anwesend_alle einschalten":{
  "commands": "set Standard.LS scene anwesend_alle",
  "message":[
    "(%me%) ",
    "Die Szene anwesend_alle wurde aktiviert."
  ]
  },
  "anwesend_alle_farbe einschalten":{
  "commands": "set Standard.LS scene anwesend_alle_farbe",
  "message":[
    "(%me%) ",
    "Die Szene anwesend_alle_farbe wurde aktiviert."
  ]
  },
  "schlafen einschalten":{
  "commands": "set Standard.LS scene schlafen",
  "message":[
    "(%me%) ",
    "Die Szene schlafen wurde aktiviert."
  ]
  },
  "kino einschalten":{
  "commands": "set Standard.LS scene kino",
  "message":[
    "(%me%) ",
    "Die Szene kino wurde aktiviert."
  ]
  },
  "Lampen einschalten":{
  "message":[
    "{return('(Flur einschalten) ') if(ReadingsVal('fl_sw_1', 'state', '') eq 'off')}",
"{return('(Kueche einschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') eq 'off')}",
"{return('(Schlafzimmer einschalten) ') if(ReadingsVal('sz_col_1', 'state', '') eq 'off')}",
"(abbrechen) ",
"Welche Lampe soll eingeschaltet werden?"
  ]
  },
  "Flur einschalten":{
  "commands": "set fl_sw_1 on",
  "message":[
    "(%me%) ",
    "Die Lampe im Flur wurde eingeschaltet."
  ]
  },
  "Kueche einschalten":{
  "commands": "set SteckdoseIT2 on",
  "message":[
    "(%me%) ",
    "Die Lampe in der Kueche wurde eingeschaltet."
  ]
  },
  "Schlafzimmer einschalten":{
  "commands": "set sz_col_1 on",
  "message":[
    "(%me%) ",
    "Die Lampe im Schlafzimmer wurde eingeschaltet."
  ]
  },
  "Lampen ausschalten":{
  "message":[
    "{return('(Flur ausschalten) ') if(ReadingsVal('fl_sw_1', 'state', '') ne 'off')}",
"{return('(Kueche ausschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') ne 'off')}",
"{return('(Schlafzimmer ausschalten) ') if(ReadingsVal('sz_col_1', 'state', '') ne 'off')}",
"(abbrechen) ",
"Welche Lampe soll ausgeschaltet werden?"
  ]
  },
  "Flur ausschalten":{
  "commands": "set fl_sw_1 off",
  "message":[
    "(%me%) ",
    "Die Lampe im Flur wurde ausgeschaltet."
  ]
  },
  "Kueche ausschalten":{
  "commands": "set SteckdoseIT2 off",
  "message":[
    "(%me%) ",
    "Die Lampe in der Kueche wurde ausgeschaltet."
  ]
  },
  "Schlafzimmer ausschalten":{
  "commands": "set sz_col_1 off",
  "message":[
    "(%me%) ",
    "Die Lampe im Schlafzimmer wurde ausgeschaltet."
  ]
  }
}
}

Ich frage mich nur woran das liegen könnte? Habt ihr eine Idee?
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 05 Oktober 2017, 11:55:23
Du schließt erst den Szenen Teil mit der }
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 05 Oktober 2017, 13:29:40
ZitatDu schließt erst den Szenen Teil mit der }

Thx! Hier der funktionierende Code:
{"Beleuchtung":{
  "message": [
    "(Szenen) ",
    "(Lampen einschalten) ",
    "(Lampen ausschalten) ",
    "(abbrechen) ",
    "Szenen einstellen oder Lampen schalten:"
  ],
  "Szenen":{
    "message":[
      "{return('(abwesend einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'abwesend')}",
      "{return('(anwesend einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'anwesend')}",
      "{return('(anwesend_alle einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'anwesend_alle')}",
      "{return('(anwesend_alle_farbe einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'anwesend_alle_farbe')}",
      "{return('(schlafen einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'schlafen')}",
      "{return('(kino einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'kino')}",
      "(abbrechen) ",
      "Welche Lichtszene soll aktiviert werden?"
    ],
"abwesend einschalten":{
    "commands": "set Standard.LS scene abwesend",
    "message":[
      "(%me%) ",
      "Die Szene abwesend wurde aktiviert."
    ]
    },
    "anwesend einschalten":{
    "commands": "set Standard.LS scene anwesend",
    "message":[
      "(%me%) ",
      "Die Szene anwesend wurde aktiviert."
    ]
    },
    "anwesend_alle einschalten":{
    "commands": "set Standard.LS scene anwesend_alle",
    "message":[
      "(%me%) ",
      "Die Szene anwesend_alle wurde aktiviert."
    ]
    },
    "anwesend_alle_farbe einschalten":{
    "commands": "set Standard.LS scene anwesend_alle_farbe",
    "message":[
      "(%me%) ",
      "Die Szene anwesend_alle_farbe wurde aktiviert."
    ]
    },
    "schlafen einschalten":{
    "commands": "set Standard.LS scene schlafen",
    "message":[
      "(%me%) ",
      "Die Szene schlafen wurde aktiviert."
    ]
    },
    "kino einschalten":{
    "commands": "set Standard.LS scene kino",
    "message":[
      "(%me%) ",
      "Die Szene kino wurde aktiviert."
    ]
}
    },
    "Lampen einschalten":{
    "message":[
      "{return('(Flur einschalten) ') if(ReadingsVal('fl_sw_1', 'state', '') eq 'off')}",
      "{return('(Kueche einschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') eq 'off')}",
      "{return('(Schlafzimmer einschalten) ') if(ReadingsVal('sz_col_1', 'state', '') eq 'off')}",
      "(abbrechen) ",
      "Welche Lampe soll eingeschaltet werden?"
    ],
    "Flur einschalten":{
    "commands": "set fl_sw_1 on",
    "message":[
      "(%me%) ",
      "Die Lampe im Flur wurde eingeschaltet."
    ]
    },
    "Kueche einschalten":{
    "commands": "set SteckdoseIT2 on",
    "message":[
      "(%me%) ",
      "Die Lampe in der Kueche wurde eingeschaltet."
    ]
    },
    "Schlafzimmer einschalten":{
    "commands": "set sz_col_1 on",
    "message":[
      "(%me%) ",
      "Die Lampe im Schlafzimmer wurde eingeschaltet."
    ]
}
    },
"Lampen ausschalten":{
    "message":[
      "{return('(Flur ausschalten) ') if(ReadingsVal('fl_sw_1', 'state', '') ne 'off')}",
      "{return('(Kueche ausschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') ne 'off')}",
      "{return('(Schlafzimmer ausschalten) ') if(ReadingsVal('sz_col_1', 'state', '') ne 'off')}",
      "(abbrechen) ",
      "Welche Lampe soll ausgeschaltet werden?"
    ],
    "Flur ausschalten":{
    "commands": "set fl_sw_1 off",
    "message":[
      "(%me%) ",
      "Die Lampe im Flur wurde ausgeschaltet."
    ]
    },
    "Kueche ausschalten":{
    "commands": "set SteckdoseIT2 off",
    "message":[
      "(%me%) ",
      "Die Lampe in der Kueche wurde ausgeschaltet."
    ]
    },
    "Schlafzimmer ausschalten":{
    "commands": "set sz_col_1 off",
    "message":[
      "(%me%) ",
      "Die Lampe im Schlafzimmer wurde ausgeschaltet."
    ]
    }
   }
}
}


Was mir jetzt noch fehlt wäre quasi ein "Navigations-Dialog".  Bei "abbrechen" lande ich immer in %me%,
muss also in meinem Fall "Q" anklicken um dann wieder meine ganzen Dialoge zu sehen.
Sowas wie ein "zurück" Dialog...  ???
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 05 Oktober 2017, 15:32:21
"zurück" könnte man auch in den Meta Dialog integrieren. Es sollte ja pro Benutzer immer nur ein Dialog aktiv sein. Dann muss man ja nur für diesen Dialog "set <Dialog> say @$recipient {perl Code für history ohne den letzten Teil}".
Ich teste das Mal, wenn ich wieder zu Hause bin.

Spricht aus eurer Sicht noch etwas dagegen das Modul offiziell einzuchecken?
Dann würde ich noch ein bisschen was am logverhalten basteln und die Commandref fertig machen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 05 Oktober 2017, 15:40:30
ZitatDann muss man ja nur für diesen Dialog "set <Dialog> say @$recipient {perl Code für history ohne den letzten Teil}".
Ich teste das Mal, wenn ich wieder zu Hause bin.

Klingt gut!

ZitatSpricht aus eurer Sicht noch etwas dagegen das Modul offiziell einzuchecken?
Dann würde ich noch ein bisschen was am logverhalten basteln und die Commandref fertig machen.

Stimmt, der Meta-Dialog schreibt immer ins log, auch mit verbose 0. Aus meiner Sicht spricht nichts dagegen das Modul offiziell einzuchecken.
Es läuft alles stabil und rund. Ein großes Lob von mir an dieser Stelle! Das Warten hat sich wirklich gelohnt!
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 05 Oktober 2017, 15:43:15
Was schreibt der denn ins Log? Ich bin eher der Meinung, dass ich nicht genug Meldungen bei verbose 3-5 zur Verfügung Stelle um Fehler zu erkennen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 05 Oktober 2017, 15:51:25
Zitat von: igami am 05 Oktober 2017, 15:32:21
Spricht aus eurer Sicht noch etwas dagegen das Modul offiziell einzuchecken?

Bei mir macht es immer wieder Probleme mit der Performance.
Gestern hatte ich ein "Menü" das mein FHEM immer abstürzen ließ.
Auch mit meinem vorherigen Menü gibt es ein paar Probleme bei der Geschwindigkeit. Muss heufig FHEM neu starten.

Gruß
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 05 Oktober 2017, 15:52:42
ZitatWas schreibt der denn ins Log?

Beim Aufruf vom Meta Dialog:
2017.10.05 15:46:41 3: get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Sebastian|everyone).* trigger : Beleuchtung
Cam
Haus-Automatisierung
VirtualPC
Waschmaschine
Tagesschau

mehr nicht.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 05 Oktober 2017, 15:53:59
ZitatAuch mit meinem vorherigen Menü gibt es ein paar Probleme bei der Geschwindigkeit. Muss heufig FHEM neu starten.

Das hatte ich nur mit der ersten Version... Aktuell keine Hänger und damit keine Neustarts.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 05 Oktober 2017, 16:37:24
Zitat von: igami am 05 Oktober 2017, 15:32:21
"zurück" könnte man auch in den Meta Dialog integrieren. Es sollte ja pro Benutzer immer nur ein Dialog aktiv sein. Dann muss man ja nur für diesen Dialog "set <Dialog> say @$recipient {perl Code für history ohne den letzten Teil}".
Ich teste das Mal, wenn ich wieder zu Hause bin.
Funktioniert soweit ganz gut :)

Für die DEF zum ergänzen:

  "zurück": {
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;; return $2 ? $2 : $1;;)}"
  },
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Andy89 am 05 Oktober 2017, 18:37:28
Zitat von: igami am 05 Oktober 2017, 15:32:21
"zurück" könnte man auch in den Meta Dialog integrieren. Es sollte ja pro Benutzer immer nur ein Dialog aktiv sein. Dann muss man ja nur für diesen Dialog "set <Dialog> say @$recipient {perl Code für history ohne den letzten Teil}".
Ich teste das Mal, wenn ich wieder zu Hause bin.

Spricht aus eurer Sicht noch etwas dagegen das Modul offiziell einzuchecken?
Dann würde ich noch ein bisschen was am logverhalten basteln und die Commandref fertig machen.

da es bei mir nun auch inline funktioniert, finde ich, dass nichts dagegen spricht. Eine Frage jedoch: Könnte man den Meta-Dialog irgendwie autocreaten lassen? oder über ein Codewort, so müssten sich andere nicht um diesen kümmern? Oder vielleicht sogar ein autocreate, sobald das erste msgDialog-Device gebaut wird.

Übrigens danke dafür  ;D
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 05 Oktober 2017, 20:15:13
ZitatKönnte man den Meta-Dialog irgendwie autocreaten lassen? oder über ein Codewort, so müssten sich andere nicht um diesen kümmern? Oder vielleicht sogar ein autocreate, sobald das erste msgDialog-Device gebaut wird.

Gute Idee! Danach muss allerdings noch das msgConfig device mit
userattr evalSpecials:textField-long und Eintragen von
me=<Startwort>
TelegramBot=<Telegram-device>

in evalSpecials angepasst werden oder - falls noch nicht vorhanden - angelegt werden.
Und da ist dann spätestens Handarbeit nötig. Finde ich allerdings nicht so dramatisch  ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 05 Oktober 2017, 20:22:33
Zitat von: binford6000 am 05 Oktober 2017, 15:53:59
Das hatte ich nur mit der ersten Version... Aktuell keine Hänger und damit keine Neustarts.

Hab die Version aus der Antwort #27 vom 02 Oktober 2017, 17:05:12. Gibt es da eine neuere?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 05 Oktober 2017, 20:26:18
Zitat von: binford6000 am 05 Oktober 2017, 20:15:13
me=<Startwort>
TelegramBot=<Telegram-device>

Eventuell bei der Definition mitgeben?
Dann ist es aber leider nicht mehr Systemübergreifend (WhatsApp und co.)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 05 Oktober 2017, 20:34:17
ZitatHab die Version aus der Antwort #27 vom 02 Oktober 2017, 17:05:12. Gibt es da eine neuere?
Die hab ich auch.
ZitatEventuell bei der Definition mitgeben?
Dann ist es aber leider nicht mehr Systemübergreifend (WhatsApp und co.)
Ja genau. Das war ja auch der Ansatz von igami möglichst alle Push-Dienste abzudecken.
Evtl. auch bei der Definition den Dienst als Parameter abfragen und den Eintrag entsprechend setzen...

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 05 Oktober 2017, 20:40:36
Zitat von: Andy89 am 05 Oktober 2017, 18:37:28
da es bei mir nun auch inline funktioniert, finde ich, dass nichts dagegen spricht. Eine Frage jedoch: Könnte man den Meta-Dialog irgendwie autocreaten lassen? oder über ein Codewort, so müssten sich andere nicht um diesen kümmern? Oder vielleicht sogar ein autocreate, sobald das erste msgDialog-Device gebaut wird.
Ich würde in der Commandref lieber nur ein paar Beispiele machen und auf diesen Thread verweisen.
So kann jeder entweder einfach die Vorlage von hier als Raw Definition kopieren oder nach seinen vorlieben anpassen.

Wie Flipper92 ja auch schon gesagt hat ist es nur Telegram Spezifisch. Prinzipiell kann es ja aber auch mit Jabber und Whatsapp verwendet werden.
Ich denke ich werde noch drei weitere Thread erstellen. Jeweils speziell für Telegram, Jabber und WhatsApp.

Zitat von: Flipper92 am 05 Oktober 2017, 20:22:33
Hab die Version aus der Antwort #27 vom 02 Oktober 2017, 17:05:12. Gibt es da eine neuere?
Nein, das ist die aktuelle. Ich denke, dass ich am Wochenende dazu komme es einzuchecken.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 05 Oktober 2017, 20:49:43
Laut aktueller Statistik ist Telegram am weitesten verbreitet:
TelegramBot   907 (FHEM-Installationen)
yowsup           107   
Jabber             53

Was ist mit denen beiden?
Pushover           846
Pushbullet           316
Gibt es dort keine Chatbot-Funktionalität?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 05 Oktober 2017, 20:51:31
Zitat von: binford6000 am 05 Oktober 2017, 20:49:43
Was ist mit denen beiden?
Pushover           846
Pushbullet           316
Gibt es dort keine Chatbot-Funktionalität?
Die funktionieren meines Wissens nach nur in eine Richtung: FHEM => Handy
Der einzige Rückkanal besteht darin die Nachricht als gelesen zu markieren.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 05 Oktober 2017, 22:05:23
"zurück": {
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;; return $2 ? $2 : $1;;)}"
  },


Super!  :D
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: CBSnake am 06 Oktober 2017, 10:17:59
Hi,

habs jetzt auch mal getestet, funktioniert soweit ganz gut. Da kann ich meine ganzen DOIF-Dialoge nach und nach ersetzen.
Komisch ist nur: auf Waschmaschine triggert er (und mein DOIF-Dialog parallel  ;D ) nur im meta-Dialog mag er den Bot-Namen nicht als Trigger  :o abbrechen und beenden gehen. Im Device stehen aber alle 3 als TRIGGER.
Falls einer ne zündenden Idee hat ohne komplette LIST etc nur her damit ansonst spiele ich noch etwas rum damit rum :-)

Grüße
Achim
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 06 Oktober 2017, 11:45:47
Steht denn der Botname im Trigger oder nur %me%?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: CBSnake am 06 Oktober 2017, 12:34:47
Hi,

der Botname, der kommt auch im state passend zum Roommate an. Schreibe ich beenden müsste er das ja eigentlich mit Botname, Dialog beendet quittieren, es kommt aber auch nur Dialog beendet.

die fehlenden Attr zum DBlog kann damit nix zu tun haben? da hat er gemeckert, nutze ich ja nicht ;-)

Hier mal ein Verbose 5 in dem interessanterweise noch die Waschmaschine auftaucht ;-)



2017.10.06 12:28:21 4: msgDialog (meta_Dialog) triggered by "rr_Achim fhemMsgRcvPush: Bot"
2017.10.06 12:28:21 5: msgDialog (meta_Dialog)
    entering msgDialog_progress
        recipients: rr_Achim
        message:    Bot
        force:      0
2017.10.06 12:28:21 4: msgDialog (meta_Dialog) - return from command "deletereading TYPE=msgDialog rr_Achim_history": Deleted reading rr_Achim_history for device meta_Dialog
2017.10.06 12:28:21 3: get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Achim|everyone).* trigger : Waschmaschine
2017.10.06 12:28:22 3: msg rr_Achim: ID=*********** TYPE=push ROUTE=***** RECIPIENT=@******* STATUS=OK PRIORITY=0 TITLE='' MSG='(Waschmaschine)
(abbrechen)
Ich kann folgendes für dich tun:'
2017.10.06 12:28:22 1: PERL WARNING: substr outside of string at FHEM/HttpUtils.pm line 557.
2017.10.06 12:28:22 1: PERL WARNING: Use of uninitialized value $data in numeric eq (==) at FHEM/HttpUtils.pm line 558.




und hier vom beenden



2017.10.06 12:32:29 4: msgDialog (meta_Dialog) triggered by "rr_Achim fhemMsgRcvPush: beenden"
2017.10.06 12:32:29 5: msgDialog (meta_Dialog)
    entering msgDialog_progress
        recipients: rr_Achim
        message:    beenden
        force:      0
2017.10.06 12:32:29 4: msgDialog (meta_Dialog) - return from command "deletereading TYPE=msgDialog rr_Achim_history": Deleted reading rr_Achim_history for device meta_Dialog
2017.10.06 12:32:29 3: msg rr_Achim: ID=***********TYPE=push ROUTE=******** RECIPIENT=@******* STATUS=OK PRIORITY=0 TITLE='' MSG='(Bot)
Dialog beendet.'



ich hoffe ich hab nicht zuviel ******  ;D

Grüße
Achim
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: nils_ am 06 Oktober 2017, 13:37:54
oha.... nettes modul.
das wird mich wieder einige wochenenden kosten :)
(verbunden mit der schon lange geplanten umstellung auf telegram....)


danke igami  ;D
(nein, das soll keine schuldzuweisung bzw. ironisch gemeint sein, sondern ein herzliches danke. sowas hab ich schon länger gesucht!)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 06 Oktober 2017, 14:44:54
@Achim: hast du im TelegramBot das Attribut utf8specials auf 1 gesetzt?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 06 Oktober 2017, 14:49:02
@Nils: ein Umstieg auf Telegram ist nicht zwingend erforderlich, auch wenn ich den Messenger WhatsApp vorziehe :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: CBSnake am 06 Oktober 2017, 15:14:47
Zitat von: igami am 06 Oktober 2017, 14:44:54
@Achim: hast du im TelegramBot das Attribut utf8specials auf 1 gesetzt?

Perfekt, das wars, hatte ich ausgelassen da im Botnamen keine Umlaute und bisher auch keine Probleme damit :-)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 08 Oktober 2017, 12:32:45
Hi.
Habe mal zwei Fragen.
1. Wo oder wie kann ich UTF 8 einschalten, finde das nicht.

2. Warum werden im meta_Dialog meine eigenen Dialoge nicht angezeigt?
Ich vermute, es liegt an dem UTF 8.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 08 Oktober 2017, 12:49:44
Zitat von: ErzGabriel am 08 Oktober 2017, 12:32:45
Hi.
Habe mal zwei Fragen.
1. Wo oder wie kann ich UTF 8 einschalten, finde das nicht.
Du gehst in das TelegramBot device und setzt dort das Attribut utf8specials auf 1.
Es kann zu Problemen mit Nachrichten kommen, wenn ein Umlaut enthalten ist. Bei "Ich kann folgendes für dich tun" ist das der Fall.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 08 Oktober 2017, 12:57:07
Jo, da habe ich das gesucht aber ist nicht vorhanden, was mich ein wenig stutzig macht.

Aber im meta Dialog wird auch mein Testeintrag mit der Waschmaschine nicht angezeigt, könnte das auch dadran liegen, das ich andere Dialoge mit Umlauten habe?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 08 Oktober 2017, 13:24:20
Zitat von: ErzGabriel am 08 Oktober 2017, 12:57:07
Jo, da habe ich das gesucht aber ist nicht vorhanden, was mich ein wenig stutzig macht.
ggf. mal den TelegramBot updaten

Zitat von: ErzGabriel am 08 Oktober 2017, 12:57:07
Aber im meta Dialog wird auch mein Testeintrag mit der Waschmaschine nicht angezeigt, könnte das auch dadran liegen, das ich andere Dialoge mit Umlauten habe?
Was meinst du mit "wird nicht angezeigt"? Du bekommst eine Antwort vom Bot, aber ohne "Waschmachine"?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 08 Oktober 2017, 18:58:40
Du hast das Modul noch nicht eingecheckt, oder? Zumindest kann ich es aktuell nicht finden, daher werde ich mir mal die Version hier aus dem Thread runterladen und installieren. Bin gespannt.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 08 Oktober 2017, 21:41:14
Zitat von: Amenophis86 am 08 Oktober 2017, 18:58:40
Du hast das Modul noch nicht eingecheckt, oder? Zumindest kann ich es aktuell nicht finden, daher werde ich mir mal die Version hier aus dem Thread runterladen und installieren. Bin gespannt.
Habe ich leider nicht geschafft.
Es wird dann aber auch noch ein paar kleine Änderungen geben, aber ich bin noch nicht soweit diese schon mitzuteilen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 09 Oktober 2017, 06:18:42
Kein Stress, hab es gestern auch doch nicht mehr geschafft es zu installieren. Scheint ja doch ein bisschen umfangreicher, als gedacht. Da war die Zeit dann doch zu knapp :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: nils_ am 09 Oktober 2017, 07:58:38
Zitat von: igami am 06 Oktober 2017, 14:49:02
@Nils: ein Umstieg auf Telegram ist nicht zwingend erforderlich, auch wenn ich den Messenger WhatsApp vorziehe :)

ja ist mir bewusst.
nur habe ich den umstieg auf telegram schon länger auf der liste. whatsapp bzw. yowsup ist ja schon immer so ne sache. momentan funktioniert es bei mir.

whatsapp ist auch sonst der Messanger meiner Wahl :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 10 Oktober 2017, 08:23:42
Zitat von: Flipper92 am 05 Oktober 2017, 15:51:25
Bei mir macht es immer wieder Probleme mit der Performance.
Gestern hatte ich ein "Menü" das mein FHEM immer abstürzen ließ.
Auch mit meinem vorherigen Menü gibt es ein paar Probleme bei der Geschwindigkeit. Muss heufig FHEM neu starten.

Darf ich mich für die Aussage entschuldigen?
Scheinbar war es das FireTV Modul in Verbindung mit dem Precent.
Werde in absehbarer Zeit das msgDia wieder aktivieren.

Ich hab ein paar Fragen:
1. Gibt es aktuell die Möglichkeit von "Waschmaschine" zum "meta_Dialog" zu wechseln, so das die Waschmaschine verschwindet und kein neuer Dialog begonnen wird?

2. und gibt es die Möglichkeit ein Menü (z.B. "Waschmaschine") zu aktualisieren? Sich selbst wieder aufzurufen z.B. mit "(aktualisieren:Waschmaschine) " funktioniert nicht.

Edit:

"aktualisieren": {
"commands": [
"set $SELF say @$recipient Waaschmaschine"
]
}

Das bringt bei mir den Erfolg den ich wollte.
Geht sicher auch besser.
Kann man dies nun irgendwie auch automatisieren? so das alle x Sekunden die nachricht aktuallisiert wird?

3. Wie kann man am besten die Telegram Favoriten ("cmdFavorites") vom Menü aus aufrufen? Will beides als Inline verwenden.

4. Hat jemand schon "TBot_List" mit diesem Modul hübscher gekoppelt?

5. Nach welchen Kriterien wird das meta_Dialog sortiert?
Will dort gerne eine eigene Reihenfolge festlegen. So das die wichtigen Sachen oben stehen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: andy19850 am 10 Oktober 2017, 14:07:49
Nur als hint:
Habe jetzt es jetzt stundenlang probiert und dabei festgestellt, dass ich ein event-on-change-reading state im Bewohner hatte. Das muss man anpassen, sonst antwortet der Bot nichts  ::)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 12 Oktober 2017, 20:18:13
Zitat von: Flipper92 am 10 Oktober 2017, 08:23:42
Darf ich mich für die Aussage entschuldigen?
Scheinbar war es das FireTV Modul in Verbindung mit dem Precent.
Werde in absehbarer Zeit das msgDia wieder aktivieren.
Freut mich zu hören.

Zitat von: Flipper92 am 10 Oktober 2017, 08:23:42
Ich hab ein paar Fragen:
1. Gibt es aktuell die Möglichkeit von "Waschmaschine" zum "meta_Dialog" zu wechseln, so das die Waschmaschine verschwindet und kein neuer Dialog begonnen wird?
Der TelegramBot kann Nachrichten ändern oder Löschen. Vielleicht kannst du aus meinen Beitrag #10 (https://forum.fhem.de/index.php/topic,77297.msg692609.html#msg692609) etwas machen.

Zitat von: Flipper92 am 10 Oktober 2017, 08:23:42
2. und gibt es die Möglichkeit ein Menü (z.B. "Waschmaschine") zu aktualisieren? Sich selbst wieder aufzurufen z.B. mit "(aktualisieren:Waschmaschine) " funktioniert nicht.

Edit:

"aktualisieren": {
"commands": [
"set $SELF say @$recipient Waaschmaschine"
]
}

Das bringt bei mir den Erfolg den ich wollte.
Geht sicher auch besser.
Kann man dies nun irgendwie auch automatisieren? so das alle x Sekunden die nachricht aktuallisiert wird?
Nutze ich selbst auch so. Du kannst in die commands ein sleep einbauen was den Dialog wieder aufruft.
ACHTUNG: Das führt zu einer Schleife.

Zitat von: Flipper92 am 10 Oktober 2017, 08:23:42
3. Wie kann man am besten die Telegram Favoriten ("cmdFavorites") vom Menü aus aufrufen? Will beides als Inline verwenden.
Was meinst du damit? Ich verwende selbst keine cmdFavourites, sondern mache alles über msgDialog.

Zitat von: Flipper92 am 10 Oktober 2017, 08:23:42
4. Hat jemand schon "TBot_List" mit diesem Modul hübscher gekoppelt?
Ich nutze PostMe mit msgDialog, aber ohne TBot_List

defmod Einkaufsliste_Dialog msgDialog { \
  "Einkaufsliste": {\
    "message": [\
      "(Waren hinzufügen) ", \
      "(Waren entfernen) ", \
      "(einkaufen) ", \
      "(abbrechen) ",\
      "{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
    ],\
    "Waren hinzufügen": {\
      "message": [\
        "Bitte jede Ware als neue Nachricht hinzufügen.",\
        "Das hinzufügen von Waren durch \"/beenden\" beenden."\
      ],\
      "Ware hinzufügen": {\
        "match": "[^/]+",\
        "commands": [\
          "set %PostMe% add %list% $message",\
          "setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen"\
        ]\
      }\
    },\
    "Waren entfernen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'beenden'). ') ')}",\
        "Welche Ware möchtest du entfernen?"\
      ],\
      "Ware entfernen": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|Waren entfernen"\
        ]\
      }\
    },\
    "einkaufen": {\
      "commands": [\
        "setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"\
      ],\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(beenden) ",\
        "Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
      ]\
    },\
    "noch einzukaufen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(beenden) ",\
        "Noch einzukaufen:"\
      ],\
      "Ware eingekauft": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|noch einzukaufen"\
        ]\
      }\
    }    \
  }\
}
attr Einkaufsliste_Dialog evalSpecials PostMe=PostMe\
list=Einkaufsliste


Zitat von: Flipper92 am 10 Oktober 2017, 08:23:42
5. Nach welchen Kriterien wird das meta_Dialog sortiert?
Will dort gerne eine eigene Reihenfolge festlegen. So das die wichtigen Sachen oben stehen.
Wird mit perl sort sortiert, alphabetisch, case sensitive. Eine eigene Sortierung würde ich in die myUtils auslagern.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 12 Oktober 2017, 20:21:51
Zitat von: andy19850 am 10 Oktober 2017, 14:07:49
Nur als hint:
Habe jetzt es jetzt stundenlang probiert und dabei festgestellt, dass ich ein event-on-change-reading state im Bewohner hatte. Das muss man anpassen, sonst antwortet der Bot nichts  ::)
Werde ich in der commandref als Hinweis platzieren. Habe leider momentan nur wenig Zeit um daran weiter zu arbeiten.

Ich würde mich übrigens sehr freuen, wenn jemand einen Wiki Artikel für das Modul schreiben würde. Korrekturlesen würde ich den auch wohl :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 13 Oktober 2017, 12:15:05
Danke für deine Antwort.
Ich werde mir deine Anregungen mal anschauen.
Bin leider kein super Programmiere, sondern kann nur gut kopieren und anpassen.  ;D ;D

Ich bin am überlegen ob es nicht Sinn macht irgendwo ein paar Dialoge zu sammeln.
Denn es ist schon mehr programmier arbeit von Nöten als ein einfaches Device setzen.
Zumindest finde ich es aktuell als eins der aufwändigsten Module die ich aktuell verwende.
Sollte aber übersichtlich und kommentierbar bleiben.


Zitat von: igami am 12 Oktober 2017, 20:18:13
Was meinst du damit? Ich verwende selbst keine cmdFavourites, sondern mache alles über msgDialog.
Ich wollte mir nur die Arbeit sparen ein eigenes Dialog dafür zu erstellen.
Da ich davor schon die cmdFavourites hatte wollte ich diese nur noch einbinden.
In diesem Fall werde ich sie aber vermutlich abschalten.

Zitat von: igami am 12 Oktober 2017, 20:18:13
Wird mit perl sort sortiert, alphabetisch, case sensitive. Eine eigene Sortierung würde ich in die myUtils auslagern.
Nach Device oder nach Befehl?

Grüße
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 13 Oktober 2017, 12:55:21
ZitatNach Device oder nach Befehl?
Müsste nach Name sortiert sein. Ich verwende noch Emoticons davor. Dann wird natürlich nach dem Unicode sortiert:
1F3E0Haus,
1F4A1Beleuchtung
1F4F7Cam
...

Siehe auch hier: https://apps.timwhitlock.info/emoji/tables/unicode (https://apps.timwhitlock.info/emoji/tables/unicode) ;)
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 13 Oktober 2017, 13:49:37
Es werden die trigger sortiert
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 15 Oktober 2017, 09:54:14
Habe das Modul nun offiziell eingecheckt. Wer nicht bis morgen warten möchte: SVN 76_msgDialog.pm (https://svn.fhem.de/trac/export/15262/trunk/fhem/FHEM/76_msgDialog.pm)

Änderungen gegenüber der vorherigen Version:
- im msgConfig device gibt es nun das Attribut msgDialog_evalSpecials anstelle von evalSpecials.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 16 Oktober 2017, 14:10:39
@igami
ZitatIch würde mich übrigens sehr freuen, wenn jemand einen Wiki Artikel für das Modul schreiben würde. Korrekturlesen würde ich den auch wohl :)
Ich würde mich da bereit erklären!  ;)

Das Logging im meta_Dialog ist noch aktiv - dachte Du wolltest das noch ändern...:
2017.10.16 13:53:10 3: get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Sebastian|everyone).* trigger :
Verreist
Beleuchtung
Fahrzeiten
Gast
Haus-Automatisierung
Kamera
FHEM-Log
Tagesschau
VirtualPC

ZitatIch bin am überlegen ob es nicht Sinn macht irgendwo ein paar Dialoge zu sammeln.
@Flipper92: Gute Idee! Hier im Forum und/oder im Wiki...

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 16 Oktober 2017, 15:02:15
Die Meldung hat verbose 3 und das ist so gewollt

Edit: Ich muss mich korrigieren: Die Meldung kommt nicht aus dem Modul.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 17 Oktober 2017, 10:40:49
ZitatEdit: Ich muss mich korrigieren: Die Meldung kommt nicht aus dem Modul.
Korrekt. attr global verbose 2 lässt die Logeinträge bei jedem Menü-Aufruf verschwinden.
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 19 Oktober 2017, 20:39:45
Hi igami, gibt es eine Möglichkeit aus einem beliebigen Dialog direkt in den Meta-Dialog zu wechseln? Also eine Art "Hauptmenü" zur Anzeige aller verfügbaren Dialoge? 
Manuell eingegeben funktioniert es. Aber als Menüpunkt innerhalb eines Dialogs nicht. Dann erscheint nur der Menüpunkt für den Meta-Dialog und nicht die Auflistung aller Dialoge...

Und "zurück" funktioniert ja nur innerhalb eines Dialogs...

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 20 Oktober 2017, 05:33:56
Zitat von: binford6000 am 19 Oktober 2017, 20:39:45
Hi igami, gibt es eine Möglichkeit aus einem beliebigen Dialog direkt in den Meta-Dialog zu wechseln? Also eine Art "Hauptmenü" zur Anzeige aller verfügbaren Dialoge? 
Manuell eingegeben funktioniert es. Aber als Menüpunkt innerhalb eines Dialogs nicht. Dann erscheint nur der Menüpunkt für den Meta-Dialog und nicht die Auflistung aller Dialoge...

Was spricht gegen "set meta_Dialog say @$recipient %me%" aus einem anderen Dialog raus?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 20 Oktober 2017, 08:00:26
ZitatWas spricht gegen "set meta_Dialog say @$recipient %me%" aus einem anderen Dialog raus?
Moin, soweit war ich auch schon. Aber Dann erscheint nur der Menüpunkt für den Meta-Dialog und nicht die Auflistung aller Dialoge...
Ich hab mal Screenshots angehängt...
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 20 Oktober 2017, 21:04:45
Zitat von: binford6000 am 19 Oktober 2017, 20:39:45
Also eine Art "Hauptmenü" zur Anzeige aller verfügbaren Dialoge? 
Manuell eingegeben funktioniert es. Aber als Menüpunkt innerhalb eines Dialogs nicht.

Ich hab bei mir in einem Menü folgendes laufen:
"(zurück:%me%) ",
Dies als "Taste". Also im gesamten:
"message": [
        "(Wohnzi # Soll [Wohnzimmer.Thermostat:desiredTemperature]°C # Ist [Wohnzimmer.Temperatur:state]:Heizungwozi) ",
        "(Schlaf # Soll [Schlafzimmer.Thermostat:desiredTemperature]°C # Ist [Schlafzimmer.Temperatur:state]:Heizungschlaf) ",
"(Jenni # Soll [Jennifer.Thermostat:desiredTemperature]°C # Ist [Jennifer.Temperatur:state]:Heizungjenni) ",
"(Küche # Soll [Kueche.Thermostat:desiredTemperature]°C:Heizungkueche|Bad # Soll [Bad.Thermostat:desiredTemperature]°C:Heizungbad) ",
"(An/Aus:heizunganaus|zurück:%me%) ",
        "Aktuell ist die Heizungsautomation: [Thermostat.Automation:state]"
      ],

Kannst ja Mal testen.


Zitat von: igami am 12 Oktober 2017, 20:18:13

defmod Einkaufsliste_Dialog msgDialog { \
  "Einkaufsliste": {\
    "message": [\
      "(Waren hinzufügen) ", \
      "(Waren entfernen) ", \
      "(einkaufen) ", \
      "(abbrechen) ",\
      "{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
    ],\
    "Waren hinzufügen": {\
      "message": [\
        "Bitte jede Ware als neue Nachricht hinzufügen.",\
        "Das hinzufügen von Waren durch \"/beenden\" beenden."\
      ],\
      "Ware hinzufügen": {\
        "match": "[^/]+",\
        "commands": [\
          "set %PostMe% add %list% $message",\
          "setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen"\
        ]\
      }\
    },\
    "Waren entfernen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'beenden'). ') ')}",\
        "Welche Ware möchtest du entfernen?"\
      ],\
      "Ware entfernen": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|Waren entfernen"\
        ]\
      }\
    },\
    "einkaufen": {\
      "commands": [\
        "setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"\
      ],\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(beenden) ",\
        "Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
      ]\
    },\
    "noch einzukaufen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(beenden) ",\
        "Noch einzukaufen:"\
      ],\
      "Ware eingekauft": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|noch einzukaufen"\
        ]\
      }\
    }    \
  }\
}
attr Einkaufsliste_Dialog evalSpecials PostMe=PostMe\
list=Einkaufsliste

Wie fühlst du da neue Produkte hinzu?
Mit "Käse"{neue Nachricht}"brot" usw.
Oder setzt du da noch was davor wie z.b. / oder + ?

Ich hab gerade noch das Problem, das ich nicht msgDialog_evalSpecials wählen kann, sondern nur evalSpecials. Ich Versuch Mal das Modul neu zu installieren.

Edti: gerade neu runter geladen, bei mir heißt das Attribut weiter evalSpecials. Liegt es daran, das es vor dem Update schon gesetzt war?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 21 Oktober 2017, 11:31:21
@Flipper92:
Zitat"(zurück:%me%) "
Bedeutet bei mir dass eine Nachricht "zurück:Q" gesendet wird und danach nichts passiert.
Ich bekomme partout kein "Hauptmenü" hin. Naja, ein Klick mehr macht's ja jetzt auch nicht,
aber schick wäre es schon ;)

@igami:
Wollte aus o.g. Thema mal mein %me% ändern um zu sehen ob es daran liegen könnte.
Beim verändern von msgDialog_evalSpecials in globalMsg bekomme ich diesen Fehler:
globalMsg: unknown attribute msgDialog_evalSpecials. Type 'attr globalMsg ?' for a detailed list.
Im Raw ändern geht auch nicht: Global configuration device already defined: globalMsg
Konnte es mit userattr globalMsg msgDialog_evalSpecials dann wieder veränderbar machen...


Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 21 Oktober 2017, 16:21:14
Zitat von: binford6000 am 20 Oktober 2017, 08:00:26
Moin, soweit war ich auch schon. Aber Dann erscheint nur der Menüpunkt für den Meta-Dialog und nicht die Auflistung aller Dialoge...
Ich hab mal Screenshots angehängt...
VG Sebastian
Du bekommst ja ein Keyboard angezeigt. Da kann irgendwas nicht passen. Poste mal bitte ein list von dem Dialog in den du es einbauen möchtest.

Zitat von: Flipper92 am 20 Oktober 2017, 21:04:45
Wie fühlst du da neue Produkte hinzu?
Mit "Käse"{neue Nachricht}"brot" usw.
Oder setzt du da noch was davor wie z.b. / oder + ?
Einfach jedes Element als neue Nachricht und dann mit /beenden das Hinzufügen beenden.

Zitat von: Flipper92 am 20 Oktober 2017, 21:04:45
Ich hab gerade noch das Problem, das ich nicht msgDialog_evalSpecials wählen kann, sondern nur evalSpecials. Ich Versuch Mal das Modul neu zu installieren.

Edti: gerade neu runter geladen, bei mir heißt das Attribut weiter evalSpecials. Liegt es daran, das es vor dem Update schon gesetzt war?
Ich gucke mir das morgen noch mal an, eigentlich sollten die Attribute über das userattr im msgConfig device verfügbar sein. Ansonsten wie binford6000 bitte erstmal manuell hinzufügen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 22 Oktober 2017, 07:45:13
ZitatDu bekommst ja ein Keyboard angezeigt. Da kann irgendwas nicht passen. Poste mal bitte ein list von dem Dialog in den du es einbauen möchtest.
Das "(zurück:%me%) ", wird auf meinem Keyboard als "zurück:Q" angezeigt. Das solllte ja schon so nicht sein oder?
Hier ein Dialog wo ich es versuchsweise eingebaut habe:
Internals:
   DEF        {"5.Tagesschau in 100s":{
  "message": [
    "(Als mp3 abspielen) ",
    "(Link zur Sendung schicken) ",
    "(abbrechen|zurück:%me%) ",
"Die Tagesschau in 100 Sekunden..."
  ],
  "Als mp3 abspielen":{
  "commands": "set tagesschau100sek.DUM on",
  "message":[
    "(%me%) ",
    "TS in 100s wird abgespielt."
  ]
  },
  "Link zur Sendung schicken":{
  "message":[
    "(%me%) ",
    "Link: [rss_tagesschau100:Link]"
  ]
  }
}
}

   MSGCOMMAND msg push \@$recipients $message
   NAME       Tagesschau_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         228
   NTFY_ORDER 50-Tagesschau_Dialog
   STATE      rr_Sebastian: 5.Tagesschau in 100s
   TRIGGER    5.Tagesschau in 100s
   TYPE       msgDialog
   READINGS:
     2017-10-22 07:39:32   rr_Sebastian_history 5.Tagesschau in 100s
     2017-10-22 07:39:32   state           rr_Sebastian: 5.Tagesschau in 100s
Attributes:
   allowed    rr_Sebastian
   disable    0
   group      Dialog
   icon       dialog@green
   room       91_Webdevices

VG Sebastian

EDIT: Mit Inline Keyboard funktioniert es! Geht das auch mit normalem Keyboard?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 22 Oktober 2017, 08:55:45
Zitat von: binford6000 am 22 Oktober 2017, 07:45:13
Das "(zurück:%me%) ", wird auf meinem Keyboard als "zurück:Q" angezeigt. Das solllte ja schon so nicht sein oder?
Hier ein Dialog wo ich es versuchsweise eingebaut habe:
Internals:
   DEF        {"5.Tagesschau in 100s":{
  "message": [
    "(Als mp3 abspielen) ",
    "(Link zur Sendung schicken) ",
    "(abbrechen|zurück:%me%) ",
"Die Tagesschau in 100 Sekunden..."
  ],
  "Als mp3 abspielen":{
  "commands": "set tagesschau100sek.DUM on",
  "message":[
    "(%me%) ",
    "TS in 100s wird abgespielt."
  ]
  },
  "Link zur Sendung schicken":{
  "message":[
    "(%me%) ",
    "Link: [rss_tagesschau100:Link]"
  ]
  }
}
}

   MSGCOMMAND msg push \@$recipients $message
   NAME       Tagesschau_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         228
   NTFY_ORDER 50-Tagesschau_Dialog
   STATE      rr_Sebastian: 5.Tagesschau in 100s
   TRIGGER    5.Tagesschau in 100s
   TYPE       msgDialog
   READINGS:
     2017-10-22 07:39:32   rr_Sebastian_history 5.Tagesschau in 100s
     2017-10-22 07:39:32   state           rr_Sebastian: 5.Tagesschau in 100s
Attributes:
   allowed    rr_Sebastian
   disable    0
   group      Dialog
   icon       dialog@green
   room       91_Webdevices

VG Sebastian

EDIT: Mit Inline Keyboard funktioniert es! Geht das auch mit normalem Keyboard?
Wie du schon erkannt hast haben die Inline Keyboard da einen Vorteil: eins anzeigen, was anderes senden ;)
Mit den normalen Keyboards geht das nicht.

Aber in deinem Beispiel würde ich das zurück einfach weglassen. Macht ja eigentlich das gleiche wie abbrechen ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 22 Oktober 2017, 09:02:14
ZitatAber in deinem Beispiel würde ich das zurück einfach weglassen. Macht ja eigentlich das gleiche wie abbrechen ;)

Eben nicht! "Bei abbrechen" erscheint "Q" als inline und bei "zurück" alle Dialoge - so wie es sein soll.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 22 Oktober 2017, 09:48:11
So was richtig schönes fällt mir nun auch nicht ein. Nur eine Ergänzung um

    "zurück": {
      "commands": "set meta_Dialog say @$recipient %me%"
    },

in deinem Tagesschau Dialog.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 22 Oktober 2017, 10:26:34
Alles gut. Hab jetzt folgendes eingestellt und damit eine durchgängige Navigation durch alle Dialoge ermöglicht:
{"1.Beleuchtung":{
  "message": [
    "(Szenen) ",
    "(Lampen einschalten) ",
    "(zurück:%me%) ",
    "Möchtest Du Szenen einstellen oder Lampen schalten?"
  ],

"Szenen":{
    "message":[
      "{return('(abwesend einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'abwesend')}",
      "{return('(anwesend einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'anwesend')}",
      "(abbrechen|zurück) ",
      "Welche Lichtszene soll ich aktivieren?"
    ],
Für meine Zwecke (Naviagtion durch die Dialoge) ist Inline Keyboard also gestezt.
Letztlich muss jeder selbst entscheiden, ob er das normale Keyboard oder lieber das Inline Keyboard nutzen möchte...
Danke Euch beiden fürs erarbeiten! :)
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 24 Oktober 2017, 19:28:08
Ich komm mit der Automatischen Aktualisierung nicht weiter.

defmod Heizung_Dialog msgDialog { "Heizung": {\
      "message": [\
        "(Wohnzi # Soll [Wohnzimmer.Thermostat:desiredTemperature]°C # Ist [Wohnzimmer.Temperatur:state]:Heizungwozi) ",\
        "(Schlaf # Soll [Schlafzimmer.Thermostat:desiredTemperature]°C # Ist [Schlafzimmer.Temperatur:state]:Heizungschlaf) ",\
"(Jenni # Soll [Jennifer.Thermostat:desiredTemperature]°C # Ist [Jennifer.Temperatur:state]:Heizungjenni) ",\
"(Küche # Soll [Kueche.Thermostat:desiredTemperature]°C:Heizungkueche|Bad # Soll [Bad.Thermostat:desiredTemperature]°C:Heizungbad) ",\
"(An/Aus:heizunganaus|zurück:%me%) ",\
"(Aktualisieren:aktulaisierenheizung) ",\
        "Aktuell ist die Heizungsautomation: [Thermostat.Automation:state]"\
      ],\
  "commands": [\
  "{sleep 10;;;; fhem(\"set $SELF say @$recipient Heizung\");;;;}"\
],\
  "aktulaisierenheizung": {\
  "commands": [\
"set $SELF say @$recipient Heizung"\
]\
  },\
  "heizunganaus": {\
  "commands": [\
"set Thermostat.Automation_Toogle active",\
"set $SELF say @$recipient Heizung"\
]\
  },\
"Heizungwozi": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Wohnzimmer.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungwozi": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Wohnzimmer.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungschlaf": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Schlafzimmer.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungschlaf": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Schlafzimmer.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungkueche": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Kueche.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungkueche": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Kueche.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungbad": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Bad.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungbad": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Bad.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungjenni": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Jennifer.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungjenni": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Jennifer.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
},\
"zurück": {\
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;;;; return $2 ? $2 : $1;;;;)}"\
  }\
}\
}\
}
attr Heizung_Dialog allowed everyone
attr Heizung_Dialog room msg

setstate Heizung_Dialog 2017-10-24 19:26:06 state Initialized


Hat jemand eine Idee woran es liegen könnte?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 24 Oktober 2017, 19:39:48
Zitat von: Flipper92 am 24 Oktober 2017, 19:28:08
Ich komm mit der Automatischen Aktualisierung nicht weiter.

defmod Heizung_Dialog msgDialog { "Heizung": {\
      "message": [\
        "(Wohnzi # Soll [Wohnzimmer.Thermostat:desiredTemperature]°C # Ist [Wohnzimmer.Temperatur:state]:Heizungwozi) ",\
        "(Schlaf # Soll [Schlafzimmer.Thermostat:desiredTemperature]°C # Ist [Schlafzimmer.Temperatur:state]:Heizungschlaf) ",\
"(Jenni # Soll [Jennifer.Thermostat:desiredTemperature]°C # Ist [Jennifer.Temperatur:state]:Heizungjenni) ",\
"(Küche # Soll [Kueche.Thermostat:desiredTemperature]°C:Heizungkueche|Bad # Soll [Bad.Thermostat:desiredTemperature]°C:Heizungbad) ",\
"(An/Aus:heizunganaus|zurück:%me%) ",\
"(Aktualisieren:aktulaisierenheizung) ",\
        "Aktuell ist die Heizungsautomation: [Thermostat.Automation:state]"\
      ],\
  "commands": [\
  "{sleep 10;;;; fhem(\"set $SELF say @$recipient Heizung\");;;;}"\
],\
  "aktulaisierenheizung": {\
  "commands": [\
"set $SELF say @$recipient Heizung"\
]\
  },\
  "heizunganaus": {\
  "commands": [\
"set Thermostat.Automation_Toogle active",\
"set $SELF say @$recipient Heizung"\
]\
  },\
"Heizungwozi": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Wohnzimmer.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungwozi": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Wohnzimmer.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungschlaf": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Schlafzimmer.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungschlaf": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Schlafzimmer.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungkueche": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Kueche.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungkueche": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Kueche.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungbad": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Bad.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungbad": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Bad.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungjenni": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Jennifer.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungjenni": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Jennifer.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
},\
"zurück": {\
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;;;; return $2 ? $2 : $1;;;;)}"\
  }\
}\
}\
}
attr Heizung_Dialog allowed everyone
attr Heizung_Dialog room msg

setstate Heizung_Dialog 2017-10-24 19:26:06 state Initialized


Hat jemand eine Idee woran es liegen könnte?
Wo hängt es denn genau?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 24 Oktober 2017, 19:48:40
Sorry.

Also der "Knopf" Aktualisieren funktioniert ohne Probleme.
Das Automatische nach 10 Sekunden jedoch nicht.

hab es auch schon mit:
"commands": [
  "{sleep 10;; fhem(\"set $SELF say @$recipient Heizung|aktulaisierenheizung\");;}"
],

versucht.

Hat aber irgendwie auch nicht geklappt. Also die Aktualisierung reagiert nicht von alleine.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 24 Oktober 2017, 19:58:39
warum ein perl sleep? Einfach "sleep 10;; set $SELF ..."
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 24 Oktober 2017, 20:16:42
Zitat von: igami am 24 Oktober 2017, 19:58:39
warum ein perl sleep? Einfach "sleep 10;; set $SELF ..."

Hatte ich auch schon.
Hab es gerade nochmal getestet mit beiden Versionen (Heizung und Heizung|aktulaisierenheizung) es wird keine Schleife ausgelöst oder die Nachricht aktualisiert sich nicht. Aufjedenfall funktioniert der manuelle Reloade (klick auf aktulaisierenheizung)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: PSI69 am 27 Oktober 2017, 18:58:12
Super! Ich habe das Thema hier vor einiger Zeit (und nun inzwischen mehrfach) durchgelesen; vor allem die Integration in die rr_.* Devices zum Versenden und zur Berechtigung gefällt mir sehr. Heute habe mich endlich mal ans werkeln gemacht... und bin glatt in mein erstes Problem gerannt:

Der meta Dialog wird in Telegram angezeigt, mein erster Dialogversuch ebenso. Nur wenn ich diesen im Telegram Client auswähle, also 'Alarmanlage', bekomme ich die folgenden Log Einträge:

Das hier ist noch erfolgreich:

2017.10.27 18:39:17 3: msg rr_Peter: ID=1509122357.45852.1 TYPE=push ROUTE=TeleBot RECIPIENT=@123456789 STATUS=OK PRIORITY=0 TITLE='' MSG='(Alarmanlage)
(abbrechen)
(beenden)
Ich kann folgendes für dich tun:'


Das dann nicht mehr:

2017.10.27 18:39:32 3: msg rr_Peter: ID=1509122372.31525.1 TYPE=push ROUTE=TeleBot RECIPIENT=@123456789 STATUS=ERROR PRIORITY=0 TITLE='' MSG='(Alarmanlage Ein)

(Globaler Abbruch)
(Rauchmelder Alarm Aus)
(Send Status Alarmanlage)
(Send Status Fenster)
(Send Status Türen)'
2017.10.27 18:39:32 3: msg push @rr_Peter (Alarmanlage Ein)

(Globaler Abbruch)
(Rauchmelder Alarm Aus)
(Send Status Alarmanlage)
(Send Status Fenster)
(Send Status Türen)  : TeleBot: TelegramBot_Set: Command message, no text for msg specified


Irgendwie fliegen die beiden '' raus, oder?

Übersehe ich hier etwas?

Internals:
   CFGFN
   DEF        {
  "Alarmanlage": {
    "message": [
      "{return('(Alarmanlage Ein) ') if(AttrVal('AAA','level6xec','default') ne 'armed')}",
      "{return('(Alarmanlage Aus) ') if(AttrVal('AAA','level6xec','default') eq 'armed')}",
      "(Globaler Abbruch) ",
      "(Rauchmelder Alarm Aus) ",
      "(Send Status Alarmanlage) ",
      "(Send Status Fenster) ",
      "(Send Status Türen) "
    ],
    "Globaler Abbruch": {
      "commands": "set Global.Cancel Abbruch",
      "message": [
        "TelegramBot_MTYPE=queryInline (%me%) ",
        "Globaler Abbruch ausgeführt."
      ]
    }
  }
}
   MSGCOMMAND msg push \@$recipients $message
   NAME       msgD_Alarmanlage
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         1417
   NTFY_ORDER 50-msgD_Alarmanlage
   STATE      rr_Peter: Alarmanlage
   TRIGGER    Alarmanlage
   TYPE       msgDialog
   READINGS:
     2017-10-27 18:39:32   rr_Peter_history Alarmanlage
     2017-10-27 18:39:32   state           rr_Peter: Alarmanlage
Attributes:
   alias      msgDialog Alarmanlage
   allowed    rr_Peter,rr_Yvonne
   room       IS Messenger


EDIT: FHEM wurde gestern (26.10.) Nachmittag aktualisiert.

Danke Peter
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 27 Oktober 2017, 22:03:52
ZitatÜbersehe ich hier etwas?
Hallo Peter,
jedes Menü benötigt auch eine normale Message (hier "Menü Alarmanlage"). Probier mal folgendes:
{
  "Alarmanlage": {
    "message": [
      "{return('(Alarmanlage Ein) ') if(AttrVal('device','state','') ne 'on')}",
      "{return('(Alarmanlage Aus) ') if(AttrVal('device','state','') eq 'on')}",
      "(Globaler Abbruch) ",
      "(Rauchmelder Alarm Aus) ",
      "(Send Status Alarmanlage) ",
      "(Send Status Fenster) ",
      "(Send Status Türen) ",
      "(abbrechen) ",
      "Menü Alarmanlage"
    ],
    "Globaler Abbruch": {
      "commands": "set Global.Cancel Abbruch",
      "message": [
      "TelegramBot_MTYPE=queryInline (%me%) ",
      "Globaler Abbruch ausgeführt."
      ]
    }
  }
}

Und ein "abbrechen" Button ist auch immer gut zu gebrauchen...  ;)
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: PSI69 am 28 Oktober 2017, 10:14:49
Hallo Sebastian,

Danke für Deinen Hinweis - ich habe das Beispiel gestern gefühlt 100-mal verglichen, hm... Jetzt bin ich einen Schritt weiter!

Schönes Wochenende,
Peter
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 28 Oktober 2017, 11:33:19
Sehr schön, dass sich gegenseitig geholfen wird :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: PSI69 am 28 Oktober 2017, 12:41:07
Wobei das mit der fehlenden Dialogmessage hier schon vorher zwei Mal Thema war, Asche auf mein Haupt...

Nächstes Thema. Ich möchte aus einem Dialog heraus das Ergebnis (die Ausgabe) eines fhem Kommandos an den Dialogpartner versenden. Ich bekomme das im Moment nicht hin, die Nachricht geht immer an den Telegram defaultPeer, also mich und nicht an meine Frau, wenn diese den Dialog benutzt. Hier mal der relevante Teil vom Dialog:

    "Send Status Alarmanlage": {
      "commands": "set %TelegramBot% cmdSend {fhem 'list NAME=AAA:FILTER=level6=.* level6'}",
      "message": [
        "(%me%) ",
        "Status Alarmanlage."
      ]
    }


Auch dies hier hilft mir nicht, damit erfolgt keine Ausgabe des 'list ...', weder an meine Frau, noch an den defaultPeer:

"commands": "set %TelegramBot% $recipient cmdSend {fhem 'list NAME=AAA:FILTER=level6=.* level6'}",


Wobei dann die Nachricht auf Telegram als Messenger festgelegt ist, gefällt mir ebenfalls nicht. Also habe ich noch dies hier versucht:

"commands": "msg push $recipient {fhem 'list NAME=AAA:FILTER=level6=.* level6'}",

Damit wird nur das Kommando als Text zurück gegeben und nicht ausgeführt.

Ich denke, das Thema holt mich dann auch wieder ein, wenn ich einen Plot als Ergebnis eines Kommandos versenden möchte, oder?

Danke Peter
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: PSI69 am 28 Oktober 2017, 16:15:10
Das hier, tut was es soll:

    "Send Status Alarmanlage": {
      "message": [
        "(%me%) ",
        "Status Alarmanlage:",
        "{fhem 'list NAME=AAA:FILTER=level6=.* level6'}"
      ]
    }


Tschau Peter
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: PSI69 am 28 Oktober 2017, 16:42:39
Noch einmal ich ;D

Jetzt beim Versenden eines Plots...

Laut Wiki Beispiel, habe ich das so umgesetzt:

"Steckdose Schuppen Verlaufsdiagramm": {
      "commands": "set %TelegramBot% cmdSend {plotAsPng('%aussen_plot%')}",
      "message": [
        "(%me%) $message",
      ]
    },


Leider bekommt dann die Nachricht immer der defaultPeer über Telegram.  Zum einen soll der richtige User des Dialoges die Nachricht bekommen, zum anderen möchte ich das nicht auf Telegram festnageln, sondern flexibel lassen.

Das hier hat mich auch nicht weiter gebracht, hier kommt kein Plot, sondern nur Müll im Logfile, hm:

"Steckdose Schuppen Verlaufsdiagramm": {
      "message": [
        "(%me%) $message",
        "{set %TelegramBot% cmdSend {plotAsPng('%aussen_plot%')}}"
      ]
    },


Wie macht ihr das, Plots (oder Bilder von z. Bsp. einer IPCam) per Push flexibel an den richtigen Teilnehmer???

Danke Peter
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 28 Oktober 2017, 17:10:15
ZitatWie macht ihr das, Plots (oder Bilder von z. Bsp. einer IPCam)...???
Hilft Dir wahrscheinlich nicht wirklich weiter - ich lasse mir bereits von mehreren Stellen ein IPCam Bild schicken. Daher ganz einfach via dummy/notify:
{"Kamerabild":{
  "commands": "set ipcamshot on",
  "message": [
    "(%me%) ",
    "Moment, ich schicke Dir ein Bild..."
  ]
}
}

Der Code für ein IPCam Bild ist ja dann trivial:
  {fhem "get Tablet.PCIPCam image; sleep 5; set <TelegramBot> sendImage ./www/snapshots/Tablet.PCIPCam_snapshot.jpg";}

Zitat...per Push flexibel an den richtigen Teilnehmer???
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 28 Oktober 2017, 19:41:45
Aus der TelegramBot Commandref:

cmdSend [ @<peer1> ... @<peerN> ] <fhem command>
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: PSI69 am 29 Oktober 2017, 16:14:34
Danke für Eure Antworten!

Mir ist schon klar (hätte ich besser formulieren sollen, sorry!), wie ich Telegram zum Versenden von Bildern/SVGs bringe, das nutze ich auch bereits. Auch das 'cmdSend @peer' ist mir klar. Wo ich Probleme habe:

Ich bekomme zwar aus '$recipient:' mittels
{(split(":",AttrVal('rr_Peter','msgContactPush','')))[1]}
bzw. dann im Dialog
{(split(":",AttrVal('$recipient','msgContactPush','')))[1]}
an den gewünschten Telegram Empfänger, der den Dialog gerade bedient.

Aber, dem so ermittelten Telegram Empfänger eine Testnachricht zuzustellen, das bekomme ich nicht auf die Reihe:
set TeleBot message {(split(":",AttrVal('rr_Peter','msgContactPush','')))[1]} Testnachricht
... stellt mir den kompletten Text ab '{' als Nachricht zu; wertet also nicht, wie von mir gedacht/erwünsch, einfach den Perl Code aus und benutzt das Ergebnis in der Befehlszeile.

Als Ziel habe ich mir so eine Kombination vorgestellt:
set TeleBot cmdSend {(split(":",AttrVal('rr_Peter','msgContactPush','')))[1]} {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}
oder
set TeleBot cmdSend {((split(":",AttrVal('rr_Peter','msgContactPush','')))[1]);;plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}
Wobei ich dann die fixen Angaben noch variabel machen würde. ... aber, klappt ja so nicht, hm.

Meine Frage an Euch: Wie kann ich die ermittelte Telegram ID aus dem ROOMMATE Device des aktuellen Dialog Nutzers sinnvoll mit 'Telebot cmdSend @xxxx' verbandeln?

Zuerst hatte ich mir vorgestellt 'msg' zum Versenden zu benutzen, also 'msg push @rr_Peter Testnachricht'. Das klappt auch, allerdings nur bei Text und nicht bei Bildern. Damit wäre das pro User flexibel, je nachdem welcher Messenger hat vom User benutzt wird. Davon (verschiedene Messenger) habe ich mich bei den Grafiken schon verabschiedet.

Danke Peter
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 29 Oktober 2017, 16:48:26
Ich denke es ist sinnvoll, wenn man mehrere Nachrichten angeben könnte

...
"message": [
  ["TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"],
  ["Hier das angeforderte Bild"]
]

Alternativ kann man das auch mit dem set say erreichen

{
  "Bild": {
    "commands": "set $SELF say @$recipient Bild|senden",
    "message": "Moment, ich schicke Dir ein Bild...",
    "senden": {
      "message": "TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"
    }   
  }
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: PSI69 am 29 Oktober 2017, 17:31:17
Hi igami!

Bei Deinem ersten Codeschnipsel, war ich mir nicht sicher, ob das schon funktioniert, oder ob das nur eine Überlegung von Dir ist, das Modul zu erweitern/zu verändern. Ausprobiert habe ich es trotzdem...


    "Steckdose Schuppen Verlaufsdiagramm": {
      "commands": "set %TelegramBot% message %TelegramBot% $recipient",
      "message": [
        ["TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"],
        ["Hier das angeforderte Bild"],
        "(%me%) $message"
      ]
    },

... bringt mir im Telegram zwei 'ARRAY (0x...)' Zeilen zurück und nicht das Image.

    "Steckdose Schuppen Verlaufsdiagramm": {
      "commands": "set %TelegramBot% message %TelegramBot% $recipient",
      "message": [
        "TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}",
        "Hier das angeforderte Bild",
        "(%me%) $message"
      ]
    },

... bring 'Unknown command {plot...' im Telegram Interface.

Verwende ich das hier:

"Steckdose Schuppen Verlaufsdiagramm": {
      "commands": "set $SELF say @$recipient 'Steckdose Schuppen Verlaufsdiagramm|senden'",
      "message": "Steckdose Schuppen Verlaufsdiagramm",
      "senden": {
        "message": "TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"
      }   
    },

... wirkt das 'set $self say...' nicht, ich bekomme nur die erste 'message' (Steckdose Schuppen Verlaufsdiagramm) im Telegram.

Danke Peter
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: PSI69 am 29 Oktober 2017, 19:16:34
... läßt mich nicht in Ruhe, das Thema ;D

Das hier klappt; sprich das SVG landet beim richtigen Empfänger:
"Steckdose Schuppen Verlaufsdiagramm": {
      "message":
        "TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"
    },


Sobald ein zweiter Part '(%me%)' als Nachricht hinzukommt, hagelt es 'Unknown command...' Fehler im Telegram Interface.

@igami
Ich denke, das meintest Du mit Deinem ersten Codebeispiel - Du willst das Anpassen?

Danke und Tschau,
Peter
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 29 Oktober 2017, 19:23:12

defmod plot msgDialog {\
  "plot": {\
    "commands": "set $SELF say @$recipient plot|send",\
"message": "das war das Bild",\
"send": {\
  "message": "TelegramBot_MTYPE=cmdSend {plotAsPng('Waschkeller_washer_SVG')}"\
}\
  }\
}

das funktioniert.

Ja, das mit den verschachtelten messages will ich noch einbauen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 29 Oktober 2017, 20:07:17
Ich wollte heute endlich auch mal das System testen, aber ich bekomme es nicht hin. Ich habe auf meinem Test-System einen Roomate: rr_Etienne diesem kann ich auch mittels msg @rr_Etienne Hallo direkt eine Pushnachricht schicken. Allerdings wenn ich den trigger "test" des folgenden MetaDialog an den Bot sende passiert nix. Hier der Metadialog fast komplett aus der CommandRef kopiert. Habe extra mal aus %me% als trigger "test" gemacht:

Internals:
   CFGFN
   DEF        {
  "test": {
    "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         31
   NTFY_ORDER 50-meta_Dialog
   STATE      Initialized
   TRIGGER    abbrechen,beenden,test,zurück
   TYPE       msgDialog
   READINGS:
     2017-10-29 19:53:49   state           Initialized
Attributes:
   allowed    rr_Etienne
   evalSpecials me=test
TelegramBot=TelegramBot
#

Weiterhin wurde bei TelegramBot UTF8 auf 1 gesetzt und die Nachricht an den Bot ist in TelegramBot zu lesen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 30 Oktober 2017, 07:17:49
Werden denn Events für die Empfangene Nachricht im rr_Etienne Device erzeugt?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: PSI69 am 30 Oktober 2017, 11:03:06
Zitat von: igami am 29 Oktober 2017, 19:23:12

defmod plot msgDialog {\
  "plot": {\
    "commands": "set $SELF say @$recipient plot|send",\
"message": "das war das Bild",\
"send": {\
  "message": "TelegramBot_MTYPE=cmdSend {plotAsPng('Waschkeller_washer_SVG')}"\
}\
  }\
}

das funktioniert.

Ja, das mit den verschachtelten messages will ich noch einbauen.

Danke! Ich versuche das, komme aber erst morgen dazu :(
Peter
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 30 Oktober 2017, 18:20:45
Zitat von: igami am 30 Oktober 2017, 07:17:49
Werden denn Events für die Empfangene Nachricht im rr_Etienne Device erzeugt?

Ähm also ich glaube ich habe es noch nicht richtig verstanden. Im RESIDENT Device stehen die Nachrichte, die der Bot mir sendet und nicht die, die ich sende. Vermutlich ist das richtig, aber dann habe ich noch nicht verstanden, wie ich das Menü aufrufe. Ich dachte ich muss mit mit meinem Telegram dem Bot die Nachricht schicken, damit mir das Menü gezeigt wird. Oder ist das falsch?

Edit:
Also beim Resident steht, wenn ich zum Beispiel mittels msg @rr_Etienne test sende im Reading fhemMsgPush "test" drinnen. Ist das so richtig? Aber wenn ich selbst dem Bot eine Nachricht schicke, dann steht die nicht im Resident.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 31 Oktober 2017, 06:53:30
Zitat von: Amenophis86 am 30 Oktober 2017, 18:20:45
Also beim Resident steht, wenn ich zum Beispiel mittels msg @rr_Etienne test sende im Reading fhemMsgPush "test" drinnen. Ist das so richtig? Aber wenn ich selbst dem Bot eine Nachricht schicke, dann steht die nicht im Resident.
Dann passt da etwas noch nicht. Die Zuordnung der eingehenden Nachrichen wird auch von dem msgConfig device übernommen. Die Nachricht sollte unter dem Reading "fhemMsgRcvPush" auftauchen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 31 Oktober 2017, 06:57:37
Das msgConfig Device ist das globalmsg was automatisch angelegt wird?

Edit:
Also ich habe mir jetzt nochmal die Dokumentation von msg angeschaut und ich komme einfach damit nicht klar. Welches Attr muss ich wie setzen, dass die Nachrichten auch beim Resident ankommen, sowohl die er gesendet hat, als auch die für ihn bestimmten. Vermutlich hat es mit msgContactPush und msgRecipientPush zu tun, aber ich bekomme es nicht hin. Verstehe weder was im globalmsg noch was beim resident gesetzt werden muss. Sry.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 31 Oktober 2017, 08:51:50
Zitat von: Amenophis86 am 31 Oktober 2017, 06:57:37
Das msgConfig Device ist das globalmsg was automatisch angelegt wird?

Edit:
Also ich habe mir jetzt nochmal die Dokumentation von msg angeschaut und ich komme einfach damit nicht klar. Welches Attr muss ich wie setzen, dass die Nachrichten auch beim Resident ankommen, sowohl die er gesendet hat, als auch die für ihn bestimmten. Vermutlich hat es mit msgContactPush und msgRecipientPush zu tun, aber ich bekomme es nicht hin. Verstehe weder was im globalmsg noch was beim resident gesetzt werden muss. Sry.
Ich finde die Dokumentation vom msg auch nicht sonderlich gut ::)

Im ROOMMATE musst du das Attribut msgContactPush wie folgt setzen: <TelegramBot>:@<peerID>
Bsp:

attr rr_igami msgContactPush myTelegramBot:@12345678
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 31 Oktober 2017, 09:04:54
Ok, jetzt habe ich auch das Readings fhemMsgRcvPush. Danke, aber der Dialog wird noch nicht aufgerufen, obwohl ich "test" sende. Also schein ich noch einen Fehler zu haben.

Edit:
Was muss im Dialog im Internal STATE stehen? Aktuell steht dort: "rr_Etienne: test". Hier nochmal ein List des Dialog:
Internals:
   DEF        {
  "test": {
    "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         25
   NTFY_ORDER 50-meta_Dialog
   STATE      rr_Etienne: test
   TRIGGER    abbrechen,beenden,zurück,test
   TYPE       msgDialog
   READINGS:
     2017-10-31 09:03:39   state           rr_Etienne: test
Attributes:
   allowed    rr_Etienne
   evalSpecials me=test
TelegramBot=TelegramBot



EDIT:
Warum auch immer, aber es geht jetzt wohl doch. Jetzt muss ich mich mal mit dem Dialog bzw dem JSON auseinander setzen. Danke für die Hilfe bisher :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Smarti am 31 Oktober 2017, 09:41:08
Hallo,

ich habe die letzten paar Antworten nur überflogen, aber ich hatte auch so meine Schwierkigkeiten am Anfang bis der Dialog lief :)

Zum einen sind hier einige Abhängigkeiten drin (neben dem eigentlichen Messanger z.B. Telegramm): msg und roommates. Jemand der diese noch nicht verwendet tut sich schwer alles gleich zu erfassen. Hier wäre ein Hinweis im Wiki ganz hilfreich.

Damit der Dialog reagiert, muss jeder einzelne Dialog für die entsprechenden roommates auf "allowed" gesetzt werden. Wird häufig auch vergessen.

Die evalSpecials haben am einfach auch beim einen oder anderen Probleme gemacht (siehe Seite 2-3) ist im Wikie aber inzwischen ganz gut beschrieben:

attr myMsgConfig msgDialog_evalSpecials me=<Aktivierungswort bzw. -Nachricht>
TelegramBot=<Name des TelegramBot-device>

Wobei hier auch eine kleine Änderung stattgefunden hat aus "evalSpecials" wurde "msgDialog_evalSpecials"

Hoffe das hilft dem einen oder anderen weiter...
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 31 Oktober 2017, 10:53:38
Moin Smarti,
ZitatZum einen sind hier einige Abhängigkeiten drin (neben dem eigentlichen Messanger z.B. Telegramm): msg und roommates. Jemand der diese noch nicht verwendet tut sich schwer alles gleich zu erfassen. Hier wäre ein Hinweis im Wiki ganz hilfreich.
hab gerade das Wiki etwas überarbeitet  ;)

Der msg-Befehl sowie TelegramBot, Jabber und yowsup sind verlinkt. Leider gibt es zu ROOMMATE und GUEST keine Wiki-Artikel...
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Smarti am 31 Oktober 2017, 15:47:25
Habe ich auch feststellen müssen, bin allerdings hier fündig geworden: https://wiki.fhem.de/wiki/Weckautomation#Notwendige_Devices_anlegen (https://wiki.fhem.de/wiki/Weckautomation#Notwendige_Devices_anlegen)

Vielleicht kannst du ihn noch verlinken...

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: PSI69 am 31 Oktober 2017, 15:55:55
Hallo igami,

Dein Beispielcode hat funktioniert, was auch sonst... :D

Zitat von: igami am 29 Oktober 2017, 19:23:12

defmod plot msgDialog {\
  "plot": {\
    "commands": "set $SELF say @$recipient plot|send",\
"message": "das war das Bild",\
"send": {\
  "message": "TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"\
}\
  }\
}

das funktioniert.

Ja, das mit den verschachtelten messages will ich noch einbauen.

Auch als ich ihn so abgeändert hatte (ich dachte, die Leerzeichen sind die Ursache), hat das Plot Versenden auch geklappt:

defmod plot msgDialog {\
  "Steckdose Schuppen Verlaufsdiagramm": {\
    "commands": "set $SELF say @$recipient Steckdose Schuppen Verlaufsdiagramm|send",\
"message": "das war das Bild",\
"send": {\
  "message": "TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"\
}\
  }\
}


Als ich ihn so 'meinem' Außenanlagen-Dialog hinzugefügt habe, auch noch. Übersieh mal das mit den 3 IPCAM Images, das ist noch in 'Entwicklung'...

Internals:
   CFGFN
   DEF        {
  "Außenanlagen": {
    "message": [
      "{return('(Steckdose Schuppen Ein) ') if(ReadingsVal('%aussen_actor%', 'state', '') ne 'on')}",
      "{return('(Steckdose Schuppen Aus) ') if(ReadingsVal('%aussen_actor%', 'state', '') eq 'on')}",
      "{return('(Steckdose Schuppen Automatik Ein) ') if(ReadingsVal('%aussen_dummy%', 'state', '') ne 'on')}",
      "{return('(Steckdose Schuppen Automatik Aus) ') if(ReadingsVal('%aussen_dummy%', 'state', '') eq 'on')}",
      "(Steckdose Schuppen Verlaufsdiagramm) ",
      "(Send Picture Camera Eingang) ",
      "(Send Picture Camera Carport) ",
      "(Send Picture Camera Garten) ",
      "(abbrechen) ",
      "Menü Außenanlagen"
    ],
    "Steckdose Schuppen Ein": {
      "commands": "set Steckdose.EXT.Schuppen on",
      "message": [
        "(%me%) ",
        "Steckdose Schuppen ist Ein."
      ]
    },
    "Steckdose Schuppen Aus": {
      "commands": "set Steckdose.EXT.Schuppen off",
      "message": [
        "(%me%) ",
        "Steckdose Schuppen ist Aus."
      ]
    },
    "Steckdose Schuppen Automatik Ein": {
      "commands": "set Steckdose.EXT.Schuppen.Auto on",
      "message": [
        "(%me%) ",
        "Steckdose Schuppen Automatik ist Ein."
      ]
    },
    "Steckdose Schuppen Automatik Aus": {
      "commands": "set Steckdose.EXT.Schuppen.Auto off",
      "message": [
        "(%me%) ",
        "Steckdose Schuppen Automatik ist Aus."
      ]
    },
    "Steckdose Schuppen Verlaufsdiagramm": {
      "commands": "set $SELF say @$recipient Steckdose Schuppen Verlaufsdiagramm|send",
      "message": [
        "(%me%) ",
        "Steckdose Schuppen Verlaufsdiagramm"
      ],
      "send": {
        "message": "TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"
      }
    },
    "Send Picture Camera Eingang": {
      "commands": [
        "get IPCAM_Kamera_Eingang image",
        "set %TelegramBot% sendImage /opt/fhem/tmp/ipcam/IPCAM_Kamera_Eingang_snapshot.jpg"
      ],
      "message": "(%me%) $message"
    },
    "Send Picture Camera Carport": {
      "commands": [
        "get IPCAM_Kamera_Carport image",
        "set %TelegramBot% sendImage /opt/fhem/tmp/ipcam/IPCAM_Kamera_Carport_snapshot.jpg"
      ],
      "message": "(%me%) $message"
    },
    "Send Picture Camera Garten": {
      "commands": [
        "get IPCAM_Kamera_Garten image",
        "set %TelegramBot% sendImage /opt/fhem/tmp/ipcam/IPCAM_Kamera_Garten_snapshot.jpg"
      ],
      "message": "(%me%) $message"
    }
  }
}
   MSGCOMMAND msg push \@$recipients $message
   NAME       msgD_Aussen
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         2996
   NTFY_ORDER 50-msgD_Aussen
   STATE      rr_Peter: Steckdose Schuppen Verlaufsdiagramm
   TRIGGER    Außenanlagen
   TYPE       msgDialog
   READINGS:
     2017-10-31 15:29:56   rr_Peter_history Außenanlagen|Steckdose Schuppen Verlaufsdiagramm
     2017-10-31 15:29:56   state           rr_Peter: Steckdose Schuppen Verlaufsdiagramm
Attributes:
   alias      msgDialog Außenanlagen
   allowed    rr_Peter,rr_Yvonne
   evalSpecials aussen_actor=Steckdose.EXT.Schuppen
aussen_dummy=Steckdose.EXT.Schuppen.Auto
aussen_plot=SVG_FileLog_hc_Steckdose.EXT.Schuppen
   room       IS Messenger
   verbose    5


Jetzt habe ich nur Deinen 'plot' Dialog gelöscht und als Ergebnis klappt das Versenden nicht mehr. Hier Log Level 5:

2017.10.31 15:29:53 3: msg rr_Peter: ID=1509460193.50088.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Steckdose Schuppen Ein)

(Steckdose Schuppen Automatik Ein)

(Steckdose Schuppen Verlaufsdiagramm)
(Send Picture Camera Eingang)
(Send Picture Camera Carport)
(Send Picture Camera Garten)
(abbrechen)
Menü Außenanlagen'
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
2017.10.31 15:29:56 4: msgDialog (msgD_Aussen) triggered by "rr_Peter fhemMsgRcvPush: Steckdose Schuppen Verlaufsdiagramm"
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen)
    entering msgDialog_progress
        recipients: rr_Peter
        message:    Steckdose Schuppen Verlaufsdiagramm
        force:      0
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen)
    entering msgDialog_progress
        recipients: rr_Peter
        message:    Steckdose Schuppen Verlaufsdiagramm|send
        force:      1
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:29:56 3: msg rr_Peter: ID=1509460196.20109.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Q)
Steckdose Schuppen Verlaufsdiagramm'
2017.10.31 15:30:38 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify


Kaum füge ich dies hier wieder meiner Konfiguration hinzu, klappt das Versenden aus dem Aussenanlagen Dialog wieder!

Internals:
   CFGFN
   DEF        {
  "Steckdose Schuppen Verlaufsdiagramm": {
    "commands": "set $SELF say @$recipient Steckdose Schuppen Verlaufsdiagramm|send",
    "message": [
      "(%me%) ",
      "Steckdose Schuppen Verlaufsdiagramm"
    ],
    "send": {
      "message": "TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"
    }
  }
}
   MSGCOMMAND msg push \@$recipients $message
   NAME       plot
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         65914
   NTFY_ORDER 50-plot
   STATE      rr_Peter: send
   TRIGGER    Steckdose Schuppen Verlaufsdiagramm
   TYPE       msgDialog
   READINGS:
     2017-10-31 15:43:07   rr_Peter_history
     2017-10-31 15:43:07   state           rr_Peter: send
Attributes:
   allowed    rr_Peter,rr_Yvonne
   room       IS Messenger


Log:

2017.10.31 15:42:58 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
2017.10.31 15:42:58 4: msgDialog (msgD_Aussen) triggered by "rr_Peter fhemMsgRcvPush: Q"
2017.10.31 15:42:58 5: msgDialog (msgD_Aussen)
    entering msgDialog_progress
        recipients: rr_Peter
        message:    Q
        force:      0
2017.10.31 15:42:58 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:43:05 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
2017.10.31 15:43:05 4: msgDialog (msgD_Aussen) triggered by "rr_Peter fhemMsgRcvPush: Außenanlagen"
2017.10.31 15:43:05 5: msgDialog (msgD_Aussen)
    entering msgDialog_progress
        recipients: rr_Peter
        message:    Außenanlagen
        force:      0
2017.10.31 15:43:05 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:43:05 3: msg rr_Peter: ID=1509460985.45968.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Steckdose Schuppen Ein)

(Steckdose Schuppen Automatik Ein)

(Steckdose Schuppen Verlaufsdiagramm)
(Send Picture Camera Eingang)
(Send Picture Camera Carport)
(Send Picture Camera Garten)
(abbrechen)
Menü Außenanlagen'
2017.10.31 15:43:07 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
2017.10.31 15:43:07 4: msgDialog (msgD_Aussen) triggered by "rr_Peter fhemMsgRcvPush: Steckdose Schuppen Verlaufsdiagramm"
2017.10.31 15:43:07 5: msgDialog (msgD_Aussen)
    entering msgDialog_progress
        recipients: rr_Peter
        message:    Steckdose Schuppen Verlaufsdiagramm
        force:      0
2017.10.31 15:43:07 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:43:07 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:43:07 5: msgDialog (msgD_Aussen)
    entering msgDialog_progress
        recipients: rr_Peter
        message:    Steckdose Schuppen Verlaufsdiagramm|send
        force:      1
2017.10.31 15:43:07 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:43:07 3: msg rr_Peter: ID=1509460987.58281.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Q)
Steckdose Schuppen Verlaufsdiagramm'
2017.10.31 15:43:07 3: msg rr_Peter: ID=1509460987.62378.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='{plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}'
2017.10.31 15:43:07 3: msg rr_Peter: ID=1509460987.76551.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Q)
Steckdose Schuppen Verlaufsdiagramm'
2017.10.31 15:43:11 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify


Jetzt habe ich den 'plot' Dialog einfach disabled und es wird kein Plot mehr verschickt!

2017.10.31 15:51:42 3: get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Peter|everyone).* trigger : Alarmanlage
Außenanlagen
Jalousien
2017.10.31 15:51:42 3: msg rr_Peter: ID=1509461502.28767.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Alarmanlage) (Außenanlagen) (Jalousien)
(abbrechen)
(beenden)
Ich kann folgendes für dich tun:'
2017.10.31 15:51:42 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
2017.10.31 15:51:42 4: msgDialog (msgD_Aussen) triggered by "rr_Peter fhemMsgRcvPush: Q"
2017.10.31 15:51:42 5: msgDialog (msgD_Aussen)
    entering msgDialog_progress
        recipients: rr_Peter
        message:    Q
        force:      0
2017.10.31 15:51:42 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:51:44 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
2017.10.31 15:51:44 4: msgDialog (msgD_Aussen) triggered by "rr_Peter fhemMsgRcvPush: Außenanlagen"
2017.10.31 15:51:44 5: msgDialog (msgD_Aussen)
    entering msgDialog_progress
        recipients: rr_Peter
        message:    Außenanlagen
        force:      0
2017.10.31 15:51:44 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:51:44 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:51:44 3: msg rr_Peter: ID=1509461504.95368.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Steckdose Schuppen Ein)

(Steckdose Schuppen Automatik Ein)

(Steckdose Schuppen Verlaufsdiagramm)
(Send Picture Camera Eingang)
(Send Picture Camera Carport)
(Send Picture Camera Garten)
(abbrechen)
Menü Außenanlagen'
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
2017.10.31 15:51:47 4: msgDialog (msgD_Aussen) triggered by "rr_Peter fhemMsgRcvPush: Steckdose Schuppen Verlaufsdiagramm"
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen)
    entering msgDialog_progress
        recipients: rr_Peter
        message:    Steckdose Schuppen Verlaufsdiagramm
        force:      0
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen)
    entering msgDialog_progress
        recipients: rr_Peter
        message:    Steckdose Schuppen Verlaufsdiagramm|send
        force:      1
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:51:47 3: msg rr_Peter: ID=1509461507.16127.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Q)
Steckdose Schuppen Verlaufsdiagramm'
2017.10.31 15:52:36 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify


Hast Du eine Idee, warum der Aufruf aus meinem Dialog heraus nur klappt, wenn Dein von mir abgeändertes Dialogbeispiel zusätzlich in FHEM vorhanden und aktiv ist?

Tschau Peter
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 31 Oktober 2017, 16:03:51
Ich habe es nur so überflogen, aber was mir aufgefallen ist, dass es bei dir 3 Stufen sind: "Außenanlagen|Steckdose Schuppen Verlaufsdiagramm|send" du hast aber das "Außenanlagen" weggelassen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: PSI69 am 31 Oktober 2017, 16:08:37
Zitat von: igami am 31 Oktober 2017, 16:03:51
Ich habe es nur so überflogen, aber was mir aufgefallen ist, dass es bei dir 3 Stufen sind: "Außenanlagen|Steckdose Schuppen Verlaufsdiagramm|send" du hast aber das "Außenanlagen" weggelassen.

Oh Schitt; genau das war es natürlich.

Danke,
Peter
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 31 Oktober 2017, 23:20:01
Hey,
ich schon wieder :-)

Ich bin auf der suche nach einer Möglichkeit eine Mehrzeilige Nachrichten zu versenden.
Aktuell sieht es z.B. so aus:
{"Status": {
"message": [
"(Zurück:%me%) ",
"** Schalter **",
"TV: [Wohnzimmer.TV.Steckdose:state]",
"Schranklicht: [Wohnzimmer.Schranklicht:state]",
"Nachtlicht: [Schlafzimmer.Nachtlicht:state]",
"Waschmaschine: [Kueche.Waschmaschine:state]",
"FREI: [Steckdose.Laserdrucker:state]",
"Entfeuchter: [Jennifer.Entfeuchter:state]",
" ",
"** Türen **",
"Haustüre: nn",
"Balkontüre: [Wohnzimmer.Balkontuer:state]",
"Wohnzimmer: nn",
"Schlafzimmer: nn",
"Küche: nn",
"Arbeitszimmer: nn",
" ",
"** Fenster **",
"Wohnzimmer 1: [Wohnzimmer.Fenster1:state]",
"Wohnzimmer 2: nn",
"Schlafzimmer 1: [Schlafzimmer.Fenster1:state]",
"Schlafzimmer 2: nn",
"Küche: nn",
"Arbeitszimmer: [Jennifer.Fenster:state]",
" ",
"** Anwesend **",
"Handy Jenni: [Handy.Jennifer:state]",
"Schlüssel Jenni: nn",
"Handy Dominik: [Handy.Dominik:state]",
"Schlüssel Dominik: [Schluessel.Blau:state]",
"Schlüssel Grün: [Schluessel.Gruen:state]",
"Schlüssel Schwarz: [Schluessel.Schwarz:state]",
"Verschwunden1: [Schluessel.Fehlt1:state]",
" ",
"** FireTV **",
"Status: [FireTV:screen_state]"
]
}
}

Das geht doch sicher irgendwie besser oder?

Ich hab in dem Zusammenhang das Problem, das ich bei einem Bild ein längeren Untertitel mitgeben möchte.
"set %TelegramBot% sendImage \@$msgPeerId /opt/fhem/www/images/default/weather/".ReadingsVal('Wetter.Yahoo','icon','0').".png
".ReadingsVal('Wetter.Rusenschloss','condition','0')." bei
".ReadingsVal('Wetter.Heimbergstr.Temp','temperature','0')." (Gefühlt: ".ReadingsVal('Wetter.Rusenschloss','feelslike_c','0')."°C) bei ".ReadingsVal('Wetter.Heimbergstr.Temp','humidity','0')."%
UV-Index: ".ReadingsVal('Wetter.Heimbergstr.UV','uv_val','0')." Risiko: ".ReadingsVal('Wetter.Heimbergstr.UV','uv_risk','0')."
goo.gl/HWdhHo

Wind: ".ReadingsVal('Wetter.Rusenschloss','wind_speed','0'). "km/h
Regen: ".ReadingsVal('Wetter.Rusenschloss','rain','0')." l/s
Luftdruck: ".ReadingsVal('Wetter.Rusenschloss','pressure','0')." hPa (".ReadingsVal('Wetter.Rusenschloss','pressure_trend','0').")"

Das hatte ich in meinem alten Menü und würde es gerne übertragen. Leider klappt es nicht so einfach.
Allein das Bild wird schon nicht gesendet.

So sieht das Dialog aktuell aus. Wichtig hier: "Wetter jetzt"
{"Wetter": {
"message": [
"(Sonnenverlauf) ",
"(Wetter jetzt) ",
"(Wetter heute) ",
"(Wetter morgen) ",
"(Wetter 3-Tage) ",
"(Mond Infos) ",
"(Zurück:%me%) ",
"Wie kann ich dir dienen?"
],
"Sonnenverlauf": {
"message": [
"(zurück) ",
"Sonnenaufgang: [Astro:SunRiese]",
"Sonnenuntergang: [Astro:SunSet]",
"Tag dauer: [Astro:SunTransit]"
]
},
"Wetter jetzt": {
"message": [
"(zurück:Wetter) ",
"hier kommt noch was"
],
"commands": [
"set %TelegramBot% sendImage @$recipient /opt/fhem/www/images/default/weather/sunny.png"
]
},
"Wetter heute": {
"message": [
"(zurück) ",
"hier kommt noch was"
]
},
"Wetter morgen": {
"message": [
"(zurück) ",
"hier kommt noch was"
]
},
"Wetter 3-Tage": {
"message": [
"(zurück) ",
"hier kommt noch was"
]
},
"Mond Infos": {
"message": [
"(zurück:Wetter) ",
"Aufgang: [Wetter.Rusenschloss:moonrise]",
"Untergang: [Wetter.Rusenschloss:moonset]",
"Alter: [Wetter.Rusenschloss:moon_age]",
"Mondphase: [Wetter.Rusenschloss:moon_phase]"
]
},
"zurück": {
"match": "\/?zurück",
"commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;; return $2 ? $2 : $1;;)}"
}
}
}


Kann mir hier jemand helfen?
Grüße am Feiertag
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 01 November 2017, 08:49:07
ZitatIch bin auf der suche nach einer Möglichkeit eine Mehrzeilige Nachrichten zu versenden.
Aktuell sieht es z.B. so aus:
Moin Flipper,
"** Türen **", wird bei mir gar nicht angezeigt.
Und bei " ", verabschidet sich mein FHEM  :(
TelegramBot kennt aber \n für einen Zeilenumbruch. Kannst auch mehrere hintereinander hängen...
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 01 November 2017, 08:49:46
Zitat von: Flipper92 am 31 Oktober 2017, 23:20:01
Das geht doch sicher irgendwie besser oder?
Was meinst du denn mit besser?

Zitat von: Flipper92 am 31 Oktober 2017, 23:20:01
Allein das Bild wird schon nicht gesendet.
Das liegt daran, dass $recipient deinen ROOMMATE Namen enthält und nicht deine Telegram ID.

Ich wollte es noch so bauen, dass man mehrere Nachrichten auf einmal versenden kann. Dann kann durch TelegramBot_MTYPE auch ein Bild versendet werden.
Aber ich muss erst mal schauen, dass ich damit anfange.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 01 November 2017, 08:59:57
@igami: Der Logeintrag vom FHEM-Crash:
Nested quantifiers in regex; marked by <-- HERE in m/^fhemMsgPush: (abbrechen|zurück:Q)
Dreambox: abwesend

** <-- HERE  Schalter **

Die Leerzeile ist wohl " ",
Vielleicht kannst Du was damit anfangen...
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 01 November 2017, 10:05:28
Zitat von: binford6000 am 01 November 2017, 08:59:57
Vielleicht kannst Du was damit anfangen...
VG Sebastian
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 01 November 2017, 10:38:40
Zitatder geht bei mir einwandfrei

Der verursacht einen FHEM-Crash bei mir. Liegt aber am Modul 22_HOMEMODE.pm welches ich auch im Einsatz habe:
Nested quantifiers in regex; marked by <-- HERE in m/^fhemMsgPush: ** <-- HERE  test **
Zeile 2$/ at ./FHEM/22_HOMEMODE.pm line 989.

Und zwar in dieser Regex:
{
  next if (!grep /^$_$/,@{$events});
  $mode = $_;
}

Hat also erstmal nix mit msgDialog zu tun...
VG Sebastian


Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Esjay am 02 November 2017, 12:01:53
Hallo zusammen,
ich hänge mich mal an. Schön das es jetzt das Modul gibt. Aber alter Besen ist das Umfangreich. Ich glaube wenn mann keine Programmierkenntnisse hat wird es echt schwierig.
Ich habe jetzt schon öffter angesetzt, und habe jetzt so ein bisschen den Überblick verloren. Ziel ist es irgendwann mal richtung Design in #100 von binford6000.

Vll mag ja nochmal jemand drauf gucken. Bisherige definitionen.

list myMsgConfig
Internals:
   CFGFN
   NAME       myMsgConfig
   NOTIFYDEV  TYPE=(Jabber|TelegramBot|yowsup)
   NR         78703
   NTFY_ORDER 50-myMsgConfig
   STATE      initialized
   TYPE       msgConfig
   READINGS:
     2017-11-02 11:46:00   fhemMsgRcvPush  M
     2017-11-02 11:46:00   fhemMsgRcvPushGw TelegramBot
     2017-11-02 11:13:05   fhemMsgState    initialized
Attributes:
   comment    FHEM Global Configuration for command 'msg'
   evalSpecials me=M
TelegramBot=TelegramBot
   group      Global
   msgContactPush TelegramBot:@156XXXXXX
   msgType    text
   room       msg
   stateFormat fhemMsgState
   userattr   evalSpecials:textField-long
   verbose    3


list meta_Dialog

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."
    ]
  }
}
   MSGCOMMAND msg push \@$recipients $message
   NAME       meta_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         78230
   NTFY_ORDER 50-meta_Dialog
   STATE      Initialized
   TRIGGER    abbrechen,beenden,%me%
   TYPE       msgDialog
   READINGS:
     2017-11-02 10:59:32   state           Initialized
Attributes:
   allowed    everyone
   room       msg


list sentMsgIdByPeerId

Internals:
   CFGFN
   DEF        .+: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);
}
   NAME       sentMsgIdByPeerId
   NR         78323
   NTFY_ORDER 50-sentMsgIdByPeerId
   REGEXP     .+:sentMsgId.+
   STATE      active
   TYPE       notify
   READINGS:
     2017-11-02 11:01:55   state           active
Attributes:
   devStateIcon {ReadingsVal($name, "state", "inactive") eq "active" ? ".*:ios-on-blue:inactive" : ".*:ios-off:active"}
   icon       audio_mic
   room       msg


Zusätzlich habe ich bei meinem Roommate folgendes gesetzt

msgContactPush

TelegramBot:@1568XXXX


Zum Testen habe ich den Waschmaschinendialog eingefügt.

Wenn ich jetzt M in den Chat schicke, werden auch die Readings im Roommate und im myMsgConfig Device aktualisiert. Passieren tut allerdings rein gar nichts.

Sieht jemand den Fehler, und kann mich aufklären?

Mir ist so glaube ich auch ein Fehler im Wiki aufgefallen unter dem Punkt "msgConfig". Fehlt da nicht der Zeilenumbruch hinter "me=<Aktivierungswort bzw. -Nachricht>"?

Grüße
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag 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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Esjay am 02 November 2017, 15:05:16
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 02 November 2017, 17:11:49
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"
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 02 November 2017, 17:19:44
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 ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 02 November 2017, 18:41:07
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.

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Esjay am 02 November 2017, 20:37:01
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 02 November 2017, 20:43:56
So spontan fällt mir dazu Nichts ein
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 02 November 2017, 22:26:28
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 ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Esjay am 02 November 2017, 22:53:04
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

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag 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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 03 November 2017, 05:10:29
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 (https://apps.timwhitlock.info/emoji/tables/unicode) zu finden.

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 03 November 2017, 05:17:11
"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

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 03 November 2017, 09:00:05
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.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 03 November 2017, 09:37:11
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Esjay am 03 November 2017, 10:34:43
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 (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ß
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 03 November 2017, 10:42:16
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).
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 03 November 2017, 10:52:28
ZitatNeues Problem irgendetwas lässt mein FHEM abstürzen folgender Fehler im Log:
...
Hier ein list des Meta und Test Dialogs:
Warum benutzt Du nicht den originalen Meta-Dialog aus dem wiki?
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')))) . ') ')}",\
      "(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."\
    ]\
  }\
}

attr meta_Dialog DbLogExclude .*
attr meta_Dialog allowed everyone
attr meta_Dialog room msg

Ich habe bei mir lediglich die Messages geändert.
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 03 November 2017, 10:56:43
Ich nutze den original Meta Dialog aus dem Wiki, der Fehle kommt scheinbar aus dem Test Dialog.

Wenn ich es richtig gesehen habe, dann soll es doch aber auch so sein, dass es quasi den meta Dialog gibt und dann unter Dialoge, wie die Waschmaschine. Und um diese Unter Dialoge zu erstellen und zu verstehen habe ich mir den Test Dialog gebastelt.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Esjay am 03 November 2017, 17:14:32
Hallo Igami,
kannst du mir sagen, wie du in deinem Waschmaschinen Dialog die Uhrzeit übergibst?
Unter programmieren wählst du ja die Uhrzeit, und über set %controlUnit% time $message setzt du sie ja. Allerdings unter einem anderen Trigger?

Ich wollte das selbe mit der Saugstufe meines Staubsaugerroboters tun, sehe aber den Zusammenhang deiner beiden Trigger nicht. Kannst du mir einen Tipp geben?

defmod DialogRoberta msgDialog {\
"Roberta": {\
"message": [\
"(Roberta Start) ",\
"(Roberta Stopp) ",\
"(Roberta Laden) ",\
"(Roberta Pause) ",\
"(Roberta Status) ",\
"(Roberta Störungen) ",\
"(Roberta Saugstufe) ",\
"(abbrechen) ",\
"Hier das Menü für Roberta"\
],\
"Roberta Start": {\
"commands": "set Roberta start",\
"message": [\
"(%me%)  ",\
"Ich fahre jetzt los"\
]\
},\
"Roberta Stopp": {\
"commands": "set Roberta stop",\
"message": [\
"(%me%)  ",\
"Ich habe das Staubsaugen abgebrochen"\
]\
},\
"Roberta Laden": {\
"commands": "set Roberta charge",\
"message": [\
"(%me%)  ",\
"Ich fahre zurück zur Station"\
]\
},\
"Roberta Pause": {\
"commands": "set Roberta pause",\
"message": [\
"(%me%)  ",\
"Ich habe das Staubsaugen unterbrochen"\
]\
},\
"Roberta Status": {\
"commands": "set TelegramBot msg Batterie Level = [Roberta:batteryLevel]% \nState = [Roberta:state] \nLetzte Reinigung = [Roberta:history_0]\nFilter [:Roberta:consumables_filter]\nHauptbürste [Roberta:consumables_main_brush]\nSensoren [Roberta:consumables_sensors]\nSeitenbürste [Roberta:consumables_side_brush] ",\
"message": [\
"(%me%)  ",\
"Hier ein paar Infos zu mir"\
]\
},\
"Roberta Störungen": {\
"commands": "set TelegramBot msg Störung [Roberta:error]\nFehlercode [Roberta:error_code]",\
"message": [\
"(%me%)  ",\
"Ich habe folgende Störungen"\
]\
},\
"Roberta Saugstufe": {\
"message": [\
"( 10 | 20 | 30 | 40 ) ",\
"( 60 | 70 | 80 | 90 ) ",\
"(%me%)  ",\
"Bitte die mögliche Saugstufe einstellen"\
]\
},\
"Saugstufe": {\
"match": "[01-99]",\
"commands": "set Roberta fan_power $message",\
"message": [\
"(%me%)  ",\
"Saugstufe auf xx gestellt"\
]\
}\
}\
}
attr DialogRoberta allowed everyone
attr DialogRoberta room msg

setstate DialogRoberta 2017-11-03 17:06:59 state Initialized




Grüße
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 03 November 2017, 19:12:10
Ist doch in dem Trigger in dem sie eingegeben wird. Im vorherigen wird das Keyboard dafür bereitgestellt.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Esjay am 03 November 2017, 19:51:34
Zitat von: igami am 03 November 2017, 19:12:10
Ist doch in dem Trigger in dem sie eingegeben wird. Im vorherigen wird das Keyboard dafür bereitgestellt.

Sry, aber ich kann dir nicht folgen!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 03 November 2017, 19:55:48
Dein Match ist falsch. Bitte mit regex befassen. Morgen kann ich dir mehr sagen, wenn ich nicht nur über tapatalk schreibe
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Esjay am 03 November 2017, 20:15:24
Zitat von: igami am 03 November 2017, 19:55:48
Dein Match ist falsch. Bitte mit regex befassen. Morgen kann ich dir mehr sagen, wenn ich nicht nur über tapatalk schreibe
Ich danke dir. Wahrscheinlich ist mir noch nicht ganz klar, was "Gesamte Nachricht bedeutet".
Habe ich eigentlich getan. Zumindest bekomme ich ein match auf 101regex für sämtliche Zahlen.
Aber gut, dann mache ich für heute Schluss.

Grüße
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 03 November 2017, 21:56:20
Ich hatte heute Nachmittag wieder einen Crash:
Unmatched ( in regex; marked by <-- HERE in m/%( <-- HERE !%/ at ./FHEM/75_MSG.pm line 1728.
Ich denke zu dieser Zeit war die Mobilfunkverbindung schlecht und ist ständig gewechselt zwischen Edge und LTE.
Kann sein, dass eine Message dabei unvollständig angekommen ist und somit der Fehler ausgelöst wurde.

@ Amenophis86: Könnte das bei dir auch so gewesen sein?
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 03 November 2017, 22:03:10
Thema 1:

Zitat von: igami am 02 November 2017, 22:26:28
Klar geht das

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

Sollte so funktionieren, getestet habe ich es aber nicht ;)

Hab es etwas angepasst:
"Update Check": {
  "message": [
"(Zurück:%me%) ",
"{'UpdateCheck: '. fhem('update check')}"
]
}

Es funktioniert.
Bei mir ist es noch in einem Dialog verschachtelt, aber so könnte es eventuell ins Wiki als Anwendungsbeispiel.

Interesant finde ich, das es so glappt, wenn ich aber das zurück tausche, also so:
"Update Check": {
  "message": [
"{'UpdateCheck: '. fhem('update check')}",
"(Zurück:%me%) ",
]
}

dann bekomme ich keinen Button mit Zurück geliefert, sondern nur den Text (Zurück:%me%)".

--------
Thema 2:

Ich komm leider nicht weiter (also es wird kein Bild versendet) und die beispiele hier im Forum bringen mich leider auch nicht weiter:
"Wetter jetzt": {
"message": [
"(zurück:Wetter) ",
"hier kommt noch was"
],
"commands": [
"set %TelegramBot% sendImage /opt/fhem/www/images/default/weather/sunny.png"
]
}


wo sitzt mein Fehler?
Auch wenn ich direkt meine ID eingebe kommt kein Bild an.

Edit: Wenn ich jedoch anstelle von %TelegramBot% nur TelegramBot verwende geht es. Sehr komisch.

-----
Thema 3:

Oh, eine Sache hab ich noch:
Ich verwende in manchen bereichen den Befehl (als Beispiel):
set TelegramBot message \@-1*******3 Heute ist GelberSack!"

Da ich Inline Verwende bekomme ich diese Nachricht nicht als neuer Befehl, sondern als ersatz auf eine Alte.
Ich hab das Problem wie folgt gelößt:
attr message2queryEditInline disable 1;
set TelegramBot message \@-1*******3 Heute ist GelberSack!";
attr message2queryEditInline disable 0;

Gibt es da was besseres? wäre das was fürs Wiki?

Grüße.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 04 November 2017, 00:31:30
Zitat von: binford6000 am 03 November 2017, 21:56:20
Ich hatte heute Nachmittag wieder einen Crash:
Unmatched ( in regex; marked by <-- HERE in m/%( <-- HERE !%/ at ./FHEM/75_MSG.pm line 1728.
Ich denke zu dieser Zeit war die Mobilfunkverbindung schlecht und ist ständig gewechselt zwischen Edge und LTE.
Kann sein, dass eine Message dabei unvollständig angekommen ist und somit der Fehler ausgelöst wurde.

@ Amenophis86: Könnte das bei dir auch so gewesen sein?
VG Sebastian

An der Vernunft kann es eigentlich nicht liegen. Aber das irgendwas nicht komplett ankam ist gut möglich. Glaube der Fehler trat auf, wenn FHEM einen Moment brauchte, bis wieder gepollt wurde von Telegrambot. Er lässt sich aber schwer reproduzieren, weil ich jedes Mal den kompletten Dialog löschen musste um FHEM wieder nutzen zu können. Sonst ist es beim Neustart direkt wieder gestorben nach kurzer Zeit.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 04 November 2017, 09:59:18

...
"Roberta Saugstufe": {\
"message": [\
"(10|20|30|40) ",\
"(60|70|80|90) ",\
"(%me%)  ",\
"Bitte die mögliche Saugstufe einstellen"\
]\
},\
"Saugstufe": {\
"match": "[1-9]0",\
...

So sollte es funktionieren. Die Leerzeichen vor und nach dem Keyboard hatten mir anfangs mal Probleme beseitigt und sind nicht mehr erforderlich.

Zitat von: Flipper92 am 03 November 2017, 22:03:10
Interesant finde ich, das es so glappt, wenn ich aber das zurück tausche, also so:
"Update Check": {
  "message": [
"{'UpdateCheck: '. fhem('update check')}",
"(Zurück:%me%) ",
]
}

dann bekomme ich keinen Button mit Zurück geliefert, sondern nur den Text (Zurück:%me%)".
Die Keyboards müssen immer zuerst stehen, das liegt an der TelegramBor Syntax.

Zitat von: Flipper92 am 03 November 2017, 22:03:10
Edit: Wenn ich jedoch anstelle von %TelegramBot% nur TelegramBot verwende geht es. Sehr komisch.
Die %% sind ja Ersetzungen, wenn die nicht gepflegt sind steht da auch nur %TelegramBot% was es ja als device nicht gibt.

Zitat von: Flipper92 am 03 November 2017, 22:03:10
Oh, eine Sache hab ich noch:
Ich verwende in manchen bereichen den Befehl (als Beispiel):
set TelegramBot message \@-1*******3 Heute ist GelberSack!"

Da ich Inline Verwende bekomme ich diese Nachricht nicht als neuer Befehl, sondern als ersatz auf eine Alte.
Ich hab das Problem wie folgt gelößt:
attr message2queryEditInline disable 1;
set TelegramBot message \@-1*******3 Heute ist GelberSack!";
attr message2queryEditInline disable 0;

Gibt es da was besseres? wäre das was fürs Wiki?
Ich habe mich von den inline Keyboards verarbschiedet. Aber du könntest für die Benachrichtigung des Gelben Sackes auch einen Dialog nutzen, damit das cmdAlias funktioniert. Soweit die Theorie ::)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 05 November 2017, 20:52:57
Zitat von: igami am 04 November 2017, 09:59:18
Die %% sind ja Ersetzungen, wenn die nicht gepflegt sind steht da auch nur %TelegramBot% was es ja als device nicht gibt.
Oh, war wieder ein fehler beim "myMsgConfig" hatte dort noch das alte evalSpecials. nun geändert in msgDialog_evalSpecials.

Zitat von: igami am 04 November 2017, 09:59:18
Ich habe mich von den inline Keyboards verarbschiedet. Aber du könntest für die Benachrichtigung des Gelben Sackes auch einen Dialog nutzen, damit das cmdAlias funktioniert. Soweit die Theorie ::)
Das cmdAlias funktioniert ja super ::) aber es soll ja nicht bei allen Nachrichten greifen.

Danke für die Hilfe und auch das Modul.
Das Menü ist schon super.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: RoBra81 am 06 November 2017, 11:53:52
Hallo,

ich bin am Wochenende auf das Modul gestoßen und musste es gleich mal ausprobieren, um meine Dialoge abzulösen.

Zitat von: Esjay am 02 November 2017, 20:37:01
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.

Das würde mich auch interessieren. Daher habe ich einfach mal angefangen, zu experimentieren:


{"Lampen einschalten":{
    "message":[
    "{return(LampsOff())}"
    ]
}
}


mit

sub LampsOff
{
  my @lights = devspec2array('.*\.LI\..*:FILTER=state!=on:FILTER=TYPE!=DOIF:FILTER=TYPE!=notify');;
  my $msg = 'Es sind folgende Lichter ausgeschaltet:
  ';

  if (@lights > 0 and defined($defs{$lights[0]})){
    foreach (@lights){
      $msg .= '('.$_.')
      ';
    }
  }else{
    $msg = 'Es sind alle Lichter eingeschaltet.';
  }
  return $msg;
}


in der myUtils liefert eine Nachricht mit der Liste der ausgeschalteten Lampen. Leider aber eben als eine Nachricht und nicht als n Menüpunkte (siehe Anhang). Ich denke, wenn man das Modul dazu bewegen könnte, daraus Menüpunkte zu machen, müsste es doch mittels Regexp im match-Part und Textvariable im command auch möglich sein, auf die durch Anklicken erzeugte Nachricht das entsprechende Licht einzuschalten?!

Ronny
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: RoBra81 am 06 November 2017, 12:02:54
So geht das mit den Menüs erstmal:

{"Lampen einschalten":{
    "message":[
    "{return(LampsOff())}",
    " Folgende Lampen sind aus"
    ]
}
}


mit

sub LampsOff
{
  my @lights = devspec2array('.*\.LI\..*:FILTER=state!=on:FILTER=TYPE!=DOIF:FILTER=TYPE!=notify');
  my $msg = '';

  if (@lights > 0 and defined($defs{$lights[0]})){
    foreach (@lights){
      $msg .= '('.$_.') ';
    }
  }else{
    $msg = 'Es sind alle Lichter eingeschaltet.';
  }
  return $msg;
}


Ich bleibe dran und berichte, wenn ich schalten kann :-)

Ronny
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: RoBra81 am 06 November 2017, 15:50:45
So,

ich habe mir nun mal einen dynamischen Dialog für das Schalten meiner Lampen gebaut. Dieser nutzt das Inline Menü um einen Klartextnamen zur jeweiligen Lampe anzuzeigen, könnte aber auch auf das andere Menü umgebaut werden, dann wird allerdings der FHEM-Name angezeigt.

Die Dialog:

{
"Beleuchtung": {
"message": [
"(Lampen einschalten) ",
"(Lampen ausschalten) ",
"(Lampen schalten) ",
"(abbrechen) ",
"Lampen schalten:"
],
"Lampen einschalten": {
"message": [
"{return(lampsOff())}"
],
"Einschalten": {
"match": ".*.LI..*",
"commands": [
"set $message on",
"set $SELF say @$recipient Beleuchtung|Lampen einschalten"
]
},
"Aktualisieren": {
"commands": [
"set $SELF say @$recipient Beleuchtung|Lampen einschalten"
]
},
"Zurück": {
"commands": [
"set $SELF say @$recipient Beleuchtung"
]
}
},
"Lampen ausschalten": {
"message": [
"{return(lampsOn())}"
],
"Ausschalten": {
"match": ".*.LI..*",
"commands": [
"set $message off",
"set $SELF say @$recipient Beleuchtung|Lampen ausschalten"
]
},
"Aktualisieren": {
"commands": [
"set $SELF say @$recipient Beleuchtung|Lampen ausschalten"
]
},
"Zurück": {
"commands": [
"set $SELF say @$recipient Beleuchtung"
]
}
},
"Lampen schalten": {
"message": [
"{return(lamps())}"
],
"Schalten": {
"match": ".*.LI..*",
"commands": [
"set $message",
"set $SELF say @$recipient Beleuchtung|Lampen schalten"
]
},
"Aktualisieren": {
"commands": [
"set $SELF say @$recipient Beleuchtung|Lampen schalten"
]
},
"Zurück": {
"commands": [
"set $SELF say @$recipient Beleuchtung"
]
}
}
}
}


Und die benötigten Funktionen in der myUtils:

sub lampsOff
{
  my @lights = devspec2array('.*\.LI\..*:FILTER=state!=on:FILTER=TYPE!=DOIF:FILTER=TYPE!=notify');
  my $msg = '';

  if (@lights > 0 and defined($defs{$lights[0]})){
    foreach (@lights){
      $msg .= '('.AttrVal($_,"room","").' '.substr($_, 9).':'.$_.') ';
    }
    $msg .= '(Aktualisieren) (Zurück) (Hauptmenü:Wilhelm) Folgende Lampen sind aus:';
  }else{
    $msg = '(Aktualisieren) (Zurück) (Hauptmenü:Wilhelm) Es sind alle Lichter eingeschaltet.';
  }
  return $msg;
}

sub lampsOn
{
  my @lights = devspec2array('.*\.LI\..*:FILTER=state!=off:FILTER=TYPE!=DOIF:FILTER=TYPE!=notify');
  my $msg = '';

  if (@lights > 0 and defined($defs{$lights[0]})){
    foreach (@lights){
      $msg .= '('.AttrVal($_,"room","").' '.substr($_, 9).':'.$_.') ';
    }
    $msg .= '(Aktualisieren) (Zurück) (Hauptmenü:Wilhelm) Folgende Lampen sind an:';
  }else{
    $msg = '(Aktualisieren) (Zurück) (Hauptmenü:Wilhelm) Es sind alle Lichter ausgeschaltet.';
  }
  return $msg;
}

sub lamps
{
  my @lights = devspec2array('.*\.LI\..*:FILTER=TYPE!=DOIF:FILTER=TYPE!=notify');
  my $msg = '';

  if (@lights > 0 and defined($defs{$lights[0]})){
    foreach (@lights){
      $msg .= '('.AttrVal($_,"room","").' '.substr($_, 9).' '.((ReadingsVal($_,'state','') eq 'off')?' ist aus':' ist an').':'.$_.((ReadingsVal($_,'state','') eq 'off')?' on':' off').') ';
    }
    $msg .= '(Aktualisieren) (Zurück) (Hauptmenü:Wilhelm) Welche Lampe soll geschaltet werden:';
  }
  return $msg;
}


Leider funktioniert das automatische aktualisieren mit sleep nicht, sodass ich erstmal einen entsprechenden Knopf eingebaut habe. Außerdem will ich %me% noch als Parameter an die drei subs übergeben, um dies nicht hardcoded da drin zu haben.

Der Dialog ist sicherlich noch nicht perfekt, kann aber bestimmt als Grundlage für andere dynamische Dialoge dienen...

Ronny
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 06 November 2017, 15:53:59
Das sieht doch schonmal nicht schlecht aus :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: outhouse am 07 November 2017, 08:03:23
Hallo

Super Modul. Funktioniert soweit alles bestens.

FS20-Module, die mit "toggle" geschaltet werden, zeigen leider beim state kein "on" oder "off", sondern "toggle" an.

Mit dem Code
"Weg": {
"commands": [
"{fhem(\"set VP_LichtWeg on\") if(ReadingsVal('VP_LichtWeg', 'state', '') eq 'off');;}",
"{fhem(\"set VP_LichtWeg off\") if(ReadingsVal('VP_LichtWeg', 'state', '') eq 'on');;}"],
"message": ["(%me%) ", "Weg: [VP_LichtWeg:state]"]
},


passiert leider folgendes:

Problem 1
Licht Weg wird eingeschaltet und sofort wieder ausgeschaltet. Heisst, er arbeitet alles ab (eigentlich logisch).
Gibt es eine Möglichkeit mit der "if-else-Formel" zu schalten oder muss ich das über eine "Sub machen"?

Problem2
Lasse ich Teil 2 des "commands" weg, zeigt mir die "message" aber immer noch den Status "off" an. Hier vermute ich, dass der Script für die "message" zu schnell abgearbeitet. Habe versucht, mittels "sleep" eine Pause einzuführen. Funktioniert leider auch nicht.

Gruss

Chris
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 07 November 2017, 19:00:15
Zitat von: outhouse am 07 November 2017, 08:03:23
Gibt es eine Möglichkeit mit der "if-else-Formel" zu schalten oder muss ich das über eine "Sub machen"?
Du kannst doch das FHEM IF Verwenden

IF ([VP_LichtWeg:state] eq 'off') (set VP_LichtWeg on) ELSE (set VP_LichtWeg off)


Zitat von: outhouse am 07 November 2017, 08:03:23
Lasse ich Teil 2 des "commands" weg, zeigt mir die "message" aber immer noch den Status "off" an. Hier vermute ich, dass der Script für die "message" zu schnell abgearbeitet. Habe versucht, mittels "sleep" eine Pause einzuführen. Funktioniert leider auch nicht.
Da FS20 keinen Rückkanal hat (soweit ich weiß) sollte der state direkt beim Kommando gesetzt werden. Was sagt denn dein Eventmonitor dazu?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: outhouse am 08 November 2017, 11:21:33
Zitat von: igami am 07 November 2017, 19:00:15
Du kannst doch das FHEM IF Verwenden

IF ([VP_LichtWeg:state] eq 'off') (set VP_LichtWeg on) ELSE (set VP_LichtWeg off)


Da hätte ich auch selber drauf kommen können. Hatte wohl "Tomaten vor den Augen". Funktioniert einwandfrei!

Da FS20 keinen Rückkanal hat (soweit ich weiß) sollte der state direkt beim Kommando gesetzt werden. Was sagt denn dein Eventmonitor dazu?

Durch den IF-Befehl funktioniert jetzt auch die "message" für die FS20. Bei Enocean muss ich anstelle des "state" den "channel0" abfraagen. So funktioniert es auch bei diesen.

Danke für die Hilfe!

Chris
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 08 November 2017, 11:45:44
Habe eine Verständnisfrage. Beim Waschmaschinencode gibt es diesen Teil:
    "programmieren": {
      "message": [
        "(bestätigen|abbrechen) ",
        "(00:00:00_00|00:30:00_30|01:00:01_00|01:30:01_30|02:00:02_00|02:30:02_30) ",
        "(03:00:03_00|03:30:03_30|04:00:04_00|04:30:04_30|05:00:05_00|05:30:05_30) ",
        "(06:00:06_00|06:30:06_30|07:00:07_00|07:30:07_30|08:00:08_00|08:30:08_30) ",
        "(09:00:09_00|09:30:09_30|10:00:10_00|10:30:10_30|11:00:11_00|11:30:11_30) ",
        "(12:00:12_00|12:30:12_30|13:00:13_00|13:30:13_30|14:00:14_00|14:30:14_30) ",
        "(15:00:15_00|15:30:15_30|16:00:16_00|16:30:16_30|17:00:17_00|17:30:17_30) ",
        "(18:00:18_00|18:30:18_30|19:00:19_00|19:30:19_30|20:00:20_00|20:30:20_30) ",
        "(21:00:21_00|21:30:21_30|22:00:22_00|22:30:22_30|23:00:23_00|23:30:23_30) ",
        "Wann soll die Wäsche fertig sein?",
        "Bitte Uhrzeit in HH:MM angeben.",
        "Aktuell ist [%controlUnit%:time] Uhr eingestellt."
      ],
      "Uhrzeit": {
        "match": "([0-1][0-9]|2[0-3])[:_][0-5][0-9]",
        "commands": [
          "{my $time = '$message';; $time =~ s/_/:/;; fhem(\"set %controlUnit% time $time\");;}",
          "set $SELF say @$recipient Waschmaschine|programmieren|bestätigen"
        ]
      },


Warum ist der Teil Uhrzeit ... noch im String des Teil programmieren drinnen? Was es macht habe ich verstanden, nur nicht, wieso es noch im oberen Teil integriert ist nicht.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 08 November 2017, 12:13:47
Weil man erst auf programmieren geht und dann die Uhrzeit eingibt. Ist also die nächste Stufe im Dialog.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 08 November 2017, 13:15:30
Und was wäre der Nachteil, wenn ich den Uhrzeitteil jetzt eigenständig setzen würde und nicht als Unterabschnitt von programmieren? Weil er dann immer reagieren würde, wenn ich eine Uhrzeit schreibe?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 08 November 2017, 16:52:38
Die Uhrzeit wird dann immer ausgewertet, wenn du dich auf der vorherigen Stufe befindest. Du kannst es auch so bauen, dass sie immer ausgewertet wird.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 08 November 2017, 20:42:01
Ok, das dachte ich mir, war mir allerdings nicht sicher. Danke für die Info.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: hoods am 11 November 2017, 13:54:00
Hallo zusammen,

erstmal vielen Dank für das Modul und das Engagement hier in dem Forum!

Ich benutze bisher die ChatBot Lösung hier aus dem Forum und bin dann kürzlich über msgDialog gestolpert - macht natürlich optisch mehr her und ist flexibler :). Leider scheitere ich bereits bei der Basis Config und brauche mal einen Schubser.
Zur Config:

robot soll das Keyword sein um die Dialoge aufzurufen, teleBot heisst das Fhem TelegramBot Device.

defmod globalMsg msgConfig
attr globalMsg userattr evalSpecials:textField-long
attr globalMsg comment FHEM Global Configuration for command 'msg'
attr globalMsg evalSpecials me=robot TelegramBot=teleBot
attr globalMsg group Global
attr globalMsg msgContactPush teleBot

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


Devices meta_Dialog, message2queryEditInline, msgPushReceived, sentMsgIdByPeerId aus Referenz bzw. aus diesem Thread verwendet.
ROOMMATE vorab eingerichtet.

Was funktioniert:
- messages via teleBot direkt versenden an mich selbst als auch unsere Familiemgruppe (wird in einigen notifies, DOIFs genutzt)
- messages via "msg Hallo" versenden funktioniert

ROOMMATE readings fhemMsgPushReceived, fhemMsgPush werden mit aktuellen Infos gefüllt.

Ich habe leider einige Std gebraucht zu realisieren, dass utf8Special notwendig ist, denn wenn nicht gesetzt funktioniert die Benachrichtigungslogik so halb und es erscheinen mit verbose 0 (default) eben keine Fehler im Log. Soll heissen, die Nachrichten wurden auf meinem rpi2 stark verzögert versand und noch seltsamer, in den o.g. readings stand was in Telegram hätte erscheinen sollen aber der Telegram Client auf dem Mac oder auch Handy hat nichts angezeigt .... vielleicht hilft das anderen Neulingen die "Lernkurve" zu verkürzen.

Wo ich im Moment hänge:
1. Gebe ich im Telegram Bot Channel auf dem Mac das keyword "robot" ein geschieht nichts. Gebe ich "start" ein kommt der erwartete Dialog, die Inline Button mit Flur, test, abbrechen. Habe ich das mit dem keyword falsch verstanden oder muss das userattr im msgConfig Device anders lauten?

2. Wenn ich nun abbrechen drücke erscheint "Dialog abgebrochen" und ein Inline Button mit %me%. Vermutlich soll hier was anderes als %me% stehen oder?

3. Wenn ich abbrechen drücke erscheint diese o.g. Antwort 2 mal hintereinander was vermutlich so auch nicht sein sollte.

4. Im Moment versuche ich erstmal die grundlegende Funktionalität zwischen Fhem msgDialog <-> Bot Channel auf einem Telegram Client herzustellen. Final sollen die Dialoge inkl. Antworten allerdings in einem Gruppenchat erscheinen. Da ich ROOMMATE bisher nicht eingesetzt habe ist mir allerdings nicht ganz klar wie das nun aufzusetzen wäre. Muss ich dafür einen eigenen ROOMMATE aufsetzen und das attr msgContactPush auf teleBot:@<peerId des Gruppenchats> setzen?

Wäre super wenn ihr mir ein paar Hinweise geben könntet.

Danke Sven


Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 11 November 2017, 14:28:08
Zitat1. Gebe ich im Telegram Bot Channel auf dem Mac das keyword "robot" ein geschieht nichts.
Hallo Sven,
das Attribut heißt nun msgDialog_evalSpecials:
attr globalMsg msgDialog_evalSpecials me=robot TelegramBot=teleBot
Im Wiki ist seit gestern Abend auch ein Bereich mit Tipps zur Fehlersuche zu finden  ;)
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: hoods am 11 November 2017, 15:53:47
Hi Sebastian,

jau, nun klappts auch mit dem keyword - Danke! Damit sind die Problemchen 1. + 2. gelöst.
Hätte schwören können, dass ich das schon probiert hatte ...

Gruss Sven
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 11 November 2017, 17:03:58
Zitat3. Wenn ich abbrechen drücke erscheint diese o.g. Antwort 2 mal hintereinander was vermutlich so auch nicht sein sollte.
Bitte die Dialoge als RAW posten. Dann ist die Hilfestellung einfacher...  ;)
Zitat4. Im Moment versuche ich erstmal die grundlegende Funktionalität zwischen Fhem msgDialog <-> Bot Channel auf einem Telegram Client herzustellen. Final sollen die Dialoge inkl. Antworten allerdings in einem Gruppenchat erscheinen. Da ich ROOMMATE bisher nicht eingesetzt habe ist mir allerdings nicht ganz klar wie das nun aufzusetzen wäre. Muss ich dafür einen eigenen ROOMMATE aufsetzen und das attr msgContactPush auf teleBot:@<peerId des Gruppenchats> setzen?
Ich benutze keinen Gruppen-Chat. attr msgContactPush <teleBot:@peerId des Gruppenchats> im ROOMMATE sollte aber auch funktionieren.
VG Sebastian

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 12 November 2017, 08:08:43
Zitat von: hoods am 11 November 2017, 13:54:00
3. Wenn ich abbrechen drücke erscheint diese o.g. Antwort 2 mal hintereinander was vermutlich so auch nicht sein sollte.
Das msgPushReceived wird nichtmehr benötigt, das es nun Teil des msgConfig Moduls ist. Wenn es dennoch vorhanden ist werden die Nachrichten doppelt ausgewertet.

Zitat von: hoods am 11 November 2017, 13:54:00
4. Im Moment versuche ich erstmal die grundlegende Funktionalität zwischen Fhem msgDialog <-> Bot Channel auf einem Telegram Client herzustellen. Final sollen die Dialoge inkl. Antworten allerdings in einem Gruppenchat erscheinen. Da ich ROOMMATE bisher nicht eingesetzt habe ist mir allerdings nicht ganz klar wie das nun aufzusetzen wäre. Muss ich dafür einen eigenen ROOMMATE aufsetzen und das attr msgContactPush auf teleBot:@<peerId des Gruppenchats> setzen?
Gruppen sind momentan nicht möglich.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Darkmozart am 12 November 2017, 16:09:36
Hallo zusammen.
Tolles Modul, lässt sich prima ausbauen.

Ich nutze in der Momentanen Ausbaustufe den Meta-Dialog und die Einkaufsliste.
Das funtkioniert soweit auch alles.
Jetzt habe ich heute auf dem Handy meiner Frau Telegram installiert um u.a. die Einkaufsliste gemeinsam nutzen zu können.
Also Roommate für meine Frau angelegt, msgContactPush dort eingepflegt und erst mal ausprobiert.
Nun ist folgendes passiert:
wenn ich den Trigger für den Meta-Dialog manuell eingebe, funktioniert alles. Wenn ich (egal auf welchem Handy, solange nur meines Aktiv war, hats funktioniert) auf den Inline mit dem %me%-Trigger klicke, bekomme ich eine Fehlermeldung:
TelegramBot unauthorized cmd from user :J------: (xxxxxxxxx)
  Msg: Callback for inline query id: 1765405902686301153  from : xxxxxxxx :  data : kanaan


Hier noch der Vollständigkeit halber ein paar Lists:
ROOMMATE meiner Frau:
  DURATIONTIMER 1510498594.46849
   NAME       Mama
   NOTIFYDEV  global,
   NR         215
   NTFY_ORDER 50-Mama
   READY      1
   STATE      zuhause
   TYPE       ROOMMATE
   Helper:
     DBLOG:
       durTimerPresence:
         DBLogging:
           TIME       1510498534.47349
           VALUE      02:23:26
       durTimerPresence_cr:
         DBLogging:
           TIME       1510498534.47349
           VALUE      143
       fhemMsgRcvPush:
         DBLogging:
           TIME       1510497985.3467
           VALUE      abbrechen
       fhemMsgRcvPushGw:
         DBLogging:
           TIME       1510497985.3467
           VALUE      telbot
   READINGS:
     2017-11-12 13:32:08   durTimerAbsence 00:00:00
     2017-11-12 13:32:08   durTimerAbsence_cr 0
     2017-11-12 15:55:34   durTimerPresence 02:23:26
     2017-11-12 15:55:34   durTimerPresence_cr 143
     2017-11-12 12:35:40   durTimerSleep   00:00:00
     2017-11-12 12:35:40   durTimerSleep_cr 0
     2017-11-12 15:46:25   fhemMsgPush     (kanaan)
Dialog abgebrochen.
     2017-11-12 15:46:25   fhemMsgPushGw    telbot:@xxxxxxxx:OK
     2017-11-12 15:46:25   fhemMsgPushPrio 0
     2017-11-12 15:46:25   fhemMsgPushState 1
     2017-11-12 15:46:25   fhemMsgPushTitle -
     2017-11-12 15:46:25   fhemMsgRcvPush  abbrechen
     2017-11-12 15:46:25   fhemMsgRcvPushGw telbot
     2017-11-12 15:46:25   fhemMsgState    1
     2017-11-12 15:46:25   fhemMsgStateTypes push:1
     2017-11-12 13:32:08   lastArrival     2017-11-12 13:32:08
     2017-11-12 13:25:50   lastDeparture   2017-11-12 13:25:50
     2017-11-12 13:32:08   lastDurAbsence  00:06:18
     2017-11-12 13:32:08   lastDurAbsence_cr 6
     2017-11-12 13:25:50   lastDurPresence 00:05:31
     2017-11-12 13:25:50   lastDurPresence_cr 6
     2017-11-12 13:25:50   lastLocation    home
     2017-11-12 13:25:50   lastMood        calm
     2017-11-12 13:32:08   lastState       absent
     2017-11-12 13:32:08   location        home
     2017-11-12 13:32:08   mood            calm
     2017-11-12 13:32:08   presence        present
     2017-11-12 13:32:08   state           home
     2017-11-12 13:20:19   wayhome         0
   TIMER:
     Mama_DurationTimer:
       HASH       Mama
       MODIFIER   DurationTimer
       NAME       Mama_DurationTimer
Attributes:
   alias      Status Mama
   devStateIcon .*zuhause:user_available:absent .*anwesend:user_available:absent .*abwesend:user_away:home .*verreist:user_ext_away:home .*bettfertig:scene_toilet:asleep .*schlaeft:scene_sleeping:awoken .*schläft:scene_sleeping:awoken .*aufgestanden:scene_sleeping_alternat:home .*:user_unknown:home
   eventMap   home:zuhause absent:abwesend gone:verreist gotosleep:bettfertig asleep:schläft awoken:aufgestanden
   group      Mama
   icon       people_sensor
   msgContactPush telbot:@xxxxxxxx
   room       Anwesenheit,benachrichtigungen
   rr_realname group
   sortby     1
   webCmd     state
   widgetOverride state:zuhause,bettfertig,schläft,aufgestanden,abwesend,verreist

Mein ROOMMATE:
DURATIONTIMER 1510498653.91775
   NAME       ich
   NOTIFYDEV  global,presence_PapaHandy
   NR         206
   NTFY_ORDER 50-ich
   READY      1
   STATE      zuhause
   TYPE       ROOMMATE
   Helper:
     DBLOG:
       durTimerPresence:
         DBLogging:
           TIME       1510498593.92267
           VALUE      27:41:36
       durTimerPresence_cr:
         DBLogging:
           TIME       1510498593.92267
           VALUE      1662
       fhemMsgRcvPush:
         DBLogging:
           TIME       1510495299.39924
           VALUE      Test
       fhemMsgRcvPushGw:
         DBLogging:
           TIME       1510495299.39924
           VALUE      telbot
   READINGS:
     2017-11-11 12:14:57   durTimerAbsence 00:00:00
     2017-11-11 12:14:57   durTimerAbsence_cr 0
     2017-11-12 15:56:33   durTimerPresence 27:41:36
     2017-11-12 15:56:33   durTimerPresence_cr 1662
     2017-10-19 22:47:13   durTimerSleep   00:00:00
     2017-10-19 22:47:13   durTimerSleep_cr 0
     2017-11-12 14:12:46   fhemMsgPush     (kanaan)
Dialog abgebrochen.
     2017-11-12 14:12:46   fhemMsgPushGw    telbot:@yyyyyyyy:OK
     2017-11-12 14:12:46   fhemMsgPushPrio 0
     2017-11-12 14:12:46   fhemMsgPushState 1
     2017-11-12 14:12:46   fhemMsgPushTitle -
     2017-11-12 15:01:39   fhemMsgRcvPush  Test
     2017-11-12 15:01:39   fhemMsgRcvPushGw telbot
     2017-11-12 14:12:46   fhemMsgState    1
     2017-11-12 14:12:46   fhemMsgStateTypes push:1
     2017-11-11 12:14:57   lastArrival     2017-11-11 12:14:57
     2017-11-11 12:04:55   lastDeparture   2017-11-11 12:04:55
     2017-11-11 12:14:57   lastDurAbsence  00:10:02
     2017-11-11 12:14:57   lastDurAbsence_cr 10
     2017-11-11 12:04:55   lastDurPresence 19:35:27
     2017-11-11 12:04:55   lastDurPresence_cr 1175
     2017-11-11 12:04:55   lastLocation    home
     2017-11-11 12:04:55   lastMood        calm
     2017-11-11 12:14:57   lastState       absent
     2017-11-11 12:14:57   location        home
     2017-11-11 12:14:57   mood            calm
     2017-11-11 12:14:57   presence        present
     2017-11-11 12:14:57   state           home
     2017-10-19 22:47:36   wayhome         0
   TIMER:
     ich_DurationTimer:
       HASH       ich
       MODIFIER   DurationTimer
       NAME       ich_DurationTimer
Attributes:
   alias      Status Papa
   devStateIcon .*zuhause:user_available:absent .*anwesend:user_available:absent .*abwesend:user_away:home .*verreist:user_ext_away:home .*bettfertig:scene_toilet:asleep .*schlaeft:scene_sleeping:awoken .*schläft:scene_sleeping:awoken .*aufgestanden:scene_sleeping_alternat:home .*:user_unknown:home
   eventMap   home:zuhause absent:abwesend gone:verreist gotosleep:bettfertig asleep:schläft awoken:aufgestanden
   group      ich
   icon       people_sensor
   msgContactPush telbot:@yyyyyy
   room       Anwesenheit,benachrichtigungen
   rr_presenceDevices presence_PapaHandy
   rr_realname group
   sortby     1
   webCmd     state
   widgetOverride state:zuhause,bettfertig,schläft,aufgestanden,abwesend,verreist

Das msgConfig:
NAME       msgConfig
   NOTIFYDEV  TYPE=(Jabber|TelegramBot|yowsup)
   NR         203
   NTFY_ORDER 50-msgConfig
   STATE      1
   TYPE       msgConfig
   READINGS:
     2017-10-19 23:03:32   fhemMsgPush     test
     2017-10-19 23:03:32   fhemMsgPushGw   telbot:OK
     2017-10-19 23:03:32   fhemMsgPushPrio 0
     2017-10-19 23:03:32   fhemMsgPushState 1
     2017-10-19 23:03:32   fhemMsgPushTitle -
     2017-10-19 23:03:32   fhemMsgState    1
     2017-10-19 23:03:32   fhemMsgStateTypes push:1
Attributes:
   comment    FHEM Global Configuration for command 'msg'
   group      Global
   msgContactPush telbot
   msgDialog_evalSpecials me=kanaan
TelegramBot=telbot
   room       benachrichtigungen
   stateFormat fhemMsgState
   userattr   msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
   verbose    3


der meta_dialog im Raw-Format:
defmod meta_Dialog msgDialog {\
  "%me%": {\
    "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."\
    ]\
  }\
}
attr meta_Dialog allowed everyone
attr meta_Dialog room benachrichtigungen

setstate meta_Dialog Mama: abbrechen
setstate meta_Dialog 2017-11-12 15:46:25 state Mama: abbrechen



Und der Vollständigkeit halber noch der TelegramBot:
  FAILS      0
   NAME       telbot
   NR         180
   OLD_POLLING 141
   POLLING    141
   SNAME      telbot
   STATE      Polling
   TYPE       TelegramBot
   UPDATER    0
   WAIT       0
   me         ------:Fhem:@D-------t
   offset_id  355092466
   sentLastResult SUCCESS
   sentMsgId
   sentMsgOptions
   sentMsgPeer J-----
   sentMsgPeerId xxxxxxxx
   sentMsgResult SUCCESS
   sentMsgText AnswerInline:  - 1765405902686301153
   Contacts:
     xxxxxxxxx  xxxxxxxxxx:J----:
     yyyyyyyyy  yyyyyyyyyy:A-----z:@Darkmozart
   HU_DO_PARAMS:
     NAME
     addr       https://api.telegram.org:443
     boundary   TelegramBot_boundary-x0123
     buf
     code       200
     conn
     data
     displayurl <hidden>
     header     agent: TelegramBot/1.0

User-Agent: TelegramBot/1.0

Accept: application/json

Accept-Charset: utf-8

Content-Type: multipart/form-data; boundary=TelegramBot_boundary-x0123
     hideurl    1
     host       api.telegram.org
     httpheader HTTP/1.1 200 OK

Server: nginx/1.10.0

Date: Sun, 12 Nov 2017 14:46:32 GMT

Content-Type: application/json

Content-Length: 25

Connection: close

Access-Control-Allow-Origin: *

Access-Control-Allow-Methods: GET, POST, OPTIONS

Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection

Strict-Transport-Security: max-age=31536000; includeSubdomains
     hu_blocking 0
     hu_filecount 25
     hu_port    443
     hu_portSfx
     loglevel   4
     method     POST
     path       /botXXXXXXXXXXXXXXXXXXX/answerCallbackQuery
     protocol   https
     redirects  0
     timeout    30
     url        https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXXXXXX/answerCallbackQuery
     args:
       yyyyyyyyyyy

       1765405902686301153
       12
       undef
       undef
       2
     hash:
     sslargs:
   HU_UPD_PARAMS:
     FD         22
     NAME
     addr       https://api.telegram.org:443
     buf
     code       200
     displayurl <hidden>
     header     agent: TelegramBot/1.0

User-Agent: TelegramBot/1.0

Accept: application/json

Accept-Charset: utf-8
     hideurl    1
     host       api.telegram.org
     hu_blocking 0
     hu_filecount 140
     hu_port    443
     hu_portSfx
     isPolling  update
     loglevel   4
     method     GET
     offset     xxxxxxxxx
     path       /botXXXXXXXXXXXXXXXXXXx/getUpdates?offset=XXXXXXXXXXX&limit=5&timeout=120
     protocol   https
     redirects  0
     timeout    245
     url        https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates?offset=XXXXXXXX&limit=5&timeout=120
     hash:
     sslargs:
   Helper:
     DBLOG:
       Contacts:
         DBLogging:
           TIME       1510495299.148
           VALUE      yyyyyyy:A------z:@Darkmozart xxxxxxx:J----:
       message UNAUTHORIZED:
         DBLogging:
           TIME       1510497990.7574
           VALUE      TelegramBot FHEM request from user :J----- (411040592) \n Msg: Callback for inline query id: 1765405902686301153 from : xxxxxxxx2 : data : kanaan
       msgChat:
         DBLogging:
           TIME       1510497985.15704
           VALUE      J-----
       msgChatId:
         DBLogging:
           TIME       1510497985.15704
           VALUE      yyyyyyyy
       msgId:
         DBLogging:
           TIME       1510497985.15704
           VALUE      1137
       msgPeer:
         DBLogging:
           TIME       1510497985.15704
           VALUE      J--------
       msgPeerId:
         DBLogging:
           TIME       1510497985.15704
           VALUE      yyyyyyyyyy
       msgText:
         DBLogging:
           TIME       1510497985.15704
           VALUE      abbrechen
       sentMsgId:
         DBLogging:
           TIME       1510497991.08832
           VALUE      1139
       sentMsgPeerId:
         DBLogging:
           TIME       1510497992.83429
           VALUE      yyyyyyyy
       sentMsgResult:
         DBLogging:
           TIME       1510497992.83429
           VALUE      SUCCESS
       state:
         DBLogging:
           TIME       1510497992.83429
           VALUE      sentMsgId:
   READINGS:
     2017-11-12 15:01:39   Contacts        yyyyyyy:A-----z:@Darkmozart xxxxxxx:J---:
     2017-11-12 15:46:32   Mama_sentMsgId
     2017-11-12 06:36:48   PollingErrCount 3
     2017-11-12 06:36:35   PollingLastError NonBlockingGet: returned <hidden>: Can't connect(2) to https://api.telegram.org:443:  SSL connect attempt failed
     2017-10-08 09:04:45   StoredCommands  doit at 11.30 shutdown restart
doit sr at 11.30 shutdown restart
doit define sr at 11.30 shutdown restart
doit define sr at 11:30 shutdown restart
doit modify sr at 11:30 {sudo reboot}
doit modify sr at 11:30:00 {sudo reboot}
doit defmod sr at 11:30 {sudo reboot}
doit defmod a at 11:38 telbot message Hallo
doit defmod rx at 11:39 {sudo restart x}
doit set room Haus open

     2017-11-12 15:46:31   ich_sentMsgId   1139
     2017-11-12 15:46:25   msgChat         J----
     2017-11-12 15:46:25   msgChatId       xxxxxxxx
     2017-11-12 15:46:25   msgFileId
     2017-11-12 15:46:25   msgId           1137
     2017-11-12 15:46:25   msgPeer         J----
     2017-11-12 15:46:25   msgPeerId       xxxxxxxx
     2017-11-12 15:46:25   msgReplyMsgId
     2017-11-12 15:46:25   msgText         abbrechen
     2017-11-12 15:46:25   prevMsgChat     J-----
     2017-11-12 15:46:25   prevMsgFileId
     2017-11-12 15:46:25   prevMsgId       1135
     2017-11-12 15:46:25   prevMsgPeer     J-----
     2017-11-12 15:46:25   prevMsgPeerId   xxxxxxxx
     2017-11-12 15:46:25   prevMsgReplyMsgId
     2017-11-12 15:46:25   prevMsgText     abbrechen
     2017-11-12 12:33:04   queryData       kanaan
     2017-11-12 12:33:04   queryID         1781010502649639559
     2017-11-12 12:33:04   queryPeer       A-----------z
     2017-11-12 12:33:04   queryPeerId    yyyyyyyyy
     2017-11-12 12:33:04   queryReplyMsgId 939
     2017-11-12 15:46:32   sentMsgId
     2017-11-12 15:46:32   sentMsgPeerId   yyyyyyyyy
     2017-11-12 15:46:32   sentMsgResult   SUCCESS
   inlinechats:
   sentQueue:
Attributes:
   cmdKeyword doit
   cmdRestrictedPeer yyyyyyyyyy,xxxxxxxx
   defaultPeer yyyyyyyy
   pollingTimeout 120
   room       FHEM,benachrichtigungen
   utf8Special 1


Hat jemand eine Idee dazu?
Ich würde die Inlines des Triggers schon gern verwenden...
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 12 November 2017, 17:15:33
Aus der TelegramBot commandref:
Zitat
queryInline [ @<peer1> ... @<peerN> ] (<keyrow1>) ... (<keyrowN>) <text>
Sends the given message to the recipient(s) with an inline keyboard allowing direct response
IMPORTANT: The response coming from the keyboard will be provided in readings and a corresponding answer command with the query id is required, sicne the client is frozen otherwise waiting for the response from the bot! REMARK: inline queries are only accepted from contacts/peers that are authorized (i.e. as for executing commands, see cmdKeyword and cmdRestrictedPeer !)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Darkmozart am 12 November 2017, 19:39:33
Hm...
den Fehler hab ich dann hier gefunden:
ZitatcmdRestrictedPeer <peer(s)>
Restrict the execution of commands only to messages sent from the given peername or multiple peernames (specified in the form of contact id, username or full name, multiple peers to be separated by a space). This applies to the internal machanisms for commands in the TelegramBot-Module (favorites, cmdKeyword etc) not for external methods to react on changes of readings. A message with the cmd and sender is sent to the default peer in case of another peer trying to sent messages
NOTE: It is recommended to use only peer ids for this restriction to reduce spoofing risk!
Notiz an mich selbst: erst lesen und dann Attribute bearbeiten....
Dann bastel ich mal weiter.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 12 November 2017, 20:37:58
Definitiv wieder ein Punkt fürs Wiki :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 15 November 2017, 15:51:26
Hier noch ein Dialog zum setzen der Berechtigungen für die Dialoge:

defmod Berechtigungen_Dialog msgDialog {\
  "Berechtigungen": {\
    "message": [\
      "{'('.join(') (', devspec2array('TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.+')).') '}",\
      "(everyone) ",\
      "(beenden) ",\
      "Für welchen Benutzer willst du die Berechtigungen festlegen?"\
    ],\
    "Benutzer": {\
      "match": "(%allowed%|everyone)",\
      "commands": "setreading $SELF $recipient_user $message",\
      "message": [\
        "{my @dialogs = sort{lc($a) cmp lc($b)} devspec2array('TYPE=msgDialog:FILTER=NAME!=$SELF');; $_ = (AttrVal($_, 'allowed', '') =~ m/$message/ ? '🔵 ' : AttrVal($_, 'allowed', '') =~ m/everyone/ ? '🔷 ' : '⚫️ ').$_ foreach(@dialogs);; return('('.join(') (', @dialogs).') ')}",\
        "(zurück) ",\
        "(abbrechen) ",\
        "Zum Ändern der Berechtigung bitte den entsprechenden Dialog auswählen.",\
        "🔵 Benutzer ist explizit berechtigt",\
        "🔷 Benutzer ist implizit berechtigt",\
        "⚫️ Benutzer ist nicht berechtigt"\
      ],\
      "Berechtigung": {\
        "match": "(🔵|🔷|⚫️) %dialogs%",\
        "commands": [\
          "{my ($state, $dialog) = ('$message' =~ m/(🔵|🔷|⚫️) %dialogs%/g);; my $user = ReadingsVal('$SELF', '$recipient_user', '');; my %allowed = map{$_, 1} (split(',', AttrVal($dialog, 'allowed', '')));; if($state eq '🔵'){delete $allowed{$user}}else{$allowed{$user} = 1};; fhem('attr '.$dialog.' allowed '.join(',', keys %allowed));;}",\
          "set $SELF say @$recipient Berechtigungen|[$SELF:$recipient_user]"\
        ],\
        "not_the_end": {}\
      }\
    }\
  }\
}

attr Berechtigungen_Dialog evalSpecials allowed={'('.join('|', devspec2array('TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.+')).')'}\
dialogs={'('.join('|', devspec2array('TYPE=msgDialog')).')'}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 15 November 2017, 16:18:24
ZitatHier noch ein Dialog zum setzen der Berechtigungen für die Dialoge:
Sehr schön! Definitiv noch ein weiterer Punkt fürs Wiki  ;)
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 15 November 2017, 21:23:45
Mich würde doch mal interessieren was ihr so alles für Dialoge habt.
Ich mache den Anfang und habe folgende Dialoge

list TYPE=msgDialog

Aufgaben_Dialog
Beleuchtung_Dialog
Berechtigungen_Dialog
Bewohnerstatus_Dialog
CardboardCrack_Dialog
DasLebenIstKeinPonyhof_Dialog
Einkaufsliste_Dialog
Fenster_Dialog
Frostwarnung_Dialog
Gaeste_WLAN_Dialog
Gaia_Dialog
Grillthermometer_Dialog
INITIALIZED_Dialog
IP_Dialog
Michael_Lichtwecker_Dialog
SandraUndWoo_Dialog
Schisslaweng_Dialog
Schlafzimmer_Lichtwecker_Dialog
Tankstelle_Dialog
Theke_Dialog
Unwetterzentrale_Dialog
Waescheleine_Dialog
Waschmaschine_Dialog
Wohnzimmer_Lichtwecker_Dialog
Zaehler_Dialog
broadcast
meta_Dialog

Katerogisieren lassen sich diese wie folgt:

1. Benachrichtigungen
- Aufgaben_Dialog
- Bewohnerstatus_Dialog
- CardboardCrack_Dialog
- DasLebenIstKeinPonyhof_Dialog
- Fenster_Dialog
- Frostwarnung_Dialog
- Gaia_Dialog
- INITIALIZED_Dialog
- IP_Dialog
- SandraUndWoo_Dialog
- Schisslaweng_Dialog
- Tankstelle_Dialog
- Unwetterzentrale_Dialog
- Waescheleine_Dialog

2. Schalten von Geräten
- Beleuchtung_Dialog
- Gaeste_WLAN_Dialog

3. Konfiguration des Moduls
- Berechtigungen_Dialog
- broadcast
- meta_Dialog

4. Einkaufsliste
- Einkaufsliste_Dialog

5. Konfiguration von Automatiken
- Grillthermometer_Dialog
- Michael_Lichtwecker_Dialog
- Schlafzimmer_Lichtwecker_Dialog
- Theke_Dialog
- Waschmaschine_Dialog
- Wohnzimmer_Lichtwecker_Dialog

6. Erfassen von Daten
- Zaehler_Dialog

Bevor die Frage kommt: broadcast ist einfach zur Beachrichtigung aller Benutzer und wird nur mit "set broadcast say ..." verwendet.

defmod broadcast msgDialog {\
  "broadcast": {\
    "setOnly": true,\
    "match": ".+",\
    "commands": "deletereading %TelegramBot% .+_sentMsgId",\
    "message": [\
      "TelegramBot_MTYPE=queryInline (%me%) ",\
      "$message"\
    ]\
  }\
}

attr broadcast allowed everyone
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: kumue am 16 November 2017, 05:42:01
Da ich bei WhatsApp geblockt wurde, stieg ich nun auf Telegram um...
Habe soweit alles wie im msgDialog-Wiki beschireben eingerichtet.
Leider kommt kein Dialog zustande, der Bot antwortet nicht.

Im Log finde ich diese FM:
2017.11.16 05:23:44 4: msg: ERROR RCV myTelegramBot xxxxxx: Missing reference in msgContact attribute of any device

Weiss jemand Rat ?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 16 November 2017, 08:59:19
Dein ROOMMATE ist nicht richtig konfiguriert
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 16 November 2017, 12:02:38
Hallo Zusammen, dann lege ich mal nach: ;)

list TYPE=msgDialog

Abwesenheit_Dialog
Beleuchtung_Dialog
Berechtigungen_Dialog
Fahrzeit_Dialog
Gast_Dialog
Haus_Automatisierung_Dialog
Kamera_Dialog
Status_dialog
Systemverwaltung_Dialog
Tagesschau_Dialog
meta_Dialog


Diese können dann in folgende Kategorien eingeteilt werden:

1. Benachrichtigungen
- Haus_Automatisierung_Dialog
- Kamera_Dialog

2. Statusabfragen
- Status_dialog
- Systemverwaltung_Dialog (FHEM-Updates, -Infos, -letzte 10 Logeinträge)
- Fahrzeit_Dialog

3. Schalten von Geräten
- Beleuchtung_Dialog (schalten + dimmen)
- Tagesschau_Dialog (Audioausgabe oder Link zum Video)
- Abwesenheit_Dialog
- Gast_Dialog

4. Konfiguration des Moduls
- Berechtigungen_Dialog
- meta_Dialog

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: kumue am 16 November 2017, 16:51:00
Zitat von: igami am 16 November 2017, 08:59:19
Dein ROOMMATE ist nicht richtig konfiguriert

Danke für den Tip.
ROOMMATE hatte ich jetzt erst im Zuge von msgDialog (grob) installiert, einen Bewohner angelegt und nicht weiter konfiguriert.
Denke, das Attr msgContactPush muss korrekt gesetzt werden...
Ich schau mal, ob ich da weiter komme, ansonsten melde ich mich nochmal.  ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: kumue am 17 November 2017, 21:58:47
Geht jetzt,...lag am falsch konfiguriertem msgContactPush Attribute beim ROOMMATE...

Eine Frage noch:
Gehe ich richtig in der Annahme, daß zwingend RESIDENT / ROOMMATE angelegt sein müssen ?
Weil, wenn ich msgContactPush im msgConfig anlege, kommt bei nicht vorhandenem ROOMMATE vom Bot die Meldung:
Unbekannter Kontaktversuch über myTelegramBot von <meine Peer-ID>
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 17 November 2017, 22:18:02
Ja, die ROOMMATE sind zwingend erforderlich. Bin aber gerne bereit das zu ändern, wenn du eine bessere Idee zum festlegen der Berechtigungen hast.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: kumue am 18 November 2017, 19:55:27
Nö, alles gut. Danke für die Klarstellung.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 18 November 2017, 20:28:38
Hallo,

ich hab Bemerkungen zur WIKI.

Der Metadialog Vorschlag hat zwei Fehler:

{
  "%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: "

da fehlt das zweite Command 'beenden'

{
  "%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', 'beenden') . ') ')}",
      "Ich kann folgendes für dich tun: "


In dem nächsten Teil fehlt eine Klammer. wenn man im Edit DEF Feld Highlighting an hat wird die geschweifte Klammer (Ende Command zeile) fehlerhaft angezeigt

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


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


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


was macht eigentlich dieser Teil.
das "zurück" wird doch nirgends verarbeitet, oder ?

Grüße


Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 18 November 2017, 20:43:03
Zitat von: schnitzelbrain am 18 November 2017, 20:28:38
Der Metadialog Vorschlag hat zwei Fehler:
[...]
da fehlt das zweite Command 'beenden'
abbrechen und beenden machen das gleiche, nur die Nachricht ist eine andere.
Ich nutze abbrechen da, wenn ich den Dialog nicht komplett durchgehe und beenden, wenn ich eine Schleife habe und diese Verlassen will (z.B. Einkaufsliste). Daher bin ich der Meinung, dass nur "abbrechen" dort richtig ist.

Zitat von: schnitzelbrain am 18 November 2017, 20:28:38
Falsch
"zurück": {\
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;;;; return($2 ? $2 : $1;;;;)}"
},

Zitat
In der Tat ein Fehler, aber ein anderer als du denkst. Richtig ist

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


Zitat von: schnitzelbrain am 18 November 2017, 20:28:38
was macht eigentlich dieser Teil.
das "zurück" wird doch nirgends verarbeitet, oder ?
Kann benutzt werden um eine Stufe in dem Dialog zurück zu springen. Im Wiki taucht es meine ich nicht auf, aber z.B. in dem Berechtigungen Dialog.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 18 November 2017, 20:57:59
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  :)

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 18 November 2017, 22:41:15
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Keule_09 am 18 November 2017, 23:54:55
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag 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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 19 November 2017, 10:32:58
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag 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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 19 November 2017, 11:55:29
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 19 November 2017, 12:19:59
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  ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag 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.



Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 19 November 2017, 13:43:18
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 19 November 2017, 18:13:04
Ich verstehe Trotzdem noch nicht was du meinst.
Commands werden vor Message abgearbeitet.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 19 November 2017, 19:33:58
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Keule_09 am 19 November 2017, 22:12:25
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 20 November 2017, 16:24:43
kannst du denn den msg Befehl ohne Fehler verwenden?
also "msg push @<ROOMMATE> Test"
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Keule_09 am 21 November 2017, 14:22:48
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()

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Esjay am 21 November 2017, 14:25:22
Zitat von: Keule_09 am 21 November 2017, 14:22:48
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()

Hast du dran gedacht, im Dialog die Berechtigung für den Roommate zu setzen?

Grüße
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Keule_09 am 21 November 2017, 14:38:04
Ja hab die Berechtigungen alle gesetzt bei den Dialogen auf "everyone" gesetzt.

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 21 November 2017, 16:05:38
Wird auch das msgPushReceived Reading im ROOMMATE Device aktualisiert, sodass es im Eventmonitor zu sehen ist?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 21 November 2017, 16:37:58
Zwischenfrage , lässt sich das logging einschränken?
Ich hab den ganzen msg Zweig auf verbose 0 stehen abef die Logdatei explodiert gerade.

Grüße

Schnitzelbrain

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 21 November 2017, 17:13:43
Zitat von: schnitzelbrain am 21 November 2017, 16:37:58
Zwischenfrage , lässt sich das logging einschränken?
Ich hab den ganzen msg Zweig auf verbose 0 stehen abef die Logdatei explodiert gerade.

Grüße

Schnitzelbrain
Welche LogDatei? Und mit welchem Inhalt?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Keule_09 am 21 November 2017, 20:52:55
Zitat von: igami am 21 November 2017, 16:05:38
Wird auch das msgPushReceived Reading im ROOMMATE Device aktualisiert, sodass es im Eventmonitor zu sehen ist?

im Eventmonitor sieht man keine Einträge meines Roommate
aber in den Readings im Roommate stehen diese Einträge:


fhemMsgPush               Test2546                                            2017-11-21 12:49:46
fhemMsgPushGw         TelegramBot:@34XXXXXX8:OK     2017-11-21 12:49:46
fhemMsgPushPrio                                                                    2017-11-21 12:49:46
fhemMsgPushState                                                                  2017-11-21 12:49:46
fhemMsgPushTitle       -                                                          2017-11-21 12:49:46
fhemMsgRcvPush       /start                                                  2017-11-21 20:23:47
fhemMsgRcvPushGw  TelegramBot                                    2017-11-21 20:23:47
fhemMsgState                1                                                        2017-11-21 12:49:46
fhemMsgStateTypes     push:1                                              2017-11-21 12:49:46


msgPushReceived fehlt in der Auflistung
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 21 November 2017, 21:26:15
Okay, ist fhemMsgRcvPush. Hast du Einschränkungen durch event-on- Attribute?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 21 November 2017, 21:29:46
Zitat von: igami am 21 November 2017, 17:13:43
Welche LogDatei? Und mit welchem Inhalt?
Das Logfile das über die Oberfläche erreichbar ist und das mit Verbose zu beeinflussen ist.

Reset SAT 2017.11.19 21:48:06 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : [emoji362] Beleuchtung [emoji536] Rolladen Reset SAT 2017.11.19 21:49:04 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : [emoji362] Beleuchtung [emoji536] Rolladen Reset SAT 2017.11.19 21:49:08 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : [emoji362] Beleuchtung [emoji536] Rolladen Reset SAT 2017.11.19 21:49:37 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : [emoji362] Beleuchtung [emoji536] Rolladen Reset SAT 2017.11.19 21:50:04 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : [emoji362] Beleuchtung [emoji536] Rolladen Reset SAT 2017.11.19 21:50:27 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : [emoji362] Beleuchtung



Jeder Tastendruck wird eben protokolliert.

Grüße

Schnitzelbrain
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 21 November 2017, 21:39:40
Zitat von: schnitzelbrain am 21 November 2017, 21:29:46
Jeder Tastendruck wird eben protokolliert.
Das kommt aus dem meta_Dialog. Die Begündung:
Zitat
To use FHEM commands from the perl expression, use the function fhem(), which takes a string argument, this string will be evaluated as a FHEM command:

    { fhem "set light on" }
    define n1 notify piri:on { fhem "set light on" }

Note: if this function returns a value, it will also be logged into the global FHEM log. Use 1 as a second argument to disable this logging, this makes sense when obtainig some values via FHEM "get...".

Da ich im global das verbose auf 2 stehen habe merke ich das nicht.
Das verhalten lässt sich durch eine Änderung des meta_Dialog abstellen.
Versuch doch mal bitte den folgenden:

defmod meta_Dialog msgDialog {\
  "%me%": {\
    "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', 1))), '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."\
    ]\
  }\
}
attr meta_Dialog allowed everyone

Dort habe ich die 1 nach dem get Aufruft ergänzt.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Keule_09 am 21 November 2017, 21:40:44
Zitat von: igami am 21 November 2017, 21:26:15
Okay, ist fhemMsgRcvPush. Hast du Einschränkungen durch event-on- Attribute?

Danke für den Tip.Das war der Grund  :)
Jetzt funktionieren die Dialoge.

Vielen Dank für die Hilfe
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 21 November 2017, 21:43:06
Steht übrigens auch in der Commandref zu dem Modul :P
Noch ein Tip: es sollte am besten auch in event-on-update-reading aufgenommen werden und nicht in event-on-change-reading.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 22 November 2017, 18:37:23
Zitat von: igami am 21 November 2017, 21:39:40
Das kommt aus dem meta_Dialog. Die Begündung:
Da ich im global das verbose auf 2 stehen habe merke ich das nicht.
Das verhalten lässt sich durch eine Änderung des meta_Dialog abstellen.
Versuch doch mal bitte den folgenden:

defmod meta_Dialog msgDialog {\
  "%me%": {\
    "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', 1))), '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."\
    ]\
  }\
}
attr meta_Dialog allowed everyone

Dort habe ich die 1 nach dem get Aufruft ergänzt.
Perfect, logging unterdrückt

Dank dir


Schnitzelbrain

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Esjay am 26 November 2017, 13:10:55
Hallo Igami,
gibt es eine Möglichkeit, das "set Dialog xyz say xyz " in verschiedene Chats zu schicken?
Ich habe einen für die Alarmanlage, einen für meinen Staubsauger, einen für das Haus.
Macht das Ganze einfach übersichtlicher!

Grüße
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 01 Dezember 2017, 15:05:30
Hallo,

sehr nettes Modul!

Aber bei mir bekomme ich immer die Nachrichten vom metaDialog doppelt.

Woran kann das liegen?

LG
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 01 Dezember 2017, 15:15:26
Zitat von: Marlen am 01 Dezember 2017, 15:05:30
Hallo,

sehr nettes Modul!

Aber bei mir bekomme ich immer die Nachrichten vom metaDialog doppelt.

Woran kann das liegen?

LG
  Marlen
Hast du mehrere Residents eingetragen?
Schau mal on msgContactpush Einträge mit der richtigen ID gesetzt ist.

Das war es bei mir. Ich hatte dann meine und die von meiner Frau bekommen.

Beim mymsgconfig nur den bot
Und bei den residents bot:@id_code vom jeweiligen resident

Schnitzelbrain
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 01 Dezember 2017, 15:24:31
Es wird kein notify mehr benötigt. Falls noch vorhanden, kann dies zur Doppelung führen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 01 Dezember 2017, 16:34:25
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

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 01 Dezember 2017, 16:41:40
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 (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

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 01 Dezember 2017, 18:52:12
Ach so, ne, Modul residents hab ich nicht, is ja nicht zwingend erforderlich.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 01 Dezember 2017, 21:11:27
Ja, ROOMMATE bzw. GUEST reicht.
Wenn du kein notify angelegt hast habe ich nichts gesagt.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 01 Dezember 2017, 21:41:07
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 02 Dezember 2017, 22:28:50
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 02 Dezember 2017, 23:08:55
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: netdom am 03 Dezember 2017, 16:55:22
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 :(

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 03 Dezember 2017, 17:15:45
Was mir spontan auffällt: der Meta-Dialog benötigt kein evalSpecials...
attr meta_Dialog evalSpecials me=rr_dominic TelegramBot=fhembot
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 03 Dezember 2017, 17:59:32
Ich tippe auf das utf8specials Attribut beim  TelegramBot
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: netdom am 03 Dezember 2017, 18:19:52
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 ?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 03 Dezember 2017, 18:20:14
Ich habe es im WIKI bei der Fehlersuche mit aufgenommen:
3.3 Das Attribut utf8Special fehlt beim TelegramBot device  ;)
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: netdom am 03 Dezember 2017, 18:30:45
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 :-)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 04 Dezember 2017, 08:22:56
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 04 Dezember 2017, 08:51:11
Gibt es eigentlich auch die Möglichkeit einen Code einzugeben?

z.B.: gleiche ich meine Strom-, Wasser-, Gaszähler immer mal per Telegram ab.

Wie kann man sowas mit dem Modul msgDialog machen?

LG
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 04 Dezember 2017, 08:55:04
ZitatWas ist denn
Code: [Auswählen]
$recipient_history'
? Wo kommt das her?

Das ist ein Reading in einem Dialog vom aufrufenden ROOMATE (recipient):

rr_Sebastian_history  1.Beleuchtung|Lampen einschalten

Es wird vom Meta-Dialog beim Aufrufen eines Dialogs erstellt, beim Benutzen des Dialogs geändert
und beim Beenden/Abbrechen des Dialogs wieder gelöscht.

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 04 Dezember 2017, 09:42:06
Hmmm.....

das reading wird beim aufruf angelegt, aber leer.

Beim beenden wird das wieder gelöscht.

Lg
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 04 Dezember 2017, 11:54:14
Wenn der Dialog beendet wird, also es keine nachfolgenden Stufen mehr gibt, wird das reading wieder gelernt.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 04 Dezember 2017, 13:00:03
Also, jetz mal für blondi's:

Hier mein Heizung_Dialog (noch im Aufbau):
{ "Heizung": {
    "message": [
  "{return('(WarmWasser) ')}",
  "{return('(Wohnzimmer) ')}",
  "{return('(Kinderzimmer) ')}",
  "{return('(abbrechen|zurück) ')}",
  "Aktuell Temperaturen:",
  "Warmwasser: [WarmWasser:temperature]°C.",
  "Wohnzimmer: [Fuehler_Wz:temperature]°C.",
  "Kinderzimmer:[ESPEasy_Steckdose_03_Temp:Temperature]°C.",
  "Bitte auswählen"
    ]
},
"WarmWasser": {
    "message": [
  "{return('(Anlage AN|Anlage AUS) ')}",
  "{return('(bis 6 Uhr scharf stellen) ')}",
  "{return('(Innen-Sirene aktiv|Innen-Sirene inaktiv) ')}",
  "{return('(Außen-Sirene aktiv|Außen-Sirene inaktiv) ')}",
  "{return('(Urlaubsmodus AN|Urlaubsmodus AUS) ')}",
  "{return('(letzter Urlaubstag) ')}",
  "{return('(Anwesneheitssimulation AN|Anwesneheitssimulation AUS) ')}",
  "{return('(abbrechen|zurück) ')}",
  "Bitte auswählen"
    ]
},
"Kinderzimmer": {
    "message": [
  "{return('(Aktuelle-Temperatur) ')}",
  "{return('(Tages-Temperatur) ')}",
  "{return('(Absenk-Temperatur) ')}",
  "{return('(Nacht-Temperatur) ')}",
  "{return('(abbrechen|zurück) ')}",
  "Welche Temperatur willst du für Kinderzimmer ändern?"
    ]
},
"Wohnzimmer": {
    "message": [
  "{return('(Aktuelle-Temperatur) ')}",
  "{return('(Tages-Temperatur) ')}",
  "{return('(Absenk-Temperatur) ')}",
  "{return('(Nacht-Temperatur) ')}",
  "{return('(abbrechen|zurück) ')}",
  "Welche Temperatur willst du für Kinderzimmer ändern?"
    ],
    "Aktuelle-Temperatur": {
          "message": [
        "(bestätigen|abbrechen) ",
"(zurück|zurückalt) ",
        "(aus:04.5|5°C:05.0|6°C:06.0|7°C:07.0) ",
"(8°C:08.0|9°C:09.0|10°C:10.0|11°C:11.0) ",
"(12°C:12.0|13°C:13.0|14°C:14.0|15°C:15.0) ",
"(15.5°C:15.5|16°C:16.0|16.5°C:16.5|17°C:17.0) ",
"(17.5°C:17.5|18°C:18.0|18.5°C:18.5|19°C:19.0) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
"(27°C:27|28°C:28|29°C:29|voll:29.5) ",
        "Aktuell Wohnzimmer: [Fuehler_Wz:temperature]°C.",
"Treffen Sie das Setup."
      ],
      "Setup": {
        "match": "[0-2][0-9][:.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';; fhem(\"set data1 $temperatur\");;}"
        ]
}
}
}

}


Mein Reading
rg_Marlen_history  Wohnzimmer|Aktuelle-Temperatur

Wenn ich auf zurück gehe, komm ich wieder in Wohnzimmer, aber von hier komm ich wieder zurück in Heizung und von Heizung will ich eigentlich wieder zum start kommen.

Wie macht man das?

Lg
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 04 Dezember 2017, 13:33:40
ZitatWie macht man das?
Dein zurück geht eine Ebene höher. Du bist aber bereits auf der höchsten Ebene in deinem Dialog  ;)
Das siehst Du auch daran, dass Kinderzimmer, WarmWasser und Wohnzimmer direkt unter Heizung als Menüpunkt auftauchen.
Mit
"{return('(abbrechen|zurück:%me%) ')}", kommst du wieder zurück zum Meta-Dialog und zur Dialog-Auswahl.
In Antwort #109  hat Flipper92 seinen Heizungs-Dialog gepostet...
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 04 Dezember 2017, 14:39:05
Also nochmal....ich will es nur verstehen!

Meine Dialog Heizung
1. Ebene: Wohnzimmer
2. Ebene: Aktuelle-Temperatur

ich bin auf der 2.Ebene und drücke zurück, dann bin ich in der 1.Ebene (Wohnzimmer) ....so soll es ja sein.

Drück ich da zurück, passiert nicht's!

Auch bei zurück:%me% passiert nichts,

oder

"set $SELF say @$recipient Heizung"

Irgendwo ist doch da der Wurm drin..... :-[



Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 04 Dezember 2017, 15:29:22
Ich habe jetzt nur mal das Wohnzimmer Beispielhaft zum Laufen gebracht:

defmod Marlen msgDialog { "Heizung": {\
    "message": [\
  "{return('(WarmWasser) ')}",\
  "{return('(Wohnzimmer) ')}",\
  "{return('(Kinderzimmer) ')}",\
  "{return('(abbrechen|zurück:%me%) ')}",\
  "Aktuell Temperaturen:",\
  "Warmwasser: [WarmWasser:temperature]°C.",\
  "Wohnzimmer: [Fuehler_Wz:temperature]°C.",\
  "Kinderzimmer:[ESPEasy_Steckdose_03_Temp:Temperature]°C.",\
  "Bitte auswählen"\
    ],\
"Wohnzimmer": {\
    "message": [\
  "{return('(Aktuelle-Temperatur) ')}",\
  "{return('(Tages-Temperatur) ')}",\
  "{return('(Absenk-Temperatur) ')}",\
  "{return('(Nacht-Temperatur) ')}",\
  "{return('(abbrechen|zurück) ')}",\
  "Welche Temperatur willst du für Kinderzimmer ändern?"\
    ],\
    "Aktuelle-Temperatur": {\
        "message": [\
        "(bestätigen|abbrechen) ",\
"(zurück|zurückalt) ",\
        "(aus:04.5|5°C:05.0|6°C:06.0|7°C:07.0) ",\
"(8°C:08.0|9°C:09.0|10°C:10.0|11°C:11.0) ",\
"(12°C:12.0|13°C:13.0|14°C:14.0|15°C:15.0) ",\
"(15.5°C:15.5|16°C:16.0|16.5°C:16.5|17°C:17.0) ",\
"(17.5°C:17.5|18°C:18.0|18.5°C:18.5|19°C:19.0) ",\
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",\
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",\
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",\
"(27°C:27|28°C:28|29°C:29|voll:29.5) ",\
        "Aktuell Wohnzimmer: [Fuehler_Wz:temperature]°C.",\
"Treffen Sie das Setup."\
      ],\
      "Setup": {\
        "match": "[0-2][0-9][.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set data1 $temperatur\");;;;}",\
  "set $SELF say @$recipient Heizung"\
        ]\
}\
}\
}\
}\
}

Beim "match" war noch ein : zuviel  ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 04 Dezember 2017, 16:44:29
Hier mein Dialog für die Zählerstände:

myUtils:

sub msgDialog_Zaehlerstaende {
  my @meter = devspec2array("subType=meter:FILTER=disable!=1");
  $_ =
      (split(": ", AttrVal($_, "alias", $_)))[1]
    . "         " . InternalVal($_, "STATE", "")
    . " (" . (split(" ", ReadingsTimestamp($_, "state", "")))[0] . ")"
  for(@meter);;
 
  return("(" . join(") (", @meter) . ") ");
}

sub msgDialog_Zahelerstand_anpassen($$$) {
  my ($SELF, $recipient, $state) = @_;
  my $meter = ReadingsVal("$SELF", ".$recipient\_meter", "");
  $state =~ s/\,/\./;
  if($state < ReadingsNum($meter, "state", 0)){
    fhem("set $SELF say Zähler|Zählerstand anpassen|Zählerstand zu klein");
  }
  else{
    fhem("set $meter $state; deletereading $SELF .$recipient\_meter; set $SELF say \@$recipient Zähler;");
  }
}

sub msgDialog_Zaehler_speichern($$$) {
  my ($SELF, $recipient, $message) = @_;
  # $message = encode('UTF-8', $message);
  my @meter = split(" ", "$message");
  splice(@meter, -3, 3);
  @meter = devspec2array("subType=meter:FILTER=alias=.+@meter");
 
  fhem("setreading $SELF .$recipient\_meter $meter[0]");
}


msgDialog:

defmod Zaehler_Dialog msgDialog {\
  "Zähler": {\
    "message": [\
      "{msgDialog_Zaehlerstaende()}",\
      "(abbrechen) ",\
      "Zählerstände:"\
    ],\
    "Zählerstand anpassen": {\
      "match": ".+zähler.+",\
      "commands": "{msgDialog_Zaehler_speichern('$SELF', '$recipient', '$message')}",\
      "message": [\
        "TelegramBot_MTYPE=queryInline (zurück|abbrechen) ",\
        "{my $meter = AttrVal(ReadingsVal('$SELF', '.$recipient_meter', ''), 'alias', '');;;; return(\"Bitte den neuen Zählerstand für \\\"$meter\\\" angeben.\")}"\
      ],\
      "Zählerstand angepasst": {\
        "match": "\\d+((\\.|\\,)\\d+)?",\
        "commands": "{msgDialog_Zahelerstand_anpassen('$SELF', '$recipient', '$message')}"\
      },\
      "Zählerstand zu klein": {\
        "commands": "setreading $SELF $recipient_history Zähler|Zählerstand anpassen",\
        "message": [\
          "TelegramBot_MTYPE=queryInline (zurück|abbrechen) ",\
          "Der neue Zählerstand darf nicht kleiner als der aktuelle Zählerstand sein."\
        ]\
      }\
    }\
  }\
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 05 Dezember 2017, 07:38:47
Zitat von: binford6000 am 04 Dezember 2017, 15:29:22
Ich habe jetzt nur mal das Wohnzimmer Beispielhaft zum Laufen gebracht:

defmod Marlen msgDialog { "Heizung": {\
    "message": [\
  "{return('(WarmWasser) ')}",\
  "{return('(Wohnzimmer) ')}",\
  "{return('(Kinderzimmer) ')}",\
  "{return('(abbrechen|zurück:%me%) ')}",\
  "Aktuell Temperaturen:",\
  "Warmwasser: [WarmWasser:temperature]°C.",\
  "Wohnzimmer: [Fuehler_Wz:temperature]°C.",\
  "Kinderzimmer:[ESPEasy_Steckdose_03_Temp:Temperature]°C.",\
  "Bitte auswählen"\
    ],\
"Wohnzimmer": {\
    "message": [\
  "{return('(Aktuelle-Temperatur) ')}",\
  "{return('(Tages-Temperatur) ')}",\
  "{return('(Absenk-Temperatur) ')}",\
  "{return('(Nacht-Temperatur) ')}",\
  "{return('(abbrechen|zurück) ')}",\
  "Welche Temperatur willst du für Kinderzimmer ändern?"\
    ],\
    "Aktuelle-Temperatur": {\
        "message": [\
        "(bestätigen|abbrechen) ",\
"(zurück|zurückalt) ",\
        "(aus:04.5|5°C:05.0|6°C:06.0|7°C:07.0) ",\
"(8°C:08.0|9°C:09.0|10°C:10.0|11°C:11.0) ",\
"(12°C:12.0|13°C:13.0|14°C:14.0|15°C:15.0) ",\
"(15.5°C:15.5|16°C:16.0|16.5°C:16.5|17°C:17.0) ",\
"(17.5°C:17.5|18°C:18.0|18.5°C:18.5|19°C:19.0) ",\
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",\
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",\
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",\
"(27°C:27|28°C:28|29°C:29|voll:29.5) ",\
        "Aktuell Wohnzimmer: [Fuehler_Wz:temperature]°C.",\
"Treffen Sie das Setup."\
      ],\
      "Setup": {\
        "match": "[0-2][0-9][.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set data1 $temperatur\");;;;}",\
  "set $SELF say @$recipient Heizung"\
        ]\
}\
}\
}\
}\
}

Beim "match" war noch ein : zuviel  ;)

Guten Morgen,

ich bin jetzt total verwirrt!
Wenn ich start eingebe um meine Übersicht über meine Dialoge zu erhalten, steht da u.a. jetzt Heizung, WarmWasser, Kinderzimmer, Wohnzimmer!
Aber WarmWasser, Kinderzimmer, Wohnzimmer sind doch Menüpunkte unter unter Heizung.
Wenn ich auf Heizung klicke kommen sie ja auch. Warum werden die doppelt angezeigt?

Und wenn ich bei der Temperatur Auswahl bin, steht da auf dem Button "19.5°C:19.5" da sollte doch nur 19.5°C stehen, oder?

LG
  Malren
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 05 Dezember 2017, 11:07:54
ZitatWenn ich start eingebe um meine Übersicht über meine Dialoge zu erhalten, steht da u.a. jetzt Heizung, WarmWasser, Kinderzimmer, Wohnzimmer!
Das hatte ich gestern bei meinem Test auch. Das liegt an den Klammern. Deswegen habe ich die anderen Zimmer erstmal entfernt, um das "zurück" mal zu testen.
Im Post #247 kann man die Struktur der einzelnen "Blöcke" erkennen. Als nicht-JSON-Profi erstelle ich halt für jeden Menüpunkt direkt darunter alle Unterpunkte...
ZitatUnd wenn ich bei der Temperatur Auswahl bin, steht da auf dem Button "19.5°C:19.5" da sollte doch nur 19.5°C stehen, oder?
Ja da sollte nur 19.5 stehen. Tut es bei mir auch (siehe Screenshot).
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 05 Dezember 2017, 11:49:58
Man weiß ja nicht ob Marlen Inline Keyboards verwendet oder nicht
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 05 Dezember 2017, 11:52:50
Bei mir schaut das so aus:(https://uploads.tapatalk-cdn.com/20171205/6ae1d357a477143436eadbb2755483e4.jpg)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 05 Dezember 2017, 12:17:26
Ahhh.....
das fehlte:
https://forum.fhem.de/index.php/topic,77297.msg692609.html#msg692609 (http://tps://forum.fhem.de/index.php/topic,77297.msg692609.html#msg692609)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 05 Dezember 2017, 12:53:06
Im Wiki https://wiki.fhem.de/wiki/MsgDialog (https://wiki.fhem.de/wiki/MsgDialog) steht auch, wie man schnell zwischen Inline- und normaler Tastatur umschalten kann.
Ist ganz praktisch zum Testen... ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 06 Dezember 2017, 08:18:21
Hallo,

so langsam wird es!
Super Sache, wenn es funktioniert!

Ein paar fragen hab ich noch!

- Kann man eine Taste mit einen Link versehen? Möchte das wenn ich die Taste drücke mein Floorplan geöffnet wird.
- Wenn ich vom meta_Dialog ein anderen Dialog starte, bleibt der meta_Dialog noch offen, kann man das machen, dass der wieder gelöscht wird?

LG 
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 06 Dezember 2017, 12:34:19
Kann das sein, das jetzt keine Benachrichtigungen aus z.B. notify's gesendet werden können, wenn ich auch inlinekeys umgestellt habe?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 06 Dezember 2017, 17:06:09
Zitat von: Marlen am 06 Dezember 2017, 08:18:21
- Kann man eine Taste mit einen Link versehen? Möchte das wenn ich die Taste drücke mein Floorplan geöffnet wird.
siehe das TelegramBot Attribut parseModeSend

Zitat von: Marlen am 06 Dezember 2017, 08:18:21
- Wenn ich vom meta_Dialog ein anderen Dialog starte, bleibt der meta_Dialog noch offen, kann man das machen, dass der wieder gelöscht wird?
Verstehe ich nicht. Am besten mal ein Bild dazu (aber nicht so ein tapatalk Bild ;))

Zitat von: Marlen am 06 Dezember 2017, 12:34:19
Kann das sein, das jetzt keine Benachrichtigungen aus z.B. notify's gesendet werden können, wenn ich auch inlinekeys umgestellt habe?
Wie sieht denn dein notify aus?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 06 Dezember 2017, 17:22:31
Zitat von: igami am 06 Dezember 2017, 17:06:09
siehe das TelegramBot Attribut parseModeSend
Verstehe ich nicht. Am besten mal ein Bild dazu (aber nicht so ein tapatalk Bild ;))
Wie sieht denn dein notify aus?
"Wie sieht denn dein notify aus?"
Hab mehrere notify die Telegrame senden.
Hab aber mehr den  Eindruck, das welche gelöscht werden.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 06 Dezember 2017, 21:24:24
Hier mal ein notify:

Alarmanlage_Status.* {
if( $EVENT eq 'Unscharf' ) {
########## TELEGRAM ###############
my $Notiz = "" if (Value("Notiz_zu_Status") eq "0");
$Notiz = (Value("Notiz_zu_Status"). "\n") if (Value("Notiz_zu_Status") ne "0");
fhem "set Notiz_zu_Status 0";
fhem "set teleBot message " . '@-185234301' . " 🔓 Alarmanlage Status  = $EVENT
$Notiz";;
}}


LG
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 07 Dezember 2017, 08:50:39
Zitat
Zitat von: Marlen am Gestern um 08:18:21

- Kann man eine Taste mit einen Link versehen? Möchte das wenn ich die Taste drücke mein Floorplan geöffnet wird.



siehe das TelegramBot Attribut parseModeSend

Hat hier jemand mal ein Beispiel??

LG
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 08 Dezember 2017, 05:33:31
Zitat von: Marlen am 07 Dezember 2017, 08:50:39
Hat hier jemand mal ein Beispiel??
Habe mich da vertan, damit kann man nur Links erstellen, aber wie man die auf einen Button bekommt weiß ich nicht.
Das solltest du mal im Telegram Thread nachfragen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Keule_09 am 10 Dezember 2017, 23:12:09
Hallo,

hätte da mal 2 Fragen.
1. Ich würde gerne bei meinem Beschattungsdialog gerne auch eine solche Tabelle erstellen wie bei der Temperatur

"Raumtemperatur":{\
"message": [\
        "(zurück|abbrechen:%me%) ",\
        "(5.0°C:05.0|10.0°C:10.0|16.0°C:16.0|17.0°C:17.0) ",\
"(17.5°C:17.5|18.0°C:18.0|18.5°C:18.5|19.0°C:19.0) ",\
"(19.5°C:19.5|20.0°C:20.0|20.5°C:20.5|21.0°C:21.0) ",\
"(21.5°C:21.5|22.0°C:22.0|22.5°C:22.5|23.0°C:23.0) ",\
"(23.5°C:23.5|24.0°C:24.0|24.5°C:24.5|25.0°C:25.0) ",\
        "Aktuell ist [heizung_wohnen_soll:state] eingestellt."\
      ],\
      "Setheizungwozi": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set heizung_wohnen_soll value $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
    }\
  }\


Wie muss ich Setheizungwozi umbauen das es auf folgende Message passt :

"message":[\
"(auf|ab) ",\
"(stop) ",\
"(Position Nacht) ",\
"(20%:50|30%:75|40%:100|50%:127) ",\
"(60%:152|70%:177|80%:203|90%:228) ",\
"(abbrechen|zurück) ",\
"Hier kannst du die Rolläden bedienen:"\
],\



2.Wie muss ich denn den Zurückbutton belegen das er mir nur eine ebene im Dialog hoch springt ?

Hab mir eine Dialog gebaut der Folgende Ebenen hat:
Heizung=>Wohnbereich=>Status=>Status ändern

der Zurückbutton funktioniert nur auf der Ebene Heizung, in darunterliegenden Ebenen passiert nichts da funktioniert nur der Abbrechenbutton

hab auch schon diesen Befehl ausprobiert leider ohne Erfolg 
    "set $SELF say @$recipient Wohnbereich"
           

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 22 Dezember 2017, 20:59:47
Hi,

wie kann ich denn in den Command's einen sleep vor einen Befehl setzten?

Irgendwie klappt das nicht!

LG
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 23 Dezember 2017, 00:25:37
Wie hast du es denn versucht?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 23 Dezember 2017, 19:57:54
So:
"commands": [
  "sleep 20; set R7_GPIO19_FritzBox off",
  "set $SELF say @$recipient Einstellungen"
  ],


LG
Marlen

P.S.: Möchte etwas "bauen" das mir solange ich in Einstellungen|Heizung bin mir die letzte Nachricht alle 30Sek aktualisiert.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 24 Dezember 2017, 07:32:58
War noch ein Fehler im Modul, habe ich gefixt und eingecheckt. Ist gleich per update verfügbar, dann funktioniert es so wie du es angegeben hast.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 29 Dezember 2017, 22:47:58
Hallo,

ich binde in meinen Massage readings mit ein, gibt es eine möglichkeit diese zu runden?

"Strom: [Strom_Calculator:Strom_Zaehler_Umdr_d_state_EnergyDay]kWh "

Hier kommt dann als Output:
ZitatStrom: 6.24712 kWh

möchte aber als Output:
ZitatStrom: 6.3 kWh

LG
  Malren
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 29 Dezember 2017, 23:25:15
Es gibt in Perl und auch fhem eine Funktion zum Runden.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 29 Dezember 2017, 23:30:23
Ja aber wie bau ich die ein?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 29 Dezember 2017, 23:36:21
Ich würde mir einfach ein extra Reading umrechnen lassen und dieses dann direkt ablesen und zur Ausgabe in Telegram nutzen.

Den Rest kannst du dir sicher selber erarbeiten.  ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 29 Dezember 2017, 23:40:32
Ja, das wäre jetzt auch meine Lösung gewesen!
Und das geht nicht einfacher?

LG
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 29 Dezember 2017, 23:44:22
Zitat von: Marlen am 29 Dezember 2017, 23:40:32
Ja, das wäre jetzt auch meine Lösung gewesen!
Und das geht nicht einfacher?

LG
  Marlen

Warum hast du das nicht geschrieben und dein bisheriges Ergebnis präsentiert? Und spezifisch nach einer vereinfachten Lösung gefragt?

So wärst du bestimmt schneller ans Ziel gekommen...

Zu deiner Antwort: Ich habe mich mit dem Modul bisher nicht befasst, aber vielleicht kannst du auch direkt im Modul das entsprechende Reading Runden.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 29 Dezember 2017, 23:52:19
https://forum.fhem.de/index.php/topic,77297.msg738813.html#msg738813 (https://forum.fhem.de/index.php/topic,77297.msg738813.html#msg738813)

Ich hab ja noch keine Ergebnisse!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 29 Dezember 2017, 23:56:07
Zitat von: Marlen am 29 Dezember 2017, 23:40:32
Ja, das wäre jetzt auch meine Lösung gewesen!

Naja, hier hast du geschrieben,  dass das auch deine Idee wäre. Warum setzt du diese nicht um oder versuchst es und wendest dich nochmal ans Forum, wenn du nicht weiterkommst?

Das Ausrufezeichen betont das ganze so als hättest du es schon etwas angefangen???
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 30 Dezember 2017, 00:11:25
Jaein,

klar wäre es kein Problem in meinen Stromcalculator eine bzw. mehrere gerundete readings zu erzeugen.
Allerdings hat das Stromcalculatormodul schon genug readings extra nochmal 5 zusätzliche macht das ganze nicht übersichtlicher finde ich.
Und nur um im Dialog die Werte gerundet zu zeigen, finde ich die Lösung mit Kanonen auf Spatzen geschossen!
Ich dachte halt es gibt eine Möglichkeit das einfach im Dialog
"Strom: [Strom_Calculator:Strom_Zaehler_Umdr_d_state_EnergyDay]kWh "
mit einzubauen.

Gute Nacht!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: vitolinker am 30 Dezember 2017, 09:37:03
Moin,

wie wäre es hiermit, vielleicht nicht schön, aber wenn's funktioniert:
attr Strom_Calculator userReadings Strom_Zaehler_Umdr_d_state_EnergyDay { round(( ReadingsVal("Strom_Calculator","Strom_Zaehler_Umdr_d_state_EnergyDay",0)*10)) / 10}

VG
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 30 Dezember 2017, 14:20:48
Commandref zu set
Zitat
Ab featurelevel 5.7 ersetzt das set und setreading Befehl [device:name] mit dem Wert des Readings, Internals oder Attributes für device, falls sowohl device, als auch Reading, Internal oder Attribut existiert, und nicht leer ist.
        Man kann einen der Präfixe r:, i: oder a: verwenden, um die Suche einzuschränken, genau wie im devspec.
        Das Suffix :d extrahiert die erste Zahl.
        Das Suffix :i extrahiert die erste Zahl als Ganzzahl.
        Das Suffix :r<n> extrahiert die erste Zahl, und rundet sie auf <n> Dezimalstellen. Falls <n> fehlt, dann wird auf eine Dezimalstelle gerundet.
        Das Suffix :t liefert den Zeitstempel des Readings
        Das Suffix :sec liefert Anzahl der Sekunden seit Änderung des Readings.
Also einfach mal mit

"Strom: [Strom_Calculator:Strom_Zaehler_Umdr_d_state_EnergyDay:r]kWh "

versuchen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 30 Dezember 2017, 16:02:21
SUPER!
Das ist das was ich suche.

Danke!!!

LG
  Marlen :-*
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 04 Januar 2018, 14:56:15
Hallo.
Ich versuche gerade mir den meta_Dialog einzurichten und nach x Versuchen, erhalte ich immer noch die folgende Fehlermeldung.

Usage: define <name> msgDialog {JSON}

'"' expected, at character offset 1 (before "\\\n  "JARVIS\\Teleg...") at ./FHEM/76_msgDialog.pm line 93.

Ich verstehe nur nicht warum und woher der Fehler kommt. Kann mir bitte jemand helfen?
Danke.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 06 Januar 2018, 08:04:11
Was versuchst du denn in die DEF zu schreiben?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 06 Januar 2018, 08:25:03
Ich habe versucht per DEF und auch per Raw Defination, die Daten aus dem Wiki einzutragen.

defmod meta_Dialog msgDialog {\
  "%me%": {\
    "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."\
    ]\
  }\
}
attr meta_Dialog allowed everyone


BEi DEF natürlich ohne die erste und letzte Zeile.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 06 Januar 2018, 08:44:35
Zitat von: ErzGabriel am 06 Januar 2018, 08:25:03
Ich habe versucht per DEF und auch per Raw Defination, die Daten aus dem Wiki einzutragen.

defmod meta_Dialog msgDialog {\
  "%me%": {\
    "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."\
    ]\
  }\
}
attr meta_Dialog allowed everyone


BEi DEF natürlich ohne die erste und letzte Zeile.
Nur mal so ins blaue, die backslash in jeder Zeile hast du aber noch copy paste entfernt?

Schnitzelbrain

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 06 Januar 2018, 09:01:28
Ne, das habe ich mal wieder vergessen. Das wird der Fehler sein, verdammt.
Danke.

EDIT:
Nein, daran liegt es nicht. Erhalte immer noch den gleichen Fehler.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 06 Januar 2018, 15:05:31
Und nun bitte ein list oder Raw definition vom msgConfig device.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 06 Januar 2018, 15:14:43
Ich habe mit der Zeile

defmod meta_Dialog msgDialog {}

das Device angelegt und will dann über RAW definition folgendes einkopieren

{\
  "%me%": {\
    "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."\
    ]\
  }\
}
attr meta_Dialog allowed everyone



Wobei ich heute ide Backslahs entfernt habe.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 06 Januar 2018, 15:23:03
Und das Ergebnis?

Zitat von: igami am 06 Januar 2018, 15:05:31
Und nun bitte ein list oder Raw definition vom msgConfig device.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 06 Januar 2018, 15:34:51
Uppps, überlesen. Sorry.

Meine msgConfig sieht wie folgt aus.

define 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 *******
attr myMsgConfig msgDialog_evalSpecials me=*****\TelegramBot=*****
attr myMsgConfig msgType text
attr myMsgConfig room Telegram
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 3


* sind durch den Namen vom Bot ersetzt. Beim nalgen, keine Probleme gehabt.
Ergebnis heute bei dem meta_Dialog. Immer noch die Fehleermeldung und Device wird nicht angelegt.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 07 Januar 2018, 09:59:37
guck dir mal dein msgDialog_evalSpecials Attribut an, das stimmt so nicht.
Laut commandref:
Zitat
Leerzeichen getrennte Liste von Name=Wert Paaren.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 07 Januar 2018, 11:00:09
Jo, das war es. Danke.
Habe mir den Waschmaschinen Dialog zum testen angelegt aber irgendwie zeigt der Bot mir das nicht an.
Ich habe sämtliche Versionen zum starten des Dialogs probiert, die mir einfallen.
Mir will es nicht in den Kopf, wie das funktioniert, bin ich wohl zu blöde für.

Danke allen für die Hilfe aber ich gebe auf.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 07 Januar 2018, 11:40:24
Zitat von: ErzGabriel am 07 Januar 2018, 11:00:09
Danke allen für die Hilfe aber ich gebe auf.
Schade :(
Falls du es dir anders überlegst melde dich einfach wieder.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 07 Januar 2018, 11:54:37
Ich werde mir das nicht anders überlegen, da ich es nicht schaffe ein laufendes Grundsystem hinzukriegen.
Da ich jetzt keine Idee mehr habe, was ich wie noch falsch machen kann und es mich nur noch frustet.

Währe mir nicht mein Fhem abgeschmiert und hätte ich auf eine neue Version updaten müssen, hätte ich ein funktionierendes Grundsystem, was Spaß machte zu testen und zu basteln aber so macht es kein Spaß mehr.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 07 Januar 2018, 12:35:41
Trotzdem ein häufiger "Fehler": Es wurde das Attribut allowed nicht gesetzt.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 07 Januar 2018, 16:35:56
Hallo igami,

ich habe mir heute mal die Zeit genommen und wollte meine Eigenprogrammierung des Telegramm-Dialogs durch deinen ablösen, da ich Probleme habe, wenn mehrere User gleichzeitig Anfragen stellen.
Nun habe ich mich durch die Commandref, durchs Wiki und durchs Forum gekämpft, jede Menge an meinem FHEM verändert, aber ich blicke trotzdem noch nicht ganz durch. Bei all den Erklärungen kann ich nirgends einen roten Faden finden. Könntest du vielleicht die Commandref oder das Wiki um ein Minimal-Beispiel erweitern? Welche Steps muss ich gehen um ein einfaches Frage - Antwort -Szenario hinzubekommen? Was ist mit ROOMMATE oder GUEST? Brauche ich das zwingend um das Modul nutzen zu können oder nur wenn ich später irgendwelche Berechtigungen steuern möchte?

Ich habe jetzt meine msgConfig angepasst und wenn ich es richtig verstanden habe, kann ich in meinem Fall mit dem Wort "startMD" den Dialog starten...?


defmod myMsgConfig msgConfig
attr myMsgConfig userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig DbLogExclude .*
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig group Global
attr myMsgConfig msgContactPush TelegramBot
attr myMsgConfig msgDialog_evalSpecials me=startMD
attr myMsgConfig msgType text
attr myMsgConfig room SYSTEM->Fhem
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 2


Aber wie geht's dann weiter? Ich definiere einen einfachen Dialog. Und jetzt?


defmod TelegramMainMsgDialog msgDialog {\
  "%me%": {\
    "match": "test",\
    "message": [\
      "Das ist ein Test"\
    ]\
  }\
}
attr TelegramMainMsgDialog DbLogExclude .*
attr TelegramMainMsgDialog group Telegram


Mir fehlt leider irgendwie der rote Faden. Ich hoffe, du verstehst mein Problem und kannst mir helfen. ;)

VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 07 Januar 2018, 16:50:47
Ich schreibe mir die Überarbeitung der Commandref auf meine Liste.

Zitat von: ToM_ToM am 07 Januar 2018, 16:35:56
Was ist mit ROOMMATE oder GUEST? Brauche ich das zwingend um das Modul nutzen zu können oder nur wenn ich später irgendwelche Berechtigungen steuern möchte?
Ja, wird zwingend benötigt

Zitat von: ToM_ToM am 07 Januar 2018, 16:35:56
Ich habe jetzt meine msgConfig angepasst und wenn ich es richtig verstanden habe, kann ich in meinem Fall mit dem Wort "startMD" den Dialog starten...?


defmod myMsgConfig msgConfig
attr myMsgConfig userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig DbLogExclude .*
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig group Global
attr myMsgConfig msgContactPush TelegramBot
attr myMsgConfig msgDialog_evalSpecials me=startMD
attr myMsgConfig msgType text
attr myMsgConfig room SYSTEM->Fhem
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 2


Aber wie geht's dann weiter? Ich definiere einen einfachen Dialog. Und jetzt?


defmod TelegramMainMsgDialog msgDialog {\
  "%me%": {\
    "match": "test",\
    "message": [\
      "Das ist ein Test"\
    ]\
  }\
}
attr TelegramMainMsgDialog DbLogExclude .*
attr TelegramMainMsgDialog group Telegram

Dein TelegramMainMsgDialog reagiert auf startMD und antwortet dann mit "Das ist ein Test". Aber nur wenn der Nutzer dazu berechtigt ist (Attribut allowed)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 07 Januar 2018, 17:06:25
ZitatJa, wird zwingend benötigt

Okay, ich habe das jetzt angelegt.

defmod Thomas ROOMMATE
attr Thomas DbLogExclude .*
attr Thomas alias Status
attr Thomas 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 Thomas group Thomas
attr Thomas icon people_sensor
attr Thomas rr_realname group
attr Thomas sortby 1
attr Thomas webCmd state


Da das Roommate im msgDialog bei allowed nicht auftaucht, habe ich dort mal auf "everyone" gesetzt.


defmod TelegramMainMsgDialog msgDialog {\
  "%me%": {\
    "match": "test",\
    "message": [\
      "Das ist ein Test"\
    ]\
  }\
}
attr TelegramMainMsgDialog DbLogExclude .*
attr TelegramMainMsgDialog allowed everyone
attr TelegramMainMsgDialog group Telegram


Wenn ich nun den Text "startMD" per Telegram an meinen Bot sende, bekomme ich aber trotzdem keine Antwort.


VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 07 Januar 2018, 17:23:36
Im ROOMMATE muss auch noch das Attribut msgContactPush gesetzt werden.
Beispiel:

attr Thomas msgContactPush TelegramBot:@<deineTelegramID>

Danach im Dialog noch "set update allowed" ausführen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 07 Januar 2018, 17:30:40
Vielen Dank!

Jetzt bekomme ich auch eine Nachricht. :) Nun kann ich mich mal durchhangeln und versuchen, ein Inline Menü aufzusetzen. :)

VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 07 Januar 2018, 18:56:03
Hi igami,

ich habe jetzt die ersten Dialoge gebastelt bekommen.
Nun aber folgendes Problem.

Wenn ich folgenden Code verwende, bekomme ich keine Antwort:


defmod TelegramMsgDialog_Security msgDialog {\
  "Sicherheit": {\
    "message": [\
"(abbrechen)"\
    ]\
  }\
}
attr TelegramMsgDialog_Security DbLogExclude .*
attr TelegramMsgDialog_Security allowed everyone,Thomas
attr TelegramMsgDialog_Security group Telegram


lasse ich aber die Klammern in der message weg, dann kommt wie erwartet "abbrechen" als Nachricht.


defmod TelegramMsgDialog_Security msgDialog {\
  "Sicherheit": {\
    "message": [\
"abbrechen"\
    ]\
  }\
}
attr TelegramMsgDialog_Security DbLogExclude .*
attr TelegramMsgDialog_Security allowed everyone,Thomas
attr TelegramMsgDialog_Security group Telegram
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 07 Januar 2018, 21:02:54
Zitat von: Flipper92 am 07 Januar 2018, 18:32:46
Hey,

Ich hab ein Problem.
Seit ca. 2 Tagen funktioniert mein Chat nicht mehr.
Ich weiß nur nicht woran es leigt.

Ich hab schon rausgefunden, das meine User rausgefallen sind. Nach dem neuen einrichten hab ich folgenden log:

2018.01.07 19:15:21 3: msg rr_Dominik: ID=[ZENSIERT].[ZENSIERT].1 TYPE=push ROUTE=TelegramBot RECIPIENT=@[ZENSIERT] STATUS=OK PRIORITY=0 TITLE='' MSG='(Wohnzi # Soll 20.0°C # Ist T: 22.4 H: 48:Heizungwozi)
(Schlaf # Soll 21.0°C # Ist T: 20.2 H: 56:Heizungschlaf)
(Jenni # Soll 20.0°C # Ist T: 19.6 H: 67:Heizungjenni)
(Küche # Soll 18.0°C:Heizungkueche|Bad # Soll 17.0°C:Heizungbad)
(An/Aus:heizunganaus|zurück:%me%)
(Aktualisieren:aktulaisierenheizung)
Aktuell ist die Heizungsautomation: on

Wohnzimmer Ventil: 22 On-Time: 33.848
Schlafzimmer Ventil: 12 On-Time: 100.607
Bad Ventil: 0 On-Time: 2.064
Arbeitszimmer Ventil: 0 On-Time: 87.565
Küche Ventiel: 0 On-Time: 3.470

Paul: 38.1°C 18%'


Eine Nachricht kommt jedoch nicht an.

Edit: Log bereinigt
Was meinst du mit neu einrichten? im TelegramBot utf8-specials auf 1 gesetzt? %me% wird nicht aufgelöst.

Zitat von: ToM_ToM am 07 Januar 2018, 18:56:03
Hi igami,

ich habe jetzt die ersten Dialoge gebastelt bekommen.
Nun aber folgendes Problem.

Wenn ich folgenden Code verwende, bekomme ich keine Antwort:


defmod TelegramMsgDialog_Security msgDialog {\
  "Sicherheit": {\
    "message": [\
"(abbrechen)"\
    ]\
  }\
}
attr TelegramMsgDialog_Security DbLogExclude .*
attr TelegramMsgDialog_Security allowed everyone,Thomas
attr TelegramMsgDialog_Security group Telegram


lasse ich aber die Klammern in der message weg, dann kommt wie erwartet "abbrechen" als Nachricht.


defmod TelegramMsgDialog_Security msgDialog {\
  "Sicherheit": {\
    "message": [\
"abbrechen"\
    ]\
  }\
}
attr TelegramMsgDialog_Security DbLogExclude .*
attr TelegramMsgDialog_Security allowed everyone,Thomas
attr TelegramMsgDialog_Security group Telegram

Man kann keinen Button ohne Nachricht senden ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Flipper92 am 07 Januar 2018, 21:06:10
Zitat von: igami am 07 Januar 2018, 21:02:54
Was meinst du mit neu einrichten? im TelegramBot utf8-specials auf 1 gesetzt? %me% wird nicht aufgelöst.

Hab gerade mal den pi neu gestartet. Daraufhin waren alle meine Dialogs weg.
Hab sie nun per RAW neu Importiert (ein hoch auf Backups :-) ) und nun läuft es wieder.
Ich weiß nicht was das Problem war. Hauptsache es funktioniert weder. :-D
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 08 Januar 2018, 19:41:11
Hey igami, kann es sein dass es zu Problemen kommt wenn der Text der innerhalb des message Feldes per Perl zurückgegeben wird, besondere Zeichen enthält?

Folgendes liefert mir nämlich gar nichts zurück.


defmod TelegramMsgDialog_FritBoxCallList msgDialog {\
  "Anrufliste": {\
    "message": [\
      "{return telegramBotGetFritzBoxCallListMessage('FritzBoxCallList') }",\
      "Anrufliste"\
    ]\
  }\
}
attr TelegramMsgDialog_FritBoxCallList DbLogExclude .*
attr TelegramMsgDialog_FritBoxCallList allowed Thomas
attr TelegramMsgDialog_FritBoxCallList group Telegram
attr TelegramMsgDialog_FritBoxCallList verbose 5


Rufe ich die obige Funktionin FHEM direkt auf, bekomme ich eine Liste zurück die in Etwa folgendermaßen aufgebaut ist (Nummer habe ich hier verfälscht):


10.12.17 - 11:08:30 | - (0123456789123) - 00:47:05
18.12.17 - 07:12:55 | - (0123456789123) - 01:10:41


EDIT: Okay, habe es selbst herausbekommen. :)

So gehts:

defmod TelegramMsgDialog_FritBoxCallList msgDialog {\
  "Anrufliste": {\
    "message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{return telegramBotGetFritzBoxCallListMessage('FritzBoxCallList') }"\
    ]\
  }\
}
attr TelegramMsgDialog_FritBoxCallList DbLogExclude .*
attr TelegramMsgDialog_FritBoxCallList allowed Thomas
attr TelegramMsgDialog_FritBoxCallList group Telegram
attr TelegramMsgDialog_FritBoxCallList verbose 5




VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 09 Januar 2018, 12:16:24
Hallo,

vielen Dank, für dieses tolle Modul!
Das ist viel besser als meine "alte" Menüführung in Telegram.

Hab mal meine Dialog-Struktur angehängt.

Find das macht schon wenig süchtig.

LG
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 09 Januar 2018, 16:38:37
Hi.
Ich habe da ein kleines Problem mit meinem ersten Dialog und finde den Fehler nicht oder sehe ihn nicht.
Schaut Ihr mal bitte drauf.

defmod beleuchtung_Dialog msgDialog {"Licht":{\
  "message": [\
    "(Lampen einschalten) ",\
    "(Lampen ausschalten) ",\
    "(abbrechen) ",\
    "Lampen schalten:"\
  ],\
    "Lampen einschalten":{\
    "message":[\
      "{return('(Büro einschalten) ') if(ReadingsVal('HUEGroup4', 'state', '') eq 'off')}",\
  "{return('(Diele einschalten) ') if(ReadingsVal('HUEGroup2', 'state', '') eq 'off')}",\
      "{return('(Küche einschalten) ') if(ReadingsVal('HUEGroup5', 'state', '') eq 'off')}",\
      "{return('(Schlafzimmer einschalten) ') if(ReadingsVal('HUEGroup3', 'state', '') eq 'off')}",\
      "(abbrechen) ",\
      "Welche Lampen soll eingeschaltet werden?"\
    ],\
    "Büro einschalten":{\
    "commands": "set HUEGroup4 on",\
    "message":[\
      "(%me%) ",\
      "Die Lampen im Büro wurden eingeschaltet."\
    ]\
    },\
    "Diele einschalten":{\
    "commands": "set HUEGroup2 on",\
    "message":[\
      "(%me%) ",\
      "Die Lampen in der Diele wurden eingeschaltet."\
    ]\
    },\
    "Kueche einschalten":{\
    "commands": "set HUEGroup5 on",\
    "message":[\
      "(%me%) ",\
      "Die Lampen in der Kueche wurden eingeschaltet."\
    ]\
    },\
    "Schlafzimmer einschalten":{\
    "commands": "set HUEGroup3 on",\
    "message":[\
      "(%me%) ",\
      "Die Lampe im Schlafzimmer wurde eingeschaltet."\
    ]\
}\
    },\
"Lampen ausschalten":{\
    "message":[\
      "{return('(Büro ausschalten) ') if(ReadingsVal('HUEGroup4', 'state', '') ne 'off')}",\
  "{return('(Diele ausschalten) ') if(ReadingsVal('HUEGroup2', 'state', '') ne 'off')}",\
      "{return('(Küche ausschalten) ') if(ReadingsVal('HUEGroup5', 'state', '') ne 'off')}",\
      "{return('(Schlafzimmer ausschalten) ') if(ReadingsVal('HUEGroup3', 'state', '') ne 'off')}",\
      "(abbrechen) ",\
      "Welche Lampen soll ausgeschaltet werden?"\
    ],\
    "Büro ausschalten":{\
    "commands": "set HUEGroup4 on",\
    "message":[\
      "(%me%) ",\
      "Die Lampen im Büro wurden ausgeschaltet."\
    ]\
    },\
    "Diele ausschalten":{\
    "commands": "set HUEGroup2 off",\
    "message":[\
      "(%me%) ",\
      "Die Lampen in der Diele wurden ausgeschaltet."\
    ]\
    },\
    "Kueche ausschalten":{\
    "commands": "set HUEGroup5 off",\
    "message":[\
      "(%me%) ",\
      "Die Lampen in der Kueche wurden ausgeschaltet."\
    ]\
    },\
    "Schlafzimmer ausschalten":{\
    "commands": "set HUEGroup3 off",\
    "message":[\
      "(%me%) ",\
      "Die Lampe im Schlafzimmer wurde ausgeschaltet."\
    ]\
    }\
   }\
}\
}
attr beleuchtung_Dialog allowed rr_Marcus
attr beleuchtung_Dialog room Telegram

setstate beleuchtung_Dialog 2018-01-09 16:31:36 state Initialized


Wenn ich auf Lampen einschalten gehe, steht da nur abbrechen.
Gehe ich auf Lampen ausschalten, stehen alle aufgelisteten Lampen und ich kann sie auch schalten.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 09 Januar 2018, 16:43:33
Probier mal das ReadingsVal direkt in der Kommandozeile, eventuell hat sich ein Tippfehler eingeschlichen. Das solltest du dann erkennen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 09 Januar 2018, 16:59:20
Ich habe es gefunden, nach dem 90 mal durchlesen. War ein zeichenfehler.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 10 Januar 2018, 19:09:27
Hey igami,

gibt's irgendwie die Möglichkeit als TRIGGER auch einen Regex zu verwenden?
Ich würde mir gerne ähnlich deines Waschmaschinen-Beispiels einen Dialog für meine Heizkörperthermostate basteln, aber nicht für jedes Thermostat einen eigenen Dialog bauen wollen.


{
"Raumtemperaturen": {
"message": [
"(Arbeitszimmer) (Badezimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"$message": {
"message": [
"(5.0°C:05.0|10.0°C:10.0|16.0°C:16.0|17.0°C:17.0) ",
"(17.5°C:17.5|18.0°C:18.0|18.5°C:18.5|19.0°C:19.0) ",
"(19.5°C:19.5|20.0°C:20.0|20.5°C:20.5|21.0°C:21.0) ",
"(21.5°C:21.5|22.0°C:22.0|22.5°C:22.5|23.0°C:23.0) ",
"(abbrechen) ",
"Heizung im $message einstellen"
]
}
  }
}


VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 10 Januar 2018, 19:37:52
ja, dafür gibt es match ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 10 Januar 2018, 23:30:34
Zitat von: igami am 10 Januar 2018, 19:37:52
ja, dafür gibt es match ;)
Das mit dem match habe ich gesehen. Aber ich brauche doch zwingend den TRIGGER... oder nicht? Kann das doch nicht leer lassen und nur match verwenden. Kannst du mir das mal bitte anhand meines Beispiels erklären? :)

Gesendet von meinem SM-G930F mit Tapatalk

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 11 Januar 2018, 06:26:41
Bei Trigger schreibst du irgendwas rein. Im Waschmaschine Dialog gibt es das mit der Uhrzeit.
Ich habe auch noch einen anderen Dialog der sowas benutzt, muss ich am Wochenende mal raussuchen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 11 Januar 2018, 07:08:29
ZitatBei Trigger schreibst du irgendwas rein. Im Waschmaschine Dialog gibt es das mit der Uhrzeit.

Ah okay, dann hatte ich das noch ein wenig falsch verstanden. Dachte, der Trigger würde ähnlich wie match arbeiten.

Nun habe ich es so hinbekommen. :)


{
"Raumtemperaturen": {
"message": [
"(Arbeitszimmer) (Badezimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Arbeitszimmer|Badezimmer|Wohnzimmer)",
"message": [
"(5.0°C:05.0|10.0°C:10.0|16.0°C:16.0|17.0°C:17.0) ",
"(17.5°C:17.5|18.0°C:18.0|18.5°C:18.5|19.0°C:19.0) ",
"(19.5°C:19.5|20.0°C:20.0|20.5°C:20.5|21.0°C:21.0) ",
"(21.5°C:21.5|22.0°C:22.0|22.5°C:22.5|23.0°C:23.0) ",
"(abbrechen) ",
"Heizung im $message einstellen"
]
}
  }
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 11 Januar 2018, 07:43:55
Kann ich innerhalb einer Struktur eine Variable definieren die ich dann eine Ebenen tiefer wieder aufrufen kann?
Oder müsste ich das über einen externen Dummy lösen?

- Raumtemperatur einstellen
   - Bad, Schlafzimmer, Wohnzimmer
      - 10.0, 12.0, 15.0, 17.0, 20.0, 23.0
      - HIER WÜRDE ICH JETZT GERNE DEN RAUM WISSEN DEN ICH 2 EBENEN ZUVOR AUSGEWÄHLT HATTE
   
VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: RoBra81 am 11 Januar 2018, 08:18:55
Zitat von: ToM_ToM am 11 Januar 2018, 07:43:55
Kann ich innerhalb einer Struktur eine Variable definieren die ich dann eine Ebenen tiefer wieder aufrufen kann?
Oder müsste ich das über einen externen Dummy lösen?

- Raumtemperatur einstellen
   - Bad, Schlafzimmer, Wohnzimmer
      - 10.0, 12.0, 15.0, 17.0, 20.0, 23.0
      - HIER WÜRDE ICH JETZT GERNE DEN RAUM WISSEN DEN ICH 2 EBENEN ZUVOR AUSGEWÄHLT HATTE
   
VG, Thomas
Ich habe es über


setreading $SELF Heizung $message


nach der Raumauswahl gelöst...

Gesendet von meinem SM-G935F mit Tapatalk

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 11 Januar 2018, 13:38:05
Hi,

ich wollte mich nun auch mal ran machen, um meine Einkaufsliste darüber abzuwickeln.

Da ich kein Residents Device habe, habe ich das Attribut auf "everyone" gestellt. (geht es überhaupt ohne Residents Device?)

Ich verstehe noch nicht so ganz den Zusammenhang der Module msgconifg und msgdialog...

Jedenfalls passiert nichts, wenn ich den Bot mit dem Trigger "Einkaufsliste" anschreibe.

Hier ein list meines dialogs:


Historie löschen
Internals:
   CFGFN     
   DEF        {
  "Einkaufsliste": {
    "message": [
      "(Waren hinzufügen) ",
      "(Waren entfernen) ",
      "(einkaufen) ",
      "(abbrechen) ",
      "{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];; return('Keine Einträge vorhanden') unless($content);; return(join('\n', split(',', $content)));;}"
    ],
    "Waren hinzufügen": {
      "message": [
        "Bitte jede Ware als neue Nachricht hinzufügen.",
        "Das hinzufügen von Waren durch \"/beenden\" beenden."
      ],
      "Ware hinzufügen": {
        "match": "[^/]+",
        "commands": [
          "set %PostMe% add %list% $message",
          "setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen"
        ]
      }
    },
    "Waren entfernen": {
      "message": [
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'beenden'). ') ')}",
        "Welche Ware möchtest du entfernen?"
      ],
      "Ware entfernen": {
        "match": "^(?!beenden).+",
        "commands": [
          "set %PostMe% remove %list% $message",
          "set $SELF say @$recipient Einkaufsliste|Waren entfernen"
        ]
      }
    },
    "einkaufen": {
      "commands": [
        "setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"
      ],
      "message": [
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",
        "(beenden) ",
        "Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."
      ]
    },
    "noch einzukaufen": {
      "message": [
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",
        "(beenden) ",
        "Noch einzukaufen:"
      ],
      "Ware eingekauft": {
        "match": "^(?!beenden).+",
        "commands": [
          "set %PostMe% remove %list% $message",
          "set $SELF say @$recipient Einkaufsliste|noch einzukaufen"
        ]
      }
    }   
  }
}
   MSGCOMMAND msg push \@$recipients $message
   NAME       Einkaufsliste_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         41197
   NTFY_ORDER 50-Einkaufsliste_Dialog
   STATE      Initialized
   TRIGGER    Einkaufsliste
   TYPE       msgDialog
   READINGS:
     2018-01-11 12:53:27   state           Initialized
Attributes:
   allowed    everyone
   evalSpecials PostMe=PostIt list=Einkaufsliste
   room       Einkauf


Und hier des mdsconfig Devices:

Internals:
   CFGFN     
   NAME       msg
   NOTIFYDEV  TYPE=(Jabber|TelegramBot|yowsup)
   NR         41174
   NTFY_ORDER 50-msgConfig
   STATE      initialized
   TYPE       msgConfig
   READINGS:
     2018-01-11 12:49:24   fhemMsgState    initialized
Attributes:
   comment    FHEM Global Configuration for command 'msg'
   group      Global
   msgContactPush teleBot
   msgType    text
   room       Telegram
   stateFormat fhemMsgState
   userattr   msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
   verbose    3


Was mache ich falsch? *FacePalm*

Danke und Gruß,
Fixel
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 11 Januar 2018, 16:09:33
Es wird zwingend ein ROOMMATE oder GUEST device benötigt.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 11 Januar 2018, 19:35:04
Hat das einen Grund, warum man extra ein Roommate Device erstellen muss?

Sehe nicht so ganz den Vorteil/Sinn bei der Sache. Man könnte doch einfach alle bekannten Kontakte oder eben nur bestimmte für das Modul zur Kommunikation freigeben. Warum den Umweg über Roommate?

EDIT: Nach dem anlegen des Devices, geht es nun. Alles etwas umständlich  :o Werde noch 3 Weitere für den Rest der Familie anlegen und dann mal schauen!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 11 Januar 2018, 19:40:22
Hallo RoBra81,

die Idee mit dem Reading finde ich super. Aber deine Konfiguration hat einen Haken. Wenn ich die Anfrage starte um die Temperatur im Badezimmer zu ändern und als Reading das "Badezimmer" schreibe, in der Zwischenzeit jemand die Temperatur im "Wohnzimmer" ändern will, kann es sein dass wir uns in die Quere kommen und ich dann die Temperatur für den falschen Raum ändere.
Hier müsste man noch den Recipient mit abspeichern (idealerweise die ID). Aber in der Variable steht leider nur der Name. Der kann doch mit Sicherheit mehrfach vorkommen.
Irgendwie ist mir das alles noch zu unsauber. Igami, wie hast du das denn gelöst? Oder steuerst du deine Heizung nicht darüber?

VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 11 Januar 2018, 21:03:48
Zitat von: Fixel2012 am 11 Januar 2018, 19:35:04
Hat das einen Grund, warum man extra ein Roommate Device erstellen muss?

Sehe nicht so ganz den Vorteil/Sinn bei der Sache. Man könnte doch einfach alle bekannten Kontakte oder eben nur bestimmte für das Modul zur Kommunikation freigeben. Warum den Umweg über Roommate?
Weil das ganze Modul möglichst viele Kommunikationsmittel abdecken soll. Der ROOMMATE dient der Zuordnung von eingehenden Nachrichten, egal ob Telegram, Whatsapp oder Jabber. Damit ist es möglich, dass ein Dialog von der einen Partei via Telegram Benutzt wird und von einer anderen Partei via Jabber. Wobei Telegram durch die Keyboards wohl die komfortabelste integration bietet.

Zitat von: ToM_ToM am 11 Januar 2018, 19:40:22
die Idee mit dem Reading finde ich super. Aber deine Konfiguration hat einen Haken. Wenn ich die Anfrage starte um die Temperatur im Badezimmer zu ändern und als Reading das "Badezimmer" schreibe, in der Zwischenzeit jemand die Temperatur im "Wohnzimmer" ändern will, kann es sein dass wir uns in die Quere kommen und ich dann die Temperatur für den falschen Raum ändere.
Hier müsste man noch den Recipient mit abspeichern (idealerweise die ID). Aber in der Variable steht leider nur der Name. Der kann doch mit Sicherheit mehrfach vorkommen.
Irgendwie ist mir das alles noch zu unsauber. Igami, wie hast du das denn gelöst? Oder steuerst du deine Heizung nicht darüber?
Nein, ich steuere meine Heizung nicht darüber. Es ist ein Wert für Anwesenheit festgelegt und ein Wert für Abwesenheit.

Im Berechtigungen Dialog habe ich es auch über ein Reading gelöst.

defmod Berechtigungen_Dialog msgDialog {\
  "Berechtigungen": {\
    "message": [\
      "{'('.join(') (', devspec2array('TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.+')).') '}",\
      "(everyone) ",\
      "(beenden) ",\
      "Für welchen Benutzer willst du die Berechtigungen festlegen?"\
    ],\
    "Benutzer": {\
      "match": "(%allowed%|everyone)",\
      "commands": "setreading $SELF $recipient_user $message",\
      "message": [\
        "{my @dialogs = sort{lc($a) cmp lc($b)} devspec2array('TYPE=msgDialog:FILTER=NAME!=$SELF');; $_ = (AttrVal($_, 'allowed', '') =~ m/$message/ ? '🔵 ' : AttrVal($_, 'allowed', '') =~ m/everyone/ ? '🔷 ' : '⚫️ ').$_ foreach(@dialogs);; return('('.join(') (', @dialogs).') ')}",\
        "(zurück) ",\
        "(abbrechen) ",\
        "Zum Ändern der Berechtigung bitte den entsprechenden Dialog auswählen.",\
        "🔵 Benutzer ist explizit berechtigt",\
        "🔷 Benutzer ist implizit berechtigt",\
        "⚫️ Benutzer ist nicht berechtigt"\
      ],\
      "Berechtigung": {\
        "match": "(🔵|🔷|⚫️) %dialogs%",\
        "commands": [\
          "{my ($state, $dialog) = ('$message' =~ m/(🔵|🔷|⚫️) %dialogs%/g);; my $user = ReadingsVal('$SELF', '$recipient_user', '');; my %allowed = map{$_, 1} (split(',', AttrVal($dialog, 'allowed', '')));; if($state eq '🔵'){delete $allowed{$user}}else{$allowed{$user} = 1};; fhem('attr '.$dialog.' allowed '.join(',', keys %allowed));;}",\
          "set $SELF say @$recipient Berechtigungen|[$SELF:$recipient_user]"          \
        ],\
        "not_the_end": {}\
      }\
    }\
  }\
}
attr Berechtigungen_Dialog allowed Michael_P
attr Berechtigungen_Dialog evalSpecials allowed={'('.join('|', devspec2array('TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.+')).')'}\
dialogs={'('.join('|', devspec2array('TYPE=msgDialog')).')'}
attr Berechtigungen_Dialog room msg
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 12 Januar 2018, 09:59:35
Hey, igami,

ich bekomme das mit dem Escapen einfach nicht hin.

Habe schon alles mögliche ausprobiert mit einfachen/doppelten Anführungszeichen, mit/ohne Backslash, mit/ohne Perlcode...

EDIT: Es geht um die Zeile "commands": "{fhem('setreading $SELF ' . $recipient . '_Room $message')}",


{
"Raumtemperaturen": {
"message": [
"(Arbeitszimmer) (Badezimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Arbeitszimmer|Badezimmer|Wohnzimmer)",
"commands": "{fhem('setreading $SELF ' . $recipient . '_Room $message')}",
"message": [
"(5.0°C:05.0|10.0°C:10.0|16.0°C:16.0|17.0°C:17.0) ",
"(17.5°C:17.5|18.0°C:18.0|18.5°C:18.5|19.0°C:19.0) ",
"(19.5°C:19.5|20.0°C:20.0|20.5°C:20.5|21.0°C:21.0) ",
"(21.5°C:21.5|22.0°C:22.0|22.5°C:22.5|23.0°C:23.0) ",
"(abbrechen) ",
"Heizung im $message einstellen"
]
}
  }
}


Ich bekomme immer Fehlermeldungen wie diese:


2018.01.12 09:55:59 1: ERROR evaluating {fhem('setreading TelegramMsgDialog_RoomTemperatures ' . Thomas . '_Room Badezimmer')}: Bareword "Thomas" not allowed while "strict subs" in use at (eval 3715) line 1.


Kannst du mir sagen was ich mit dem Escapen falsch mache?

VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 12 Januar 2018, 10:28:39
Zitat von: Marlen am 09 Januar 2018, 12:16:24
Hallo,

vielen Dank, für dieses tolle Modul!
Das ist viel besser als meine "alte" Menüführung in Telegram.

Hab mal meine Dialog-Struktur angehängt.

Find das macht schon wenig süchtig.

LG
  Marlen

Wie hast Du Deine Menü-Struktur erstellt?
Ich hatte mein Menü erst manuell sortiert, aber die Liste wurde immer länger und passte nicht mehr ganz aufs Display...

Dann habe ich mir überlegt, das ganze könnte doch auch etwas eleganter gehen:

Ich habe mir für jeden Menüpunkt einen Mini-meta-Dialog angelegt:
defmod Favoriten_Dialog msgDialog {"00.⭐️Favoriten":{\
  "message": [\
    "{return('(' . join(') (', sort(split('\n', fhem('get TYPE=msgDialog:FILTER=NAME=.*_fav:FILTER=allowed=.*($recipient|everyone).* trigger')))) . ') ')}",\
    "(zurück:%me%) ",\
    "Hier sind deine Favoriten:"\
  ]\
}\
}\


Um Dialoge in "00.⭐️Favoriten" zu packen genügt es jetzt, den Dialognamen um ein _fav zu ergänzen.
Für alle anderen Menüpunkte wie _user für "01.Bewohner" oder _sys für "09.System" usw. genügt dann eine kleine copy&paste Fleißarbeit  ;)

Im meta-Dialog dürfen diese Dialoge nicht mehr auftauchen, sie werden durch ein
FILTER=NAME!=.*_fav für die Favoriten aussortiert.
Der meta-Dialog erfasst jetzt nur noch diese Menü-Dialoge und alle restlichen Dialoge, welche (noch) nicht einsortiert sind
oder nicht einsortiert werden sollen.

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 12 Januar 2018, 17:18:10
Zitat von: ToM_ToM am 12 Januar 2018, 09:59:35
Kannst du mir sagen was ich mit dem Escapen falsch mache?
Die Variablen werden vor dem Auswerten ersetzt. Einfach nicht escapen sondern

"commands": "{fhem('setreading $SELF $recipient_Room $message')}",

schreiben.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 12 Januar 2018, 20:25:17
Hey igami,

das mit dem Escapen bringt mich noch um. Gibt es irgendwo eine Auflistung wann man wie escapen kann?

Jetzt habe ich Probleme in der Zeile die mit folgendem beginnt:
"{my $temp = $message;;;; $temp =~ s/([\d]{1,2}\.[\d{1}])/$1/g;;;;

Ich bekomme Fehler wegen meines Regex.
illegal backslash escape sequence in string, at character offset 720 (before "\\d]{1,2}\\.[\\d{1}]...") at /opt/fhem/FHEM/76_msgDialog.pm line 93.



{
"Raumtemperaturen": {
"message": [
"(Arbeitszimmer) (Badezimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Arbeitszimmer|Badezimmer|Wohnzimmer)",
"commands": "setreading $SELF $recipient_Room $message",
"message": [
"(5.0°C|10.0°C|16.0°C|17.0°C) ",
"(17.5°C|18.0°C|18.5°C|19.0°C) ",
"(19.5°C|20.0°C|20.5°C|21.0°C) ",
"(21.5°C|22.0°C|22.5°C|23.0°C) ",
"(abbrechen) ",
"Heizung im $message einstellen"
],
"Temperatur": {
"match": "on|off|[0-2][0-9][:.]([0]|[5])",
"commands": [
"{my $temp = $message;;;; $temp =~ s/([\d]{1,2}\.[\d{1}])/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; my $clima = ($room==\"Arbeitszimmer\"?\"HM_568F52_Clima\":($room==\"Badezimmer\"?\"HM_3C5A11_Clima\":($room==\"Wohnzimmer\"?\"HM_51B1F7_Clima\":\"\")));;;; fhem (\"set $clima desired-temp $temp\") }"
],
"message": [
"eingestellt"
]
}
}
  }
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 12 Januar 2018, 20:29:43
Zitat von: ToM_ToM am 12 Januar 2018, 20:25:17
das mit dem Escapen bringt mich noch um. Gibt es irgendwo eine Auflistung wann man wie escapen kann?
https://www.freeformatter.com/json-escape.html ?
also aus \d wir \\d
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 12 Januar 2018, 22:01:36
Hi igami,

vielen Dank! Das war schon mal sehr hilfreich. Nun habe ich noch 2 Probleme.

Bei folgendem Dialog funktioniert bis zur Temperatureinstellung alles. Was nicht funktioniert, ist, dass er mir den Text zurückgibt dass die Heizung jetzt eingestellt wurde.
Wenn das noch behoben wurde, kann der Dialog auch gerne ins Wiki übernommen werden damit sich andere nicht auch noch mit rumquälen müssen.


{
"Raumtemperaturen": {
"match": "Raumtemperaturen",
"message": [
"(Arbeitszimmer) (Badezimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Arbeitszimmer|Badezimmer|Wohnzimmer)",
"commands": "setreading $SELF $recipient_Room $message",
"message": [
"(5.0°C|10.0°C|16.0°C|17.0°C) ",
"(17.5°C|18.0°C|18.5°C|19.0°C) ",
"(19.5°C|20.0°C|20.5°C|21.0°C) ",
"(21.5°C|22.0°C|22.5°C|23.0°C) ",
"(abbrechen) ",
"Heizung im $message einstellen"
],
"Temperatur": {
"match": "on|off|[0-2][0-9][:.]([0]|[5])",
"commands": [
"{my $temp = $message;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; my $clima = ($room==\"Arbeitszimmer\"?\"HM_568F52_Clima\":($room==\"Badezimmer\"?\"HM_3C5A11_Clima\":($room==\"Wohnzimmer\"?\"HM_51B1F7_Clima\":\"\")));;;; fhem (\"set $clima desired-temp $temp\") }"
],
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; return \"Temperatur im $room auf $message eingestellt.\";;;; }"
]
}
}
  }
}


Im Log tauchen bei mir komischerweise folgende Zeilen auf:


2018.01.12 21:53:57 5: msgDialog (TelegramMsgDialog_FritBoxCallList) - entering msgDialog_evalSpecials
2018.01.12 21:54:00 5: msgDialog (TelegramMsgDialog_FritBoxCallList) - entering msgDialog_Notify
2018.01.12 21:54:00 4: msgDialog (TelegramMsgDialog_FritBoxCallList) triggered by "Thomas fhemMsgRcvPush: Arbeitszimmer"
2018.01.12 21:54:00 5: msgDialog (TelegramMsgDialog_FritBoxCallList)
    entering msgDialog_progress
        recipients: Thomas
        message:    Arbeitszimmer
        force:      0
2018.01.12 21:54:00 5: msgDialog (TelegramMsgDialog_FritBoxCallList) - entering msgDialog_evalSpecials
2018.01.12 21:54:03 5: msgDialog (TelegramMsgDialog_FritBoxCallList) - entering msgDialog_Notify
2018.01.12 21:54:03 4: msgDialog (TelegramMsgDialog_FritBoxCallList) triggered by "Thomas fhemMsgRcvPush: 17.0°C"


Warum greift er denn auf den TelegramMsgDialog_FritBoxCallList Dialog zu? Den spreche ich doch gar nicht an.

Hier der Aufbau des TelegramMsgDialog_FritBoxCallList Dialog:


{
  "Anrufliste": {
"match":"Anrufliste",
    "message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetFritzBoxCallListMessage('FritzBoxCallList') }"
    ]
  }
}


VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 13 Januar 2018, 01:34:47
Wollte nochmal Rückmeldung zum Modul geben:

-Das zusätzliche Modul Roommate ist ehrlich gesagt recht schnell konfiguriert und stört nicht so sehr. Im Endeffekt doch eine gute Wahl. Entschuldige meine Kritik zuvor.
-Das Konfigurieren ist leider nicht so leicht, tue mich da noch etwas schwer...  ;D
-Damit kann man echt super gute Dialoge Formulieren, und diese sogar noch schön ausschmücken!

Danke fürs Modul, werde demnächst mal schauen was sich noch alles außer die Einkaufsliste darüber steuern lässt!

Gruß,

Fixel
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 13 Januar 2018, 08:02:57
Zitat von: ToM_ToM am 12 Januar 2018, 22:01:36
Bei folgendem Dialog funktioniert bis zur Temperatureinstellung alles. Was nicht funktioniert, ist, dass er mir den Text zurückgibt dass die Heizung jetzt eingestellt wurde.
Du musst auch noch auf das °C matchen.

Zitat von: ToM_ToM am 12 Januar 2018, 22:01:36
Warum greift er denn auf den TelegramMsgDialog_FritBoxCallList Dialog zu? Den spreche ich doch gar nicht an.
Der Dialog prüft nur ob es für ihn relevant ist.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 13 Januar 2018, 09:22:57
ZitatDu musst auch noch auf das °C matchen.
Das ist es nicht. Das Command funktioniert auch so und wird korrekt ausgeführt.
Mein Problem liegt in der Rückgabe der Nachricht. Da kommt nichts. Wenn ich nur einen Text zurückgeben lasse, funktioniert es.

Demnach muss der Fehler irgendwo hier liegen:

"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; return \"Temperatur im $room auf $message eingestellt.\";;;; }"
]


ZitatDer Dialog prüft nur ob es für ihn relevant ist.
Okay. :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 13 Januar 2018, 12:08:03
Zitat von: ToM_ToM am 13 Januar 2018, 09:22:57
Das ist es nicht. Das Command funktioniert auch so und wird korrekt ausgeführt.
Mein Problem liegt in der Rückgabe der Nachricht. Da kommt nichts. Wenn ich nur einen Text zurückgeben lasse, funktioniert es.

Demnach muss der Fehler irgendwo hier liegen:

"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; return \"Temperatur im $room auf $message eingestellt.\";;;; }"
]

Okay. :)
Versuch mal bitte

"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"Temperatur im {(ReadingsVal('$SELF', '$recipient_Room', ''))} auf $message eingestellt."
]
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 13 Januar 2018, 12:59:06
ZitatVersuch mal bitte

Funktioniert leider auch nicht.

Hier das LOG (verbose 5)


2018.01.13 12:57:29 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:29 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:29 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:29 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Get
2018.01.13 12:57:32 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Notify
2018.01.13 12:57:32 4: msgDialog (TelegramMsgDialog_RoomTemperatures) triggered by "Thomas fhemMsgRcvPush: Aktionen"
2018.01.13 12:57:32 5: msgDialog (TelegramMsgDialog_RoomTemperatures)
    entering msgDialog_progress
        recipients: Thomas
        message:    Aktionen
        force:      0
2018.01.13 12:57:32 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_evalSpecials
2018.01.13 12:57:32 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Get
2018.01.13 12:57:34 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Notify
2018.01.13 12:57:34 4: msgDialog (TelegramMsgDialog_RoomTemperatures) triggered by "Thomas fhemMsgRcvPush: Raumtemperaturen"
2018.01.13 12:57:34 5: msgDialog (TelegramMsgDialog_RoomTemperatures)
    entering msgDialog_progress
        recipients: Thomas
        message:    Raumtemperaturen
        force:      0
2018.01.13 12:57:34 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_evalSpecials
2018.01.13 12:57:34 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:34 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:36 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Notify
2018.01.13 12:57:36 4: msgDialog (TelegramMsgDialog_RoomTemperatures) triggered by "Thomas fhemMsgRcvPush: Badezimmer"
2018.01.13 12:57:36 5: msgDialog (TelegramMsgDialog_RoomTemperatures)
    entering msgDialog_progress
        recipients: Thomas
        message:    Badezimmer
        force:      0
2018.01.13 12:57:36 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_evalSpecials
2018.01.13 12:57:36 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:36 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:36 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:36 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:39 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Notify
2018.01.13 12:57:39 4: msgDialog (TelegramMsgDialog_RoomTemperatures) triggered by "Thomas fhemMsgRcvPush: 10.0°C"
2018.01.13 12:57:39 5: msgDialog (TelegramMsgDialog_RoomTemperatures)
    entering msgDialog_progress
        recipients: Thomas
        message:    10.0°C
        force:      0
2018.01.13 12:57:39 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_evalSpecials


VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 13 Januar 2018, 13:17:23
Soweit fällt mir auch nichts ein, ich muss mal schauen, ob ich mir ein gleiches Beispiel basteln kann.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 13 Januar 2018, 18:36:07
Hey igami,

ich habe nochmal stundenlang rumgetestet.


{
"Raumtemperaturen": {
"match": "Raumtemperaturen",
"message": [
"(Arbeitszimmer) (Badezimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Arbeitszimmer|Badezimmer|Wohnzimmer)",
"commands": "setreading $SELF $recipient_Room $message",
"message": [
"(5.0°C|10.0°C|16.0°C|17.0°C) ",
"(17.5°C|18.0°C|18.5°C|19.0°C) ",
"(19.5°C|20.0°C|20.5°C|21.0°C) ",
"(21.5°C|22.0°C|22.5°C|23.0°C) ",
"(abbrechen) ",
"Heizung im $message einstellen"
],
"Temperatur": {
"match": "on|off|[0-2][0-9][:.]([0]|[5]).*",
"commands": "{my $temp = $message;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}]).*/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; my $clima = ($room==\"Arbeitszimmer\"?\"HM_568F52_Clima\":($room==\"Badezimmer\"?\"HM_3C5A11_Clima\":($room==\"Wohnzimmer\"?\"HM_51B1F7_Clima\":\"\")));;;; fhem(\"setreading $SELF clima $clima\");;;; fhem (\"set $clima desired-temp $temp\") }",
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; my $temp = $message;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}]).*/$1/g;;;; return \"Temperatur im $room auf $temp eingestellt.\";;;; }"
]
}
}
  }
}


Irgendwie scheint der Dialog ein Problem mit den ° Zeichen zu haben.

Bekomme jetzt immer als Telegram-Antwort: Unrecognized character \x{b0}

EDIT: Sobald ich das Grad-Zeichen entferne, also auch oben in dem Auswahldialog wo ich die Temperatur wähle, dann funktioniert es. Sieht nur bisschen doof aus, wenn da nur Zahlen stehen. ;)
Habe auch schon versucht, das Grad-Zeichen mit Perl und JSON zu escapen. Aber dann schreibt er mir den Escape-String als Klartext rein.


VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 17 Januar 2018, 12:15:29
Zitat von: binford6000 am 12 Januar 2018, 10:28:39
Wie hast Du Deine Menü-Struktur erstellt?

Hmm...das ist eine gute Idee, ich hab alles in insgesamt 4 Dialoge Verpackt.

Wird schnell unübersichtlich, aber man muss ja nicht ständig ran!

LG
Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 17 Januar 2018, 14:43:38
Hallo igami,

ich stehe schon wieder vor dem nächsten Problem. Undzwar möchte ich mir einen Plot zusenden lassen, was bei mir auch super funktioniert. Möchte mein Bruder das tun, bekommt er eine Fehlermeldung.

Hier die Roommate-Devices (IDs habe ich ersetzt)


defmod Thomas ROOMMATE
attr Thomas DbLogExclude .*
attr Thomas alias Thomas
attr Thomas 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 Thomas group Personen
attr Thomas icon people_sensor
attr Thomas msgContactPush TelegramBot:@123456789
attr Thomas room Allgemein
attr Thomas rr_realname group
attr Thomas sortby 1
attr Thomas webCmd state

defmod Dirk ROOMMATE
attr Dirk DbLogExclude .*
attr Dirk alias Dirk
attr Dirk 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 Dirk group Personen
attr Dirk icon people_sensor
attr Dirk msgContactPush TelegramBot:@123456789
attr Dirk room Allgemein
attr Dirk rr_realname group
attr Dirk sortby 1
attr Dirk webCmd state


Folgende msgDialog - Definition sendet mir nach Aufforderung den Plot zu. Wenn mein Bruder die Anfrage macht, bekommt er die Meldung

FAILED peer not found :Dirk: Helligkeit


{
"Wetter": {
"message": [
"(Regen|Wind) (Helligkeit) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"Wetterstation"

],
"Regen": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRainTodayMessage(\"HM_GN_Wetterstation\")}"
]
},
"Helligkeit": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{fhem(\"set %TelegramBot% cmdSend @\".\"$recipient {plotAsPng('Plot_HM_GN_Wetterstation_BRIGHTNESS')}\")}",
"Helligkeit"
]
},
"Wind": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"Wind"
]
}
}
}


Alles andere kann er im Dialog aufrufen.

VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 19 Januar 2018, 15:23:44
Hi,

ich hab da mal ne blöde Frage:

Kann ich irgendwie ein alias festlegen, was ein abgefragtes Reading umwandelt?

Ich würde gerne die Anwesenheit der Familienmitglieder ausgeben. Somit würde ich die readings "present/absent" in "Anwesend"Abwesend" mappen.

Aber ohne das direkt im Device zu machen. Zwecks Komptabilität.

Gibt es da eine Möglichkeit  ???

Gruß,

Fixel
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 20 Januar 2018, 06:29:04
Zitat von: Fixel2012 am 19 Januar 2018, 15:23:44
Kann ich irgendwie ein alias festlegen, was ein abgefragtes Reading umwandelt?

Ich würde gerne die Anwesenheit der Familienmitglieder ausgeben. Somit würde ich die readings "present/absent" in "Anwesend"Abwesend" mappen.

Aber ohne das direkt im Device zu machen. Zwecks Komptabilität.

Gibt es da eine Möglichkeit  ???
Also eine Art Wörterbuch? Falls ja würde ich das glaube ich über die myUtils lösen

sub babel_en2de($) {
  my ($text) = @_;
  my %babel = (
    "present" => "anwesend",
    "absent" => "abwesend"
  );
  my $babelkeys = join("|", keys(%babel));
  $text =~ s/($babelkeys)/$babel{$1}/g;
 
  return($text);
}


Dann noch alle ausgehenden Nachrichten durch den übersetzer jagen:

attr myMsgConfig msgDialog_msgCommand msg push \@$recipients {(babel_en2de($message))}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 20 Januar 2018, 09:25:08
ZitatHallo igami,

ich stehe schon wieder vor dem nächsten Problem. Undzwar möchte ich mir einen Plot zusenden lassen, was bei mir auch super funktioniert. Möchte mein Bruder das tun, bekommt er eine Fehlermeldung.

Hi igami, hast du schon eine Idee? Kannst du auch die recipientID in deinem Modul als Variable zur Verfügung stellen? Dann würde ich es damit nochmal versuchen.

VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 21 Januar 2018, 08:36:10
Zitat von: ToM_ToM am 20 Januar 2018, 09:25:08
Hi igami, hast du schon eine Idee? Kannst du auch die recipientID in deinem Modul als Variable zur Verfügung stellen? Dann würde ich es damit nochmal versuchen.

VG, Thomas
Hi Thomas,

entschuldige bitte, aber ich hatte das vergessen :-[
Es ist geplant, dass man in message mehrere arrays angeben kann

...,
"message": [
  [
    "TelegramBot_MTYPE=cmdSend ",
    "{plotAsPng('%plot%')}"
  ],
  [
    "TelegramBot_MTYPE=queryInline (%me%) ",
    "Hier der Plot."
  ]
]

Dann wird die zuordnung  wieder durch message vorgenommen.

Wenn ich mich nicht irre kann es jetzt schon durch commands gelöst werden (ungetestet):

...,
"commands": "msg @$recipient push TelegramBot_MTYPE=cmdSend {plotAsPng('%plot%')}",
"message": [
  "TelegramBot_MTYPE=queryInline (%me%) ",
  "Hier der Plot."
]


Bitte testen und Rückmeldung geben.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 21 Januar 2018, 11:53:45
ZitatBitte testen und Rückmeldung geben.
Hi igami, wenn ich das so einbaue, bekomme ich in Telgram folgendes:

Unknown command push, try help

VG, Thomas


"Tag": {
"commands": "msg @$recipient push TelegramBot_MTYPE=cmdSend {plotAsPng('Plot_HM_GN_Solarstrom_Power')}",
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"Tagesübersicht"
]
},
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 21 Januar 2018, 17:33:59
Zitat von: ToM_ToM am 21 Januar 2018, 11:53:45
Hi igami, wenn ich das so einbaue, bekomme ich in Telgram folgendes:

Unknown command push, try help
Mein Fehler, es muss natürlich "msg push @$recipient ..." heißen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 21 Januar 2018, 23:00:50
Ah super, so funktioniert es jetzt :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 27 Januar 2018, 15:42:07
Hi igami,

ich das gleiche Problem wie mit den Plots nun auch wenn ich versuche, Fotos zu versenden. Bei mir funktionierts, bei meinem Bruder leider nicht.

Hast du da auch ein Lösung für mich?

Derzeitiger Code (der nur bei mir funktioniert)

{
"Security": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"(Kamera 2) ",
"Bitte wählen"
],
"Kamera 2": {
"commands": [
"get IPCameraGarten2 image",
"sleep 2",
"set %TelegramBot% sendImage @$recipient /www/snapshots/IPCameraGarten2_snapshot.jpg"
],
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"Kamera 2 Foto"
]
}
}
}


Hatte versucht den irgendwie so zu modifizieren, aber das scheint nicht richtig zu sein:

{
"Security": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"(Kamera 2) ",
"Bitte wählen"
],
"Kamera 2": {
"commands": [
"get IPCameraGarten2 image",
"sleep 2",
"msg push @$recipient TelegramBot_MTYPE=image /www/snapshots/IPCameraGarten2_snapshot.jpg"
],
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"Kamera 2 Foto"
]
}
}
}



VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 27 Januar 2018, 16:36:03
Du musst auf TelegramBot_MTYPE auf sendImage stellen ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 27 Januar 2018, 17:08:15
Danke, so funktioniert es nun. :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Keule_09 am 30 Januar 2018, 12:36:25
Hallo,

hab mal eine Frage zum Meta_Dialog.
Dort sind ja bestimmte Befehle schon vorgegeben, die bis auf "zurück" bei mir auch funktionieren.
Der zurück-Button müsste ja nur eine Ebene höher springen oder ?
Muss für den zurück-Befehl noch was angegeben werden ?

Hab mir den Berechtigungsdialog von Igami importiert,
da ich dachte es liegt an meinem Dialog aber beim betätigen des zurück-Buttons dreht sich auch dort nur der Kreis aber es passiert nichts.

Gruß Marco

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 30 Januar 2018, 12:39:56
Hey igami,

hast du schon eine Idee für mich zum Thema "Grad-Zeichen im Temperaturdialog"? :)

VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 31 Januar 2018, 05:52:42
Zitat von: Keule_09 am 30 Januar 2018, 12:36:25
Muss für den zurück-Befehl noch was angegeben werden ?
Da lag wohl noch ein Fehler vor (die ; mussten verdoppelt werden). Hier der aktuelle meta Dialog (hat bei mir bis eben auch nicht funktioniert ::))
@binford6000: bitte ins Wiki übernehmen

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


Zitat von: ToM_ToM am 30 Januar 2018, 12:39:56
hast du schon eine Idee für mich zum Thema "Grad-Zeichen im Temperaturdialog"? :)
Ehrlich gesagt habe ich mich noch nicht damit beschäftigt :-[
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 31 Januar 2018, 05:58:35
Zitat von: ToM_ToM am 30 Januar 2018, 12:39:56
hast du schon eine Idee für mich zum Thema "Grad-Zeichen im Temperaturdialog"? :)
Habe es grad mit folgendem Dialog getestet und keine Probleme:

defmod test_Dialog msgDialog {\
  "test": {\
    "message": [\
      "(15 °C|20 °C) ",\
      "(abbrechen) ",\
      "Welche Temperatur soll ich einstellen?"\
    ],\
    "Temperatur": {\
      "match": "\\d\\d( °C)?",\
      "message": [\
        "TelegramBot_MTYPE=queryInline (%me%) ",\
        "ich habe $message eingestellt."\
      ] \
    }\
  }\
}

An welcher Stelle tritt das Problem denn genau auf? Am besten mal die gesamte Fehlermeldung posten.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 31 Januar 2018, 07:21:42
ZitatAn welcher Stelle tritt das Problem denn genau auf? Am besten mal die gesamte Fehlermeldung posten.

Hi igami, schau mal in diesem Thread auf Seite 24 ganz oben der erste Post. Dort habe ich alles schon beschrieben.
Die Rückmeldung bekomme ich in Telegram

Unrecognized character \x{b0}

VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 31 Januar 2018, 08:25:29
Zitat@binford6000: bitte ins Wiki übernehmen
Ist geändert. VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: RoBra81 am 31 Januar 2018, 11:08:24
Hallo,

Ich habe mal eine Frage: Ich würde gern alle Nachrichten, die der msgDialog nicht versteht an eine andere Auswertung weiterleiten, aber eben nur die. Wenn ich ein notify auf den TelegramBot definierte, werden ja auch die Nachrichten weitergeleitet, die der msgDialog dann behandelt. Gibt es eine Möglichkeit, nicht erkannte Nachrichten inklusive Absender irgendwie an ein anderes Gerät zu senden?

Vielen Dank
Ronny

Gesendet von meinem SM-G935F mit Tapatalk

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 31 Januar 2018, 16:06:05
Funktioniert denn der Test Dialog oder kommt da auch der Fehler?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 31 Januar 2018, 18:07:08
Zitat von: RoBra81 am 31 Januar 2018, 11:08:24
Hallo,

Ich habe mal eine Frage: Ich würde gern alle Nachrichten, die der msgDialog nicht versteht an eine andere Auswertung weiterleiten, aber eben nur die. Wenn ich ein notify auf den TelegramBot definierte, werden ja auch die Nachrichten weitergeleitet, die der msgDialog dann behandelt. Gibt es eine Möglichkeit, nicht erkannte Nachrichten inklusive Absender irgendwie an ein anderes Gerät zu senden?

Vielen Dank
Ronny

Gesendet von meinem SM-G935F mit Tapatalk
So auf die Schnelle fällt mir da nichts ein.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 01 Februar 2018, 07:43:07
ZitatFunktioniert denn der Test Dialog oder kommt da auch der Fehler?

Hm... mit dem Testdialog geht's. Da muss ich dann mal herausfinden an welcher Stelle er das Problem mit dem Grad-Zeichen hat.

EDIT: Habe jetzt zumindest endlich mal die Fehlerzeile ausfindig machen können.

"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; my $temp = $message;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])(°C)?/$1/g;;;; return \"Temperatur im $room auf $temp eingestellt.\";;;; }"

Evtl. liegt das Problem im REGEX... :o

VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Keule_09 am 06 Februar 2018, 21:05:30
Hallo,

hab mal wieder eine Frage   ;)
Ich hab mir einen Dialog für die Beschattung erstellt und würde gerne wenn ich im Dialog die Bedienebene von z.B. Fenster Wohnen geöffnet habe, nach den drücken von Ab gerne auch den Stop Befehl absetzen können.

Hier ein Auszug von meinem Dialog:

"Fenster Wohnen":{\
"message": [\
"(auf|ab) ",\
"(stop|Pos Nacht) ",\
"(20%:050|30%:075|40%:100|50%:127) ",\
"(60%:152|70%:177|80%:203|90%:228) ",\
"(abbrechen:%me%|zurück) ",\
"Hier kannst du den Rolladen Wohnbereich bedienen:"\
],\
"setfensterpos": {\
"match": "[0-2][0-9][0-9]",\
"commands": [\
"{my $wert = '$message';;;; fhem(\"set rolladen_wohnen_fenster value $wert\");;;;}",\
"set $SELF say @$recipient Fenster Wohnen"\
]\
},\
"auf":{\
"commands": [\
"set rolladen_wohnen_fenster Auf",\
"set $SELF say @$recipient Fenster Wohnen"\
]\
},\
"ab":{\
"commands": [\
"set rolladen_wohnen_fenster Ab",\
"set $SELF say @$recipient Fenster Wohnen"\
]\
},\
"stop":{\
"commands": [\
"set rolladen_wohnen_fenster Stop",\
"set $SELF say @$recipient Fenster Wohnen"\
]\
},\
"Pos Nacht":{\
"commands": [\
"set rolladen_wohnen_fenster Nacht",\
"set $SELF say @$recipient Fenster Wohnen"\
]\
}\
},\


wie muss ich den set Befehl set $SELF say @$recipient Fenster Wohnen umbauen das es funktioniert ?

Vielen Dank im vorraus.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 07 Februar 2018, 05:15:34
Zitat von: Keule_09 am 06 Februar 2018, 21:05:30
wie muss ich den set Befehl set $SELF say @$recipient Fenster Wohnen umbauen das es funktioniert ?
Was kommt denn noch vor "Fenster Wohnen"? Du hast ja nicht den ganzen Dialog gepostet ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Keule_09 am 07 Februar 2018, 08:47:48
Zitat von: igami am 07 Februar 2018, 05:15:34
Was kommt denn noch vor "Fenster Wohnen"? Du hast ja nicht den ganzen Dialog gepostet ;)
Danke hab den Fehler gefunden.Dachte ich muss nur die aktuelle Ebene angeben und nicht die ganzen Ebenen darüber.
Jetzt funktioniert es:

"set $SELF say @$recipient 2.Beschattung|Wohnbereich|Fenster Wohnen"
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 15 Februar 2018, 19:16:42
Hi.
Gibt es schon ne Lösung für die Heizungssteuerung?
Habe versucht den Code von ToM_ToM zu verwenden aber der wirft mir Fehler aus.
Der Code von Igame funktioniert aber ich weiß nicht, wie ich da meine Device einfügen kann.

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 16 Februar 2018, 06:00:59
Ich habe keinen Dialog für eine Heizung und werde auch keinen bauen, da ich ihn nicht brauche ;)
Ich helfe aber gerne bei der Verbesserung wenn es irgendwo hakt.

Momentan bastel ich an einem Dialog für Beleuchtung, da bin ich aber noch lange nicht "Marktreif"
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 16 Februar 2018, 06:05:15
Du hattest hier für Tom_ToM einen Testdialog gepostet, mit zwei Temperaturen.
Der würde mir schon reichen, wenn ich wüsste, wo ich die Heizung hinzufügen muss, weil ich brauche im Endeffekt nur Heizung an oder aus und das kann man mit zwei Temperaturen machen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 16 Februar 2018, 06:57:19
So, mal ganz von vorne und in ruhe, dann kriege ich das mit Eurer Hilfe schon hin.
Ich habe mir jetzt einen Heizungs Dialog gebastelt auf der Basis von ToM_ToM seinem Dialog.
Klappt auch soweit, das ich ihn angezeigt bekomme und die Nutzung klappt teilweise.
{
"Raumtemperaturen": {
"match": "Raumtemperaturen",
"message": [
"(Arbeitszimmer|Küche) (Schlafzimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Arbeitszimmer|Küche|Schlafzimmer|Wohnzimmer)",
"commands": "setreading $SELF $recipient_Room $message",
"message": [
"(5.0°C|10.0°C|16.0°C|17.0°C) ",
"(17.5°C|18.0°C|18.5°C|19.0°C) ",
"(19.5°C|20.0°C|20.5°C|21.0°C) ",
"(21.5°C|22.0°C|22.5°C|23.0°C) ",
"(abbrechen) ",
"Heizung im $message einstellen"
],
"Temperatur": {
"match": "on|off|[0-2][0-9][:.]([0]|[5])",
"commands": [
"{my $temp = $message;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; my $clima = ($room==\"Arbeitszimmer\"?\"HZ_BUERO\": ($room==\"Küche\"?\"HZ_KUECHE\":($room==\"Schlafzimmer\"?\"HZ_BED\":($room==\"Wohnzimmer\"?\"HZ_WOHNZ\":\"\"))));;;; fhem (\"set $clima desired-temp $temp\") }"
],
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; return \"Temperatur im $room auf $message eingestellt.\";;;; }"
]
}
}
  }
}

Wähle ich einen Raum aus, wird der Raum gewählt und ich kann eine Temperatur wählen aber erhalte zeitgleich eine Fehlermeldung.
Undefined subroutine &main;;telegramBotGetRoomTemperateListMessage called at (eval 1532) line 1

Habe gestern ein Update in Fhem gemacht, sollte also alles auf dem neusten Stand sein.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 16 Februar 2018, 08:57:30
ZitatUndefined subroutine &main;;telegramBotGetRoomTemperateListMessage called at (eval 1532) line 1

Das ist eine Funktion die bei mir in der Utils aufgerufen wird und einen Text zusammenbaut der mir die aktuellen Werte sowie die Sollwerte aller Räume wiedergibt.
Ersetz die Zeile einfach durch:

"Tempereaturen"

VG
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 16 Februar 2018, 09:00:11
Ahhh, das erklärt es. Wärst Du so freundlich und würdest den Code hier posten? Dann kann ich sie bei mir eintragen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 16 Februar 2018, 16:30:22
Ich habe gerade ein kleines Problem mit einem weiteren Dialog.
Er funktioniert nur bis zur Auswahl Gerät einschalten oder Gerät ausschalten, danach geht es nicht weiter.
Kriege aber keinen Fehler angezeigt, deswegen komme ich nicht weiter, ein Zeichenfehler ist es nicht, sieht genauso aus, wie ein funktionierender Dialog bei mir. Habe so einen Dialog noch für meine Terras gebastelt und der funktioniert, ergo schließe ich aus, das es an den Steckdosen liegt.
Schaut Ihr doch mal bitte drauf, vielleicht übersehe ich was.
defmod geraete_Dialog msgDialog {"Geräte":{\
  "message": [\
    "(Geräte einschalten) ",\
    "(Geräte ausschalten) ",\
    "(zurück) ",\
    "(abbrechen) ",\
    "Geräte schalten:"\
  ],\
    "Gerät einschalten":{\
    "message":[\
      "{return('(Spüle einschalten) ') if(ReadingsVal('SPUELE', 'state', '') eq 'off')}",\
      "{return('(Büroventilator einschalten) ') if(ReadingsVal('VENT_BUERO', 'state', '') eq 'off')}",\
      "{return('(Wohnzimmer TV einschalten) ') if(ReadingsVal('TV_WOHN', 'state', '') eq 'off')}",\
      "{return('(Wohnzimmerventilator einschalten) ') if(ReadingsVal('VENT_WOHN', 'state', '') eq 'off')}",\
      "{return('(Ladegerät einschalten) ') if(ReadingsVal('PLUG_BED', 'state', '') eq 'off')}",\
      "{return('(Schlafzimmer TV einschalten) ') if(ReadingsVal('TV_BED', 'state', '') eq 'off')}",\
      "(zurück) ",\
      "(abbrechen) ",\
      "Welches Gerät soll eingeschaltet werden?"\
    ],\
    "Spüle einschalten":{\
    "commands": "set SPUELE on",\
    "message":[\
      "(%me%) ",\
      "Spüle wurde eingeschaltet."\
    ]\
    },\
    "Büroventilator einschalten":{\
    "commands": "set VENT_BUERO on",\
    "message":[\
      "(%me%) ",\
      "Büroventilator wurde eingeschaltet."\
    ]\
    },\
    "Wohnzimmer TV einschalten":{\
    "commands": "set TV_WOHN on",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer TV wurde eingeschaltet."\
    ]\
    },\
    "Wohnzimmerventilator einschalten":{\
    "commands": "set VENT_WOHN on",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmerventilator wurde eingeschaltet."\
    ]\
},\
"LAdegerät einschalten":{\
    "commands": "set PLUG_BED on",\
    "message":[\
      "(%me%) ",\
      "Ladegerät wurde eingeschaltet."\
    ]\
},\
"Schlafzimmer TV einschalten":{\
    "commands": "set TV_BED on",\
    "message":[\
      "(%me%) ",\
      "Schlafzimmer TV wurde eingeschaltet."\
    ]\
}\
    },\
"Gerät ausschalten":{\
    "message":[\
      "{return('(Spüle ausschalten) ') if(ReadingsVal('SPUELE', 'state', '') ne 'off')}",\
      "{return('(Büroventilator ausschalten) ') if(ReadingsVal('VENT_BUERO', 'state', '') ne 'off')}",\
      "{return('(Wohnzimmer TV ausschalten) ') if(ReadingsVal('TV_WOHN', 'state', '') ne 'off')}",\
      "{return('(Wohnzimmerventilator ausschalten) ') if(ReadingsVal('VENT_WOHN', 'state', '') ne 'off')}",\
      "{return('(Ladegerät ausschalten) ') if(ReadingsVal('PLUG_BED', 'state', '') ne 'off')}",\
      "{return('(Schlafzimmer TV ausschalten) ') if(ReadingsVal('TV_BED', 'state', '') ne 'off')}",\
      "(zurück) ",\
      "(abbrechen) ",\
      "Welches Gerät soll ausgeschaltet werden?"\
    ],\
    "Spüle ausschalten":{\
    "commands": "set SPUELE off",\
    "message":[\
      "(%me%) ",\
      "Spüle wurde ausgeschaltet."\
    ]\
    },\
    "Büroventilator ausschalten":{\
    "commands": "set VENT_BUERO off",\
    "message":[\
      "(%me%) ",\
      "Büroventilator wurde ausgeschaltet."\
    ]\
    },\
    "Wohnzimmer TV ausschalten":{\
    "commands": "set TV_WOHN off",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer TV wurde ausgeschaltet."\
    ]\
    },\
    "Wohnzimmerventilator ausschalten":{\
    "commands": "set VENT_WOHN off",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmerventilator wurde ausgeschaltet."\
    ]\
    },\
    "Ladegerät ausschalten":{\
    "commands": "set PLUG_BED off",\
    "message":[\
      "(%me%) ",\
      "LAdegerät wurde ausgeschaltet."\
    ]\
    },\
    "Schlafzimmer TV ausschalten":{\
    "commands": "set TV_BED off",\
    "message":[\
      "(%me%) ",\
      "Schlafzimmer TV wurde ausgeschaltet."\
    ]\
    }\
   }\
}\
}
attr geraete_Dialog allowed rr_Marcus
attr geraete_Dialog room Telegram
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 16 Februar 2018, 18:18:47
ZitatAhhh, das erklärt es. Wärst Du so freundlich und würdest den Code hier posten? Dann kann ich sie bei mir eintragen.


######## Status der Raumtemperaturen abfragen ############
sub
telegramBotGetRoomTemperatureListMessage()
{
my $tempArbeitszimmer = ReadingsVal("HM_0815", "measured-temp", "0");
my $desiredTempArbeitszimmer = ReadingsVal("HM_0815", "desired-temp", "0");
my $tempBadezimmer = ReadingsVal("HM_0816", "measured-temp", "0");
my $desiredTempBadezimmer = ReadingsVal("HM_0816", "desired-temp", "0");
my $tempWohnzimmer = ReadingsVal("HM_0817", "measured-temp", "0");
my $desiredTempWohnzimmer = ReadingsVal("HM_0817", "desired-temp", "0");
my $returnMessage = "Arbeitszimmer: $tempArbeitszimmer °C (-> $desiredTempArbeitszimmer °C)\n";
$returnMessage .= "Badezimmer: $tempBadezimmer °C (-> $desiredTempBadezimmer °C)\n";
$returnMessage .= "Wohnzimmer: $tempWohnzimmer °C (-> $desiredTempWohnzimmer °C)\n";

return $returnMessage;
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 16 Februar 2018, 18:26:54
@ToM_ToM: Ich danke Dir.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 16 Februar 2018, 18:54:02
Zitat von: ErzGabriel am 16 Februar 2018, 16:30:22
Ich habe gerade ein kleines Problem mit einem weiteren Dialog.
Er funktioniert nur bis zur Auswahl Gerät einschalten oder Gerät ausschalten, danach geht es nicht weiter.
Kriege aber keinen Fehler angezeigt, deswegen komme ich nicht weiter, ein Zeichenfehler ist es nicht, sieht genauso aus, wie ein funktionierender Dialog bei mir. Habe so einen Dialog noch für meine Terras gebastelt und der funktioniert, ergo schließe ich aus, das es an den Steckdosen liegt.
"Geräte" ne "Gerät"
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 16 Februar 2018, 18:56:54
Jo, da lag der Fehler. Wie peinlich, ein blödes e zu übersehen. Danke Dir.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: robertPI am 18 Februar 2018, 19:35:31
Hallo,

vielen Dank für dieses tolle Modul! Ich versuche mich gerade an einem Menü für meine Beleuchtung, genauer an einer Funktion in 99_myUtils.pm die mir die Anzahl der eingeschalteten Lampen ermittelt. Die Gesamtzahl erhalte ich mit
sub telegramBotGetLightListMessage() {
my @a=devspec2array("NAME=...di.*|...sw.*:FILTER=TYPE=HUEDevice:FILTER=STATE!=off");; my $count=($defs{$a[0]} && $#a+1 || 0);

my $returnMessage = "Insgesamt $count Lampen eingeschaltet\n";
$returnMessage .= "Flur: \n";
$returnMessage .= "Küche: \n";
$returnMessage .= "Schlafzimmer: \n";
$returnMessage .= "Wohnzimmer:";

return $returnMessage;
}


Meine Lampen sind nach dem Muster <Raum>.<di oder sw>.<irgend ein Name> bezeichnet. Wie kann ich die Funktion oben umbauen, um wahlweise (über einen Parameter) die Gesamtzahl oder die Zahl für fl = Flur, ku = Küche, sz = Schlafzimmer, wz = Wohnzimmer zu erhalten?

Der Dialog dazu schaut - schamlos geklaut bei TomTom und ErzGabriel - bisher so aus:
{
"Beleuchtung": {
"match": "Beleuchtung",
"message": [
"(Flur|Küche) ", "(Schlafzimmer|Wohnzimmer) ", "(alle aus) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetLightListMessage() }"
],
        "Alle": {
            "match":"(alle aus)",
            "commands": ["set NAME=...di.*|...sw.*:FILTER=TYPE=HUEDevice:FILTER=STATE!=off off"],
            "message": ["TelegramBot_MTYPE=queryInline (%me%) ",
                        "Alle Lampen ausgeschaltet"]
        },

"Raum": {
"match": "(Flur|Küche|Schlafzimmer|Wohnzimmer)",
"commands": "setreading $SELF $recipient_Room $message",
"message": [ ",
"(abbrechen) ",
"Beleuchtung in $message einstellen"
],
"Temperatur": {
"match": "on|off|[0-2][0-9][:.]([0]|[5])",
"commands": [],
"message": []
}
}
  }
}


Vielen Dank,
Robert
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Smarti am 04 März 2018, 18:57:37
Hallo,

bin fleißig am mitlesen.

Ich hätte aktuell eine Frage, mit welchen ich nicht weiter komm:

1. Zum einen funktionieren die Ersetzung wenn ich von inline auf "normal" umschalte z.B. "23°C:23.0"  oder "zurück: %me%", nicht als Button. also wird mir genau so angezeigt. Ist das normal?

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 04 März 2018, 20:56:38
Ja, das ist normal, nur inline Keyboards können anderen Text senden als darstellen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 04 März 2018, 21:00:06
ZitatJa, das ist normal, nur inline Keyboards können anderen Text senden als darstellen.
Das kann ich so nicht bestätigen. Bei mir wurde der Text auch so mit Inline-Keyboards angezeigt.

VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 04 März 2018, 21:07:47
Ich vermute wir reden aneinander vorbei. Bitte eine Problembeschreibung mit Bild.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 04 März 2018, 22:39:11
ZitatIch vermute wir reden aneinander vorbei. Bitte eine Problembeschreibung mit Bild.

Ich hatte doch mal meinen Temperaturdialog. Den hatte ich damals nach einem Beispiel von dir aufgebaut indem du die Temperaturen irgendwie in folgendem Format hattest:
25°C:25
Und genau dieses 25°C:25 wurde mir dann auch so als Button in Telegram angezeigt.

Leider finde ich das Beispiel von damals nicht mehr.

VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 05 März 2018, 04:56:36
Als inline oder normales Keyboard?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 05 März 2018, 08:37:33
ZitatAls inline oder normales Keyboard?
Ist es nicht INLINE sobald ich die Buttons habe?
Dann habe ich wohl doch etwas falsch verstanden.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Smarti am 05 März 2018, 09:15:38
Hallo,

also so sieht das ganze Inline aus: Screenshot_2018-03-05-09-07-42.png

und so "normal":  Screenshot_2018-03-05-09-08-51.png

Normal lassen sich auch buttons erstellen, wie z.B. bestätigen oder abbrechen. Wobei Zurück (zurück:%me% ) aber nicht geht.

Aber wenn ich "normal" keine Buttons mit anderer Bezeichnung als Inhalt erstellen kann ist mir klar, warum dies so aussieht.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 05 März 2018, 09:27:40
Hi Smarti,

danke für die Aufklärung. :)

@igami: Du weißt ja, dass ich schon ewig mit meinem Temperatur-Dialog rumkämpfe. Konnte jetzt den exakten Fehlerbereich ausfindig machen.


{
"Raumtemperaturen": {
"match": "Raumtemperaturen",
"message": [
"(Arbeitszimmer) (Badezimmer|Wohnzimmer) (zurück) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Arbeitszimmer|Badezimmer|Wohnzimmer)",
"commands": "setreading $SELF $recipient_Room $message",
"message": [
"(5.0°C|10.0°C|16.0°C|17.0°:17.0) ",
"(17.5°C|18.0°C|18.5°C|19.0°C) ",
"(19.5°C|20.0°C|20.5°C|21.0°C) ",
"(21.5°C|22.0°C|22.5°C|23.0°C) ",
"(abbrechen) ",
"Heizung im $message einstellen"
],
"Temperatur": {
"match": "on|off|[0-2][0-9][:.]([0]|[5])(°C)?",
"commands": "{my $temp = $message;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])(°C)?/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; my $clima = ($room==\"Arbeitszimmer\"?\"HM_568F52_Clima\":($room==\"Badezimmer\"?\"HM_3C5A11_Clima\":($room==\"Wohnzimmer\"?\"HM_51B1F7_Clima\":\"\")));;;; fhem(\"setreading $SELF clima $clima\");;;; fhem (\"set $clima desired-temp $temp\") }",
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; my $temp = $message;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])(°C)?/$1/g;;;; return \"Temperatur im $room auf $temp eingestellt.\";;;; }"
]
}
}
  }
}


Sobald ich die $message Variable in die $temp Variable kopieren möchte
my $temp = $message;;;;
bekomme ich in Telegram die Rückmeldung: Unrecognized character \x{b0}

Kannst du dir das erklären woran das liegen könnte?

VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 05 März 2018, 16:56:35
inline ist es im Chatverlauf, normal ist es anstelle der Tastatur
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 05 März 2018, 19:25:25
Hi igami,

ich habe mal wieder einen speziellen Fall. Wie kann ich eine Variable direkt hinter ein @ setzen ohne dass es als Array erkannt wird?

Ich möchte folgende URL per Messenger zurückgeben, jedoch den Längen- und Breitengrad durch eine Variable ersetzen.

https://www.google.de/maps/@50.0937185,8.7160645,11z?hl=de

Dein Modul erkennt durch das @ in der URL ein Array.


{
  "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 \n $locAddress \n https://www.google.de/maps/@\".@$locLat.\",$locLong,15z?hl=de\"}"
]
}
  }
}


VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 05 März 2018, 22:24:32
Das @ mit \ maskieren.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 05 März 2018, 23:11:33
Okay, das hatte ich auch erst gedacht. Aber dann bekomme ich die Rückmeldung:

illegal backslash escape sequence in string, at character offset 603 (before "\\@50.4505417,8.7452...") at /opt/fhem/FHEM/76_msgDialog.pm line 93.

Habe es nun mit der Codierung des @ Zeichens versucht. Aber dann wird einfach gar keine URL per Telegram übertragen. Der erste Text schon, aber die komplette URL fehlt.


{
  "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 \n $locAddress \n https:\/\/www.google.de\/maps\/%40\".$locLat.\",$locLong,15z?hl=de\"}"
]
}
  }
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 06 März 2018, 05:46:31
Dann noch das \ mit einem \ maskieren :P
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag 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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 06 März 2018, 18:06:32
Auf Wunsch hier noch der Einkaufslisten Dialog:

defmod Einkaufsliste_Dialog msgDialog { \
  "Einkaufsliste": {\
    "message": [\
      "(Waren hinzufügen) ", \
      "(Waren entfernen) ", \
      "(einkaufen) ", \
      "(abbrechen) ",\
      "{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
    ],\
    "Waren hinzufügen": {\
      "message": [\
        "Bitte jede Ware als neue Nachricht hinzufügen.",\
        "Das hinzufügen von Waren durch \"/beenden\" beenden."\
      ],\
      "Ware hinzufügen": {\
        "match": "[^/]+",\
        "commands": [\
          "set %PostMe% add %list% $message",\
          "setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen"\
        ]\
      }\
    },\
    "Waren entfernen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'beenden'). ') ')}",\
        "Welche Ware möchtest du entfernen?"\
      ],\
      "Ware entfernen": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|Waren entfernen"\
        ]\
      }\
    },\
    "einkaufen": {\
      "commands": [\
        "setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"\
      ],\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(beenden) ",\
        "Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
      ]\
    },\
    "noch einzukaufen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(beenden) ",\
        "Noch einzukaufen:"\
      ],\
      "Ware eingekauft": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|noch einzukaufen"\
        ]\
      }\
    }    \
  }\
}

attr Einkaufsliste_Dialog evalSpecials PostMe=PostMe\
list=Einkaufsliste
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 13 März 2018, 22:24:26
Sehr cool die Einkaufsliste!!!!

Hab das ganze gerade noch mit "Standard-Waren" ergänzt, so kann man schnell "Standard-Waren" per click hinzufügen!

defmod Einkaufsliste_Dialog msgDialog { \
  "6. Einkaufsliste": {\
  "match": "Einkaufsliste",\
    "message": [\
      "(Waren hinzufügen) ", \
      "(Waren entfernen|einkaufen) ",\
  "(Standard-Waren) ",\
      "(Menü) ",\
      "{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
    ],\
    "Waren hinzufügen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %standard%')))[1]), 'fertig'). ') ')}",\
        "Bitte jede Ware als neue Nachricht oder per Tastatur hinzufügen."\
      ],\
      "Ware hinzufügen": {\
        "match": "[^/]+",\
        "commands": [\
          "set %PostMe% add %list% $message",\
          "setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen",\
   "set $SELF say @$recipient Einkaufsliste|Waren hinzufügen"\
        ]\
      },\
   "fertig": {\
        "commands": [\
     "set $SELF say @$recipient Einkaufsliste"\
        ]\
      }  \
    },\
    "Waren entfernen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'fertig'). ') ')}",\
        "Welche Ware möchtest du entfernen?"\
      ],\
      "Ware entfernen": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|Waren entfernen"\
        ]\
      },\
     "fertig": {\
        "commands": [\
     "set $SELF say @$recipient Einkaufsliste"\
        ]\
      } \
    },\
    "einkaufen": {\
      "commands": [\
        "setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"\
      ],\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(fertig) ",\
        "Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
      ]\
    },\
    "noch einzukaufen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(fertig) ",\
        "Noch einzukaufen:"\
      ],\
      "Ware eingekauft": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|noch einzukaufen"\
        ]\
      },\
     "fertig": {\
        "commands": [\
"set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|noch einzukaufen",\
     "set $SELF say @$recipient Einkaufsliste"\
        ]\
      } \
       \
  },\
    "Standard-Waren": {\
  "match": "Standard",\
    "message": [\
      "(Standard-Waren hinzufügen) ", \
      "(Standard-Waren entfernen) ",\
      "(Menü) ",\
      "{my $content = (split(': ', fhem('get %PostMe% list %standard%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
    ],\
"Standard-Waren hinzufügen": {\
      "message": [\
  "(fertig) ",\
        "Bitte jede Ware als neue Nachricht hinzufügen.",\
        "Das hinzufügen von Waren durch \"/beenden\" beenden."\
      ],\
      "Ware hinzufügen": {\
        "match": "[^/]+",\
        "commands": [\
          "set %PostMe% add %standard% $message",\
          "setreading $SELF $recipient_history Einkaufsliste|Standard|Standard-Waren hinzufügen",\
   "set $SELF say @$recipient Einkaufsliste|Standard|Standard-Waren hinzufügen"\
        ]\
      },\
   "fertig": {\
        "commands": [\
     "set $SELF say @$recipient Einkaufsliste"\
        ]\
      }  \
    },\
    "Standard-Waren entfernen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %standard%')))[1]), 'fertig'). ') ')}",\
        "Welche Standard-Ware möchtest du entfernen?"\
      ],\
      "Ware entfernen": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %standard% $message",\
          "set $SELF say @$recipient Einkaufsliste|Standard|Standard-Waren entfernen"\
        ]\
      },\
     "fertig": {\
        "commands": [\
     "set $SELF say @$recipient Einkaufsliste"\
        ]\
      } \
    }\
}\
}\
}
attr Einkaufsliste_Dialog allowed everyone
attr Einkaufsliste_Dialog evalSpecials PostMe=PostMe\
list=Einkaufsliste\
standard=Standardartikel


setstate Einkaufsliste_Dialog 2018-03-13 22:21:14 state Initialized



LG
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 13 März 2018, 22:44:43
Hmmm..... cool wäre noch wenn beim Ware hinzufügen die Frage kommen würde in welchen Geschäft und wenn mann dann Edeka auswählt,
in der Einkaufsliste z.B.
ZitatEdeka - Toast
eingetragen würde.

Da die Liste alphabetisch sortiert ausgegeben wird, ist die Liste dann nach Geschäften sortiert.

LG
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 14 März 2018, 19:09:01
Hallo,

gibt es dazu eine Lösung? Wie kann ich die $message in einer Variable schreiben, damit ich im weiterführenden Dialog damit arbeiten kann?

ZitatSobald ich die $message Variable in die $temp Variable kopieren möchte
Code: [Auswählen]
my $temp = $message;;;;
bekomme ich in Telegram die Rückmeldung: Unrecognized character \x{b0}

LG
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 14 März 2018, 20:24:52
Poste mal bitte die komplette DEF mit der es nicht funktioniert, dann schaue ich es mir an.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 14 März 2018, 20:30:46
Hab es jetzt über ein reading gelöst.
{
  "5. Einkaufsliste": {
  "match": "Einkaufsliste",
    "message": [
      "(Waren hinzufügen) ",
      "(Waren entfernen|einkaufen) ",
  "(Standard-Waren|Menü) ",
      "{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];; return('Keine Einträge vorhanden') unless($content);; return(join('\n', split(',', $content)));;}"
    ],
    "Waren hinzufügen": {
      "message": [
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %standard%')))[1]), 'fertig'). ') ')}",
        "Bitte jede Ware als neue Nachricht oder per Tastatur hinzufügen."
      ],
      "Ware hinzufügen": {
        "match": "[^/]+",
        "commands": [
  "setreading $SELF $recipient_artikel $message"
        ],
      "message": [
  "(ALDI|LIDL) ",
  "(EDEKA|REWE) ",
  "In welchem Geschäft soll [$SELF:$recipient_artikel] gekauft werden?"
       ],
   "Geschäft wählen": {
        "match": "[^/]+",
        "commands": [
  "my $temp = $message",
          "set %PostMe% add %list% $message --> [$SELF:$recipient_artikel]",
          "setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen",
   "set $SELF say @$recipient Einkaufsliste|Waren hinzufügen"
        ]
}
},
 
 
 
   "fertig": {
        "commands": [
     "set $SELF say @$recipient Einkaufsliste"
        ]
      } 
    },
    "Waren entfernen": {
      "message": [
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'fertig'). ') ')}",
        "Welche Ware möchtest du entfernen?"
      ],
      "Ware entfernen": {
        "match": "^(?!beenden).+",
        "commands": [
          "set %PostMe% remove %list% $message",
          "set $SELF say @$recipient Einkaufsliste|Waren entfernen"
        ]
      },
     "fertig": {
        "commands": [
     "set $SELF say @$recipient Einkaufsliste"
        ]
      }
    },
    "einkaufen": {
      "commands": [
        "setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"
      ],
      "message": [
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",
        "(fertig) ",
        "Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."
      ]
    },
    "noch einzukaufen": {
      "message": [
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",
        "(fertig) ",
        "Noch einzukaufen:"
      ],
      "Ware eingekauft": {
        "match": "^(?!beenden).+",
        "commands": [
          "set %PostMe% remove %list% $message",
          "set $SELF say @$recipient Einkaufsliste|noch einzukaufen"
        ]
      },
     "fertig": {
        "commands": [
"set %PostMe% remove %list% $message",
          "set $SELF say @$recipient Einkaufsliste|noch einzukaufen",
     "set $SELF say @$recipient Einkaufsliste"
        ]
      }
       
  },
    "Standard-Waren": {
  "match": "Standard",
    "message": [
      "(Standard-Waren hinzufügen) ",
      "(Standard-Waren entfernen) ",
      "(Menü) ",
      "{my $content = (split(': ', fhem('get %PostMe% list %standard%')))[1];; return('Keine Einträge vorhanden') unless($content);; return(join('\n', split(',', $content)));;}"
    ],
"Standard-Waren hinzufügen": {
      "message": [
  "(fertig) ",
        "Bitte jede Standard-Ware als neue Nachricht hinzufügen."
      ],
      "Ware hinzufügen": {
        "match": "[^/]+",
        "commands": [
          "set %PostMe% add %standard% $message",
          "setreading $SELF $recipient_history Einkaufsliste|Standard|Standard-Waren hinzufügen",
   "set $SELF say @$recipient Einkaufsliste|Standard|Standard-Waren hinzufügen"
        ]
      },
   "fertig": {
        "commands": [
     "set $SELF say @$recipient Einkaufsliste"
        ]
      } 
    },
    "Standard-Waren entfernen": {
      "message": [
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %standard%')))[1]), 'fertig'). ') ')}",
        "Welche Standard-Ware möchtest du entfernen?"
      ],
      "Ware entfernen": {
        "match": "^(?!beenden).+",
        "commands": [
          "set %PostMe% remove %standard% $message",
          "set $SELF say @$recipient Einkaufsliste|Standard|Standard-Waren entfernen"
        ]
      },
     "fertig": {
        "commands": [
     "set $SELF say @$recipient Einkaufsliste"
        ]
      }
    }
}
}
}


Bin gerade dabei mir das ganze noch für meinen Gefrierschrank zu bauen, dazu möchte ich beim hinzufügen (einfrieren) das Datum mit anhängen!
Steh irgendwie auf den Schlauch, sollte doch einfach mit $today funktionieren!
    "commands": [
  "set %PostMe% add %list% $message --> $today",


LG
  Marlen

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 15 März 2018, 05:57:55
Zitat von: Marlen am 14 März 2018, 20:30:46
Hab es jetzt über ein reading gelöst.
teste doch mal bitte ob es mit einem '$message' als Zuweisung funktioniert (mit den Anführungszeichen).

Steh irgendwie auf den Schlauch, sollte doch einfach mit $today funktionieren!
    "commands": [
  "set %PostMe% add %list% $message --> $today",

[/quote]
Wird $today in einem normalen FHEM Befehl ausgewertet oder nur als Perl?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 15 März 2018, 12:16:17
Hallo,

    "commands": [
  "set %PostMe% add %list% $message --> $today",


Das hab ich schon funktioniert, geht wohl nicht da $today in Perl ausgewertet wird.

LG
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 15 März 2018, 17:58:03
also ein {fhem("...")} drumrum bauen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Thargor am 20 März 2018, 16:17:32

Ich versuche mich auch gerade an den Dialogen ... stehe aber irgendwie auf dem Schlauch. Vielleicht kann mich jemand erleuchten:

Ich habe drei Dialoge definiert: Eingang, Drucker, Verkehr.
Melde ich mich über Telegram mit meinem Keyword sehe ich einen Dialog, bei dem ich Eingang, Drucker, Verkehr auswählen kann.
Gehe ich dann zum Beispiel auf Eingang, wird mir der passende Dialog angezeigt und nach der Auswahl auch die enstprechende Aktion auch ausgeführt. Will ich aber die gleiche Aktion nochmal durchführen, dann funktioniert das nicht. Ich muss zunächst wieder per Keyword in den "Übersichtsdialog": Eingang, Drucker, Verkehr und kann dann eine weitere Aktion ausführen.

Ich vermute mal, dass das so eigentlich nicht Sinn der Sache ist, oder? Kann ich das Verhalten ändern bzw. woran liegt das?

Vielen Dank!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 21 März 2018, 10:56:17
Bin jetzt noch kein msgDialog-Experte, vermute aber (ohne List des Dialogs kann man nur raten), dass du in einer tiefern Dialogebene bist und dort nicht anbietest, denselben Befehl nochmal zu senden. Du kommst also runter in den Ebenen, aber nicht wieder hoch.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Thargor am 21 März 2018, 11:02:53
Zitat von: Wuehler am 21 März 2018, 10:56:17
Bin jetzt noch kein msgDialog-Experte, vermute aber (ohne List des Dialogs kann man nur raten), dass du in einer tiefern Dialogebene bist und dort nicht anbietest, denselben Befehl nochmal zu senden. Du kommst also runter in den Ebenen, aber nicht wieder hoch.

Jein. Im Dialog wird der Befehl noch angeboten und ich kann ich auch auslösen, er wird auch an FHEM übermittelt, aber die Aktion wird nicht mehr ausgelöst.

Beispiel:
Mein Keyword startet den Startdialog, ich wähle Drucker und im Druckerdialog dann Anschalten. Funktioniert. Wenn ich dann aber im noch offenen Druckerdialog Ausschalten wähle, wird der Befehl zwar an FHEM geschickt aber nicht ausgeführt. Wenn ich wieder über das Keyword im Startdialog starte, dann Drucker wähle und dann Ausschalten, dann klappt es.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 21 März 2018, 13:14:05
Zitat von: Wuehler am 21 März 2018, 10:56:17
(ohne List des Dialogs kann man nur raten)
Oder Raw Definition
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Thargor am 21 März 2018, 13:56:03
Damit kann ich dienen:
Der Metadialog:

{   "%me%":
{
"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."]   
}
}


Und hier beispielhaft einer der Dialoge:

{
  "Drucker":{
       "message": [ "(Bild) ", "(Anschalten) ",  "(Ausschalten) ",  "(%me%) ", "{'Aktueller Status: '.ReadingsVal('Drucker','progress','').' %'}", "Was kann ich für dich tun? ],
       "Bild":{
           "commands":[ "{get_octoprint_image();}", "set WeidenstationBot sendImage /public/temp/drucker.jpg" ]
        },
       "Anschalten":{
          "commands":["set PowerDrucker on"]
       },
      "Ausschalten":{
          "commands":["set PowerDrucker off"]
      }
}
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 21 März 2018, 20:28:55
Ich vermute, da fehlt dann sowas wie bei Marlen eine Seite vorher in diesem Thread. Du kommst zwar tiefer im Dialog, der Dialog kommt von alleine aber nicht wieder hoch.
Im letzten command noch sowas wie
set $SELF say $recipient Drucker
Im Drucker Dialog fehlt auch noch ein abbrechen oder du nimmst in meinem code nicht Drucker sondern dein codewot für den Metadialog. Dann muss du aber immer wenn du auf Drucker klickst entweder an oder ausschalten.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 21 März 2018, 20:37:02
Meiner Meinung nach wurde das Problem erkannt und beschrieben.
Ich finde es sehr schön zu sehen, dass hier so viel Hilfe aus der Community kommt :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 21 März 2018, 22:12:37
Danke  :) und dir auch für das Modul. Der Grillthermometerdialog funktioniert übrigens Klasse.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Thargor am 22 März 2018, 09:21:11
Vielen Dank für die Hilfestellung.

Zitat von: Wuehler am 21 März 2018, 20:28:55
Ich vermute, da fehlt dann sowas wie bei Marlen eine Seite vorher in diesem Thread. Du kommst zwar tiefer im Dialog, der Dialog kommt von alleine aber nicht wieder hoch.
Im letzten command noch sowas wie
set $SELF say $recipient Drucker

Leider verstehe ich das nicht. In welchem letzten Command? Nach jedem Kommando, dass ich schicken möchte?

Zitat von: Wuehler am 21 März 2018, 20:28:55
Im Drucker Dialog fehlt auch noch ein abbrechen oder du nimmst in meinem code nicht Drucker sondern dein codewot für den Metadialog. Dann muss du aber immer wenn du auf Drucker klickst entweder an oder ausschalten.

Die Funktion hat doch "(%me%) ". Damit komm ich wieder in den Startdialog.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 22 März 2018, 10:01:15
Stimmt. Das me wirkt wie abbrechen. Dann musst du nur bei den unterdialogen Bild, anschalten und ausschalten ein zusätzliches Kommando einfügen. Siehe im Dialog von Marlen. Wenn du in der tiefsten Dialogebene bist bringst du deen Dialog damit automatisch wieder in eine höhere Ebene. Ansonsten bleibt er dort stehen und du bekommst weder ein neues Menü noch reagiert er auf eine Eingabe, da ja keine tiefere Ebene zur Verfügung steht.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Thargor am 22 März 2018, 10:14:40
Vielen Dank!
So klappt es, allerdings kommt dann natürlich wieder der Dialogtext ... je nach Kommando sogar vor der eigentlichen Antwort des Befehls, was ein wenig doof aussieht. Ich fürchte das kann man nicht unterdrücken? Wäre nett, aber damit kann ich leben :-)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 22 März 2018, 11:20:46
Eine Alternative wäre, dass du jedesmal auf unterer Ebene folgendes mitsendest (kopiert aus dem Notfalldialog von Seite 27):
"message": [
"TelegramBot_MTYPE=queryInline (%me%) "

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 27 März 2018, 18:39:03
Hallo zusammen.
Ich habe heute meinen Dialog für Geräte um ein Gerät erweitert aber es wird mir nicht angezeigt und somit kann ich es nicht schalten.
Der Dialog ansonsten funktioniert ohne Probleme, nur das neue Gerät wird nicht angezeigt. Habe Fhem aber auch neu gestartet, das alles neu eingelesen wird.
es handelt sich um das Büroladegerät
defmod geraete_Dialog msgDialog {"Geräte":{\
  "message": [\
    "(Geräte einschalten) ",\
    "(Geräte ausschalten) ",\
    "(zurück) ",\
    "(abbrechen) ",\
    "Geräte schalten:"\
  ],\
    "Geräte einschalten":{\
    "message":[\
      "{return('(Spüle einschalten) ') if(ReadingsVal('SPUELE', 'state', '') eq 'off')}",\
      "{return('(Büroventilator einschalten) ') if(ReadingsVal('VENT_BUERO', 'state', '') eq 'off')}",\
  "{return('(Büroladegerät einschalten) ') if(ReadingsVal('LADEGERAET', 'state', '') eq 'off')}",\
      "{return('(Wohnzimmer TV einschalten) ') if(ReadingsVal('TV_WOHN', 'state', '') eq 'off')}",\
      "{return('(Wohnzimmerventilator einschalten) ') if(ReadingsVal('VENT_WOHN', 'state', '') eq 'off')}",\
      "{return('(Ladegerät einschalten) ') if(ReadingsVal('PLUG_BED', 'state', '') eq 'off')}",\
      "{return('(Schlafzimmer TV einschalten) ') if(ReadingsVal('TV_BED', 'state', '') eq 'off')}",\
      "(zurück) ",\
      "(abbrechen) ",\
      "Welches Gerät soll eingeschaltet werden?"\
    ],\
    "Spüle einschalten":{\
    "commands": "set SPUELE on",\
    "message":[\
      "(%me%) ",\
      "Spüle wurde eingeschaltet."\
    ]\
    },\
    "Büroventilator einschalten":{\
    "commands": "set VENT_BUERO on",\
    "message":[\
      "(%me%) ",\
      "Büroventilator wurde eingeschaltet."\
    ]\
    },\
    "Büroladegerät einschalten":{\
    "commands": "set LADEGERAET on",\
    "message":[\
      "(%me%) ",\
      "Büroladegerät wurde eingeschaltet."\
    ]\
    },\
    "Wohnzimmer TV einschalten":{\
    "commands": "set TV_WOHN on",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer TV wurde eingeschaltet."\
    ]\
    },\
    "Wohnzimmerventilator einschalten":{\
    "commands": "set VENT_WOHN on",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmerventilator wurde eingeschaltet."\
    ]\
},\
"Ladegerät einschalten":{\
    "commands": "set PLUG_BED on",\
    "message":[\
      "(%me%) ",\
      "Ladegerät wurde eingeschaltet."\
    ]\
},\
"Schlafzimmer TV einschalten":{\
    "commands": "set TV_BED on",\
    "message":[\
      "(%me%) ",\
      "Schlafzimmer TV wurde eingeschaltet."\
    ]\
}\
    },\
"Geräte ausschalten":{\
    "message":[\
      "{return('(Spüle ausschalten) ') if(ReadingsVal('SPUELE', 'state', '') ne 'off')}",\
      "{return('(Büroventilator ausschalten) ') if(ReadingsVal('VENT_BUERO', 'state', '') ne 'off')}",\
  "{return('(Büroladegerät ausschalten) ') if(ReadingsVal('LADEGERAET', 'state', '') eq 'off')}",\
      "{return('(Wohnzimmer TV ausschalten) ') if(ReadingsVal('TV_WOHN', 'state', '') ne 'off')}",\
      "{return('(Wohnzimmerventilator ausschalten) ') if(ReadingsVal('VENT_WOHN', 'state', '') ne 'off')}",\
      "{return('(Ladegerät ausschalten) ') if(ReadingsVal('PLUG_BED', 'state', '') ne 'off')}",\
      "{return('(Schlafzimmer TV ausschalten) ') if(ReadingsVal('TV_BED', 'state', '') ne 'off')}",\
      "(zurück) ",\
      "(abbrechen) ",\
      "Welches Gerät soll ausgeschaltet werden?"\
    ],\
    "Spüle ausschalten":{\
    "commands": "set SPUELE off",\
    "message":[\
      "(%me%) ",\
      "Spüle wurde ausgeschaltet."\
    ]\
    },\
    "Büroventilator ausschalten":{\
    "commands": "set VENT_BUERO off",\
    "message":[\
      "(%me%) ",\
      "Büroventilator wurde ausgeschaltet."\
    ]\
    },\
    "Büroladegerät ausschalten":{\
    "commands": "set LADEGERAET off",\
    "message":[\
      "(%me%) ",\
      "Büroladegerät wurde ausgeschaltet."\
    ]\
    },\
    "Wohnzimmer TV ausschalten":{\
    "commands": "set TV_WOHN off",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer TV wurde ausgeschaltet."\
    ]\
    },\
    "Wohnzimmerventilator ausschalten":{\
    "commands": "set VENT_WOHN off",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmerventilator wurde ausgeschaltet."\
    ]\
    },\
    "Ladegerät ausschalten":{\
    "commands": "set PLUG_BED off",\
    "message":[\
      "(%me%) ",\
      "Ladegerät wurde ausgeschaltet."\
    ]\
    },\
    "Schlafzimmer TV ausschalten":{\
    "commands": "set TV_BED off",\
    "message":[\
      "(%me%) ",\
      "Schlafzimmer TV wurde ausgeschaltet."\
    ]\
    }\
   }\
}\
}
attr geraete_Dialog allowed rr_Marcus
attr geraete_Dialog room Telegram

setstate geraete_Dialog 2018-03-27 18:33:44 state Initialized



Könnte mal bitte jemand drüber schauen, ob ich da ein Fehler drin habe, den ich selbst nicht sehe. Danke.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 27 März 2018, 23:44:07
Hi,

Ein list von LADEGERAET wäre hilfreich. Welchen state hat denn LADEGERAET?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 28 März 2018, 10:12:43
Zitat
"Geräte ausschalten":{\

...

"{return('(Büroladegerät ausschalten) ') if(ReadingsVal('LADEGERAET', 'state', '') eq 'off')}",\

Du musst dort 'ne' statt 'eq' verwenden.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 28 März 2018, 19:27:30
Das war es, danke Tom_Tom. Copy & Paste Fehler.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: netdom am 01 April 2018, 12:03:24
Ich stehe gerade auf dem Schlauch, in meinem MetaDialog ist folgendes definiert:

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


In meinen Dialogen sieht das dann z.B. so aus

defmod Lichtsteuerung_Dialog msgDialog {\
  "Lichtsteuerung": {\
    "message": [\
   "(Weihnachtsbaum einschalten) ",\
   "(Weihnachtsbaum ausschalten) ",\
   "(Arbeitsplatzlichter einschalten) ",\
   "(Arbeitsplatzlichter ausschalten) ",\
           "(Zurück:%me%) ",\
   "Bitte gewünschtes Licht auswählen"\
    ],\
"Arbeitsplatzlichter einschalten": {\
"commands": ["set HUEDevice7 on", "set az.verteilerdose_Out2 on"],\
"message":[\
        "TelegramBot_MTYPE=queryInline (%me%) ",\
"Arbeitsleuchte eingeschaltet"\
]\
}, \
"Arbeitsplatzlichter ausschalten": {\
"commands": ["set HUEDevice7 off", "set az.verteilerdose_Out2 off force"],\
"message":[\
        "TelegramBot_MTYPE=queryInline (%me%) ",\
"Arbeitsleuchte ausgeschaltet"\
]\
}, \
"Weihnachtsbaum einschalten": {\
"commands": ["set HUEDevice8 on"],\
"message":[\
        "TelegramBot_MTYPE=queryInline (%me%) ",\
"Weihnachtsbaum eingeschaltet"\
]\
}, \
"Weihnachtsbaum ausschalten": {\
"commands": ["set HUEDevice8 off"],\
"message":[\
        "TelegramBot_MTYPE=queryInline (%me%) ",\
"Weihnachtsbaum ausgeschaltet"\
]\
}\
  }\
}



Ich habe schon (zurück) als auch (zurück:%me%) versucht aber er beendet dann einfach, auch mit Groß/Kleinschreibung habe ich es schon versucht, könnt ihr mir einen Tipp geben ?

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 01 April 2018, 21:59:41
Du bist auf der Einstiegsebene, wohin soll er denn zurück Springen?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 03 April 2018, 13:21:19
Hallo.
Ich habe den Temperatur Dialog von Tom versucht an meine Bedürfnisse anzupassen aber es klappt nicht komplett.
Ich kann alle Heizkörper schalten und das wird auch ausgeführt aber bei der Temperaturauflistung, wird mir nie das Büro angezeigt. Ich verstehe aber nicht warum und deswegen bitte ich Euch um Hilfe.

Der Dialog:
defmod heizungs_Dialog msgDialog {\
"Raumtemperaturen": {\
"match": "Raumtemperaturen",\
"message": [\
"(Büro|Küche) (Schlafzimmer|Wohnzimmer) ",\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{return telegramBotGetRoomTemperatureListMessage() }"\
],\
"Raum": {\
"match": "(Büro|Küche|Schlafzimmer|Wohnzimmer)",\
"commands": "setreading $SELF $recipient_Room $message",\
"message": [\
"(10.0|12.0|16.0|17.0) ",\
"(17.5|18.0|18.5|19.0) ",\
"(19.5|20.0|20.5|21.0) ",\
"(21.5|22.0|22.5|23.0) ",\
"(abbrechen) ",\
"Heizung im $message einstellen"\
],\
"Temperatur": {\
"match": "on|off|[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $temp = $message;;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; my $clima = ($room==\"Büro\"?\"HZ_BUERO\": ($room==\"Küche\"?\"HZ_KUECHE\":($room==\"Schlafzimmer\"?\"HZ_BED\":($room==\"Wohnzimmer\"?\"HZ_WOHNZ\":\"\"))));;;;;;;; fhem (\"set $clima desired-temp $temp\") }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message eingestellt.\";;;;;;;; }"\
]\
}\
}\
  }\
}
attr heizungs_Dialog allowed rr_Marcus
attr heizungs_Dialog room Telegram

setstate heizungs_Dialog rr_Marcus: Raumtemperaturen
setstate heizungs_Dialog 2018-03-30 19:07:09 state rr_Marcus: Raumtemperaturen



Die angepasste Subroutine:
######## Status der Raumtemperaturen abfragen ############
sub
telegramBotGetRoomTemperatureListMessage()
{
my $tempBuero = ReadingsVal("HZ_BUERO", "measured-temp", "0");
my $desiredTempBuero = ReadingsVal("HZ_BUERO", "desired-temp", "0");
my $tempKueche = ReadingsVal("HZ_KUECHE", "measured-temp", "0");
my $desiredTempKueche = ReadingsVal("HZ_KUECHE", "desired-temp", "0");
my $tempSchlafzimmer = ReadingsVal("HZ_BED", "measured-temp", "0");
my $desiredTempSchlafzimmer = ReadingsVal("HZ_BED", "desired-temp", "0");
my $tempWohnzimmer = ReadingsVal("HZ_WOHNZ", "measured-temp", "0");
my $desiredTempWohnzimmer = ReadingsVal("HZ_WOHNZ", "desired-temp", "0");
my $returnMessage = "Büro: $tempBuero °C (-> $desiredTempBuero °C)\n";
$returnMessage = "Küche: $tempKueche °C (-> $desiredTempKueche °C)\n";
$returnMessage .= "Schlafz.: $tempSchlafzimmer °C (-> $desiredTempSchlafzimmer °C)\n";
$returnMessage .= "Wohnz.: $tempWohnzimmer °C (-> $desiredTempWohnzimmer °C)\n";

return $returnMessage;
}
######## Ende Status der Raumtemperaturen abfragen ############


Die Subroutine steht in der myyUtils. Die Utils funktioniert auch, andere Routinen funzen einwandfrei. Ganze System ist neu gestartet worden, das alle Daateien neu eingelesen werden. Fhem ist in der neusten Version aufgespielt, da mir Update sagt, keine neuen Updates vorhanden.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 03 April 2018, 22:07:38
In der util fehlt vorm = in der viertletzen Zeile ( mit Küche) der punkt. $returnMessage wird da neu gesetzt,,
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 04 April 2018, 13:07:31
Besten Dank. Der fehlende Punkt war es. Obwohl ich mir den Code x mal durchgelesen habe, habe ich das nicht gesehen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 08 April 2018, 09:17:33
Moin.
Habe ein kleines Problem mit einem neuen Dialog. Verstehe leider nicht warum, weil manuelle funktioniert jeder Aufruf. Im Dialog bricht es immer beim schalten ab, es wird nichts mehr angezeigt und nichts geschaltet.
defmod klima_Dialog msgDialog {"Automatik":{\
  "message": [\
    "(Automatik einschalten) ",\
    "(Automatik ausschalten) ",\
    "(zurück) ",\
    "(abbrechen) ",\
    "Automatik schalten:"\
  ],\
    "Automatik einschalten":{\
    "message":[\
      "{return('(Büro Heizung) ') if(ReadingsVal('HZ_BUERO', 'mode', '') ne 'auto')}",\
      "{return('(Büro Ventilator) ') if(ReadingsVal('buero_autovent', 'state', '') ne 'Active')}",\
      "{return('(Wohnzimmer Heizung) ') if(ReadingsVal('HZ_WOHNZ', 'mode', '') ne 'auto')}",\
      "{return('(Wohnzimmer Ventilator) ') if(ReadingsVal('wohn_autovent', 'state', '') ne 'Active')}",\
      "{return('(Küchen Heizung) ') if(ReadingsVal('HZ_KUECHE', 'mode', '') ne 'auto')}",\
      "{return('(Schlafzimmer Heizung) ') if(ReadingsVal('HZ_BED', 'mode', '') ne 'auto')}",\
      "(zurück) ",\
      "(abbrechen) ",\
      "Welche Automatik soll eingeschaltet werden?"\
    ],\
    "Büro Heizung umschalten":{\
    "commands": "set HZ_BUERO mode auto",\
    "message":[\
      "(%me%) ",\
      "Büro Heizung wurde umgeschaltet."\
    ]\
    },\
    "Büro Ventilator umschalten":{\
    "commands": "set buero_autovent state Active",\
    "message":[\
      "(%me%) ",\
      "Büro Ventilator wurde umgeschaltet."\
    ]\
    },\
    "Wohnzimmer Heizung umschalten":{\
    "commands": "set HZ_WOHNZ mode auto",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer Heizung wurde umgeschaltet."\
    ]\
    },\
    "Wohnzimmer Ventilator umschalten":{\
    "commands": "set wohn_autovent state Active",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer Ventilator wurde umgeschaltet."\
    ]\
    },\
    "Küchen Heizung umschalten":{\
    "commands": "set HZ_KUCHE mode auto",\
    "message":[\
      "(%me%) ",\
      "Küchen Heizung wurde umgeschaltet."\
    ]\
},\
"Schlafzimmer Heizung umschalten":{\
    "commands": "set HZ_BED mode auto",\
    "message":[\
      "(%me%) ",\
      "Schlafzimmer Heizung wurde umgeschaltet."\
    ]\
}\
    },\
"Automatik ausschalten":{\
    "message":[\
      "{return('(Büro Heizung) ') if(ReadingsVal('HZ_BUERO', 'mode', '') ne 'manual')}",\
      "{return('(Büro Ventilator) ') if(ReadingsVal('buero_autovent', 'state', '') ne 'Inactive')}",\
      "{return('(Wohnzimmer Heizung) ') if(ReadingsVal('HZ_WOHNZ', 'mode', '') ne 'manual')}",\
      "{return('(Wohnzimmer Ventilator) ') if(ReadingsVal('wohn_autovent', 'state', '') ne 'Inactive')}",\
      "{return('(Küchen Heizung) ') if(ReadingsVal('HZ_KUECHE', 'mode', '') ne 'manual')}",\
      "{return('(Schlafzimmer Heizung) ') if(ReadingsVal('HZ_BED', 'mode', '') ne 'manual')}",\
      "(zurück) ",\
      "(abbrechen) ",\
      "Welche Automatik soll ausgeschaltet werden?"\
    ],\
    "Büro Heizung umschalten":{\
    "commands": "set HZ_BUERO mode manual",\
    "message":[\
      "(%me%) ",\
      "Büro Heizung wurde umgeschaltet."\
    ]\
    },\
    "Büro Ventilator umschalten":{\
    "commands": "set buero_autovent state Inactive",\
    "message":[\
      "(%me%) ",\
      "Büro Ventilator wurde umgeschaltet."\
    ]\
    },\
    "Wohnzimmer Heizung umschalten":{\
    "commands": "set HZ_WOHNZ mode manual",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer Heizung wurde umgeschaltet."\
    ]\
    },\
    "Wohnzimmer Ventilator umschalten":{\
    "commands": "set wohn_autovent state Inactive",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer Ventilator wurde umgeschaltet."\
    ]\
    },\
    "Küchen Heizung umschalten":{\
    "commands": "set HZ_KUECHE mode manual",\
    "message":[\
      "(%me%) ",\
      "Küchen Heizung wurde umgeschaltet."\
    ]\
    },\
    "Schlafzimmer Heizung umschalten":{\
    "commands": "set HZ_BED mode manual",\
    "message":[\
      "(%me%) ",\
      "Schlafzimmer Heizung wurde umgeschaltet."\
    ]\
    }\
   }\
}\
}
attr klima_Dialog allowed rr_Marcus
attr klima_Dialog room Telegram

setstate klima_Dialog rr_Marcus: Automatik einschalten
setstate klima_Dialog 2018-04-08 09:01:44 state rr_Marcus: Automatik einschalten
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 08 April 2018, 11:57:43
Hast du mal geschaut, ob dein json korrekt ist zB mit http://jsonprettyprint.com (http://jsonprettyprint.com).
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 10 April 2018, 17:42:22
Beim Check auf der Seite, erhalte ich eine NULL als Ausgabe.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 11 April 2018, 13:33:54
Json ist korrekt. Du musst die \ am Ende der Zeilen entfernen. Das Problem liegt in den Dialogworten:

"Automatik einschalten":{\
    "message":[\
      "{return('(Büro Heizung) ')



  ],\
    "Büro Heizung umschalten":{\
    "commands": "set HZ_BUERO mode auto",\


Büro Heizung
versus
Büro Heizung umschalten

Ich denke, du kannst das umschalten immer entfernen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 11 April 2018, 17:44:32
Das "umschalten" war es. Danke Dir für die Hilfe.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: jazzor am 23 April 2018, 00:09:06
Hallo zusammen,
ich stehe gerade - wahrscheinlich der späten  Stunde geschuldet - arg auf dem Schlauch, vielleicht könnt ihr mir ja runterhelfen ;-)

Kann ich irgendwie einen "Titel" mit übergeben, der dann im Nachrichtenteil auf der Telegramseite fett markiert wird?
Im TelegramBot hab ich den "parseModeSend" auf "3_InMsg" stehen, und in notifies funktioniert es auch mit set TelegramBot msg Markdown *fetterText*
Allerdings bekomme ich es aus msgDialog nicht hin. Selbst wenn ich den Mardown als Titel im msgconfig Modul einstelle.
Hat jemand eine Idee?
Vielen Dank vorab!

Edit: Auch mehrere Tage später hab ich immer noch keine Möglichkeit gefunden, die Formatierung mit zu übergeben. Hat das wirklich noch nie jemand probiert?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 12 Mai 2018, 19:40:07
Hallo.
Ich versuche gerade, den ein oder anderen Dialog auf die Beine zu stellen aber stoße da auf größere Probleme mit der Erstellung. Ich habe da wohl noch eine große Wissenslücke. Könnt Ihr mir mal bitte ein paar Tipps geben, welche Lektüre ich mir durchlesen sollte, um es zu lernen. Danke.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: defdanny am 20 Mai 2018, 20:31:59
Hallo zusammen,
ich habe folgendes Problem:
Ich habe die Einrichtung des msgDialog Gerätes und Kopplung mit dem TelegramBot Device erfolgreich abgeschlossen.
Ein erster Testdialog funktioniert problemlos. Nun habe ich gemäß Wiki-Artikel von "normalem" auf "Inline-Keyboard" umgestellt.
Dazu habe ich die das notify-Device "sentMsgIdByPeerId notify" und das cmdalias "message2queryEditInline" gemäß Beispiel angelegt.
Soweit, so gut, das Menü des Meta-Dialogs wird nun "inline" angezeigt. Prima!

Aber: Sobald ich einen Menüeintrag auswähle, sehe ich ein fröhlich vor sich hinkringelndes Kringel in der Schaltfläche und es passiert genau: nichts. (siehe Screenshot)
Interessant: Gebe ich das Command direkt ein, funktioniert es.

Was könnte die Ursache für dieses verhalten sein?

Hier die Raw Definition meines 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 msg

setstate meta_Dialog Daniel: /start
setstate meta_Dialog 2018-05-20 20:29:03 state Daniel: /start




Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 21 Mai 2018, 09:39:20
Moin,

Ist das 1:1 der Meta-Dialog aus dem Wiki? Der hat bei mir super funktioniert (und ich meine ohne Anpassung).
Ansonsten wäre der Dialog der nicht funktioniert noch hilfreich als Info.
VG,
Dirk
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: defdanny am 21 Mai 2018, 11:56:51
Hallo Dirk,
ja, das ist der metaDialog aus dem Wiki, völlig unverändert.
Er hat auch super funktioniert, solange ich ihn mit dem "normalen" Keyboard verwendet habe.
Erst, als ich die Schritte zur Aktivierung des inline Keyboards aus dem Wiki nachgestellt habe, fingen die geschilderten Probleme an.

Gerne poste ich auch noch den Dialog, "der nicht funktioniert."
Allerdings tritt das Problem auch bei der Schaltfläche "abbrechen" auf, die ja bereits im Meta-Dialog definiert ist und angezeigt wird....
Hier die Raw Def des Dialogs "Kamera_Dialog":

defmod Kamera_Dialog msgDialog {\
"Kameras": {\
"message": [\
  "(Kamera Carport) ",\
  "(Kamera Garten) ",\
  "(zurück) ",\
  "Menü Kameras"\
  ]\
},\
"Kamera Carport": {\
"commands": "set FHEM_Bot sendImage /opt/fhem/www/images/ipcams/ipcam1_snapshot.jpg",\
"message": [\
"So siehts in deinem Carport aus!"\
]\
\
},\
"Kamera Garten": {\
"commands": "set FHEM_Bot sendImage /opt/fhem/www/images/ipcams/ipcam2_snapshot.jpg",\
"message": [\
"So siehts in deinem Garten aus!"\
]\
}\
}
attr Kamera_Dialog allowed everyone
attr Kamera_Dialog room msg

setstate Kamera_Dialog Daniel: Kameras
setstate Kamera_Dialog 2018-05-20 22:52:35 Daniel_history
setstate Kamera_Dialog 2018-05-20 22:52:35 state Daniel: Kameras

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 21 Mai 2018, 14:02:00
Mhh, ist nen bissl schwer zu erraten, da ich da auch lange nichts mehr mit gemacht habe. Folgande Ansätze:
1. hast du im device msgConfig den me-Eintrag in evalSpecials richtig gesetzt?
2. der screenshot ist ja schon im Kameras-Dialog. D.h. Du bist aus dem meta schon eine Ebene tiefer gekommen. Ich denke, daher kommt msg auch durcheinander und es kommt keine Antwort.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: defdanny am 21 Mai 2018, 21:13:44
Zu 1.: Ich habe für das msgConfig Device sowohl das Attribut "evalSpecials" als auch "msgDialog_evalSpecials" gesetzt. Ich bin nicht ganz sicher, welches das richtige ist, habe widersprüchliche Angaben hier im Thread gefunden.


defmod myMsgConfig msgConfig
attr myMsgConfig userattr evalSpecials:textField-long msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig evalSpecials me=Tach TelegramBot=FHEM_Bot
attr myMsgConfig group Global
attr myMsgConfig msgContactPush FHEM_Bot
attr myMsgConfig msgDialog_evalSpecials me=Tach TelegramBot=FHEM_Bot
attr myMsgConfig msgType text
attr myMsgConfig room msg
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 3

setstate myMsgConfig initialized
setstate myMsgConfig 2018-05-10 22:53:11 fhemMsgState initialized


Zu 2.: Nein, der Screenshot zeigt tatsächlich den Meta-Dialog. Mir ist es noch nicht gelungen, die Einträge für die Kameras auszublenden, die eigentlich erst im Kamera-Dialog erscheinen sollen. Habe noch nicht verstanden, wie man das macht. aber das ist erst mal nebensächlich...
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 21 Mai 2018, 21:54:55
Ich habe nur msgDialog_evalSpecials.
Genauso im userattr. Da fehlt bei mir dein erster Eintrag.

Dass bei dir gleich die Menüpunkte des Unterdialogs angezeigt werden ist meiner Meinung nach ein Hinweis auf das Problem. Mach mal bei den Dialogen ein set reset und updateAllowed.

Wenn ich dich richtig verstanden habe hat das Ganze ohne inline-Tastatur funktioniert. Welchen Dialog hast du denn auf welche Weise angepasst?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: jazzor am 22 Mai 2018, 23:02:19
Hallo zusammen,

mittlerweile komme ich mit dem msgDialog-Modul relativ gut klar und steigere momentan den Wife-Acceptance-Faktor von Fhem dadurch gewaltig. ;)
Daher schonmal danke an dieser Stelle.

Hatte mir überlegt, dass es gut wäre, fertige Dialoge - welche auch für andere interessant sein könnten - in einem Thread zu sammeln.
Wie ist denn da so die Meinung zu? Lohnt das? Oder sollte sowas eher im Wiki stattfinden?
Ich hab bspw. einen Dialog für verpasste Anrufe zuhause, über den ich direkt auch neue Namen im Fritzbox-Telefonbuch anlegen kann.

Viele Grüße!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 23 Mai 2018, 08:27:18
Zitat von: jazzor am 22 Mai 2018, 23:02:19
Hallo zusammen,

mittlerweile komme ich mit dem msgDialog-Modul relativ gut klar und steigere momentan den Wife-Acceptance-Faktor von Fhem dadurch gewaltig. ;)
Daher schonmal danke an dieser Stelle.

Hatte mir überlegt, dass es gut wäre, fertige Dialoge - welche auch für andere interessant sein könnten - in einem Thread zu sammeln.
Wie ist denn da so die Meinung zu? Lohnt das? Oder sollte sowas eher im Wiki stattfinden?
Ich hab bspw. einen Dialog für verpasste Anrufe zuhause, über den ich direkt auch neue Namen im Fritzbox-Telefonbuch anlegen kann.

Viele Grüße!

Ich würde einer Sammlung von Dialogen zusprechen. Ich tue mich da nämlich noch etwas schwer^^
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 23 Mai 2018, 08:38:26
Ich finde die Idee auch gut. Eigentlich ist das Wiki meiner Meinung nach besser dazu geeignet, zum Start sollte aber ein eigener Thread hier reichen. Mal schauen wie viel zusammen kommt. Wenn es im Thread zu unübersichtlich wird kann man immer noch die Dialoge ins Wiki bringen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: jazzor am 23 Mai 2018, 10:48:05
Zitat von: Wuehler am 23 Mai 2018, 08:38:26
Ich finde die Idee auch gut. Eigentlich ist das Wiki meiner Meinung nach besser dazu geeignet, zum Start sollte aber ein eigener Thread hier reichen. Mal schauen wie viel zusammen kommt. Wenn es im Thread zu unübersichtlich wird kann man immer noch die Dialoge ins Wiki bringen.
Ich hab den Thread jetzt mal spontan hier  (https://forum.fhem.de/index.php/topic,88050.0.html)ins Leben gerufen.
Bei Wünschen oder Anregungen bitte gerne per PM anstubsen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 23 Mai 2018, 14:30:17
Zitat von: igami am 20 Januar 2018, 06:29:04
Also eine Art Wörterbuch? Falls ja würde ich das glaube ich über die myUtils lösen

sub babel_en2de($) {
  my ($text) = @_;
  my %babel = (
    "present" => "anwesend",
    "absent" => "abwesend"
  );
  my $babelkeys = join("|", keys(%babel));
  $text =~ s/($babelkeys)/$babel{$1}/g;
 
  return($text);
}


Dann noch alle ausgehenden Nachrichten durch den übersetzer jagen:

attr myMsgConfig msgDialog_msgCommand msg push \@$recipients {(babel_en2de($message))}


Mein Vorhaben habe ich vor 4 Monaten erstmal liegen gelassen.

Kriege es 4 Monate später allerdings immer noch nicht hin.

Mein Vorhaben ist es ein Reading eines Presence Devices auszulesen und direkt mit zu schicken.

Siehe hier:

{
   "Anwesenheit":{
      "message":[
"Anwesenheit der Familienmitglieder:"
         "Name1:" <> #auslesen und darstellen des status vom Gtag
         "Name2:" <> #auslesen und darstellen des status vom Gtag
         "Name3:" <present> #Beispielsweise present ausgelesen
         "Name4:" <Zuhause> #aus present wird dann mit Hilfe der Sub von igamai "Zuhause"

      ]

   }


Ich habe bereits schon ein wenig mit ReadingsVal rum gespielt allerdings nur Syntax Fehler bekommen...

Kann mir jemand einen Tipp geben?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 23 Mai 2018, 15:36:12
Hi,

Bei mir gehts zB in folgendem Mini-Dialog:
{
  "Voucher": {
    "commands": [
      "{fhem('set voucherComment comment '.ReadingsVal('Unifi','-VC_2h','').' (2h): $recipient')}"
    ],
    "message": "{return('Code: '.fhem('get Unifi voucher 2h'))}"
  }
}


VG,
Dirk
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: defdanny am 23 Mai 2018, 19:07:29
Zitat von: Keule_09 am 30 Januar 2018, 12:36:25
Hallo,

hab mal eine Frage zum Meta_Dialog.
Dort sind ja bestimmte Befehle schon vorgegeben, die bis auf "zurück" bei mir auch funktionieren.
Der zurück-Button müsste ja nur eine Ebene höher springen oder ?
Muss für den zurück-Befehl noch was angegeben werden ?

Hab mir den Berechtigungsdialog von Igami importiert,
da ich dachte es liegt an meinem Dialog aber beim betätigen des zurück-Buttons dreht sich auch dort nur der Kreis aber es passiert nichts.

Gruß Marco

Hallo Marco,
ich stehe gerade vor genau dem gleichen Rätsel. Wie hast du es gelöst?

Grüße
Daniel
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 24 Mai 2018, 15:01:17
Zitat von: Wuehler am 23 Mai 2018, 15:36:12
Hi,

Bei mir gehts zB in folgendem Mini-Dialog:
{
  "Voucher": {
    "commands": [
      "{fhem('set voucherComment comment '.ReadingsVal('Unifi','-VC_2h','').' (2h): $recipient')}"
    ],
    "message": "{return('Code: '.fhem('get Unifi voucher 2h'))}"
  }
}


VG,
Dirk

Danke, aber irgendwie kann ich damit nicht viel anfangen.

Ich bin nun so weit gekommen, dass das Reading ausgelesen wird. Allerdings kriege ich es anschließend nicht dargestellt. Ich kriege immer innerhalb Telegram "unknown command absent, try help" Es wird wohl versucht das ausgelesene Reading als command zu interpretieren...

Was mache ich falsch? Habe lange nicht mehr mit Perl gearbeitet. :(

Hier mein Code:


{
   "Anwesenheit":{
      "message":[
"Anwesenheit der Familienmitglieder:",
     "Felix:", "{my $bla = fhem(ReadingsVal('FelixGtag','presence','')); return $bla;}",
         "Katharina:", "{my $bla = fhem(ReadingsVal('KatharinaGtag','presence','')); return $bla;}",
         "Martina:", "{my $bla = fhem(ReadingsVal('MartinaGtag','presence','')); return $bla;}",
         "Rolf:", "{my $bla = fhem(ReadingsVal('RolfGtag','presence','')); return $bla;}"
      ]

   }
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 24 Mai 2018, 15:45:46
Hi,

Sieht bei dir nach message ja auch iwie anders aus.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 24 Mai 2018, 15:57:01
Zitat von: Wuehler am 24 Mai 2018, 15:45:46
Hi,

Sieht bei dir nach message ja auch iwie anders aus.

In wie fern? Und ist "anders" in diesem Fall falsch?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 24 Mai 2018, 22:28:35
Bin leider unterwegs und kann es nicht ausprobieren um dir da besser zu helfen.

Laut Wiki muss jede message in einer Zeile stehen. Bei dir sind Es in den Zeilen mit den Namen jeweils zwei.  Ersetz die mal ungefähr folgendermaßen:
"{return('Felix: '.fhem(ReadingsVal('FelixGtag','presence,''))},
Achtung: habe auf dem Handy die Hochkommata nicht richtig hinbekommen!!!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 25 Mai 2018, 10:30:24
Zitat von: Wuehler am 24 Mai 2018, 22:28:35
Bin leider unterwegs und kann es nicht ausprobieren um dir da besser zu helfen.

Laut Wiki muss jede message in einer Zeile stehen. Bei dir sind Es in den Zeilen mit den Namen jeweils zwei.  Ersetz die mal ungefähr folgendermaßen:
"{return('Felix: '.fhem(ReadingsVal('FelixGtag','presence,''))},
Achtung: habe auf dem Handy die Hochkommata nicht richtig hinbekommen!!!

Danke für die Hilfe. Allerdings kriege ich die gleiche Meldung wie bei meiner Variante:

Zitatunknown command absent, try help

Was genau hat der Punkt in dem nachfolgendem Code zu bedeuten? Ich nehme an, das Wort fhem leitet den nachstehenden fhem Befehl ein?

{return('Felix: [color=red]'.[/color]fhem(ReadingsVal('FelixGtag','presence,''))}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 25 Mai 2018, 10:50:33
Hi,

Das sind dann jetzt aber ein paar fhem und perl Grundlagen:
- mit der geschweiften Klammer wechselt man in den perl-Modus
- Message möchte einen Text zum vversenden, daher aus oerl ein return
- der Punkt verbindet Zeichenketten.
- fhem() ist der Aufruf eines fhem Befehls(darin gehört kein perl)
- der ist hier natürlich falsch, sorry dafür, aber beim Handytippen sieht man manches nicht so gut.
- hier würde also direkt ReadingsVal(...) als perl Funktion reichen.


{return('Felix: [color=red]'.ReadingsVal('FelixGtag','presence','m)."[/color]"}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 25 Mai 2018, 10:59:06
Das wusste ich alles, bis auf dem Punkt. Danke für die Erläuterung :)

Aber warum wird nun mein ausgelesenes Reading mit Readingsval als command interpretiert und nicht als Textausgabe dargestellt? ???
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 25 Mai 2018, 11:02:59
Wie sieht dein Dialog denn jetzt in Gänze aus?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 25 Mai 2018, 11:12:08
Folgendermaßen sieht er nun aus:


{
   "Anwesenheit":{
      "message":[
"Anwesenheit der Familienmitglieder:",
     "{return('Felix: '.fhem(ReadingsVal('FelixGtag','presence','')))}",
         "{return('Katharina: '.fhem(ReadingsVal('KatharinaGtag','presence','')))}",
         "{return('Martina: '.fhem(ReadingsVal('MartinaGtag','presence','')))}",
         "{return('Rolf: '.fhem(ReadingsVal('RolfGtag','presence','')))}",
"(beenden) ",
"(zurück:Start) "
      ]

   }
}


Wobei das beenden und zurück:Start mir nicht als anklickbare Tastatur angezeigt wird. Wie bei anderen Dialogen. Liegt vielleicht daran, dass dort noch Fehlermeldungen vorkommen.

Hier die Nachricht, wie sie in Telegram ankommt:

Anwesenheit der Familienmitglieder:
Felix: Unknown command absent, try help.
Katharina: Unknown command absent, try help.
Martina: Unknown command present, try help.
Rolf: Unknown command present, try help.
(beenden)
(zurück:Start)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 25 Mai 2018, 14:37:20
Das fhem() kannst du entfernen. Siehe mein post oben.
Was passiert denn wenn du direkt als message ,,Felix: absent" ausgibst?
Und wenn es dann immer noch nicht geht wäre ein log mit verbose=3 hilfreich. Auf welchen devices (dialog und/oder globalmsg) weiss ich auch nicht. Musst du probieren.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 25 Mai 2018, 16:09:16
Warum nicht einfach

{
   "Anwesenheit":{
     "message":[
       "Anwesenheit der Familienmitglieder:",
       "Felix: [FelixGtag:presence]",
       "Katharina: [KatharinaGtag:presence]",
       "Martina: [MartinaGtag:presence]",
       "Rolf: [RolfGtag:presence]",
       "(beenden) ",
       "(zurück:Start) "
     ]
  }
}

?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Fixel2012 am 28 Mai 2018, 09:38:08
Das hat Funktioniert! Kenne die Angaben in den eckigen Klammern nur von dem DOIF Modul. Das ist doch eigentlich nicht Perl oder fhem Syntax, oder irre ich mich?

Nun nur noch die Frage, warum das eigentlich klickbare "beenden" in Telegram nur als Text erscheint.


Hier nochmal der gesamte code:


{
   "Anwesenheit":{
     "message":[
       "Anwesenheit der Familienmitglieder:",
       "Felix: [FelixGtag:presence]",
       "Katharina: [KatharinaGtag:presence]",
       "Martina: [MartinaGtag:presence]",
       "Rolf: [RolfGtag:presence]",
       "(beenden) "
     ]
  }
}


Danke!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 28 Mai 2018, 17:45:13
Zitat von: Fixel2012 am 28 Mai 2018, 09:38:08
Das hat Funktioniert! Kenne die Angaben in den eckigen Klammern nur von dem DOIF Modul. Das ist doch eigentlich nicht Perl oder fhem Syntax, oder irre ich mich?
Es ist FHEM Syntax. Siehe commandref zu set (http://commandref.fhem.de/commandref_DE.html#set)
Zitat

Ab featurelevel 5.7 ersetzt das set und setreading Befehl

    [device:name] mit dem Wert des Readings, Internals oder Attributes für device, falls sowohl device, als auch Reading, Internal oder Attribut existiert, und nicht leer ist.
        Man kann einen der Präfixe r:, i: oder a: verwenden, um die Suche einzuschränken, genau wie im devspec.
        Das Suffix :d extrahiert die erste Zahl.
        Das Suffix :i extrahiert die erste Zahl als Ganzzahl.
        Das Suffix :r<n> extrahiert die erste Zahl, und rundet sie auf <n> Dezimalstellen. Falls <n> fehlt, dann wird auf eine Dezimalstelle gerundet.
        Das Suffix :t liefert den Zeitstempel des Readings
        Das Suffix :sec liefert Anzahl der Sekunden seit Änderung des Readings.
    Beispiel:
        set Lamp blink [blinkDummy:number] [r:blinkDummy:duration:d]
    {(perlExpression)} mit dem Ergebnis der perlExpression. $DEV wird dabei mit dem Namen des vom set betroffenen Gerätes ersetzt.

Diese Ersetzungen sind unter dem Namen "set magic" bekannt.

Zitat von: Fixel2012 am 28 Mai 2018, 09:38:08
Nun nur noch die Frage, warum das eigentlich klickbare "beenden" in Telegram nur als Text erscheint.
Vor dem "beenden" steht kein Leerzeichen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: FHEm2005 am 31 Mai 2018, 19:28:34
msgDialog ist eine klasse Methode Fhem übersichtlich und auch für Nichttechniker verständlich zu gestalten. Einfach gut und Hut ab.

Grundsätzlich gestaltet sich ein ausgewählter Befehl klar nach dem Muster : TRIGGER => COMMAND => MESSSAGE. Dabei wird die gesendete Nachricht als Quittung gewertet bzw. genutzt. Ob das System den Befehl wirklich umgesetzt hat ist nicht sicher.

Bei bedingten Nachrichten wird durch die Verwendung von Readingsabfragen der wirkliche Zustand genutzt. Also habe ich versucht die Nachricht "Das Deckenlicht ist eingeschaltet" durch folgenden Konstrukt zu ersetzen:
"Deckenlicht ein": {
"commands": "set Li_Sz_Decke on","message":[
                                "{return('(Das Deckenlicht wurde eingeschaltet) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') eq 'on')}",
                                "{return('(Ups, da ist was schiefgelaufen!) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') ne 'on')}",
                                "okay?"
                                ]
},

Hierbei wird  Command zwar abgearbeitet, aber die gewünschte Rückmeldung bleibt aus. Mit der Abfrage auf set_on habe ich ERfolg.
Hier der relevante Teil als Code:
"Schlafzimmer": {
"commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/((.+)\\|.+$)/;; return($2 || $1);;)}",
"message": [
"{return('(Deckenlicht ein) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') ne 'on')}",
"{return('(Deckenlicht aus) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') ne 'off')}",
"{return('(Nachttischlampen ein) ') if(ReadingsVal('Li_Sz_HUEGroup3', 'any_on', '') ne '1')}",
"{return('(Nachttischlampen aus) ') if(ReadingsVal('Li_Sz_HUEGroup3', 'any_on', '') ne '0')}",
"{return('(linke NTL ein) ') if(ReadingsVal('Li_Sz_HUEDevice21', 'onoff', '') ne '1')}",
"{return('(linke NTL aus) ') if(ReadingsVal('Li_Sz_HUEDevice21', 'onoff', '') eq '1')}",
"{return('(rechte NTL ein) ') if(ReadingsVal('Li_Sz_HUEDevice12', 'onoff', '') ne '1')}",
"{return('(rechte NTL aus) ') if(ReadingsVal('Li_Sz_HUEDevice12', 'onoff', '') eq '1')}",
                        "(zurück) ",
"Bitte wählen:"
],
"Deckenlicht ein": {
"commands": "set Li_Sz_Decke on",
                        "message":[
                                "{return('(Das Deckenlicht wurde eingeschaltet) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') eq 'set_on')}",
                                "{return('(Ups, da ist was schiefgelaufen!) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') ne 'set_on')}",
                                "okay?"
                                ]
},


Der Zustand, auf den aufgeprüft wird, soll "on" sein. Da fhem so schnell ist, befindet sich der Homaticschalter noch im Zustand "set_on", der aber einen Zwischenzustand darstellt. Erst der Zustand "on" ist endgültig. Ich müsste mit der Abfrage ca 1 Sekunde warten, dann dürfte der Befehl zu 95% abgearbeitet sein (hängt von der Auslastung der Funkschnittstelle ab).
Welche Lösungsmöglichkeit gibt es?

Viele Grüße
Eberhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: FHEm2005 am 01 Juni 2018, 09:54:40
Ich habe den Dialog noch einmal verändert und in den Commands eine Wartezeit mit sleep 1  sowie anschließendem erneuten Aufruf des Gesamtschlafzimmers eingefügt.
"Deckenlicht ein": {
"commands": [
                        "set Li_Sz_Decke on",
                        "sleep 1",
                        "set $SELF say @$recipient Schlafzimmer"
                        ],
"message": "Das Deckenlicht wurde eingeschaltet."

},


Ich hatte die Hoffnung, dass beim Aufruf von set $SELF... der Zustand bereits stabil wäre, ist er leider nicht,  da die beiden Zeilen
"{return('(Deckenlicht ein) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') ne 'on')}",
"{return('(Deckenlicht aus) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') ne 'off')}",

zu einer Anzeige führen.  Also sind sie weder on noch off. Wieso? Nach einer Sekunde müsste der Zustand "on" doch erreicht sein, oder?

Zitat aus der CommandRef für sleep:
ZitatBemerkung: falls sleep von keinem Befehl gefolgt wird, dann wird FHEM blockiert. Das ist unerwünscht, und im FHEM-Log wird eine Warnung protokolliert.
Kann es sein, dass fhem den nachfolgenden Befehl set $SELF say ...   nicht als solchen erkennt und blockiert? Ein Blick ins Logbuch zeigt es:
2018.06.01 09:51:58 1 : WARNING: sleep without additional commands is deprecated and blocks FHEM
Was nun?
Bin ich der Einzige, der das Problem mit den HM Tastern/Schaltern hat? Ich werde heute Nachmittag das Thema mit HUE testen.

Viele Grüße
Eberhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 01 Juni 2018, 10:53:16
ZitatAlso sind sie weder on noch off. Wieso? Nach einer Sekunde müsste der Zustand "on" doch erreicht sein, oder?
Hallo Eberhard,
die Prüfung zum Einschalten
if(ReadingsVal('Li_Sz_Decke', 'state', '') ne 'on')
liefert auch ja zurück, wenn state = "dim irgendwas" steht, also die Lampe bereits eingeschaltet ist. Vorausgesetzt es ist eine HUE oder so wovon ich mal ausgehe.
Probier mal:
if(ReadingsVal('Li_Sz_Decke', 'state', '') eq 'off')
Hier mal mein Beleuchtungs-Dialog als RAW. Vielleicht kannst Du ja was adaptieren...
defmod Beleuchtung_Dialog msgDialog {"01.💡Beleuchtung":{\
  "message": [\
    "(💡Szenen: [Standard.LS:state]:💡Szenen) ",\
    "(💡Lampen einschalten) ",\
"(💡Lampen ausschalten) ",\
"(💡Flur dimmen) ",\
"(💡Wohnzimmer dimmen) ",\
    "(zurück:%me%) ", \
"Möchtest Du Szenen einstellen oder Lampen schalten?"\
  ],\
  "💡Szenen":{\
    "message":[\
      "{return('(💡abwesend einschalten) ') if(ReadingsVal('Standard.LS','state','') ne 'abwesend')}",\
  "{return('(💡anwesend einschalten) ') if(ReadingsVal('Standard.LS', 'state','') ne 'anwesend')}",\
  "{return('(💡anwesend_alle einschalten) ') if(ReadingsVal('Standard.LS', 'state','') ne 'anwesend_alle')}",\
  "{return('(💡anwesend_alle_farbe einschalten) ') if(ReadingsVal('Standard.LS','state','') ne 'anwesend_alle_farbe')}",\
  "{return('(💡schlafen einschalten) ') if(ReadingsVal('Standard.LS','state','') ne 'schlafen')}",\
  "{return('(💡kino einschalten) ') if(ReadingsVal('Standard.LS','state','') ne 'kino')}",\
  "{return('(💡panik einschalten) ') if(ReadingsVal('Standard.LS','state','') ne 'panik')}",\
  "(abbrechen|zurück) ",\
  "Welche Szene soll ich aktivieren?"\
    ],\
"💡abwesend einschalten":{\
    "commands": [\
"set Standard.LS scene abwesend",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
    ]\
    },\
    "💡anwesend einschalten":{\
    "commands": [\
"set Standard.LS scene anwesend",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
    ]\
    },\
    "💡anwesend_alle einschalten":{\
    "commands": [\
"set Standard.LS scene anwesend_alle",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
    ]\
    },\
    "💡anwesend_alle_farbe einschalten":{\
    "commands": [\
"set Standard.LS scene anwesend_alle_farbe",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
    ]\
    },\
    "💡schlafen einschalten":{\
    "commands": [\
"set Standard.LS scene schalfen",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
    ]\
    },\
"💡panik einschalten":{\
    "commands": [\
"set Standard.LS scene panik",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
    ]\
    },\
    "💡kino einschalten":{\
    "commands": [\
"set Standard.LS scene kino",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
    ]\
    }\
    },\
    "💡Lampen einschalten":{\
    "message":[\
      "{return('(💡Flur einschalten: [fl_tischlampe_licht:state]:Flur einschalten) ') if(ReadingsVal('fl_tischlampe_licht', 'state', '') eq 'off')}",\
  "{return('(💡Küche: [SteckdoseIT2:state]:Küche einschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') eq 'off')}",\
  "{return('(💡Schlafzimmer: [sz_bett_licht:state]:Schlafzimmer einschalten) ') if(ReadingsVal('sz_bett_licht', 'state', '') eq 'off')}",\
  "{return('(💡Büro: [SteckdoseIT6:state]:Büro einschalten) ') if(ReadingsVal('SteckdoseIT6', 'state', '') eq 'off')}",\
  "{return('(💡Kugel: [wz_kugel_licht:state]:Kugel einschalten) ') if(ReadingsVal('wz_kugel_licht', 'state', '') eq 'off')}",\
  "{return('(💡Linker Spot: [wz_treppe_licht:state]:Linker Spot einschalten) ') if(ReadingsVal('wz_treppe_licht', 'state', '') eq 'off')}",\
  "{return('(💡Rechter Spot: [wz_strasse_licht:state]:Rechter Spot einschalten) ') if(ReadingsVal('wz_strasse_licht', 'state', '') eq 'off')}",\
  "{return('(💡Stehlampe: [wz_stehlampe_licht:state]:Stehlampe einschalten) ') if(ReadingsVal('wz_stehlampe_licht', 'state', '') eq 'off')}",\
  "(abbrechen|zurück) ",\
  "Welche Lampe soll ich einschalten?"\
    ],\
    "Stehlampe einschalten":{\
    "commands": [\
"set wz_stehlampe_licht on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    },\
"Linker Spot einschalten":{\
    "commands": [\
"set wz_treppe_licht on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    },\
"Rechter Spot einschalten":{\
    "commands": [\
"set wz_strasse_licht on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    },\
"Kugel einschalten":{\
    "commands": [\
"set wz_kugel_licht on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    },\
"Flur einschalten":{\
    "commands": [\
"set fl_tischlampe_licht on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    },\
    "Küche einschalten":{\
    "commands": [\
"set SteckdoseIT2 on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    },\
"Büro einschalten":{\
    "commands": [\
"set SteckdoseIT6 on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    },\
    "Schlafzimmer einschalten":{\
    "commands": [\
"set sz_bett_licht on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    }\
    },\
"💡Flur dimmen":{\
    "message":[\
      "(abbrechen|zurück) ",\
      "(5%:5|10%:10|20%:20|25%:25) ",\
      "(30%:30|40%:40|50%:50|60%:60) ",\
  "(70%:70|80%:80|90%:90|100%:100) ",\
      "Aktuell sind [fl_tischlampe_licht:pct]% eingestellt. Auf welchen Wert soll ich dimmen?"\
],\
"dimmen_Flur":{\
      "match": "?([1-9][0]|[1][0][0]) ?",\
      "commands": [\
  "{my $dimm = '$message';;;; fhem(\"set fl_tischlampe_licht pct $dimm 3\");;;;}",\
  "set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    }\
},\
"💡Wohnzimmer dimmen":{\
    "message":[\
      "(abbrechen|zurück) ",\
      "(5%:5|10%:10|20%:20|25%:25) ",\
      "(30%:30|40%:40|50%:50|60%:60) ",\
  "(70%:70|80%:80|90%:90|100%:100) ",\
      "Aktuell sind [wz_stehlampe_licht:pct]% eingestellt. Auf welchen Wert soll ich dimmen?"\
],\
"dimmen_WZ":{\
      "match": "?([1-9][0]|[1][0][0]) ?",\
      "commands": [\
  "{my $dimm = '$message';;;; fhem(\"set wz_.*_licht pct $dimm 3\");;;;}",\
  "set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    }\
},\
"💡Lampen ausschalten":{\
    "message":[\
      "{return('(💡Flur: [fl_tischlampe_licht:pct]:Flur ausschalten) ') if(ReadingsVal('fl_tischlampe_licht', 'state', '') ne 'off')}",\
  "{return('(💡Küche: [SteckdoseIT2:state]:Küche ausschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') ne 'off')}",\
  "{return('(💡Schlafzimmer: [sz_bett_licht:pct]:Schlafzimmer ausschalten) ') if(ReadingsVal('sz_bett_licht', 'state', '') ne 'off')}",\
  "{return('(💡Büro: [SteckdoseIT6:state]:Büro ausschalten) ') if(ReadingsVal('SteckdoseIT6', 'state', '') ne 'off')}",\
  "{return('(💡Kugel: [wz_kugel_licht:pct]:Kugel ausschalten) ') if(ReadingsVal('wz_kugel_licht', 'state', '') ne 'off')}",\
  "{return('(💡Linker Spot: [wz_treppe_licht:pct]:Linker Spot ausschalten) ') if(ReadingsVal('wz_treppe_licht', 'state', '') ne 'off')}",\
  "{return('(💡Rechter Spot: [wz_strasse_licht:pct]:Rechter Spot ausschalten) ') if(ReadingsVal('wz_strasse_licht', 'state', '') ne 'off')}",\
  "{return('(💡Stehlampe: [wz_stehlampe_licht:pct]:Stehlampe ausschalten) ') if(ReadingsVal('wz_stehlampe_licht', 'state', '') ne 'off')}",\
  "(abbrechen|zurück) ",\
  "Welche Lampe soll ich ausschalten?"\
    ],\
    "Stehlampe ausschalten":{\
    "commands": [\
"set wz_stehlampe_licht off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    },\
"Linker Spot ausschalten":{\
    "commands": [\
"set wz_treppe_licht off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    },\
"Rechter Spot ausschalten":{\
    "commands": [\
"set wz_strasse_licht off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    },\
"Kugel ausschalten":{\
    "commands": [\
"set wz_kugel_licht off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    },\
"Flur ausschalten":{\
    "commands": [\
"set fl_sw_1 off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    },\
    "Küche ausschalten":{\
    "commands": [\
"set SteckdoseIT2 off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    },\
"Büro ausschalten":{\
    "commands": [\
"set SteckdoseIT6 off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    },\
    "Schlafzimmer ausschalten":{\
    "commands": [\
"set sz_bett_licht off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
    }\
  }\
}\
}\
\
\

attr Beleuchtung_Dialog allowed rr_Sebastian,1
attr Beleuchtung_Dialog disable 0
attr Beleuchtung_Dialog group Dialog
attr Beleuchtung_Dialog icon dialog@green
attr Beleuchtung_Dialog room 91_Webdevices
attr Beleuchtung_Dialog verbose 0


VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: FHEm2005 am 01 Juni 2018, 11:52:44
Hallo Sebastian,
ich habe inzwischen weitergeforscht und eine Lösung gefunden: einfach zwei Befehle in eine Zeile, nämlich so:
"sleep 1;set $SELF say @$recipient Schlafzimmer"
Das führt bei mir zu klaren wechselnden Anzeigen beim ernuten Aufruf des Dialoges. Normalerweise dürfen keine zwei Befehle in eine Zeile, aber diesen hier erkennt er wohl nicht richtig und arbeitet beide ab. Im Log erkenne ich den sleep 1 leider nicht, trotz verbose 5.
Hier mal für zwei Trigger meinen momentanen Code:
"Deckenlicht ein": {
   "commands": [
       "set Li_Sz_Decke on",
       "sleep 1;set $SELF say @$recipient Schlafzimmer"
     ],
   "message": "Das Deckenlicht wurde eingeschaltet."
},

"Deckenlicht aus": {
   "commands": [
        "set Li_Sz_Decke off",
         "sleep 1;set $SELF say @$recipient Schlafzimmer"
         ],
    "message": "Das Deckenlicht wurde ausgeschaltet."
},


ZitatVorausgesetzt es ist eine HUE oder so wovon ich mal ausgehe.
Das ist es ja, kein HUE sondern ein Homematicdeckenlampenschalter  ;).

Deinen Dialog schaue ich mir im Laufe des Tages mal genau an, ob ich was gebrauchen kann. Danke dafür.
ZitatVielleicht kannst Du ja was adaptieren...
Würde ich gerne, deshalb dieFrage: Wie bekommst Du die Icons dort hinein? Den Code davor schreiben reicht wohl nicht, da stehen dann Hex-Zahlen vor der Nachricht. Das ist dann nix für den WAF.

Viele Grüße
Eberhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 01 Juni 2018, 13:12:22
ZitatDas ist es ja, kein HUE sondern ein Homematicdeckenlampenschalter  ;).
Ja OK dann habe ich nicht gesagt...  ;D
ZitatWie bekommst Du die Icons dort hinein?
Einfach per copy&paste im RAW einfügen. Eine Liste der Emojis findest du hier:
https://apps.timwhitlock.info/emoji/tables/unicode (https://apps.timwhitlock.info/emoji/tables/unicode)
Ich habe mir aber auch schon welche per Telegram geschickt. Dann stehen sie direkt im Reading msgText vom TelegramBot device.
Hier im Forum im Editor kommt bei der Vorschau eine Fehlermeldung. Einfach ignorieren  ;)
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: FHEm2005 am 03 Juni 2018, 18:57:36
Ich arbeite gerade an einer Umschaltung für Sommer- bzw. Winterbetrieb der Heizung. Normalerweise relativ einfach, aber (wie immer) bei mir läuft irgend etwas schief. Zuerst soll in den manuellen mode mit: "set Th_.*_Climate controlMode manual" umgeschaltet werden. Danach soll in allen Thermostaten die Temperatur auf 5 °C gesetzt werden. Aber ein Schritt nach dem anderen.  Bereits das Umschalten des ControlModes auf manuell bereitet Probleme dahingehend, dass keinerlei Reaktion geschieht. Unter Verbose 5 zwar  einzelne Meldungen aber keine Fehler uns kein Umschalten in den Thermostaten.

Hier die gesamte Raw-Definition:
Heftig: Wenn ich die Raw-Definition einfüge kommt oben ein Hinweis:
Zitat
Fehler beim Schreiben des Beitrages.
Textfeld wurde nicht ausgefüllt.

Offensichtlich kommt der Forumsserver nicht mit den geschweiften Klammern klar, deshalb als Auszug:
    "Sommerbetrieb": {
                        "match" : "(☀️ Sommerbetrieb|Sommerbetrieb)",
                        "commands": "set Th_.*_Climate controlMode manual",     
                        "message" : "Sommerbetrieb ist jetzt eingeschaltet."
                 }
}

Im Einsatz sind fünf HM-Thermostaten.
Was ist falsch bzw. was habe ich übersehen?

Gruß Eberhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: FHEm2005 am 03 Juni 2018, 22:26:06
Ich lese mir gerade zum gefühlten tausendsten Male die CommansRef für msgDialog durch und speziell den Absatz zu set only.
ZitatWenn setOnly auf true gestellt wird kann der Dialog an dieser Stelle nicht durch eingehnde Nachrichten ausgelöst werden, sondern nur über "get <name> say TRIGGER".

Das habe ich versucht und bin kläglich gescheitert! Bis ich dahintergekommen bin, dass es sich hier um einen Schreibfehler handelt. Erst bei "set <name> say TRIGGER" wird der Dialog <TRIGGER> angestoßen!

Viele Grüße
Eberhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 04 Juni 2018, 05:32:15
Zitat von: FHEm2005 am 03 Juni 2018, 18:57:36
Was ist falsch bzw. was habe ich übersehen?
Funktioniert denn

set Th_.*_Climate controlMode manual

wenn du es direkt in der Kommandozeile eingibst?

Zitat von: FHEm2005 am 03 Juni 2018, 22:26:06
Ich lese mir gerade zum gefühlten tausendsten Male die CommansRef für msgDialog durch und speziell den Absatz zu set only.
Das habe ich versucht und bin kläglich gescheitert! Bis ich dahintergekommen bin, dass es sich hier um einen Schreibfehler handelt. Erst bei "set <name> say TRIGGER" wird der Dialog <TRIGGER> angestoßen!
Vielen Dank, habe ich korrigiert.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: FHEm2005 am 04 Juni 2018, 05:47:09
Zitat von: igami am 04 Juni 2018, 05:32:15
Funktioniert denn

set Th_.*_Climate controlMode manual

wenn du es direkt in der Kommandozeile eingibst?
Das ist es ja: von der Kommandozeile aus funktioniert es.

Gruß Eberhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: FHEm2005 am 05 Juni 2018, 08:47:19
Ich mache wohl jeden Fehler, der irgendwie machbar ist.  :(

Ich habe den Heizungsdialog in mehreren Ebenen aufgebaut. Den Dialog für Sommerbetrieb hatte ich fälschlicherweise in die falsche Ebene gepackt. (Vereinfachte Darstellung)


%me%: match:
             message:
             Raum: match:
                        commands:
                        message:
                        Sommerbetrieb:
                              match:
                              commands:
                              massage:


So ist der "Sommerbetrieb" ein Teil von Raum. Richtig ist ihn eine Ebenen höher zu schieben:


%me%: match:
             message:
             Raum: match:
                        commands:
                        message:
             Sommerbetrieb:
                         match:
                         commands:
                         massage:

Sinnvoll ist es die beabsichtigte Hierarchie eines Dialoges vorher mal zu skizzieren. Lesson learned!

Viele Grüße
Eberhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Quantum am 05 Juni 2018, 11:01:07
Hallo igami,

vielen Dank für das überaus geniale Modul!

Ich hätte eine Anregung, die ich zur Diskussion stellen möchte. Wenn ich das richtig verstanden habe, versendet msgDialog die Nachrichten über "msg push ...". Wäre hier "msg text ..." nicht flexibler? So könnte man die Nachrichten, die über "set <NAME> say" oder den gesamten Dialog nicht nur über einen Messenger, sonderen gleichzeitig auch noch per EMail versenden, ohne dafür einen weiteren Benutzer anlegen zu müssen. So könnte nach meinem Verständnis auch relativ einfach zweigleißig gefahren werden.  Hier ein Zitat aus dem Wiki:

Zitat
text

Sendet eine Textnachricht per Push oder E-Mail. Je nach Priorität wird gepusht, gemailt oder beides. E-Mails werden mit der entsprechenden Priorität im Header markiert (dafür sind bei High und Low Prio HTML Mails zwingend erforderlich. Normale Mails werden als Nur-Text gesendet).

Die Befehle, wie gepusht oder gemailt werden soll, können über Attribute am Device "globalMsg" für die Prioritäts-Kategorien "High", "Normal" und "Low" angepasst werden. Standardmäßig wird für Push das Pushover Modul sowie für E-Mail system() per /usr/bin/mail verwendet.

Die Sub-Typen "mail" und "push" können auch explizit für sich aufgerufen werden.

Freundliche Grüße
Quantum

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 05 Juni 2018, 21:42:17
Zitat von: FHEm2005 am 05 Juni 2018, 08:47:19
Lesson learned!
Freut mich, dass es nun funktioniert :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 05 Juni 2018, 21:42:23
Zitat von: Quantum am 05 Juni 2018, 11:01:07
Ich hätte eine Anregung, die ich zur Diskussion stellen möchte. Wenn ich das richtig verstanden habe, versendet msgDialog die Nachrichten über "msg push ...". Wäre hier "msg text ..." nicht flexibler? So könnte man die Nachrichten, die über "set <NAME> say" oder den gesamten Dialog nicht nur über einen Messenger, sonderen gleichzeitig auch noch per EMail versenden, ohne dafür einen weiteren Benutzer anlegen zu müssen. So könnte nach meinem Verständnis auch relativ einfach zweigleißig gefahren werden.
Darauf möchte ich mit einem Zitat aus der Commandref antworten:
Zitat
Attribute
[...]
msgCommand <command>
Befehl der zum Versenden einer Nachricht verwendet wird.
Die Vorgabe ist "msg push \@$recipients $message"
Dieses Attribut ist als "msgDialog_msgCommand" im msgConfig Gerät vorhanden.
Ist also alles schon vorbereitet ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: 1of16 am 10 Juni 2018, 21:38:36
Zitat von: igami am 21 November 2017, 21:26:15
Okay, ist fhemMsgRcvPush. Hast du Einschränkungen durch event-on- Attribute?
verdammte axt!
ich sitze hier seit zwei Stunden und kämpfe mich nebenbei durch den Thread, da ich mir sicher war, dass ich irgendeinen dummen Fehler mache
und auf Seite 16 finde ich die Lösung: auch ich hatte beim ROOMMATE (aus dubiosen historischen Gründen) noch ein even-on- Attribut drin.
DANKE!
Vielleicht auch ein Thema für "Fehlersuche" Bereich im Wiki :)

So, jetzt kann ich mich endlich richtig mit deinem grandios klingenden Modul auseinander setzen :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: 1of16 am 11 Juni 2018, 11:25:36
Zitat von: igami am 06 März 2018, 18:06:32
Auf Wunsch hier noch der Einkaufslisten Dialog:

defmod Einkaufsliste_Dialog msgDialog { \
  "Einkaufsliste": {\
    "message": [\
      "(Waren hinzufügen) ", \
      "(Waren entfernen) ", \
      "(einkaufen) ", \
      "(abbrechen) ",\
      "{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
    ],\
    "Waren hinzufügen": {\
      "message": [\
        "Bitte jede Ware als neue Nachricht hinzufügen.",\
        "Das hinzufügen von Waren durch \"/beenden\" beenden."\
      ],\
      "Ware hinzufügen": {\
        "match": "[^/]+",\
        "commands": [\
          "set %PostMe% add %list% $message",\
          "setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen"\
        ]\
      }\
    },\
    "Waren entfernen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'beenden'). ') ')}",\
        "Welche Ware möchtest du entfernen?"\
      ],\
      "Ware entfernen": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|Waren entfernen"\
        ]\
      }\
    },\
    "einkaufen": {\
      "commands": [\
        "setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"\
      ],\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(beenden) ",\
        "Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
      ]\
    },\
    "noch einzukaufen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(beenden) ",\
        "Noch einzukaufen:"\
      ],\
      "Ware eingekauft": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|noch einzukaufen"\
        ]\
      }\
    }    \
  }\
}

attr Einkaufsliste_Dialog evalSpecials PostMe=PostMe\
list=Einkaufsliste

hi,
ich habe das bei mir übernommen, nur der Name ist anders (Einkaufsliste_Dialog vs. md_einkauf).
Sobold ich den den Dialog starte kommt folgendes im Log als Fehler:
3: get PostMe list Einkaufsliste : Please define PostMe first
Und ja, das attr evalSpecials  ist gesetzt, auch mit Zeilenumbruch (also im Raw mit einem \ ).
Ich bin verwirrt.

Grüße
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ToM_ToM am 11 Juni 2018, 11:51:18
Hast du denn ein Device mit dem Namen "PostMe"?
Wahrscheinlich vom gleichnamigen Typ:
https://fhem.de/commandref.html#PostMe (https://fhem.de/commandref.html#PostMe)

VG, Thomas
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: 1of16 am 11 Juni 2018, 12:56:37
Zitat von: ToM_ToM am 11 Juni 2018, 11:51:18
Hast du denn ein Device mit dem Namen "PostMe"?
Wahrscheinlich vom gleichnamigen Typ:
https://fhem.de/commandref.html#PostMe (https://fhem.de/commandref.html#PostMe)

VG, Thomas
oh man....ja, das ist es.
erst
define PostMe PostMe
Und dann noch
set create Einkaufsliste
Jetzt funktioniert es.

Danke dir!
....so schnellt der WAF in die Höhe ;)

Grüße

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Rainerlan_2 am 30 Juni 2018, 02:26:32
Hallo,

ich finde das Modul wirklich toll.
Nur leider bekomme ich 2 Dinge überhaupt nicht zum laufen - und habe auf Eure Hilfe gehofft:)

1) (zurück) funktioniert bei mir nicht. (Abbrechen) und (beenden) aber schon.
Habe in diesem Thread das Problem schon ein paarmal gesehen, aber keine für mich passende Antwort gefunden.
Mir scheint ich habe irgendwas noch falsch konfiguriert - In ROOMATE, msgConfig, msgDialog - ich weiß es nicht.

Ein Indiz ist vielleicht, dass das Reading <MeinName>_history im meta_Dialog immer "leer" angelegt wird (nach dem beenden des eigentlichen Dialogs wieder korrekt gelöscht). Die History steht stattdessen im Reading <MeinName>_history in dem Dialog, aus dem ich zum Beispiel in den meta_Dialog zurück möchte. Woher bekommt der meta_dialog das (history) reading - damit der korrekte TRIGGER aufgerufen werden kann?

2) Wenn ich (ohne das Inline-Keyboard konfiguriert zu haben) nach Abbruch des "meta-Dialog"s auf den Inline-Key des "%me%" readings drücke, kommt der Fehler "UNAUTHORIZED: TelegramBot FHEM request from user : <MeinName> (<MeineTelegramID>) Msg: Callback for inline query id: <ID> from :<MeineTelegramID>: data: <MeinName>".

Ich bin für jede Hilfe dankbar!
Viele Grüße
Rainer
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Rainerlan_2 am 09 Juli 2018, 23:16:25
Naja, wenn sich keiner erbarmt - hab ich mich selber mühsam auf Fehlersuche begeben.

Lösung für das 1. Problem - "Zurück" (wie im meta_Dialog definiert) funktioniert nicht:
Lösung: Wenn in einem Trigger keine weiteren Sub-trigger definiert sind, bleibt das Reading $User_history (im entsprechenden msgDialog) <void>.
Imho ein Bug. Kann man auf 2 Arten lösen:
a) Ein "Dummy-sub-trigger" unterhalb des Triggers, der sonst keine unter-Trigger hätte - definiert mit einer leeren message: [].
b) Über ein command "set $SELF say <übergeordneterTrigger>" einfach selbst eine Ebene hochspringen. Dann braucht man auch das "zurück" im meta_Dialog nicht (und das $User_history reading kann dann leer bleiben)

Für das 2. Problem - Inline-keyboard-Fehler:
a) Im TelegramBot device das Default-peer reading löschen (sonst gehts daneben mit der Fehlermeldung aus vorigem Post)
b) die erlaubten Peers im Reading cmdRestrictedPeer auf jeden Fall durch ein <blank> trennen.
(Ich hatte ein Komma verwendet, mit dem Effekt, dass das inline-Keyboard trotz gelöschtem Default-peer keine Reaktion zeigte)
Wär' vielleicht ein Hinweis im Wiki wert. Für dummies wie mich.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Benbaeck am 22 Juli 2018, 15:06:01
Hi,
versuche gerade verzweifelt mir ein Bild der Webcam aus einem Dialog heraus zusenden zu lassen.
Habe es erst so versucht.
"get Kamera image;sleep 2;set Telegram sendImage ./www/snapshots/Kamera_snapshot.jpg"
Bild wird auch aufgenommen und versendet, allerdings egal welcher Peer dieses Bild anfordert es landet immer bei mir.
Ist ja eigetlich auch klar, da meine ID als defaultPeer im Telegram Device eingetragen ist.
Dann habe ich folgendes Versucht, jedem Roommate ein userReading mit der Telegram ID verpasst und den Dialog folgendermaßen angepasst.
"get Kamera image;sleep 2;set Telegram sendImage @[$recipient:TelegramID] ./www/snapshots/Kamera_snapshot.jpg"
Funktioniert eigentlich auch soweit, bin aber irgendwie nicht so 100% damit zufrieden.
Hat von euch jemand so etwas in der Art auch schon gebastelt oder hat eine gute Idee wie ich das vernünftig umsetzten könnte?
Titel: msgConfig myMsgConfig ERROR
Beitrag von: FHEM-User22 am 25 Juli 2018, 09:17:32
Hallo,
ich suche schon tagelang nach dem Fehler.   
Mein Bot läuft, und ich kann Nachrichten zum Telefon schicken und auch die Nachrichten vom Telefon werden im FHEM angezeigt.

Nun möchte ich mit myMsgConfig ein Menü erstellen.

Im EventMonitor kommt immer, wenn ich was an den FHEM sende folgende Nachricht:

msgConfig myMsgConfig ERROR RCV (NamemeinesBot) (hier meine msgPeerId): Missing reference in msgContact attribute of any device

Kann mir bitte jemand helfen, an welcher Schraube ich drehen muß? Ich habe alles, was ich gefunden habe schon probiert.

Dankeschön

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 27 Juli 2018, 23:24:20
Es handelt sich um eine Fehlermeldung aus dem msgConfig Modul, die da besagt, dass die Nachricht nicht zugeordnet werden kann. Du brauchst für jeden Benutzer ein ROOMMATE in dem die Kontaktinformationen hinterlegt sind.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 09 August 2018, 11:13:00
Hallo Zusammen,
mein Dialoge antworten nicht mehr  :-[
Also im erstenj Moment der meta_Dialog zum Anzeigen aller verfügbaren Dialoge.
Ich habe mir schon einen Wolf gesucht aber leider nichts finden können. TelegramBot arbeitet ohne Probleme.
Hier mal ein paar Listings - vielleicht seht ihr ja wo der Fehler liegt...

TelegramBot:
list fhemBot

Internals:
   FAILS      0
   NAME       fhemBot
   NR         54
   OLD_POLLING 126
   POLLING    126
   SNAME      fhemBot
   STATE      Polling
   TYPE       TelegramBot
   UPDATER    0
   WAIT       0
   me         123456789:FHEM:@usernamebot
   offset_id  124465321
   sentLastResult SUCCESS
   sentMsgId  24078
   sentMsgOptions
   sentMsgPeer Sebastian_nachname
   sentMsgPeerId 123456789
   sentMsgResult SUCCESS
   sentMsgText Favoriten beendet
   Contacts:
     123456789  123456789:Sebastian_nachname:@username
   HU_DO_PARAMS:
     NAME       
     addr       https://api.telegram.org:443
     auth       0
     boundary   TelegramBot_boundary-x0123
     buf       
     code       200
     compress   1
     conn       
     data       
     displayurl <hidden>
     header     agent: TelegramBot/1.0
User-Agent: TelegramBot/1.0
Accept: application/json
Accept-Charset: utf-8
Content-Type: multipart/form-data; boundary=TelegramBot_boundary-x0123
     hideurl    1
     host       api.telegram.org
     httpheader HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Thu, 09 Aug 2018 08:19:23 GMT
Content-Type: application/json
Content-Length: 307
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection
Strict-Transport-Security: max-age=31536000; includeSubdomains
     hu_blocking 0
     hu_filecount 51
     hu_port    443
     hu_portSfx
     loglevel   4
     method     POST
     path       /bot123456789:AAFJlxVxmjbrAZH0ZzWDcvkxd2YPm6xqtlg/editMessageText
     protocol   https
     redirects  0
     timeout    30
     url        https://api.telegram.org/bot123456789:AAFJlxVxmjbrAZH0ZzWDcvkxd2YPm6xqtlg/editMessageText
     args:
       123456789
       Favoriten beendet
       undef
       10
       24078
       undef
       1
     hash:
     sslargs:
   HU_UPD_PARAMS:
     FD         5
     NAME       
     addr       https://api.telegram.org:443
     auth       0
     buf       
     code       200
     compress   1
     displayurl <hidden>
     header     agent: TelegramBot/1.0
User-Agent: TelegramBot/1.0
Accept: application/json
Accept-Charset: utf-8
     hideurl    1
     host       api.telegram.org
     hu_blocking 0
     hu_filecount 1910
     hu_port    443
     hu_portSfx
     isPolling  update
     loglevel   4
     method     GET
     offset     124465321
     path       /bot123456789:.../getUpdates?offset=124465321&limit=5&timeout=120
     protocol   https
     redirects  0
     timeout    245
     url        https://api.telegram.org/bot123456789:.../getUpdates?offset=124465321&limit=5&timeout=120
     hash:
     sslargs:
   READINGS:
     2017-10-12 10:44:30   Contacts        123456789:Sebastian_nachname:@username
     2018-08-09 03:13:36   PollingErrCount 2
     2018-08-09 03:13:36   PollingLastError Callback returned error :Bad Gateway:
     2017-11-16 07:08:25   _sentMsgId      12940
     2018-02-22 19:24:28   msg             ACHTUNG Agave2_flower muss gegossen werden!
     2018-08-09 10:39:42   msgChat         Sebastian_nachname
     2018-08-09 10:39:42   msgChatId       123456789
     2018-08-09 10:39:42   msgFileId       
     2018-08-09 10:39:42   msgId           24090
     2018-08-09 10:39:42   msgPeer         Sebastian_nachname
     2018-08-09 10:39:42   msgPeerId       123456789
     2018-08-09 10:39:42   msgReplyMsgId   
     2018-08-09 10:39:42   msgText         Q
     2018-08-09 10:39:42   prevMsgChat     Sebastian_nachname
     2018-08-09 10:39:42   prevMsgFileId   
     2018-08-09 10:39:42   prevMsgId       24089
     2018-08-09 10:39:42   prevMsgPeer     Sebastian_nachname
     2018-08-09 10:39:42   prevMsgPeerId   123456789
     2018-08-09 10:39:42   prevMsgReplyMsgId
     2018-08-09 10:39:42   prevMsgText     Q
     2018-08-09 10:19:23   queryData       TBOT_FAVORITE_CANCEL
     2018-08-09 10:19:23   queryID         1120423487649871249
     2018-08-09 10:19:23   queryPeer       Sebastian_nachname
     2018-08-09 10:19:23   queryPeerId     123456789
     2018-08-09 10:19:23   queryReplyMsgId 24078
     2018-08-09 10:39:42   replyId         Sebastian_nachname
     2018-01-05 11:00:00   rg_Gast_sentMsgId
     2018-08-09 10:19:23   rr_Sebastian_sentMsgId 24078
     2018-08-09 10:19:23   sentMsgId       24078
     2018-08-09 10:19:23   sentMsgPeerId   123456789
     2018-08-09 10:19:23   sentMsgResult   SUCCESS
     2018-02-10 12:29:35   state           msg sz_bwm
   inlinechats:
   sentQueue:
Attributes:
   alias      Telegram Bot
   allowUnknownContacts 0
   cmdFavorites /menu
   cmdKeyword doit
   cmdRestrictedPeer @username
   cmdReturnEmptyResult 0
   defaultPeer @username
   favoritesInline 1
   group      Kommunikation
   icon       telegram
   pollingTimeout 120
   room       91_Webdevices
   stateFormat msgText
   userReadings replyId:msgText.* {ReadingsVal($name, "msgChat", "") eq "" ? ReadingsVal($name, "msgPeerId", "") : (split(" ", ReadingsVal($name, "msgChat", ""), 2))[0]}
   utf8Special 1
   verbose    5


msgConfig:
list globalMsg

Internals:
   NAME       globalMsg
   NOTIFYDEV  TYPE=(Jabber|TelegramBot|yowsup)
   NR         98
   NTFY_ORDER 50-globalMsg
   STATE      1
   TYPE       msgConfig
   READINGS:
     2018-08-09 06:03:02   fhemMsgAudio    ...
     2018-08-09 06:03:02   fhemMsgAudioGw   play1_wz:OK
     2018-08-09 06:03:02   fhemMsgAudioPrio 0
     2018-08-09 06:03:02   fhemMsgAudioState 1
     2018-08-09 06:03:02   fhemMsgAudioTitle -
     2018-08-09 07:35:34   fhemMsgPush     ...

     2018-08-09 07:35:34   fhemMsgPushGw    fhemBot:OK
     2018-08-09 07:35:34   fhemMsgPushPrio 0
     2018-08-09 07:35:34   fhemMsgPushState 1
     2018-08-09 07:35:34   fhemMsgPushTitle -
     2018-08-09 07:35:34   fhemMsgState    1
     2018-08-09 07:35:34   fhemMsgStateTypes push:1
Attributes:
   comment    FHEM Global Configuration for command 'msg'
   devStateIcon {ReadingsVal($name,"STATE","1") eq "1" ? ".*:ios-on-blue" : ".*:ios-NACK"}
   group      Global
   icon       rc_SETUP
   msgContactAudio play1_wz
   msgContactLight fl_tischlampe_licht
   msgContactPush fhemBot
   msgContactScreen KODI
   msgDialog_evalSpecials me=Q
TelegramBot=fhemBot
   msgDialog_msgCommand msg push \@$recipients $message
   msgFwPrioGoneAudio -2
   msgResidentsDev rgr_zuhause
   msgTitleAudio jingle
   msgType    text
   room       90_System
   stateFormat fhemMsgState
   userattr   msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
   verbose    5


meta_Dialog:
list meta_Dialog

Internals:
   DEF        {
  "%me%": {
    "match": "\/?(start|%me%)",
    "commands": "deletereading TYPE=msgDialog $recipient_history",
    "message": [
    "{return('(' . join(') (', sort(split('\n', fhem('get TYPE=msgDialog:FILTER=NAME!=$SELF:FILTER=NAME!=.*_fav:FILTER=NAME!=.*_sys:FILTER=NAME!=.*_user:FILTER=allowed=.*($recipient|everyone).* trigger')))) . ') ')}",
    "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."
    ]
  }
}
   MSGCOMMAND msg push \@$recipients $message
   NAME       meta_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         152
   NTFY_ORDER 50-meta_Dialog
   STATE      everyone,rr_Sebastian:
   TRIGGER    beenden,zurück,Q,abbrechen
   TYPE       msgDialog
   READINGS:
     2018-08-09 10:28:52   everyone_history
     2018-08-09 10:28:52   rr_Sebastian_history
     2018-08-09 10:28:52   state           everyone,rr_Sebastian:
Attributes:
   alias      1 meta_Dialog
   allowed    everyone,rr_Sebastian
   group      Dialog
   icon       dialog@green
   room       91_Webdevices
   verbose    5


Log mit verbose 5 beim Aufruf von %me (in meinem Fall Q):
2018.08.09 10:54:17 5: msg: found types=push
2018.08.09 10:54:17 5: msg: found priority=2018.08.09
2018.08.09 10:54:24 5: TelegramBot_Callback fhemBot: called from Polling
2018.08.09 10:54:24 5: TelegramBot_Callback fhemBot: data returned :{"ok":true,"result":[{"update_id":124465321,
"message":{"message_id":24091,"from":{"id":123456789,"is_bot":false,"first_name":"Sebastian","last_name":"nachname","username":"username","language_code":"de"},"chat":{"id":123456789,"first_name":"Sebastian","last_name":"nachname","username":"username","type":"private"},"date":1533804864,"text":"Q"}}]}:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :1: to :1:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: found an ARRAY
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :1533804864: to :1533804864:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :username: to :username:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :de: to :de:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :123456789: to :123456789:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :0: to :0:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :Sebastian: to :Sebastian:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :nachname: to :nachname:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: found a HASH
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :24091: to :24091:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :Q: to :Q:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :private: to :private:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :Sebastian: to :Sebastian:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :nachname: to :nachname:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :username: to :username:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :123456789: to :123456789:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: found a HASH
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: found a HASH
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :124465321: to :124465321:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: found a HASH
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: found a HASH
2018.08.09 10:54:24 5: TelegramBot_Callback fhemBot: after encoding
2018.08.09 10:54:24 5: TelegramBot_Callback fhemBot: polling returned result? 1
2018.08.09 10:54:24 5: UpdatePoll fhemBot: number of results 1
2018.08.09 10:54:24 5: UpdatePoll fhemBot: parse result
2018.08.09 10:54:24 4: TelegramBot_ParseMsg fhemBot: Textmessage
2018.08.09 10:54:24 4: TelegramBot_ParseMsg fhemBot: text   :Q:
2018.08.09 10:54:24 4: TelegramBot_ContactUpdate # Contacts in hash before :1:
2018.08.09 10:54:24 4: TelegramBot_ContactUpdate # Contacts in hash after :1:
2018.08.09 10:54:24 4: TelegramBot_GetFullnameForContact # Contacts is 123456789:Sebastian_nachname:@username:
2018.08.09 10:54:24 4: TelegramBot_GetFullnameForContact # name is Sebastian_nachname
2018.08.09 10:54:24 4: TelegramBot_GetFullnameForContact # Contacts is 123456789:Sebastian_nachname:@username:
2018.08.09 10:54:24 4: TelegramBot_GetFullnameForContact # name is Sebastian_nachname
2018.08.09 10:54:24 5: msgConfig globalMsg: called function msgConfig_Notify()
2018.08.09 10:54:24 5: TelegramBot_Set fhemBot: called
2018.08.09 10:54:24 5: TelegramBot_UpdatePoll fhemBot: called
2018.08.09 10:54:24 5: TelegramBot_UpdatePoll fhemBot: - Initiate non blocking polling - With callback set
2018.08.09 10:54:24 5: TelegramBot_readToken: Read Telegram API token from file
2018.08.09 10:54:24 4: TelegramBot_UpdatePoll fhemBot: initiate polling with nonblockingGet with 120s
2018.08.09 10:54:24 5: TelegramBot_UpdatePoll fhemBot: - Ende > next polling started
2018.08.09 10:54:24 4: TelegramBot_Callback fhemBot: resulted in SUCCESS from Polling
2018.08.09 10:54:24 5: TelegramBot_Callback fhemBot: - Ende > Control back to FHEM
2018.08.09 10:54:31 5: msgDialog (meta_Dialog) - entering msgDialog_Notify


Falls noch was fehlen sollte kann ich das gerne nachliefern.

Vorab schon mal danke.
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 10 August 2018, 17:50:57
Guck doch mal bitte in den EventMonitior, wenn du eine Nachricht schickst. Ich kann aktuell nichts erkennen warum es nicht funktioniert.

Hast du etwas an deiner Installation geändert (update oder so)?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 10 August 2018, 18:55:44
Hi,
im Eventmonitor ist erschreckend wenig zu sehen wenn ich %me% sende:
2018-08-10 18:43:05 TelegramBot fhemBot msgId: 24451
2018-08-10 18:43:05 TelegramBot fhemBot msgPeer: Sebastian_nachname
2018-08-10 18:43:05 TelegramBot fhemBot msgPeerId: 123456789
2018-08-10 18:43:05 TelegramBot fhemBot msgChat: Sebastian_nachname
2018-08-10 18:43:05 TelegramBot fhemBot msgChatId: 123456789
2018-08-10 18:43:05 TelegramBot fhemBot msgText: Q
2018-08-10 18:43:05 TelegramBot fhemBot msgReplyMsgId:
2018-08-10 18:43:05 TelegramBot fhemBot msgFileId:
2018-08-10 18:43:05 TelegramBot fhemBot replyId: Sebastian_Moebus


Scheint so als würde der metaDialog überhaupt nicht lauschen...

Updates? Ja mein FHEM ist immer aktuell. Habe aber gefühlt ewig nichts mehr an den Dialogen geschraubt.
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 10 August 2018, 20:13:41
Es scheint die vermittliung durch das msgConfig device zu fehlen, an der stelle solltest du ansetzen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 10 August 2018, 22:05:39
ZitatEs scheint die vermittliung durch das msgConfig device zu fehlen, an der stelle solltest du ansetzen.

Habs schon mit dem Minimal-msgConfig device aus dem Wiki versucht. Keine Änderung.
Ansonsten funktioniert das msgConfig device normal. Es routet zB. brav speak nach push, wenn kein msgContactAudio Attribut gesetzt ist.

Werde mal weiter fahnden...
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 12 August 2018, 09:28:27
Moin,
dachte schon den Fehler gefunden zu haben. Ein Klassiker eigentlich...
ZitatEs ist darauf zu achten, dass das Reading fhemMsgRcvPush ein Event erzeugt. Siehe auch Attribut "allowed" in msgDialog.
Event kommt wieder - aber leider kommt immer noch keine Antwort zurück.

Wollte dann nochmal mit dem metaDialog aus dem Wiki starten. Bekomme dann aber einen Fehler nach RAW-Import und Execute Commands:
Usage: define  msgDialog {JSON}

invalid character encountered while parsing JSON string, at character offset 11 (before "\n    "match": "\\/?...") at ./FHEM/76_msgDialog.pm line 93.

Scheint mir so als meckert er die RegEx an. Warum auch immer...? Line 93 ist die hier:
$DEF = eval{JSON->new->decode($DEF)};

Meine libjson-perl ist diese:
libjson-perl ist schon die neueste Version (2.90-1).

So langsam gehen mir die Ideen aus. bzw. bekomme ich jetzt noch nicht mal mehr den metaDialog zurück ins System...
Alles sehr komisch...  :o
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 12 August 2018, 10:01:01
Wenn ich mich richtig erinnere habe ich beim Metadialog aus dem wiki auch eine solche Meldung erhalten. Lag evtl. am Weg des Einfügens. Da waren irgendwelche unsichtbaren Sonderzeichen drin.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 12 August 2018, 10:02:45
Bei mir geht es mit copy/paste aus dem Wiki. Versuch es doch mal von hier:

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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 12 August 2018, 10:25:45
Zitat von: igami am 12 August 2018, 10:02:45
Bei mir geht es mit copy/paste aus dem Wiki. Versuch es doch mal von hier:

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


Leider nein:
Usage: define  msgDialog {JSON}

invalid character encountered while parsing JSON string, at character offset 11 (before "\n    "match": "\\/?...") at ./FHEM/76_msgDialog.pm line 93.


Und als ob das noch nicht genügt:
Habe dann eine fhem.cfg und fhem.save von gestern eigespielt. Nach Neustart sind alle msgDialog-devices verschwunden  :(

Messages collected while initializing FHEM:
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
./log/fhem.save: Please define Abwesenheit_Dialog_user first
Please define Abwesenheit_Dialog_user first
Please define Beleuchtung_Dialog first
Please define Berechtigungen_Dialog_sys first
Please define Bewohner_Dialog first
Please define Fahrzeit_Dialog_user first
Please define Favoriten_Dialog first
Please define Gast_Dialog_user first
Please define Haus_Automatisierung_Dialog_fav first
Please define Kamera_Dialog_fav first
Please define Notfall_Dialog first
Please define Status_dialog_sys first
Please define Steckdosen_Dialog_fav first
Please define System_Dialog first
Please define Systemverwaltung_Dialog_sys first
Please define Tagesschau_Dialog_fav first
Please define meta_Dialog first


Das angemeckerte fehlende msgConfig device ist vorhanden und komplett konfiguriert:
Internals:
   NAME       globalMsg
   NOTIFYDEV  TYPE=(Jabber|TelegramBot|yowsup)
   NR         352
   NTFY_ORDER 50-globalMsg
   STATE      1
   TYPE       msgConfig
   READINGS:
     2018-08-12 09:44:29   fhemMsgAudio     ...
     2018-08-12 09:44:29   fhemMsgAudioGw   play1_wz:OK
     2018-08-12 09:44:29   fhemMsgAudioPrio 0
     2018-08-12 09:44:29   fhemMsgAudioState 1
     2018-08-12 09:44:29   fhemMsgAudioTitle -
     2018-08-12 09:42:30   fhemMsgPush     FHEM1 wurde soeben neu gestartet!
     2018-08-12 09:42:30   fhemMsgPushGw    fhemBot:OK
     2018-08-12 09:42:30   fhemMsgPushPrio 0
     2018-08-12 09:42:30   fhemMsgPushState 1
     2018-08-12 09:42:30   fhemMsgPushTitle -
     2018-08-12 09:44:29   fhemMsgState    1
     2018-08-12 09:44:29   fhemMsgStateTypes audio:1
Attributes:
   comment    FHEM Global Configuration for command 'msg'
   group      Global
   icon       rc_SETUP
   msgCmdScreen KODI
   msgContactAudio play1_wz
   msgContactLight fl_tischlampe_licht
   msgContactPush fhemBot
   msgDialog_evalSpecials me=Q\
TelegramBot=fhemBot
   msgResidentsDev <mein RESIDENTS device>
   msgTitleAudio jingle
   msgType    text
   room       90_System
   stateFormat fhemMsgState
   userattr   msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
   verbose    2


Was läuft hier denn gerade für ein Film?!  :o
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 12 August 2018, 11:16:23
Das msgDevice fehlte irgendwann zwischendurch mal. Die Meldungen werden nicht aufgeräumt, wenn es wieder da ist.
Schau mal im Notepad++, und lass dir dort alle Zeichen anzeigen. Liegt vielleicht am genutzten Browser oder irgendeine BS-Einstellung.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 12 August 2018, 15:06:30
ZitatDas msgDevice fehlte irgendwann zwischendurch mal.
Korrekt, das msgConfig device wurde gelöscht und neu angelegt.
Es ist aber in unveränderter Form aus dem Backup wiederhergestellt.
Mehr als fhem.cfg und fhem.save muss ich doch nicht wiederherstellen oder?

ZitatDie Meldungen werden nicht aufgeräumt, wenn es wieder da ist.
Hmmm, das motd-Attribut aus der Sicherung ist leer. Die Meldungen sind also vom aktuellen Start.

ZitatSchau mal im Notepad++, und lass dir dort alle Zeichen anzeigen.
Was meinst du mit allen Zeichen anzeigen lassen?
Ich habe Dialoge mit Emojis, hatte aber noch nie Probleme damit. Der metaDialog hat zB. keine
und der lässt sich nicht per RAW importieren.

ZitatLiegt vielleicht am genutzten Browser oder irgendeine BS-Einstellung.
Hmm, was hat der Browser damit zu tun? Nutze ausschließlich Chrome und das
FHEM läuft auf einem aktuellen Debian Stretch. Aber mit Firefox gehts auch nicht...



Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 12 August 2018, 15:13:10
Dann einfach mal Stück für Stück abtippen ;)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 12 August 2018, 15:44:09
Hab jetzt mal mit
define metaDialog msgDialog {}
den nackten metaDialog erstellt und dann im DEF Fenster
{
  "%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."
    ]
  }
}

eingegeben (also schon noch c&p  ;))
FHEM meldet stur:
Usage: define <name> msgDialog {JSON}

invalid character encountered while parsing JSON string, at character offset 11 (before "\n    "match": "\\/?...") at ./FHEM/76_msgDialog.pm line 93.

https://jsonlint.com/ sagt aber bei Validate JSON
Valid JSON
in grün. Kein Gemecker.  ???

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 13 August 2018, 10:18:18
Moin,
wenn ich in DEF versuche den metaDialog einzufügen kommt folgender Fehler:
Usage: define <name> msgDialog {JSON}

invalid character encountered while parsing JSON string, at character offset 11 (before "\n    "match": "\\/?...") at ./FHEM/76_msgDialog.pm line 93.

Vor dem Zeilenumbruch kommt ein {

Wenn ich dagegen in RAW versuche den metaDialog einzufügen kommt diese Fehlermeldung:
Usage: define  msgDialog {JSON}

'"' expected, at character offset 1 (before "(end of string)") at ./FHEM/76_msgDialog.pm line 93.


Was bedeutet in diesem Zusammenhang character offset 1 bzw. 11?
Wie bereits vorher geschrieben, ist das JSON selbst laut jsonlint.com (http://jsonlint.com) in Ordnung.
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 13 August 2018, 13:25:02
Ich glaube es waren die Leerzeichen bei mir damals. Da waren keine normalen Leerzeichen sondern geschützte oder Tabs. Damit kommen die unterschiedlichen Parser anders mit zurecht. Habe diese im notepad suchen und ersetzen lassen.
Offset ist das Zeichen in der Zeile.
Versuch mal die Leerzeichen der angemahnten Zeile zu entfernen. Das sollte eine geänderte Fehlermeldung geben.
Edit: ggf. auch den Zeilenumbruch neu machen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 13 August 2018, 14:29:59
Hallo,
also auf einem fast nackten und aktuellen FHEM funktioniert alles tiptop:
This is perl 5, version 24, subversion 1 (v5.24.1)
libjson-perl ist schon die neueste Version (2.90-1).

Auf dem betroffenen System laufen diese Versionen:
This is perl 5, version 26, subversion 1 (v5.26.1)
libjson-perl ist schon die neueste Version (2.90-1).

Am Ende ein PERL Problem?!
Auf beiden wurde getestet mit diesem Code:
{
"%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."
]
}
}

Der Code wurde nach einem validate auf jsonlint.com direkt per c&p in DEF eingefügt.
Nächste Frage: Wie komme ich mit PERL wieder nach 5.24.1?
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 13 August 2018, 15:15:13
Mit perl 5.26 wurde Unicode 9.0 unterstützt. Da gab es auf jeden Fall Anpassungen an LineBreaks.
Versuch mal meinen Vorschlag Leerzeichen und Linebreaks in den ersten vier Zeilen in einem Texteditor zu löschen und neu zu schreiben. Dann sollte eine andere Zeile beanstandet werden.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 13 August 2018, 15:40:53
Hi Wuehler,
habe diesen Code eingefügt:
{"%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."
]
}
}


Die Fehlermeldung lautet nun:
Usage: define <name> msgDialog {JSON}
':' expected, at character offset 8 (before "match": "\\/?(start|...") at ./FHEM/76_msgDialog.pm line 93.


Offset 8 ist das ":"
: gelöscht und wieder eingetragen: keine Veränderung  ???

Trotzdem Danke für den Support.  :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 13 August 2018, 20:15:18
Hast du schon mal folgendes nachgeschaut:
https://forum.fhem.de/index.php/topic,77297.msg743993.html#msg743993 (https://forum.fhem.de/index.php/topic,77297.msg743993.html#msg743993)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 14 August 2018, 08:36:18
Zitat von: Wuehler am 13 August 2018, 20:15:18
Hast du schon mal folgendes nachgeschaut:
https://forum.fhem.de/index.php/topic,77297.msg743993.html#msg743993 (https://forum.fhem.de/index.php/topic,77297.msg743993.html#msg743993)
Moin,
danke dir das war es! Im Attribut msgDialog_evalSpecials hat sich noch ein Backslash versteckt/eingeschlichen.
msgDialog_evalSpecials me=Q\
TelegramBot=fhemBot

Deshalb hat FHEM beim editieren in DEF und RAW - zurecht - ständig gemeckert. Wie so oft ein Layer 8 Problem  ;D
Danke dir fürs Helfen! Jetzt kann ich mich wieder auf die Suche nach meinem eigentlichehn Problem machen...  ;)
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 14 August 2018, 09:38:20
Meine Dialoge sind wieder online :)
Da ich nicht das Gegenteil beweisen kann, lag es wohl an mir...   ::)
Danke an alle für eure Tipps und Hilfestellungen!
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Mumpitz am 18 August 2018, 15:21:09
Hallo Leute

ich bin echt grad am verzweifeln und komme nicht weiter. Ich kriege einfach keine Antwort vom Boot. Telegram läuft soweit.. Was mache ich falsch??

myMsgConfig
defmod myMsgConfig msgConfig
attr myMsgConfig userattr evalSpecials:textField-long msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig evalSpecials me=XXXX\
TelegramBot=XXX_Telegram
attr myMsgConfig group Global
attr myMsgConfig msgContactPush XXX_Telegram
attr myMsgConfig msgType text
attr myMsgConfig room Telegram
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 3

setstate myMsgConfig 1



msgPushReceived notify
defmod msgPushReceived notify .*(msgText|queryData|(OTR)?LastMessage|message):(\n|.)* {\
  my ($recipient, $received);;\
  my $TYPE = InternalVal($NAME, "TYPE", "");;\
\
  if($TYPE eq "TelegramBot" && $EVENT =~ m/^msgText/){\
    $recipient = ReadingsVal($NAME, "msgPeerId", undef);;\
    $received = ReadingsVal($NAME, "msgText", undef);;\
  }\
  elsif($TYPE eq "TelegramBot" && $EVENT =~ m/^queryData/){\
    $recipient = ReadingsVal($NAME, "queryPeerId", undef);;\
    $received = ReadingsVal($NAME, "queryData", undef);;\
  }\
  elsif($TYPE eq "Jabber" && $EVENT =~ m/^((OTR)?Last)Message/){\
    $received = ReadingsVal($NAME, $1."Message", undef);;\
    ($recipient) = (ReadingsVal($NAME, $1."SenderJID", undef) =~ m/[^\/]+/g);;\
  }\
  elsif($TYPE eq "yowsup" && $EVENT =~ m/^message/){\
    $recipient = $NAME;;\
    $NAME = $modules{yowsup}{defptr}{yowsup}->{NAME};;\
    $received = ReadingsVal($NAME, "message", undef);;\
  }\
\
  return unless($recipient && $received ne "");;\
  \
  my @contacts = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$recipient.*");;\
  \
  if(@contacts){\
    foreach (@contacts){\
      my $dev_hash = $defs{$_};;\
\
      readingsBeginUpdate($dev_hash);;\
      readingsBulkUpdate($dev_hash, "fhemMsgPushReceived", $received);;\
      readingsBulkUpdate($dev_hash, "fhemMsgPushReceivedContact", $NAME);;\
      readingsEndUpdate($dev_hash, 1);;\
    }\
  }\
  else{\
    fhem("msg push Unbekannter Kontaktversuch über $NAME von $recipient:\n$received");;\
  }\
}
attr msgPushReceived devStateIcon {ReadingsVal($name, "state", "inactive") eq "active" ? ".*:ios-on-blue:inactive" : ".*:ios-off:active"}
attr msgPushReceived icon audio_mic
attr msgPushReceived room Telegram

setstate msgPushReceived 2018-08-18 15:08:02
setstate msgPushReceived 2018-08-18 14:29:36 state active



Waschmaschine Dialog
defmod Waschmaschine_Dialog msgDialog { "Waschmaschine": {\
    "message": [\
      "{return('(Zeitprogramm stoppen) ') if(ReadingsVal('%controlUnit%', 'controlMode', '') eq 'auto')}",\
      "{return('(programmieren) (einschalten) ') if(ReadingsVal('%actor%', 'state', '') ne 'on')}",\
      "(Verlaufsdiagramm) ",\
      "(abbrechen) ",\
      "{return('Waschmaschine: ' . (ReadingsVal('%actor%', 'state', '') eq 'on' ? 'eingeschaltet' : 'ausgeschaltet'))}",\
      "{return('Modus: ' . (ReadingsVal('%controlUnit%', 'controlMode', '') eq 'auto' ? 'Automatik' : 'Manuell (' . ReadingsVal('%controlUnit%', 'time', '') . ')'))}"\
    ],\
    "Zeitprogramm stoppen": {\
      "commands": "set %controlUnit% controlMode manual",\
      "message": [\
        "(%me%) ",\
        "Das Zeitprogramm wurde gestoppt."\
      ]\
    },\
    "programmieren": {\
      "message": [\
        "(bestätigen|abbrechen) ",\
        "(00:00:00_00|00:30:00_30|01:00:01_00|01:30:01_30|02:00:02_00|02:30:02_30) ",\
        "(03:00:03_00|03:30:03_30|04:00:04_00|04:30:04_30|05:00:05_00|05:30:05_30) ",\
        "(06:00:06_00|06:30:06_30|07:00:07_00|07:30:07_30|08:00:08_00|08:30:08_30) ",\
        "(09:00:09_00|09:30:09_30|10:00:10_00|10:30:10_30|11:00:11_00|11:30:11_30) ",\
        "(12:00:12_00|12:30:12_30|13:00:13_00|13:30:13_30|14:00:14_00|14:30:14_30) ",\
        "(15:00:15_00|15:30:15_30|16:00:16_00|16:30:16_30|17:00:17_00|17:30:17_30) ",\
        "(18:00:18_00|18:30:18_30|19:00:19_00|19:30:19_30|20:00:20_00|20:30:20_30) ",\
        "(21:00:21_00|21:30:21_30|22:00:22_00|22:30:22_30|23:00:23_00|23:30:23_30) ",\
        "Wann soll die Wäsche fertig sein?",\
        "Bitte Uhrzeit in HH:MM angeben.",\
        "Aktuell ist [%controlUnit%:time] Uhr eingestellt."\
      ],\
      "Uhrzeit": {\
        "match": "([0-1][0-9]|2[0-3])[:_][0-5][0-9]",\
        "commands": [\
          "{my $time = '$message';;;; $time =~ s/_/:/;;;; fhem(\"set %controlUnit% time $time\");;;;}",\
          "set $SELF say @$recipient Waschmaschine|programmieren|bestätigen"\
        ]\
      },\
      "bestätigen": {\
        "commands": "set %controlUnit% controlMode auto",\
        "message": [\
          "(%me%) ",\
          "Das Zeitprogramm wurde eingestellt.",\
          "Die Wäsche wird voraussichtlich um [%controlUnit%:time] Uhr fertig sein.",\
          "Bitte die Waschmaschine vorbereiten."\
        ]\
      }\
    },\
    "einschalten": {\
      "commands": [\
        "set %controlUnit% controlMode manual",\
        "set %actor% on"\
      ]\
    },\
    "Verlaufsdiagramm": {\
      "commands": "set %TelegramBot% cmdSend {plotAsPng('%plot%')}",\
      "message": [\
        "(%me%) ",\
        "Waschkeller: Waschmaschine"\
      ]\
    }\
  },\
  "auto": {\
    "setOnly": true,\
    "commands": [\
      "set %actor% on",\
      "set %controlUnit% controlMode manual"\
    ],\
    "message": [\
      "(%me%) ",\
      "Die Wachmaschine wurde automatisch eingeschaltet."\
    ]\
  },\
  "manual": {\
    "setOnly": true,\
    "message": [\
      "(%me%) ",\
      "Die Wachmaschine wurde manuell eingeschaltet."\
    ]\
  },\
  "done": {\
    "setOnly": true,\
    "commands": "set %actor% off",\
    "message": [\
      "(%me%) ",\
      "Die Wachmaschine ist fertig."\
    ]\
  }\
}\

attr Waschmaschine_Dialog room Telegram

setstate Waschmaschine_Dialog 2018-08-18 14:34:33 state Initialized



Beim Attribut msgContactPush bei rr_Reto habe ich folgendes eingegeben:

XXX_Telegram:@Nummer welcher im Telegram Bot Device unter Contacts steht 

Wo ist mein Fehler??
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 18 August 2018, 16:48:54
Beim Dislog fehlt denke ich:
attr allowed rr_Reto
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Mumpitz am 18 August 2018, 17:05:27
Zitat von: Wuehler am 18 August 2018, 16:48:54
Beim Dislog fehlt denke ich:
attr allowed rr_Reto

Menno..... ein Klick und es funktioniert.....
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 18 August 2018, 18:37:54
Das notify wird übrigens nicht mehr benötigt.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Mumpitz am 21 August 2018, 22:59:44
Hallo zusammen

Ich habe ein echt komisches Phänomen bei meinem Dialog. Und zwar ist es so, dass wenn ich der Reihe nach alle "Kästchen" abfrage funktioniert alles. Wenn ich jedoch direkt auf den Klima Dialog gehe und dort z.B. den Lux Werte anzeige auswähle passiert nichts. Wenn ich jedoch zuerst die aktuellen Temperaturen anzeige, anschliessend den Temperaturverlauf anzeige und dann erst die Lux Werte anzeige funktioniert es wie gewünscht....

defmod Klima_Dialog msgDialog {"02.Klima":{\
  "message": [\
    "(Aktuelle Temperaturen anzeigen) ",\
    "(Temperatur Verlauf anzeigen) ",\
"(Helligkeits Werte anzeigen) ",\
"(Helligkeits Verlauf anzeigen) ",   \
"(abbrechen) ",\
    "%me% was möchtest Du tun mein Meister?:"\
  ],\
    "Aktuelle Temperaturen anzeigen":{\
    "message":[\
      "Aktuelle Temperaturen:",\
  "Küche: [Temp_Wohnzimmer:temperature]°C.",\
  "Esszimmer: [blink:Cam_Wohnzimmer_Tempg]°C.",\
  "Galerie: [blink:Cam_Galerie_Tempg]°C.",\
  "Kinderzimmer Lean:[Temp_Lean:temperature]°C.",\
  "Büro UG: [blink:Cam_Buero_Tempg]°C.",\
  "Sitzplatz: [blink_outdoor:Cam_Garten_Tempg]°C.",\
  "Vorbau: [blink_outdoor:Cam_Eingang_Tempg]°C.",\
  "Fragen?"\
    ]},\
"Temperatur Verlauf anzeigen": {\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{fhem(\"set %TelegramBot% cmdSend @\".\"R_Eppi {plotAsPng('SVG_FileLog_Temp_Lean_1')}\")}",\
"{fhem(\"set %TelegramBot% cmdSend @\".\"R_Eppi {plotAsPng('SVG_FileLog_Temp_Wohnzimmer_1')}\")}",\
"Temperatur Verlauf Lean & Wohnzimmer"\
]\
},\
\
\
    "Helligkeits Werte anzeigen":{\
     "message":[\
      "Aktuelle Lux Werte:",\
  "Ostseite: [Multisensor_Ost:state] lx.",\
  "Südseite: [HM_Lichtsensor_Sued:state] lx.",\
  "Westseite: [HM_Lichtsensor_West:state] lx.",\
  "Fragen?"\
    ]\
    },\
"Helligkeits Verlauf anzeigen": {\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{fhem(\"set %TelegramBot% cmdSend @\".\"R_Eppi {plotAsPng('SVG_FileLog_Sensor_Licht_West_3')}\")}",\
"Helligkeitsverlauf"\
]\
},\
    "Stehlampe Wohnzimmer einschalten":{\
    "commands": "set Licht_Stehlampe_Wohnzimmer on",\
    "message":[\
      "(%me%) ",\
      "Die Lampe im Wohnzimmer wurde eingeschaltet."\
    ]\
    \
   }\
}\
}
attr Klima_Dialog allowed rr_Reto
attr Klima_Dialog room Telegram
attr Klima_Dialog verbose 0



jemand eine Idee wo das Problem liegt?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 22 August 2018, 05:39:37
Ich habe den Dialog bei mir importiert und kann direkt nach "02.Klima" auf "Helligkeits Werte anzeigen" gehen und bekomme eine Nachricht.
Poste doch mal ein List von dem Dialog, zu dem Zeitpunkt wo es nicht funktioniert.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 23 August 2018, 09:33:40
Zitat von: igami am 22 August 2018, 05:39:37
Ich habe den Dialog bei mir importiert und kann direkt nach "02.Klima" auf "Helligkeits Werte anzeigen" gehen und bekomme eine Nachricht.
Poste doch mal ein List von dem Dialog, zu dem Zeitpunkt wo es nicht funktioniert.

Hier auch. Kann direkt zu "02.Klima" auf "Helligkeits Werte anzeigen" gehen.
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 23 August 2018, 09:44:16
Hallo Zusammen,
habe mal ein Icon für meine Dialoge gebaut. Und dazu ein passendes archetype device welches mir meine Dialoge automatisch mit Grundeinstellungen versorgt:
defmod msgConfig_archetype archetype defined_by=msgConfig_archetype TYPE=msgDialog
attr msgConfig_archetype userattr allowed
attr msgConfig_archetype alias Archetyp für msgDialog devices
attr msgConfig_archetype allowed everyone
attr msgConfig_archetype attributes allowed icon group room
attr msgConfig_archetype devStateIcon active:ios-on-blue
attr msgConfig_archetype group Dialoge
attr msgConfig_archetype icon dialog
attr msgConfig_archetype room 91_Dialogsteuerung


Vielleicht kann es ja noch jemand gebrauchen...  :D
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Mumpitz am 23 August 2018, 11:35:40
Zitat von: igami am 22 August 2018, 05:39:37
Ich habe den Dialog bei mir importiert und kann direkt nach "02.Klima" auf "Helligkeits Werte anzeigen" gehen und bekomme eine Nachricht.
Poste doch mal ein List von dem Dialog, zu dem Zeitpunkt wo es nicht funktioniert.

Also, ganz komisch! Ich habe zuerst die aktuelle Temperaturen angefragt und anschliessend den Helligkeitsverlauf. Die Temperaturen sind gekommen, der Verlauf nicht!

Hier das List des msgdDialogs:
Internals:
   CFGFN     
   DEF        {"02.Klima":{
  "message": [
    "(Aktuelle Temperaturen anzeigen) ",
    "(Temperatur Verlauf anzeigen) ",
"(Helligkeits Werte anzeigen) ",
"(Helligkeits Verlauf anzeigen) ",   
"(abbrechen) ",
    "%me% was möchtest Du tun mein Meister?:"
  ],
    "Aktuelle Temperaturen anzeigen":{
    "message":[
      "Aktuelle Temperaturen:",
  "Küche: [Temp_Wohnzimmer:temperature]°C.",
  "Esszimmer: [blink:Cam_Wohnzimmer_Tempg]°C.",
  "Galerie: [blink:Cam_Galerie_Tempg]°C.",
  "Kinderzimmer Lean:[Temp_Lean:temperature]°C.",
  "Büro UG: [blink:Cam_Buero_Tempg]°C.",
  "Sitzplatz: [blink_outdoor:Cam_Garten_Tempg]°C.",
  "Vorbau: [blink_outdoor:Cam_Eingang_Tempg]°C.",
  "Fragen?"
    ]},
"Temperatur Verlauf anzeigen": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{fhem(\"set %TelegramBot% cmdSend @\".\"R_Eppi {plotAsPng('SVG_FileLog_Temp_Lean_1')}\")}",
"{fhem(\"set %TelegramBot% cmdSend @\".\"R_Eppi {plotAsPng('SVG_FileLog_Temp_Wohnzimmer_1')}\")}",
"Temperatur Verlauf Lean & Wohnzimmer"
]
},


    "Helligkeits Werte anzeigen":{
     "message":[
      "Aktuelle Lux Werte:",
  "Ostseite: [Multisensor_Ost:state] lx.",
  "Südseite: [HM_Lichtsensor_Sued:state] lx.",
  "Westseite: [HM_Lichtsensor_West:state] lx.",
  "Fragen?"
    ]
    },
"Helligkeits Verlauf anzeigen": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{fhem(\"set %TelegramBot% cmdSend @\".\"R_Eppi {plotAsPng('SVG_FileLog_Sensor_Licht_West_3')}\")}",
"Helligkeitsverlauf"
]
},
    "Stehlampe Wohnzimmer einschalten":{
    "commands": "set Licht_Stehlampe_Wohnzimmer on",
    "message":[
      "(%me%) ",
      "Die Lampe im Wohnzimmer wurde eingeschaltet."
    ]
   
   }
}
}
   MSGCOMMAND msg push \@$recipients $message
   NAME       Klima_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         1340
   NTFY_ORDER 50-Klima_Dialog
   STATE      rr_Reto: Aktuelle Temperaturen anzeigen
   TRIGGER    02.Klima
   TYPE       msgDialog
   OLDREADINGS:
   READINGS:
     2018-08-23 11:18:43   rr_Reto_history
     2018-08-23 11:18:43   state           rr_Reto: Aktuelle Temperaturen anzeigen
Attributes:
   allowed    rr_Reto
   room       Telegram
   verbose    0


Daraus entnehme ich, dass die Anfrage gar nicht beim Dialog angekommen ist. Hier das Roomate Device:



Internals:
   DEF        rgr_Residents
   DURATIONTIMER 1535016572.68152
   NAME       rr_Reto
   NOTIFYDEV  global,
   NR         205
   NTFY_ORDER 50-rr_Reto
   READY      1
   RESIDENTGROUPS rgr_Residents
   STATE      home
   TYPE       ROOMMATE
   READINGS:
     2018-08-23 11:13:32   durTimerAbsence 00:00:00
     2018-08-23 11:13:32   durTimerAbsence_cr 0
     2018-08-23 11:28:32   durTimerPresence 00:15:00
     2018-08-23 11:28:32   durTimerPresence_cr 15
     2016-01-07 05:45:26   durTimerSleep   00:00:00
     2016-01-07 05:45:26   durTimerSleep_cr 0
     2018-08-23 11:18:43   fhemMsgPush     Aktuelle Temperaturen:
Küche: 25.8°C.
Esszimmer: 25.3°C.
Galerie: 25.3°C.
Kinderzimmer Lean:26.0°C.
Büro UG: 26.4°C.
Sitzplatz: 26.4°C.
Vorbau: 22.55°C.
Fragen?
     2018-08-23 11:18:43   fhemMsgPushGw    Eppi_Telegram:@285515829:OK
     2018-08-23 11:18:43   fhemMsgPushPrio 0
     2018-08-18 21:23:24   fhemMsgPushReceived abbrechen
     2018-08-18 21:23:24   fhemMsgPushReceivedContact Eppi_Telegram
     2018-08-23 11:18:43   fhemMsgPushState 1
     2018-08-23 11:18:43   fhemMsgPushTitle -
     2018-08-23 11:22:05   fhemMsgRcvPush  Helligkeits Verlauf anzeigen
     2018-08-23 11:22:05   fhemMsgRcvPushGw Eppi_Telegram
     2018-08-23 11:18:43   fhemMsgState    1
     2018-08-23 11:18:43   fhemMsgStateTypes push:1
     2018-08-23 11:13:32   lastArrival     2018-08-23 11:13:32
     2016-01-07 05:45:26   lastAwake       2016-01-07 05:45:26
     2018-08-23 09:53:28   lastDeparture   2018-08-23 09:53:28
     2018-08-23 11:13:32   lastDurAbsence  01:20:04
     2018-08-23 11:13:32   lastDurAbsence_cr 80
     2018-08-23 09:53:28   lastDurPresence 42:35:48
     2018-08-23 09:53:28   lastDurPresence_cr 2556
     2016-01-07 05:45:26   lastDurSleep    04:44:34
     2016-01-07 05:45:26   lastDurSleep_cr 285
     2017-10-25 17:57:31   lastLocation    home
     2018-08-23 09:53:28   lastMood        calm
     2016-01-07 01:00:52   lastSleep       2016-01-07 01:00:52
     2018-08-23 11:13:32   lastState       absent
     2017-10-25 17:57:47   location        home
     2018-08-23 11:13:32   mood            calm
     2018-08-23 11:13:32   presence        present
     2018-08-23 11:13:32   state           home
     2015-12-15 06:14:57   wakeup          0
     2015-12-15 06:12:18   wayhome         0
   TIMER:
     rr_Reto_DurationTimer:
       HASH       rr_Reto
       MODIFIER   DurationTimer
       NAME       rr_Reto_DurationTimer
Attributes:
   alias      Status Reto
   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
   group      Home State
   icon       people_sensor
   msgContactPush Eppi_Telegram:@xxxxxxxxx
   room       Steuerung
   rr_realname group
   sortby     4
   webCmd     state


Hier steht ja einerseits die aktuelle Temperatur, anderseits auch meine neue Anfrage, welche jedoch nicht weitergereicht wurde?

Jemand einen Plan?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: shilbert am 25 August 2018, 11:47:37
Hallo zusammen,

Ich habe analog zum Wiki ein Meta-Menü erstellt. Das wird mir auch angezeigt. Allerdings erscheint als einziger Auswahlknopf "abbrechen"

Ich habe den Beispieldialog zur Waschmaschine in meiner fhem.cfg

Wo kann ich ansetzen ?

[Gelöst]: Mann muss offenbar "attr meta_Dialog allowed XXXX" für jeden Dialog setzen. Macht Sinn.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 26 August 2018, 10:38:21
Hallo,

vielleicht kann mir jemand auf die Sprünge helfen.
Problem: Bild von SSCAm per Telegram auf Anforderung versenden.
Wenn ich diesen code in die fhem Kommandozeile eingebe funktioniert es:

set telegrambot sendImage @@meine_id {(ReadingsVal("syno_balkonien","full_path",""))}
   


im MSGDialog so, leider nicht :
"command": [
"{fhem(\"set telegrambot sendImage @@meine_id {(ReadingsVal(\"syno_balkonien\",\"full_path\",\"\"))}\")}"
    ]


Auch nicht wenn ich den kompletten code so in die command Zeile kopiere und die \ entferne dann kommt folgende Fehlermeldung:
Global symbol "@meine_id" requires explicit package name at (eval 7244) line 1.
syntax error at (eval 7244) line 1, near ""set telegrambot sendImage @@meine_id {(ReadingsVal("syno_balkonien"


Ich denke mal Irgendwo noch ein escapen oder "" oder {, aber ich komme nicht drauf.

Grüße
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 26 August 2018, 11:49:36
Moin,
mach doch sowas:
attr <dialog> evalSpecials datei={(ReadingsVal("syno_balkonien","full_path",""))}
Dann hast du dir das ganze Escapen gespart  8)
"command": [
"{fhem(\"set telegrambot sendImage @meine_id %datei%\")}"
    ]

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 26 August 2018, 13:00:43
Zitat von: binford6000 am 26 August 2018, 11:49:36
Moin,
mach doch sowas:
attr <dialog> evalSpecials datei={(ReadingsVal("syno_balkonien","full_path",""))}
Dann hast du dir das ganze Escapen gespart  8)
"command": [
"{fhem(\"set telegrambot sendImage @meine_id %datei%\")}"
    ]

VG Sebastian

Super, danke funktioniert nach kleiner Anpassung.
"set telegrambot sendImage @meine_id %datei% "

hat genügt.

Vielen Dank !
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Smarti am 27 August 2018, 22:19:24
Nabend,

hab da ne Frage an die Experten. ich würde gerne folgendes in einem Dialog ausführen:

{qx(wget --no-cookies --no-cache --timestamping http://wetterstationen.meteomedia.de/messnetz/vorhersagegrafik/108241.png -O ./www/snapshots/4dwetter.png)}

Wie muss ich das bewerkstelligen, im Konsolenfester wird alles prima ausgeführt.

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 28 August 2018, 05:57:46
Zitat von: Smarti am 27 August 2018, 22:19:24
Wie muss ich das bewerkstelligen, im Konsolenfester wird alles prima ausgeführt.
Einfach einfügen als command:

defmod test_dialog msgDialog {\
  "test": {\
    "commands": "{qx(wget --no-cookies --no-cache --timestamping http://wetterstationen.meteomedia.de/messnetz/vorhersagegrafik/108241.png -O ./www/snapshots/4dwetter.png)}"\
  }\
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Smarti am 28 August 2018, 12:02:18
Zitat von: igami am 28 August 2018, 05:57:46
Einfach einfügen als command:

defmod test_dialog msgDialog {\
  "test": {\
    "commands": "{qx(wget --no-cookies --no-cache --timestamping http://wetterstationen.meteomedia.de/messnetz/vorhersagegrafik/108241.png -O ./www/snapshots/4dwetter.png)}"\
  }\
}


Super! Das ist ja einfach...

Dann ist mir einfach noch nicht klar wann brauche ich z.B. fhem() bzw. system (). wo finde ich eine Doku?

Anderes Thema:
Gibt es auch die Möglichkeit in einen Dialog eine Passwortabfrage einzubauen, so dass diese nicht im Chatverlauf sichtbar ist...

Dank!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 28 August 2018, 15:13:10
ZitatDann ist mir einfach noch nicht klar wann brauche ich z.B. fhem() bzw. system (). wo finde ich eine Doku?

Otto hat das Ganze mal sehr schön herausgearbeitet:
http://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html (http://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html)

{fhem("set device on");}
ist der PERL-Aufruf eines FHEM-Befehls.

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 28 August 2018, 19:26:07
Hallo,
nach der tollen Hilfe hab ich jetzt doch noch ein Problem.
Es wird leider immer das vorletzte Bild gesendet.

Hier der Aufruf
"set syno_balkonien snap ",
"sleep 5; set telegrambot sendImage %empfanger% %balkon_bild% "


Die beiden %Variablen% werden mit evalspecials direkt im modul ermittelt.

Es liegt mein user reading full_path aus dem sscamera Modul zu grunde.
Wenn ich das sscamera Modul beobachte, wird das user reading direkt geändert sobald in Telegram der Button gedrückt wird.

Wann werden denn die eval specials berechnet? Es scheint erst wenn das msgModul abgearbeitet wurde.
Dann kommt die Änderung erst beim nöchsten Aufruf zum Tragen.

Lässt sich dies beeinflussen oder gibt es eine idee wie es besser macht und die aktuelle Aufnahme gesendet werden kann.

Grüße
Schnitzelbrain

Grüße Schnitzelbrain
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 29 August 2018, 09:02:53
ZitatLässt sich dies beeinflussen oder gibt es eine idee wie es besser macht und die aktuelle Aufnahme gesendet werden kann.
Moin,
ich habe die Logik fürs Bilder senden in ein dummy + notify ausgelagert, da ich es auch an anderer Stelle nutze.
Such mal nach sleep hier im msgDialog-Thread. Das Thema ist bereits behandelt worden...

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 29 August 2018, 18:44:14
Zitat von: binford6000 am 29 August 2018, 09:02:53
Moin,
ich habe die Logik fürs Bilder senden in ein dummy + notify ausgelagert, da ich es auch an anderer Stelle nutze.
Such mal nach sleep hier im msgDialog-Thread. Das Thema ist bereits behandelt worden...

VG Sebastian

Danke für den Tipp, aber ich konnte es damit nicht Lösen.
Den Sleep hatte ich ja schon drin aber weder Zeitdauer (10 sekunden max) noch position (Vor, hinter dem anderen befehl oder auch einzeln) konnten etwas am Ergebnis ändern.
Sonst hatte ich bezüglich Sleep nix zusätzliches gefunden.

Der Sleep hat wohl verzögert (passend zu den Sekunden) aber es kam trotzdem das vorletzte Bild.

Ich habe jetzt einfach zwei getrennte Befehle geschrieben. Einmal Aufnahme und dann Abfrage.
auch wenn ich direkt nach der Aufnahme auf Versenden drücke kommt jetzt immer das aktuelle Bild.


Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: wolfram am 29 August 2018, 20:31:46
Hallo und guten Abend,

eine kurze Frage an die Experten, denn bei meiner Suche habe ich nicht genau das gefunden, was ich gesucht habe (hoffentlich bin ich hier richtig):

Wenn meine Waschmaschine fertig ist bekomme ich per Telegram eine Nachricht, dass die Waschmaschine fertig ist - super.
Nun ist es aber so, dass ich mich "zwingen" möchte diese auszuräumen. Mit anderen Worten hätte ich gern:

- Einen Dialog, der in bestimmten Intervallen (alle 10) min "nervt", also die Nachricht wieder und wieder versendet, bis ich ein bestimmtes Schlüsselwort, oder ähnliches versendet habe, dass die Waschmaschine ausgeräumt ist.

Hat jemand sowas schon umgesetzt und kann mich auf den Weg bringen?

Liebe Grüße und einen schönen Abend
wolf
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 29 August 2018, 21:46:58
Zitat von: wolfram am 29 August 2018, 20:31:46
Hallo und guten Abend,

eine kurze Frage an die Experten, denn bei meiner Suche habe ich nicht genau das gefunden, was ich gesucht habe (hoffentlich bin ich hier richtig):

Wenn meine Waschmaschine fertig ist bekomme ich per Telegram eine Nachricht, dass die Waschmaschine fertig ist - super.
Nun ist es aber so, dass ich mich "zwingen" möchte diese auszuräumen. Mit anderen Worten hätte ich gern:

- Einen Dialog, der in bestimmten Intervallen (alle 10) min "nervt", also die Nachricht wieder und wieder versendet, bis ich ein bestimmtes Schlüsselwort, oder ähnliches versendet habe, dass die Waschmaschine ausgeräumt ist.

Hat jemand sowas schon umgesetzt und kann mich auf den Weg bringen?

Liebe Grüße und einen schönen Abend
wolf
Hallo,

ich  würde beim auslösen der Telegram Nachricht noch ein Dummy setzen und in einem DOIF auswerten.
Im DOIF dann das attr repeatcmd benutzen.



Grüße Schnitzelbrain
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 30 August 2018, 06:32:07
Oder nach der message ein command "sleep ... $SELF; set $SELF say ..."
Beim abbrechen dann das sleep abbrechen, das steht in der doku zu sleep
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: wolfram am 30 August 2018, 12:40:43
Hallo,
zuerst einmal Danke für die Antworten/Anregungen. Ich versuche mich mich gerade grundsätzlich an den Telegram Dialogen, weil ich die Art der Kommunikation super finde, stehe aber ganz am Anfang der Lernkurve (copy&paste klappt schon ganz gut 8) ).

Zum Thema:
Im Moment schreibe ich in einen Dummy, wenn die Waschmaschine fertig ist. Den prüf ich dann ganz simpel mit einem Notify, das dann die Nachricht versendet:

HR.SpuelmaschineBetrieb:standby set telebot msg 🖐 Die Spülmaschine ist fertig 🖐

Klar, kann ich das Notify um einige Befehle erweitern, das bekomme ich schon hin:

HR.SpuelmaschineBetrieb:standby set telebot msg 🖐 Die Spülmaschine ist fertig 🖐;sleep 10;set telebot msg 🖐 Die Spülmaschine ist fertig und noch nicht ausgeräumt 🖐....usw

Das funktioniert auch. Jetzt hänge ich aber. Wie bekomme ich es 1. hin, dass ich den Dialog nicht 10 x in mein Notify schreiben muss und wie bekomme ich ein Schlüsselwort - gern auch einen Dialog hin, dass ich die Nachrichten abbrechen kann?

Wahrscheinlich ganz einfach, aber ich raff es einfach nicht  :'(

Viele Grüße
wolf
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 30 August 2018, 14:07:49
Zitat von: wolfram am 30 August 2018, 12:40:43
Hallo,
zuerst einmal Danke für die Antworten/Anregungen. Ich versuche mich mich gerade grundsätzlich an den Telegram Dialogen, weil ich die Art der Kommunikation super finde, stehe aber ganz am Anfang der Lernkurve (copy&paste klappt schon ganz gut 8) ).

Zum Thema:
Im Moment schreibe ich in einen Dummy, wenn die Waschmaschine fertig ist. Den prüf ich dann ganz simpel mit einem Notify, das dann die Nachricht versendet:

HR.SpuelmaschineBetrieb:standby set telebot msg [emoji870] Die Spülmaschine ist fertig [emoji870]

Klar, kann ich das Notify um einige Befehle erweitern, das bekomme ich schon hin:

HR.SpuelmaschineBetrieb:standby set telebot msg [emoji870] Die Spülmaschine ist fertig [emoji870];sleep 10;set telebot msg [emoji870] Die Spülmaschine ist fertig und noch nicht ausgeräumt [emoji870]....usw

Das funktioniert auch. Jetzt hänge ich aber. Wie bekomme ich es 1. hin, dass ich den Dialog nicht 10 x in mein Notify schreiben muss und wie bekomme ich ein Schlüsselwort - gern auch einen Dialog hin, dass ich die Nachrichten abbrechen kann?

Wahrscheinlich ganz einfach, aber ich raff es einfach nicht  :'(

Viele Grüße
wolf
Wie ich vorgeschlagen hatte.

Mit einem DOIF.
Im DOIF dann das attr repeatcmd benutzen.

Grüße Schnitzelbrain

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wolle02 am 30 August 2018, 19:56:51
Hallo Igami,

auch von mir zunächst einmal ein dickes "Dankeschön" für dieses Modul. nach einer gewissen Einlese- und Eingewöhnungszeit funktioniert es eigentlich auch sehr gut. Ich habe nur ein kleines "Schönheitsproblem"  ;D
Ich habe beispielsweise folgenden Dialog:

defmod Informationen_dialog msgDialog {\
  "Informationen": {\
    "message": [\
      "(mobile Blitzer|Notdienstapotheke) ",\
      "(%me%) ",\
      "Welche Information wird benötigt?"\
    ],\
\
"mobile Blitzer":{\
  "message": "Aktuelle Blitzer in Deiner Umgebung (Radius: [Blitzer:maxkm] Km):\n\n[Blitzer:PushText]",\
"commands": "set $SELF say @$recipient Informationen"\
},\
\
"Notdienstapotheke": {\
"message": "Folgende Apotheke hat derzeit Notdienst:\n\n[NotdienstApotheke:STATE]",\
"commands": "set $SELF say @$recipient Informationen"\
    }\
  }\
}
attr Informationen_dialog allowed everyone


Funktionieren tut das soweit auch. Irgendwo in diesem Thread habe ich gelesen, dass die "commands" vor den "messages" ausgeführt werden. Das führt nun dazu, dass jedesmal bevor ich die aktuellen Blitzer zugesandt bekomme auch noch einmal die Frage gestellt bekomme "Welche Information wird benötigt?". Das macht an dieser Stelle allerdings gar keinen Sinn, sondern sie sollte sinnigerweise gesendet werden NACHDEM die aktuelle Information übermittelt wurde.
Wie gesagt nur ein Schönheitsproblem, aber gibt es irgendeine Möglichkeit die Reihenfolge wie die Nachrichten kommen zu beeinflussen?

Danke und Gruß
Wolle
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 31 August 2018, 05:57:41
Zitat von: Wolle02 am 30 August 2018, 19:56:51
Wie gesagt nur ein Schönheitsproblem, aber gibt es irgendeine Möglichkeit die Reihenfolge wie die Nachrichten kommen zu beeinflussen?
Du kannst eine message als command verschicken (ungetestet)

"commands": "msg push @$recipient ..."

Wahrscheinlich währe es aber Sinnvoll, wenn ich noch eine Möglichkeit einbaue, dass zu steuern. Neuer Parameter "intro" oder so?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wolle02 am 31 August 2018, 09:15:27
Danke für den Tip.

ZitatDu kannst eine message als command verschicken (ungetestet)


"commands": "msg push @$recipient ..."

Das funtioniert gut. Die Meldungen kommen so in der richtigen Reihenfolge.

ZitatWahrscheinlich währe es aber Sinnvoll, wenn ich noch eine Möglichkeit einbaue, dass zu steuern. Neuer Parameter "intro" oder so?

Eine Möglichkeit das auch über einen Parameter steuern zu können würde wahrscheinlich die Flexibilität erhöhen, wobei ich das nicht wirklich beurteilen kann.

Vielen Dank erstmal an dich.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: wolfram am 31 August 2018, 12:36:00
Vielen Dank für die Eingebungen.

Ich habe es jetzt wie folgt gelöst - kann man bestimmt besser machen, aber es läuft - Danke nochmal. Vielleicht braucht es ja ein Anfänger wie ich nochmal:

1. Ein Dummy der beim Fertigstellen des Waschgangs gesetzt wird:

define Spuelmaschine_telegram dummy
attr Spuelmaschine_telegram eventMap on:voll off:leer
attr Spuelmaschine_telegram room Kueche
attr Spuelmaschine_telegram setList voll leer


2. Einen Message Dialog für Telegram:
define D_Spueli_fertig msgDialog {\
  "Spüli": {\
    "message": [\
      " (Ist die Spülmaschine schon ausgeräumt?) (JA|NEIN) ",\
      "Meldung von 🍽",\
      "Die Spülmaschine ist fertig und kann ausgeräumt werden!"\
    ],\
    "NEIN": {\
      "commands": [\
        "%me%"\
      ]\
    },\
    "JA": {\
      "commands": [\
        "set Spuelmaschine_telegram off",\
        "%me%"\
      ]\
    }\
  }\
}
attr D_Spueli_fertig allowed everyone,wolf
attr D_Spueli_fertig room Dialog


3. Das DOIF
define Spueli_message DOIF ([Spuelmaschine_telegram] eq "voll") (set D_Spueli_fertig say Spüli) DOELSEIF ([Spuelmaschine_telegram] eq "leer") (set telebot msg Sehr gut! 👍🏻 )
attr Spueli_message do always
attr Spueli_message repeatcmd 600
attr Spueli_message room Notify


Viele Grüße und ein schönes Wochenende
wolf

Vielen Dank für die Eingebungen.

Ich habe es jetzt wie folgt gelöst - kann man bestimmt besser machen, aber es läuft - Danke nochmal. Vielleicht braucht es ja ein Anfänger wie ich nochmal:

1. Ein Dummy der beim Fertigstellen des Waschgangs gesetzt wird:

define Spuelmaschine_telegram dummy
attr Spuelmaschine_telegram eventMap on:voll off:leer
attr Spuelmaschine_telegram room Kueche
attr Spuelmaschine_telegram setList voll leer


2. Einen Message Dialog für Telegram:
define D_Spueli_fertig msgDialog {\
  "Spüli": {\
    "message": [\
      " (Ist die Spülmaschine schon ausgeräumt?) (JA|NEIN) ",\
      "Meldung von 🍽",\
      "Die Spülmaschine ist fertig und kann ausgeräumt werden!"\
    ],\
    "NEIN": {\
      "commands": [\
        "%me%"\
      ]\
    },\
    "JA": {\
      "commands": [\
        "set Spuelmaschine_telegram off",\
        "%me%"\
      ]\
    }\
  }\
}
attr D_Spueli_fertig allowed everyone,wolf
attr D_Spueli_fertig room Dialog


3. Das DOIF
define Spueli_message DOIF ([Spuelmaschine_telegram] eq "voll") (set D_Spueli_fertig say Spüli) DOELSEIF ([Spuelmaschine_telegram] eq "leer") (set telebot msg Sehr gut! 👍🏻 )
attr Spueli_message do always
attr Spueli_message repeatcmd 600
attr Spueli_message room Notify


Viele Grüße und ein schönes Wochenende
wolf
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: nanocosmos am 09 September 2018, 12:44:09
Hallo zusammen,

erstmal vielen Dank für das Modul!
Leider scheitere ich schon beim Einrichten.
Habe mich an den Eintrag im Wiki gehalten. Wenn ich nun den meta Dialog einrichten will erscheint:
Usage: define <name> msgDialog {JSON}
'"' expected, at character offset 1 (before "\\   "Hallo": {\\   ...") at ./FHEM/76_msgDialog.pm line 93.


Ich hatte bereits im Thread gelesen, dass das gleiche Problem hatte. Leider stehe ich total auf dem Schlauch, was die Lösung angeht.
ZitatLeerzeichen getrennte Liste von Name=Wert Paaren

Anbei mal meine RAW Definition:
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 ***
attr myMsgConfig msgDialog_evalSpecials me=Hallo\ TelegramBot=***
attr myMsgConfig msgType text
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 3


Könnte mich bitte jemand vom Schlauch schubsen...  ;D
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 09 September 2018, 13:03:44
der \ hinter Hallo muss weg
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: nanocosmos am 09 September 2018, 13:10:00
Hallo,
danke für die schnelle Antwort.
Leider besteht der Fehler weiterhin.
Usage: define <name> msgDialog {JSON}
'"' expected, at character offset 1 (before "\\   "Hallo": {\\   ...") at ./FHEM/76_msgDialog.pm line 93.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 09 September 2018, 13:13:27
Zeig doch mal bitte was du genau einfügen willst.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: nanocosmos am 09 September 2018, 13:19:52
Ich kopiere die Definition des metaDialogs und packe ihn in die Leiste oben im FHEMWeb. Auch wenn ich einen leeren metaDialog anlege und dann in die DEF kopiere, erscheint der gleiche Fehler:
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."\
    ]\
  }\
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 09 September 2018, 17:14:29
Hallo,
du musst den Code in eine RAW Definition packen und dann auf Execute commands klicken  ;)
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: nanocosmos am 09 September 2018, 18:21:02
Vielen Dank, das wars!  :)
Viele Grüße
Daniel
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: nanocosmos am 24 September 2018, 18:16:45
Hallo nochmal,

ich versuche mich in die Synthax für MsgDialog einzuarbeiten. Da bin ich eher schlecht als recht aufgestellt.  ::)
Nun ja: Habe den msgConfig und den meta_Dialog angelegt.
Nun wollte ich mit einem ersten kleinen Dialog testen, leider passiert gar nichts, wenn ich meinem Bot "test" schreibe.

Hier mal die Raw Def vom Dialog:
defmod test msgDialog { "test": {\
    "message": [\
      "Das ist die Antwort"\
    ]\
}\
}
attr test allowed everyone
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: schnitzelbrain am 24 September 2018, 18:22:36
Zitat von: nanocosmos am 24 September 2018, 18:16:45
Hallo nochmal,

ich versuche mich in die Synthax für MsgDialog einzuarbeiten. Da bin ich eher schlecht als recht aufgestellt.  ::)
Nun ja: Habe den msgConfig und den meta_Dialog angelegt.
Nun wollte ich mit einem ersten kleinen Dialog testen, leider passiert gar nichts, wenn ich meinem Bot "test" schreibe.

Hier mal die Raw Def vom Dialog:
defmod test msgDialog { "test": {\
    "message": [\
      "Das ist die Antwort"\
    ]\
}\
}
attr test allowed everyone

Ein Leerzeichen am Ende der message Antwort fehlt.
"Dies ist die Antwort. "



Grüße
Schnitzelbrain
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: nanocosmos am 24 September 2018, 19:47:52
Danke, hat leider aber nichts geändert.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 24 September 2018, 19:59:11
Siehst du denn den Test-Dialog im Meta-Dialog? Und was kommt im Log, wenn du meta und test dialog auf verbose 5 stellst?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: nanocosmos am 24 September 2018, 22:02:13
Ich muss gestehen, dass ich msgDialog noch nicht komplett verstanden habe.
Ich habe es so verstanden, dass eigentlich auf den trigger (Name des Bots) zumindest der metaDialog starten müsste, also "ich kann...".
Passiert aber leider nicht, d.h. ich muss schon bei der config eine Fehler haben..
Habe mich aber eigentlich an den Wiki Eintrag gehalten.

Danke für die Hilfe!

Grüße
Daniel.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 25 September 2018, 08:56:59
Werden Events für eingehende Nachrichten im ROOMMATE device erzeugt? Das ist Voraussetzung für das funktionieren von msgDialog.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: nanocosmos am 25 September 2018, 18:55:14
Äääh.. ROMMATE Device... da war ja was.
Zu­ge­ge­be­ner­ma­ßen habe ich die Anleitung da nicht wirklich durchblickt.
Ich brauche also ein Residents Device?

Vielen Dank für eure (Anfänger-)Hilfe!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 25 September 2018, 19:10:12
Zitat von: nanocosmos am 25 September 2018, 18:55:14
Äääh.. ROMMATE Device... da war ja was.
Zu­ge­ge­be­ner­ma­ßen habe ich die Anleitung da nicht wirklich durchblickt.
Ich brauche also ein Residents Device?

Vielen Dank für eure (Anfänger-)Hilfe!

Steht so alles im Wiki. Einfach mal von oben bis unten durchlesen und schritt für schritt durcharbeiten.

VG Sebastian


Gesendet von iPhone mit Tapatalk
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: nanocosmos am 25 September 2018, 19:14:50
Danke für den Hinweis!
Leider bringt mich der Text im Wiki nicht weiter. Ich weiß ehrlich gesagt nicht, was ich machen soll.
ZitatFür jeden Dialog kann festgelegt werden welche Person dazu berechtigt ist. Dazu sind Geräte vom Typ ROOMMATE oder GUEST mit definiertem msgContactPush Attribut erforderlich. Es ist darauf zu achten, dass das Reading fhemMsgRcvPush ein Event erzeugt. Siehe auch Attribut "allowed" in msgDialog.

Bräucht als Anfänger ein wenig Starthilfe. :-)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 27 September 2018, 12:11:49
Hallo,

du musst erst ein ROOMMATE anlegen, z.B. für deine Person. Im Roommate hinterlegst du deine Telegram ID.

In jeden msgDialog kannst du dann im Reading allowed auswählen wer berechtigt ist.

LG
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: nanocosmos am 27 September 2018, 18:56:32
Hallo,
vielen Dank für den Tipp!!!
Jetzt läuft es.  :)

Viele Grüße
Daniel
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 29 September 2018, 21:25:58
Wie kann man denn den meta-Dialog umbauen, dass er die Dialoge auf 2 Spalten anzeigt?

LG
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 05 Oktober 2018, 10:31:10
Hallo Marlen,
ich glaube das wird schwierig... Wenn es dir um größere Übersicht geht dann vielleicht so:

Mein Meta-Dialog zeigt mir nur diejenigen Dialoge, welche nicht auf .*_fav, .*_sys oder .*_user enden:
    "{return('(' . join(') (', sort(split('\n', fhem('get TYPE=msgDialog:FILTER=NAME!=$SELF:FILTER=NAME!=.*_fav:FILTER=NAME!=.*_sys:FILTER=NAME!=.*_user:FILTER=allowed=.*($recipient|everyone).* trigger')))) . ') ')}",

Diese Dialoge werden dann (als Dialog) so aufgelistet (z.B. Favoriten):
    "{return('(' . join(') (', sort(split('\n', fhem('get TYPE=msgDialog:FILTER=NAME=.*_fav:FILTER=allowed=.*($recipient|everyone).* trigger')))) . ') ')}",

Somit kann ich bereits bei der Benamung neuer Dialoge einer gewissen Struktur folgen.
Im Bild unten zeigen Favoriten, Bewohner und System weitere Dialoge an. Alle anderen sind "normale" Dialoge ohne Namenszusatz.

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 17 Oktober 2018, 21:33:06
Zitat von: Marlen am 17 Oktober 2018, 21:24:04
Hallo,

gefällt mir!!  :)

Wie geht das:

    "{return('(' . join(') (', sort(split('\n', fhem('get TYPE=msgDialog:FILTER=NAME=.*_fav:FILTER=allowed=.*($recipient|everyone).* trigger')))) . ') ')}",


2 oder 3- spaltig?

LG
  Marlen

Danke  :)

Das würde ich auch gerne nutzen. Schafft mehr Platz.

Theoretisch betrachtet müsste das Ergebnis von join() in
(dialog_1|dialog_2)
...
(dialog_n-1|dialog_n)

landen. Aber leider übersteigt das meine bis Dato erlangten PERL-Kenntnisse  :o

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 17 Oktober 2018, 21:54:30
Würde ich auch gerne, aber so auf die Schnelle fällt mir da auch nichts ein :(
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: sku am 19 Oktober 2018, 23:47:52
Hallo zusammen,

ich hab einen Dialog gebaut, den ich leider weder per RAWimport noch def modify im device ändern kann. Es passiert einfach nix, keine Meldung, kein Logeintrag, auch nicht bei verbose 5 des msgDialog device. Füge ich jedoch den code manuell in die fhem.cfg ein, funktioniert alles Fehlerfrei.

Hier der Code:
{
  "Heizung": {
    "message": [
    "(Heizung Text) ",
    "(Heizung Graph) ",
    "(Heizung Hauptschalter) ",
    "(Heizungsabsenkung) ",
    "(SZ Nachtbetrieb) ",
    "(AZ|Bad) ",
    "(SZ|WZ) ",
    "(zurück:%me%|ende) ",
    "Aktuell Soll - Ist:",
    "AZ:  [az_ThstWand_Climate:desired-temp] - [az_ThstWand_Climate:measured-temp].",
    "Bad: [bad_ThstWand_Climate:desired-temp] - [bad_ThstWand_Climate:measured-temp].",
    "SZ:  [sz_ThstWand_Climate:desired-temp] - [sz_ThstWand_Climate:measured-temp].",
    "WZ:  [wz_ThstWand_Climate:desired-temp] - [wz_ThstWand_Climate:measured-temp].",
"Draußen kälter: [raumdurchschnitt:draussenkaelter]"
    ],
    "Heizung Text": {
      "message": [
        "AZ",
        "[az_Thst1_Clima:state]%",
        "[az_ThstWand_Weather:state]%",
        "Bad",
        "[bad_Thst1_Clima:state]%",
        "[bad_ThstWand_Weather:state]%",
        "SZ",
        "[sz_Thst1_Clima:state]%",
        "[sz_ThstWand_Weather:state]%",
        "WZ",
        "[wz_Thst1_Clima:state]%",
        "[wz_Thst2_Clima:state]%",
        "[wz_ThstWand_Weather:state]%"
      ]
},
    "Heizung Graph": {
      "commands": "set %TelegramBot% cmdSend {plotAsPng('SVG_rasp3_DbLog_Heizung')}",
      "message": "Plot"
},
    "Heizung Hauptschalter": {
      "message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"Heizung Hauptschalter: [heizung_rasp3:state]"
      ],
      "einschalten": {
    "commands": [
  "set heizung_rasp3 on",
  "set $SELF say @$recipient Heizung"
        ]
      },
  "ausschalten": {
    "commands": [
  "set heizung_rasp3 off",
  "set $SELF say @$recipient Heizung"
        ]
      }
 
    },
"Heizungsabsenkung": {
      "message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"Heizungsabsenkung: [heizungsabsenkung_rasp3:state]"
      ],
      "einschalten": {
    "commands": [
  "set heizungsabsenkung_rasp3 on",
  "set $SELF say @$recipient Heizung"
        ]
      },
  "ausschalten": {
    "commands": [
  "set heizungsabsenkung_rasp3 off",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
"SZ Nachtbetrieb": {
      "message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"SZ Nachtbetrieb: [sz_nachtbetrieb_rasp3:state]"
      ],
      "einschalten": {
    "commands": [
  "set sz_nachtbetrieb_rasp3 on",
  "set $SELF say @$recipient Heizung"
        ]
      },
  "ausschalten": {
    "commands": [
  "set sz_nachtbetrieb_rasp3 off",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "AZ": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [az_ThstWand_Climate:measured-temp]",
"Soll: [az_ThstWand_Climate:desired-temp]",
"Tag: [az_ThstWand_Climate:R-dayTemp]",
"Nacht: [az_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set az_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "Bad": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [bad_ThstWand_Climate:measured-temp]",
"Soll: [bad_ThstWand_Climate:desired-temp]",
"Tag: [bad_ThstWand_Climate:R-dayTemp]",
"Nacht: [bad_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set bad_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "SZ": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [sz_ThstWand_Climate:measured-temp]",
"Soll: [sz_ThstWand_Climate:desired-temp]",
"Tag: [sz_ThstWand_Climate:R-dayTemp]",
"Nacht: [sz_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set sz_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "WZ": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [wz_ThstWand_Climate:measured-temp]",
"Soll: [wz_ThstWand_Climate:desired-temp]",
"Tag: [wz_ThstWand_Climate:R-dayTemp]",
"Nacht: [wz_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set wz_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "ende": {
      "match": "\/?abbrechen",
  "commands": "deletereading TYPE=msgDialog $recipient_history",
      "message": "Pfiat di!"
    }
  }
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 20 Oktober 2018, 07:53:22
Zitat von: sku am 19 Oktober 2018, 23:47:52
ich hab einen Dialog gebaut, den ich leider weder per RAWimport noch def modify im device ändern kann.
Das spricht ja für ein Fehlverhalten von FHEMWEB.

Zitat von: sku am 19 Oktober 2018, 23:47:52
Es passiert einfach nix, keine Meldung, kein Logeintrag, auch nicht bei verbose 5 des msgDialog device. Füge ich jedoch den code manuell in die fhem.cfg ein, funktioniert alles Fehlerfrei.
Ist denn das allowed Attritbut vergeben?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 20 Oktober 2018, 07:56:14
Moin,
einfach in eine Leere msgDialog Definition einegeben. Läuft.
define test msgDialog {}
Und dann dein Dialog reinkopiert. Kann ihn sofort in Telegram aufrufen.
Vg Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 20 Oktober 2018, 07:59:06
Und wie igami schreibt dass Attribut allowed nicht vergessen.
Ich hab bei mir ein archetype device eingerichtet was das automatisch für mich tut...
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: sku am 22 Oktober 2018, 10:46:55
Vielen Dank für die Antworten, leider war die zündende Idee nicht dabei...
Attribut ist gesetzt.
neues device anlegen und reinkopieren funktioniert bei mir auch nicht, hatte ich schon probiert und jetzt eben wieder.


list, hatte ich vergessen (hier ohne DEF weil das schon weiter oben steht):
   MSGCOMMAND msg push \@$recipients $message
   NAME       Heizung_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         228
   NTFY_ORDER 50-Heizung_Dialog
   STATE      rr_michi: Heizung
   TRIGGER    Heizung
   TYPE       msgDialog
   OLDREADINGS:
   READINGS:
     2018-10-20 16:22:38   state           rr_michi: Heizung
Attributes:
   allowed    everyone
   room       msg


list WEB:
Internals:
   CONNECTS   545
   CSRFTOKEN  csrf_633
   DEF        8083 global
   FD         7
   NAME       WEB
   NR         5
   NTFY_ORDER 50-WEB
   PORT       8083
   STATE      Initialized
   TYPE       FHEMWEB
   READINGS:
     2018-10-18 14:29:17   state           Initialized
Attributes:
   JavaScripts codemirror/fhem_codemirror.js pgm2/fhem_details.js
   allowfrom  127.0.0.1
   confirmDelete 1
   editConfig 1
   longpoll   1
   menuEntries fhem-PC,/fhem,fhem-rasp1,/fhem-rasp1
   stylesheetPrefix dark
   title      { if($FW_room) { "rasp3: $FW_room" } elsif($FW_detail) { "rasp3: $FW_detail" } else { "rasp3" } }
   webname    fhem-rasp3


fhemweb hatte ich auch schon im Verdacht, hatte schon probiert die Attr. JavaScripts und title zu entfernen, leider ohne Erfolg.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 22 Oktober 2018, 11:01:25
Zitatneues device anlegen und reinkopieren funktioniert bei mir auch nicht, hatte ich schon probiert und jetzt eben wieder.
Kommt da eine Fehlermeldung?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: sku am 22 Oktober 2018, 12:07:34
Zitat von: binford6000 am 22 Oktober 2018, 11:01:25
Kommt da eine Fehlermeldung?

nein, keine Meldung, kein Logeintrag...

WEB verbose 5:
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56082 GET /fhem-rasp3/pgm2/jquery-ui.min.css; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56082 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56084 GET /fhem-rasp3/pgm2/jquery.min.js; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56084 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 GET /fhem-rasp3/pgm2/fhemweb.js; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56082 GET /fhem-rasp3/pgm2/doif.js; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56082 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56084 GET /fhem-rasp3/pgm2/fhemweb_readingsGroup.js; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56084 => 304 Not Modified
2018.10.22 12:08:22 4: Connection accepted from WEB_192.168.0.123_56088
2018.10.22 12:08:22 4: WEB_192.168.0.210_56088 GET /fhem-rasp3/pgm2/jquery-ui.min.js; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56088 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 GET /fhem-rasp3/pgm2/darkCommon.css; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 GET /fhem-rasp3/pgm2/dashboard_darkstyle.css; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 => 304 Not Modified
2018.10.22 12:08:23 4: WEB_192.168.0.210_56080 GET /fhem-rasp3/images/default/icoEverything.png; BUFLEN:0
2018.10.22 12:08:23 4: WEB_192.168.0.210_56080 => 304 Not Modified
2018.10.22 12:08:23 4: WEB_192.168.0.210_56082 GET /fhem-rasp3/images/default/fhemicon_dark.png; BUFLEN:0
2018.10.22 12:08:23 4: WEB_192.168.0.210_56082 => 304 Not Modified
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 22 Oktober 2018, 13:20:08
Dein FHEMWEB hat aber nichts mit msgDialog zu tun...  :o
Also zumindest wäre mir dieser Zusammenhang neu...  ;D
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 22 Oktober 2018, 13:24:08
Dein Dialog frisch angelegt mit:
define test msgDialog {}
dann auf DEF und deinen Dialog eingefügt. Speichern. Keine Fehlermeldung. Einmal in Telegram aufgerufen:


Historie löschen
Internals:
   CFGFN     
   DEF        {
  "Heizung": {
    "message": [
    "(Heizung Text) ",
    "(Heizung Graph) ",
    "(Heizung Hauptschalter) ",
    "(Heizungsabsenkung) ",
    "(SZ Nachtbetrieb) ",
    "(AZ|Bad) ",
    "(SZ|WZ) ",
    "(zurück:%me%|ende) ",
    "Aktuell Soll - Ist:",
    "AZ:  [az_ThstWand_Climate:desired-temp] - [az_ThstWand_Climate:measured-temp].",
    "Bad: [bad_ThstWand_Climate:desired-temp] - [bad_ThstWand_Climate:measured-temp].",
    "SZ:  [sz_ThstWand_Climate:desired-temp] - [sz_ThstWand_Climate:measured-temp].",
    "WZ:  [wz_ThstWand_Climate:desired-temp] - [wz_ThstWand_Climate:measured-temp].",
"Draußen kälter: [raumdurchschnitt:draussenkaelter]"
    ],
    "Heizung Text": {
      "message": [
        "AZ",
        "[az_Thst1_Clima:state]%",
        "[az_ThstWand_Weather:state]%",
        "Bad",
        "[bad_Thst1_Clima:state]%",
        "[bad_ThstWand_Weather:state]%",
        "SZ",
        "[sz_Thst1_Clima:state]%",
        "[sz_ThstWand_Weather:state]%",
        "WZ",
        "[wz_Thst1_Clima:state]%",
        "[wz_Thst2_Clima:state]%",
        "[wz_ThstWand_Weather:state]%"
      ]
},
    "Heizung Graph": {
      "commands": "set %TelegramBot% cmdSend {plotAsPng('SVG_rasp3_DbLog_Heizung')}",
      "message": "Plot"
},
    "Heizung Hauptschalter": {
      "message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"Heizung Hauptschalter: [heizung_rasp3:state]"
      ],
      "einschalten": {
    "commands": [
  "set heizung_rasp3 on",
  "set $SELF say @$recipient Heizung"
        ]
      },
  "ausschalten": {
    "commands": [
  "set heizung_rasp3 off",
  "set $SELF say @$recipient Heizung"
        ]
      }
 
    },
"Heizungsabsenkung": {
      "message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"Heizungsabsenkung: [heizungsabsenkung_rasp3:state]"
      ],
      "einschalten": {
    "commands": [
  "set heizungsabsenkung_rasp3 on",
  "set $SELF say @$recipient Heizung"
        ]
      },
  "ausschalten": {
    "commands": [
  "set heizungsabsenkung_rasp3 off",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
"SZ Nachtbetrieb": {
      "message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"SZ Nachtbetrieb: [sz_nachtbetrieb_rasp3:state]"
      ],
      "einschalten": {
    "commands": [
  "set sz_nachtbetrieb_rasp3 on",
  "set $SELF say @$recipient Heizung"
        ]
      },
  "ausschalten": {
    "commands": [
  "set sz_nachtbetrieb_rasp3 off",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "AZ": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [az_ThstWand_Climate:measured-temp]",
"Soll: [az_ThstWand_Climate:desired-temp]",
"Tag: [az_ThstWand_Climate:R-dayTemp]",
"Nacht: [az_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set az_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "Bad": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [bad_ThstWand_Climate:measured-temp]",
"Soll: [bad_ThstWand_Climate:desired-temp]",
"Tag: [bad_ThstWand_Climate:R-dayTemp]",
"Nacht: [bad_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set bad_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "SZ": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [sz_ThstWand_Climate:measured-temp]",
"Soll: [sz_ThstWand_Climate:desired-temp]",
"Tag: [sz_ThstWand_Climate:R-dayTemp]",
"Nacht: [sz_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set sz_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "WZ": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [wz_ThstWand_Climate:measured-temp]",
"Soll: [wz_ThstWand_Climate:desired-temp]",
"Tag: [wz_ThstWand_Climate:R-dayTemp]",
"Nacht: [wz_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set wz_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "ende": {
      "match": "\/?abbrechen",
  "commands": "deletereading TYPE=msgDialog $recipient_history",
      "message": "Pfiat di!"
    }
  }
}
   MSGCOMMAND msg push \@$recipients $message
   NAME       test
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         2076
   NTFY_ORDER 50-test
   STATE      rr_Sebastian: Heizung
   TRIGGER    Heizung
   TYPE       msgDialog
   READINGS:
     2018-10-22 13:16:56   rr_Sebastian_history Heizung
     2018-10-22 13:16:56   state           rr_Sebastian: Heizung
Attributes:
   allowed    rr_Sebastian
   group      Dialoge
   icon       dialog
   room       91_Dialogsteuerung


Was mir auffällt: Bei dir fehlt das reading <ROOMMATE>_history -> wird vom Meta-Dialog wieder gelöscht.
Und bei mir gibt es kein OLDREADINGS.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: nanocosmos am 01 November 2018, 16:46:12
Da ich nicht das Rad neu erfinden wollte bzw. geringe Kentnisse in Perl habe, wollte ich einen Heizungs Dialog hier aus dem Thread verwenden.
Erstmal danke für die tolle Vorarbeit.

Leider habe ich zwei Fehler:
1. Es wird immer nur mein Büro geschaltet, auch wenn ich als Zimmer beispielsweise Wohnzimmer wähle. Meine sehr rudimentären Kentnisse in Perl haben mir leider nicht weitergeholfen den Fehler zu finden.


{
"1. Heizung": {
"match": "Raumtemperaturen",
"message": [
"(Schlafzimmer) (Bücherzimmer|Wohnzimmer) (Küche|Bad unten) (Büro Daniel|Büro Lisa) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Küche|Schlafzimmer|Wohnzimmer|Büro Daniel|Büro Lisa|Esszimmer)",
"commands": "setreading $SELF $recipient_Room $message",
"message": [
"(10.0|12.0|16.0|17.0) ",
"(17.5|18.0|18.5|19.0) ",
"(19.5|20.0|20.5|21.0) ",
"(21.5|22.0|22.5|23.0) ",
"(abbrechen) ",
"Heizung im $message einstellen"
],
"Temperatur": {
"match": "on|off|[0-2][0-9][:.]([0]|[5])",
"commands": [
"{my $temp = $message;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; my $clima = ($room==\"Büro Daniel\"?\"dz_heizung_Clima\": ($room==\"Esszimmer\"?\"ez_heizung_Clima\":($room==\"Schlafzimmer\"?\"sz_heizung_Clima\":($room==\"Wohnzimmer\"?\"wz_heizung_Clima\":\"\"))));;;; fhem (\"set $clima desired-temp $temp\") }"
],
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; return \"Temperatur im $room auf $message eingestellt.\";;;; }"
]
}
}
  }
}


2. Ich habe, um die aktuellen Temperaturen zu erhalten, die Änderung an der 99myUtils.pm vorgenommen.
Dies klappt auch wunderbar, doch nach 1-2 Tagen erscheint immer die Fehlermeldung:
Undefined subroutine &main:: telegramBotGetRoomTemperatureListMessage called at (eval 4421) line 1.

Wenn ich die 99myUtils öffne und ohne Änderung nochmal speichere, funktioniert es wieder, d.h. die Raumtemperaturen werden geschickt.


sub telegramBotGetRoomTemperatureListMessage()
{
my $tempDaniel = ReadingsVal("dz_heizung_Clima", "measured-temp", "0");
my $desiredTempDaniel = ReadingsVal("dz_heizung_Clima", "desired-temp", "0");
my $tempLisa = ReadingsVal("lz_heizung_Clima", "measured-temp", "0");
my $desiredTempLisa = ReadingsVal("lz_heizung_Clima", "desired-temp", "0");
my $tempBadunten = ReadingsVal("bz_heizung_Clima", "measured-temp", "0");
my $desiredBadunten = ReadingsVal("bz_heizung_Clima", "desired-temp", "0");
my $tempKueche = ReadingsVal("HZ_KUECHE", "measured-temp", "0");
my $desiredTempKueche = ReadingsVal("HZ_KUECHE", "desired-temp", "0");
my $tempSchlafzimmer = ReadingsVal("sz_heizung_Clima", "measured-temp", "0");
my $desiredTempSchlafzimmer = ReadingsVal("sz_heizung_Clima", "desired-temp", "0");
my $tempWohnzimmer = ReadingsVal("wz_heizung_Clima", "measured-temp", "0");
my $desiredTempWohnzimmer = ReadingsVal("wz_heizung_Clima", "desired-temp", "0");
my $tempBuecher = ReadingsVal("bz_heizung", "measured-temp", "0");
my $desiredTempBuecher = ReadingsVal("bz_heizung", "desired-temp", "0");
my $tempEsszimmer = ReadingsVal("ez_heizung", "measured-temp", "0");
my $desiredTempEsszimmer = ReadingsVal("ez_heizung", "desired-temp", "0");
my $returnMessage = "- 1. Stock -\n";
$returnMessage .= "Daniel: $tempDaniel °C (-> $desiredTempDaniel °C)\n";
$returnMessage .= "Lisa: $tempLisa °C (-> $desiredTempLisa °C)\n";
$returnMessage .= "Schlafz.: $tempSchlafzimmer °C (-> $desiredTempSchlafzimmer °C)\n";
$returnMessage .= "- Erdgeschoss -\n";
$returnMessage .= "Bad unten: $tempBadunten °C (-> $desiredBadunten °C)\n";
$returnMessage .= "Bücherzimmer: $tempBuecher °C (-> $desiredTempBuecher °C)\n";
$returnMessage .= "Esszimmer: $tempEsszimmer °C (-> $desiredTempEsszimmer °C)\n";
$returnMessage .= "Wohnzimmer: $tempWohnzimmer °C (-> $desiredTempWohnzimmer °C)\n";


return $returnMessage;
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 01 November 2018, 21:45:48
Hallo,

Zu 1:
my $clima = ($room==\"Büro Daniel\"?\"dz_heizung_Clima\": ($room==\"Esszimmer\"?\"ez_heizung_Clima\":($room==\"Schlafzimmer\"?\"sz_heizung_Clima\":($room==\"Wohnzimmer\"?\"wz_heizung_Clima\":\"\"))));;;;

Der Rest nach "Büro Daniel" wird wohl nicht mehr ausgewertet. Da mein PERL auch noch in Level 2-3 steckt würde ich hier klassisches if/elsif verwenden.
Was ich definitiv besser lesen kann als die Kurzform...  :o

Zu 2:
Das liegt wohl eher nicht an msgDialog. Aber ich probier es einfach nochmal am Wochenende aus.

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 02 November 2018, 11:22:31
Hallo nochmal,
probier mal den hier:
{
"1. Heizung": {
"match": "Raumtemperaturen",
"message": [
"(Schlafzimmer|Büro Daniel) (Esszimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Esszimmer|Schlafzimmer|Wohnzimmer|Büro Daniel)",
"commands": "setreading $SELF $recipient_Room $message",
"message": [
"(10.0|12.0|16.0|17.0) ",
"(17.5|18.0|18.5|19.0) ",
"(19.5|20.0|20.5|21.0) ",
"(21.5|22.0|22.5|23.0) ",
"(abbrechen) ",
"Heizung im $message einstellen"
],
"Temperatur": {
"match": "on|off|[0-2][0-9][:.]([0]|[5])",
"commands": [
"{my $temp = $message;;;; my $clima;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; if ($room eq \"Büro Daniel\") {$clima = \"dz_heizung_Clima\";;;;} elsif ($room eq \"Esszimmer\") {$clima = \"ez_heizung_Clima\";;;;} elsif ($room eq \"Schlafzimmer\") {$clima = \"sz_heizung_Clima\";;;;} elsif ($room  eq \"Wohnzimmer\") {$clima = \"wz_heizung_Clima\";;;;} fhem (\"set $clima desired-temp $temp\") }" ],
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; return \"Temperatur im $room auf $message eingestellt.\";;;; }"
]
}
}
  }
}


VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: nanocosmos am 02 November 2018, 15:27:01
Vielen Dank!!!
Hat super funktioniert. :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Smarti am 06 Januar 2019, 12:12:18
Hallo,

ich versuche gerade den Dialog mit der Einkaufsliste zu erweitern, komme aber nicht weiter... meine Perl Kenntnisse sind eher rudimentär, kenne eigentlich eher C.

Dabei der eigentliche Dialog von igami:

Zitat von: igami am 12 Oktober 2017, 20:18:13
[..]
Ich nutze PostMe mit msgDialog, aber ohne TBot_List

defmod Einkaufsliste_Dialog msgDialog { \
  "Einkaufsliste": {\
    "message": [\
      "(Waren hinzufügen) ", \
      "(Waren entfernen) ", \
      "(einkaufen) ", \
      "(abbrechen) ",\
      "{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
    ],\
    "Waren hinzufügen": {\
      "message": [\
        "Bitte jede Ware als neue Nachricht hinzufügen.",\
        "Das hinzufügen von Waren durch \"/beenden\" beenden."\
      ],\
      "Ware hinzufügen": {\
        "match": "[^/]+",\
        "commands": [\
          "set %PostMe% add %list% $message",\
          "setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen"\
        ]\
      }\
    },\
    "Waren entfernen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'beenden'). ') ')}",\
        "Welche Ware möchtest du entfernen?"\
      ],\
      "Ware entfernen": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|Waren entfernen"\
        ]\
      }\
    },\
    "einkaufen": {\
      "commands": [\
        "setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"\
      ],\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(beenden) ",\
        "Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
      ]\
    },\
    "noch einzukaufen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(beenden) ",\
        "Noch einzukaufen:"\
      ],\
      "Ware eingekauft": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|noch einzukaufen"\
        ]\
      }\
    }    \
  }\
}
attr Einkaufsliste_Dialog evalSpecials PostMe=PostMe\
list=Einkaufsliste



Ich habe nun eine Erweiterung geschrieben um alle bestehenden Listen auszulesen:


defmod test_Dialog msgDialog {\
  "Listen": {\
    "message": [\
      "{my $content = ReadingsVal('%PostMe%', 'postmeCnt', '');;my $list;; my @a;; for my $i (0..$content) { $list = 'postme'.sprintf('%02i',$i).'Name';; push(@a,ReadingsVal('%PostMe%',$list,''));;};; return('Keine Listen vorhanden') unless(@a);; return (join(',',@a));;}"\
    ]\
}\
}

attr test_Dialog evalSpecials PostMe=PostIt



Nun will / sollten diese vergleichbar wie bei "Ware entfernen" als Buttons zurückgegeben werden, damit dann bei der "Einkaufliste" eingestiegen werden kann.

Kann mir da jemand weiterhelfen...

Bin über Optimierungen in meinem Code auch offen.

THX
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: l2r am 11 Januar 2019, 09:42:09
moin zusammen,

hat sich in seit dem Wochenende irgendwas geändert?
Bei mir scheint der msgDialog nicht mehr auf die Trigger zu reagieren. Kann das noch jemand bestätigen?

Außerdem habe ich noch eine Frage:
Ich möchte gerne Pushover als default für msg benutzer und zusätzlich für msgDialog dann Telegram. Ich habe mir also testweise im globalmsg folgendes gesetzt:
attr msgDialog_msgCommand msg \@Telegram:\@$recipients $message
ist das korrekt? Leider bekomme ich keine Antworten auf meine Trigger, egal ob ich das Attribut jetzt setze oder nicht. Aktuell steht msgContactPush wieder auf Telegram. Leider bekomme ich auch hier keine Nachrichten.

EDIT: scheint jetzt wieder zu laufen. Ich hab aber keine Ahnung woran es gelegen hat ;-)

Gruß Michael
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 11 Januar 2019, 10:57:16
ZitatEDIT: scheint jetzt wieder zu laufen. Ich hab aber keine Ahnung woran es gelegen hat ;-)

Moin Michael,
als ich deinen Post gelesen habe hat es bei mir auch nicht funktioniert. Siehe Log-Auszug:
2019.01.11 10:15:57 3: get TYPE=msgDialog:FILTER=NAME!=metaDialog:FILTER=NAME!=.*_fav:FILTER=NAME!=.*_sys:FILTER=NAME!=.*_user:FILTER=allowed=.*(rr_Sebastian|everyone).* trigger : 01.⭐️...Favoriten...⭐️
02.💡Beleuchtung💡
03.👩🏼..Bewohner..👩🏻
05.🛠....System....🛠
06.⚠️....Notfall.....⚠️
07.⏰....Wecker.....⏰
04.💡...Lampen....💡
08.🚧.....Staus.....🚧
2019.01.11 10:15:57 3: TelegramBot_Callback fhembot: resulted in Callback returned error :Bad Request: there is no text in the message to edit: from SendIt
2019.01.11 10:15:57 3: TelegramBot_Callback fhembot: No retry for (ret: Callback returned error :Bad Request: there is no text in the message to edit:) for msg 260868921 :
Hallo Sebastian!
Ich kann das für dich tun:


Nach einem FHEM-Update gehts jetzt auch wieder bei mir. Ohn Callback returned error...
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: l2r am 11 Januar 2019, 11:34:51
hi,

meine Dialoge laufen wieder, nur leider bekomme ich es nicht hin, dass nur für die Dialoge Telegram benutzt wird, für alles andere Pushover, da ich ja bei meinem Resident im Attribut msgContactPush auch Telegram setzen muss. Alle meine Versuche im globalMsg die Syntax für den Befehl zu ändern sind leider fehlgeschlagen. Jemand noch ne Idee?

Gruß Michael
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: l2r am 11 Januar 2019, 13:08:07
hallo zusammen,

einen Vorschlag hätte ich:

Wie wäre es, wenn es bei den Residents ein weiteres Attribut msgDialog_msgContactPush geben würde, in das ich dann Telegram eintragen würde.
Von der Handhabung müsste man dann zuerst dieses Attribut abfragen und wenn es nicht gesetzt ist, msgContactPush benutzen. Dann funktionieren nach wie vor alle bestehenden Configs und ich könnte meinen Spezialfall auch abdecken.

Gruß Michael
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 11 Januar 2019, 16:41:17
Zitat von: l2r am 11 Januar 2019, 09:42:09
moin zusammen,

hat sich in seit dem Wochenende irgendwas geändert?
Bei mir scheint der msgDialog nicht mehr auf die Trigger zu reagieren. Kann das noch jemand bestätigen?

Außerdem habe ich noch eine Frage:
Ich möchte gerne Pushover als default für msg benutzer und zusätzlich für msgDialog dann Telegram. Ich habe mir also testweise im globalmsg folgendes gesetzt:
attr msgDialog_msgCommand msg \@Telegram:\@$recipients $message
ist das korrekt? Leider bekomme ich keine Antworten auf meine Trigger, egal ob ich das Attribut jetzt setze oder nicht. Aktuell steht msgContactPush wieder auf Telegram. Leider bekomme ich auch hier keine Nachrichten.

EDIT: scheint jetzt wieder zu laufen. Ich hab aber keine Ahnung woran es gelegen hat ;-)

Gruß Michael
Mit dem Routing von verschiedenen Diensten habe ich mich nicht befasst, dazu bitte den Maintainer von msg befragen. Generell ist das von dir gewählte Attribut aber die richtige stelle zum anpassen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 16 Januar 2019, 20:49:35
Hallo,

ich hätte mal wieder paar Fragen:

Kann man in commands irgendwie mit if arbeiten?

So etwa:

"commands": [
"{my $Liste = '$message';;;; fhem(\"if ($Liste eq 'kompl.Essen - Liste') {setreading $SELF gewliste $message}\")}"
],


Kann man irgendwie im Code kommentieren?

LG
Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 17 Januar 2019, 06:00:27
Sowohl perl if als auch FHEM IF sollten sich normal anwenden lassen (habe aber grad kein Beispiel parat).

Auskommentieren ist aktuell nicht möglich, da dann das json nicht richtig erkannt wird.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 17 Januar 2019, 12:01:15
Hat vielleicht jemand anders ein Beispiel?

LG
  Marlen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 17 Januar 2019, 12:08:50
Zitat von: Marlen am 17 Januar 2019, 12:01:15
Hat vielleicht jemand anders ein Beispiel?

LG
  Marlen

Hier gabs mal was mit Heizungssteuerung. Das ist daraus und funktioniert soweit:
"commands": ["{my $temp = $message;;;; my $clima;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; if ($room eq \"Büro Daniel\") {$clima = \"dz_heizung_Clima\";;;;} elsif ($room eq \"Esszimmer\") {$clima = \"ez_heizung_Clima\";;;;} elsif ($room eq \"Schlafzimmer\") {$clima = \"sz_heizung_Clima\";;;;} elsif ($room  eq \"Wohnzimmer\") {$clima = \"wz_heizung_Clima\";;;;} fhem (\"set $clima desired-temp $temp; msg push $clima $temp\") }"],

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Marlen am 18 Januar 2019, 12:07:24
Zitat von: binford6000 am 17 Januar 2019, 12:08:50
Hier gabs mal was mit Heizungssteuerung. Das ist daraus und funktioniert soweit:
"commands": ["{my $temp = $message;;;; my $clima;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; if ($room eq \"Büro Daniel\") {$clima = \"dz_heizung_Clima\";;;;} elsif ($room eq \"Esszimmer\") {$clima = \"ez_heizung_Clima\";;;;} elsif ($room eq \"Schlafzimmer\") {$clima = \"sz_heizung_Clima\";;;;} elsif ($room  eq \"Wohnzimmer\") {$clima = \"wz_heizung_Clima\";;;;} fhem (\"set $clima desired-temp $temp; msg push $clima $temp\") }"],

VG Sebastian

Danke!  :-*
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: trixer am 25 Januar 2019, 14:31:19
Problem mit dem Auslesen von Variablen im msgDialog
Hallo zusammen,
so langsam gehen mir die Ideen aus. Ich habe ein Problem mit dem Auslesen von Werten über ReadingsVal.
Was ich tun möchte:
Ich baue mir derzeit einen Dialog für Telegram auf. Neben der Steuerung der Beleuchtung und (sehr einfachen) Squeezebox-Player Befehlen möchte ich nun die Wettervorhersage abrufen. Das ist in dem Post von Tiroso ganz gut sehen.
In meinem Wetter-Dialog habe ich im ersten Schritt folgendermaßen versucht, ein Bild des aktuellen Wetters zu senden:
"commands": "set Telegram sendImage /opt/fhem/www/images/default/weather/".ReadingsVal('WessumWetter','icon','0').".png" ,\
Das führt zu folgendem JSON-Fehler
, or ] expected while parsing array, at character offset 715 (before ".ReadingsVal('Wessum...") at ./FHEM/76_msgDialog.pm line 93.
Diverse unterschiedliche Versuche (mit \ vorm ", ' statt " schlugen fehl.
Mein letzter Versuch war das Ganze über Variablensubstitution zu machen:
    "Wetter morgen":{\
    "commands":[\
      "{my $wi = ReadingsVal(%VAR%, %WIP%, '0')}",\
      "set Telegram message %wi%"\
    ],\
    "message":[\
      "(%me%) ",\
      "Das Wetter von morgen: {my $wi = ReadingsVal(%VAR%, %WIP%, '0')} "\
    ]\
    },\
    "Wetterdaten aktualisieren":{\
    "commands": "set WessumWetter update",\
    "message":[\
      "(%me%) ",\
      "Aktualisierung Wetterdaten angefragt."\
    ]\
   }\
    }\
}
attr wetter_Dialog allowed Trixer, everyone
attr wetter_Dialog evalSpecials VAR=Variablenspeicher\
WIP=WEATHER_ICON_PATH
attr wetter_Dialog room Messages

Das ist zwar syntaktisch korrekt, die Variablen werden aber nciht aufgelöst.
Ich hoffe mal auf einen klassischen Anfängerfehler und bitte um Erleuchtung.

Schönen Dank und Gruß
Trixer
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 25 Januar 2019, 21:34:04
Moin,
leider kann ich nur vom handy antworten, daher auch erst eine späte Antwort. Versuch mal folgendes, wie gesagt mit Handy getippt und nicht getestet, daher evtl. auch nicht ohne Fehler.

senden:
"commands": "{fhem(\"set Telegram sendImage /opt/fhem/www/images/default/weather/\".ReadingsVal(\"WessumWetter\",\"icon\",\"0\").\".png\"}" ,\


Ich denke du hast ganz am Ende die schließenden Anführungszeichen vergessen.

Ausserdem bitte code immer in die Codetags setzen. Dass macht es uns einfacher den code zu lesen.

Viele Grüße,
Dirk
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: trixer am 25 Januar 2019, 23:14:35
Nabend,

vielen Dank für deine - wie ich finde - schnelle Antwort.
Auf die Code-Tags werde ich ab sofort achten. - Sorry.
Syntaktisch ist deine Ausführung korrekt. Allerdings sind das scheinbar zu viele Anführungszeichen.
Ich vermute
"{fhem...
führt dazu, dass der Befehl gar nicht ausgeführt wird. Zumindest sehe ich auch im Event Monitor nichts.
Nehme ich diese Anführungsstriche weg, also
"commands": {fhem(\"set Telegram sendImage /opt/fhem/www/images/default/weather/\".ReadingsVal(\"WessumWetter\",\"icon\",\"0\").\".png\"} ,\
bekomme ich wieder den JSON-Fehler
'"' expected, at character offset 431 (before "fhem(\\"set Telegram...") at ./FHEM/76_msgDialog.pm line 93.
Dieses Problem verfolgt mich...

Viele Grüße
Mark

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 26 Januar 2019, 13:36:47
Deine untere Variante verstösst gegen die Regeln, wie ein json aufgebaut sein muss. Die Anführungszeichen sind Pflicht.
Wenn du keine Fehler im Log siehst wird der Befehl voraussichtlich ausgeführt, und es gibt ein anderes Problem, dass du kein Bild gesendet bekommst. Ein Event wird dabei ja meines Wissens auch nicht erzeugt, daher kein Output im Eventmonitor. Was passiert denn, wenn du den set-Befehl direkt in die fhem-Befehlszeile eingibst? Vielleicht feheln Leserechte auf die Bilddatei? Gibt es die Datei überhaupt?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: trixer am 26 Januar 2019, 14:59:22
Hi Dirk,
die Datei existiert und die Zugriffsrechte sind auch ok.
Über den Befehle
set Telegram sendImage /opt/fhem/www/images/default/weather/mostlycloudy.png
wird das Bild versendet.
Der folgende Befehl in die Kommandozueile eingegeben liefert auch genau diesen Pfad als Ergebnis:
{ ReadingsVal("Variablenspeicher", "WEATHER_ICON_PATH", "NixDa1") . ReadingsVal("WessumWetter", "icon", "NixDa2") . ReadingsVal("Variablenspeicher", "WEATHER_ICON_TYPE", "NixDa3") }
Nur leider gelingt es mir nicht, die beiden Befehle zu kombinieren.
Gruß
Mark
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 26 Januar 2019, 15:25:14
Hi Mark,

Dann könnte es noch an irgendeinem Leerzeichen an unpassender Stelle liegen. Hast du schon eine 99_myUtils.pm? Darin neue Funktion anlegen und aus dem Dialog aufrufen.
Das wäre meiner Meinung nach die einfachste Variante das Problem weiter einzugrenzen. Darin kannst du dann auch alles mit Logausgaben zupflastern.
VG,
Dirk
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: trixer am 26 Januar 2019, 15:33:17
Zitat von: Wuehler am 26 Januar 2019, 15:25:14
Hi Mark,

Dann könnte es noch an irgendeinem Leerzeichen an unpassender Stelle liegen. Hast du schon eine 99_myUtils.pm? Darin neue Funktion anlegen und aus dem Dialog aufrufen.
Das wäre meiner Meinung nach die einfachste Variante das Problem weiter einzugrenzen. Darin kannst du dann auch alles mit Logausgaben zupflastern.
VG,
Dirk
Hi Dirk,
das mach ich heute Abend mal.
Danke
Mark

Gesendet von meinem LG-H870 mit Tapatalk

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: trixer am 26 Januar 2019, 20:02:57
Hi Dirk,
habe das jetzt mal auf die Schnelle in die 99_myUtils.pm ausgelagert.
So hat es funktioniert. Ich werde aber noch mal auf die API von openweathermap schauen müssen und das Ganze etwas liebevoller gestalten aber das ist ein anderes Thema.
Es sieht jetzt so aus (Textarray habe ich nur interessehalber aufgebaut):

############################################################################
###                 Hilfsroutine für SendImage                           ###
############################################################################

sub MsgSendImage ($)
{
    my ($msgText) = @_;
Log(3,'Übergabe an MsgSendImage: ' . $msgText);
    my @msgTextarray = split(/.*:\s/, $msgText);
    my $msgTextTeil1 = $msgTextarray[1];
    my $msgTextTeil2 = split(/;/, $msgTextTeil1);

  if ($msgText eq "Wetterjetzt") {
    fhem "set Telegram sendImage /opt/fhem/www/images/default/weather/".ReadingsVal('WessumWetter','icon','0').".png Das Wetter jetzt: "
  .ReadingsVal('WessumWetter','current_date_time','0')." ".ReadingsVal('WessumWetter','condition','0')." "
  .ReadingsVal('WessumWetter','temp_c','0')."C° ".ReadingsVal('WessumWetter','humidity','0')."% "
  .ReadingsVal('WessumWetter','wind_condition','0');
  }elsif ($msgText eq "Wetterprognose") {
    fhem "set Telegram sendImage /opt/fhem/www/images/default/weather/".ReadingsVal('WessumWetter','hfc1_icon','0').".png Das Wetter am: "
  .ReadingsVal('WessumWetter','hfc1_pubDate','0')." ".ReadingsVal('WessumWetter','hfc1_condition','0')." Min:"
  .ReadingsVal('WessumWetter','hfc1_tempLow','0')."C° Max: ".ReadingsVal('WessumWetter','hfc1_tempHigh','0')."C° ";

  }else  {
      fhem "set Telegram message Keine Wetterdaten vorhanden!"
  }
}


...und Aufruf im msdDialog entsprechend:
    "Wetter jetzt":{\
    "commands": "{ MsgSendImage('Wetterjetzt') }",\
    "message":[\
      "(%me%) ",\
      "Aktuelles Wetter."\
    ]\
    },\
    "Wetter Prognose":{\
"commands": "{ MsgSendImage('Wetterprognose') }" ,\
    "message":[\
      "(%me%) ",\
      "Das Wetter von heute."\
    ]\
    },\
    "Wetterdaten aktualisieren":{\
    "commands": "set WessumWetter update",\
    "message":[\
      "(%me%) ",\
      "Aktualisierung Wetterdaten angefragt."\
    ]\
}\
    }\
}


Danke für den Tipp!

Schönes Wochenende
Mark
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: jazzor am 02 Februar 2019, 23:28:52
Guten Abend zusammen,

kann man die Menüeinträge löschen?
Ich nutze den Metadialog als Hauptmenü und wenn ich dann per abbrechen - egal an welchem Punkt - den Dialog abbreche, bekomme ich zwar die Antwort "Dialog abgebrochen" aber die Menüeinträge bleiben sicht- und klickbar.
Ich hatte im Kopf, dass die sich auch mal ausblendeten, bin mir aber nicht sicher. Hat jemand eine Idee?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 03 Februar 2019, 08:31:49
Zitat von: jazzor am 02 Februar 2019, 23:28:52
Guten Abend zusammen,

kann man die Menüeinträge löschen?
Ich nutze den Metadialog als Hauptmenü und wenn ich dann per abbrechen - egal an welchem Punkt - den Dialog abbreche, bekomme ich zwar die Antwort "Dialog abgebrochen" aber die Menüeinträge bleiben sicht- und klickbar.
Ich hatte im Kopf, dass die sich auch mal ausblendeten, bin mir aber nicht sicher. Hat jemand eine Idee?
Du benutzt inline keyboards? Ich selbst nutze die nicht, aber es gibt die Möglichkeit Nachrichten zu verändern.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: jazzor am 03 Februar 2019, 10:47:58
Zitat von: igami am 03 Februar 2019, 08:31:49
Du benutzt inline keyboards? Ich selbst nutze die nicht, aber es gibt die Möglichkeit Nachrichten zu verändern.
Tatsächlich nutze ich die normalen Keyboards.
Anbei mal zwei Bilder, um das Problem  zu verdeutlichen.
Nachdem ich abbrechen eingegeben habe, wird das Keyboard nicht ausgeblendet, und ich war mir sicher, dass es früher ausgeblendet wurde.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 05 Februar 2019, 18:56:47
Moin,

Ich denke du könntest dem Keyboard den Parameter one_time_keyboard mitgeben oder den Key ReplyKeyboardRemove verwenden.
Siehe
https://core.telegram.org/bots/api (https://core.telegram.org/bots/api)

VG,
Dirk

Edit: Ist noch ein ToDo  (https://forum.fhem.de/index.php/topic,38328.msg545796.html#msg545796)im TelegramBot. Vielleicht kannst du Viegener ja unterstützen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: jazzor am 06 Februar 2019, 21:32:32
Zitat von: Wuehler am 05 Februar 2019, 18:56:47
Moin,

Ich denke du könntest dem Keyboard den Parameter one_time_keyboard mitgeben oder den Key ReplyKeyboardRemove verwenden.
Siehe
https://core.telegram.org/bots/api (https://core.telegram.org/bots/api)

VG,
Dirk

Edit: Ist noch ein ToDo  (https://forum.fhem.de/index.php/topic,38328.msg545796.html#msg545796)im TelegramBot. Vielleicht kannst du Viegener ja unterstützen

Habe gerade mal mit verbose 5 auf meinem TelegramBot-Device mitgeloggt, als ich den meta-Dialog aus dem wiki frisch aufgerufen habe.

2019.02.06 21:27:13 5: TelegramBot_Set Telegram: called
2019.02.06 21:27:13 4: TelegramBot_Set Telegram: Processing TelegramBot_Set( message )
2019.02.06 21:27:13 4: TelegramBot_MakeKeyboard Telegram: json :{"keyboard":[["Tankstelle"],["abbrechen"]],"one_time_keyboard":true}: is utf8? yes
2019.02.06 21:27:13 4: TelegramBot_MakeKeyboard Telegram: json downgraded :{"keyboard":[["Tankstelle"],["abbrechen"]],"one_time_keyboard":true}: is utf8? no
2019.02.06 21:27:13 5: TelegramBot_Set Telegram: start send for cmd :message: and sendType :0:
2019.02.06 21:27:13 5: TelegramBot_SendIt Telegram: called
2019.02.06 21:27:13 5: TelegramBot_SendIt Telegram: try to send message to :############: -:
Ich kann folgendes für dich tun:: - add :{"keyboard":[["Tankstelle"],["abbrechen"]],"one_time_keyboard":true}: - replyid :<undef>::    options ::

Wie man sieht, wird "one_time_keyboard":true mitgesendet.
Um den Fehler dann weiter einzugrenzen, habe ich das Menü mit der portable Variante von Telegram am PC getestet, aber da scheint alles zu  funktionieren.
Ich gehe also momentan davon aus, dass es ein Bug in der iOs Version von Telegram ist.
Kann das jemand bestätigen oder alternativ widerlegen?
Vielen Dank!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: perez am 21 Februar 2019, 19:41:04
Erst mal vielen Dank an igami für das nette Modul.
Ich habe inzwischen mehrere Dialoge erstellt funktioniert alles bestens.
Allerdings frage ich mich, ob es möglich wäre nach absetzen der commands ein weiteren commands sofort hinterher zu senden, ohne erst ins Menü zu wechseln. Ich denke da an Lautstärke, wenn die z.B. zu laut gewählt wurdeund man diese mit absetzen erneuten commands auf passenden Wert bringt? Danke.

Hier ein Ausschnitt:
"Player":{
    "message":[
   "(0%|5%|10%|15%|20%) ",
   "(25%|30%|35%|40%|45%) ",
   "(50%|55%|60%|65%|70%) ",
   "(75%|80%|85%|90%|100%) ",
    "(abbrechen|zurück) ",
    "Bitte die Laustärke wählen"
  ],
  "0%":{
  "commands": "set Player_XY volume 0",
  "message":[
      "(%me%) ",
    "Lautstärke wurde verändert"
  ]   
   },
"5%":{
  "commands": "set Player_XY volume 5",
  "message":[
      "(%me%) ",
    "Lautstärke wurde verändert"
  ]   
   },
"10%":{
  "commands": "set Player_XY volume 10",
  "message":[
      "(%me%) ",
    "Lautstärke wurde verändert"
  ]   
   },
"15%":{
  "commands": "set Player_XY volume 15",
  "message":[
      "(%me%) ",
    "Lautstärke wurde verändert"
  ]   
   }
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Smarti am 21 Februar 2019, 23:17:06
Hallo,

ich tobe mich gerade am Einkaufs Dialog aus, ich möchte / habe dieser erweitert. Allerdings habe ich noch ein Perl Verständnis Problem.

Ich lasse mir die Listen auflisten und kann eine auswählen, diese "merke" ich mir mit einem setreading. Nun benötige ich diese Liste wieder an diversen stellen dieses lese ich entweder durch ein ReadingsVal oder [$SELF:reading] zurück.

Allerdings kann ich nicht $SELF nutzen, da sonst einen error bekomme "Bareword "PostIt_Dialog" not allowed". Mir ist klar, dass dies mit dem Gültigkeitsbereich der Variable zusammenhängt, aber wie bekomme ich dies universell gelöst?

Momentan tut der Dialog, allerdings nur wenn ich $SELF durch den entsprechend Dialog Namen ersetze, ich möchte dies aber universell haben...


defmod PostIt_Dialog msgDialog { "Listen": {\
    "message": [\
  "{my $content = ReadingsVal('%PostMe%', 'postmeCnt', '');;my $list;; my @a;; for my $i (0..$content) { $list = 'postme'.sprintf('%02i',$i).'Name';; push(@a,ReadingsVal('%PostMe%',$list,''));;};; foreach (@a) {$content .= '('.$_.') ';;};;return('Keine Listen vorhanden') unless(@a);; return ($content);;}",\
  "Bitte eine Liste auswählen:"\
  ],\
\
  "Einkaufsliste": {\
  "match": "^(?!beenden).+",\
"commands": "setreading $SELF list $message",\
"message": [\
  "(Waren hinzufügen) ", \
  "(Waren entfernen) ", \
  "(einkaufen) ", \
  "(abbrechen) ",\
  "{my $content = (split(': ', fhem('get %PostMe% list '.ReadingsVal('PostIt_Dialog','list',''))))[1];;;; return('Keine Einträge vorhanden in \"[$SELF:list]\"') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
],\
"Waren hinzufügen": {\
  "message": [\
"Bitte jede Ware als neue Nachricht hinzufügen.",\
"Das hinzufügen von Waren durch \"/beenden\" beenden."\
  ],\
  "Ware hinzufügen": {\
"match": "[^/]+",\
"commands": [\
  "set %PostMe% add [$SELF:list] $message",\
  "setreading $SELF $recipient_history Listen|Einkaufsliste|Waren hinzufügen"\
]\
  }\
},\
"Waren entfernen": {\
  "message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list '.ReadingsVal('PostIt_Dialog','list',''))))[1]), 'beenden'). ') ')}",\
"Welche Ware möchtest du entfernen?"\
  ],\
  "Ware entfernen": {\
"match": "^(?!beenden).+",\
"commands": [\
  "set %PostMe% remove [$SELF:list] $message",\
  "set $SELF say @$recipient Listen|Einkaufsliste|Waren entfernen"\
]\
  }\
},\
"einkaufen": {\
  "commands": [\
"setreading $SELF $recipient_history Listen|Einkaufsliste|noch einzukaufen"\
  ],\
  "message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list '.ReadingsVal('PostIt_Dialog','list',''))))[1])) . ') ')}",\
"(beenden) ",\
"Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
  ]\
},\
"noch einzukaufen": {\
  "message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list '.ReadingsVal('PostIt_Dialog','list',''))))[1])) . ') ')}",\
"(beenden) ",\
"Noch einzukaufen:"\
  ],\
  "Ware eingekauft": {\
"match": "^(?!beenden).+",\
"commands": [\
  "set %PostMe% remove [$SELF:list] $message",\
  "set $SELF say @$recipient Listen|Einkaufsliste|noch einzukaufen"\
]\
  }\
}    \
  }\
}\
}
attr PostIt_Dialog allowed rr_xxx,rr_yyy
attr PostIt_Dialog evalSpecials PostMe=PostIt
attr PostIt_Dialog group Dialog
attr PostIt_Dialog room Einkaufsliste,msg

setstate PostIt_Dialog rr_yyy: Toom
setstate PostIt_Dialog 2019-02-21 23:05:29 list Toom
setstate PostIt_Dialog 2019-02-21 23:05:29 state rr_yyy: Toom


Edit: Habe noch das History set $SELF say @$recipient Listen|Einkaufsliste|noch einzukaufen angepasst, damit der Dialog "läuft"
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 22 Februar 2019, 06:27:45
Zitat von: perez am 21 Februar 2019, 19:41:04
Allerdings frage ich mich, ob es möglich wäre nach absetzen der commands ein weiteren commands sofort hinterher zu senden, ohne erst ins Menü zu wechseln. Ich denke da an Lautstärke, wenn die z.B. zu laut gewählt wurdeund man diese mit absetzen erneuten commands auf passenden Wert bringt?
Dafür muss das "history"-Reading passend mit einem command gesetzt werden:

"setreading $SELF $recipient_history [i:$SELF:TRIGGER]|<Pfad zur passenden Stelle>"
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 24 Februar 2019, 13:54:26
Hallo zusammen.
Ich versuche mir gerade einen Dialog zu bauen, indem ich Stausinformationen vom System erhalte.
Aber er funktioniert jetzt schon nicht, weil ich immer eine Fehlermeldung beim speichern erhalte, irgendwas mit den Klammern stimmt da nicht aber mir wills nicht in den Schädel, was ich falsch mache. Kann mal bitte einer von Euch drauf schauen und mir sagen, wo mein Fehler ist. Danke.


defmod status_Dialog msgDialog {"Systeminformationen":{\
  "message": [\
    "(Fenster) ",\
    "(Batterien Fenster) ",\
    "(Batterien Heizung) ",\
    "(Netzwerk) ",\
    "(System) ",\
    "TelegramBot_MTYPE=queryInline (%me%) ",\
    "Welche Informationen:"\
  ],\
    "Fenster":{\
    "message":[\
      "{return('(Wohnzimmer links) ') if(ReadingsVal('W_WOHN_L', 'state', ''))}",\
      "{return('(Wohnzimmer mitte) ') if(ReadingsVal('W_WOHN_M', 'state', ''))}",\
      "{return('(Wohnzimmer rechts) ') if(ReadingsVal('W_WOHN_R', 'state', ''))}",\
      "{return('(Büro links) ') if(ReadingsVal('W_BUERO_L', 'state', ''))}",\
      "{return('(Büro rechts) ') if(ReadingsVal('W_BUERO_R', 'state', ''))}",\
      "{return('(Küche links) ') if(ReadingsVal('W_KUECHE_L', 'state', ''))}",\
      "{return('(Küche rechts) ') if(ReadingsVal('W_KUECHE_R', 'state', ''))}",\
      "{return('(Schlafzimmer links) ') if(ReadingsVal('W_BED_L', 'state', ''))}",\
      "{return('(Schlafzimmer rechts) ') if(ReadingsVal('W_BED_R', 'state', ''))}",\
      "(zurück) ",\
      "TelegramBot_MTYPE=queryInline (%me%) "\
    ],\
    },\
    "Batterien Fenster":{\
    "message":[\
      "{return('(Wohnzimmer links) ') if(ReadingsVal('W_WOHN_L', 'batteryState', ''))}",\
      "{return('(Wohnzimmer mitte) ') if(ReadingsVal('W_WOHN_M', 'batteryState', ''))}",\
      "{return('(Wohnzimmer rechts) ') if(ReadingsVal('W_WOHN_R', 'batteryState', ''))}",\
      "{return('(Büro links) ') if(ReadingsVal('W_BUERO_L', 'batteryState', ''))}",\
      "{return('(Büro rechts) ') if(ReadingsVal('W_BUERO_R', 'batteryState', ''))}",\
      "{return('(Küche links) ') if(ReadingsVal('W_KUECHE_L', 'batteryState', ''))}",\
      "{return('(Küche rechts) ') if(ReadingsVal('W_KUECHE_R', 'batteryState', ''))}",\
      "{return('(Schlafzimmer links) ') if(ReadingsVal('W_BED_L', 'batteryState', ''))}",\
      "{return('(Schlafzimmer rechts) ') if(ReadingsVal('W_BED_R', 'batteryState', ''))}",\
      "(zurück) ",\
      "TelegramBot_MTYPE=queryInline (%me%) "\
    ],\
    },\
    "Batterien Heizung":{\
    "message":[\
      "{return('(Wohnzimmer) ') if(ReadingsVal('HZ_WOHNZ', 'battery', ''))}",\
      "{return('(Büro) ') if(ReadingsVal('HZ_BUERO', 'battery', ''))}",\
      "{return('(Küche) ') if(ReadingsVal('HZ_KUECHE', 'battery', ''))}",\
      "{return('(Schlafzimmer) ') if(ReadingsVal('HZ_BED', 'battery', ''))}",\
      "(zurück) ",\
      "TelegramBot_MTYPE=queryInline (%me%) "\
    ],\
    },\
   }\
}\
}
attr status_Dialog allowed rr_Marcus
attr status_Dialog room Telegram
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Smarti am 24 Februar 2019, 15:14:40
Zitat von: ErzGabriel am 24 Februar 2019, 13:54:26
Hallo zusammen.
Ich versuche mir gerade einen Dialog zu bauen, indem ich Stausinformationen vom System erhalte.
Aber er funktioniert jetzt schon nicht, weil ich immer eine Fehlermeldung beim speichern erhalte, irgendwas mit den Klammern stimmt da nicht aber mir wills nicht in den Schädel, was ich falsch mache. Kann mal bitte einer von Euch drauf schauen und mir sagen, wo mein Fehler ist. Danke.


defmod status_Dialog msgDialog {"Systeminformationen":{\
  "message": [\
    "(Fenster) ",\
    "(Batterien Fenster) ",\
    "(Batterien Heizung) ",\
    "(Netzwerk) ",\
    "(System) ",\
    "TelegramBot_MTYPE=queryInline (%me%) ",\
    "Welche Informationen:"\
  ],\
    "Fenster":{\
    "message":[\
      "{return('(Wohnzimmer links) ') if(ReadingsVal('W_WOHN_L', 'state', ''))}",\
      "{return('(Wohnzimmer mitte) ') if(ReadingsVal('W_WOHN_M', 'state', ''))}",\
      "{return('(Wohnzimmer rechts) ') if(ReadingsVal('W_WOHN_R', 'state', ''))}",\
      "{return('(Büro links) ') if(ReadingsVal('W_BUERO_L', 'state', ''))}",\
      "{return('(Büro rechts) ') if(ReadingsVal('W_BUERO_R', 'state', ''))}",\
      "{return('(Küche links) ') if(ReadingsVal('W_KUECHE_L', 'state', ''))}",\
      "{return('(Küche rechts) ') if(ReadingsVal('W_KUECHE_R', 'state', ''))}",\
      "{return('(Schlafzimmer links) ') if(ReadingsVal('W_BED_L', 'state', ''))}",\
      "{return('(Schlafzimmer rechts) ') if(ReadingsVal('W_BED_R', 'state', ''))}",\
      "(zurück) ",\
      "TelegramBot_MTYPE=queryInline (%me%) "\
    ],\
    },\
    "Batterien Fenster":{\
    "message":[\
      "{return('(Wohnzimmer links) ') if(ReadingsVal('W_WOHN_L', 'batteryState', ''))}",\
      "{return('(Wohnzimmer mitte) ') if(ReadingsVal('W_WOHN_M', 'batteryState', ''))}",\
      "{return('(Wohnzimmer rechts) ') if(ReadingsVal('W_WOHN_R', 'batteryState', ''))}",\
      "{return('(Büro links) ') if(ReadingsVal('W_BUERO_L', 'batteryState', ''))}",\
      "{return('(Büro rechts) ') if(ReadingsVal('W_BUERO_R', 'batteryState', ''))}",\
      "{return('(Küche links) ') if(ReadingsVal('W_KUECHE_L', 'batteryState', ''))}",\
      "{return('(Küche rechts) ') if(ReadingsVal('W_KUECHE_R', 'batteryState', ''))}",\
      "{return('(Schlafzimmer links) ') if(ReadingsVal('W_BED_L', 'batteryState', ''))}",\
      "{return('(Schlafzimmer rechts) ') if(ReadingsVal('W_BED_R', 'batteryState', ''))}",\
      "(zurück) ",\
      "TelegramBot_MTYPE=queryInline (%me%) "\
    ],\
    },\
    "Batterien Heizung":{\
    "message":[\
      "{return('(Wohnzimmer) ') if(ReadingsVal('HZ_WOHNZ', 'battery', ''))}",\
      "{return('(Büro) ') if(ReadingsVal('HZ_BUERO', 'battery', ''))}",\
      "{return('(Küche) ') if(ReadingsVal('HZ_KUECHE', 'battery', ''))}",\
      "{return('(Schlafzimmer) ') if(ReadingsVal('HZ_BED', 'battery', ''))}",\
      "(zurück) ",\
      "TelegramBot_MTYPE=queryInline (%me%) "\
    ],\
    },\
   }\
}\
}
attr status_Dialog allowed rr_Marcus
attr status_Dialog room Telegram


Wenn's "nur" an den Klammer liegt, versuche es mal hiermit https://jsonformatter.org/json-parser (https://jsonformatter.org/json-parser), hilft mir immer...
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: perez am 27 Februar 2019, 19:34:53
@ ErzGabriel:
Falls noch aktuell. Im Skript waren zu viele Kommas und Klammern..


defmod status_Dialog msgDialog {"Systeminformationen":{
  "message": [
    "(Fenster) ",
    "(Batterien Fenster) ",
    "(Batterien Heizung) ",
    "(Netzwerk) ",
    "(System) ",
    "TelegramBot_MTYPE=queryInline (%me%) ",
    "Welche Informationen:"
  ],
    "Fenster":{
    "message":[
      "{return('(Wohnzimmer links) ') if(ReadingsVal('W_WOHN_L', 'state', ''))}",
      "{return('(Wohnzimmer mitte) ') if(ReadingsVal('W_WOHN_M', 'state', ''))}",
      "{return('(Wohnzimmer rechts) ') if(ReadingsVal('W_WOHN_R', 'state', ''))}",
      "{return('(Büro links) ') if(ReadingsVal('W_BUERO_L', 'state', ''))}",
      "{return('(Büro rechts) ') if(ReadingsVal('W_BUERO_R', 'state', ''))}",
      "{return('(Küche links) ') if(ReadingsVal('W_KUECHE_L', 'state', ''))}",
      "{return('(Küche rechts) ') if(ReadingsVal('W_KUECHE_R', 'state', ''))}",
      "{return('(Schlafzimmer links) ') if(ReadingsVal('W_BED_L', 'state', ''))}",
      "{return('(Schlafzimmer rechts) ') if(ReadingsVal('W_BED_R', 'state', ''))}",
      "(zurück) ",
      "TelegramBot_MTYPE=queryInline (%me%) "
    ]
    },
    "Batterien Fenster":{
    "message":[
      "{return('(Wohnzimmer links) ') if(ReadingsVal('W_WOHN_L', 'batteryState', ''))}",
      "{return('(Wohnzimmer mitte) ') if(ReadingsVal('W_WOHN_M', 'batteryState', ''))}",
      "{return('(Wohnzimmer rechts) ') if(ReadingsVal('W_WOHN_R', 'batteryState', ''))}",
      "{return('(Büro links) ') if(ReadingsVal('W_BUERO_L', 'batteryState', ''))}",
      "{return('(Büro rechts) ') if(ReadingsVal('W_BUERO_R', 'batteryState', ''))}",
      "{return('(Küche links) ') if(ReadingsVal('W_KUECHE_L', 'batteryState', ''))}",
      "{return('(Küche rechts) ') if(ReadingsVal('W_KUECHE_R', 'batteryState', ''))}",
      "{return('(Schlafzimmer links) ') if(ReadingsVal('W_BED_L', 'batteryState', ''))}",
      "{return('(Schlafzimmer rechts) ') if(ReadingsVal('W_BED_R', 'batteryState', ''))}",
      "(zurück) ",
      "TelegramBot_MTYPE=queryInline (%me%) "
    ]
    },
    "Batterien Heizung":{
    "message":[
      "{return('(Wohnzimmer) ') if(ReadingsVal('HZ_WOHNZ', 'battery', ''))}",
      "{return('(Büro) ') if(ReadingsVal('HZ_BUERO', 'battery', ''))}",
      "{return('(Küche) ') if(ReadingsVal('HZ_KUECHE', 'battery', ''))}",
      "{return('(Schlafzimmer) ') if(ReadingsVal('HZ_BED', 'battery', ''))}",
      "(zurück) ",
      "TelegramBot_MTYPE=queryInline (%me%) "
    ]
    }
   }

[/code]
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: perez am 27 Februar 2019, 19:36:18
Zitat von: igami am 22 Februar 2019, 06:27:45
Dafür muss das "history"-Reading passend mit einem command gesetzt werden:

"setreading $SELF $recipient_history [i:$SELF:TRIGGER]|<Pfad zur passenden Stelle>"


Danke!! Versuche so umzusetzen:)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 28 Februar 2019, 05:16:49
@perez
Ja, Thema ist noch aktuell und ich danke Dir fürs überarbeiten.
Könntest Du mit das mit dem set history bitte mal erklären? Danke.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: TM4889 am 02 März 2019, 09:45:12
Ich stehe gerade etwas auf dem Schlauch bei dem Inline-Keyboard. Im Meta Dialog wird %me% als Inline-Keyboard angezeigt, jedoch funktioniert nichts wenn ich drauf klicke. Habe auch schon bereits "(%me%:%me%)" ausprobiert, ohne erfolgt. Kann mir jemand von euch weiterhelfen und schauen was ich bei meiner Definition übersehen habe?


mein Meta Dialog

Internals:
   CFGFN      /opt/fhem/config_cfg/Test-Funktionen.cfg
   DEF        {
"%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%:%me%) ",
"Dialog beendet."
]
}
}
   FUUID      5c7a3f7e-f33f-31dd-5434-13278f6e258f01b3
   MSGCOMMAND msg push \@$recipients $message
   NAME       Main_MsgDialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         1294
   NTFY_ORDER 50-Main_MsgDialog
   STATE      rr.Marcus: abbrechen
   TRIGGER    Beenden,Zurück,Abbrechen,start
   TYPE       msgDialog
   OLDREADINGS:
   READINGS:
     2019-03-02 09:33:44   state           rr.Marcus: abbrechen
Attributes:
   allowed    everyone



mein Roommate
Internals:
   CFGFN      /opt/fhem/config_cfg/Homestatus_rgr.Bewohner_rr.Marcus.cfg
   CHANGED   
   DEF        rgr.Bewohner
   DURATIONTIMER 1551515955.04479
   FUUID      5c7a3f80-f33f-31dd-38bd-24b10b168609b931
   NAME       rr.Marcus
   NOTIFYDEV  global,BT_Tag.Marcus
   NR         1421
   NTFY_ORDER 50-rr.Marcus
   READY      1
   RESIDENTGROUPS rgr.Bewohner
   STATE      ???
   TYPE       ROOMMATE
   VERSION    20_ROOMMATE.pm:v0.0.18681/2019-02-21
   READINGS:
     2019-02-21 19:59:52   durTimerAbsence 00:00:00
     2019-02-21 19:59:52   durTimerAbsence_cr 0
     2019-02-21 19:59:52   durTimerPresence 00:00:00
     2019-02-21 19:59:52   durTimerPresence_cr 0
     2019-02-21 19:59:52   durTimerSleep   00:00:00
     2019-02-21 19:59:52   durTimerSleep_cr 0
     2019-03-02 09:33:45   fhemMsgPush     (start)
Dialog abgebrochen.
     2019-03-02 09:33:45   fhemMsgPushGw    TelegramBot:@XXXXXXXXX:OK
     2019-03-02 09:33:45   fhemMsgPushPrio 0
     2019-03-02 09:33:45   fhemMsgPushState 1
     2019-03-02 09:33:45   fhemMsgPushTitle -
     2019-03-02 09:33:44   fhemMsgRcvPush  abbrechen
     2019-03-02 09:33:44   fhemMsgRcvPushGw TelegramBot
     2019-03-02 09:33:45   fhemMsgState    1
     2019-03-02 09:33:45   fhemMsgStateTypes push:1
   TIMER:
     rr.Marcus_DurationTimer:
       HASH       rr.Marcus
       MODIFIER   DurationTimer
       NAME       rr.Marcus_DurationTimer
Attributes:
   alias      Marcus
   devStateIcon .*zuhause:user_available:absent .*anwesend:user_available:absent .*abwesend:user_away:home .*verreist:user_ext_away:home .*bettfertig:scene_toilet:asleep .*schlaeft:scene_sleeping:awoken .*aufgestanden:scene_sleeping_alternat:home .*:user_unknown:home
   eventMap   home:zuhause absent:abwesend gone:verreist gotosleep:bettfertig asleep:schlaeft awoken:aufgestanden
   group      Bewohner
   icon       people_sensor
   msgContactPush TelegramBot:@XXXXXXXXX
   room       Homestatus
   rr_presenceDevices BT_Tag.Marcus
   rr_realname alias
   webCmd     state
   widgetOverride state:zuhause,bettfertig,schlaeft,aufgestanden,abwesend,verreist



mein Bot
Internals:
   CFGFN      /opt/fhem/config_cfg/Service_Message.cfg
   CHANGED   
   DEF       
   FAILS      0
   FUUID      5c7a3f7b-f33f-31dd-11ca-d411b41fea09434f
   NAME       TelegramBot
   NR         761
   OLD_POLLING 12
   POLLING    12
   SNAME      TelegramBot
   STATE      Polling
   TYPE       TelegramBot
   UPDATER    0
   WAIT       0
   me         XXXXXXXXX:SmartHomeCCU:@SmartHomeCCU_bot
   offset_id  XXXXXXXXX
   sentLastResult SUCCESS
   sentMsgId  2880
   sentMsgOptions
   sentMsgPeer Marcus
   sentMsgPeerId XXXXXXXXX
   sentMsgResult SUCCESS
   sentMsgText
Dialog abgebrochen.
   AliasCmds:
   Contacts:
     XXXXXXXXX  XXXXXXXXX:Marcus:
   HU_DO_PARAMS:
     NAME       
     addr       https://api.telegram.org:443
     auth       0
     boundary   TelegramBot_boundary-x0123
     buf       
     code       200
     compress   1
     conn       
     data       
     displayurl <hidden>
     header     agent: TelegramBot/1.0
User-Agent: TelegramBot/1.0
Accept: application/json
Accept-Charset: utf-8
Content-Type: multipart/form-data; boundary=TelegramBot_boundary-x0123
     hideurl    1
     host       api.telegram.org
     httpheader HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Sat, 02 Mar 2019 08:33:45 GMT
Content-Type: application/json
Content-Length: 266
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
     hu_blocking 0
     hu_filecount 1
     hu_port    443
     hu_portSfx
     loglevel   4
     method     POST
     path       /bot780003243:AAHZZpvq-uKMarNXYzVCeOL8H3PFuFktofc/sendMessage
     protocol   https
     redirects  0
     timeout    30
     url        https://api.telegram.org/bot780003243:AAHZZpvq-uKMarNXYzVCeOL8H3PFuFktofc/sendMessage
     args:
       XXXXXXXXX
Dialog abgebrochen.
       {"inline_keyboard":[[{"callback_data":"start","text":"start"}]]}
       0
       undef
       
       1
     hash:
     sslargs:
   HU_UPD_PARAMS:
     FD         11
     NAME       
     addr       https://api.telegram.org:443
     auth       0
     buf       
     code       200
     compress   1
     displayurl <hidden>
     header     agent: TelegramBot/1.0
User-Agent: TelegramBot/1.0
Accept: application/json
Accept-Charset: utf-8
     hideurl    1
     host       api.telegram.org
     hu_blocking 0
     hu_filecount 11
     hu_port    443
     hu_portSfx
     isPolling  update
     loglevel   4
     method     GET
     offset     XXXXXXXXX
     path       /bot780003243:AAHZZpvq-uKMarNXYzVCeOL8H3PFuFktofc/getUpdates?offset=200413272&limit=5&timeout=120
     protocol   https
     redirects  0
     timeout    245
     url        https://api.telegram.org/bot780003243:AAHZZpvq-uKMarNXYzVCeOL8H3PFuFktofc/getUpdates?offset=200413272&limit=5&timeout=120
     hash:
     sslargs:
   READINGS:
     2019-03-02 09:31:55   Contacts        XXXXXXXXX:Marcus:
     2019-03-02 00:00:48   PollingErrCount 0
     2019-02-21 19:58:33   PollingLastError NonBlockingGet timed out on read from <hidden> after 245s
     2019-03-02 08:59:52   StoredCommands  FHEM set WZ.HKTH.001_Control controlMode auto
start

     2019-03-02 09:33:44   msgChat         Marcus
     2019-03-02 09:33:44   msgChatId       XXXXXXXXX
     2019-03-02 09:33:44   msgFileId       
     2019-03-02 09:33:44   msgId           2879
     2019-03-02 09:33:44   msgPeer         Marcus
     2019-03-02 09:33:44   msgPeerId       XXXXXXXXX
     2019-03-02 09:33:44   msgReplyMsgId   
     2019-03-02 09:33:44   msgText         abbrechen
     2019-03-02 09:33:44   prevMsgChat     Marcus
     2019-03-02 09:33:44   prevMsgFileId   
     2019-03-02 09:33:44   prevMsgId       2877
     2019-03-02 09:33:44   prevMsgPeer     Marcus
     2019-03-02 09:33:44   prevMsgPeerId   XXXXXXXXX
     2019-03-02 09:33:44   prevMsgReplyMsgId
     2019-03-02 09:33:44   prevMsgText     Berechtigungen
     2019-03-02 09:33:46   queryData       start
     2019-03-02 09:33:46   queryID         2961880442298486279
     2019-03-02 09:33:46   queryPeer       Marcus
     2019-03-02 09:33:46   queryPeerId     XXXXXXXXX
     2019-03-02 09:33:46   queryReplyMsgId 2880
     2019-03-02 09:33:45   sentMsgId       2880
     2019-03-02 09:33:45   sentMsgPeerId   XXXXXXXXX
     2019-03-02 09:33:45   sentMsgResult   SUCCESS
   inlinechats:
   sentQueue:
Attributes:
   alias      Telegram
   allowUnknownContacts 0
   cmdFavorites /cmd
   cmdKeyword FHEM
   cmdRestrictedPeer XXXXXXXXX
   defaultPeer XXXXXXXXX
   event-on-change-reading state
   event-on-update-reading msgText
   favorites  /[WZTemp_20]=set WZ.HKTH.001_Clima desired-temp 20.0;
/[WZTemp_23]=set WZ.HKTH.001_Clima desired-temp 23.0;
/[BADTemp_20]=set BAD.HKTH.001_Clima desired-temp 20.0;
/[BADTemp_25]=set BAD.HKTH.001_Clima desired-temp 25.0;
   favorites2Col 1
   group      Message-Service
   parseModeSend 1_Markdown
   pollingTimeout 120
   room       System
   utf8Special 1
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 02 März 2019, 09:50:19
Moin,
dein msgConfig device wäre noch interessant...
Und hast du schon eigene Dialoge erstellt?

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: TM4889 am 02 März 2019, 10:06:23
Ich habe bereits eigene Dialoge erstellt, unter anderem auch einen mit einem Ziffernblock, welcher ebenfalls über ein Inline-Keyboard laufen soll.

mein msgConfig
Internals:
   CFGFN      /opt/fhem/config_cfg/Service_Message.cfg
   FUUID      5c7a46ae-f33f-31dd-4d29-eca3aac0bf5c581b
   NAME       globalMsg
   NOTIFYDEV  TYPE=(Jabber|TelegramBot|yowsup)
   NR         752
   NTFY_ORDER 50-globalMsg
   STATE      ???
   TYPE       msgConfig
   VERSION    75_msgConfig.pm:v0.0.18681/2019-02-21
   READINGS:
     2019-02-28 19:58:36   fhemMsgPush     (%me%) aaaa
     2019-02-28 19:58:36   fhemMsgPushGw   TelegramBot:OK
     2019-02-28 19:58:36   fhemMsgPushPrio 0
     2019-02-28 19:58:36   fhemMsgPushState 1
     2019-02-28 19:58:36   fhemMsgPushTitle -
     2019-02-28 19:58:36   fhemMsgState    1
     2019-02-28 19:58:36   fhemMsgStateTypes push:1 forwards:text>push
Attributes:
   group      Global
   msgContactPush TelegramBot
   msgDialog_evalSpecials me=start
TelegramBot=TelegramBot
   room       System
   userattr   msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 02 März 2019, 10:13:51
Der cmdalias "message2queryEditInline" ist auch nicht disabled?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: TM4889 am 02 März 2019, 10:23:57
Zitat von: binford6000 am 02 März 2019, 10:13:51
Der cmdalias "message2queryEditInline" ist auch nicht disabled?

Ist dieser notwendig? Dieser ist doch nur zum Versenden und nicht zum Empfang notwendig. Oder liege ich da falsch?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 02 März 2019, 10:35:37
Ich schalte mit einem notify von normal auf Inline Keyboard um:
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");
  }
}

Wobei ich das ewig nicht mehr gemacht habe. Finde gerade das Inline Keyboard bei Telegram super!
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: TM4889 am 02 März 2019, 10:43:35
Zitat von: binford6000 am 02 März 2019, 10:35:37
Ich schalte mit einem notify von normal auf Inline Keyboard um:
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");
  }
}

Wobei ich das ewig nicht mehr gemacht habe. Finde gerade das Inline Keyboard bei Telegram super!
VG Sebastian

Siehe meine vorherige Antwort #604
Ich schalte im MsgDialog auf Inline um, in dem ich vor den Button "TelegramBot_MTYPE=queryInline" setze. Das funktioniert auch soweit, nur bekomm ich es nicht hin, dass der MsgDialog auf "queryData" vom TelegramBot triggert.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 02 März 2019, 10:52:45
Hmm da kann ich dir leider nicht weiterhelfen.
Aber vielleicht haben die anderen msgDialog-Junkies noch eine Idee...  ;)
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: TM4889 am 02 März 2019, 11:15:44
Habe mir e mal etwas genauer angeschaut. Der MsgDialog trigger nur auf "TYPE=(ROOMMATE|GUEST)"-Devices, also nicht direkt auf den TelegramBot. Somit müsste der Fehler doch im ROOMMATE Device liegen? Aber laut Logfile triggert ROOMATE auf nicht auf die queryData vom Bot.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 02 März 2019, 11:19:14
Dann probier mal
attr rr.Marcus event-on-update-reading fhemMsgRcvPush
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: TM4889 am 02 März 2019, 11:39:12
Zitat von: binford6000 am 02 März 2019, 11:19:14
Dann probier mal
attr rr.Marcus event-on-update-reading fhemMsgRcvPush
VG Sebastian

Bringt auch nichts, da die queryData vom Bot nicht in das Reading geschrieben werden.

Fehler gefunden 😏
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wolle02 am 02 März 2019, 17:24:48
ZitatFehler gefunden 😏

Und möchtest du vielleicht gerne andere User, die eventuell das gleiche Problem haben an deiner Lösung teilhaben lassen?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: TM4889 am 03 März 2019, 00:05:48
Zitat von: Wolle02 am 02 März 2019, 17:24:48
Und möchtest du vielleicht gerne andere User, die eventuell das gleiche Problem haben an deiner Lösung teilhaben lassen?

Gern, die Fehlerquelle saß wie so oft vorm Bildschirm  :-\

attr TelegramBot event-on-change-reading state
attr TelegramBot event-on-update-reading msgText


Da war es kein Wunder, dass nichts auf "queryData" getriggert wurde.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: toensi am 10 März 2019, 10:06:35
Hallo zusammen,
ich würde gerne das Modul mit Pushbullet nutzen, bekommen jedoch immer eine Fehlermeldung beim Gateway, please help :=)

fhemMsgPushGw Pushbullet:UNDEFINED aber es ist doch da :
5c592822-f33f-c225-5839-14874032f9cbcbb6
LAST_PUSH   2019-03-10 09:27:57 NAME  push  NR  73 STATE Initialized TYPE Pushbullet Readings state Initialized

Besten Dank vorab ! :=)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 10 März 2019, 17:37:38
Zitat von: toensi am 10 März 2019, 10:06:35
Hallo zusammen,
ich würde gerne das Modul mit Pushbullet nutzen, bekommen jedoch immer eine Fehlermeldung beim Gateway, please help :=)

fhemMsgPushGw Pushbullet:UNDEFINED aber es ist doch da :
5c592822-f33f-c225-5839-14874032f9cbcbb6
LAST_PUSH   2019-03-10 09:27:57 NAME  push  NR  73 STATE Initialized TYPE Pushbullet Readings state Initialized

Besten Dank vorab ! :=)
also geht der msg Befehl schon nicht? Dann bitte an den Maintainer von msg wenden
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 13 April 2019, 09:23:44
Hallo,

Ich wollte die Begrüßung etwas freundlicher gestalten.
So in der Art ,,Hallo Gerhard, was kann ich für dich tun?"

Dazu hätte ich einfach die Rückmeldung im meta_Dialog ändern wollen:
"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) ')}",\
      "'Hallo ' . ReadingsVal($recipient, 'group','') . ', was kann ich für dich tun?'"\
    ]\


Damit sollte entweder mein Name oder der meiner Frau erscheinen.
Tut es aber nicht.
Wenn ich statt $recipient rr_Gerhard schreibe, dann kommt folgende Meldung im Telelgramn:
'Hallo ' . ReadingsVal(rr_Gerhard, 'group','') . ', was kann ich für dich tun?'

Könnte mir da bitte jemand helfen?
Danke, Lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 13 April 2019, 10:55:12
Zitat von: gestein am 13 April 2019, 09:23:44
Könnte mir da bitte jemand helfen?
Die zweite Zeile auch noch mit {} versehen
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 13 April 2019, 20:24:43
Also wenn ich folgendes schreibe, reagiert das System gar nicht mehr:
"{'Hallo ' . [$recipient:group] . ', was kann ich für dich tun?'}"

Als log-Eintrag erscheint:
2019.04.13 18:42:56.268 1: No match: 'msgText: Marvis'
2019.04.13 18:42:56.271 1: Nothing to do: msgText: Marvis


Der Wert "group" ist nämlich ein Attribut, da kann ReadingsVal nicht helfen.

Was mache ich falsch?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 13 April 2019, 22:14:12
Du hast nun zwei Änderungen gleichzeitig gemacht. Jede für sich sollte funktionieren, zusammen aber nicht.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 14 April 2019, 12:48:21
Manchmal sieht man den Wald vor lauter Bäumen nicht mehr.
Bei einem Roommate ist "group" kein Reading, sondern ein Attribut. Daher muss ich ja AttrVal nehmen.

Für alle, die das auch haben möchten, hier die richtige Zeile:
"{'Hallo ' . AttrVal('$recipient', 'group','') . ', was kann ich für dich tun?'}"

Danke und lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 14 April 2019, 20:44:05
Hallo,

nachdem die Begrüßung nun funktioniert ;) , bin ich dabei mir einen Dialog zu basteln, der alle Lampen auf meiner Terrasse schaltet.
Das funktioniert auch schon ganz gut.

Manchmal passiert es, dass die Lampen nicht funktionieren, da sie relativ weit weg sind (Empfangsprobleme).
Daher würde ich gerne im Message-Teil des Dialog alle nicht funktionierenden Lampen auflisten.
Das sollte über z.B. den "state" und den Raum funktionieren.
Ich könnte natürlich alle Lampen dort einzeln aufführen und den state prüfen.
Dann muss ich bei Änderungen aber auf den Dialog wieder ändern.

Ginge das auch automatisch über eine Schleife?

Danke für jede Hilfe!
lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 15 April 2019, 00:50:19
Mittlerweile habe ich diesen Dialog von Sebastian gefunden:
https://forum.fhem.de/index.php/topic,77297.msg747254.html#msg747254 (https://forum.fhem.de/index.php/topic,77297.msg747254.html#msg747254)

Im  Prinzip wäre das genau das, was ich auch machen möchte.
Allerdings komme ich mit dem "get" nicht hin, da die devices vom Typ CUL_HM kein "Get name" oder ähnliches kennen.

Oder verstehe ich das falsch?
Wie könnte ich das lösen?

Vielen Dank für jede Hilfe!
lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 15 April 2019, 01:22:33
Hallo,

und noch eine Frage ist leider aufgetaucht.
Ich habe mir den tollen Dialog von Sebastian für meine Beleuchtungen adaptiert.
https://forum.fhem.de/index.php/topic,77297.msg807252/topicseen.html#msg807252 (https://forum.fhem.de/index.php/topic,77297.msg807252/topicseen.html#msg807252)

Was ich aber nicht verstehe, sind die Zeilen wie diese:
"{return('(💡Küche: [SteckdoseIT2:state]:Küche einschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') eq 'off')}",\

Warum steht da "Küche: [SteckdoseIT2:state]:Küche einschalten"?
Im Telegramm erscheint der Text "💡Küche: on:Küche einschalten" oder "💡Küche: off:Küche einschalten".
Beim Drücken des Knopfes in Telegramm tut sich nix.

Im log-File erscheint dann:
2019.04.15 00:53:26.115 5: msgDialog (Status_Dialog) - entering msgDialog_Notify
2019.04.15 00:53:26.119 4: msgDialog (Status_Dialog) triggered by "rr_Gerhard fhemMsgRcvPush: 💡Küche einschalten: off:Küche einschalten"
2019.04.15 00:53:26.122 5: msgDialog (Status_Dialog)
    entering msgDialog_progress
        recipients: rr_Gerhard
        message:    💡Küche einschalten: off:Küche einschalten
        force:      0
2019.04.15 00:53:26.125 5: msgDialog (Status_Dialog) - entering msgDialog_evalSpecials
2019.04.15 00:53:26.607 1: No match: 'msgText: 💡Küche einschalten: off:Küche einschalten'
2019.04.15 00:53:26.611 1: Nothing to do: msgText: 💡Küche einschalten: off:Küche einschalten


Mit dem msgText kann ja auch nichts funktionieren, da das Command nur "Küche einschalten" heißt.

Was mache ich falsch bzw. was verstehe ich denn da nicht?
Danke für jede Hilfe.
lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 15 April 2019, 08:30:47
Moin,

Im Dialog von Sebastian gibt es weiter unten den Dialogteil zum ,,Küche einschalten", dort steht der set ... on Befehl .  Falls du den Teil auch hast und es trotzdem nicht funktioniert, hast du evtl ein Problem mit den Umlauten.

VG,
Dirk
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 15 April 2019, 08:38:07
Zitat von: gestein am 15 April 2019, 01:22:33
Hallo,

und noch eine Frage ist leider aufgetaucht.
Ich habe mir den tollen Dialog von Sebastian für meine Beleuchtungen adaptiert.
https://forum.fhem.de/index.php/topic,77297.msg807252/topicseen.html#msg807252 (https://forum.fhem.de/index.php/topic,77297.msg807252/topicseen.html#msg807252)

Was ich aber nicht verstehe, sind die Zeilen wie diese:
"{return('(💡Küche: [SteckdoseIT2:state]:Küche einschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') eq 'off')}",\

Warum steht da "Küche: [SteckdoseIT2:state]:Küche einschalten"?
Im Telegramm erscheint der Text "💡Küche: on:Küche einschalten" oder "💡Küche: off:Küche einschalten".
Beim Drücken des Knopfes in Telegramm tut sich nix.

Im log-File erscheint dann:
2019.04.15 00:53:26.115 5: msgDialog (Status_Dialog) - entering msgDialog_Notify
2019.04.15 00:53:26.119 4: msgDialog (Status_Dialog) triggered by "rr_Gerhard fhemMsgRcvPush: 💡Küche einschalten: off:Küche einschalten"
2019.04.15 00:53:26.122 5: msgDialog (Status_Dialog)
    entering msgDialog_progress
        recipients: rr_Gerhard
        message:    💡Küche einschalten: off:Küche einschalten
        force:      0
2019.04.15 00:53:26.125 5: msgDialog (Status_Dialog) - entering msgDialog_evalSpecials
2019.04.15 00:53:26.607 1: No match: 'msgText: 💡Küche einschalten: off:Küche einschalten'
2019.04.15 00:53:26.611 1: Nothing to do: msgText: 💡Küche einschalten: off:Küche einschalten


Mit dem msgText kann ja auch nichts funktionieren, da das Command nur "Küche einschalten" heißt.

Was mache ich falsch bzw. was verstehe ich denn da nicht?
Danke für jede Hilfe.
lg, Gerhard

Moin Gerhard,
wie Dirk bereits geschrieben hat kommt der set Befehl dann weiter unten im Dialog.
Diesen habe ich so allerdings nicht mehr im Einsatz, da ich irgendwann keine Lust mehr hatte einzelne
Lampen hinzuzufügen. Ich mach das jetzt mit einem Dialog und ein paar Zeilen in der myUtils:

Dialog:
defmod 02.Lampen_Dialog msgDialog {\
"04.💡...Lampen....💡": {\
"message": [\
"(💡 Lampe einschalten) ",\
"(💡 Lampe ausschalten) ",\
    "(abbrechen|zurück:%me%) ",\
"Bitte wählen:"\
],\
"💡 Lampe einschalten": {\
"message": [\
"{return(lightsOn())}"\
],\
"Einschalten": {\
"match": ".*licht",\
"commands": [\
"set $message on",\
"set $SELF say @$recipient 04.💡...Lampen....💡|Lampe einschalten"\
]\
},\
"Aktualisieren": {\
"commands": [\
"set $SELF say @$recipient 04.💡...Lampen....💡|Lampe einschalten"\
]\
},\
"Zurück": {\
"commands": [\
"set $SELF say @$recipient 04.💡...Lampen....💡"\
]\
}\
},\
"💡 Lampe ausschalten": {\
"message": [\
"{return(lightsOut())}"\
],\
"Ausschalten": {\
"match": ".*_licht",\
"commands": [\
"set $message off",\
"set $SELF say @$recipient 04.💡...Lampen....💡|Lampe ausschalten"\
]\
},\
"Aktualisieren": {\
"commands": [\
"set $SELF say @$recipient 04.💡...Lampen....💡|Lampe ausschalten"\
]\
},\
"Zurück": {\
"commands": [\
"set $SELF say @$recipient 04.💡...Lampen....💡"\
]\
}\
}\
\
}\
}
attr 02.Lampen_Dialog allowed everyone
attr 02.Lampen_Dialog group Dialoge
attr 02.Lampen_Dialog icon dialog
attr 02.Lampen_Dialog room 90_System->96_Dialogsteuerung


myUtils:
sub lightsOut
{
  my @lights = devspec2array('.*_licht:FILTER=state!=off');
  my $msg = '';
  if (@lights > 0 and defined($defs{$lights[0]})) {
    foreach (@lights) {
      $msg .= '('.AttrVal($_,"alexaName","").' :'.$_.') ';
}
$msg .= '(🔄Aktualisieren) (Zurück) (⬆️Hauptmenü:Q) Folgende Lampen sind an:';
  }
  else {
    $msg = '(🔄Aktualisieren) (Zurück) (⬆️Hauptmenü:Q) Alle Lampen sind aus.';
  }
  return $msg;
}

sub lightsOn
{
  my @lights = devspec2array('.*_licht:FILTER=state!=on');
  my $msg;
  if (@lights > 0 and defined($defs{$lights[0]})) {
    foreach (@lights){
      $msg .= '('.AttrVal($_,"alexaName","").' :'.$_.') ';
    }
    $msg .= '(🔄Aktualisieren) (Zurück) (⬆️Hauptmenü:Q) Folgende Lampen sind aus:';
  }
  else {
    $msg = '(🔄Aktualisieren) (Zurück) (⬆️Hauptmenü:Q) Alle Lampen sind an.';
  }
  return $msg;
}


VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 15 April 2019, 09:00:26
Hallo Dirk, hallo Sebastian,

Den set-Befehl habe ich natürlich auch drinnen.
Allerdings mit "Küche einschalten" und der wird so nie aufgerufen.

Danke für die Tipps.
Ich denke, ich werde das dann auch so machen.

Und das dürfte auch meine zweite Frage nach dem Auflisten der fehlerhaften Schalter beantworten.

Schaut übrigens echt toll aus und hebt den WAF (fast) ins Unendliche.
Endlich ist mein fhem keine Spinnerei und Bastelei mehr sondern wird auch von meiner Holden geschätzt und genutzt.
Danke dafür.

lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 15 April 2019, 09:35:29
@Dirk:
Das mit den Umlauten sollte ja durch das Attribut utf8Special im TelegramBot device funktionieren. Dargestellt wird zumindest alles richtig.

Das einzige was nicht funktioniert ist das hier (und es irritiert mich etwas):
defmod status_Dialog msgDialog {"Systeminformationen":{\
  "message": [\
    "Fenster und Türen) ",\
    "(Batterien Fenster) ",\
    "(Batterien Heizung) ",\
    "(Netzwerk) ",\
    "(System) ",\
    "TelegramBot_MTYPE=queryInline (%me%) ",\
    "Welche Informationen:"\
  ],\
    "Fenster und Türen":{\
    "message":[\
      "{return('Gästezimmer:  [OZW772:GZ.Fenster] ')}",\
      "{return('Eingangstür:  [OZW772:Eingangstür] ')}",\
      "(zurück) ",\
      "TelegramBot_MTYPE=queryInline (%me%) "\
    ]\
    },\
    .
    .
    .


Angezeigt wird im Telegram folgendes:
Gästezimmer: Zu
Eingangstür:  [OZW772:Eingangstür]
(zurück) (Marvis)


Warum wird das "[OZW772:GZ.Fenster]" richtig durch "Zu" ersetzt, aber nicht das "[OZW772:Eingangstür]"?
Liegt sehr wahrscheinlich am Umlaut. Oder?

lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 15 April 2019, 13:16:32
Kannst du bitte ein list des Gerätes OZW772 posten.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 15 April 2019, 17:07:54
Natürlich gerne.
Hier das "list OZW772":
Internals:
   CHANGED   
   FUUID      5c5575c5-f33f-0b7a-1ec1-3fa7426881bec4c7
   FVERSION   99_OZW672.pm:?/2019-02-02
   NAME       OZW772
   NR         1212
   STATE      OK
   TYPE       OZW672
   READINGS:
     2019-03-10 10:20:29   Abwesenheit     Anwesend
     2019-04-15 16:58:30   Aussentemperatur 18.1
     2019-04-15 16:58:30   Aussentemperatur-Heizgrenze 19.0
     2019-04-15 16:58:30   Bad.Fenster     Zu
     2019-04-15 16:58:30   Bad.TempIst     27.3
     2019-03-23 21:19:37   Eingangstür    Zu
     2019-03-23 21:19:37   FensterTürzustand Zu
     2019-04-15 16:58:30   GZ.Fenster      Zu
     2019-04-15 16:58:30   GZ.TempIst      23.1
     2019-04-15 16:58:30   KZ.Fenster      Zu
     2019-04-15 16:58:30   KZ.TempIst      21.3
     2019-04-15 16:58:30   Luftdruck       1019
     2019-04-15 16:58:30   SZ.Fenster      Zu
     2019-04-15 16:58:30   SZ.TempIst      21.5
     2019-03-10 01:48:07   SZ.Temperatur   22.3
     2019-04-15 16:58:30   Sommerbetrieb-Vorgabe Auto
     2019-04-15 16:58:30   WZ.Fenster      Zu
     2019-04-15 16:58:30   WZ.TempIst      24.1
     2019-04-15 16:58:30   Whg.Abwesenheit Abwesend
     2019-04-15 16:58:30   Whg.Eingangstür Zu
     2019-04-15 16:58:30   Whg.FensterTürzustand Zu
     2019-04-15 16:58:30   state           OK
   helper:
     DATAPOINT_TO_TYPE
     RUNNING_GET_PID:
       abortFn    OZW672_queryValuesAborted
       arg        OZW772|192.168.0.103|http|Administrator|Triniti_|[['960','Aussentemperatur',''],['1451','Luftdruck',''],['1009','WZ.TempIst',''],['1050','KZ.TempIst',''],['1091','Bad.TempIst',''],['1132','SZ.TempIst',''],['1173','GZ.TempIst',''],['1416','WZ.Fenster',''],['1423','KZ.Fenster',''],['1437','SZ.Fenster',''],['1430','Bad.Fenster',''],['1444','GZ.Fenster',''],['1409','Whg.Eingangstür',''],['980','Aussentemperatur-Heizgrenze',''],['971','Sommerbetrieb-Vorgabe',''],['962','Whg.FensterTürzustand',''],['1454','Whg.Abwesenheit','']]
       bc_pid     39997
       finishFn   OZW672_queryValuesCallback
       fn         OZW672_queryValues
       pid        21516
       telnet     telnetPort_127.0.0.1_47982
       timeout    60
       abortArg:
Attributes:
   dataPointDefinitions Aussentemperatur:960,Luftdruck:1451,WZ.TempIst:1009,KZ.TempIst:1050,Bad.TempIst:1091,SZ.TempIst:1132,GZ.TempIst:1173,WZ.Fenster:1416,KZ.Fenster:1423,SZ.Fenster:1437,Bad.Fenster:1430,GZ.Fenster:1444,Whg.Eingangstür:1409,Aussentemperatur-Heizgrenze:980,Sommerbetrieb-Vorgabe:971,Whg.FensterTürzustand:962,Whg.Abwesenheit:1454
   event-on-change-reading .*
   interval   10
   ozw672host XXX
   ozw672password XXX
   ozw672protocol http
   ozw672username XXX
   room       Zentrale
   verbose    0


Egal, ob ich "Whg.Eingangstür", "Eingangstür" oder "Whg.FensterTürzustand" verwende, im msgDialog wird der Zustand nicht angezeigt.

lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: obi am 15 April 2019, 21:00:01
Hallo,

tolles Modul.

Ich habe eventuell eine kleine Verbesserung:

Da JSON->new->decode die Keys nicht ordnet bzw. in der Reihenfolge wie definert übernimmt funktioniert folgendes Szenario nicht:
Wenn man mit match (Regex) arbeitet und hier die Reihenfolge von oben nach unten verwendet werden soll funktioniert dies nicht wie gewünscht. Ich möchte z. B. am Ende alle anderen Nachrichten/Texte als Fehlermeldung ausgeben mit .* als Regex.

Man könnte hier dann folgende Funktion verwenden:
--Zeile 303: $dialog = eval{JSON->new->decode($dialog)};
++Zeile 303: $dialog = eval{JSON::MultiValueOrdered->new->decode( encode('utf-8', $dialog))};


Zusätzlich noch die Library am Anfang einbinden:
++Zeile 29: use JSON::MultiValueOrdered;

Und zu guter Letzt noch die Libraray im System installieren
apt-get install libjson-multivalueordered-perl

Eventuell hilft dies ja jemanden. Oder das könnte man in der Wiki geränzen oder so.

VG obi
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wuehler am 15 April 2019, 22:37:33
@gestein: Ja, denke, dass es am Umlaut liegt. Versuch mal alternativ folgendes zu verwenden (ungetestet).
{return('Eingangstür:  '.ReadingsVal('OZW772','Eingangstür','Fehler').' ')}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 16 April 2019, 11:03:39
Hallo Dirk,
Das versuche ich heute Abend. Mal sehen.
Ich denke, dass die entsprechende Funktion im msgDialog nicht mit Umlauten umgehen kann.

Wenn es nicht einfach geht, benenne ich halt die "Eingangstür" in "Eingangstuer" um.

lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 16 April 2019, 12:23:15
Hallo Sebastian,

Danke nochmals für den Dialog und die Funktionen.
Da habe ich einen Ansatzpunkt um das für mich anzupassen.

Eine Frage aber bitte noch:
Mit Deinen Funktionen schaltest Du immer alle Lampen die an sind aus und alle die aus sind, wieder an.
Damit schaltet keine einzelnen Lampen. Oder?

lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 16 April 2019, 13:05:14
Zitat von: gestein am 16 April 2019, 12:23:15
Eine Frage aber bitte noch:
Mit Deinen Funktionen schaltest Du immer alle Lampen die an sind aus und alle die aus sind, wieder an.
Damit schaltet keine einzelnen Lampen. Oder?

Nein, das Schalten macht der Dialog. Die Funktionen sammeln nur die Devices ein und erstellen dann dynamisch den Dialog.
Damit erhalte ich beim Einschalten nur die Devices die auch tatsächlich aus sind und umgekehrt.  ;)

Das Schalten erfolgt dann im Dialog und nur für das gewählte Device:
"Einschalten": {
"match": ".*_licht",
"commands": [
"set $message on",
"set $SELF say @$recipient 04.💡...Lampen....💡|Lampe einschalten"
]
},


"Ausschalten": {
"match": ".*_licht",
"commands": [
"set $message off",
"set $SELF say @$recipient 04.💡...Lampen....💡|Lampe ausschalten"
]
},


VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 17 April 2019, 12:12:14
Hallo Sebastian,

das ist echt elegant. Danke für die Erklärung.
lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 17 April 2019, 17:18:40
Jetzt hätte ich noch eine Frage:
Ich steure mittlerweile auch die Rollläden über Telegram. Funktioniert soweit ganz gut.
Dafür habe ich mehrere Reihen mit den entsprechenden Tasten für die Kommandos "rauf", "runter", "my".

Allerdings sieht das nicht wirklich gut aus, vor allem weil ja ein Text bei den Tasten angegeben werden muss (siehe Foto).
Wie sollte ich auch sonst die Tasten den Kommandos zuordnen?

Seht ihr eine Möglichkeit das schöner und leichter lesbar zu gestalten?
Also z.B. links die Bezeichnung und dann rechts 3 Tasten für "rauf", "runter", "my".

Danke für jede Hilfe.
lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 29 April 2019, 21:42:04
Hallo,

ich verwende auch den Systemverwaltung-Dialog von Sebastian aus diesem Thread:
https://forum.fhem.de/index.php/topic,77297.msg724964.html#msg724964 (https://forum.fhem.de/index.php/topic,77297.msg724964.html#msg724964)

Dazu hätte ich eine Frage an Sebastian:
Wie kommst Du zu den Angaben von "FHEM_Sys_Dialog.DUM:updates" und "FHEM_Sys_Dialog.DUM:last_10"?

Das wäre nämlich echt praktisch  :)

Vielen Dank im Voraus
liebe Grüße
Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 29 April 2019, 23:04:21
Zitat von: gestein am 29 April 2019, 21:42:04
Hallo,

ich verwende auch den Systemverwaltung-Dialog von Sebastian aus diesem Thread:
https://forum.fhem.de/index.php/topic,77297.msg724964.html#msg724964 (https://forum.fhem.de/index.php/topic,77297.msg724964.html#msg724964)

Dazu hätte ich eine Frage an Sebastian:
Wie kommst Du zu den Angaben von "FHEM_Sys_Dialog.DUM:updates" und "FHEM_Sys_Dialog.DUM:last_10"?

Das wäre nämlich echt praktisch  :)

Vielen Dank im Voraus
liebe Grüße
Gerhard

Hallo Gerhard,
FHEM_Sys_Dialog.DUM ist war ein dummy in dem ich Systeminfos gespeichert habe.
updates und last_10 sind jeweils Readings welche ich mit dem unten stehenden Perl-Code gefüllt habe.

In FHEM_Sys_Dialog.DUM:updates stehen vorhandene Updates. In eine Variable gespeichert so:
my $fhu = `wget -qO - http://fhem.de/fhemupdate4/svn/controls_fhem.txt | cat - FHEM/controls_fhem.txt | sort | uniq -u | cut -d " " -f 4 | uniq`."-";


In FHEM_Sys_Dialog.DUM:last_10 sind die letzten 10 Logeinträge. Du bekommst sie so:
defmod FHEM_Sys_Dialog.AT at +*02:00:00 {\
  my $loglines = fhem "{qx(tail -20 $currlogfile)}";;\
  fhem "setreading FHEM_Sys_Dialog.DUM last_10 $loglines";;\
}
attr FHEM_Sys_Dialog.AT alignTime 01:00:00
attr FHEM_Sys_Dialog.AT comment Schreibt alle 120 min die letzten 10 Zeilen des FHEM-Log in einen Dummy.


VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 29 April 2019, 23:41:07
Hallo Sebastian,

Danke! Echt toll.
lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 02 Mai 2019, 00:03:00
Hallo,

ich bin nun leider auf ein neues Thema gestoßen.

Um einen Dimmer zu steuern habe ich einen Dialog von hier kopiert: https://forum.fhem.de/index.php/topic,77297.msg807252/topicseen.html#msg807252 (https://forum.fhem.de/index.php/topic,77297.msg807252/topicseen.html#msg807252)
"💡Geländer dimmen":{
      "message":[
         "(abbrechen|zurück) ",
         "(5%:5|10%:10|20%:20|25%:25) ",
         "(30%:30|40%:40|50%:50|60%:60) ",
         "(70%:70|80%:80|90%:90|100%:100) ",
         "Aktuell sind [TW.DimmerGelaender:pct]% eingestellt. Auf welchen Wert soll ich dimmen?"
         ],
         "dimmen_Geländer":{
            "match": "?([1-9][0]|[1][0][0]) ?",
            "commands": [
            "{my $dimm = '$message';; fhem(\"set TW.DimmerGelaender pct $dimm 3\");;}",
            "set $SELF say @$recipient 💡Beleuchtung"
            ]
         }
}

Damit ergeben sich aber 2 Probleme:
1.) Es wird z.B. "5%:5" in der Tastatur angezeigt und nicht "5%", wie ich erwartet hätte.
2.) Der Befehl zum Setzen des Dimmers wird nicht ausgeführt.

Was mache ich falsch?

Danke, lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 02 Mai 2019, 05:32:40
Zitat von: gestein am 02 Mai 2019, 00:03:00
1.) Es wird z.B. "5%:5" in der Tastatur angezeigt und nicht "5%", wie ich erwartet hätte.
2.) Der Befehl zum Setzen des Dimmers wird nicht ausgeführt.
"5%:5" funktioniert nur bei inline Keyboards.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 02 Mai 2019, 19:15:28
Hallo,

Verstanden. Dann werde ich mal diese Inline-Keyboards zu Gemüte führen.
Danke.

Beim msgDialog gab es ja jede Menge Weiterentwicklung.
Ist das Wiki mit den Notifys immer noch aktuell?

Vielen Dank für das tolle Modul!
Lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 02 Mai 2019, 20:49:09
Zitat von: gestein am 02 Mai 2019, 19:15:28
Beim msgDialog gab es ja jede Menge Weiterentwicklung.
Ist das Wiki mit den Notifys immer noch aktuell?
Ja, das ist noch aktuell.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 03 Mai 2019, 17:10:46
Danke. Mittlerweile klappt das mit den Inline-Keyboards.
Allerdings muss ich gestehen, dass mir die normalen Keyboards besser vorkommen.
Beim Dimmer wäre das aber eigentlich ganz praktisch.

Kann man innerhalb des Dialogs (also wenn gedimmt werden soll) das Inline-Keyboard einschalten und dann wieder ausschalten?

lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 04 Mai 2019, 07:06:48
Zitat von: gestein am 03 Mai 2019, 17:10:46
Danke. Mittlerweile klappt das mit den Inline-Keyboards.
Allerdings muss ich gestehen, dass mir die normalen Keyboards besser vorkommen.
Beim Dimmer wäre das aber eigentlich ganz praktisch.

Kann man innerhalb des Dialogs (also wenn gedimmt werden soll) das Inline-Keyboard einschalten und dann wieder ausschalten?
Ich finde die normalen Keyboards meist auch besser :)

Die Snippets aus dem Wiki stammen nicht von mir, aber ich verstehe es so, dass sich mit dem Dummy inline ein und aus schalten lässt.
Ansonsten kannst du für jede Nachricht einzeln am Anfang "TelegramBot_MTYPE=queryInline" in der message senden.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: stera am 21 Mai 2019, 22:22:43
Hallo zusammen,

ich wollte das gerne mal ausprobieren, nur stehe ich noch auf dem Schlauch und kämpfe mit der Mitteilung "Unbekannter Kontaktversuch über TelegramBot von ..."

- Roommate mit attr. msgContactPush TelegramBot:@peerID ist angelegt -> Testnachricht "msg push @Roommate Test" kommt in Telegram an.
- meta_Dialog mit allowed everyone und Roommate ist angelegt
- Wird der der Notify noch benötigt? Nur wenn der an ist, kommt der Fehler in "myMsgConfig" unter Reading fhemMsgPush (Unbekannter Kontaktversuch..:)
- attr myMsgConfig evalSpecials me=.... TelegramBot=TelegramBot ist auch mit einem Leerzeichen..

Das steht im Event, wenn ich /start in Telegram auslöse
2019-05-21 22:18:20 msgConfig myMsgConfig ERROR RCV TelegramBot 2.........: Missing reference in msgContact attribute of any device

Hoffe ihr habt noch eine Idee, wo der Fehler steckt.

Danke,
SteRa

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: stera am 27 Mai 2019, 16:20:51
Hallo,

ich konnte das Problem mittlerweile lösen.. Hatte nicht die ID sondern meinen Namen benutzt  ::)

Jetzt habe ich noch ein weiteres Problem: Ausführen mit /start funktioniert, allerdings geht der alias %me% nicht. Bekomme beim Dialog beenden auch immer %me% zurück.

Das "evalSpecials" habe ich richtig gesetzt. Von was hängt das alles ab?

Gruß,
SteRa


Zitat von: stera am 21 Mai 2019, 22:22:43
Hallo zusammen,

ich wollte das gerne mal ausprobieren, nur stehe ich noch auf dem Schlauch und kämpfe mit der Mitteilung "Unbekannter Kontaktversuch über TelegramBot von ..."

- Roommate mit attr. msgContactPush TelegramBot:@peerID ist angelegt -> Testnachricht "msg push @Roommate Test" kommt in Telegram an.
- meta_Dialog mit allowed everyone und Roommate ist angelegt
- Wird der der Notify noch benötigt? Nur wenn der an ist, kommt der Fehler in "myMsgConfig" unter Reading fhemMsgPush (Unbekannter Kontaktversuch..:)
- attr myMsgConfig evalSpecials me=.... TelegramBot=TelegramBot ist auch mit einem Leerzeichen..

Das steht im Event, wenn ich /start in Telegram auslöse
2019-05-21 22:18:20 msgConfig myMsgConfig ERROR RCV TelegramBot 2.........: Missing reference in msgContact attribute of any device

Hoffe ihr habt noch eine Idee, wo der Fehler steckt.

Danke,
SteRa
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Keule_09 am 28 Mai 2019, 22:26:49
Hallo ,

ich hab eine Verständnisfrage zu Match:
"match": "?([1-9][0]|[1][0][0]) ?",
wenn ich das richtig verstanden habe:
[1-9] lässt Zahlen von 1 bis 9 zu
[0]    lässt nur die Zahl 0 zu

was aber macht der Teil mit folgendemCode |[1][0][0]

Gruß Marco

Edit: Erst denken dann schreiben ???  ;)
hab es selbst herausbekommen
| bedeutet oder
[1][0][0] läst nur die Zahlenkombination 100 zu
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Smarti am 01 August 2019, 18:48:58
Hallo,
ich kämpfe gerade auch mit dem Dialog. Hat soweit alles getan. Nach einem Backup/Neustart hatte ich einen Fehler, dass der Telegrambot nicht mehr definiert ist, was ich wieder korrigiert habe.

Nun kann ich Nachrichten versenden über:
msg push @rr_Benedikt test
was auch im Log gut ausssieht:


2019.08.01 18:43:03 3: msg rr_Benedikt: ID=xxx TYPE=push ROUTE=myTelegramBot RECIPIENT=@xxx STATUS=OK PRIORITY=0 TITLE='' MSG='test'
2019.08.01 18:43:03 3: sentMsgIdByPeerId return value: rr_Benedikt_sentMsgId: 10763


Wenn ich den Dialog aufrufe, sehe ich im Log, dass etwas gesendet wird (oder versucht!?) Allerdings erhalte ich keine Nachricht auf dem Handy...


2019.08.01 18:37:05 3: get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Benedikt|everyone).* trigger : Heizung
🐔 Huehner
IPCAM
Listen
Lichtwecker
🛠Systemverwaltung
Terrarium
Reset Jeelink
Update Check
Replace Batt. Jeelink
Waschmaschine
⛅ Wetter
2019.08.01 18:37:05 3: msg rr_Benedikt: ID=xxx TYPE=push ROUTE=myTelegramBot RECIPIENT=@xxx STATUS=OK PRIORITY=0 TITLE='' MSG='(Heizung) (IPCAM) (Lichtwecker) (Listen) (Replace Batt. Jeelink) (Reset Jeelink) (Terrarium) (Update Check) (Waschmaschine) (⛅ Wetter) (🐔 Huehner) (🛠Systemverwaltung) (abbrechen)
Ich kann folgendes für dich tun:'
2019.08.01 18:37:35 3: TelegramBot_Callback myTelegramBot: resulted in NonBlockingGet timed out on read from <hidden> after 30s from SendIt
2019.08.01 18:37:35 3: TelegramBot_Callback myTelegramBot: Reached max retries (ret: NonBlockingGet timed out on read from <hidden> after 30s) for msg 416088197 :
Ich kann folgendes für dich tun:
2019.08.01 18:37:35 3: sentMsgIdByPeerId return value: rr_Benedikt_sentMsgId:


Was hat es mit dem "NonBlockingGet timed out" auf sich?

THX
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 02 August 2019, 17:11:18
Zitat von: Smarti am 01 August 2019, 18:48:58
Was hat es mit dem "NonBlockingGet timed out" auf sich?
Das kann ich dir leider nicht beantworten, bitte im TelegramBot Thread nachfragen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Smarti am 02 August 2019, 21:23:06
Zitat von: igami am 02 August 2019, 17:11:18
Das kann ich dir leider nicht beantworten, bitte im TelegramBot Thread nachfragen.

Ok, dann werde ich das mal tun...
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Smarti am 07 August 2019, 20:40:22
Zitat von: Smarti am 02 August 2019, 21:23:06
Ok, dann werde ich das mal tun...

Also ist gelöst, das Attribut hat gefehlt: attr Telegram utf8Special 1/code]
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: bomi am 24 August 2019, 14:59:25
Hallo,
ich habe auch das Problem, dass das evalSpecials im meinem Dialog nicht ersetzt wird.
Es sollte ja auf /test reagieren, tut es aber nicht. Wenn ich %me% über Telegram schicke funktioniert es.
Irgendwas einfaches hab ich vergessen...

defmod myMsgConfig msgConfig
attr myMsgConfig userattr evalSpecials:textField-long msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig evalSpecials me=test
attr myMsgConfig group Global
attr myMsgConfig msgContactPush telegram
attr myMsgConfig msgType text
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 3


defmod meta_dialog msgDialog {\
"(%me%)": {\
"match": "(%me%)",\
"message": "funktioniert"}\
}





Edit:
Habe die Lösung selber gefunden. Habe die Einstellungen vom post auf Seite 1 übernommen. Dort wird das Attribut evalSpecials benutzt, welches bei mir nicht funktioniert. Im Wiki und in der commandref steht die richtige Variante. Man sollte das Attribut msgDialog_evalSpecials benutzten. Jetzt funktioniert es auch bei mir.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: StephanFHEM am 27 August 2019, 00:17:27
ich hänge gerade an einem wahrscheinlich ganz einfachen Thema: Ich möchte mein Inline Keyboard in einer Gruppe aufrufen und dort auch die Ausgabe bekommen. Er sendet die Ausgabe aber nicht an die Gruppe sondern an mich Privat. Wie kann ich das ändern?

edit: Mit Ausgabe meine ich das Keyboard selbst... das wird nicht in der Gruppe angezeigt
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: kjmEjfu am 27 August 2019, 08:55:17
Mal eine grundsätzliche Frage:

ich muss ja im ROOMMATE das msgContactPush auf den TelegramBot setzen, dadurch setze ich aber quasi meinen Default für alle Push-Nachrichten auf Telegram. Hier habe ich mich aber an PushOver gewöhnt und finde dort die Möglichkeiten angenehmer.
Gibt es eine Möglichkeit msgDialog zu nutzen OHNE msgContactPush anpassen zu müssen?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 29 August 2019, 06:13:16
@StephanFHEM
Eventuell ein weiteres Roommate für die Gruppe anlegen?

@kjmEjfu
Ist eher eine msg spezifische Frage. Wie das routing genau funktioniert habe ich nicht verstanden. Wenn du das rausgefunden hast kannst du es bestimmt mit dem Attribut msgDialog_msgCommand einrichten. Alternativ auch hier ein weiters Roommate anlegen?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: StephanFHEM am 29 August 2019, 06:36:48
Zitat von: igami am 29 August 2019, 06:13:16
@StephanFHEM
Eventuell ein weiteres Roommate für die Gruppe anlegen?


Hatte ich schon probiert, er hat trotzdem mir das Menü gesendet weil er gemerkt hat, dass ich aus der Gruppe geschrieben habe. Er sendet dann eher an den Namen als an die ChatID. Hab auch schon probiert die ChatID in meinen Roommate einzutragen aber das hat garnicht geklappt.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 20 September 2019, 08:44:20
Hallo.
Ich habe da mal eine kurze Frage, auf die ich keine richtige Antwort finde.
Habe meine Freundin in Fhem eingetragen und wollte jetzt auch den Bot für Sie einrichten. Habe Ihren Telegram Account angelegt, kann auch von Fhem aus eine Nachricht an Sie senden aber schickt Sie dem Bot ne Nachricht, wird Ihr nicht der Dialog angezeigt.
Ich habe den Account angelegt.
Sie bei Fhem überall eingetragen über ALLOWED.
Nachricht von Fhem aus an Sie funktioniert.

Aber wo ist mein Fehler gerade???
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 21 September 2019, 22:15:42
Da das Thema Freundin -> FHEM -> TelegramBot auch früher oder später auf mich zu kommt klinke ich mich da mal ein...  ;)

ZitatAber wo ist mein Fehler gerade???

Hast du im ROOMMATE deiner Freundin das Atrribut msgContactPush gestezt?
Ist das Attribut allowed in den Dialogen korrekt gesetzt (everyone bzw. alle ROOMMATEs)?

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 22 September 2019, 07:39:06
ZitatHast du im ROOMMATE deiner Freundin das Atrribut msgContactPush gestezt?
Ist das Attribut allowed in den Dialogen korrekt gesetzt (everyone bzw. alle ROOMMATEs)?

Beides kann ich mit ja beantworten. Ist alles richtig gesetzt. Mittlerweile habe ich auch festgestellt, das ich jetzt jedesmal von meinem Bot, die Antworten aus den Dialogen zweimal erhalte. Da ist mir aufgefallen, das ich ausversehen meine eigene PeerID verwendet habe. Durch die falsche ID kam das Problem. Danke für den Hinweis, Problem konnte ich so lösen.

Habe aber noch ein kleines anderes Problem und dafür möchte ich auch noch um Hilfe bitten, weil mir die Zeit fehlt wegen dem Zusammenzug.
Vor einer Woche wurde festgestellt, das meine Freundin Allergie gegen gewisse Pollen hat. Jetzt möchte ich gerne einen Dialog einbauen, wo sie den Pollenflug abrufen kann. Da ich mich aber mit dem Dialoge bauen schwer tue, wollte ich fragen, ob einer einen fertigen Dialog für mich hat, den ich nur an mein System anpassen nrauch. Danke.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 22 September 2019, 08:54:20
Zitat von: ErzGabriel am 22 September 2019, 07:39:06
Beides kann ich mit ja beantworten. Ist alles richtig gesetzt. Mittlerweile habe ich auch festgestellt, das ich jetzt jedesmal von meinem Bot, die Antworten aus den Dialogen zweimal erhalte. Da ist mir aufgefallen, das ich ausversehen meine eigene PeerID verwendet habe. Durch die falsche ID kam das Problem. Danke für den Hinweis, Problem konnte ich so lösen.

Habe aber noch ein kleines anderes Problem und dafür möchte ich auch noch um Hilfe bitten, weil mir die Zeit fehlt wegen dem Zusammenzug.
Vor einer Woche wurde festgestellt, das meine Freundin Allergie gegen gewisse Pollen hat. Jetzt möchte ich gerne einen Dialog einbauen, wo sie den Pollenflug abrufen kann. Da ich mich aber mit dem Dialoge bauen schwer tue, wollte ich fragen, ob einer einen fertigen Dialog für mich hat, den ich nur an mein System anpassen nrauch. Danke.

Der Dialog ist glaube das einfachste daran...  :o
Schwieriger wird es an die Readings zu kommen. Wenn es nur eine Handvoll Readings sind geht es noch zu Fuß. Aber wenn du alle haben willst
geht es glaube ich nur über einen Hash des Allergene Devices. Daraus kannst du dann die relevanten Readings rausfiltern und nach Wunsch aufbereiten.
Den Perlcode würde ich dann auslagern in myUtils damit du einen übersichtlichen Dialog bekommst. Da ich aber kein Perl-Crack bin kann ich dir hier
nur schematisch Hilfe geben.

Vielleicht mag ja einer Perl-Cracks die hier mitlesen einen Tipp geben...  ;)

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 22 September 2019, 08:57:33
Hi Sebastian.
Es geht nur um 5 Readings, soviele Allergien hat Sie zum Glück nicht.

LG Marcus
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 22 September 2019, 09:45:53
Very Quick and more dirty  ;D

defmod pollen_dialog msgDialog {\
"1. Pollen": {\
"message": [\
"{return telegramBotGetPollenListMessage() }"\
]\
}\
}\


## Pollenflug

sub telegramBotGetPollenListMessage()
{
my $pol1 = ReadingsVal("Allergene", "fc1_Ahorn", "0");
my $pol2 = ReadingsVal("Allergene", "fc1_Ambrosia", "0");
my $pol3 = ReadingsVal("Allergene", "fc1_Kiefer", "0");
my $pol4 = ReadingsVal("Allergene", "fc1_Gräser", "0");
my $pol5 = ReadingsVal("Allergene", "fc1_Nessel", "0");
my $returnMessage;
$returnMessage .= "Ahorn: $pol1 \n" if($pol1 !~ /white/);
$returnMessage .= "Ambrosia: $pol1 \n" if($pol2 !~ /white/);
$returnMessage .= "Kiefer: $pol1 \n" if($pol3 !~ /white/);
$returnMessage .= "Gräser: $pol1 \n" if($pol4 !~ /white/);
$returnMessage .= "Nessel: $pol1 \n" if($pol5 !~ /white/);
return $returnMessage;
}


Da ich in der Readingsgroup mit den farbigen Punkten arbeite liefert die sub rc_dot usw. zurück.
Normal steht da low,moderate,high,extreme. Gefiltert wird auf alles was nicht low ist.

Schick machen musst du das allerdings dann selbst.  ;)
Mögliche Erweiterungen:

Beispiele gibts hierzu jede Menge in den Posts, im Wiki oder im separaten Thread mit Bsp.-Dialogen.
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 22 September 2019, 15:25:11
Danke Sebastian, ich versuche mal mein Glück.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: tb-killa am 24 September 2019, 18:42:52
Hallo igami ich hatte auf die schnelle nicht die richtigen Informationen gefunden, aber ist es möglich auch in Gruppen zu antworten ?
Zur Zeit bekomme ich es nur hin, als Mitglied in einer Gruppe direkt vom Bot eine Nachricht zu erhalten, nicht über die Gruppe selbst.
Beste Grüße
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: onkel-tobi am 04 Oktober 2019, 10:00:09
Hi zusammen,

das liest sich ja alles sehr interessant, wollte mir jetzt auch mal ein wenig damit spielen, scheitere aber schon an der definition des meta_Dialogs.

die raw definition:
defmod meta_Dialog msgDialog

setstate meta_Dialog 2019-10-04 09:43:05 state Initialized

Ich probiere dann entsprechend die definition hinterherzuschieben (copy & paste aus dem wiki, check über json checker):
{
"%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."
]
}
}


Bekomme aber dann folgende Fehlermeldung:
Usage: define <name> msgDialog {JSON}

invalid character encountered while parsing JSON string, at character offset 10 (before "\n\t\t"match": "\\/?...") at ./FHEM/76_msgDialog.pm line 93.

Habe aber wie geschrieben auf jsonlint.com keinen Fehler mehr drin gehabt.

Hat noch wer eine Idee?

Danke & Gruß,
Tobi
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 04 Oktober 2019, 11:54:47
Moin,
die Definition sollte schon mal so aussehen (1:1 aus dem Wiki  ;)):
defmod meta_Dialog msgDialog {}

Wenn ich dann deinen Code in die DEF einfüge klappts auch:
Internals:
   CFGFN     
   DEF        {
"%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."
]
}
}
   FUUID      5d971603-f33f-fe74-158d-a081bb5645b14f46
   MSGCOMMAND msg push \@$recipients $message
   NAME       meta_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         24931
   NTFY_ORDER 50-meta_Dialog
   STATE      Initialized
   TRIGGER    %me%,beenden,zurück,abbrechen
   TYPE       msgDialog
   READINGS:
     2019-10-04 11:51:29   state           Initialized
Attributes:


VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ichichich am 27 Oktober 2019, 19:16:57
Ich hänge an dem ROOMMATE / GUEST fest, benutze ich zum ersten mal.
Wie soll der definiert werden für msgDialog, im Wiki steht nur
ZitatDer Inhalt vom Attribut msgContactPush muss folgendem Muster entsprechen:

<NAME des TelegramBot Device>:@<zum ROOMMATE/GUEST gehörende Telegram ID>

Ich habe folgendes in der fhem.cfg:
Zitat
....
define muABC TelegramBot 123456789:abcdefghijabcdefghij
attr muABC pollingTimeout 120
....
define rr_UWE ROOMMATE
attr rr_UWE alias Status
attr rr_UWE 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_UWE group UWE
attr rr_UWE icon people_sensor
attr rr_UWE msgContactPush muABC:@987654321
attr rr_UWE rr_realname group
attr rr_UWE sortby 1
attr rr_UWE webCmd state
...

defmod meta_Dialog msgDialog {\
...
}
attr meta_Dialog allowed everyone

defmod Waschmaschine_Dialog msgDialog { "Waschmaschine": {\
...
}
attr meta_Dialog allowed rr_UWE

bei 987654321 weis ich nicht wo ich diese Daten herholen soll. Habe den Wert aus muABC->msgChatId genommen, ohne Erfolg, der meta_Dialog wird nicht bei Telegram angezeigt.

Danke für eure Hilfe im voraus.
Gruß Uwe
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 27 Oktober 2019, 19:19:39
Zitat von: ichichich am 27 Oktober 2019, 19:16:57
Ich hänge an dem ROOMMATE / GUEST fest, benutze ich zum ersten mal.
Wie soll der definiert werden für msgDialog, im Wiki steht nur
Ich habe folgendes in der fhem.cfg:
bei 987654321 weis ich nicht wo ich diese Daten herholen soll. Habe den Wert aus muABC->msgChatId genommen, ohne Erfolg, der meta_Dialog wird nicht bei Telegram angezeigt.

Danke für eure Hilfe im voraus.
Gruß Uwe

Du bekommst deine ID wenn du zB. den "get id" Bot von Telegram benutzt  ;)
Einfach /start senden...

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: subseven am 22 Dezember 2019, 16:05:12
Hallo zusammen,

aus mehreren Heizungsdialogen habe ich einen für mich passenden Programmiert.
Dieser Dialog braucht nicht die Namen der Heizkörperthermostate und  und löst mein Problem, wenn man mehrere Heizkörper in einen Raum geschaltet werden sollen zusätzlich hat er eine "oneTime"-Programmierung um Heizkörper in den nächsten24h einzustellen.
Den Dialog möchte ich euch nicht vorenthalten. Einzig die Korrekten Raumnamen sind anzugeben und ggf. für die Eingangsnachricht die Ausgaben anzupassen.
Anregungen sind willkommen.


defmod Heizung_Dialog msgDialog {\
"1. Heizung": {\
"match": "Raumtemperaturen",\
"message": [\
"(Wohnzimmer|Büro) (Bad|Kinderzimmer) (Küche|Schlafzimmer) ",\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Ist:. . . . . Soll:. . . . . Raum:",\
"[WZ_Sen_TV:temperature]°C / [WZ_Heiz_WZ:desiredTemperature]°C / Wohnzimmer",\
"[Bue_Heiz_Gross:temperature]°C / [Bue_Heiz_Gross:desiredTemperature]°C / Büro",\
"[Bad_Sen_Schrank:temperature]°C / [Bad_Heiz_Gross:desiredTemperature]°C / Bad",\
"[KZ_Sen_Komode:temperature]°C / [KZ_Heiz_Gross:desiredTemperature]°C / Kinderzimmer",\
"[Kue_Heiz_Gross:temperature]°C / [Kue_Heiz_Gross:desiredTemperature]°C / Küche",\
"[SZ_Heiz_Gross:temperature]°C / [SZ_Heiz_Gross:desiredTemperature]°C / Schlafzimmer"\
],\
"Raum": {\
"match": "(Wohnzimmer|Büro|Kinderzimmer|Schlafzimmer|Bad|Küche)",\
"commands": "setreading $SELF $recipient_Room $message",\
"message": [\
"(auto|boost) ",\
"(10.0|12.0|16.0|17.0) ",\
"(17.5|18.0|18.5|19.0) ",\
"(19.5|20.0|20.5|21.0) ",\
"(21.5|22.0|22.5|23.0) ",\
"(Programmierung) ",\
"(abbrechen) ",\
"Heizung im $message einstellen"\
],\
"Programmierung": {\
"match": "(Programmierung)",\
"message": [\
"(Status|Löschen) ",\
"(00:00|00:30|01:00|01:30|02:00|02:30) ",\
"(03:00|03:30|04:00|04:30|05:00|05:30) ",\
"(06:00|06:30|07:00|07:30|08:00|08:30) ",\
"(09:00|09:30|10:00|10:30|11:00|11:30) ",\
"(12:00|12:30|13:00|13:30|14:00|14:30) ",\
"(15:00|15:30|16:00|16:30|17:00|17:30) ",\
"(18:00|18:30|19:00|19:30|20:00|20:30) ",\
"(21:00|21:30|22:00|22:30|23:00|23:30) ",\
"(abbrechen) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Schaltzeitpunkt für $room einstellen\";;;;;;;; }"\
],\
"Löschen": {\
"match": "(Löschen)",\
"commands": [\
"{my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; fhem (\"delete at_$recipient_$room  \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Programmierung für $room gelöscht.\";;;;;;;; }"\
]\
},\
"Status": {\
"match": "(Status)",\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; my $time = ReadingsVal(\"at_$recipient_$room\", \"time\", \"\");;;;;;;; my $temp = ReadingsVal(\"at_$recipient_$room\", \"temp\", \"\");;;;;;;; return \"Programmierung $room $time Uhr $temp °C.\";;;;;;;; }"\
]\
},\
"Uhrzeit": {\
"match": "([0-1][0-9]|2[0-3])[:_][0-5][0-9]",\
"commands": [\
"{fhem (\"setreading $SELF $recipient_Time $message\") }"\
],\
"message": [\
"(auto|boost) ",\
"(10.0|12.0|16.0|17.0) ",\
"(17.5|18.0|18.5|19.0) ",\
"(19.5|20.0|20.5|21.0) ",\
"(21.5|22.0|22.5|23.0) ",\
"(abbrechen) ",\
"Heizung um $message Uhr einstellen"\
],\
"Temperatur": {\
"match": "auto|boost|[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; fhem (\"delete at_$recipient_$room  \");;;;;;;; fhem (\"define at_$recipient_$room at $time:00 set room=$room:FILTER=type=HeatingThermostat desiredTemperature $temp \");;;;;;;; fhem (\"setreading at_$recipient_$room time $time \");;;;;;;; fhem (\"setreading at_$recipient_$room temp $temp \") }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message°C für $time Uhr eingestellt.\";;;;;;;; }"\
]\
}\
}\
},\
"Temperatur": {\
"match": "auto|boost|[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;;  fhem (\"set room=$room:FILTER=type=HeatingThermostat desiredTemperature $temp \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message°C eingestellt.\";;;;;;;; }"\
]\
}\
}\
}\
}
attr Heizung_Dialog allowed everyone
attr Heizung_Dialog room msg


Und für Interessierte noch einen Dialog um die Kaffeemascine zu programmieren (Über eine Funksteckdose)
defmod Kaffee_Dialog msgDialog {\
"2. Kaffee": {\
"match": "Kaffee",\
"message": [\
"(Einschalten|Ausschalten) (Programmierung) ",\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $time = ReadingsVal(\"at_$recipient_kaffee\", \"time\", \"\");;;;;;;; return \"Die aktuelle Konfiguration ist: $time Uhr\";;;;;;;; }"\
],\
"Einschalten": {\
"match": "(Einschalten)",\
"commands": [\
"{fhem (\"set WZ_PB_RC03 on\");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Kaffeemaschine eingeschaltet "\
]\
},\
"Ausschalten": {\
"match": "(Ausschalten)",\
"commands": [\
"{fhem (\"set WZ_PB_RC03 off\");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Kaffeemaschine ausgeschaltet "\
]\
},\
"Programmierung": {\
"match": "(Programmierung)",\
"message": [\
"(Status|Löschen) ",\
"(00:00|00:30|01:00|01:30|02:00|02:30) ",\
"(03:00|03:30|04:00|04:30|05:00|05:30) ",\
"(06:00|06:30|07:00|07:30|08:00|08:30) ",\
"(09:00|09:30|10:00|10:30|11:00|11:30) ",\
"(12:00|12:30|13:00|13:30|14:00|14:30) ",\
"(15:00|15:30|16:00|16:30|17:00|17:30) ",\
"(18:00|18:30|19:00|19:30|20:00|20:30) ",\
"(21:00|21:30|22:00|22:30|23:00|23:30) ",\
"(abbrechen) ",\
"{my $konfig = ReadingsVal(\"$SELF\", \"$recipient_Kaffee\", \"\");;;;;;;; return \"Schaltzeitpunkt für Kaffeemaschine einstellen\";;;;;;;; }"\
],\
"Löschen": {\
"match": "(Löschen)",\
"commands": [\
"{fhem (\"delete at_$recipient_kaffee  \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Programmierung gelöscht"\
]\
},\
"Status": {\
"match": "(Status)",\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $time = ReadingsVal(\"at_$recipient_kaffee\", \"time\", \"\");;;;;;;; return \"Programmierung Kaffeemaschine $time Uhr.\";;;;;;;; }"\
]\
},\
"Uhrzeit": {\
"match": "([0-1][0-9]|2[0-3])[:_][0-5][0-9]",\
"commands": [\
"{fhem (\"setreading $SELF $recipient_Time $message\");;;;;;;; my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; fhem (\"delete at_$recipient_kaffee  \");;;;;;;; fhem (\"define at_$recipient_kaffee at $time:00 set WZ_PB_RC03 on \");;;;;;;; fhem (\"setreading at_$recipient_kaffee time $time \") }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; return \"Kaffeemaschine $message Uhr eingestellt.\";;;;;;;; }"\
]\
}\
}\
}\
}
attr Kaffee_Dialog allowed everyone
attr Kaffee_Dialog room Gateway


Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 25 Dezember 2019, 13:39:02
@subseven, besten Dank für den Heizungs Dialog, der ist spitze.
Leider kriege ich ihn bei mir nicht zum laufen und ich finde den Fehler nicht. Kann mir bitte jemand helfen.

Ich habe den Dialog so weit umgebaut, das er FHT Thermostat ansteuern kann und habe die richtigen Namen eingetragen aber es wird nichts geschaltet bei mir, ergo gehe ich davon aus, das ich noch einen Fehler drin habe aber ich finde nicht wo.

Eingestellte Temperatur muss bei mir "desired-temp" heißen.
Gemessene Temperatur muss bei mir "measured-temp" heißen.


defmod heizungs_Dialog msgDialog {\
"Heizung": {\
"match": "Raumtemperaturen",\
"message": [\
"(Wohnzimmer|Büro) (Küche|Schlafzimmer) ",\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Ist:. . . . . Soll:. . . . . Raum:",\
"[HZ_WOHNZ:measured-temp]°C / [HZ_WOHNZ:desired-temp]°C / Wohnzimmer",\
"[HZ_BUERO:measured-temp]°C / [HZ_BUERO:desired-temp]°C / Büro",\
"[HZ_KUECHE:measured-temp]°C / [HZ_KUECHE:desired-temp]°C / Küche",\
"[HZ_BED:measured-temp]°C / [HZ_BED:desired-temp]°C / Schlafzimmer"\
],\
"Raum": {\
"match": "(Wohnzimmer|Büro|Schlafzimmer|Küche)",\
"commands": "setreading $SELF $recipient_Room $message",\
"message": [\
"(auto|boost) ",\
"(10.0|12.0|16.0|17.0) ",\
"(17.5|18.0|18.5|19.0) ",\
"(19.5|20.0|20.5|21.0) ",\
"(21.5|22.0|22.5|23.0) ",\
"(Programmierung) ",\
"(abbrechen) ",\
"Heizung im $message einstellen"\
],\
"Programmierung": {\
"match": "(Programmierung)",\
"message": [\
"(Status|Löschen) ",\
"(00:00|00:30|01:00|01:30|02:00|02:30) ",\
"(03:00|03:30|04:00|04:30|05:00|05:30) ",\
"(06:00|06:30|07:00|07:30|08:00|08:30) ",\
"(09:00|09:30|10:00|10:30|11:00|11:30) ",\
"(12:00|12:30|13:00|13:30|14:00|14:30) ",\
"(15:00|15:30|16:00|16:30|17:00|17:30) ",\
"(18:00|18:30|19:00|19:30|20:00|20:30) ",\
"(21:00|21:30|22:00|22:30|23:00|23:30) ",\
"(abbrechen) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Schaltzeitpunkt für $room einstellen\";;;;;;;; }"\
],\
"Löschen": {\
"match": "(Löschen)",\
"commands": [\
"{my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; fhem (\"delete at_$recipient_$room  \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Programmierung für $room gelöscht.\";;;;;;;; }"\
]\
},\
"Status": {\
"match": "(Status)",\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; my $time = ReadingsVal(\"at_$recipient_$room\", \"time\", \"\");;;;;;;; my $temp = ReadingsVal(\"at_$recipient_$room\", \"temp\", \"\");;;;;;;; return \"Programmierung $room $time Uhr $temp °C.\";;;;;;;; }"\
]\
},\
"Uhrzeit": {\
"match": "([0-1][0-9]|2[0-3])[:_][0-5][0-9]",\
"commands": [\
"{fhem (\"setreading $SELF $recipient_Time $message\") }"\
],\
"message": [\
"(auto|boost) ",\
"(10.0|12.0|16.0|17.0) ",\
"(17.5|18.0|18.5|19.0) ",\
"(19.5|20.0|20.5|21.0) ",\
"(21.5|22.0|22.5|23.0) ",\
"(abbrechen) ",\
"Heizung um $message Uhr einstellen"\
],\
"Temperatur": {\
"match": "auto|boost|[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; fhem (\"delete at_$recipient_$room  \");;;;;;;; fhem (\"define at_$recipient_$room at $time:00 set room=$room:FILTER=type=HeatingThermostat desired-temp $temp \");;;;;;;; fhem (\"setreading at_$recipient_$room time $time \");;;;;;;; fhem (\"setreading at_$recipient_$room temp $temp \") }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message°C für $time Uhr eingestellt.\";;;;;;;; }"\
]\
}\
}\
},\
"Temperatur": {\
"match": "auto|boost|[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;;  fhem (\"set room=$room:FILTER=type=HeatingThermostat desired-temp $temp \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message°C eingestellt.\";;;;;;;; }"\
]\
}\
}\
}\
}
attr heizungs_Dialog allowed rr_Mxxxxx,rr_Vxxx
attr heizungs_Dialog room Telegram
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: subseven am 27 Dezember 2019, 21:53:36
Was genau ist das Problem?
Sieht auf den ersten Blick eigentlich ganz Ok aus.
Läuft der Dialog selbst durch? Werden die AT angelegt?

Denke ein List vom Thermostat wäre interessant, Könnte mir vorstellen, dass es am "Type" liegt
Was steht im Log?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 28 Dezember 2019, 06:03:53
Das Problem ist folgendes.
Greife ich auf den Dialog zu, steht im FHEM das ich eine Temperatur eingestellt habe aber die Heizung ändert den Wert nicht.

Anzeige in Fhem vor dem senden vom Befehl.
heizungs_Dialog    rr_Mxxxxx: Heizung

Anzeige nach dem senden vom Befehl.
heizungs_Dialog   rr_Marcus: 21.0

Internals:
   CODE       1432
   CUL0_MSGCNT 2239
   CUL0_RAWMSG 810c04xx0909a00114320000260e
   CUL0_RSSI  -61.5
   CUL0_TIME  2019-12-28 05:47:52
   DEF        1432
   FUUID      5d7f71c3-f33f-7a73-085f-24d85a3d090a567d
   IODev      CUL0
   LASTInputDev CUL0
   MSGCNT     2239
   NAME       HZ_BUERO
   NR         307
   STATE      measured-temp: 19.4
   TYPE       FHT

Im Log steht nicht davon, das die Heizung gestellt wird.
Auszug Log
Heizung im Büro einstellen'
2019.12.28 05:59:05 3: msg rr_Marcus: ID=1577509144.86912.1 TYPE=push ROUTE=Jarvis RECIPIENT=@448551485 STATUS=OK PRIORITY=0 TITLE='' MSG='(Jarvis)
Temperatur im Büro auf 21.0°C eingestellt.'
2019.12.28 05:59:07 3: get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Mxxxxx|everyone).* trigger : Geräte

Mehr steht da nicht.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: subseven am 28 Dezember 2019, 10:47:39
Zitat von: ErzGabriel am 28 Dezember 2019, 06:03:53
Internals:
   CODE       1432
   CUL0_MSGCNT 2239
   CUL0_RAWMSG 810c04xx0909a00114320000260e
   CUL0_RSSI  -61.5
   CUL0_TIME  2019-12-28 05:47:52
   DEF        1432
   FUUID      5d7f71c3-f33f-7a73-085f-24d85a3d090a567d
   IODev      CUL0
   LASTInputDev CUL0
   MSGCNT     2239
   NAME       HZ_BUERO
   NR         307
   STATE      measured-temp: 19.4
   TYPE       FHT

Dein Thermostate sind scheinbar von einem anderen Typ. Ändere mal bitte wie folgt:

defmod heizungs_Dialog msgDialog {\
"Heizung": {\
"match": "Raumtemperaturen",\
"message": [\
"(Wohnzimmer|Büro) (Küche|Schlafzimmer) ",\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Ist:. . . . . Soll:. . . . . Raum:",\
"[HZ_WOHNZ:measured-temp]°C / [HZ_WOHNZ:desired-temp]°C / Wohnzimmer",\
"[HZ_BUERO:measured-temp]°C / [HZ_BUERO:desired-temp]°C / Büro",\
"[HZ_KUECHE:measured-temp]°C / [HZ_KUECHE:desired-temp]°C / Küche",\
"[HZ_BED:measured-temp]°C / [HZ_BED:desired-temp]°C / Schlafzimmer"\
],\
"Raum": {\
"match": "(Wohnzimmer|Büro|Schlafzimmer|Küche)",\
"commands": "setreading $SELF $recipient_Room $message",\
"message": [\
"(auto|boost) ",\
"(10.0|12.0|16.0|17.0) ",\
"(17.5|18.0|18.5|19.0) ",\
"(19.5|20.0|20.5|21.0) ",\
"(21.5|22.0|22.5|23.0) ",\
"(Programmierung) ",\
"(abbrechen) ",\
"Heizung im $message einstellen"\
],\
"Programmierung": {\
"match": "(Programmierung)",\
"message": [\
"(Status|Löschen) ",\
"(00:00|00:30|01:00|01:30|02:00|02:30) ",\
"(03:00|03:30|04:00|04:30|05:00|05:30) ",\
"(06:00|06:30|07:00|07:30|08:00|08:30) ",\
"(09:00|09:30|10:00|10:30|11:00|11:30) ",\
"(12:00|12:30|13:00|13:30|14:00|14:30) ",\
"(15:00|15:30|16:00|16:30|17:00|17:30) ",\
"(18:00|18:30|19:00|19:30|20:00|20:30) ",\
"(21:00|21:30|22:00|22:30|23:00|23:30) ",\
"(abbrechen) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Schaltzeitpunkt für $room einstellen\";;;;;;;; }"\
],\
"Löschen": {\
"match": "(Löschen)",\
"commands": [\
"{my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; fhem (\"delete at_$recipient_$room  \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Programmierung für $room gelöscht.\";;;;;;;; }"\
]\
},\
"Status": {\
"match": "(Status)",\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; my $time = ReadingsVal(\"at_$recipient_$room\", \"time\", \"\");;;;;;;; my $temp = ReadingsVal(\"at_$recipient_$room\", \"temp\", \"\");;;;;;;; return \"Programmierung $room $time Uhr $temp °C.\";;;;;;;; }"\
]\
},\
"Uhrzeit": {\
"match": "([0-1][0-9]|2[0-3])[:_][0-5][0-9]",\
"commands": [\
"{fhem (\"setreading $SELF $recipient_Time $message\") }"\
],\
"message": [\
"(auto|boost) ",\
"(10.0|12.0|16.0|17.0) ",\
"(17.5|18.0|18.5|19.0) ",\
"(19.5|20.0|20.5|21.0) ",\
"(21.5|22.0|22.5|23.0) ",\
"(abbrechen) ",\
"Heizung um $message Uhr einstellen"\
],\
"Temperatur": {\
"match": "auto|boost|[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; fhem (\"delete at_$recipient_$room  \");;;;;;;; fhem (\"define at_$recipient_$room at $time:00 set room=$room:FILTER=type=FHT desired-temp $temp \");;;;;;;; fhem (\"setreading at_$recipient_$room time $time \");;;;;;;; fhem (\"setreading at_$recipient_$room temp $temp \") }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message°C für $time Uhr eingestellt.\";;;;;;;; }"\
]\
}\
}\
},\
"Temperatur": {\
"match": "auto|boost|[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;;  fhem (\"set room=$room:FILTER=type=FHT desired-temp $temp \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message°C eingestellt.\";;;;;;;; }"\
]\
}\
}\
}\
}
attr heizungs_Dialog allowed rr_Mxxxxx,rr_Vxxx
attr heizungs_Dialog room Telegram


Du kannst auch manuell mal Testen ob die Befehle funktionieren:
set room=<RAUMNAME>:FILTER=type=FHT desired-temp <TEMPERATUR>

Damit sollte sich dann das Thermostat schalten lassen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 28 Dezember 2019, 12:11:45
Beides getestet. Kein Erfolg.
Über Befehlszeile, Befehl wird aus geführt ohne Fehlermeldung, wenn ich das Semikolon weglassen. Mit Semikolon, kommt Fehlermeldung unbekannter Filter.
Jeweils kein Eintrag im Log.

Auszug aus dem Log, beim versuch über Telegram
Heizung im Büro einstellen'
2019.12.28 12:06:28 3: msg rr_Marcus: ID=1577531188.78938.1 TYPE=push ROUTE=Jarvis RECIPIENT=@448551485 STATUS=OK PRIORITY=0 TITLE='' MSG='(Jarvis)
Temperatur im Büro auf 21.0°C eingestellt.'
2019.12.28 12:06:39 3: get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Mxxxxx|everyone).* trigger : Geräte

Mir ist mittlerweile was aufgefallen, was ich noch nicht ganz verstehe. Es wird von Raumname gesprochen, ich habe aber so keine Raumnamen, sondern nur Name der Heizung. Könnte da der Fehler liegen?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: subseven am 28 Dezember 2019, 12:32:59
Ja vermutlich, wie weiter oben geschrieben ist das Schalten der Thermostate ohne Angabe der Thermostatnamen.
Zuordnen tut er die Thermostate über den Raum.
D.h. die Logik funktioniert folgender Maßen:
Raum angeben-> Temperatur einstellen-> Filter fur angegebenen Raun auf den Typ HeatinThermostat(bei dir FHT) -> Befehl auf die gefilterten Geraete senden.

Wenn bei dir alle Thermostate in einem Raum sind funktioniert das so nicht.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 28 Dezember 2019, 12:36:51
Ne, meine Thermostate hängen alle in einem eigenen Raum. Küche, Wohnzimmer, Schlafzimmer, Büro.
Ich habe in FHEM die Räume angelegt, wo die Thermostate drin stehen, ergo verstehe ich das jetzt so, das ich den Raum am Anfang angeben muss und nicht die Heizung.
Probiere ich direkt mal aus.

Edit: Setzte ich bei der gemessenen Temperatur nur den Namen vom Raum ein, kommt keine Temperaturmessung an.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 28 Dezember 2019, 12:48:55
Jetzt ist der Groschen gefallen.
Da der Dialog mit Raumnamen arbeitet und ich keine Raumnamen in diesem Sinne habe, weil ich nur den Regler ansprechen kann und nicht das Thermostat, deswegen funzt das bei mir nicht.
Zumindest verstehe ich das jetzt so, weil Ahnung habe ich davon nicht. Telegram klappt bei mir nur, durch copy & paste, Dialoge selbst schreiben kann ich leider nicht, kriege es auch irgendwie nicht hin, es zu lernen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: subseven am 28 Dezember 2019, 14:21:40
Ich hab dir das mal quick and dirty angepasst.
Mit dem Ergebnis sollte es funktinoineren. Es ist damit aber nicht mehr möglich mehrere Thermostate gleichzeitig zu schalten und im Menü sieht es auch nicht mehr so schick aus.

defmod heizungs_Dialog msgDialog {\
"Heizung": {\
"match": "Raumtemperaturen",\
"message": [\
"(WONHNZ|BUERO) (KUECHE|BED) ",\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Ist:. . . . . Soll:. . . . . Raum:",\
"[HZ_WOHNZ:measured-temp]°C / [HZ_WOHNZ:desired-temp]°C / Wohnzimmer",\
"[HZ_BUERO:measured-temp]°C / [HZ_BUERO:desired-temp]°C / Büro",\
"[HZ_KUECHE:measured-temp]°C / [HZ_KUECHE:desired-temp]°C / Küche",\
"[HZ_BED:measured-temp]°C / [HZ_BED:desired-temp]°C / Schlafzimmer"\
],\
"Raum": {\
"match": "(WOHNZ|BUERO|KUECHE|BED)",\
"commands": "setreading $SELF $recipient_Room $message",\
"message": [\
"(auto|boost) ",\
"(10.0|12.0|16.0|17.0) ",\
"(17.5|18.0|18.5|19.0) ",\
"(19.5|20.0|20.5|21.0) ",\
"(21.5|22.0|22.5|23.0) ",\
"(Programmierung) ",\
"(abbrechen) ",\
"Heizung im $message einstellen"\
],\
"Programmierung": {\
"match": "(Programmierung)",\
"message": [\
"(Status|Löschen) ",\
"(00:00|00:30|01:00|01:30|02:00|02:30) ",\
"(03:00|03:30|04:00|04:30|05:00|05:30) ",\
"(06:00|06:30|07:00|07:30|08:00|08:30) ",\
"(09:00|09:30|10:00|10:30|11:00|11:30) ",\
"(12:00|12:30|13:00|13:30|14:00|14:30) ",\
"(15:00|15:30|16:00|16:30|17:00|17:30) ",\
"(18:00|18:30|19:00|19:30|20:00|20:30) ",\
"(21:00|21:30|22:00|22:30|23:00|23:30) ",\
"(abbrechen) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Schaltzeitpunkt für $room einstellen\";;;;;;;; }"\
],\
"Löschen": {\
"match": "(Löschen)",\
"commands": [\
"{my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; fhem (\"delete at_$recipient_$room  \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Programmierung für $room gelöscht.\";;;;;;;; }"\
]\
},\
"Status": {\
"match": "(Status)",\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; my $time = ReadingsVal(\"at_$recipient_$room\", \"time\", \"\");;;;;;;; my $temp = ReadingsVal(\"at_$recipient_$room\", \"temp\", \"\");;;;;;;; return \"Programmierung $room $time Uhr $temp °C.\";;;;;;;; }"\
]\
},\
"Uhrzeit": {\
"match": "([0-1][0-9]|2[0-3])[:_][0-5][0-9]",\
"commands": [\
"{fhem (\"setreading $SELF $recipient_Time $message\") }"\
],\
"message": [\
"(auto|boost) ",\
"(10.0|12.0|16.0|17.0) ",\
"(17.5|18.0|18.5|19.0) ",\
"(19.5|20.0|20.5|21.0) ",\
"(21.5|22.0|22.5|23.0) ",\
"(abbrechen) ",\
"Heizung um $message Uhr einstellen"\
],\
"Temperatur": {\
"match": "auto|boost|[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; fhem (\"delete at_$recipient_$room  \");;;;;;;; fhem (\"define at_$recipient_$room at $time:00 set HZ_$room desired-temp $temp \");;;;;;;; fhem (\"setreading at_$recipient_$room time $time \");;;;;;;; fhem (\"setreading at_$recipient_$room temp $temp \") }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message°C für $time Uhr eingestellt.\";;;;;;;; }"\
]\
}\
}\
},\
"Temperatur": {\
"match": "auto|boost|[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;;  fhem (\"set HZ_$room desired-temp $temp \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message°C eingestellt.\";;;;;;;; }"\
]\
}\
}\
}\
}
attr heizungs_Dialog allowed rr_Mxxxxx,rr_Vxxx
attr heizungs_Dialog room Telegram


Edit:
Ich habe jetzt aber noch immer nicht verstanden wir deine Konfig nun aussieht. Deine Angabe wiedersprechen sich zum Teil.
Der Dialog "geht" in einem Raum und schaltet in diesem Raum die Thermostate (oder was auch immer man über den Filter schalten möchte).
Das heißt wenn du einen Raum "Wohnzimmer" hast und das Thermostat HZ_WOHNZ heißt. Dann sollte der Dialog in der ursprünglichen Form funktionieren. Es muss dann nur der "TYPE" und der Befehle "desired-temp" angepasst werden.
Wenn du einen Raum "Heizung" hast und darin die Thermostate HZ_WOHNZ usw. sind dann ist der Dialog nicht optimal dafür geeignet. Aber mit meiner Anpassung funktionert es, wenn auch optisch nicht mehr so schön.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 28 Dezember 2019, 14:40:59
Jo, funzt zum Teil. Küche kann ich schalten, Büro nicht. Da haut er mit in einen Dummy, den ich für den Ventilator habe einen neuen State rein
FILTER=FHT desired-temp 21

Komischerweise habe ich so einen Dummy auch für die Küche. Da muss ich mal schauen, wo in meinem Dummy der Fehler liegt, weil da gehe ich von aus, das der Fehler im Dummy liegt, wenn es in einem Raum klappt und in dem anderen nicht.

Danke Dir für deine Bemühung.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: GammaTwin am 01 Januar 2020, 21:40:11
Auch von mir ein großes Lob für dieses Modul!

Ich wollte in "commands" eine Fallentscheidung einbauen. Dabei hänge an der Pipe |.

Ich konnte das Problem schon so weit eingrenzen: Unter "commands":
Funktioniort:
"set $SELF say @$recipient Haustür|Ziffer"

Funktioniert nicht:
"{return('set $SELF say @$recipient Haustür|Ziffer')}"

Ein IF funktioniert allerdings:
"IF (a=b) (set $SELF say @$recipient Haustür|Ziffer)"

Ziel soll ein fallbezogener Absprung sein, z.B.
"{return('set $SELF say @$recipient Haustür|Ziffer') if(a=b)}"

Da ich gern "return" anstatt "IF" verwenden würde, wäre ich an einer Lösung interessiert.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 02 Januar 2020, 18:28:03
Hallo,

Bei mir funktioniert leider das ,,zurück" nicht.
Ich muss immer ,,beenden" und dann wieder einsteigen.

Eigentlich habe ich einen eigenen Thread dazu aufgemacht.  https://forum.fhem.de/index.php/topic,106003.0.html (https://forum.fhem.de/index.php/topic,106003.0.html)

Oder ist es besser die Fragen hier zu posten?
Kann ich mir irgendwie die History anzeigen lassen?
Die scheint bei mir leer zu sein.
Ich dachte eigentlich, dass ich mit dem fhem-Befehl
{ReadingsVal('meta_Dialog', 'rr_Gerhard_history', '')}
Eine Ausgabe bekomme.

Vielen Dank im Voraus
Lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 02 Januar 2020, 22:01:25
Zitat von: gestein am 02 Januar 2020, 18:28:03
Eigentlich habe ich einen eigenen Thread dazu aufgemacht.  https://forum.fhem.de/index.php/topic,106003.0.html (https://forum.fhem.de/index.php/topic,106003.0.html)
Antwort folgt. Über diesen Thread werde ich informiert, wenn es Neuigkeiten gibt :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wasserwerk33 am 21 Januar 2020, 10:25:14
Hallo Leute

Habe mich nun durch alle 46 Seiten hier durchgelesen. Aber ich bekomme es nicht ans laufen.
Ich bin auch nicht sehr gut in Fhem.
Ich verzweifel langsam.  :-\
Könntet ihr mir sagen was ich falsch mache oder wo noch was gemacht werden muss?
List Roomate:
Internals:
   AUTOGONE   1579763007
   CFGFN     
   DEF        rgr_Residents,rgr_Parents # Elternteil
   DURATIONTIMER 1579634007.37076
   FUUID      5e27439a-f33f-faf7-9e9d-5d923f39b0e757d9
   FVERSION   20_ROOMMATE.pm:0.195330/2019-06-02
   NAME       rr_Stefan
   NOTIFYDEV  global,
   NR         23733
   NTFY_ORDER 50-rr_Stefan
   READY      1
   RESIDENTGROUPS rgr_Residents,rgr_Parents
   STATE      abwesend
   SUBTYPE    adult
   TYPE       ROOMMATE
   READINGS:
     2020-01-21 20:12:27   durTimerAbsence 00:09:00
     2020-01-21 20:12:27   durTimerAbsence_cr 9
     2020-01-21 19:32:09   durTimerPresence 00:00:00
     2020-01-21 19:32:09   durTimerPresence_cr 0
     2020-01-21 19:32:09   durTimerSleep   00:00:00
     2020-01-21 19:32:09   durTimerSleep_cr 0
     2020-01-21 20:05:49   fhemMsgRcvPush  /Stefan
     2020-01-21 20:05:49   fhemMsgRcvPushGw ZuhauseTelegram
     2020-01-21 20:03:27   lastDeparture   2020-01-21 20:03:27
     2020-01-21 20:03:27   lastLocation    undefined
     2020-01-21 20:03:27   lastState       initialized
     2020-01-21 20:03:27   location        underway
     2020-01-21 20:03:27   presence        absent
     2020-01-21 20:03:27   state           absent
     2020-01-21 20:03:27   wayhome         0
   TIMER:
     rr_Stefan_AutoGone:
       HASH       rr_Stefan
       MODIFIER   AutoGone
       NAME       rr_Stefan_AutoGone
     rr_Stefan_DurationTimer:
       HASH       rr_Stefan
       MODIFIER   DurationTimer
       NAME       rr_Stefan_DurationTimer
Attributes:
   alias      Stefan
   devStateIcon .*zuhause:user_available:absent .*anwesend:user_available:absent .*abwesend:user_away:home .*verreist:user_ext_away:home .*bettfertig:scene_toilet:asleep .*schlaeft:scene_sleeping:awoken .*schläft:scene_sleeping:awoken .*aufgestanden:scene_sleeping_alternat:home .*:user_unknown:home
   eventMap   home:zuhause absent:abwesend gone:verreist gotosleep:bettfertig asleep:schläft awoken:aufgestanden
   group      Zuhause
   icon       people_sensor
   msgContactPush ZuhauseTelegram:@6807xxxxx
   room       Anwesend
   rr_realname group
   sortby     1
   webCmd     state
   widgetOverride state:zuhause,bettfertig,schläft,aufgestanden,abwesend,verreist


List msg Config:
Internals:
   CFGFN     
   DEF       
   FUUID      5e26c487-f33f-faf7-e827-a7069900e4b0e781
   FVERSION   75_msgConfig.pm:0.189950/2019-03-22
   NAME       myMsgConfig
   NOTIFYDEV  TYPE=(Jabber|TelegramBot|yowsup)
   NR         21597
   NTFY_ORDER 50-myMsgConfig
   STATE      initialized
   TYPE       msgConfig
   READINGS:
     2020-01-21 10:29:43   fhemMsgState    initialized
Attributes:
   comment    FHEM Global Configuration for command 'msg'
   group      Global
   msgContactPush ZuhauseTelegram
   msgDialog_evalSpecials me=Dein Zuhause
TelegramBot=ZuhauseTelegram
   msgType    text
   room       Nachrichten
   stateFormat fhemMsgState
   userattr   msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
   verbose    3


List MSG Dialog
Internals:
   CFGFN     
   DEF        {
  "test": {
    "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."
    ]
  }
}
   FUUID      5e26cd9b-f33f-faf7-442f-001fce1f1eaf9de9
   MSGCOMMAND msg push \@$recipients $message
   NAME       Temperatur_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         21781
   NTFY_ORDER 50-Temperatur_Dialog
   STATE      Initialized
   TRIGGER    zurück,beenden,test,abbrechen
   TYPE       msgDialog
   READINGS:
     2020-01-21 20:00:05   state           Initialized
Attributes:
   room       Nachrichten


Ich habe irgendeinen Dialog eingefügt da ich noch keinen geschrieben habe.
Könnte mir jemand helfen?? ich bin echt am verzweifeln.
Danke schon mal
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wasserwerk33 am 21 Januar 2020, 20:37:19
so bin nun soweit das ich test bekomme und auch in Fhem test steht wenn ich anfrage. Aber wieso bekomme ich keine Rückantwort?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 22 Januar 2020, 10:38:54
Zitat von: Wasserwerk33 am 21 Januar 2020, 20:37:19
so bin nun soweit das ich test bekomme und auch in Fhem test steht wenn ich anfrage. Aber wieso bekomme ich keine Rückantwort?

Du solltest den metaDialog nicht ändern. Er dient lediglich dazu, alle Dialoge <als Dialog> anzuzeigen. Nimm doch einfach einen
der vielen Dialoge welche hier als RAW gepostet wurden und probier sie aus. Damit bekommst du hoffentlich ein Verständnis wie
msgDialog funktioniert.

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Wasserwerk33 am 22 Januar 2020, 22:36:25
Es läuft.
Ja habe ein Raw genommen und seit dem läuft es.

Danke
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Parador am 05 März 2020, 10:49:45
Hallo Zusammen,

gibt es die Möglichkeit einfach einen Befehl in einem Dialog zu wiederholen?
mit "TelegramBot_MTYPE=queryInline (%me%) "
starte ich ja immer wieder von Anfang an...
mit "TelegramBot_MTYPE=queryInline (Befehl) ",
komme ich aber nicht weiter, weil der Dialog ja erst wieder bei Eingabe von %me% wieder reagiert...
mit "TelegramBot_MTYPE=queryInline (Dialogname) ",
starte ich den Dialog neu, aber den Befahl darin kann ich nicht auslösen

Vielen Dank schon mal im Voraus!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Keule_09 am 19 März 2020, 13:44:58
Hallo,

ich versuche mich gerade daran links in Klarnamen zu versenden aber leider scheitere ich daran.
wie muss den der link aussehen damit ich ihn in Klarnamen verschicken kann:
Hier mein testdialog:

defmod 22.testdialog msgDialog {"22.Testdialog":{\
"message": [\
"(abbrechen|zurück)  ",\
"<i>Hier kannst du den Rolladen Wohnbereich bedienen:</i> ",\
"<b>Hier kannst du den Rolladen Wohnbereich bedienen:</b> "\
]\
}\
}
attr 22.testdialog DbLogExclude .*
attr 22.testdialog allowed 1,rr_Marco
attr 22.testdialog room Automation->Telegram


ich habe versucht den Beispielcode auf der Telegramhomepage einzufügen:
<a href="http://www.example.com/">inline URL</a>

leider bekomm ich dort dann nur eine Fehlermeldung
kann mir jemand weiterhelfen?

//Edit 21.03 :
Ist es überhaupt möglich den ParseMode im Dialog direkt zu übergeben wie in Telegram:
msg Markdown [This is an example](https://example.com)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 04 April 2020, 10:15:22
Hallo zusammen,

ich versuche mich gerade erstmal den metaDialog angezeigt zu bekommen. Klappt leider nicht. Der TelegrammBot funktioniert, das msgConfig habe ich auch angelegt und den metaDialog. Das Keyword ist angelegt und soweit nach Vorlage eingerichtet. Derzeit habe ich keinen Roommate, brauche ich den zwingend?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 04 April 2020, 11:11:44
Zitat von: brown78 am 04 April 2020, 10:15:22
Derzeit habe ich keinen Roommate, brauche ich den zwingend?

Ja!
VG Sebastian


Gesendet von iPad mit Tapatalk
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 04 April 2020, 11:58:45
Ok, habe ich angelegt. In welchem Device muss das Reading fhemMsgRcvPush ein Event erzeugen?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 04 April 2020, 12:25:30
Zitat von: brown78 am 04 April 2020, 11:58:45
Ok, habe ich angelegt. In welchem Device muss das Reading fhemMsgRcvPush ein Event erzeugen?
Aus dem Wiki:

ROOMMATE / GUEST
Für jeden Dialog kann festgelegt werden welche Person dazu berechtigt ist. Dazu sind Geräte vom Typ ROOMMATE oder GUEST mit definiertem msgContactPush Attribut erforderlich. Es ist darauf zu achten, dass das Reading fhemMsgRcvPush ein Event erzeugt. Siehe auch Attribut "allowed" in msgDialog.
Der Inhalt vom Attribut msgContactPush muss folgendem Muster entsprechen:
<NAME des TelegramBot Device>:@<zum ROOMMATE/GUEST gehörende Telegram ID> 


Event-on-update für o.g. Reading [emoji6]
VG Sebastian


Gesendet von iPad mit Tapatalk
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 04 April 2020, 12:33:47
Ja das habe ich gelesen, war nur unsicher ob das event-on-update in msgDialog oder Roommate muß...
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 04 April 2020, 13:50:44
Bekomme trotzdem keinen Dialog...
Hier mal die Listings:

msgConfig:
Internals:
   CFGFN     
   FUUID      5e88317a-f33f-47f9-e073-7bdcd458fb6930c4
   FVERSION   75_msgConfig.pm:0.189950/2019-03-22
   NAME       SkynetConfig
   NOTIFYDEV  TYPE=(Jabber|TelegramBot|yowsup)
   NR         1239
   NTFY_ORDER 50-SkynetConfig
   STATE      initialized
   TYPE       msgConfig
   READINGS:
     2020-04-04 09:04:26   fhemMsgState    initialized
Attributes:
   comment    FHEM Global Configuration for command 'msg'
   group      Global
   msgContactPush Skynet
   msgDialog_evalSpecials me=diag TelegramBot=Skynet
   msgType    text
   room       Steuerung->Benachrichtigungen
   stateFormat fhemMsgState
   userattr   msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
   verbose    3


msgDialog:
Internals:
   CFGFN     
   CHANGED   
   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      5e8832a4-f33f-47f9-49a7-a358ef363ba732f4
   MSGCOMMAND msg push \@$recipients $message
   NAME       metaDialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         1274
   NTFY_ORDER 50-metaDialog
   STATE      Initialized
   TRIGGER    beenden,abbrechen,diag
   TYPE       msgDialog
   READINGS:
     2020-04-04 13:44:19   state           Initialized
Attributes:
   allowed    Marius_Kraft
   disable    1
   room       Steuerung->Benachrichtigungen


Roommate:
Internals:
   CFGFN     
   CHANGED   
   DURATIONTIMER 1586001016.11085
   FUUID      5e884bcf-f33f-47f9-2dfa-594fcee60dbb8ade
   FVERSION   20_ROOMMATE.pm:0.195330/2019-06-02
   NAME       Marius_Kraft
   NOTIFYDEV  global,
   NR         1694
   NTFY_ORDER 50-MKr
   READY      1
   STATE      home
   SUBTYPE    adult
   TYPE       ROOMMATE
   READINGS:
     2020-04-04 10:57:02   durTimerAbsence 00:00:00
     2020-04-04 10:57:02   durTimerAbsence_cr 0
     2020-04-04 13:49:16   durTimerPresence 02:51:32
     2020-04-04 13:49:16   durTimerPresence_cr 172
     2020-04-04 10:57:02   durTimerSleep   00:00:00
     2020-04-04 10:57:02   durTimerSleep_cr 0
     2020-04-04 10:57:44   lastArrival     2020-04-04 10:57:44
     2020-04-04 10:57:44   lastLocation    undefined
     2020-04-04 10:57:44   lastState       initialized
     2020-04-04 10:57:44   location        home
     2020-04-04 10:57:44   mood            calm
     2020-04-04 10:57:44   presence        present
     2020-04-04 10:57:44   state           home
     2020-04-04 10:57:44   wayhome         0
   TIMER:
     MKr_DurationTimer:
       HASH       Marius_Kraft
       MODIFIER   DurationTimer
       NAME       MKr_DurationTimer
     Marius_Kraft_DurationTimer:
       HASH       Marius_Kraft
       MODIFIER   DurationTimer
       NAME       Marius_Kraft_DurationTimer
Attributes:
   alias      Status
   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
   event-on-change-reading fhemMsgRcvPush
   event-on-update-reading fhemMsgRcvPush
   group      MKr
   icon       people_sensor
   msgContactPush Skynet:@[i]TelegramID[/i]
   room       Steuerung->Benachrichtigungen
   rr_realname group
   sortby     1
   webCmd     state
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 04 April 2020, 15:13:40
Sind im device globalMsg die msgDialog_evalSpecials eingetragen?


Gesendet von iPhone mit Tapatalk
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 04 April 2020, 15:50:25
Ja sind sie, ist das Listing msgConfig aus oberem Post.

Edit: Das senden von Nachrichten mittels msg an Telegram funktioniert, die Befehle von Telegram aus kommen auch im Bot an.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 04 April 2020, 16:26:45
Dein metaDialog ist (immer noch) disabled? Und es fehlt auch noch das allowed-Attribut.
Entweder auf everyone oder auf deinen ROOMMATE setzen.

VG Sebastian


Gesendet von iPhone mit Tapatalk
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 04 April 2020, 16:42:38
Wenn ich disabled auf 0 Stelle, bekommt das device den status disabled. Deswegen disabled 1, damn ist der Status initialized. Das allowed schau ich nochmal an

Edit: allowed war auf meinen Nutzernamen bei Telegram gesetzt, hab es auf everyone geändert - ohne Erfolg leider.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 04 April 2020, 16:59:08
Zitat von: brown78 am 04 April 2020, 16:42:38
Wenn ich disabled auf 0 Stelle, bekommt das device den status disabled. Deswegen disabled 1, damn ist der Status initialized. Das allowed schau ich nochmal an

Edit: allowed war auf meinen Nutzernamen bei Telegram gesetzt, hab es auf everyone geändert - ohne Erfolg leider.

Dann lösche halt das Attribut disable. Sonst sieht eigentlich alles Okay aus. Wenn du dich nach dem Wiki hältst sollte es funktionieren.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 04 April 2020, 17:03:44
Wenn ich das Attribut lösche, springt es auch auf disabled...?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 04 April 2020, 17:29:51
Zitat von: brown78 am 04 April 2020, 17:03:44
Wenn ich das Attribut lösche, springt es auch auf disabled...?

Dann ist irgendwas total faul...  :o
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 04 April 2020, 17:39:57
Lösche mal alle
  "deletereading %TelegramBot% $recipient_sentMsgId"
aus deinem metaDialog. Wo hast du die her? Aus dem Wiki jedenfalls nicht....
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 04 April 2020, 17:55:35
Also entweder von hier aus dem thred oder aus dem Wiki. Hab nur C&P gemacht bisher

Edit: hab jetzt nochmal den metaDialog aus dem Wiki genommen, leider bekomme ich immer noch keine Dialoge in Telegram. Brauch ich noch etwas anders? Ich habe den TelegramBot, msgConfi, Roommate, einen metaDialog und den Waschmaschinen Dialog?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 04 April 2020, 18:21:27
Was mir noch einfällt:
Das Attribut utf8Special fehlt beim TelegramBot device?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 04 April 2020, 18:25:15
Ja, da habe ich bisher darauf verzichtet. Habe im TekegramBot Favoriten angelegt und da sind Umlaute dabei die werden angezeigt.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 04 April 2020, 18:28:27
Irgendwelche Fehlermeldungen im Log? Ggf. verbose hochsetzen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 04 April 2020, 18:31:44
Werde ich morgen machen (verbose hoch) derzeit keine Einträge. Danke schon mal für diese geduldige Hilfe. Schönen Abend noch!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: igami am 04 April 2020, 18:41:33
Zitat von: brown78 am 04 April 2020, 10:15:22
Derzeit habe ich keinen Roommate, brauche ich den zwingend?
Ja
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 05 April 2020, 07:54:19
So, nachdem heute morgen alle devices, also Roommate, TelegramBot, msgConfig und msgDialog verschwunden waren, habe ich alles nochmal mit anderen Bezeichnungen angelegt. Verbose habe ich gleich auf 5 gesetzt. Immer noch kein Dialog in Telegram aber hier mal das Log:

2020.04.05 08:05:30 5: msgConfig msg_Config: called function msgConfig_Notify()
2020.04.05 08:05:30 4: msg MKr: Received push message from Homebot: diag
2020.04.05 08:05:30 5: msgDialog (met_Dialog) - entering msgDialog_Notify
2020.04.05 08:05:30 4: msgDialog (met_Dialog) triggered by "MKr fhemMsgRcvPush: diag"
2020.04.05 08:05:30 5: msgDialog (met_Dialog)
    entering msgDialog_progress
        recipients: MKr
        message:    diag
        force:      0
2020.04.05 08:05:30 5: msgDialog (met_Dialog) - entering msgDialog_evalSpecials


Edit: Jetzt geht es, hatte im msgConfig me: statt me=....
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 05 April 2020, 10:17:14
Habe nochmal eine Frage. Als erstes mal mein Code aus dem rllDialog:

{ "Rolläden": {
    "message": [
      "( Schlafzimmer ) ",
      "( Kinderzimmer ) ",
      "( Galerie ) ",
      "( abbrechen ) ",
      "Raum auswählen"
    ],
    "Schlafzimmer": {
      "message": [
        "( Auf ) ",
        "( Zu ) ",
        "( Schritt auf ) ",
        "( Schritt zu ) ",
        "( abbrechen ) ",
        "Rolladen im $message bedienen"
      ],
      "Auf": {
        "commands": [
           "set HM_Schlafzimmer_RA off"
        ],
        "message": [
        "Rolladen im Schlafzimmer geöffnet"
        ]
      },
      "Zu": {
        "commands": [
           "set HM_Schlafzimmer_RA on"
        ],
        "message": [
        "Rolladen im Schlafzimmer geschlossen"
        ]
      },
      "Schritt auf": {
        "commands": [
           "set HM_Schlafzimmer_RA up 10"
        ],
        "message": [
        "Rolladen im Schlafzimmer +10% geöffnet"
        ]
      },
      "Schritt zu": {
        "commands": [
           "set HM_Schlafzimmer_RA down 10"
        ],
        "message": [
        "Rolladen im Schlafzimmer +10% geschlossen"
        ]
      }
    }
  }
}


Um den Code nicht für jeden Raum wiederholen zu müssen, dachte ich mit $message kann ich das bestimmt irgendwie hinbekommen. Bisher funktioniert das natürlich nur für Schlafzimmer, da ich ja nur das definiert habe. Wie kann ich festlegen, dass in diesen "Block" gesprungen wird wenn Schlafzimmer oder Kinderzimmer oder Galerie geklickt wurde? Und wie baue ich das cmd dann zusammen?
Meine Schalter sind so benannt wie im Beispiel ersichtlich: HM_Schlafzimmer_RA, ich möchte also so etwas wie "HM_" + $message + "_RA" machen.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 05 April 2020, 10:49:04
Habe es so probiert, funktioniert aber nicht.

{ "Rolläden": {
    "message": [
      "( Schlafzimmer ) ",
      "( Kinderzimmer ) ",
      "( Galerie ) ",
      "( abbrechen ) ",
      "Raum auswählen"
    ],
    "Raum": {
      "match": " ?([Schlafzimmer] | [Kinderzimmer] | [Galerie]) ?",
      "message": [
        "( Auf ) ",
        "( Zu ) ",
        "( Schritt auf ) ",
        "( Schritt zu ) ",
        "( abbrechen ) ",
        "Rolladen im $message bedienen"
      ],
      "Auf": {
        "commands": [
           "set HM_Schlafzimmer_RA off"
        ],
        "message": [
        "Rolladen im $message geöffnet"
        ]
      },
      "Zu": {
        "commands": [
           "set HM_Schlafzimmer_RA on"
        ],
        "message": [
        "Rolladen im $message geschlossen"
        ]
      },
      "Schritt auf": {
        "commands": [
           "set HM_Schlafzimmer_RA up 10"
        ],
        "message": [
        "Rolladen im $message +10% geöffnet"
        ]
      },
      "Schritt zu": {
        "commands": [
           "set HM_Schlafzimmer_RA down 10"
        ],
        "message": [
        "Rolladen im $message +10% geschlossen"
        ]
      }
    }
  }
}


Edit:
Mit
"match": "Schlafzimmer|Kinderzimmer|Galerie",
Funktioniert zumindest die Raumauswahl. bleibt noch das cmd zu basteln.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: HeikoE am 05 April 2020, 21:50:50
Bei den commands hatte ich auch ein Problem.
Ich wollte unter gewissen Umständen die letzte Message löschen. Die ID steht im Reading Telegram:sentMsgId.
Im Message-Teil werden Readings mittels eckiger Klammern ausgewertet, z.B.

"message": [
"Temperatur: [DR.DWD:temperature]",
...]

Im Command-Teil geht das NICHT, also

"commands": [ "set Telegram msgDelete [Telegram:sentMsgId]",

hat keine Funktion.

Was aber geht, ist mit dem Attribut "evalSpecials" zu arbeiten:

attr Dialog evalSpecials sentMsgId=[Telegram:sentMsgId]

Dies kann dann mittels "%...%" verwendet werden:

"commands": [
         "set Telegram msgDelete %sentMsgId%",
...]

Dieses Konstrukt funktioniert problemlos.

Langer Rede kurzer Sinn: vielleicht hilft Dir "evalSpecials" weiter.
Gruß Heiko
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 06 April 2020, 08:14:54
Zitat von: HeikoE am 05 April 2020, 21:50:50
Langer Rede kurzer Sinn: vielleicht hilft Dir "evalSpecials" weiter.
Gruß Heiko

Vielen Dank für die Antwort! Habe es etwas anders gelöst. Im TelegramBot gibt es das Reading "prevMsgText", dem Namen entsprechend enthält dieses Reading die vorhergehende Nachricht. Damit habe ich es nun hinbekommen, dass auch nach dem Steuern eines Rollo, der entsprechende Raumname angezeigt wird. Bleibt nur noch das Problem mit dem cmd. Hierzu müsste ich ja einen String zusammenbasteln und zwar aus "HM_" + [TelegramBot:prevMsgText] + "_RA". Hier dann ggf. evalSpecials verwenden... Mal schauen ob ich das noch hinbekomme.

Hier mal mein Versuch, hab in evalSpecials noch prevMsg=[TelegramBot:prevMsgText] bCmd=HM_ eCmd=_RA hinzugefügt. In command funktioniert das zusammensetzen scheinbar nicht, der Befehl wird nicht ausgeführt, im Log steht nichts dazu. In message funktioniert das Zusammensetzen der strings %bCmd%%prevMsg%%eCmd%, dort brauche ich es aber eingentlich nicht...

{ "Rolläden": {
    "message": [
      "( Schlafzimmer ) ",
      "( Kinderzimmer ) ",
      "( Galerie ) ",
      "( abbrechen ) ",
      "Raum auswählen"
    ],
    "Schlafzimmer": {
      "match": "Schlafzimmer|Kinderzimmer|Galerie",
      "message": [
        "( Auf ) ",
        "( Zu ) ",
        "( Schritt auf ) ",
        "( Schritt zu ) ",
        "( abbrechen ) ",
        "Rolladen $message bedienen"
      ],
      "Auf": {
        "commands": [
           "set %bCmd%%prevMsg%%eCmd% off"
        ],
        "message": [
        "Rolladen %bCmd%%prevMsg%%eCmd% geöffnet"
        ]
      },
      "Zu": {
        "commands": [
           "set HM_Schlafzimmer_RA on"
        ],
        "message": [
        "Rolladen %prevMsg% geschlossen"
        ]
      },
      "Schritt auf": {
        "commands": [
           "set HM_Schlafzimmer_RA up 10"
        ],
        "message": [
        "Rolladen %prevMsg% +10% geöffnet"
        ]
      },
      "Schritt zu": {
        "commands": [
           "set HM_Schlafzimmer_RA down 10"
        ],
        "message": [
        "Rolladen %prevMsg% +10% geschlossen"
        ]
      }
    }
  }
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 07 April 2020, 11:15:28
Also ich bräuchte bitte nochmal Hilfe. Ich hab einiges ausprobiert, mein command wird aber nicht ausgeführt bzw. zeigt keine Wirkung.
Im msg_Config habe ich das Attribut evalSpecials xCmd=HM_[Homebot:prevMsgText]_RA angelegt. Wenn ich in message nun %xCmd% ausgeben lasse, dann steht da HM_Schlafzimmer_RA.
Wenn ich aber in command "set %xCmd% off" angebe, dann wir der Rollo nicht geöffnet.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: HeikoE am 07 April 2020, 21:28:57


Zitat von: brown78 am 07 April 2020, 11:15:28
Im msg_Config habe ich das Attribut evalSpecials xCmd=HM_[Homebot:prevMsg]_RA angelegt.
Sollte das Reading nicht 'Homebot:prevMsgText'?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 08 April 2020, 06:28:50
Ja richtig , tut es im attr auch.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 08 April 2020, 08:49:49
Habe gerade einen weiteren Dialog erstellt für meine Leselampen, diese werden mit einer LightScene gesteuert. Hier muss also kein String zusammengesetzt werden.
trotzdem funktioniert das command "set Leselampen scene $message" nicht. Kann man im command überhaupt eine variable verwenden?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 08 April 2020, 19:16:17
Hi zusammen.
Ich habe da mal ne Frage.
Mein Device liefert mir ein Symbole in Fhem, im Bot taucht nur die Bezeichnung des Symboles auf, wie kann ich das in Text umwandeln.
Beispiel:
Device gibt rc_dot@blue als blauen Punkt aus. In Telegram taucht rc_dot@blue auf, das würde ich gerne in Text "blau" umwandeln.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 09 April 2020, 07:38:29
Zitat von: ErzGabriel am 08 April 2020, 19:16:17
Hi zusammen.
Ich habe da mal ne Frage.
Mein Device liefert mir ein Symbole in Fhem, im Bot taucht nur die Bezeichnung des Symboles auf, wie kann ich das in Text umwandeln.
Beispiel:
Device gibt rc_dot@blue als blauen Punkt aus. In Telegram taucht rc_dot@blue auf, das würde ich gerne in Text "blau" umwandeln.

Bin zwar kein Profi, aber du könntest bspw. in Deinem device ein userattr anlegen und da den Text "blau" rein schreiben. Nehmen wir an es ist ein dummy, der mittels DOIF die Farbe blau anzeigt, dann kann das DOIF auch das attr color blau setzen. Wenn DU jetzt in dem msg_Config device in msg_evalSpecials color=[dmy:color], dann kannst Du im msg_Dialog "message": [ "%color%" ] verwenden um den Text "blau" anzeigen zu lassen.

Vielleicht geht es aber auch mit Perl Code in message, das weiß ich aber nicht.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 09 April 2020, 10:40:55
Okay, hört sich jetzt interessant an, nur verstehe ich das leider null. Meine Dialoge basieren nur auf Copy & Paste, da ich irgendwie zu blöde bin eine Dialoge zu schreiben. Mag dran liegen, das ich mit Perl nicht klar komme oder ich einfach zu blöde bin es zu lernen, weil ich vielleicht versuche das falsche zu lernen.
Aber ich werde mal schauen, was ich erreichen kann, wenn ich Google bemühe.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: brown78 am 09 April 2020, 11:08:03
Die Dialoge selbst sind in JSON, das kann man schon so halbwegs durchschauen, wenn man sich die Beispiele anschaut. Zumindest hast Du das msg_Config angelegt und das userattr msg_evalSpecials solltest Du auch haben, wenn Du nach dem Wiki vorgegangen bist. In dieses Attribut kannst Du ein eigenes "Feld" eintragen. Nach Anleitung hast Du dort drin stehen:
me=aktivierungswort TelegramBot=BotDevice

Dieser Zeile einfach hinzufügen color=[device:Reading]
-Da merke ich gerade ich hatte vorher geschrieben Du brauchst das Attribut color, das stimmt nicht, das muß ein Reading sein. Also:
setreading Farbpunkt_Device color blau

msg_Config "erhält" dadurch bei Ausführung den Inhalt des Readings color von Deinem Farbpunkt_Device.

Soweit die Theorie, ich weiß natürlich nicht wie Deine Devices aussehen und was die machen, z.B. wechselt die Farbe und wer sagt wann gewechselt werden soll...
Weiter in der Theorie, derjenige der dem Farbpunkt_Device sagt: mach jetzt blau, der muß auch das setreading machen.

In den Dialogen hast du ja irgendwo dann "message": [

stehen, das ist die Nachricht die in Telegram angezeigt wird. Ohne zu wissen wie das bei Dir aussieht, kannst Du den message "Block" sagen, dass er das Reading color von Deinem Farbpunkt_Device anzeigen soll.

"message": [
"Die Farbe [Farbpunkt_Device:color] wurde ausgewählt"
]


Ich hoffe, dass Dir das etwas weiterhilft.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 27 April 2020, 19:52:47
Hallo.
Ich kriege es einfach nicht hin, das Telegram mir ein Wort anzeigt.

Also mal ganz von Anfang an. Ich will für meine Maus eine Meldung auf Telegram senden, da Sie Allergien hat und damit dann weiß, ob Sie abends eine Tablette nehmen muss.

Mein Sub in der Utils.
sub telegramBotGetPollenListMessage()
{
my $pol1 = ReadingsVal("Pollen", "fc1_Birke", "0");
my $pol2 = ReadingsVal("Pollen", "fc1_Erle", "0");
my $pol3 = ReadingsVal("Pollen", "fc1_Hasel", "0");
my $pol4 = ReadingsVal("Pollen", "fc1_Graeser", "0");
my $pol5 = ReadingsVal("Pollen", "fc1_Roggen", "0");
my $returnMessage;
$returnMessage .= "Birke: $pol1 \n" if($pol1 !~ /white/);
$returnMessage .= "Erle: $pol1 \n" if($pol2 !~ /white/);
$returnMessage .= "Hasel: $pol1 \n" if($pol3 !~ /white/);
$returnMessage .= "Gräser: $pol1 \n" if($pol4 !~ /white/);
$returnMessage .= "Roggen: $pol1 \n" if($pol5 !~ /white/);
return $returnMessage;
}


Mein Dialog
efmod doif_pollen1 DOIF ([18:10]) (set Jarvis msg @M**** Birke: [Pollen:fc2_Birke]\n\
Gräser: [Pollen:fc2_Graeser]\n\
Roggen: [Pollen:fc2_Roggen])
attr doif_pollen1 do always
attr doif_pollen1 room Telegram

setstate doif_pollen1 cmd_1
setstate doif_pollen1 2020-04-27 18:10:00 cmd 1
setstate doif_pollen1 2020-04-27 18:10:00 cmd_event timer_1
setstate doif_pollen1 2020-04-27 18:10:00 cmd_nr 1
setstate doif_pollen1 2020-04-24 18:07:07 mode enabled
setstate doif_pollen1 2020-04-27 18:10:00 state cmd_1
setstate doif_pollen1 2020-04-27 19:33:29 timer_01_c01 28.04.2020 18:10:00


Funzt so weit. Die Meldung kommt jeden Abend auf dem Handy an, nur das Ergebniss sieht mies aus.

Ergebnis:
Birke: rc_dot@white
Gräser: rc_dot@yellow
Roggen: rc_dot@white

Die beiden unteren Angaben sind in Telegram auch so eingerückt, damit könnte ich ja noch leben aber die Anzeige vom Ergebnis hätte ich gerne anders.
rc_dot@white = keine
rc_dot@yellow = leichte
rc_dot@orange = mittel
rc_dot@red = stark

Ich habe es nach der Anleitung von brown78 versucht aber ich kriege es nicht hin.
Kann mir bitte jemand helfen?
Danke.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 28 April 2020, 16:14:54
Zitat von: ErzGabriel am 27 April 2020, 19:52:47
Ich habe es nach der Anleitung von brown78 versucht aber ich kriege es nicht hin.
Kann mir bitte jemand helfen?
Danke.

Ich habe die Pollen momentan so am Start:

Dialog:
{"11.🌿🌼.Pollen.🌸🌺": {
  "commands": "{pollen()}",
  "message": [
  "(%me%) ",
  "Hole Pollen..."
  ]
}
}


PERL-Funktion:
sub pollen() {
my $msg;
my @plants = ("Ahorn", "Ambrosia", "Ampfer", "Beifuss", "Birke", "Brennnessel", "Buche", "Eiche", "Erle", "Esche", "Fichte", "Flieder", "Gaensefuss", "Gerste", "Graeser", "Hafer", "Hasel", "Holunder", "Hopfen", "Kiefer", "Linde", "Loewenzahn", "Mais", "Nessel", "Pappel", "Platane", "Raps", "Roggen", "Rotbuche", "Spitzwegerich", "Tanne", "Ulme", "Wegerich", "Weide", "Weizen");
foreach my $plant (@plants) {
my $pol = ReadingsVal("Allergene","fc2_$plant", "");
if ($pol !~ /white|yellow/) {
$msg .= "🌳"  if ($plant =~ /Ahorn|Birke|Buche|Eiche|Erle|Esche|Linde|Rotbuche|Pappel|Platane|Ulme|Weide/);
$msg .= "🌲"  if ($plant =~ /Fichte|Kiefer|Tanne/);
$msg .= "🌿"  if ($plant =~ /Ambrosia|Ampfer|Beifuss|Brennessel|Gaensefuss|Graeser|Holunder|Nessel|Spitzwegerich|Wegerich/);
$msg .= "🌾"  if ($plant =~ /Gerste|Hafer|Hopfen|Raps|Roggen|Weizen/);
$msg .= "🌼"  if ($plant =~ /Flieder|Loewenzahn/);
$msg .= "🌽"  if ($plant =~ /Mais/);
$msg .= "🌰"  if ($plant =~ /Hasel/);
$msg .= "$plant: mittel. 🟡\n" if ($pol =~ /yellow/);
$msg .= "$plant: hoch! 🟠\n" if ($pol =~ /orange/);
$msg .= "$plant: extrem hoch! 🔴\n" if ($pol =~ /red/);
}
}
fhem("msg push $msg") if ($msg);
}


Ist nicht schön aber funktioniert   ;D
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 28 April 2020, 18:35:41
Hi Sebastian.
Das sieht ja nicht schlecht aus aber dafür muss meine Maus selbst abfragen und sowas vergisst Sie gerne mal. Ende vom Lied ist dann, das ich mir am nächsten Tag das Gejammer anhören kann, weil Sie ihre Tablette nicht genommen hat.

Mir ist aber mit Deinem Post jetzt schon mal ein Fehler bei meinem Gebastel aufgefallen. Meine Sub ist sinnlos, da ich die Readings für die Message abfrage.
Also muss ich jetzt erstmal raus kriegen, wie ich das Ergebnis meiner Sub per Telegram versenden kann und dann kann ich vielleicht den unteren Part von Dir in meine Sub einbauen um ordentliche Punkte zu haben.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 28 April 2020, 19:44:30
Zitat von: ErzGabriel am 28 April 2020, 18:35:41
Hi Sebastian.
Das sieht ja nicht schlecht aus aber dafür muss meine Maus selbst abfragen und sowas vergisst Sie gerne mal. Ende vom Lied ist dann, das ich mir am nächsten Tag das Gejammer anhören kann, weil Sie ihre Tablette nicht genommen hat.

Mir ist aber mit Deinem Post jetzt schon mal ein Fehler bei meinem Gebastel aufgefallen. Meine Sub ist sinnlos, da ich die Readings für die Message abfrage.
Also muss ich jetzt erstmal raus kriegen, wie ich das Ergebnis meiner Sub per Telegram versenden kann und dann kann ich vielleicht den unteren Part von Dir in meine Sub einbauen um ordentliche Punkte zu haben.

Ob du eine Sub in einem Dialog aufrufst oder in einem at/doif ist ja wurscht  ;)
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 28 April 2020, 20:11:16
Okay, das ist einleuchtend. Ich muss trotzdem erstmal raus kriegen, wie ich die Subroutine in die Message kriege, das der Bot sie versendet.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 29 April 2020, 07:59:32
Zitat von: ErzGabriel am 28 April 2020, 20:11:16
Okay, das ist einleuchtend. Ich muss trotzdem erstmal raus kriegen, wie ich die Subroutine in die Message kriege, das der Bot sie versendet.

Das verstehe ich nicht. Dein doif könnte so aussehen:
defmod test.di DOIF ([18:10]) ({pollen()})

Das Versenden der $msg muss nicht mit dem msg-Befehl erfolgen, kann auch direkt mit dem bot gemacht werden:
fhem("set Jarvis msg $msg") if ($msg);
VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 02 Mai 2020, 07:39:03
@Sebastian
Ich habe die Subroutine jetzt so eingepflegt wie von Dir gepostet und das DOIF auch soweit umgebaut. Habe noch die gesendeten Daten ein wenig angepasst aber irgendwas habe ich wohl übersehen, weil beim Bot kommt immer nur ein
Zitatpush
raus. Muss ich irgendwo noch was eintragen, das der Bot das umsetzen kann, weil ne Fehlermeldung erhalte ich nicht.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 02 Mai 2020, 08:18:50
Das hatte ich auch schon. Dann gibts laut Prüfung keine Warnungen und somit kein $msg. Also wird anstatt $msg ,,push" als Text gesendet...
Schaum mal oben in den Code - ich hab noch ein if ($msg)
eingefügt [emoji6]
Noch schöner: ein else-Block mit eine Nachricht dass die Belastung gering ist oder so...
VG Sebastian


Gesendet von iPhone mit Tapatalk
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 02 Mai 2020, 08:41:45
Jo, funzt. Danke Dir.
Eine Frage hätte ich jetzt noch und die nur aus Faulheit, weil ich das jetzt nicht ewig testen und probieren möchte.
fhem("msg push $msg") if ($msg);
Diese Zeile ist für das senden zuständig und die Nachricht kommt jetzt immer bei mir an, wie muss ich die ändern, das es an meine Maus gesendet wird.
Ist das so richtig?
fhem("msg @NAME push $msg") if ($msg);
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 02 Mai 2020, 09:16:35
Zitat von: ErzGabriel am 02 Mai 2020, 08:41:45
Jo, funzt. Danke Dir.
Eine Frage hätte ich jetzt noch und die nur aus Faulheit, weil ich das jetzt nicht ewig testen und probieren möchte.
fhem("msg push $msg") if ($msg);
Diese Zeile ist für das senden zuständig und die Nachricht kommt jetzt immer bei mir an, wie muss ich die ändern, das es an meine Maus gesendet wird.
Ist das so richtig?
fhem("msg @NAME push $msg") if ($msg);

help msg
zeigt
msg [<type>] [<@device>|<e-mail address>] [<priority>] [|<title>|] <message>

Also so zB.:
msg push @rr_Sebastian $msg

Im verlinkten Forums-Thread findet du weiterhin:
Auch können mehrere Typen oder Empfänger durch Komma getrennt angegeben werden (Und-Verknüpfung).

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 02 Mai 2020, 10:06:10
Im Dialog habe ich es jetzt so umgebaut, dass der Dialog aufrufende User die Nachricht bekommt:
{"08.🌿🌼.Pollen.🌸🌺": {
  "message": [
  "(%me%) ",
  "Aktuelle Pollenbealstung:",
  "{return pollen() }"
  ]
}
}


In der sub dann:
return $msg;

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 02 Mai 2020, 11:26:59
Es klappt noch nicht die Daten an meine Maus zu schicken.
Habe die Zeile entsprechend umgebaut aber es kommen die Daten immer noch bei mir an, sollen aber zu meiner Maus.
DoIF's, wo der Code im Define steht kann ich an meine Maus schicken lassen aber hier wo der Code in der Subroutine steht, will es einfach nicht klappen.
Sie ist aber natürlich als User eingetragen und auch vom Bot.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 02 Mai 2020, 11:38:59
Zitat von: ErzGabriel am 02 Mai 2020, 11:26:59
Es klappt noch nicht die Daten an meine Maus zu schicken.
Habe die Zeile entsprechend umgebaut aber es kommen die Daten immer noch bei mir an, sollen aber zu meiner Maus.
DoIF's, wo der Code im Define steht kann ich an meine Maus schicken lassen aber hier wo der Code in der Subroutine steht, will es einfach nicht klappen.
Sie ist aber natürlich als User eingetragen und auch vom Bot.
Zeig mal bitte den Code für DOIF und in der sub...
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 02 Mai 2020, 11:42:00
Hat sich in dem Sinne erledigt, meine Maus war nicht in der Lage mir mitzuteilen, das  sie die Nachricht erhält.
Klappt also, winzigste, ich erhalte es auch noch, was ich eigentlich gar nicht wollte.
sub pollen() {
my $msg;
my @V****;
my @plants = ("Birke", "Erle", "Graeser", "Hasel", "Roggen");
foreach my $plant (@plants) {
my $pol = ReadingsVal("Pollen","fc2_$plant", "");
if ($pol !~ /white|yellow/) {
$msg .= "🌳"  if ($plant =~ /Birke|Erle/);
$msg .= "🌿"  if ($plant =~ /Graeser/);
$msg .= "🌾"  if ($plant =~ /Roggen/);
$msg .= "🌰"  if ($plant =~ /Hasel/);
$msg .= "$plant: leicht 🟡\n" if ($pol =~ /yellow/);
$msg .= "$plant: mittel 🟠\n" if ($pol =~ /orange/);
$msg .= "$plant: hoch 🔴\n" if ($pol =~ /red/);
}
}
fhem("set Jarvis msg @V**** $msg") if ($msg);
}


defmod doif_Pollen DOIF ([18:00]) ({pollen()})
attr doif_Pollen do always
attr doif_Pollen room Telegram


Ist zwar ne unnötige Nachricht auf meine Smartphone aber kann ich zur Not mit leben.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 02 Mai 2020, 11:59:31
Zitat von: ErzGabriel am 02 Mai 2020, 11:42:00
Hat sich in dem Sinne erledigt, meine Maus war nicht in der Lage mir mitzuteilen, das  sie die Nachricht erhält.
Klappt also, winzigste, ich erhalte es auch noch, was ich eigentlich gar nicht wollte.
sub pollen() {
my $msg;
my @V****;
my @plants = ("Birke", "Erle", "Graeser", "Hasel", "Roggen");
foreach my $plant (@plants) {
my $pol = ReadingsVal("Pollen","fc2_$plant", "");
if ($pol !~ /white|yellow/) {
$msg .= "🌳"  if ($plant =~ /Birke|Erle/);
$msg .= "🌿"  if ($plant =~ /Graeser/);
$msg .= "🌾"  if ($plant =~ /Roggen/);
$msg .= "🌰"  if ($plant =~ /Hasel/);
$msg .= "$plant: leicht 🟡\n" if ($pol =~ /yellow/);
$msg .= "$plant: mittel 🟠\n" if ($pol =~ /orange/);
$msg .= "$plant: hoch 🔴\n" if ($pol =~ /red/);
}
}
fhem("set Jarvis msg @V**** $msg") if ($msg);
}


defmod doif_Pollen DOIF ([18:00]) ({pollen()})
attr doif_Pollen do always
attr doif_Pollen room Telegram


Ist zwar ne unnötige Nachricht auf meine Smartphone aber kann ich zur Not mit leben.

Ja du bist halt in PERL. Brauchst aber kein Array definieren:
my @V****;
So gehts auch:
{ my $recipient ="@";
$recipient .= "V****";
fhem("msg push $recipient $msg")
}


Man könnte das "@" bestimmt auch noch maskieren, weiß aber gerade nicht wie... Deshalb Quick and dirty concat...  ;D

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 14 Oktober 2020, 08:55:51
Hallo,

ich wollte heute meine Dialoge um die neuen Lichter erweitern und komme mit der Syntax für die Trigger und match nicht zusammen:

Die folgenden Menüpunkte sind im Dialog und ich würde gerne alle Trigger - außer die für die Terrassen - in einem Eintrag abfangen:
{"💡Beleuchtung":{
  "message": [
    "(💡Terrasse West) ",
    "(💡Terrasse West Podest) ",
    "(💡Terrasse Ost) ",
    "(💡Badezimmer) ",
    "(💡Vorzimmer) ",
    "(💡Gästezimmer) ",
    "(💡Kinderzimmer) ",
    "(💡Gästebad) ",
    "(💡Schrankräume) ",
    "(💡Schlafzimmer) ",
    "(💡Küche) ",
    "(💡Wohnzimmer) ",
    "(💡🎄Weihnachten) ",
    "(🔚beenden|🔙zurück) ",
    "Was möchtest Du tun?"
],
"💡[^T].*":{
"message":[
"{GetLights('$message')}",
"Welche Lampe soll ich schalten?"
]
}, .....


Der Teil mit "💡[^T].*" wird aber nie aufgerufen.
Wenn ich dort z.B. "💡Gästezimmer" eintrage, wird die Funktion "GetLights" aufgerufen - aber nicht mit dem RegEx.

Was mache ich falsch bzw. wie muss ich das richtig machen?

Danke im Voraus
liebe Grüße
Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 14 Oktober 2020, 14:38:41
Manchmal kommt man auf die verzwicksten Dinge selber drauf, wenn man es jemand anderen erklären muss (oder wie hier eine Frage dazu formulieren muss):

Die Lösung scheint so zu sein: Der <Trigger> kann ein beliebiger Text sein, wenn im Feld "match" das Richtige steht.

Wenn ich in meinen Dialog die Zeile "match": "💡[^T].*" dazugebe, dann geht's.
"Lichter":{
"match": "💡[^T].*",
"message":[
"{GetLights($message);}",
"Welche Lampe soll ich schalten?"
]
},


lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 26 Oktober 2020, 18:19:09
Hi zusammen.
Ich habe da mal ne Frage. Ich bin beruflich täglich in zwei bis drei Städten unterwegs und da zur Zeit Corona ja fleißig steigt, hats man in jeder Stadt eine andere Inzidenzzahl und somit anderen Vorgaben. Da drauf hin habe ich mir nach dem Thread https://forum.fhem.de/index.php/topic,113798.0.html (https://forum.fhem.de/index.php/topic,113798.0.html) mir die Daten vom RKI ins Fhem geholt.
Alles soweit eingerichtet und klappt auch super. Nun möchte ich gerne, das mein Bot mir morgens vor Arbeitsbeginn die Inzidenz der drei Städte schickt. Mit einer normalen Pushnachricht kriege ich nur einen Wert übermittelt und mir drei Nachrichten schicken lassen, finde ich doof.

Meine Frage, wie kriege ich das hin, das mir die drei Werte in einer Nachricht geschickt werden. Ich bin für Perl einfach zu blöde. Sorry.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: onkel-tobi am 15 November 2020, 12:49:54
Hi zusammen,

ich stehe aktuell auf dem Schlauch, was das das zurück zum metaDialog angeht.
Folgendes habe ich konfiguriert:
defmod msg_cams msgDialog {\
"Kameras": {\
"message": [\
"(Kamera Tür) ",\
"(Kamera Garten) ",\
"(Kamera 3d-Drucker) ",\
            "(abbrechen|🔙zurück) ",\
"Menü Kameras"\
]\
},\
"Kamera Tür": {\
"commands": "set FHEM_Bot sendImage /opt/fhem/www/images/ipcams/ipcam1_snapshot.jpg",\
"message": [\
"So siehts vor der Tür aus aus!"\
]\
},\
"Kamera Garten": {\
"commands": "set SSCam.INSTAR_IN_9008HD snap",\
"message": [\
"So siehts in deinem Garten aus!"\
]\
},\
"Kamera 3d-Drucker": {\
"commands": [\
"get og_az_cam3d image",\
"set homy sendImage /tmp/og_az_cam3d_snapshot.jpg"\
],\
"message": [\
"So siehts auf Deinem 3d-Drucker aus!"\
]\
},\
  "🔙zurück": {\
      "commands": [\
            "set $SELF say @$recipient %me%"\
      ]\
      }\
}
attr msg_cams allowed rr_Sandra,rr_Tobi

setstate msg_cams rr_Tobi: 🔙zurück
setstate msg_cams 2020-11-15 12:36:29 state rr_Tobi: 🔙zurück

Aber bei drücken auf zurück passiert nichts.

Der Metadialog:

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

setstate meta_Dialog rr_Tobi: do
setstate meta_Dialog 2020-11-15 12:40:27 state rr_Tobi: do

Hat jemand einen Tipp für mich?

Danke & Gruß,
Tobi
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: onkel-tobi am 15 November 2020, 12:52:44
Zitat von: ErzGabriel am 26 Oktober 2020, 18:19:09
Hi zusammen.
Ich habe da mal ne Frage. Ich bin beruflich täglich in zwei bis drei Städten unterwegs und da zur Zeit Corona ja fleißig steigt, hats man in jeder Stadt eine andere Inzidenzzahl und somit anderen Vorgaben. Da drauf hin habe ich mir nach dem Thread https://forum.fhem.de/index.php/topic,113798.0.html (https://forum.fhem.de/index.php/topic,113798.0.html) mir die Daten vom RKI ins Fhem geholt.
Alles soweit eingerichtet und klappt auch super. Nun möchte ich gerne, das mein Bot mir morgens vor Arbeitsbeginn die Inzidenz der drei Städte schickt. Mit einer normalen Pushnachricht kriege ich nur einen Wert übermittelt und mir drei Nachrichten schicken lassen, finde ich doof.

Meine Frage, wie kriege ich das hin, das mir die drei Werte in einer Nachricht geschickt werden. Ich bin für Perl einfach zu blöde. Sorry.
Bin mir nicht ganz sicher ob das hier im Thread richtig ist, geht aber so:
([07:47])(set homy send @#HA "Guten morgen, hier die neuesten Inzidenzzahlen:\nBorken: [RKI7:Borken]\nRhein Erft: [RKI7:Rhein-Erft-Kreis]\nKöln: [RKI7:Koln]\nMünster: [RKI7:Munster]")
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: eTax am 30 Dezember 2020, 16:45:38
Hi zusammen,

danke auch von meiner Seite für das Modul! Klappt soweit gut. Ich versuche mich gerade am Heizungsdialog von subseven.

Ich würde gerne 3 Thermostate vom Typ HM-CC-RT-DN damit steuern:

Die Geräte befinden sich in den jeweiligen Räumen.

Da die Temperatur der HM-Thermostate für das Gerät *_Clima gesteuert wird, klappt bei mir noch nicht die Auswahl des richtigen Gerätes im Dialog über :FILTER=....
Hier das Original von subseven zum setzen der Temperatur:
"{my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;;  fhem (\"set room=$room:FILTER=type=HeatingThermostat desiredTemperature $temp \");;;;;;;; }"\

Und hier mein Versuch für meine Thermostate:
"{my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;;  fhem (\"set room=$room:FILTER=NAME!=.*_Clima desired-temp $temp\");;;;;;;; }"\

Leider funktioniert das noch nicht. Ich habe auch die Befehle schon direkt probiert:
set room=Flur:FILTER=NAME!=.*_Clima desired-temp 13 -  Fehler: Unknown argument desired-temp
set room=Flur:FILTER=type=CUL-HM:FILTER=NAME!=.*_Clima desired-temp 13 -  Der Raum "Flur" wird aufgerufen.

Hat jemand eine Idee, wie die richtige Syntax lautet?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: eTax am 01 Januar 2021, 16:45:34
Ok, hat geklappt mit

set room=$room:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04 desired-temp $temp
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: matrois am 10 Januar 2021, 17:59:59
Hallo zusammen,
ich will bei msgDialog tiefer einsteigen. Ich habe bereits Dialoge zum Übertragen eines Kamerabildes von meiner Kamera (funktioniert nicht ganz, weil immer erst das zweite Bild aktuell ist), zur Rückmeldung ob irgendwo Batterien leer sind und zur Rückmeldung ob noch Fenster oder Türen offen sind erfolgreich angelegt. Jetzt kommt der erste Dialog mit Untermenü und dabei komme ich etwas ins Stolpern. Ich möchte einen Dialog Heizung aufrufen bei dem ich gefragt werde wo aufgeheizt werden soll. Im folgenden Auswahlmenü möchte ich zwischen "Bad" und "Büro" auswählen. Der folgende Dialog funktioniert zwar, aber...


defmod dialog_heizung msgDialog {\
  "Heizung": {\
    "match": "\/Heizung",\
    "commands": "deletereading TYPE=msgDialog $recipient_history",\
    "message": [\
      "(Büro) ",\
      "(Bad) ",\
      "Wo soll die Temperatur erhöht werden?"\
    ]},\
    "Büro": {\
         "commands": "set cc_clima_buero desired-temp 21",\
         "message": "Temperatur im Büro auf 21°C gestellt."\
            },\
    "Bad": {\
         "commands": "set tc_climate_bad desired-temp 23",\
         "message":  "Temperatur im Bad auf 23°C gestellt."\
            }\
}
attr dialog_heizung allowed everyone
attr dialog_heizung group IO
attr dialog_heizung room _FHEM

setstate dialog_heizung 2021-01-10 17:50:28 state Initialized


Meine Frage bzw. mein Problem: Die Menüeinträge "Bad" und "Büro" werden sowohl im Hauptmenü (über meta_Dialog wie im Wiki beschrieben) als auch im "Untermenü" Heizung angezeigt. Wie kann ich das abstellen? Vielen Dank für Tipps.
Viele Grüße,
matrois.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: matrois am 16 Januar 2021, 13:26:56
Hallo zusammen,
ich habe die Antwort gefunden. Bin wohl etwas durcheinander gekommen mit den ganzen Klammern, Kommas und Leerzeichen... Hier mein funktionierender Dialog mit dem "Extra" der Temperaturanzeige im Menü (habe ich im Thread gefunden, für gut befunden und übernommen  ;) )


{
  "Heizung": {
    "match": "\/Heizung",
    "message": [
      "(Büro # Soll [cc_dev_buero:desired-temp]°C # Ist [cc_dev_buero:measured-temp]°C) ",
      "(Bad # Soll [tc_dev_bad:desired-temp]°C # Ist [tc_dev_bad:measured-temp]°C) ",
      "(beenden) ",
      "Wo soll die Temperatur erhöht werden?"
    ],
    "Büro": {
         "match": "Büro.*",
         "commands": "set cc_clima_buero desired-temp 21",
         "message": "Temperatur im Büro auf 21°C gestellt."
            },
    "Bad": {
         "match": "Bad.*",
         "commands": "set tc_climate_bad desired-temp 23",
         "message":  "Temperatur im Bad auf 23°C gestellt."
          }
   }
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 10 Februar 2021, 12:40:36
Hallo zusammen.
Da ich mein Fhem System komplett neu aufgesetzt habe, neuer RPi, neue Installation von Fhem, muss ich natürlich auch den Bot neu einrichten.
Aber ich bin irgendwie zu blöde dazu, habe die gleichen Probleme wie ich sie schon damals damit hatte.
Ich habe nach dem Wiki, den Bot angelegt und dann den msgDialog.

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 Jarvis
attr myMsgConfig msgDialog_evalSpecials me=Jarvis TelegramBot=Jarvis
attr myMsgConfig msgType text
attr myMsgConfig room Telegram
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 3


Alles geklappt, jetzt wollte ich den meta_Dialos anlegen und kriege immer wieder die gleiche Fehlermeldung:
ZitatUsage: define  msgDialog {JSON}

'"' expected, at character offset 1 (before "(end of string)") at ./FHEM/76_msgDialog.pm line 93.

Mein meta_Dialog sieht wie folgt aus:
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."
    ]
  }
}


Ich schnalle einfach nicht, was ich da wieder falsch mache. Kann mir bitte jemand helfen? Danke.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 10 Februar 2021, 21:25:44
Wenn ich Deinen meta_dialog bei mir probiere, bekomme ich auch einen Fehler.

Probier mal folgendes:
1) einen leeren msgDialog anlegen mit
defmod meta_Dialog msgDialog {}
2) unter Def die Definition ändern, sprich den restlichen Code einfügen und "modify" drücken.

Damit sollte es klappen.

lg, Gerhard

Edit: Code korrigiert.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 10 Februar 2021, 21:36:15
Hallo Gerhard.

Defmode ist ein unbekannter Befehl und gehe ich von einem Schreibfehler aus, das es defmod heißen soll. Das war die Methode, die ich versucht habe. Einen Modify Button habe ich nciht.

Ist der meta_Dialog aus dem Wiki.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 10 Februar 2021, 21:58:00
Tja, die Rechtschreibprüfung  ::)
Tschuldige. Natürlich war defmod gemeint.

Nachdem Du den leeren meta_Dialog angelegt hast, kannst Du die Definition des Devices in der Device-Übersicht ändern indem Du auf das "DEF" klickst.
In dem Feld kannst Du dann die ausführliche Definition reinkopieren - also nur das was in den geschwungenen Klammern steht (ohne "defmod meta_Dialog msgDialog").

Unter dem Feld ist ein Link namens "modify meta_Dialog".
Wenn Du darauf klickst, wird die neue Definition übernommen und alles sollte funktionieren.

Manchmal scheint sich fhem bei komplexeren Definitionen zu verschlucken.
Da hilft es ein leeres Device anzulegen und dann die Definition zu ändern.

lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: ErzGabriel am 11 Februar 2021, 12:00:42
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.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: gestein am 11 Februar 2021, 13:27:28
Eigenartig.
Deine Definition hat bei mir so geklappt.
Aber wenn es gelöst ist und nun funktioniert, passt es ja.

lg, Gerhard
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: estege am 19 April 2021, 23:14:12
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?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: eTax am 03 Mai 2021, 10:59:44
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 (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 (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.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: kumue am 24 Mai 2021, 23:57:43
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'))}",
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Esjay am 25 Mai 2021, 16:49:50
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: kumue am 26 Mai 2021, 16:14:44
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ß
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: GammaTwin am 27 Mai 2021, 07:34:39
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),"
    ...
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: kumue am 27 Mai 2021, 20:38:03
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: GammaTwin am 27 Mai 2021, 21:21:36
Grüße,

vielleicht ein Fehler vor mir :)

Ich benutze es im "commands" nicht in "message".
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 02 August 2021, 20:22:52
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.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 05 August 2021, 13:39:40
echt niemand eine Idee, oder alle im Urlaub? :D
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: GammaTwin am 06 August 2021, 12:00:26
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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: PSI69 am 06 August 2021, 12:12:21
@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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 am 08 August 2021, 10:27:10
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?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 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.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 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 :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: GammaTwin 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=Meta
Daher 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  :)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Amenophis86 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.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: SmiL3 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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Frieder 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
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: HeikoS am 21 November 2022, 22:26:35
Ich verzweifle gerade. Habe mein FHEM neu aufgesetzt. Telegram selber funktioniert (Nachrichten kommen am Handy an).
msgDialog nach WIKI eingerichtet, aber der Meta-Dialog wird schon nicht vernünftig angezeigt.
define 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 TelegramFhem
attr myMsgConfig msgDialog_evalSpecials me=QQ\
TelegramBot=TelegramFhem
attr myMsgConfig msgType text
attr myMsgConfig room Z_Dialoge,Z_System
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 3
#   CFGFN     
#   FUUID      637bdc79-f33f-006c-1d70-680dfe33189f587f
#   FVERSION   75_msgConfig.pm:0.189950/2019-03-22
#   NAME       myMsgConfig
#   NOTIFYDEV  TYPE=(Jabber|TelegramBot|yowsup)
#   NR         16683
#   NTFY_ORDER 50-myMsgConfig
#   STATE      initialized
#   TYPE       msgConfig
#   eventCount 1
#   READINGS:
#     2022-11-21 21:15:53   fhemMsgState    initialized
#
setstate myMsgConfig initialized
setstate myMsgConfig 2022-11-21 21:15:53 fhemMsgState initialized


define 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 msg_Heiko
attr meta_Dialog room Z_Dialoge
#   CFGFN     
#   DEF        {
#  "%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."
#    ]
#  }
#}
#   FUUID      637bdd34-f33f-006c-c457-981ee96444046f42
#   MSGCOMMAND msg \@$recipients $message
#   NAME       meta_Dialog
#   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
#   NR         16710
#   NTFY_ORDER 50-meta_Dialog
#   STATE      msg_Heiko: QQ
#   TRIGGER    zurück,beenden,abbrechen,Dialog
#   TYPE       msgDialog
#   eventCount 10
#   OLDREADINGS:
#   READINGS:
#     2022-11-21 22:13:02   state           msg_Heiko: QQ
#
setstate meta_Dialog msg_Heiko: QQ
setstate meta_Dialog 2022-11-21 22:13:02 state msg_Heiko: QQ


define msg_Heiko ROOMMATE
attr msg_Heiko alias Status
attr msg_Heiko 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 msg_Heiko group msg_Heiko
attr msg_Heiko icon people_sensor
attr msg_Heiko msgContactPush TelegramFhem:791060837
attr msg_Heiko room ,Z_Dialoge
attr msg_Heiko rr_realname group
attr msg_Heiko sortby 1
attr msg_Heiko webCmd state
#   CFGFN     
#   DURATIONTIMER 1669065545.36769
#   FUUID      637bddfc-f33f-006c-a79a-6fc61728a9db5a11
#   FVERSION   20_ROOMMATE.pm:0.195330/2019-06-02
#   NAME       msg_Heiko
#   NOTIFYDEV  global,
#   NR         16739
#   NTFY_ORDER 50-msg_Heiko
#   READY      1
#   STATE      home
#   SUBTYPE    adult
#   TYPE       ROOMMATE
#   eventCount 65
#   READINGS:
#     2022-11-21 21:22:35   durTimerAbsence 00:00:00
#     2022-11-21 21:22:35   durTimerAbsence_cr 0
#     2022-11-21 22:18:05   durTimerPresence 00:54:00
#     2022-11-21 22:18:05   durTimerPresence_cr 54
#     2022-11-21 21:22:35   durTimerSleep   00:00:00
#     2022-11-21 21:22:35   durTimerSleep_cr 0
#     2022-11-21 22:13:02   fhemMsgPush     () (abbrechen)
#Ich kann folgendes für dich tun:
#     2022-11-21 22:13:02   fhemMsgPushGw    TelegramFhem:791060837:OK
#     2022-11-21 22:13:02   fhemMsgPushPrio 0
#     2022-11-21 22:13:02   fhemMsgPushState 1
#     2022-11-21 22:13:02   fhemMsgPushTitle -
#     2022-11-21 22:13:02   fhemMsgRcvPush  QQ
#     2022-11-21 22:13:02   fhemMsgRcvPushGw TelegramFhem
#     2022-11-21 22:13:02   fhemMsgState    1
#     2022-11-21 22:13:02   fhemMsgStateTypes push:1 forwards:text>push
#     2022-11-21 21:24:05   lastArrival     2022-11-21 21:24:05
#     2022-11-21 21:24:05   lastLocation    undefined
#     2022-11-21 21:24:05   lastState       initialized
#     2022-11-21 21:24:05   location        home
#     2022-11-21 21:24:05   mood            calm
#     2022-11-21 21:24:05   presence        present
#     2022-11-21 21:24:05   state           home
#     2022-11-21 21:24:05   wayhome         0
#   TIMER:
#     msg_Heiko_DurationTimer:
#       HASH       msg_Heiko
#       MODIFIER   DurationTimer
#       NAME       msg_Heiko_DurationTimer
#
setstate msg_Heiko home
setstate msg_Heiko 2022-11-21 21:22:35 durTimerAbsence 00:00:00
setstate msg_Heiko 2022-11-21 21:22:35 durTimerAbsence_cr 0
setstate msg_Heiko 2022-11-21 22:18:05 durTimerPresence 00:54:00
setstate msg_Heiko 2022-11-21 22:18:05 durTimerPresence_cr 54
setstate msg_Heiko 2022-11-21 21:22:35 durTimerSleep 00:00:00
setstate msg_Heiko 2022-11-21 21:22:35 durTimerSleep_cr 0
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgPush () (abbrechen) \
Ich kann folgendes für dich tun:
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgPushGw  TelegramFhem:791060837:OK
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgPushPrio 0
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgPushState 1
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgPushTitle -
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgRcvPush QQ
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgRcvPushGw TelegramFhem
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgState 1
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgStateTypes push:1 forwards:text>push
setstate msg_Heiko 2022-11-21 21:24:05 lastArrival 2022-11-21 21:24:05
setstate msg_Heiko 2022-11-21 21:24:05 lastLocation undefined
setstate msg_Heiko 2022-11-21 21:24:05 lastState initialized
setstate msg_Heiko 2022-11-21 21:24:05 location home
setstate msg_Heiko 2022-11-21 21:24:05 mood calm
setstate msg_Heiko 2022-11-21 21:24:05 presence present
setstate msg_Heiko 2022-11-21 21:24:05 state home
setstate msg_Heiko 2022-11-21 21:24:05 wayhome 0


Irgendwie werden mir am Handy noch Favoriten der alten FHEM-Installation angezeigt, obwohl aktuell keine definiert sind.
Sicherheitshalber noch mal der TelegramBot:
define TelegramFhem TelegramBot
attr TelegramFhem allowUnknownContacts 0
attr TelegramFhem cmdRestrictedPeer 791060837
attr TelegramFhem defaultPeer 791060837
attr TelegramFhem event-on-change-reading state
attr TelegramFhem event-on-update-reading msgText
attr TelegramFhem pollingTimeout 120
attr TelegramFhem room Z_Bridges,Z_System
attr TelegramFhem utf8Special 1
#   FAILS      0
#   NAME       TelegramFhem
#   NR         27
#   OLD_POLLING 182
#   POLLING    182
#   SNAME      TelegramFhem
#   STATE      Polling
#   TYPE       TelegramBot
#   UPDATER    0
#   WAIT       0
#   eventCount 26
#   me         813746914:HeikoFHEM:@HeikoFHEM_bot
#   offset_id  192616767
#   sentLastResult SUCCESS
#   sentMsgId  13489
#   sentMsgOptions
#   sentMsgPeer Heiko
#   sentMsgPeerId 791060837
#   sentMsgResult SUCCESS
#   sentMsgText 791060837 () (abbrechen)
#Ich kann folgendes für dich tun:
#   sourceVersion $Id: 50_TelegramBot.pm 24867 2021-08-23 10:23:15Z viegener $
#   Contacts:
#     791060837  791060837:Heiko:@HeikoStr
#   HU_DO_PARAMS:
#     NAME       
#     addr       https://api.telegram.org:443
#     auth       0
#     boundary   TelegramBot_boundary-x0123
#     buf       
#     code       200
#     compress   1
#     conn       
#     data       
#     displayurl <hidden>
#     header     agent: TelegramBot/1.0
#User-Agent: TelegramBot/1.0
#Accept: application/json
#Accept-Charset: utf-8
#Content-Type: multipart/form-data; boundary=TelegramBot_boundary-x0123
#     hideurl    1
#     host       api.telegram.org
#     httpheader HTTP/1.1 200 OK
#Server: nginx/1.18.0
#Date: Mon, 21 Nov 2022 21:13:02 GMT
#Content-Type: application/json
#Content-Length: 307
#Connection: close
#Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
#Access-Control-Allow-Origin: *
#Access-Control-Allow-Methods: GET, POST, OPTIONS
#Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection
#     hu_blocking 0
#     hu_filecount 25
#     hu_port    443
#     hu_portSfx
#     loglevel   4
#     method     POST
#     path       /###/sendMessage
#     protocol   https
#     redirects  0
#     timeout    30
#     url        https://api.telegram.org/###/sendMessage
#     args:
#       791060837
#       791060837 () (abbrechen)
#Ich kann folgendes für dich tun:
#       undef
#       0
#       undef
#       
#       1
#     hash:
#     sslargs:
#   HU_UPD_PARAMS:
#     FD         7
#     NAME       
#     addr       https://api.telegram.org:443
#     auth       0
#     buf       
#     code       200
#     compress   1
#     displayurl <hidden>
#     header     agent: TelegramBot/1.0
#User-Agent: TelegramBot/1.0
#Accept: application/json
#Accept-Charset: utf-8
#     hideurl    1
#     host       api.telegram.org
#     hu_blocking 0
#     hu_filecount 5281
#     hu_inProgress  TelegramBot_UpdatePoll:2429 TelegramBot_Callback:729 __ANON__:779
#     hu_port    443
#     hu_portSfx
#     isPolling  update
#     loglevel   4
#     method     GET
#     offset     192616767
#     path       /###/getUpdates?offset=192616767&limit=5&timeout=120
#     protocol   https
#     redirects  0
#     timeout    245
#     url        https://api.telegram.org/###/getUpdates?offset=192616767&limit=5&timeout=120
#     hash:
#     sslargs:
#   READINGS:
#     2022-11-21 21:40:38   Contacts        791060837:Heiko:@HeikoStr
#     2022-11-21 00:00:29   PollingErrCount 0
#     2022-11-20 02:13:53   PollingLastError Callback returned error :Too Many Requests: retry after 5:
#     2022-11-21 22:13:02   msgChat         Heiko
#     2022-11-21 22:13:02   msgChatId       791060837
#     2022-11-21 22:13:02   msgFileId       
#     2022-11-21 22:13:02   msgId           13488
#     2022-11-21 22:13:02   msgPeer         Heiko
#     2022-11-21 22:13:02   msgPeerId       791060837
#     2022-11-21 22:13:02   msgReplyMsgId   
#     2022-11-21 22:13:02   msgText         QQ
#     2022-11-21 22:13:02   prevMsgChat     Heiko
#     2022-11-21 22:13:02   prevMsgFileId   
#     2022-11-21 22:13:02   prevMsgId       13487
#     2022-11-21 22:13:02   prevMsgPeer     Heiko
#     2022-11-21 22:13:02   prevMsgPeerId   791060837
#     2022-11-21 22:13:02   prevMsgReplyMsgId
#     2022-11-21 22:13:02   prevMsgText     Dialog
#     2022-11-21 22:13:02   sentMsgId       13489
#     2022-11-21 22:13:02   sentMsgPeerId   791060837
#     2022-11-21 22:13:02   sentMsgResult   SUCCESS
#   inlinechats:
#   sentQueue:
#
setstate TelegramFhem Polling
setstate TelegramFhem 2022-11-21 21:40:38 Contacts 791060837:Heiko:@HeikoStr
setstate TelegramFhem 2022-11-21 00:00:29 PollingErrCount 0
setstate TelegramFhem 2022-11-20 02:13:53 PollingLastError Callback returned error :Too Many Requests: retry after 5:
setstate TelegramFhem 2022-11-21 22:13:02 msgChat Heiko
setstate TelegramFhem 2022-11-21 22:13:02 msgChatId 791060837
setstate TelegramFhem 2022-11-21 22:13:02 msgFileId
setstate TelegramFhem 2022-11-21 22:13:02 msgId 13488
setstate TelegramFhem 2022-11-21 22:13:02 msgPeer Heiko
setstate TelegramFhem 2022-11-21 22:13:02 msgPeerId 791060837
setstate TelegramFhem 2022-11-21 22:13:02 msgReplyMsgId
setstate TelegramFhem 2022-11-21 22:13:02 msgText QQ
setstate TelegramFhem 2022-11-21 22:13:02 prevMsgChat Heiko
setstate TelegramFhem 2022-11-21 22:13:02 prevMsgFileId
setstate TelegramFhem 2022-11-21 22:13:02 prevMsgId 13487
setstate TelegramFhem 2022-11-21 22:13:02 prevMsgPeer Heiko
setstate TelegramFhem 2022-11-21 22:13:02 prevMsgPeerId 791060837
setstate TelegramFhem 2022-11-21 22:13:02 prevMsgReplyMsgId
setstate TelegramFhem 2022-11-21 22:13:02 prevMsgText Dialog
setstate TelegramFhem 2022-11-21 22:13:02 sentMsgId 13489
setstate TelegramFhem 2022-11-21 22:13:02 sentMsgPeerId 791060837
setstate TelegramFhem 2022-11-21 22:13:02 sentMsgResult SUCCESS


Log wirft folgendes aus:
2022.11.21 22:04:15 3: TelegramBot TelegramFhem: Found from id in message - id : 791060837
2022.11.21 22:04:15 1: PERL WARNING: Use of uninitialized value in split at (eval 71974) line 1.
2022.11.21 22:04:15 3: eval: {return('(' . join(') (', sort{lc($a) cmp lc($b)} (split('
', fhem('get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(msg_Heiko|everyone).* trigger', 1)))) . ') (abbrechen) ')}
2022.11.21 22:04:15 3: msg msg_Heiko: ID=1669064655.51613.1 TYPE=push ROUTE=TelegramFhem RECIPIENT=791060837 STATUS=OK PRIORITY=0 TITLE='' MSG='() (abbrechen)
Ich kann folgendes für dich tun:'

Das Handy siehe Screenshot.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Beta-User am 08 Dezember 2022, 07:41:34
Sieht m.E. OK aus, was versendet wird. Das Problem scheint eher auf der Handy-app zu sein. Hatte das auch schon, dass die inline-Tastatur veraltet war, weiß aber grade auch nicht mehr, wie das zu beheben war. Alte Nachricht löschen?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: HeikoS am 27 Dezember 2022, 10:52:12
Zitat von: Beta-User am 08 Dezember 2022, 07:41:34
Sieht m.E. OK aus, was versendet wird. Das Problem scheint eher auf der Handy-app zu sein. Hatte das auch schon, dass die inline-Tastatur veraltet war, weiß aber grade auch nicht mehr, wie das zu beheben war. Alte Nachricht löschen?
Ich habe tatsächlich mal den kompletten Nachrichtenverlauf (für alle Teilnehmer) gelöscht, jetzt ist die alte Inline-Tastatur weg.
Ändert aber nichts daran, dass der Meta-Dialog nicht angezeigt wird.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Beta-User am 27 Dezember 2022, 11:37:41
Ist denn wenigstens der "Umschalter" sichtbar? Da müsste nirgendwo ein komischer Schnörkel auf einer Taste sein.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: HeikoS am 27 Dezember 2022, 14:04:18
Meint das Symbol mit den 4 Kästen drin? (Im Screenshot links von Anhangklammer/Kamera)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Beta-User am 27 Dezember 2022, 15:08:06
Ja.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: GammaTwin am 22 Januar 2023, 08:19:38
Grüße,

mir ist etwas unschönes passiert - aber auch interessant :)

Folgendes ist passiert:
- Der Telegram-Bot war in einem Menu, in dem sich Dinge schalten lassen - z.B Licht. Dort sind mehrere Lampen.
- Gleichzeitig war FHEM down
- Ich habe Licht geschalten, erst eins, dann ein weiteres. Passiert ist natürlich nicht. Die zu sendenden Texte standen aber da (logisch)
- Als ich FHEM wieder gestartet habe, wurden die Befehle abgearbeitet - Lichter gehen an :)

Das ist aber unschön. Wenn dies bei der Haustür passiert. Öffnung nach Stunden, vielleicht niemand da  :o

Daher meine Frage: kann ich in FHEM erkennen, wann die Nachricht in Telegram gesendet wurde? Ich habe kein Reading gefunden.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 24 Januar 2023, 10:55:11
Hallo Zusammen,
ich habe heute bemerkt, dass msgDialog nicht mehr Dialoge ausliefert und der TelegramBot nur eine Fehlermeldung ausgibt wenn ich den Metadialog anfordere:

Callback returned error :Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message:

Im Log ist aber sehr schön zu sehen, dass der Metadialog den Dialog korrekt zusammenbaut:
2023.01.24 10:50:50.742 3: get TYPE=msgDialog:FILTER=NAME!=metaDialog:FILTER=NAME!=.*_fav:FILTER=NAME!=.*_sys:FILTER=NAME!=.*_user:FILTER=allowed=.*(rr_Sebastian|everyone).* trigger : 01.⭐️...Favoriten...⭐️
02.👩🏼..Bewohner..👩🏻
03.💡...Lampen....💡
04.🔋.Steckdosen.🔋
05.👾....Robbi.....👾
05.↕️..Rollläden..↕️
06.⚠️....Notfall.....⚠️
09.🛒.Einkaufsliste.🛍
10.🛠....System....🛠


Was läuft denn hier schief?

EDIT: set metaDialog reset hat nicht geholfen...

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Beta-User am 25 Januar 2023, 11:24:42
Hmm, scheint mir kein originäres Problem von msgDialog zu sein, die Meldung würde ich in TelegramBot verorten (#2325).

Eventuell musst du zwischendurch mal was anderes senden? (Ansonsten müßte die alte message ja noch vorhanden sein?)
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 25 Januar 2023, 12:09:01
Zitat von: Beta-User am 25 Januar 2023, 11:24:42
Eventuell musst du zwischendurch mal was anderes senden? (Ansonsten müßte die alte message ja noch vorhanden sein?)

Das hab ich bereits probiert. Sende ich zB
msg push hallo
kommt dann ein "SUCCESS". Schicke ich danach %me (Q) dann kommt sofort wieder
Callback returned error :Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message:


set TelegramBot reset war auch leider nicth von Erfolg gekrönt. Ich poste mal im TelegramBot Thread...

Zitat von: Beta-User am 25 Januar 2023, 11:24:42
Hmm, scheint mir kein originäres Problem von msgDialog zu sein, die Meldung würde ich in TelegramBot verorten (#2325).

Der Post #2325 im Telegram Thread hat aber so gar nichts mit meinem Thema zu tun oder?

EDIT: Beim Aufruf des Dialogs wird das Reading "sentMsgId" nicht geschrieben. Vermutlich ist das der Grund warum die Fehlermeldung auftaucht?

VG Sebastian
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Beta-User am 25 Januar 2023, 12:14:20
Zitat von: binford6000 am 25 Januar 2023, 12:09:01
Der Post #2325 im Telegram Thread hat aber so gar nichts mit meinem Thema zu tun oder?
Nein, gemeint war die Zeilennummer im 50_TelegramBot.pm ;D .
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 25 Januar 2023, 12:32:22
Zitat von: Beta-User am 25 Januar 2023, 12:14:20
Nein, gemeint war die Zeilennummer im 50_TelegramBot.pm ;D .

Ah OK  ;)

Wenn ich das Inline Keyboard ausschalte funktionieren die Dialoge wieder und sentMsgId wird wieder gesetzt. Also scheint dort was schief zu laufen. Im Prinzip ist es ja nur das Aktivieren/Deaktivieren dieses notifys:
.+: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):FILTER=msgContactPush=.*$sentMsgPeerId.*");
  readingsSingleUpdate($dev_hash,"$contact\_sentMsgId",$sentMsgId,1);
}


...und dieses cmdAliases:
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");
  }
}

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Beta-User am 25 Januar 2023, 12:59:56
Hmm, bin grad nicht allzutief in dem Thema drin. Falls da eine Frage versteckt war, ob man was bestimmtes an msgDialog ändern kann: Bitte deutlicher schreiben :) ...
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 25 Januar 2023, 17:02:25
Ja dann frag ich mal @Alle: Geht bei euch noch das Inline-Keyboard? 
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: viegener am 25 Januar 2023, 23:43:39
Zitat von: binford6000 am 25 Januar 2023, 17:02:25
Ja dann frag ich mal @Alle: Geht bei euch noch das Inline-Keyboard?

Ja inline keyboards gehen bei mir noch ohne Probleme.

Da ich msgDialog nicht kenne kann ich wenig dazu sagen, was hier passiert. Auch den Hinweis auf Zeile 2325 im Telegrambot-Modul verstehe ich nicht, hier wird ja nur eine Fehlermeldung vom Telegramserver zurückgegeben.

Ich kannte diese Meldung bisher nicht, aber sie deutet doch recht klar auf das Problem hin: "Es wird wohl eine Message verändert, die von Telegram abgelehnt wird, da sie keine Veränderung darstellt". Zumindest ist das mein Verständnis und so ähnliches liefert auch Google zurück:

https://core.telegram.org/method/messages.editMessage (https://core.telegram.org/method/messages.editMessage)

Also wäre es gut zu wissen/protokollieren, welche Nachrichten versendet wurden. Wenn sich dann rausstellt, dass eine Nachricht mit exakt demselben Inhalt als "edit" versucht wird zu verändern - Erklärung gefunden.
Im Prinzip wäre es dann wohl am besten beim Aufruf zu verhindern, dass eine unveränderte Nachricht per editMsg verändert wird

Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Beta-User am 26 Januar 2023, 10:32:23
Zitat von: viegener am 25 Januar 2023, 23:43:39
Ja inline keyboards gehen bei mir noch ohne Probleme.
Habe das via Favoriten vorhin auch ausprobiert und hatte auch bei wiederholtem Aufruf des da hinterlegten Menüs keine Probleme.

Zitat
Da ich msgDialog nicht kenne kann ich wenig dazu sagen, was hier passiert. Auch den Hinweis auf Zeile 2325 im Telegrambot-Modul verstehe ich nicht, hier wird ja nur eine Fehlermeldung vom Telegramserver zurückgegeben.
msgDialog verwendet intern den "msg"-Befehl und kann darüber mit ROOMMATES vorstrukturierte Dialoge führen. Anders gesagt: es hat nur lose was mit TelegramBot zu tun, das ist halt vermutlich nur die am häufigsten anzutreffende Gegenstelle... Der Hinweis war nur so gemeint, dass das die Stelle ist, die den Logeintrag erzeugt.

Zitat
Ich kannte diese Meldung bisher nicht, aber sie deutet doch recht klar auf das Problem hin: "Es wird wohl eine Message verändert, die von Telegram abgelehnt wird, da sie keine Veränderung darstellt". Zumindest ist das mein Verständnis und so ähnliches liefert auch Google zurück:

https://core.telegram.org/method/messages.editMessage (https://core.telegram.org/method/messages.editMessage)
Danke für die Fundstelle, so ähnlich hätte ich das auch interpretiert.

Zitat
Also wäre es gut zu wissen/protokollieren, welche Nachrichten versendet wurden. Wenn sich dann rausstellt, dass eine Nachricht mit exakt demselben Inhalt als "edit" versucht wird zu verändern - Erklärung gefunden.
Im Prinzip wäre es dann wohl am besten beim Aufruf zu verhindern, dass eine unveränderte Nachricht per editMsg verändert wird
Das Problem scheint also das queryEditInline im cmdAlias zu sein. An der Stelle müßte man sich merken, wer grade welche Fassung des Inline-Keyboards hat, oder? Und dann ggf. eine andere Funktion aufzurufen, um das Inline-Keyboard anzuzeigen?
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 26 Januar 2023, 13:34:06
ZitatDas Problem scheint also das queryEditInline im cmdAlias zu sein.
Ja genau. Mit queryInline werden die Dialoge ja wenigstens als Text ausgeliefert.

ZitatAn der Stelle müsste man sich merken, wer grade welche Fassung des Inline-Keyboards hat, oder?
Sollte das nicht das notify "sentMsgIdByPeerId.n" erledigen?
.+: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):FILTER=msgContactPush=.*$sentMsgPeerId.*");
  readingsSingleUpdate($dev_hash,"$contact\_sentMsgId",$sentMsgId,1);
}

Es sollte die sentMsgId per Peer in <peerId>_<msgId> im TelegramBot speichern.
Macht es bei mir aber nicht. Das Reading bleibt unangetastet obwohl das notify auslöst.
sentMsgId wird nur gesetzt wenn ich normal was sende, nicht aber wenn ein Dialog sendet.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Beta-User am 26 Januar 2023, 14:20:53
Hmm, die Notation von diesem notify ist aber auch komisch. devspec2array() liefert - Überraschung - ein array zurück; das wird aber in deinem Code gar nicht und im Wiki anders berücksichtigt. Versuch mal das, das sollte sauberer sein:

.+:sentMsgId.+ {
  return if $TYPE ne 'TelegramBot';
  my $sentMsgId = ReadingsVal($NAME,'sentMsgId','');
  my $sentMsgPeerId = ReadingsVal($NAME,'sentMsgPeerId','');
  my $contact = shift devspec2array("TYPE=(ROOMMATE):FILTER=msgContactPush=.*$sentMsgPeerId.*") // return;
  readingsSingleUpdate($defs{$NAME},"$contact\_sentMsgId",$sentMsgId,1);
  return;
}
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 26 Januar 2023, 14:46:04
Experimental shift on scalar is now forbidden at (eval 12656) line 5, near ") //"


Computer sagt nein   ::) :o
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Beta-User am 26 Januar 2023, 14:47:54
..dann halt vielleicht so:
my $contact = (devspec2array("TYPE=(ROOMMATE):FILTER=msgContactPush=.*$sentMsgPeerId.*"))[0] // return;
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 26 Januar 2023, 14:52:28
Danke Beta-User, damit funktioniert es wieder!
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: Beta-User am 26 Januar 2023, 15:09:13
Thx, hab's im Wiki auch angepaßt, bitte kurz drüberschauen ;) .
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: binford6000 am 27 Januar 2023, 15:41:11
Leider zu früh gefreut  :-\

Heute erscheint der Fehler erneut:

Merkwürdig dass das Ändern des notifys kurzzeitig für Abhilfe gesorgt hat...
Habe auch mal versucht den Bot neu zu starten - aber auch ohne Erfolg.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: GammaTwin am 05 Februar 2023, 14:08:35
Zitat von: GammaTwin am 22 Januar 2023, 08:19:38
Grüße,

mir ist etwas unschönes passiert - aber auch interessant :)

Folgendes ist passiert:
- Der Telegram-Bot war in einem Menu, in dem sich Dinge schalten lassen - z.B Licht. Dort sind mehrere Lampen.
- Gleichzeitig war FHEM down
- Ich habe Licht geschalten, erst eins, dann ein weiteres. Passiert ist natürlich nicht. Die zu sendenden Texte standen aber da (logisch)
- Als ich FHEM wieder gestartet habe, wurden die Befehle abgearbeitet - Lichter gehen an :)

Das ist aber unschön. Wenn dies bei der Haustür passiert. Öffnung nach Stunden, vielleicht niemand da  :o

Daher meine Frage: kann ich in FHEM erkennen, wann die Nachricht in Telegram gesendet wurde? Ich habe kein Reading gefunden.

Grüße,

ich wollte nochmal fragen, ob irgendwer eine Idee hat.
Titel: Antw:msgDialog: Instant Messaging als FHEM Interface
Beitrag von: viegener am 13 Februar 2023, 23:52:35
Zitat von: GammaTwin am 05 Februar 2023, 14:08:35
Grüße,

ich wollte nochmal fragen, ob irgendwer eine Idee hat.

Schau mal hier...
https://forum.fhem.de/index.php/topic,38328.msg1263792.html#msg1263792 (https://forum.fhem.de/index.php/topic,38328.msg1263792.html#msg1263792)