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

l2r

msg <zweitdevice> push <nachricht>

sollte funktionieren. Du schickst quasi eine Nachricht an ein Device und dann wird geschaut, welcher Empfänger über die Attribute definiert ist.

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

THEM

Also wenn dann müsste es glaube ich so heißen:

msg push <zweitdevice> <nachricht>

Aber alle Versuche damit haben nicht funktioniert.

Ich habe wirklich alles mögliche probiert.

@Loredo: Was sagt der Entwickler dazu? :-)

l2r

hi,
sry hast recht. Allerdings hast du das @ vergessen:

msg push @<zweitdevice> <nachricht>

gruß Micahel
Wissen ist Macht.
Ich weiß nix.
Macht nix.

THEM

Hallo,

das ist korrekt und hat mir über eine kleine gedankliche Klippe geholfen.

Jetzt kann ich auch an Empfänger senden, die im Attribut "msgContactPush" definiert sind.

Was allerdings nicht geht, ist das Senden an eine Telegramm-Gruppe, die nicht per ID, sondern per Name angesprochen werden soll.

Also folgendes funktioniert

attr <zweitesdevice> msgContactPush TelegramBot:@@#-123456789

-123456789 = TelegramGruppenID

Folgendes aber leider nicht

attr <zweitesdevice> msgContactPush TelegramBot:@#TelegramGruppenName
attr <zweitesdevice> msgContactPush TelegramBot:@@#TelegramGruppenName
attr <zweitesdevice> msgContactPush TelegramBot:@@@#TelegramGruppenName
attr <zweitesdevice> msgContactPush TelegramBot:@\#TelegramGruppenName


Probiert habe ich alle verschiedenen Werte

Gibt es dazu evtl. noch nicht das richtige schema?

Gruß

THEM

l2r

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

Schlimbo

Hallo,
habe ein seltsames verhalten festgestellt.

Am msgConfig Device ist als msgContactAudio das Device "MyTTS" hinterlegt:
attr globalMsg msgContactAudio MyTTS
An MyTTS ist das msgCmd Attribut gesetzt:
attr MyTTS msgCmdAudio {fhem "set %DEVICE% tts :%TITLE%: %MSG%"}

Verwende ich bei "msgCmdAudio" Perl code werden die Umlaute nicht korrekt ausgesprochen.
ü wird zu �
Befehl:
msg audio tür
Zugehöriger Log:
018.02.11 17:04:46.288 5: msg: found types=audio
2018.02.11 17:04:46.294 5: msg globalMsg: Checking for available routes (triggered by type audio)
2018.02.11 17:04:46.312 5: msg globalMsg: screen route check result: ROUTE_AVAILABLE
2018.02.11 17:04:46.326 5: msg globalMsg: light route check result: ROUTE_AVAILABLE
2018.02.11 17:04:46.338 5: msg globalMsg: audio route check result: ROUTE_AVAILABLE
2018.02.11 17:04:46.351 5: msg globalMsg: push route check result: ROUTE_AVAILABLE
2018.02.11 17:04:46.359 5: msg globalMsg: mail route check result: ROUTE_UNAVAILABLE
2018.02.11 17:04:46.359 4: msg globalMsg: Available routes: screen=1 light=1 audio=1 text=1 push=1 mail=0
2018.02.11 17:04:46.363 5: msg globalMsg: Trying to send message via gateway MyTTS
2018.02.11 17:04:46.364 5: msg globalMsg: Determined default title:
2018.02.11 17:04:46.370 5: msg globalMsg: audio route command (Perl): {fhem "set MyTTS tts :Doorbell: tür"}
2018.02.11 17:04:46.421 4: MyTTS: Auflistung der Textbausteine nach Aufbereitung:
2018.02.11 17:04:46.421 4: MyTTS: 0 => audio/Doorbell.mp3
2018.02.11 17:04:46.422 4: MyTTS: 1 => t�r

Verwende ich keinen perl code werden Umlaute korrekt ausgesprochen:
attr MyTTS msgCmdAudio set %DEVICE% tts :%TITLE%: %MSG%
018.02.11 17:06:40.529 5: msg: found types=audio
2018.02.11 17:06:40.536 5: msg globalMsg: Checking for available routes (triggered by type audio)
2018.02.11 17:06:40.557 5: msg globalMsg: screen route check result: ROUTE_AVAILABLE
2018.02.11 17:06:40.571 5: msg globalMsg: light route check result: ROUTE_AVAILABLE
2018.02.11 17:06:40.583 5: msg globalMsg: audio route check result: ROUTE_AVAILABLE
2018.02.11 17:06:40.596 5: msg globalMsg: push route check result: ROUTE_AVAILABLE
2018.02.11 17:06:40.604 5: msg globalMsg: mail route check result: ROUTE_UNAVAILABLE
2018.02.11 17:06:40.605 4: msg globalMsg: Available routes: screen=1 light=1 audio=1 text=1 push=1 mail=0
2018.02.11 17:06:40.608 5: msg globalMsg: Trying to send message via gateway MyTTS
2018.02.11 17:06:40.609 5: msg globalMsg: Determined default title:
2018.02.11 17:06:40.615 5: msg globalMsg: audio route command (fhem): set MyTTS tts :Doorbell: tür
2018.02.11 17:06:40.924 4: MyTTS: Auflistung der Textbausteine nach Aufbereitung:
2018.02.11 17:06:40.925 4: MyTTS: 0 => audio/Doorbell.mp3
2018.02.11 17:06:40.925 4: MyTTS: 1 => tuer

Mit dem Device "MyTTS" hat das nichts zu tun, denn auch wenn ich nur ins Log schreiben lasse, ist der Fehler zu erkennen:
attr MyTTS msgCmdAudio {Log 3, "set %DEVICE% tts :%TITLE%: %MSG%"}
018.02.11 17:24:46.099 5: msg: found types=audio
2018.02.11 17:24:46.104 5: msg globalMsg: Checking for available routes (triggered by type audio)
2018.02.11 17:24:46.122 5: msg globalMsg: screen route check result: ROUTE_AVAILABLE
2018.02.11 17:24:46.134 5: msg globalMsg: light route check result: ROUTE_AVAILABLE
2018.02.11 17:24:46.146 5: msg globalMsg: audio route check result: ROUTE_AVAILABLE
2018.02.11 17:24:46.158 5: msg globalMsg: push route check result: ROUTE_AVAILABLE
2018.02.11 17:24:46.166 5: msg globalMsg: mail route check result: ROUTE_UNAVAILABLE
2018.02.11 17:24:46.167 4: msg globalMsg: Available routes: screen=1 light=1 audio=1 text=1 push=1 mail=0
2018.02.11 17:24:46.171 5: msg globalMsg: Trying to send message via gateway MyTTS
2018.02.11 17:24:46.172 5: msg globalMsg: Determined default title:
2018.02.11 17:24:46.177 5: msg globalMsg: audio route command (Perl): {Log 3, "set MyTTS tts :Doorbell: tür"}
2018.02.11 17:24:46.179 3: set MyTTS tts :Doorbell: t�r
2018.02.11 17:24:46.179 3: msg globalMsg: ID=1518366286.10046.1 TYPE=audio ROUTE=MyTTS STATUS=OK PRIORITY=0 TITLE='Doorbell' MSG='tür'
2018.02.11 17:24:46.677 5: msgConfig globalMsg: called function msgConfig_Set()


Hat hier jemand eine Idee an was das liegen könnte? Und wie ich das beheben kann?

Schlimbo

Habe hier noch mal etwas weiter geforscht.

aus 75_MSG.pm:

