set Einträge pro definition individuell

Begonnen von Sidey, 19 August 2018, 00:55:12

Vorheriges Thema - Nächstes Thema

Sidey

Hallo,

ich komme aktuell einfach nicht drauf, wie ich die Set Befehle in einer Definition individuell gestalten könnte.
Wenn ich $sets{key} = value setze, dann gilt das für alle Definitionen dieses Moduls.

Grüße Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

CoolTux

Du meinst pro Device oder Instanz?
Was bedeutet individuell? Worin besteht die Abhängigkeit zu der Individuellität?
Vielleicht vom Attribut model? Dann einfach pro model eine Liste erstellen oder wenn es Befehle für alle Modelle gibt die auflisten und dann die Befehle pro model hinzufügen.
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

Sidey

Moin cooltux,

Ich bin nicht sicher, was Du mit Instanz meinst.

Die Variable %sets ist im Modul global definiert.
Wenn ich den Inhalt ändere, dann wirkt sich das auf alle definieren Instanzen des Moduls aus.

Was ich da machen will ist, dass ich ein Auswahlfeld anbieten möchte, in dem die verfügbaren Firmware Versionen gelistet sind, welche in einem GitHubRepository abgebildet sind.

Dazu rufe ich die Daten via http ab und verwerten die json Rückgabe.
Die Versionen wollte ich im Gerät in einem Dropdown darstellen. Allerdings gibt es verschiedene Modelle die es zu berücksichtigen gibt .

Grüße Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

rudolfkoenig

%sets (muss aber nicht so heissen) kann beliebig gefiltert oder zusamengesetzt werden, SetFn weiss ja, fuer welche Instanz "set X ?" aufgerufen wurde.

Ein aufwendiges Beispiel ist in ZWave implementiert: die set Befehle werden anhand des classes Attributs zusammengestellt: da steht es drin, welche Befehlsklassen das Geraet implementiert, und jede Klasse verfuegt ueber mehrere Befehle. Weiterhin gibt es je nach vom Geraet implementierte Version einer Klasse unterschiedliche Befehle, dies wird auch beruecksichtigt.

Eine einsteigerfreundlichere Variante gibt es im dummy mit seinem setList Attribut.

Dr. Boris Neubert

Hallo Sidey,

ich verstehe noch nicht so recht, was das Problem ist.

Du kannst doch die Liste der Befehle in der SetFn (DeinModul_Set) des Moduls abhängig vom Modell auswerfen lassen. Wenn das Modell bei der Definition des Geräts mitgegeben wird, kannst Du in der DefFn (DeinModul_Define) die für das individuelle Gerät relevante Liste von GitHub ziehen und im Geräte-Hash speichern, z.B. $hash->{".fhem"}{firmwareList}= @firmwareList.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

CoolTux

Zitat von: Dr. Boris Neubert am 19 August 2018, 09:39:19
Hallo Sidey,

ich verstehe noch nicht so recht, was das Problem ist.

Du kannst doch die Liste der Befehle in der SetFn (DeinModul_Set) des Moduls abhängig vom Modell auswerfen lassen. Wenn das Modell bei der Definition des Geräts mitgegeben wird, kannst Du in der DefFn (DeinModul_Define) die für das individuelle Gerät relevante Liste von GitHub ziehen und im Geräte-Hash speichern, z.B. $hash->{".fhem"}{firmwareList}= @firmwareList.

Viele Grüße
Boris

Genau so meine ich es.
Man kann einfach ein Hash erstellen.

%SetsModel( 'model1' => 'setbefehk1,setbefehl2,...',
    'model2' => 'setbefehl1,setbefehl2,...'
)
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

Thorsten Pferdekaemper

Hi,
ich glaube, dass ich das Problem verstehe, aber die Lösungen nicht so ganz.
Eigentlich ist es doch ganz normal, dass die möglichen "set"s sowie deren Parameter mehr oder weniger individuell vom Device abhängen. ...zumindest ist das bei HM und bei HMW so.
Die Erklärung steht im Prinzip hier:
https://wiki.fhem.de/wiki/DevelopmentModuleIntro#X_Set
Zitat
Wenn eine unbekannte Option an die Set-Funktion übergeben wird, so muss als Rückgabewert der Funktion eine bestimmte Syntax eingehalten werden um FHEM mitzuteilen, welche Optionen für einen Set-Befehl aktuell unterstützt werden. Die Rückgabe muss dabei folgender Syntax entsprechen:

unknown argument [Parameter] choose one of [Liste möglicher Optionen]
(usw.)
Da die Set-Funktion den Hash (und den Namen) des Geräts liefert, ist das sowieso pro Instanz. Anders gesagt: Man kann das alles verwenden, um herauszufinden, welche set-Optionen möglich sind.
Etwas weiter unten im Text steht dann auch, wie man verschiedene mögliche Werte mitgibt:
Zitat
Beispiel:

   return "Unknown argument $cmd, choose one of status:up,down power:on,off on:noArg off:noArg";


Mit Kommata getrennte Werte ergeben eine Drop-Down Liste, mit der der User die Werte auswählen kann
timer:30,120,300
mode:verbose,ultra,relaxed
Wie schon gesagt ist das sowieso individuell pro Device. Wenn man das pro Modul speichert, dann ist man sozusagen selbst schuld...
Gruß,
   Thorsten
FUIP

Sidey

Danke für die konstruktiven Hinweise.

Ich habe die FHEM Magie unterschätzt. :)

Der folgende Satz erklärt es:

Das Modul FHEMWEB ermittelt die Syntax eines Gerätes jedoch immer mit dem Befehl:

set <NAME> ?


Das war mir einfach nicht bewusst, dass die unknown.... use one of Meldung von fhemweb ausgewertet wird.

Damit ist auch erklärt, dass ich die Set Befehle pro Definition setze und nicht global.
Mich hatte nur die Variable %sets glauben lassen, dass FHEM diese Variable zentral auswertet.

Ich werde das heute Abend testen. :)

Grüße Sidey

Gesendet von meinem XT1650 mit Tapatalk

Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

Dr. Boris Neubert

Zitat von: Sidey am 19 August 2018, 13:10:58
Das war mir einfach nicht bewusst, dass die unknown.... use one of Meldung von fhemweb ausgewertet wird.

Ich glaube, dass das mal ein ganz übler Hack im FHEMWEB war, der sich mittlerweile eingebürgert hat und nicht mehr wegzubekommen ist. Eine eigene Funktion, die die Set- und Get-Befehle ausliefert, wäre sauberer.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

Zitat von: Dr. Boris Neubert am 19 August 2018, 13:24:48
Ich glaube, dass das mal ein ganz übler Hack im FHEMWEB war

Ja, und mancher Bumerang ist, wie man sieht, ganz schön lange unterwegs...

Eine "logische" Implementierung zum Finden von set und get Listen fände ich auch sehr wünschenswert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!