msgDialog: Instant Messaging als FHEM Interface

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

Vorheriges Thema - Nächstes Thema

binford6000

ZitatEDIT: scheint jetzt wieder zu laufen. Ich hab aber keine Ahnung woran es gelegen hat ;-)

Moin Michael,
als ich deinen Post gelesen habe hat es bei mir auch nicht funktioniert. Siehe Log-Auszug:
2019.01.11 10:15:57 3: get TYPE=msgDialog:FILTER=NAME!=metaDialog:FILTER=NAME!=.*_fav:FILTER=NAME!=.*_sys:FILTER=NAME!=.*_user:FILTER=allowed=.*(rr_Sebastian|everyone).* trigger : 01.⭐️...Favoriten...⭐️
02.💡Beleuchtung💡
03.👩🏼..Bewohner..👩🏻
05.🛠....System....🛠
06.⚠️....Notfall.....⚠️
07.⏰....Wecker.....⏰
04.💡...Lampen....💡
08.🚧.....Staus.....🚧
2019.01.11 10:15:57 3: TelegramBot_Callback fhembot: resulted in Callback returned error :Bad Request: there is no text in the message to edit: from SendIt
2019.01.11 10:15:57 3: TelegramBot_Callback fhembot: No retry for (ret: Callback returned error :Bad Request: there is no text in the message to edit:) for msg 260868921 :
Hallo Sebastian!
Ich kann das für dich tun:


Nach einem FHEM-Update gehts jetzt auch wieder bei mir. Ohn Callback returned error...
VG Sebastian

l2r

hi,

meine Dialoge laufen wieder, nur leider bekomme ich es nicht hin, dass nur für die Dialoge Telegram benutzt wird, für alles andere Pushover, da ich ja bei meinem Resident im Attribut msgContactPush auch Telegram setzen muss. Alle meine Versuche im globalMsg die Syntax für den Befehl zu ändern sind leider fehlgeschlagen. Jemand noch ne Idee?

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

l2r

hallo zusammen,

einen Vorschlag hätte ich:

Wie wäre es, wenn es bei den Residents ein weiteres Attribut msgDialog_msgContactPush geben würde, in das ich dann Telegram eintragen würde.
Von der Handhabung müsste man dann zuerst dieses Attribut abfragen und wenn es nicht gesetzt ist, msgContactPush benutzen. Dann funktionieren nach wie vor alle bestehenden Configs und ich könnte meinen Spezialfall auch abdecken.

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

igami

Zitat von: l2r am 11 Januar 2019, 09:42:09
moin zusammen,

hat sich in seit dem Wochenende irgendwas geändert?
Bei mir scheint der msgDialog nicht mehr auf die Trigger zu reagieren. Kann das noch jemand bestätigen?

Außerdem habe ich noch eine Frage:
Ich möchte gerne Pushover als default für msg benutzer und zusätzlich für msgDialog dann Telegram. Ich habe mir also testweise im globalmsg folgendes gesetzt:
attr msgDialog_msgCommand msg \@Telegram:\@$recipients $message
ist das korrekt? Leider bekomme ich keine Antworten auf meine Trigger, egal ob ich das Attribut jetzt setze oder nicht. Aktuell steht msgContactPush wieder auf Telegram. Leider bekomme ich auch hier keine Nachrichten.

EDIT: scheint jetzt wieder zu laufen. Ich hab aber keine Ahnung woran es gelegen hat ;-)

Gruß Michael
Mit dem Routing von verschiedenen Diensten habe ich mich nicht befasst, dazu bitte den Maintainer von msg befragen. Generell ist das von dir gewählte Attribut aber die richtige stelle zum anpassen.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Marlen

Hallo,

ich hätte mal wieder paar Fragen:

Kann man in commands irgendwie mit if arbeiten?

So etwa:

"commands": [
"{my $Liste = '$message';;;; fhem(\"if ($Liste eq 'kompl.Essen - Liste') {setreading $SELF gewliste $message}\")}"
],