elsif ( $cmd =~ /^\s*\{.*\}\s*$/ ) {
    Log3 $logDevice, 5,
    "msg $device: "
    . "$type[$i] route command (Perl): $cmd";
    eval $cmd;
    unless ( !$@ || $@ =~ m/^[\s\t\n ]*$/ )
    {

Bei Zeile 1957 (eval $cmd) geht irgendetwas mit der utf8 Formatierung schief.

Laut Log Einträge passt die Formatierung in der vorherigen Zeile noch
2018.02.11 17:24:46.177 5: msg globalMsg: audio route command (Perl): {Log 3, "set MyTTS tts :Doorbell: tür"}

Bei der Ausführung des Befehls über "eval" wird dann aus ü ein �

2018.02.11 17:24:46.179 3: set MyTTS tts :Doorbell: t�r

Schlimbo

Habe testweise die Zeile
eval $cmd;
mal mit
AnalyzeCommand(undef,$cmd);
ersetzt, damit funktioniert es auch mit Umlauten.

Hat das Problem sonst keiner?
@Loredo: könntest du dir das bitte mal ansehen?

DeeSPe

MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Stephan1965

Hallo,
ich hatte ein paar Problem mit msg und habe mich durch das Forum gewühlt. Dadurch konnte ich meine Probleme beheben. Ich habe für Pushover und Telegram entsprechende Ergänzungen, die ich hier im Forum gefunden habe, in das Wiki eingetragen, vielleicht sind sie ja hilfreich.

Eine wirklich tolle Arbeit! Großen Dank an Loredo! Und natürlich auch an die anderen Mitglieder in diesem Forum. Das hat mir sehr geholfen...

Gruß

Stephan

Jens_B

Zitat von: tomspatz am 10 Juli 2017, 14:07:36
Moin
auch ich probiere mich in das msg. Habe allerdings Probleme mit Mail. Konfiguriert ist DebianMail wie Inder WiKi.
Zusätzlich habe ich:
attr globalMsg msgCmdMail {DebianMail('%DEVICE%','%TITLE%','%MSG%')}

Grundsätzlich funktioniert das auch, doch es gibt eine Fehlermeldung im Log.
Beim Aufruf mit:
msg mail @rr_Tom |test Titel| Nachricht


Ich verstehe das es an dem NICHT vorhandenen Anhang liegt, denn wenn ich es so aufrufe:
{ DebianMail('mail@empfänger.domain,'Test','Test-Text','');; }

Gibt es die Fehlermeldung nicht.
Kann mir da jemand auf die Sprünge helfen.

LG
Tom

Ich weiß nicht ob es noch aktuell ist und Dir weiterhilft:
Aber weshalb packst Du nicht hier
attr globalMsg msgCmdMail {DebianMail('%DEVICE%','%TITLE%','%MSG%')}

ebenfalls die Hochkommata hinter das "%MSG%? also so:

attr globalMsg msgCmdMail {DebianMail('%DEVICE%','%TITLE%','%MSG%','')}

Dann hast Du keine Fehlermeldung im Log, weil im der Anhang eben leer ist.

Gruß
Jens
RaspberryPi 4 (Raspian Buster)FHEM+Homebridge
HMLAN für Homematic
Z-Wave USB Stick
Shelly Devices
Fritz!Box 7590Ax

der_da

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?

Wolle02

Hallo,

ich versuche den msg Befehl mit Pushsafer zu verwenden, stoße dabei aber auf folgende Probleme:

Ich habe ein MyPushsafer Device erstellt und dieses funktioniert auch problemlos, wenn ich die Pushnachricht darüber direkt versende.

Laut Doku rufe ich den msg Befehl folgendermaßen auf: msg push @MyPushsafer |Test| Das ist ein Test
Als direkte Rückmeldung bekomme folgendes angezeigt:
MyPushsafer: wrong syntax for option url:
wrong syntax for option ttl:
wrong syntax for option device:
wrong syntax for option key:


Mein msgConfig Device habe ich mal auf verbose 5 gestellt und den o.g. msg Befehl aufgerufen.
Im Logfile erhalte ich dann folgende Ausgabe:
2018.05.20 11:16:45 5: msg: found types=push
2018.05.20 11:16:45 5: msg: found recipient=@MyPushsafer
2018.05.20 11:16:45 5: msg: found title=Test
2018.05.20 11:16:45 4: msg MyPushsafer: Recipient type Pushsafer is a gateway device itself for message type push. Still checking for any delegates ...
2018.05.20 11:16:45 5: msg MyPushsafer: Checking for available routes (triggered by type push)
2018.05.20 11:16:45 5: msg MyPushsafer: screen route check result: ROUTE_UNAVAILABLE
2018.05.20 11:16:45 5: msg MyPushsafer: light route check result: ROUTE_UNAVAILABLE
2018.05.20 11:16:45 5: msg MyPushsafer: audio route check result: ROUTE_UNAVAILABLE
2018.05.20 11:16:46 5: msg MyPushsafer: push route check result: ROUTE_AVAILABLE
2018.05.20 11:16:46 5: msg MyPushsafer: mail route check result: ROUTE_UNAVAILABLE
2018.05.20 11:16:46 4: msg MyPushsafer: Available routes: screen=0 light=0 audio=0 text=1 push=1 mail=0
2018.05.20 11:16:46 5: msg MyPushsafer: Trying to send message via gateway MyPushsafer
2018.05.20 11:16:46 5: msg MyPushsafer: Determined default title:
2018.05.20 11:16:46 5: msg MyPushsafer: msgSchema: replacing %RECIPIENT% and $RECIPIENT by ''
2018.05.20 11:16:46 5: msg MyPushsafer: msgSchema: replacing %URLTITLE% and $URLTITLE by ''
2018.05.20 11:16:46 5: msg MyPushsafer: msgSchema: replacing %EXPIRE% and $EXPIRE by ''
2018.05.20 11:16:46 5: msg MyPushsafer: msgSchema: replacing %ACTION% and $ACTION by ''
2018.05.20 11:16:46 5: msg MyPushsafer: msgSchema: replacing %TERMINAL% and $TERMINAL by ''
2018.05.20 11:16:46 5: msg MyPushsafer: msgSchema: replacing %Pushsafer_VIBRATION% and $Pushsafer_VIBRATION by '1'
2018.05.20 11:16:46 5: msg MyPushsafer: push route command (fhem): set MyPushsafer message "Das ist ein Test" title="Test" key="" device="" vibration="1" url="" urlText="" ttl=""
2018.05.20 11:16:46 3: msg MyPushsafer: ID=1526807805.97424.1 TYPE=push ROUTE=MyPushsafer STATUS=ERROR PRIORITY=0 TITLE='Test' MSG='Das ist ein Test'


Für mich sieht es irgendwie so aus, als ob mit dem replacing der Variablen bei der Umsetzung des msg-Befehls in den MyPushsafer-Aufruf etwas nicht stimmt. Wenn key, device, url und ttl beim msg Befehl nicht mit angegeben werden und die Variablen demzufolge leer sind, dann dürfen diese bei der Umsetzung des msg-Befehls in den MyPushsafer-Aufruf nicht mit angegeben werden, da ansonsten ein Syntaxfehler angezeigt wird.

Stimmt das oder mache ich schlicht und ergreifend irgendwo einen Fehler?

Gruß
Wolle

FHEm2005

Nur eine kleine Frage:

Threadbeginn:
ZitatEine Liste der direkt unterstützten Module, ohne dass man diese händisch einbinden muss, kann man über den get-Befehl "routeCmd" beim Helfer-Device "globalMsg" (sofern es nicht umbenannt wurde) erhalten.

Ist es richtig, dass globalMSG (Beitrag #1) von msgConfig abgelöst wurde?
Gruß Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

binford6000

ZitatIst es richtig, dass globalMSG (Beitrag #1) von msgConfig abgelöst wurde?
Gruß Eberhard
Hallo Eberhard,
nein, denn laut Commandref:
ZitatMSGCONFIG
Stellt globale Einstellungen und Tools für das FHEM Kommando msg bereit.
Ein Device mit dem Namen globalMsg wird automatisch bei der ersten Benutzung des msg Kommandos angelegt, sofern kein msgConfig Device gefunden wurde.
Der Device Name kann anschließend beliebig umbenannt und umkonfiguriert werden.
VG Sebastian