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

FunkOdyssey

Zitat von: AndreasR am 19 Januar 2017, 16:59:21
Hallo

die anwesenden Roommates stehen in residentsHomeDevs
in https://forum.fhem.de/index.php/topic,19040.msg359145.html#msg359145 ist ein DoIf das mir beim aufknoten diverser Fragen in diesem Zusammenhang geholfen hat;

Gruß

Andreas

Okay, danke. Das kann ich bei mir jedoch viel einfacher machen, da ich nur zwei Standard-Bewohner abfragen muss.
Innerhalb eines DOIF-Ausführungsteils hatte ich folgende Abfrage. Dies wollte ich mir nur ersparen.

([FbCallMonitor:event] eq "ring")
(
IF ([rr_Bewohner1] eq "home")
(set push_Bewohner1 msg '' 'Anruf von [FbCallMonitor:external_name] [FbCallMonitor:external_number]' '' 0 'bike'),
IF ([rr_Bewohner2] eq "home")
(set push_Bewohner2 msg '' 'Anruf von [FbCallMonitor:external_name] [FbCallMonitor:external_number]' '' 0 'bike'),
)


Ich nahm an, dass das irgendetwas mit dem Attribut "msgResidentsDev" zu tun hätte. Nunja. Dann halt weiter manuell. :-)




So sieht das nun mit der neuen Syntax aus. Leider musste ich "msg screen" nun getrennt einbauen, da die Nachricht sonst doppelt erscheinen:

([FbCallMonitor:event] eq "ring")
(
IF ([Dreambox:state] eq "on")
msg screen Anruf von [FbCallMonitor:external_name] [FbCallMonitor:external_number],
IF ([rr_Bewohner1] eq "home")
msg push @rr_Bewohner1 Anruf von [FbCallMonitor:external_name] [FbCallMonitor:external_number] O[{"Pushover_SOUND":"bike"}],
IF ([rr_Bewohner2] eq "home")
msg push @rr_Bewohner2 Anruf von [FbCallMonitor:external_name] [FbCallMonitor:external_number]
)

FunkOdyssey

Ich habe noch einmal eine andere Frage.
Irgendwo habe ich einen Fehler. Ich erhalte nur eine Push-Nachricht mit dem Inhalt "audio". Titel, richtiger Inhalte, Audio-Ausgabe haben nicht funktioniert:

Code

## CMD4: Ausführungsteil
(
set irgendetwas on,
msg audio,push @rr_Bewohner1 |Alarmsystem| bla bla bla.
)


Log


2017.01.19 17:05:58 3: msg globalMsg: ID=1484841958.08763.1 TYPE=push ROUTE=pushBewohner1 STATUS=OK PRIORITY=0 TITLE='Hausautomation - Info' MSG='push'
2017.01.19 17:05:58 2: di_alarm: audio @rr_Bewohner1 |Alarmsystem| bla bla bla. : Unknown command audio, try help.


Loredo

Zitat von: kjmEjfu am 04 Dezember 2016, 20:31:43
ist durch den Umbau zum Doppelpunkt bei Pushover eventuell etwas kaputt gegangen?

Mir ist aufgefallen, dass du den Buchstaben O nicht vor den Advanced Options gesetzt hast, weshalb sie nicht als solche erkannt werden können.

Zitat von: outhouse am 17 Dezember 2016, 13:12:37
Statt, anstelle der offenen Fenster, wird der Text wie angegeben per Push übertrage.

Das ist eine Frage zur Nutzung von DOIF, da sich DOIF in diesem Fall um die Ersetzung der Variable kümmern muss.

Zitat von: FunkOdyssey am 09 Januar 2017, 15:50:40
Ich fange gerade an, mich in deine Lösung einzuarbeiten und stolpere über eine Kleinigkeit:

Ich habe u.a. folgende Titel über die Attribute konfiguriert:

   msgCmdMail {DebianMail('%DEVICE%','%TITLE%','%MSG%')}
   msgCmdMailHigh {DebianMail('%DEVICE%','%TITLE%','%MSG%')}
   msgCmdMailLow {DebianMail('%DEVICE%','%TITLE%','%MSG%')}
   msgTitleMail Hausautomation - Info
   msgTitleMailHigh Hausautomation - Warnung
   msgTitleMailLow Hausautomation - Hinweis


Wenn ich nun
msg mail 0 HalloWeltPrio0
oder
msg mail 1 HalloWeltPrio1
ausführe, so wird in beiden Fällen der Titel aus dem Attribut "msgTitleMail" genommen.

Habe ich da einen Denkfehler oder ist im Code irgendwo ein Dreher? :-)

Muss ich mir genauer ansehen.

Zitat von: AndreasR am 18 Januar 2017, 20:26:40
Mein Problem ist das ich bei dem Befehl
msg push @[MBW_HS:lastActivityByDev] |Anwesenheit| [MBW_HS:lastActivityBy] abgemeldet.

