Rückgabewerte X_Get / X_Set

Begonnen von Sidey, 15 November 2019, 23:18:41

Vorheriges Thema - Nächstes Thema

Sidey

Hallo,

meine Frage dreht sich um den Rückgabewert der

X_Get bzw. X_Set Funktion.

https://wiki.fhem.de/wiki/DevelopmentModuleIntro#X_Get

Wenn eine unbekannte Option an die Get-Funktion übergeben wird, so muss als Rückgabewert der Funktion eine bestimmte Syntax einhalten um FHEM mitzuteilen, welche Optionen für einen Get-Befehl aktuell unterstützt werden. Die Rückgabe muss dabei folgender Syntax entsprechen:

unknown argument [Parameter] choose one of [Liste möglicher Optionen]
....
Die Ausgabe einer solchen Meldung ist sehr wichtig, da sie im GUI-Modul verwendet wird um die möglichen get-Optionen zu ermitteln und als Auswahl anzubieten.



https://wiki.fhem.de/wiki/DevelopmentModuleIntro#X_Set


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]
...
Das GUI-Modul FHEMWEB kann für die einzelnen Set-Optionen, die das Modul versteht, automatisch Eingabehilfen wie Drop-Down Boxen oder Slider erzeugen. In der Detailansicht der GUI kann der Anwender dann die jeweiligen Werte komfortabel auswählen. Dafür muss die Set-Funktion, wenn sie mit der Option ? aufgerufen wird, nicht nur einen Text mit "Unknown ... choose one of ..." zurückgeben sondern den einzelnen Set-Optionen in diesem Rückgabetext nach einem Doppelpunkt entsprechende Zusatzinformationen anhängen.




Meine Frage / Feststellung bezieht sich auf die Formulierung, dass bei jedem unbekannten Befehl eine bestimmte Syntax einzuhalten ist.
Ist es nicht so, dass die Syntax ausschließlich für FHEMWEB wichtig ist, welches die Optionen mit ? abruft? Für die Anderen unbekannten Aufrufe könnte ja eine abweichende Syntax ausgegeben werden oder?


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

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

Byte09

#1
Zitat von: Sidey am 15 November 2019, 23:18:41
Hallo,

......  Für die Anderen unbekannten Aufrufe könnte ja eine abweichende Syntax ausgegeben werden oder?


... womit sie dann ja nicht mehr unbekannt wären sondern eher nur unzugeordnet, irgendwie ;-)

mache ich auch so und verursacht scheinbar keine Probleme, d.H ich gebe unter bestimmten Bedingungen auch nur explizit auf "?" diese Syntax in meinen Modulen zurück.

gruss Byte09

nachtrag:
ZitatIst es nicht so, dass die Syntax ausschließlich für FHEMWEB wichtig ist, welches die Optionen mit
ob man es so stehenlassen kann weiss ich ja nicht wirklich , ich frage aus meinem Modul z.B auch alle Devices mit set device ? ab

rudolfkoenig

Zitatich frage aus meinem Modul z.B auch alle Devices mit set device ? ab.
Dafuer sollte man getAllSets($device, $client) verwenden, es gibt analog auch getAllGets und getAllAttr.

Aendert aber nichts an der Aussage, dass der Rueckgabewert von GetFn/SetFn einen bestimmten Syntax folgen muss, wenn der erste Parameter ungueltig ist.
In den anderen Faellen wird der Rueckgabewert nicht weiter analysiert, sondern nur angezeigt.

Sidey

#3
Zitat von: rudolfkoenig am 16 November 2019, 09:16:20
Aendert aber nichts an der Aussage, dass der Rueckgabewert von GetFn/SetFn einen bestimmten Syntax folgen muss, wenn der erste Parameter ungueltig ist.
In den anderen Faellen wird der Rueckgabewert nicht weiter analysiert, sondern nur angezeigt.

Ich habe da noch ein Verständnis Problem.

Wieso ist die Einhaltung der Syntax bei allen ungültigen Parametern wichtig. FHEM weiss doch vom Prinzip nicht, welche Parameter gültig sind und welche es nicht sind. Das wird doch vom Modul selbst festgelegt oder gibt es einen Unterschied zwischen gültigen Befehlen und implementierten?

Dass es bei dem Parameter "?" wichtig ist habe ich ja durchaus verstanden, da nur so FHEMWEB in der Lage ist die unterstützten Parameter herauszufinden.

Warum die Syntax bei allen anderen Parameter ebenfalls wichtig ist, würde ich gerne verstehen. Meine Idee war tatsächlich den Befehl "?" etwas anders zu behandeln als andere Parameter. :) Wenn das negative Auswirkungen hat, taugt das aber vermutlich nichts.


Grüße Sidey



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

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

rudolfkoenig

ZitatWieso ist die Einhaltung der Syntax bei allen ungültigen Parametern wichtig.
Strenggenomen ist dieser Syntax nur bei ? wichtig, mir faellt bloss kein Anwendungsbeispiel ein, bei dem man bei anderen _ungueltigen_ Parametern was Anderes anzeigen muss.

Markus Bloch

Habe ich im Wiki nochmal präzisiert.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Sidey

Hi,

Anpassungen im Wiki finde ich gut.
Allerdings hätte ich da einen weiteren Vorschlag die Formulierung ein wenig eindeutiger zu formulieren, dass es bei den anderen eher eine Empfehlung und keine Pflicht ist den Syntax zu verwenden.

Erst mal am Beispiel get:

Wenn eine die Option ? (get <NAME> ?) an die Get-Funktion übergeben wird, so muss als Rückgabewert der Funktion eine bestimmte Syntax eingehalten werden um FHEM (z.B. FHEMWEB) mitzuteilen, welche Optionen für einen Get-Befehl aktuell unterstützt werden. Die Rückgabe muss dabei folgender Syntax entsprechen:

unknown argument [Parameter] choose one of [Liste möglicher Optionen]

Hierbei sind die fett gedruckten Teile der Rückmeldung besonders wichtig <schnipp ... schnapp>

Alle anderen nicht im Modul verfügbaren Befehle können die gleiche oder eine andere Syntax verwenden müssen jedoch immer einen Rückgabewert liefern, welcher dem Anwender angezeigt wird

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

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

Markus Bloch

Hallo Sidey,

du kannst das im Wiki gerne anpassen. Ich hab den Artikel nicht für mich gepachtet ;-)

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)