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

Ich habe mal einfache Schemata für die Module AMAD, Fhemapppush und TelegramBot hinzugefügt.
Ab sofort im SVN.
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

andre07

Hallo

Wie setzt man z.b mit deinen Modul audio global
msgContact ist bei mir bei global attribut
nicht vorhanden, am Device selber gibt es auch nicht so ein Attribut

Andre

Loredo

hast du 99_msg.pm nach /opt/fhem/FHEM kopiert und FHEM neu gestartet?


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

andre07

ja hatte ich habe sie hier aus dem Thread nach opt/fhem/FHEM kopiert und rechte angepaßt anschließend über ssh
neu gestartet

Loredo

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

andre07

Hallo Loredo
Danke hat geklappt das reload hats gebracht
An meiner zweiten fhem installtion hatte ich das auch
das dieses Attribut nicht vorhanden war erst nach
einen reload kam es zum Vorschein

Andre

Loredo

#36
da muss ich Rudi wohl nochmal fragen. Lt. seiner Aussage müsste es genügen die Datei 99_* zu nennen, damit sie immer automatisch geladen wird. Bei mir tut sie das auch, uU aber auch nur weil ich msg bei mir im Code auch verwende (u.a. auch gleich direkt nach dem Start, um mich per Push+Light über den Neustart von FHEM informieren zu lassen).


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

Loredo

Hab jetzt nochmal Schemata für Pushbullet und yowsup hinzugefügt. Pushalot macht grad als allgemeine Defintion noch nicht so viel Sinn, da dort die Optionen als Default nicht so ohne weiteres Sinn machen. Ich muss mir da wohl nochmal eine Art Konvertierung überlegen...
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

rudolfkoenig

Wg. der load-Problematik:
- 99_ er Module werden immer als erstes geladen.
- Wenn das Laden zunaechst schiefgeht, aber danach klappt, dann tippe ich auf die Verwendung von irgendwelchen Funktionen im 99-er Modul, die erst in einem anderen Modul via "use" geladen werden.
- Uebrigens sind 99-er Module unerwenscht. 99_Utils.pm und 99_myUtils.pm sind Ausnahmen von diesem Regel. 99_SUNRISE_EL.pm ist keine Ausnahme, und wird bei passender Gelegenheit umbenannt. Missachtung dieser Regel wird geahndet :)

Loredo

Hallo Rudi,


es ist eigentlich nur so, dass ich dem global-Device zusätzliche Attribute für die Konfiguration mitgeben möchte (siehe msg_Initialize()). Dies ist über 98_* nicht möglich gewesen. Diese Attribute sollen aber per Default nicht bei allen anderen Devices zu sehen sein, weshalb userattr dafür nicht in Frage kommt.
Trotzdem nutze ich auch userattr, um die für alle Devices gedachten Standard Attribute anzeigen zu lassen. Da msg jedoch kein Modul ist, sondern ein Command, gibt es hier das Henne-Ei-Problem: Man müsste "msg" einmal aufrufen, damit das userattr erweitert wird. Ansonsten kann man den msg-Befehl nicht an den Devices konfigurieren und ihn somit nicht benutzen.


Die Datei kann auch 98_msg.pm genannt werden. Nur müssten dann wohl die global-Attribute und die default-Vorgabe für userattr an zentraler Stelle erweitert werden, statt über die 98_msg.pm Datei selbst. Oder gibt es da eine Möglichkeit von der ich nichts weiß?




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

rudolfkoenig

Ich will eigentlich weniger Attribute fuer global und nicht mehr.
Insb. will ich keine globale Attribute fuer etwas, was nicht alle verwenden.

Wie waere es mit einem msgConfig device?
Man koennte mehrere Konfigurations-Sets anlegen, und die Befehle koennen sich optional auf einem beziehen. Ohne Angabe wird nach dem ersten device mit diesen Typ gesucht, und wenn keins gefunden, dann default verwendet.
Ich glaube ich habe gerade ein TODO fuer mich erfunden: etliche bisherige global Attribute sollten so umgebaut werden: update*, backup*, longitude/etc.

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Loredo

Hallo Rudi,


Zitat von: rudolfkoenig am 16 Oktober 2015, 14:01:33Wie waere es mit einem msgConfig device?Man koennte mehrere Konfigurations-Sets anlegen, und die Befehle koennen sich optional auf einem beziehen. Ohne Angabe wird nach dem ersten device mit diesen Typ gesucht, und wenn keins gefunden, dann default verwendet.


Habe gerade ein kleines 97_msgConfig.pm Device eingecheckt (derzeit noch in ./contrib/97_msgConfig.pm).

