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

Loredo

Zitat von: Yil am 19 April 2017, 09:38:05
Frage: wie werde ich die Einstellungen nun wieder los? (insbesondere die Attribute bei Global). Wenn ich sie manuell lösche, sind sind kurze Zeit später wieder da.


Du hast übersehen das msgConfig Device aufzuräumen (Standardname: globalMsg, wenn du es nicht umbenannt hast). Ansonsten werden die User Readings bei jedem Neustart natürlich wieder hinzugefügt.
Mit diesem Device lassen sich auch die Readings aufräumen. Alternativ:



deletereading .* fhemMsg.*



Zitat von: eisman am 18 April 2017, 12:31:20
nur möchte ich gerne eine Mail formatieren:
   doif zur Statusabfrage der Fenster (9x und geht auch)


Geht die Formatierung denn überhaupt ohne den msg-Befehl, wenn du den Sendebefehl für die Email direkt ausführst? Das wäre zunächst zu klären.
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

stebar_

Ich möchte gerne die Benachrichtigung auf meinem FHEM Server standardisierten. Dabei bin ich auf den msg Befehl gestoßen. Dazu habe ich folgende frage: Ist es möglich einen anderen Push Dienst außer Pushover einzubinden? Aus dem Wiki wurde ich nicht ganz schlau [emoji846]

Loredo

Das ist ja das schöne: Du kannst jedes FHEM Modul benutzen, was du möchtest. Für alle von FHEM unterstützen Pushdienste sind Standard Befehle hinterlegt, welche man aber mit den msgCmd* Attributen übersteuern kann. Wie die Standardbefehle aussehen, kann einem das msgConfig Modul sagen. Davon wird eine Instanz automatisch angelegt, wenn man den msg-Befehl das erste Mal anlegt. Das Device heißt dann "globalMsg", man kann es aber umbenennen wir man mag.
Der Befehl "get globalMsg routeCmd push" zeigt die Standard Schemata für alle Push Module an. Normalerweise muss man da nichts ändern, die Platzhalter werden vom msg-Befehl automatisch entsprechend befüllt.
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

stebar_

Danke für die Rückmeldung.  :)

Mein verwendeter Push Dienst ist leider nicht als FHEM Modul vorhanden. Ich teste mal Pushover aus.
Habe im Augenblick Probleme Spezielle Endgeräte zu Adressieren. Diese Hilfe habe ich gefunden:

Zitat von: Loredo am 05 Dezember 2015, 15:05:16
Man kann auch an ein spezielles Endgerät adressieren:


msg push @PushoverDevice:uQiRzpo4DXghDmr9QzzfQu27cmVRsG:iPhone Dies ist eine Nachricht, die nur an das iPhone geschickt wird.


Natürlich kann man das auch in ein msgContactPush Attribut schreiben...


attr myDevice msgContactPush PushoverDevice:uQiRzpo4DXghDmr9QzzfQu27cmVRsG


...und anschließend so wie gewohnt über die Device-Adressierung verschicken:


msg push @myDevice Nachrichtentext


Der obere Teil funktioniert. Allerdings in dieser Form:

msg push @PushoverDevice:iPhone Dies ist eine Nachricht, die nur an das iPhone geschickt wird.

Ich würde es gerne aber wie unten beschrieben umsetzten. Leider kommt folgende Meldung:

Device myDevice does not exist

Hat jemand eine Idee?

l2r

du musst das Device an das du schicken möchtest ja auch anlegen.

myDevice gibt es nicht und ist wie der Name schon sagt als Platzhalter im Beispiel zu verstehen.

Dein Pushoverdevice definierst du im Fhem. Bei mir heißt es PushMichael

Jetzt kann ich mit
msg push @PushMichael Testnachricht

an dieses Device eine Nachricht schicken.


Der Vorteil von Msg ist, dass ich für jedes beliebige in FHEM angelegte Device definieren kann wie ich eine Nachricht an dieses Device schicke.

Als Beispiel:
Ich habe einen Dummy der heißt Test.
dem Dummy kann ich mit dem Attribut msgContactPush ein Pushover Device, über dass die Nachricht verschickt werden soll, hinzufügen.

konkret:

attr msgContactPush PushMichael

somit kann ich jetzt sagen:

msg @Test Nachricht

jetzt wird an Test eine Nachricht geschickt, die an das Pushoverdevice PushMichael weitergegeben wird und dann schließlich auf dem Handy landet.

Ich hoffe ich habe ein bisschen Licht ins Dunkel gebracht

Gruß Michael

EDIT: und das charmante ist, wenn du dein Pushoverdevice im Device globalMsg im Attribut msgContactPush angelegt hast, dann wird dieses immer genommen wenn im Angesprochenen Device das Attribut nicht gesetzt ist.

Somit ist dann auch :

msg push Nachricht

oder noch kürzer

msg Nachricht


möglich.
Wissen ist Macht.
Ich weiß nix.
Macht nix.

stebar_


Yil

Zitat von: Loredo am 20 April 2017, 08:54:21

Du hast übersehen das msgConfig Device aufzuräumen (Standardname: globalMsg, wenn du es nicht umbenannt hast). Ansonsten werden die User Readings bei jedem Neustart natürlich wieder hinzugefügt.
Mit diesem Device lassen sich auch die Readings aufräumen. Alternativ:



deletereading .* fhemMsg.*


Natürlich - vielen Dank!
HM CCU2 mit ca. 35 HM-Komponenten inkl. Bausätzen
fhem auf RPi mit Sonos, EnOcean-CUL, ZWAVE-CUL und Bluetooth
Osram Lightify

Amenophis86

Nächste Frage von mir, wenn ich in der action folgende zwei Befehle einbauen will, wie wäre die richtige Syntax?
Erst soll Anja.Kaffe auf off gesetzt werden und dann soll noch das at definiert werden. Aber natürlich soll das ganze erst passieren, wenn die url_title gedrückt wurde und nicht gleich.

msg @rr_Etienne title="Kaffe morgen AUSschalten?" Pushover_action="set Anja.Kaffe off; define Anja.Kaffe.An at +12:00 set Anja.Kaffe on" url_title="Morgen Kaffe AUSschalten?" expire=3600 Kaffe wird morgen um [KU.Kaffe.Anja:timer_01_c01] eingeschaltet. Soll er für morgen ausgeschaltet werden?

Leider bekomme ich die Meldung, dass die url_titel fehlt und direkt das define ausgeführt wird. Auch mit ;; funktioniert es nicht. Auch mit \; habe ich es nicht hinbekommen.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Loredo

DU hast richtig erkannt, dass das Semikolon von dem FHEM Befehlszeileninterpreter besonders behandelt wird.
Damit es dort nicht abgeschnitten wird und richtig beim msg-Befehl und dem Pushover Modul ankommt, musst du aus jedem Semikolon zwei machen. Allerdings darf danach kein Leerzeichen sein.
Richtig ist also:



set Pushover msg title="Kaffe morgen AUSschalten?" action="set Anja.Kaffe off;;define Anja.Kaffe.An at +12:00 set Anja.Kaffe on" url_title="Morgen Kaffe AUSschalten?" expire=3600 Kaffe wird morgen um [KU.Kaffe.Anja:timer_01_c01] eingeschaltet. Soll er für morgen ausgeschaltet werden?
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

Amenophis86

Das mit zwei ; hatte ich versucht, wusste jedoch nicht, dass der Übeltäter das Leerzeichen ist. Ich danke für die Information :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

rudolfkoenig

