Readings schreiben in modulfremde Devices

Begonnen von CoolTux, 18 August 2018, 13:26:00

Vorheriges Thema - Nächstes Thema

CoolTux

Hallo,

Ich habe noch so in meinem schwachen Gedächtnis das es mal hieß das ein Modul nicht in modulfremde Devices schreiben soll.
Nun entwickel ich gerade ein Modul welches selbst nur ein einziges Device anlegen kann und zur automatischen Steuerung einer Devicegruppe Verwendung findet. Pro modulfremdes Device kann man aber unterschiedliche Werte ein und des selben Attributes (welches von meinem Modul als userattr kommt) setzen. Es wäre also schon wichtig für den User zu wissen was mein Modul an des fremde Device weiter gegeben hat (Zeiten wann das Device eine Aktion durch mein Modul ausführt). Auch für mich wäre es einfacher als alle Devices plus Werte in meinem Modul verwalten zu müssen.
Die meisten Readings kann ich verstecken, einige sollten aber sichtbar bleiben für den User. Sie wären auch eindeutig identifizierbar für den User.

Meine Frage daher, wie steht ihr dazu? Wäre es akzeptabel, unter den oben genannten Voraussetzungen, das mein Modul Readings in modulfremde Devices schreibt?




Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

Meine Meinung: readings sollten immer von dem device angelegt werden dürfen, in dem sie auch dargestellt werden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Thorsten Pferdekaemper

Hi,
ich würde das nicht so eng sehen, zumindest wenn man seltsame Klimmzüge machen müsste, um es zu vermeiden. Natürlich sollte das ganz klar dokumentiert sein.
...und noch was: Was passiert, wenn man dieses Devicegruppensteuerungs-Device wieder löscht? Werden dann diese Readings auch gelöscht? Das sollte IMHO der Fall sein.
Gruß,
   Thorsten
FUIP

CoolTux

Zitat von: betateilchen am 18 August 2018, 14:52:32
Meine Meinung: readings sollten immer von dem device angelegt werden dürfen, in dem sie auch dargestellt werden.

Du weißt ich lege großen Wert auf Deine Meinung.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Zitat von: Thorsten Pferdekaemper am 18 August 2018, 14:59:57
Hi,
ich würde das nicht so eng sehen, zumindest wenn man seltsame Klimmzüge machen müsste, um es zu vermeiden. Natürlich sollte das ganz klar dokumentiert sein.
...und noch was: Was passiert, wenn man dieses Devicegruppensteuerungs-Device wieder löscht? Werden dann diese Readings auch gelöscht? Das sollte IMHO der Fall sein.
Gruß,
   Thorsten

Selbstverständlich werden beim entfernen des Devices sämtliche Readings welche von meinem Modul angelegt wurden entfernt. Das versteht sich von selbst  :D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Markus M.

Zitat von: CoolTux am 18 August 2018, 13:26:00Die meisten Readings kann ich verstecken, einige sollten aber sichtbar bleiben für den User. Sie wären auch eindeutig identifizierbar für den User.
Meine Frage daher, wie steht ihr dazu? Wäre es akzeptabel, unter den oben genannten Voraussetzungen, das mein Modul Readings in modulfremde Devices schreibt?

Wenn du sie so benennst dass sie niemandem in die Quere kommen, sehe ich besonders mit den sichtbaren kein Problem.
Das beste Beispiel wo das schon passiert ist wahrscheinlich das Statistics Modul.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

Benni

Das rain-Modul macht sowas m.E. ja auch schon.
gb#

betateilchen

Zitat von: Markus M. am 18 August 2018, 15:24:37
Das beste Beispiel wo das schon passiert ist wahrscheinlich das Statistics Modul.

Zitat von: Benni am 18 August 2018, 16:29:04
Das rain-Modul macht sowas m.E. ja auch schon.

dewpoint macht das auch. Alles richtig.

Aber das heißt noch lange nicht, dass ich das "richtig" oder gar "gut" finde. Und hier waren ja Meinungen gefragt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

