Finden des DeviceNamens? Oder: Wer bin ich??

Begonnen von Tobias, 19 Juli 2016, 11:15:22

Vorheriges Thema - Nächstes Thema

justme1968

das kommt auf die deklaration an. man kann auch funktionieren mit optionalen parametern deklarieren und diese dann angeben oder auch nicht.

die xxxFn haben aber alle samt keinen prototypen und werden auch alle ohne strict aufgerufen. d.h. man kann beliebig viele zusätzliche parameter hinten an hängen. es liegt dann am aufgerufen diese zusätzlichen parameter auch auswerten.

das ganze ist ohne probleme rückwärts kompatibel so lange man nicht an der reihenfolge dreht.


aber: warum ein modul das die einheiten abschneiden will wissen muss aus welcher instanz das reading kommt erschliesst sich mir auch nicht.

übrigens:
module sollten si einheiten verwenden und diese nicht zusätzlich in die readings schreiben.

falls das modul pro instanz andere einheiten verwendet entspricht das nicht den fhem richtlinien, falls das modul nicht-si einheiten verwendet auch nicht. beides macht prinzipiell mit anderen frontends probleme und verhindert ein automatisches umrechnen.

für einen modul und frontend unabhängigen layer um die einheiten zu internationalisieren gibt es schon vorschläge.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Tobias

puuh, dachte nicht das es so kompliziert ist zu erklären...

Im VBUS-Device Modul werden gibt es pro Device eine Deklaration. zb:
"7e21" => {"name" => "DeltaSol_MX_Heizkreis", "cmd" => "0100", "fields" => [
{ "offset" =>  0,"name" => "Vorlauf_Soll_Temperatur","bitSize" => 15,"factor" => 0.1,"unit" => "°C" },
{ "offset" =>  2,"name" => "Betriebsstatus","bitSize" => 8},
]},
"7e31" => {"name" => "DeltaSol_MX_WMZ", "cmd" => "0100", "fields" => [
{ "offset" =>  0,"name" => "Waermemenge","bitSize" => 31,"factor" => 1,"unit" => "Wh" },
{ "offset" =>  8,"name" => "Waermemenge_heute","bitSize" => 31,"factor" => 1,"unit" => "Wh" },
{ "offset" =>  12,"name" => "Waermemenge_Woche","bitSize" => 31,"factor" => 1,"unit" => "Wh" },
]},


Das Device wird so angelegt:
define Dev1 VBUSDEV 7e21
Damit sind in diesem Device alle Definitionen  für 7e21 gültig.

In der VBUSDEV implementierten VBUSDEV_DbLogSplitFn wird nur das event übergeben. Ich weiß in der VBUSDEV_DbLogSplitFn nicht, welche Readings und Units in DIESEM (zb. 7e21) gültig und gesetzt sind.
Plan war, die Definitionen per match mit dem event abzugleichen, die passende Definition zum event zu ermittelt und die korrekte Einheit daraus zu setzen.
Aktuell mache ich es mit "suche letztes Leerzeichen, dahinter ist die Einheit". "Wenn kein Leerzeichen, dann Einheitslos"
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Tobias

Zitatdie xxxFn haben aber alle samt keinen prototypen und werden auch alle ohne strict aufgerufen. d.h. man kann beliebig viele zusätzliche parameter hinten an hängen. es liegt dann am aufgerufen diese zusätzlichen parameter auch auswerten.

das ganze ist ohne probleme rückwärts kompatibel so lange man nicht an der reihenfolge dreht.

Das war der entscheidene Hinweis, Danke an Andre. Damit funktioniert auch alles bei mir getestete noch...

Habe die MiniAnpassung in Revision 11823 commited
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter