Hauptmenü

Dynamische Attribute?

Begonnen von Manul, 09 Juli 2017, 14:41:44

Vorheriges Thema - Nächstes Thema

Manul

Kann ich den Wert eines Attributes bei jeder Abfrage (aus z.B. anderen Attributwerten) berechnen lassen?

dev0

Attribute gehören dem Anwender und sollten nicht eigenmächtig von einem Modul geändert werden.

CoolTux

Ich dachte Manul ist Anwender? Er hat zu mindest nichts von einem eigenen Modul erwähnt bei seiner Anfrage.
Sollte es sich um ein Modul handeln gebe ich dev0 Recht.

Solltest Du es warum auch immer aus einem Notify heraus oder ähnlichem machen, kann ich nur sagen. Attribute sollten nach Möglichkeit nicht dynamisch sondern fest sein.
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

Manul

Es geht nicht um ein Modul. Anwendungsfall ist der hier beschriebene. Dafür möchte ich aus den keys des Attributs 'powerlevels' das Attribut 'widgetOverride' mit dem Wert 'powerlevel:<key1>,<key2>..." erzeugen. Ich fände es schöner, wenn ich eine Änderung nur an einer Stelle einpflegen müsste und sie an die zweite, an der sie gebraucht wird, automatisch übertragen wird.

igami

Ich habe noch nicht ganz verstanden was passieren soll.
Kannst du bitte einmal ein Beispiel konkretisiert hierher schreiben? Inetwa ich habe mein device Roomba. Das hat das Attribut powerlevels ... im widgetOverride soll nun stehen ...
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Manul

Zitat von: igami am 09 Juli 2017, 21:02:22
Kannst du bitte einmal ein Beispiel konkretisiert hierher schreiben?

Gerne: Der Staubsauger ("Robi") speichert intern die Saugstärke als Integerwert von 1 bis 100. Diesen Wert kann man über das entsprechende FHEM-Modul auch setzen (set Robi fan_power <int>). In der App des Herstellers wählt man nicht einen numerischen Wert, sondern eine von derzeit vier benannten Stufen. Das möchte ich in FHEM gerne abbilden, zunächst mit den gleichen Stufen wie in der App, ich könnte mir aber auch vorstellen, daß ich nach etwas mehr Erfahrung mit dem Roboter meine eigenen Stufen definieren möchte.

Bis jetzt habe ich folgendes:

- Ein cmdAlias "set Robi powerlevel <String>", mit dem man eine der Stufen auswählen kann. Das setzt dann die entsprechende fan_power
- Ein userReading "powerlevel", das auf den entsprechenden String gesetzt wird, wenn der Wert von fan_power einer der Stufen entspricht, anderenfalls auf "Custom"
- Ein userattr "powerlevels", das die Stufen definiert. Das hat aktuell den Wert "Quiet:38 Balanced:60 Turbo:77 MAX:90"

Jetzt brauche ich ein widgetOverride "powerlevel:Quiet,Balanced,Turbo,MAX". Das stellt natürlich kein Problem dar. Was ich aber gerne hätte, ist, daß, wenn ich die "powerlevels" ändere, bspw. auf "Parkett:50 Teppich:80", das widgetOverride automatisch angepasst wird, so daß ich die neuen Namen der Stufen nicht doppelt eingeben muß.

Ich dachte, das könnte in der Form


powerlevel:{ join(',',keys %dictdasdielevelsenthaelt; }


oder so ähnlich gehen. Das funktioniert so nicht, daher meine Frage, ob es vielleicht eine andere Möglichkeit gibt, den gewünschten Effekt zu erreichen.

Ist das so verständlich?

igami

Warum nicht einfach ein EventMap, das aus quiet fan_power 38 macht?
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Manul

In erster Linie, weil mir eventMap bisher noch nicht begegnet war. So lange benutze ich FHEM noch nicht.

Ich habe mal in die Dokumentation geschaut, das müsste eigentlich gehen. Allerdings wären dann die Level-Einträge nicht ganz so schön lesbar wie in einem eigenen Attribut.

Ich habe derzeit noch eine andere Idee, wenn ich mit der nicht weiterkomme, versuche ich's mit eventMap.