FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: CoolTux am 18 August 2018, 13:26:00

Titel: Readings schreiben in modulfremde Devices
Beitrag von: CoolTux am 18 August 2018, 13:26:00
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
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag 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.
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag 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
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag von: CoolTux am 18 August 2018, 15:11:58
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.
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag von: CoolTux am 18 August 2018, 15:13:19
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
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag von: Markus M. am 18 August 2018, 15:24:37
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.
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag von: Benni am 18 August 2018, 16:29:04
Das rain-Modul macht sowas m.E. ja auch schon.
gb#
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag von: betateilchen am 18 August 2018, 18:05:02
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.
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag von: hexenmeister am 18 August 2018, 18:14:59
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.
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag von: CoolTux am 18 August 2018, 18:46:52
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.
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag 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.
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag von: CoolTux am 18 August 2018, 18:55:26
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.
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag von: betateilchen am 18 August 2018, 19:05:11
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().
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag von: hexenmeister am 18 August 2018, 19:23:56
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.
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag von: betateilchen am 18 August 2018, 19:26:44
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.
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag von: hexenmeister am 18 August 2018, 19:28:46
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.
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag von: CoolTux am 18 August 2018, 19:32:42
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!
Titel: Antw:Readings schreiben in modulfremde Devices
Beitrag von: rudolfkoenig am 18 August 2018, 20:22:46
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.