gerne hätte das die Meldung via Telegram an den zuletzt aktiven Benutzer geht. 
Dazu habe ich bei jedem Benutzer das Attribut
msgContactPush Telegram
msgRecipientPush @SeinTelegramName

gesetzt.

Beide Attribute gleichzeitig zu verwenden macht keinen Sinn.
msgRecipientPush ist ein Alias, der auf ein anderes FHEM Device zeigen muss, bei dem nach einem msContactPush Attribut gesucht werden soll.
Du willst wahrscheinlich nur msgContactPush setzen. Dort hast du aber nur dein Telegram Device angegeben ohne einen zusätzlichen Empfänger, der an Telegram mit übergeben werden kann. Also greift der Default Empfänger von Telegram.

Richtig muss es lauten:

msgContactPush Telegram:@@SeinTelegramName

Hier sind zwei aufeinanderfolgende @ notwendig, um das @ zu quoten und von einem Perl Array zu unterscheiden.

Zitat von: Buwe am 18 Januar 2017, 21:00:47
@Loredo:
Ich habe heute Abend das Update gemacht.
Der Squeezeplayer gibt jetzt bei ausgeschalteten Player den Text aus.
Aber nicht mehr bei eingeschalteten Player.
Schlimmer noch, ein mal versucht den Text bei eingeschalteten Player Sprache auszugeben, geht erst mal gar keine Sprachausgabe mehr.
Selbst über den set talk Befehl des Squeezeplayer nicht mehr.

Ich habe noch kein Muster gefunden wann oder wie der Player sich wieder berappelt.
Der Player stürzt auch nicht ab, Musik (Radio) starten/stoppen geht trotzdem.

Laut logs behauptet msg der Befehl war erfolgreich. Auch laut den logs des Squeezeplayers wird Google angeblich erfolgreich für TTS aufgerufen.

Ich komme aber frühestens am Wochenende dazu weiter zu suchen  :(

Muss ja auch nicht unbedingt an msg liegen.

Das denke ich auch. Der msg-Befehl setzt nur den set-Befehl an das Gateway Device ab, hat aber keine Möglichkeit einer Rückmeldung um zu erfahren, ob er erfolgreich war oder nicht. Wenn der Befehl abgesetzt werden konnte, gibt msg den Status OK zurück.

Zitat von: AndreasR am 18 Januar 2017, 21:08:36
[...] sowie im DoIf  code  msg push \@[MBW_HS:lastActivityByDev] ..  leider in beiden Fällen erfolglos .. 

Hier muss wiederum kein Backslash angegeben werden, da es sich um normale msg-Notation handelt.
Siehe mein Beispiel, was Andreas verlinkt hat.

Zitat von: AndreasR am 19 Januar 2017, 16:59:21
die anwesenden Roommates stehen in residentsHomeDevs

Das stimmt nicht ganz: Die anwesenden Roommate stehen in residentsTotalPresentDevs. residentsHomeDevs beinhaltet alle Roommates, die gerade den Aktivitätsstatus "home" haben. Wenn also jemand schlafen ginge und damit einen anderen Aktivitätsstatus bekäme, dann würde diese Person nicht mehr in residentsHomeDevs aufgelistet werden, sondern stattdessen in residentsAsleepDevs. residentsHomeDevs ist aber vermutlich für den Fall, dass ein Anruf signalisiert werden soll, u.U. trotzdem richtig, wenn man die schlafenden Personen außen vor lassen möchte ;-)

In einem DOIF lässt sich das entsprechende Reading am einfachsten verwenden, um z.B. auf einen Anruf zu reagieren:

DOIF (...)
(msg push,screen @[rgr_Residents:residentsHomeDevs] Anruf von [FbCallMonitor:external_name] [FbCallMonitor:external_number] O[{"Pushover_SOUND":"bike"}])



Zitat von: FunkOdyssey am 19 Januar 2017, 17:47:51
Ich habe noch einmal eine andere Frage.
Irgendwo habe ich einen Fehler. Ich erhalte nur eine Push-Nachricht mit dem Inhalt "audio". Titel, richtiger Inhalte, Audio-Ausgabe haben nicht funktioniert:


DOIF verlangt an dieser Stelle, dass du die Befehlszeile nochmals in Klammern einschließt:




## CMD4: Ausführungsteil
(
   set irgendetwas on,
   (msg audio,push @rr_Bewohner1 |Alarmsystem| bla bla bla.)
)
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

FunkOdyssey

Zitat von: Loredo am 19 Januar 2017, 18:14:08
DOIF verlangt an dieser Stelle, dass du die Befehlszeile nochmals in Klammern einschließt:

Ach, stimmt. Über ähnliches Problem (Kommatrennung) bin ich früher schon einmal gestolpert. Macht Sinn. Danke.

DeeSPe

Zitat von: Loredo am 19 Januar 2017, 18:14:08
Richtig muss es lauten:

msgContactPush Telegram:@@SeinTelegramName

Hier sind zwei aufeinanderfolgende @ notwendig, um das @ zu quoten und von einem Perl Array zu unterscheiden.