ZitatIch habe einen recht hohen Anspruch an die Doku und wollte sie daher nicht so hinro****  (https://forum.fhem.de/Smileys/default/smiley.gif)

@Loredo: gerne, aber diese Aussage inzwischen 11 Monate alt: kannst du bitte diesen Punkt hoeher priorisieren?

choenig

Hi,

ich versuche gerade mein Pushover auf meine Frau auszudehnen um es dann mittels msg zu verwenden. Dabei bin ich auf ein Problem gestoßen:

In Pushover habe ich für mich zwei Geräte definiert (iPhone + iPad) und für meine Frau eines (iPhone). Jetzt möchte ich in meinem RESIDENT (rr_Christian) gerne den msgContactPush für meine beiden Geräte setzen

attr rr_Christian msgContactPush Pushover:iPhone_c,Pushover:iPad_c

(Das Format habe ich mir so durch testen zusammengesucht, ob es richtig ist, weiss ich leider nicht genau.)

Das Problem ist jetzt, dass folgendes passiert:

msg push @rr_Christian Test

ergibt folgendes im Log:

...
2017.05.27 10:07:05 5: msg rr_Christian: Trying to send message via gateway Pushover to recipient iPhone_c
...
2017.05.27 10:09:53 5: msg rr_Christian: Trying to send message via gateway Pushover to recipient iPhone_c
...


Das bedeutet, er sendet zwei mal an das selbe Gerät. Hintergrund ist vermutlich folgender Code aus 75_MSG.pm (ca. Zeile 1272ff)

$gatewayDev    = $1;
$subRecipient  = $2 if ( $subRecipient eq "" );
$termRecipient = $3 if ( $termRecipient eq "" );


Mir ist nicht klar, warum der Code ist, wie er ist, allerdings sieht es für mich so aus, als würde er das $gatewayDev in jeder Schleife korrekt verwenden, aber $subRecipient (und auch $termRecipient) wird im zweiten Durchlauf der Schleife nicht mehr überschrieben.

Ist das Absicht? Oder ein Bug? Oder mache ich es ganz falsch? ;)

Über Feedback freue ich mich :)

LG
Christian

Loredo

Zitat von: choenig am 27 Mai 2017, 11:47:41
Ist das Absicht? Oder ein Bug? Oder mache ich es ganz falsch? ;)


Das klingt eher nach einem Bug, muss ich mir bei Gelegenheit genauer ansehen. Die Details des msg-Befehls sind ja nach wie vor "Work in progress". Ich bin froh, wenn ich einmal Feedback zu Funktionen bekomme, die ich hier auch bekannt gemacht habe, um eben genau von dir dann aus der Praxis heraus das ganze rundzuschleifen :-)
Ich weiß allerdings nicht, wann ich dazu komme, mir das anzusehen.
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

Schlimbo

Hallo zusammen,
mit
msg push @[rgr_Residents:residentsHomeDevs] ...
ist es ja möglich an alle ROOMMATES, die zu Hause sind, eine Meldung zu senden.
Bräuchte aber auch einen einfache Möglichkeit an alle ROOMMATES, unabhängig von der Anwesenheit zu senden.
Im Internal "ROOMMATES" vom Residents Device sind alle Roommates hinterlegt, gibt es eine Möglichkeit auf dieses zuzugreifen?

So wie bei DOIF z.B.
Aus Commandref DOIF:
Zitatstatus is specified with [<devicename>], readings with [<devicename>:<readingname>] or internals with [<devicename>:&<internal>]
Habe
msg push @[rgr_Residents:&ROOMMATES] ...
probiert, das funktionierte aber nicht.

DeeSPe

Zitat von: Schlimbo am 03 Juni 2017, 09:28:17
Hallo zusammen,
mit
msg push @[rgr_Residents:residentsHomeDevs] ...
ist es ja möglich an alle ROOMMATES, die zu Hause sind, eine Meldung zu senden.
Bräuchte aber auch einen einfache Möglichkeit an alle ROOMMATES, unabhängig von der Anwesenheit zu senden.
Im Internal "ROOMMATES" vom Residents Device sind alle Roommates hinterlegt, gibt es eine Möglichkeit auf dieses zuzugreifen?

So wie bei DOIF z.B.
Aus Commandref DOIF:Habe
msg push @[rgr_Residents:&ROOMMATES] ...
probiert, das funktionierte aber nicht.

Alle Roommates kommasepariert:
my $roommates = InternalVal("rgr_Residents","ROOMMATES","");

Alle Roommates im Array:
my @roommates = split ",",InternalVal("rgr_Residents","ROOMMATES","");

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