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
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
Zitat
Sollte nun gehen, stand noch auf Privat :-[

Jepp geht. Sieht bombe aus!

Zitat
Ich 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.
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
Zitat
Nun 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
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
Zitat
Hast 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.

Zitat
Guck 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
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
Zitat
Einfach 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
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
Zitat
Du 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
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
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
Zitat
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 ;)
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')}",
Zitat
Zu 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
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
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
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


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
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
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
Zitat
Du 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
Zitat
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.

Klingt gut!

Zitat
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.

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
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
Zitat
Was 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
Zitat
Auch 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
"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
"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
Zitat
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.

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
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

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
Zitat
Hab die Version aus der Antwort #27 vom 02 Oktober 2017, 17:05:12. Gibt es da eine neuere?
Die hab ich auch.
Zitat
Eventuell 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
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.

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
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
@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
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
Jo, da habe ich das gesucht aber ist nicht vorhanden, was mich ein wenig stutzig macht.
ggf. mal den TelegramBot updaten

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
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
@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
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
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.

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.

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.

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.

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

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
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.


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.

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
Zitat
Nach 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
Zitat
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 :)
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
Zitat
Ich 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
Zitat
Edit: 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
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
Zitat
Was 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
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.


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: globalMsgKonnte 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
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.

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.

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
Zitat
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.
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
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
Zitat
Aber 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
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
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
Zitat
Wie 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
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
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
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
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,
Zitat
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.
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

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
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
Zitat
Ich 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
Das geht doch sicher irgendwie besser oder?
Was meinst du denn mit besser?

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
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
Zitat
der 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
@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
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.

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
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 ::)

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.

2. " , " vergessen?
Dann bekommst du ja eine Fehlermeldung ;)

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
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
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 ::)

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ü
Zitat
Eingang
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...  ;)

Zitat
Auch 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
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

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:
Zitat
Bei 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
Zitat
Neues 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
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
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:

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
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.

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.

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.

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
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.

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.

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
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)

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
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
Zitat
1. 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=teleBotIm 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
Zitat
3. 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...  ;)
Zitat
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?
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
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.

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:
Zitat
cmdRestrictedPeer <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
Zitat
Hier 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
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
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.

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);;)}"\
  },\

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
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
Zitat
EDIT
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
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
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
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
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
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
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
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
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 : Beleuchtung Rolladen Reset SAT 2017.11.19 21:49:04 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : Beleuchtung Rolladen Reset SAT 2017.11.19 21:49:08 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : Beleuchtung Rolladen Reset SAT 2017.11.19 21:49:37 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : Beleuchtung Rolladen Reset SAT 2017.11.19 21:50:04 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : Beleuchtung Rolladen Reset SAT 2017.11.19 21:50:27 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : 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
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
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
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
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
Zitat
Hast du mehrere Residents eingetragen?
Residents wo eingetragen?

Zitat
Es 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
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
Zitat
msgPushReceived
.
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,
Zitat
warum geht denn mein zurück nicht?
Sollte so funktionieren. Bei mir sieht es genauso aus.
Zitat
Muss 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=fhembotVG 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
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
Zitat
Was 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
Zitat
Wie 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
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
Zitat
Wenn 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...
Zitat
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?
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
- 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

- 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 ;))

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
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
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:
Zitat
Strom: 6.24712 kWh

möchte aber als Output:
Zitat
Strom: 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
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
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
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?

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
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.

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

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
Zitat
Ja, 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
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.

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
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
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
Zitat
Bei 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
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
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.

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
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
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
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
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.

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
Zitat
Du 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.\";;;; }"
]

Zitat
Der 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
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
Zitat
Versuch 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
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
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
Zitat
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.

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
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
Zitat
Bitte 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
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
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

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
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
Zitat
An 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
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
Zitat
Funktioniert 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
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
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
Zitat
Undefined 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
Zitat
Ahhh, 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
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
Zitat
Ja, 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
Zitat
Ich 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:25Und 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
Zitat
Als 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.
Zitat
Edeka - 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?

Zitat
Sobald 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
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
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
(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 DruckerIm 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.

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?

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
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
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
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
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
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
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
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:

Zitat
unknown 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
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.

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:
Zitat
Bemerkung: 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 FHEMWas 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
Zitat
Also 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."
},

Zitat
Vorausgesetzt 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.
Zitat
Vielleicht 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
Zitat
Das ist es ja, kein HUE sondern ein Homematicdeckenlampenschalter  ;).
Ja OK dann habe ich nicht gesagt...  ;D
Zitat
Wie 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.
Zitat
Wenn 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
Was ist falsch bzw. was habe ich übersehen?
Funktioniert denn
set Th_.*_Climate controlMode manual
wenn du es direkt in der Kommandozeile eingibst?

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
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
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
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
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
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 firstUnd 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
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 PostMeUnd dann noch
set create EinkaufslisteJetzt 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
Zitat
Es 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...
Zitat
Es 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
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
Zitat
Das 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?

Zitat
Die 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.

Zitat
Schau 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.

Zitat
Liegt 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
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
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
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
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