Das kann ich so nicht bestätigen.
Habe es von Anfang an nur mit einem @ und es funktioniert bei allen ROOMMATE/GUEST Devices.

attr rr_Dan msgContactPush TB:@XXXXXXXXX

Gruß
Dan
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

Loredo

Nope, ansonsten gibt's diese Meldung in TelegramBot:


sentMsgResult          NonBlockingGet: returned FAILED peer not found :Loredo:


Wie man sieht fehlt dort das @, denn es wird von TelegramBot erwartet, um den Shortname aus dem Reading "Contacts" zu finden.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

DeeSPe

Zitat von: Loredo am 19 Januar 2017, 19:32:47
Nope, ansonsten gibt's diese Meldung in TelegramBot:


sentMsgResult          NonBlockingGet: returned FAILED peer not found :Loredo:


Wie man sieht fehlt dort das @, denn es wird von TelegramBot erwartet, um den Shortname aus dem Reading "Contacts" zu finden.

Ich gehe über die ID-NR mit TelegramBot, nicht über den Benutzernamen.
Vielleicht ist das der Unterschied?
Denn die ID-NR wird im Contacts Reading nicht mit einem @ davor angezeigt, der Benutzername schon. ;)

Gruß
Dan
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

FunkOdyssey

Zitat von: FunkOdyssey am 19 Januar 2017, 17:16:00


([FbCallMonitor:event] eq "ring")
(
IF ([Dreambox:state] eq "on")
msg screen Anruf von [FbCallMonitor:external_name] [FbCallMonitor:external_number],
IF ([rr_Bewohner1] eq "home")
msg push @rr_Bewohner1 Anruf von [FbCallMonitor:external_name] [FbCallMonitor:external_number] O[{"Pushover_SOUND":"bike"}],
IF ([rr_Bewohner2] eq "home")
msg push @rr_Bewohner2 Anruf von [FbCallMonitor:external_name] [FbCallMonitor:external_number]
)


Hmm. Es hört nicht auf bei mir. Nun habe ich folgenden Fehler.


IF ([rr_Bewohner1] eq "home") ((msg push @rr_Bewohner1 Es klingelt an der Haustür. O[{"Pushover_SOUND":"bike"}])): IF: unknown Device: {"Pushover_SOUND"

(Bitte nicht am leicht anderen Text stören)

Loredo

Deine Fragen sind glaube ich alle DOIF bezogen und hier eher falsch.


Gruß

Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

FunkOdyssey

Es liegt wohl an der Kombination mit dem IF.
Eine Umgehungslösung habe ich hier beschrieben.

FunkOdyssey

Ich muss leider noch einmal mit einer Frage stören.  ::)

Wen ich folgenden Befehl ausführe, so liest mir mein Sonos-Lautsprecher den Text "rr_Bewohner1" vor.

(msg audio,push @rr_Bewohner1|Titel| Nachricht.)

Ich hatte in "rr_Bewohner1" das Attribut "msgContactAudio" auch nicht gesetzt und bin davon ausgegangen, dass auf die Einstellungen des globalMsg-Device zurückgegriffen wird. Erst nach der Pflege des Attributs in allen ROOMMATEs funktioniert die Sprachwiedergabe mit dem richtigen Text.

Is it a bug or a feature?  ;)

Loredo

Es fehlt vermutlich die Leertaste nach dem Titel:



msg audio,push @rr_Bewohner1 |Titel| Nachricht.




Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

FunkOdyssey

Danke, aber leider nein. Vielleicht oben in der Codezeile, aber ich habe alle Varianten ausprobiert.
Es änderte sich erst, als ich die Sonosgeräte bei den Bewohnern ergänzt hatte.

Loredo


Eigentlich zweckentfremdest du die Catchall Fallback Funktion hier. Wenn man etwas zentral pflegen will ist eigentlich vorgesehen msgRecipient* zu verwenden, um auf das andere Device zu verlinken, in dem dann msgContact* zu suchen ist.

Da die Catchall-Funktion wie gesagt eigentlich ein Fallback ist, wird die Nachricht immer entsprechend mit einer zusätzlichen Nachricht erweitert, damit man sich dessen bewusst ist und ggf. eine Routing Korrektur programmieren kann. Mit dieser Texterweiterung kommt SONOS dann nicht klar und liefert beim Versuch die Nachricht umzuwandeln und abzuspielen dann einen entsprechenden Fehler (sieht man auch im Sonos Controller).

Ich habe den Textzusatz nun für Audio und Screen Nachrichten deaktiviert, da ich davon ausgehe, dass die Weiterleitungshinweise dort auch nicht wirklich hilfreich sind.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

outhouse

Zitat von: kjmEjfu am 17 Januar 2017, 14:23:31
konntest du das Problem zwischenzeitlich lösen?

Leider nein. Such noch immer nach einer Lösung.
Raspberry 4 B mit Raspberry Pi OS und FHEM-Image 6.3 von fhem.de
Cul CC 1101 V4 als CUL_HM
Cul V3.4 + V3.4 als RFR
enocean-pi