Kann man irgendwie im Code kommentieren?

LG
Marlen

igami

Sowohl perl if als auch FHEM IF sollten sich normal anwenden lassen (habe aber grad kein Beispiel parat).

Auskommentieren ist aktuell nicht möglich, da dann das json nicht richtig erkannt wird.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Marlen

Hat vielleicht jemand anders ein Beispiel?

LG
  Marlen

binford6000

Zitat von: Marlen am 17 Januar 2019, 12:01:15
Hat vielleicht jemand anders ein Beispiel?

LG
  Marlen

Hier gabs mal was mit Heizungssteuerung. Das ist daraus und funktioniert soweit:
"commands": ["{my $temp = $message;;;; my $clima;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; if ($room eq \"Büro Daniel\") {$clima = \"dz_heizung_Clima\";;;;} elsif ($room eq \"Esszimmer\") {$clima = \"ez_heizung_Clima\";;;;} elsif ($room eq \"Schlafzimmer\") {$clima = \"sz_heizung_Clima\";;;;} elsif ($room  eq \"Wohnzimmer\") {$clima = \"wz_heizung_Clima\";;;;} fhem (\"set $clima desired-temp $temp; msg push $clima $temp\") }"],

VG Sebastian

Marlen

Zitat von: binford6000 am 17 Januar 2019, 12:08:50
Hier gabs mal was mit Heizungssteuerung. Das ist daraus und funktioniert soweit:
"commands": ["{my $temp = $message;;;; my $clima;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; if ($room eq \"Büro Daniel\") {$clima = \"dz_heizung_Clima\";;;;} elsif ($room eq \"Esszimmer\") {$clima = \"ez_heizung_Clima\";;;;} elsif ($room eq \"Schlafzimmer\") {$clima = \"sz_heizung_Clima\";;;;} elsif ($room  eq \"Wohnzimmer\") {$clima = \"wz_heizung_Clima\";;;;} fhem (\"set $clima desired-temp $temp; msg push $clima $temp\") }"],

VG Sebastian

Danke!  :-*

trixer

Problem mit dem Auslesen von Variablen im msgDialog
Hallo zusammen,
so langsam gehen mir die Ideen aus. Ich habe ein Problem mit dem Auslesen von Werten über ReadingsVal.
Was ich tun möchte:
Ich baue mir derzeit einen Dialog für Telegram auf. Neben der Steuerung der Beleuchtung und (sehr einfachen) Squeezebox-Player Befehlen möchte ich nun die Wettervorhersage abrufen. Das ist in dem Post von Tiroso ganz gut sehen.
In meinem Wetter-Dialog habe ich im ersten Schritt folgendermaßen versucht, ein Bild des aktuellen Wetters zu senden:
"commands": "set Telegram sendImage /opt/fhem/www/images/default/weather/".ReadingsVal('WessumWetter','icon','0').".png" ,\
Das führt zu folgendem JSON-Fehler
, or ] expected while parsing array, at character offset 715 (before ".ReadingsVal('Wessum...") at ./FHEM/76_msgDialog.pm line 93.
Diverse unterschiedliche Versuche (mit \ vorm ", ' statt " schlugen fehl.
Mein letzter Versuch war das Ganze über Variablensubstitution zu machen:
    "Wetter morgen":{\
    "commands":[\
      "{my $wi = ReadingsVal(%VAR%, %WIP%, '0')}",\
      "set Telegram message %wi%"\
    ],\
    "message":[\
      "(%me%) ",\
      "Das Wetter von morgen: {my $wi = ReadingsVal(%VAR%, %WIP%, '0')} "\
    ]\
    },\
    "Wetterdaten aktualisieren":{\
    "commands": "set WessumWetter update",\
    "message":[\
      "(%me%) ",\
      "Aktualisierung Wetterdaten angefragt."\
    ]\
   }\
    }\
}
attr wetter_Dialog allowed Trixer, everyone
attr wetter_Dialog evalSpecials VAR=Variablenspeicher\
WIP=WEATHER_ICON_PATH
attr wetter_Dialog room Messages

Das ist zwar syntaktisch korrekt, die Variablen werden aber nciht aufgelöst.
Ich hoffe mal auf einen klassischen Anfängerfehler und bitte um Erleuchtung.

Schönen Dank und Gruß
Trixer

Wuehler

Moin,
leider kann ich nur vom handy antworten, daher auch erst eine späte Antwort. Versuch mal folgendes, wie gesagt mit Handy getippt und nicht getestet, daher evtl. auch nicht ohne Fehler.

senden:
"commands": "{fhem(\"set Telegram sendImage /opt/fhem/www/images/default/weather/\".ReadingsVal(\"WessumWetter\",\"icon\",\"0\").\".png\"}" ,\


Ich denke du hast ganz am Ende die schließenden Anführungszeichen vergessen.

Ausserdem bitte code immer in die Codetags setzen. Dass macht es uns einfacher den code zu lesen.

Viele Grüße,
Dirk

trixer

Nabend,

vielen Dank für deine - wie ich finde - schnelle Antwort.
Auf die Code-Tags werde ich ab sofort achten. - Sorry.
Syntaktisch ist deine Ausführung korrekt. Allerdings sind das scheinbar zu viele Anführungszeichen.
Ich vermute
"{fhem...
führt dazu, dass der Befehl gar nicht ausgeführt wird. Zumindest sehe ich auch im Event Monitor nichts.
Nehme ich diese Anführungsstriche weg, also
"commands": {fhem(\"set Telegram sendImage /opt/fhem/www/images/default/weather/\".ReadingsVal(\"WessumWetter\",\"icon\",\"0\").\".png\"} ,\
bekomme ich wieder den JSON-Fehler
'"' expected, at character offset 431 (before "fhem(\\"set Telegram...") at ./FHEM/76_msgDialog.pm line 93.
Dieses Problem verfolgt mich...

Viele Grüße
Mark


Wuehler

Deine untere Variante verstösst gegen die Regeln, wie ein json aufgebaut sein muss. Die Anführungszeichen sind Pflicht.
Wenn du keine Fehler im Log siehst wird der Befehl voraussichtlich ausgeführt, und es gibt ein anderes Problem, dass du kein Bild gesendet bekommst. Ein Event wird dabei ja meines Wissens auch nicht erzeugt, daher kein Output im Eventmonitor. Was passiert denn, wenn du den set-Befehl direkt in die fhem-Befehlszeile eingibst? Vielleicht feheln Leserechte auf die Bilddatei? Gibt es die Datei überhaupt?

trixer

Hi Dirk,
die Datei existiert und die Zugriffsrechte sind auch ok.
Über den Befehle
set Telegram sendImage /opt/fhem/www/images/default/weather/mostlycloudy.png
wird das Bild versendet.
Der folgende Befehl in die Kommandozueile eingegeben liefert auch genau diesen Pfad als Ergebnis:
{ ReadingsVal("Variablenspeicher", "WEATHER_ICON_PATH", "NixDa1") . ReadingsVal("WessumWetter", "icon", "NixDa2") . ReadingsVal("Variablenspeicher", "WEATHER_ICON_TYPE", "NixDa3") }
Nur leider gelingt es mir nicht, die beiden Befehle zu kombinieren.
Gruß
Mark

Wuehler

Hi Mark,

Dann könnte es noch an irgendeinem Leerzeichen an unpassender Stelle liegen. Hast du schon eine 99_myUtils.pm? Darin neue Funktion anlegen und aus dem Dialog aufrufen.
Das wäre meiner Meinung nach die einfachste Variante das Problem weiter einzugrenzen. Darin kannst du dann auch alles mit Logausgaben zupflastern.
VG,
Dirk