hexenmeister

Schwer eindeutig zu sagen. Einerseits sind die Readings Eigentum des jeweiligen devices. Andererseits gibt es in manchen Fällen schon berechtigte Interessen, Readings "von Aussen" zu ergänzen oder zu verändern. Hier sollte man sich auf eine Vorgehensweise bzw. gar eine Schnittstelle zu einigen.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

CoolTux

Naja eine Schnittstelle muß es glaube nicht gleich sein. Einer Vorgehensweise stimme ich zu. Der Entwickler sollte sich ernsthaft Gedanken machen ob es tatsächlich Erforderlich ist in modulfremde Devices zu schreiben. Es kann ja auch im Sinne des Users sein. (dewpoint). Es sollte auch klar sein das diese Readings wenn dann eindeutig Erkennbar sein müßen und vom eigenen Modul gelöscht werden sollten wenn ein Device dieses eigenen Modules gelöscht werden wird.

Ich denke ich habe meine Antwort gefunden. Vielen Dank Euch.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Amenophis86

Möchte da noch etwas in die Tiefe gehen. Ich denke man sollte sich auf ein Standard für so einen Fall einigen. Soll heißen "fremde" Readings sollten alle mit einem Präfix oder ähnlichem anfange, dass man sofort erkennt, dass es ein fremdes ist und im besten Fall noch zuordnen kann, wo es her kommt. Spontan zum Beispiel folgende Syntax für das fremde Reading:

NameDesSetzendenModuls_NameDesReadings

Warum? Ein User, der wenig Ahnung hat und im Forum eine Frag zu diesem Reading stellt, kann schwer geholfen werden, wenn man zum Beispiel nicht weiß, dass das Reading von einem anderen Modul gesetzt wird. Durch eine definierte Syntax ist es jedoch direkt zu erkennen. Daher mein Vorschlag: Erst auf eine für alle gültige und verbindliche Syntax einigen und dann erst umsetzen.
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...

CoolTux

Zitat von: Amenophis86 am 18 August 2018, 18:53:58
Möchte da noch etwas in die Tiefe gehen. Ich denke man sollte sich auf ein Standard für so einen Fall einigen. Soll heißen "fremde" Readings sollten alle mit einem Präfix oder ähnlichem anfange, dass man sofort erkennt, dass es ein fremdes ist und im besten Fall noch zuordnen kann, wo es her kommt. Spontan zum Beispiel folgende Syntax für das fremde Reading:

NameDesSetzendenModuls_NameDesReadings

Warum? Ein User, der wenig Ahnung hat und im Forum eine Frag zu diesem Reading stellt, kann schwer geholfen werden, wenn man zum Beispiel nicht weiß, dass das Reading von einem anderen Modul gesetzt wird. Durch eine definierte Syntax ist es jedoch direkt zu erkennen. Daher mein Vorschlag: Erst auf eine für alle gültige und verbindliche Syntax einigen und dann erst umsetzen.
Das ist genau meine Syntax  ;D
Und der Readingsname beginnt mit Großem Buchstaben. Was ja eher auch selten ist.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

Zitat von: CoolTux am 18 August 2018, 15:13:19
Selbstverständlich werden beim entfernen des Devices sämtliche Readings welche von meinem Modul angelegt wurden entfernt. Das versteht sich von selbst

Das kannst Du doch überhaupt nicht sicherstellen. Wenn ein Anwender Dein komisches Device aus seiner fhem.cfg entfernt, hast Du überhaupt keine Chance, die readings aus den zwangsbefüllten devices zu entfernen.

Meiner Meinung nach sollte für solche Dinge ein komplett anderer (neuer) Mechanismus geschaffen werden. Quasi eine xxx_ExportFn() in Deinem Modul, und alle devices, die von Deinem Modul readings erhalten sollen, registrieren sich aktiv an dieser ExportFn().
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

hexenmeister

