Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Item Funktionen in der plugin.yaml? #645

Closed
onkelandy opened this issue Apr 18, 2024 · 14 comments
Closed

Item Funktionen in der plugin.yaml? #645

onkelandy opened this issue Apr 18, 2024 · 14 comments

Comments

@onkelandy
Copy link
Member

Beispielsweise das Datenbank Plugin ermöglicht es, mit item.db() konkrete DB-Abfragen zu einem Item zu machen. Im WebIF ist das unter "Plugin API" beschrieben: https://github.com/smarthomeNG/plugins/blob/master/database/user_doc.rst
Wollen wir dafür eine Sektion in der plugin.yaml als "item_functions" vorsehen? Dann hätte man da eine saubere Doku zu den versch. Funktionen..

Beim UZSU Plugin hab ich solche Funktionen fälschlicherweise als plugin_functions deklariert, ohne mir dessen bewusst zu sein ;)

@msinn
Copy link
Member

msinn commented Apr 18, 2024

Wenn Du mal einen Blick in die Plugin.yaml des database Plugin wirfst, wirrst Du sehen, dass dort die Funktionen bereits in der Sektion plugin_functions dokumentiert sind.

Diese Doku wird in die Doku des Plugins übernommen und erscheint auf der Seite der Konfigurations-Doku.

https://docs.smarthomeng.de/plugins_doc/config/database.html

@onkelandy
Copy link
Member Author

onkelandy commented Apr 18, 2024

Es gibt neben den Plugin Funktionen wie sh.pluginname.db() aber eben auch noch item.db() und andere Funktionen die auf Itembasis sind.

@msinn
Copy link
Member

msinn commented Apr 19, 2024

Im database Plugin sind die Funktionen .db und .series herausgeführt. Dabei handelt es sich um die Herausführung einer Plugin Funktion mit einem vorbelegtem Parameter:

    item.series = functools.partial(self._series, item=item.property.path)  # Zur Nutzung im Websocket Plugin
    item.db = functools.partial(self._single, item=item.property.path)      # Zur Nutzung ueber Funktionen in Logiken

Solche Funktionen könnte man auch als Plugin Funktionen herausführen. Kennst Du denn noch andere Plugins, die Funktionen an das Item Objekt hängen? Dieser im database Plugin genutzt Mechanismus ist ja in SmartHomeNG für die Plugin Erstellung nicht dokumentiert und meiner Meinung nach der zentralen Funktion des System Plugins (database Plugin) geschuldet.

@onkelandy
Copy link
Member Author

Ursprung des Issues war das UZSU Plugin. Dort habe ich Item Funktionen eingeführt und diese fälschlicherweise als Pluginfunktion deklariert ;)

@msinn
Copy link
Member

msinn commented Apr 21, 2024

Item Funktionen können wir (als Core Entwickler) in Sonderfällen bei System-Plugins einsetzen. Die Item Funktionen im database Plugin stammen allerdings bereits aus smarthome.py vor Version 1.0.

Das Problem mit Item Funktionen ist, dass sie Core Methoden oder Datenstrukturen überschreiben können und bei der Weiterentwicklung des Cores dann immer geprüft werden muss, ob Plugins Item Funktionen implementiert haben, die mit dem Core in Konflikt stehen (werden).

Kurz gesagt: Ich halte item Funktionen für keine gute Idee.

@bmxp
Copy link
Member

bmxp commented Apr 21, 2024

@msinn Wie würdest Du denn sowas wie im database Plugin alternativ lösen wollen?

@msinn
Copy link
Member

msinn commented Apr 21, 2024

Ich würde es für das database Plugin nicht anders lösen wollen, da diese Lösung schon seit vor smarthome.py 1.0 existiert und das einen breaking Change darstellen würde. Wir haben das Plugin ja im Fokus und unter Kontrolle. Ich hatte auch geschrieben Item Funktionen können wir (als Core Entwickler) in Sonderfällen bei System-Plugins einsetzen.

Ich möchte die Büchse der Pandorra jedoch nicht für alle Plugins öffnen.

Der Einsatz im database Plugin ist ja nur ein verkürzter Aufruf einer normalen Plugin Funktion. Dadurch, dass die Methode an das item gehängt wird, braucht der letzte Parameter (der Item Pfad) nicht in der Plugin Funktion angegeben zu werden.

@onkelandy
Copy link
Member Author

Heißt, beim UZSU Plugin sollte ich das auf die gleiche Weise lösen.. es gibt die Funktionen auf Plugin-Ebene (funzt momentan halt noch nicht wirklich glaub ich.. ;)), wo zB der Itempfad beim Funktionsaufruf mitgegeben wird, zusätzlich funktioniert der Aufruf aber auch mit item.Funktion() ..? Sonst wäre es dort halt auch ein Breaking Change. Sind dort leider eine Menge Funktionen.

Und generell denke ich auch, dass Funktionen für Items kritisch sind, da es durchaus Probleme geben kann, wie wir ja von id() und path() etc. kennen ;)

@bmxp
Copy link
Member

bmxp commented Apr 22, 2024

Wenn Du mal am UZSU PLugin schraubst: Siehst Du eine Möglichkeit dort so Sachen wie Urlaub, Ferien etc. mit unterzubringen? Der Tagesablauf bei meinen Kindern richtet sich durchaus danach ob gerade Feiertage oder Ferien sind. Derzeit habe ich ja nur die Wochentage als Kriterium. Oder soll ich da mal ein Issue aufmachen?

@onkelandy
Copy link
Member Author

Gibbet schon seit Jahren ein Issue ;(
Wäre das einfach ein Flag "holiday"? In Kombination mit der internen holidays Funktion?

@bmxp
Copy link
Member

bmxp commented Apr 22, 2024

Ich fürchte es ist wohl komplexer als das....

@onkelandy
Copy link
Member Author

onkelandy commented Apr 22, 2024

Gerne Gedanken und Ideen zum Holiday UZSU Feature hier rein: smarthomeNG/plugins#628

@Morg42
Copy link
Member

Morg42 commented Jun 28, 2024

Heißt, beim UZSU Plugin sollte ich das auf die gleiche Weise lösen..

Wenn die Funktionen als Plugin-Funtionen getestet sind und mit Abfangen von Fehlern funktionieren - probier es.

Und generell denke ich auch, dass Funktionen für Items kritisch sind, da es durchaus Probleme geben kann, wie wir ja von id() und path() etc. kennen ;)

Genau. Darum wäre ich da auch bei Martin, dass das (Item-Funktionen) nicht als offizielles Feature angeboten wird. Es gibt dann doch zu viele Möglichkeiten, per Nebeneffekt etwas kaputt zu machen.

@onkelandy
Copy link
Member Author

Passt für mich so

@onkelandy onkelandy closed this as not planned Won't fix, can't repro, duplicate, stale Jun 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants