Neuer FHEM Befehl "msg" für Benachrichtigungen (Push,Mail,Audio,Light,Screen)

Begonnen von Loredo, 13 August 2015, 19:31:07

Vorheriges Thema - Nächstes Thema

FHEm2005

So, jetzt habe ich 27 Seiten in in zwei langen Tagen "durchgeackert" und hoffe, dass mich niemand ob meiner Fragen erschlägt.

Ich arbeite das Beispiel aus dem Wiki MsgDialog durch und versuche es möglichst nah das Beispiel meta_Dialog nachzuarbeiten. Mein Problem besteht darin, dass das notify auf des Schlüsselwort 'start' nur höchst mangelhaft bis gar nicht anspricht. Ich glaube, dass die Auflösung der Eingabe und die Umsetzung als Befehl irgendwie fehlerhaft ist. Deshalb habe ich mal im ersten Aufschlag die Meldungen im Eventmonitor mit verbose=5 für die beteiligten Module hier angehängt. Ich erkenne zwar die Warnung, kann sie aber wegen mangelhafter Perl-Kenntnisse nicht deuten.

2018.05.28 17:24:23 5 : msgConfig msgConfig: called function msgConfig_Notify()
2018.05.28 17:24:23 4 : msg Eberhard: Received push message from VillaLuehl: start
2018.05.28 17:24:23 5 : msgDialog (msg_Wz_Heizung) - entering msgDialog_Notify
2018.05.28 17:24:23 4 : msgDialog (msg_Wz_Heizung) triggered by "Eberhard fhemMsgRcvPush: start"
2018.05.28 17:24:23 5 : msgDialog (msg_Wz_Heizung) entering msgDialog_progress recipients: Eberhard message: start force: 0
2018.05.28 17:24:23 5 : msgDialog (msg_Wz_Heizung) - entering msgDialog_evalSpecials
2018-05-28 17:24:23 msgDialog msg_Wz_Heizung Eberhard_history:
2018-05-28 17:24:23 msgDialog msg_Wz_Heizung Eberhard: start
2018.05.28 17:24:23 4 : msgDialog (msg_Wz_Heizung) - return from command "deletereading TYPE=msgDialog Eberhard_history": Deleted reading Eberhard_history for device msg_Wz_Heizung
2018.05.28 17:24:23 1 : PERL WARNING: Use of uninitialized value in split at (eval 28421) line 1.
2018.05.28 17:24:23 3 : eval: {return('(' . join(') (', sort(split(' ', fhem('get TYPE=msgDialog:FILTER=NAME!=msg_Wz_Heizung:FILTER=allowed=.*(Eberhard|everyone).* trigger'))), 'abbrechen') . ') ')}
2018.05.28 17:24:23 5 : msg: found types=push
2018.05.28 17:24:23 5 : msg: found recipient=@Eberhard
2018.05.28 17:24:23 5 : msg: found title=FHEM
2018.05.28 17:24:23 5 : msg Eberhard: Checking for available routes (triggered by type push)
2018.05.28 17:24:23 5 : msg Eberhard: screen route check result: ROUTE_UNAVAILABLE
2018.05.28 17:24:23 5 : msg Eberhard: light route check result: ROUTE_UNAVAILABLE
2018.05.28 17:24:23 5 : msg Eberhard: audio route check result: ROUTE_UNAVAILABLE
2018.05.28 17:24:23 5 : msg Eberhard: push route check result: ROUTE_AVAILABLE
2018.05.28 17:24:23 5 : msg Eberhard: mail route check result: ROUTE_UNAVAILABLE
2018.05.28 17:24:23 4 : msg Eberhard: Available routes: screen=0 light=0 audio=0 text=1 push=1 mail=0
2018.05.28 17:24:23 5 : msg Eberhard: Trying to send message via gateway VillaLuehl to recipient @123456789
2018.05.28 17:24:23 5 : msg Eberhard: Determined default title:
2018.05.28 17:24:23 5 : msg Eberhard: msgSchema: replacing %RECIPIENT% and $RECIPIENT by ''
2018.05.28 17:24:23 5 : msg Eberhard: msgSchema: replacing %TelegramBot_MTYPE% and $TelegramBot_MTYPE by 'message'
2018.05.28 17:24:23 5 : msg Eberhard: push route command (fhem): set VillaLuehl message @123456789 : (abbrechen) Ich kann folgendes für dich tun:
2018.05.28 17:24:23 3 : msg Eberhard: ID=1527521063.1763.1 TYPE=push ROUTE=VillaLuehl RECIPIENT=@123456789 STATUS=OK PRIORITY=0 TITLE='FHEM' MSG=': (abbrechen) Ich kann folgendes für dich tun:'
2018-05-28 17:24:23 ROOMMATE Eberhard fhemMsgRcvPush: start
2018-05-28 17:24:23 ROOMMATE Eberhard fhemMsgRcvPushGw: VillaLuehl
2018-05-28 17:24:23 ROOMMATE Eberhard fhemMsgPush: : (abbrechen) Ich kann folgendes für dich tun:
2018-05-28 17:24:23 ROOMMATE Eberhard fhemMsgPushTitle: FHEM
2018-05-28 17:24:23 ROOMMATE Eberhard fhemMsgPushPrio: 0
2018-05-28 17:24:23 ROOMMATE Eberhard fhemMsgPushGw: VillaLuehl:@123456789:OK
2018-05-28 17:24:23 ROOMMATE Eberhard fhemMsgPushState: 1
2018-05-28 17:24:23 ROOMMATE Eberhard fhemMsgStateTypes: push:1
2018-05-28 17:24:23 ROOMMATE Eberhard fhemMsgState: 1
2018-05-28 17:24:23 TelegramBot VillaLuehl msgText: start