#13
Zitat von: betateilchen am 18 August 2018, 19:05:11
Meiner Meinung nach sollte für solche Dinge ein komplett anderer (neuer) Mechanismus geschaffen werden. Quasi eine xxx_ExportFn() in Deinem Modul, und alle devices, die von Deinem Modul readings erhalten sollen, registrieren sich aktiv an dieser ExportFn().

Ja, sowas in der Art hatte ich auch gemeint. Allerdings muss das ggf. auch ohne zutun von Fremdmodulen gehen. Von mir aus, können diese Bereitschaft signalisieren, fremde Readings aufzunehmen, den Ersteller zu kennen, wäre IMHO zu viel Kopplung.

Zitat von: Amenophis86 am 18 August 2018, 18:53:58
Soll heißen "fremde" Readings sollten alle mit einem Präfix oder ähnlichem anfange, dass man sofort erkennt, dass es ein fremdes ist und im besten Fall noch zuordnen kann, wo es her kommt. Spontan zum Beispiel folgende Syntax für das fremde Reading:

NameDesSetzendenModuls_NameDesReadings
Da wäre ich dagegen. So z.B. dewpoint-Modul - ich möchte hier klare Namen, wie bischer, keine künstlich aufgeblähte.
Weiteres Beispiel: mein MQTT_GENERIC_BRIDGE-Modul. Hier werden auch Readings in fremden Modulen erstellt, jedoch immer auf den Benutzerwusch und -definition. Es muss möglich sein, dass der Anwender den gewünschten Namen komplet bestimmen kann, ohne verwirrende Präfixe.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

betateilchen

Zitat von: hexenmeister am 18 August 2018, 19:23:56
jedoch immer auf den Benutzerwusch und -definition. Es muss möglich sein, dass der Anwender den gewünschten Namen komplet bestimmen kann, ohne verwirrende Präfixe.

Und es muss möglich sein, dass der Anwender im Einzalfall das Einbringen fremder readings in seine devicea auch komplett unterbinden kann.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

hexenmeister

Zitat von: betateilchen am 18 August 2018, 19:26:44
Und es muss möglich sein, dass der Anwender im Einzalfall das Einbringen fremder readings in seine devicea auch komplett unterbinden kann.
Stimme ich zu. Die Erstellung dieser Art Readings soll immer auf (möglichst) ausdrücklichen Anwenderwunsch geschehen.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

CoolTux

Zitat von: betateilchen am 18 August 2018, 19:26:44
Und es muss möglich sein, dass der Anwender im Einzalfall das Einbringen fremder readings in seine devicea auch komplett unterbinden kann.

Das finde ich Unsinn. Der Anwender kann doch selbst entscheiden ob er das Modul nutzen möchte und welche Fremddevices gesteuert werden sollen und somit Readings erhalten. Zu mindest bei mir ist das so.
Hier kann man entweder automatisch alle unterstützen Devices suchen lassen oder von Hand vorgeben.




Zitat von: betateilchen am 18 August 2018, 19:05:11
Das kannst Du doch überhaupt nicht sicherstellen. Wenn ein Anwender Dein komisches Device aus seiner fhem.cfg entfernt, hast Du überhaupt keine Chance, die readings aus den zwangsbefüllten devices zu entfernen.


Wenn ein Anwender von Hand die cfg editiert und dadurch Reste übrig bleiben sollte das nicht mein Problem sein. Dann kann der auch die Mist alleine Aufräumen. Meine Meinung!
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

Wenn das Modul vom Benutzer eingerichtet werden muss (sprich, es passiert nicht automatisch), und in der Doku klar beschrieben wird, welche Readings angelegt werden, dann sollte jedem klar sein, woher die neuen Readings kommen. Es sollte untersagt sein, dass fremde Module moduleigene Readings aendern, fuer solche Faelle reicht im Zweifel ein Praefix. Kein Regel ohne Ausnahme: readingsChange.

Entfernen kann man "Fremdreadings" in UndefFn, wenn jemand fhem.cfg direkt editiert, darf den Rest auch bereinigen, oder soll sich nicht beschweren.