Mehrere Konfigurations-Sets anlegen ist eines der Kernfunktionen des msg-Kommandos, nämlich für jedes existierende FHEM Device.
Die Kernphilosophie ist, dass ich jedem FHEM Device eine "Nachricht" schicken kann. Auf welche Art die Nachricht dann zugestellt wird (Mail-Text, Push-Text, Screen-Text, Licht, Audio), an welchen Empfänger(kreis) und mit welcher Priorität, genau darum kümmert sich der msg-Befehl dann anhand der hinterlegten Konfigurations-Attribute. Hauptziel ist es die Nachricht auf jeden Fall "zuzustellen" und dabei die vorgegebenen Möglichkeiten nacheinander abzuwägen.
Ich kann dabei auch Weiterleitungen definieren, sprich von einem Device auf ein anderes verweisen, damit dort die Konfiguration gelesen wird. Auf das globale msgConfig Device wird erst zuletzt zurückgegriffen.

Wenn an einem Device nichts konfiguriert wurde, wird auf das globale Device zurückgegriffen (eben eine Art Fallback/Catchall, was dann sowohl für den Versand von Nachrichten als auch für die Konfiguration ansich funktioniert). Das globale Device muss dafür eindeutig sein, sprich es kann dann in FHEM nur ein msgConfig Device geben, auf welches zurückgegriffen wird (analog dazu, dass es ja auch nur ein global-Device geben kann). Sofern keine Instanz von msgConfig gefunden wurde, wird automatisch eine angelegt und heftet sich sinnvollerweise an die aktuell definierten Attribute von "global" (group, room, verbose).

Derzeit muss der Name noch "msgConfig" heißen, da ich noch keine elegante Möglichkeit gefunden habe zu schauen, ob es bereits ein Device mit dem TYPE gibt und dann eben dieses verwenden kann. Alle definierten Devices in $defs{} dafür in einem Loop durchzugehen widerstrebt mir da irgendwie.

Gibt es da eine einfache Möglichkeit?

Zitat von: rudolfkoenig am 13 August 2015, 20:42:05
Noch besser: 3 Module bauen (98_text.pm, 98_audio.pm, 98_visual.pm), und die Befehle registrieren (siehe auch 98_update.pm oder 98_restore.pm)

Ich habe 98_msg.pm exakt nacht dem selben Schema wie 98_[update|restore].pm nachgebaut.
Trotzdem erhalte ich beim Aufruf des Kommandos "msg" dann die Meldung "Unknown command msg, try help.".
Ein "reload 98_msg" wirft dabei keinen Fehler, trotzdem kann ich den Befehl hinterher nicht aufrufen. Seltsamerweise kann ich ein "define test msg" machen und erhalte dann natürlich ein total unsinniges Device. Das gleiche kann ich mit update oder restore nicht machen, erkenne aber keinen Unterschied zu meiner 98_msg.pm Datei. Muss ich den Befehl noch in einer externen Datei registrieren?

Die Datei als 99_msg.pm benannt funktioniert wie erwartet.


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

justme1968

dafür kannst du den $modules{<device>}{defptr} verwenden. wenn es nur ein einziges msgConfig device geben soll weisst du den device hash im der DefFn so zu: $modules{msgConfig}{defptr} = $hashin der Undeffn machst du ein delete $modules{msgConfig}{defptr}.

über $modules{msgConfig}{defptr} bekommst du den device hash und kannst drauf zugreifen und auch verhindern das ein zweites definiert wird.

wenn es mehrere msgConfig devices geben darf brauchst du eine hash ebene mehr und verwendest z.b. $modules{msgConfig}{defptr}{<id>}.

den mechanismus verwenden fast alle zweistufigen module um beim parsen schnell an das client modul zu kommen das für eine nachricht zuständig ist ohne alle $defs durchzugehen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Loredo

Danke, André! Ich muss mir das mal genauer ansehen, Ad-Hoc verstehe ich es nicht.


-----





Derweil habe ich nochmals ein Update hochgeladen.


Bis das Problem gelöst wurde, dass bei Benennung 98_msg.pm der Befehl nicht erkannt wird, muss man die Datei selbst in 99_msg.pm umbenennen.

Folgende Änderungen:

1. Schema Datenbank jetzt als eigene Datei msgSchema.pm zwecks besserer Wartbarkeit

2. Für Gateway-Module, die mehrere Empfänger adressieren und somit oft explizit einen zusätzlichen Empfänger verlangen, kann man in den msgContact* Attributen den Empfänger jetzt mit einem Doppelpunkt getrennt vom Device-Namen angeben (in der Form, wie es das jeweilige Modul dann erfordert). Das sind dann z.B. Module wie yowsup oder TelegramBot, aber auch Pushover, wenn man dort nur an ein spezifisches Gerät benachrichtigen möchte.

Beispiel:


attr rr_Julian msgContactPush Telegram:@@USERNAME,PushoverJulian:iPhone|Pushalot:Julian


Wie man sieht bleibt die Möglichkeit der und/oder Verknüpfungen trotzdem erhalten.
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