2018.05.28 17:24:59 5 : msgDialog (msg_Wz_Heizung) - entering msgDialog_Notify


Nach dem 'start' kommt die Meldung
: (abbrechen)
Ich kann folgendes für dich tun:


Das Modul ist fürwahr nichts für Normalos, da muss der Vorname schon Nerd lauten  ;)

Gruß Eberhard

Ich korrigiere: nach 'start' kommt die meldung:
: Klammer auf ) (abbrechen)
Ich kann folgendes für dich tun:

Da kommt mir immer der Smilie dazwischen bei Doppelpunkt Klammer auf :(
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

FHEm2005

Die Fehlersuche gestaltet sich schwierig.

Im Eventmonitor stehen die zwei Zeilen:
2018.05.30 08:21:16 1 : PERL WARNING: Use of uninitialized value in split at (eval 49794) line 1.
2018.05.30 08:21:16 3 : eval: {return('(' . join(') (', sort{lc($a) cmp lc($b)} (split(' ', fhem('get TYPE=msgDialog:FILTER=NAME!=msg_Wz_Heizung:FILTER=allowed=.*(Eberhard|everyone).* trigger', 1)))) . ') (abbrechen) ')}

Wenn ich den Teil  TYPE=msgDialog:FILTER=NAME!=msg_Wz_Heizung:FILTER=allowed=.*(Eberhard|everyone).* durch msg_Wz_Heizung ersetze also nur get msg_WZ_Heizung trigger an fhem sende, funktioniert alles bestens. Das bedeutet der Fehler muss in diesem Teil liegen.

Der Teil TYPE=msgDialog:FILTER=NAME!= wird m.E. richtig aufgelöst und zwei Zeilen tiefer findet er den recipient:
2018.05.30 08:21:16 5 : msg: found types=push
2018.05.30 08:21:16 5 : msg: found recipient=@Eberhard

Eberhard ist der ROOMMATE bei mir. Dort steht im attr msgContactPush @VillaLuehl:123456789 . Ist hier etwas falsch geschrieben?

Die große Frage ist: Welcher Wert ist nicht initialisiert? Wer kann helfen?
Gruß Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

binford6000

Hallo Eberhard,
ZitatWenn ich den Teil  TYPE=msgDialog:FILTER=NAME!=msg_Wz_Heizung:FILTER=allowed=.*(Eberhard|everyone).* durch msg_Wz_Heizung ersetze also nur get msg_WZ_Heizung trigger an fhem sende, funktioniert alles bestens. Das bedeutet der Fehler muss in diesem Teil liegen.
Lass doch mal das "!" bei NAME weg:
TYPE=msgDialog:FILTER=NAME=msg_Wz_Heizung:FILTER=allowed=.*(Eberhard|everyone).*
VG Sebastian

PS: Auch auf die Gefahr hin dass ich mich wiederhole: Falscher Thread. Poste doch lieber im passenden:
https://forum.fhem.de/index.php/topic,77297

FHEm2005

Hallo Sebastian,

ersteinmal Danke! Hat geholfen. Das ist ein Fehler im Wiki!
Ich war wegen dem Thema "Sprachsteuerung " verunsichert. Ich habe immer noch ein kleines Problem, soll ich damit bereits umziehen?

Gruß Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

Quantum

Hallo,

mthilfe des msg Moduls versuche ich mit dem Befehl (enthalten im Attribut msgCmdMail):

Zitat
{ my $d='%DEVICE%'; my $title='%TITLE%'; my $msg='%MSG%'; system("echo '$msg' | /usr/bin/mailx -s '$title' -S ttycharset=UTF-8 -S sendcharsets=UTF-8 -S encoding=8bit '$d'"); }

Text EMails zu versenden. Dies funktioniert auch sehr gut, solange in der Nachricht keine Zeilenumbrüche vorhanden sind. Sind Zeilenumbrüche enthalten, ergibt sich folgendes im Log:

Zitat
2018.06.07 22:43:59 3: msg text @rr_XXXXX Hallo
duda : mail@XXXXXXXX.de: Unknown command {, try help.
Unknown command my, try help.
Unknown command my, try help.
Unknown command system("echo, try help.
Unknown command }, try help.

Ich denke, das hat etwas mit der Maskierung zu tun, sodass das Kommando falsch interpretiert wird. Hab auch schon verschiedenste Maskierungen ausprobiert, leider ohne Erfolg.
Würde mich über Unterstützung freuen.

Freundliche Grüße
Quantum

FunkOdyssey

Erledigt. Bitte unten lesen.



Ich habe in Pushover ein zweites Device in Betrieb genommen.

Wenn ich folgenden Befehl ausführe, so habe ich bei Klaus den "gamelan"-Sound. Bei Maria aber den PushOver-Default-Ton.


(msg push @rr_Klaus,@rr_Maria |FHEM| Beschattung aktiv. Pushover_SOUND=gamelan)

Folgende Attribute habe ich in den Residents-Geräten angelegt.

rr_Klaus => msgContactPush => pushOver:KlausHandy
rr_Maria => msgContactPush => pushOver:MariaHandy


Kennt jemand dieses Problem und hat dafür ne Lösung?




Kommando zurück. Mein Fehler.
Ich habe zwar das neue Push-Device für rr_Maria geändert, aber gar nicht darüber nachgedacht, dass ich die Sounds auch noch bei den "msg push"-Befehlen zuordnen muss. Da es vorher zwei verschiedene Push-Apps waren, gab es für rr_Maria den Parameter noch nicht.

docb

Hi, ich bin auch auf der Suche nach der Lösung für diese Problem - aber wurde hier nicht fündig. Kann jemand helfen?
Zitat von: der_da am 15 Mai 2018, 12:01:31
Ich habe nun den ganzen Thread von vorn bis hinten durchgelesen, komme aber nicht zu einer Lösung.
Mit
msg Das ist eine Nachricht
kann ich eine Nachricht per Jabber versenden.
Nun hätte ich gerne Zeilenumbrüche in der Nachricht. Intuitiv habe ich dann schon
msg Das ist die erste Zeile! \nDas ist die zweite Zeile
versucht. Aber es erfolgt kein Zeilenumbruch.
Wie muss ich das anstellen?

Viele Grüße
doc
I love FHEM!

l2r

wie muss denn der Befehl für Jabber aussehen wenn du ohne msg an Jabber senden möchtest?

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

plin

Zitat von: Loredo am 27 März 2017, 00:28:12
Dafür gibt es bereits den msg-Befehl. Auf der ToDo steht die Erweiterung um eine Nachrichten Queue.

Hi Julian,

hast Du schon eine Idee wann das Queueing-Feature verfügbar sein wird? Ich hätte Bedarf.

Ciao,
Peter
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

rcmcronny

Hi Julian,

ich baue auch aktuell alles um auf "msg" und muss sagen, anspruchsvolle Lernkurve aber feht gut ;)

Für screen habe ich eine Neutrino Box, die kann text folgendermaßen ansteuern (ich habs derzeit simpel gehalten,


msgCmdScreen         set %DEVICE% showText %MSG%
msgCmdScreenHigh     set %DEVICE% showtextwithbutton %MSG%
msgCmdScreenLow      set %DEVICE% showText %MSG%


Das zeigt eine Nachricht auf dem TV an, bei High mit einem Bestätigen Button.
Vielleicht kannst du das ja ins Schema mit aufnehmen ?

Ronny

Dr_Prune

Hallo,

verstehe ich richtig: unter

attr globalmsg msgContactAudio

lässt sich jeweils nur ein Audio-Gerät definieren?

Habe das bisher mit Text2Speech am Laufen, feine Sache. Aber jetzt haben die Kinder ein Sonos bekommen. Und denen würden wir gerne zurufen lassen, wenn es Essen gibt ;-)

Alexander

l2r

hi,

wenn du das resident-Modul verwendest und für deine Kinder einen Roommate vergeben hast, kannst du die Audio-Device für jedes kind in den Attributen setzen. Oder du schickst die Audio-Nachricht direkt an die Sonos
msg audio @Sonos_Bedroom |Hint|Abendessen.

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

Dr_Prune

Danke, Michael.

Das klappt. Bedeutet aber, dass bei den universellen Durchsagen jetzt immer zwei Befehle fällig werden. Einmal für Analog-Out über das in globalMsg definierte TTS Device und einmal per separatem msg @Sonos_Player.

Das ist nicht wesentlich eleganter als mit einem separaten set Sonos_Player speak, ohne Umweg über msg.

Vielleicht ist das eine Anregung für Loredo:

Wäre toll, wenn msg, das für die zentrale Abwicklung von Benachrichtigungen über unterschiedlichste Devices und Ausgabewege so hervorragend funktioniert, mehrere Audiodevices parallel unterstützt und transparent nebeneinander verwaltet.

Grüße
Alexander

l2r

ähm die wiedergabe an mehrere Geräte ist jetzt schon integriert?!

es ist sogar so elegant gelöst, das man das abhängig vom Status bzw Aufenthaltsort des ROOMates machen kann...

Beispiel:

der Roommate rr_Michael hat folgendes gesetzt:

attr rr_Michael msgContactAudio Sonos_Bad,Sonos_Kueche

wenn ich jetzt

msg audio @rr_Michael Testdurchsage ausführe, dann wird das auf allen Sonos-Geräte wiedergegeben, aber nur wenn rr_Michael nicht abwesend oder gone ist..., wenn rr_Michael nicht zuhause ist, dann wird die audio-Nachricht auf push Weitergeleitet, sofern definiert.

das ganze kann man dann noch auf die Spitze treiben indem man msgRoom_<Raumname> definiert und da dann die passenden Audio-Devices hinterlegt. Dann wird die Audioausgabe nur auf den Geräten wiedergegeben, die in dem Raum stehen, wo sich rr_Michael befindet... (ich hoffe ich habe das jetzt richtig zusammengefasst. Das ist bei mir auch schon ein bisschen her, wo ich das alles eingerichtet habe... und ich habe da auch ein bisschen für gebraucht um alles zu schnallen)

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

Dr_Prune

Das habe ich schon verstanden. Und das funktioniert hier auch.

Um so logischer wäre es aus meiner Sicht aber auch, wenn man unter globalmsg zwei oder mehr msgContactAudio Geräte definieren könnte.

Die Durchsagen für Alle sollen ja gerade nicht an einen bestimmten Resident|ResidentGroup oder einen bestimmten Raum gehen. Da ist es von der Befehlsökonomie her einfach ungünstig, wenn man mehrere msg an unterschiedliche Adressaten schicken muss.

Vielleicht bin ich aber auch der einzige, der neben Sonos noch TTS (und im Schlafzimmer SB_Player) benutzt.

Grüße
Alexander