Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

FUEL4EP
Beiträge: 140
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 23 Mal
Danksagung erhalten: 13 Mal

Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von FUEL4EP » 13.11.2020, 14:42

Hallo Zusammen,

wie kann ich einen Parameter des Typs Float mit hoher Genauigkeit (z.B. 6 Nachkommastellen) in der rftypes XML Datei des Sensors definieren und dann in einem Sketch in der DEFREGISTER Sektion auslesen?

Konkret will ich Parameter einer linearen Regression im Webui unter

Startseite > Einstellungen > Geräte > Geräte-/ Kanalparameter einstellen

konfigurierbar machen:

Code: Alles auswählen

#define MLR_ALPHA       72.584693               //multiple linear regression coefficient alpha (temperature)
Vielen Dank im Voraus!
Grüße

Ewald

jp112sdl
Beiträge: 6762
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 341 Mal
Danksagung erhalten: 696 Mal
Kontaktdaten:

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von jp112sdl » 13.11.2020, 16:05

XML:

Code: Alles auswählen

       <parameter id="MLR_ALPHA">
         <logical type="float" min="0" max="4294.967295" />              
           <physical type="integer" interface="config" list="1" index="1.0" size="4" />
           <conversion type="float_integer_scale" factor="1000000.0" />
         </parameter>  
Und im Sketch nimmst du einen uint32_t-Wert,

Code: Alles auswählen

    unt32_t MLR_ALPHA () const {
      return
          ((uint32_t)(this->readRegister(0x01, 0)) << 24) +
          ((uint32_t)(this->readRegister(0x02, 0)) << 16) +
          ((uint32_t)(this->readRegister(0x03, 0)) << 8) +
          ((uint32_t)(this->readRegister(0x04, 0)))
          ;
    }
    
    
    bool MLR_ALPHA (uint32_t value) const {
      return
        this->writeRegister(0x01, (value >> 24) & 0xff) &&
        this->writeRegister(0x02, (value >> 16) & 0xff) &&
        this->writeRegister(0x03, (value >> 8) & 0xff) &&
        this->writeRegister(0x04, (value) & 0xff)
        ;
    }

    
den du dann an der Stelle, wo du ihn unbedingt mit Dezimalstellen brauchst, wieder durch 1000000 dividierst

Code: Alles auswählen

float mlrAlpha = getListX().MLR_ALPHA () / 1000000.0;


:!: Ein Problem wird evtl. noch sein, dass der Dezimalwert in den Geräteeinstellungen auf 1 Stelle abgeschnitten wird.
Dann müsstest du dir noch unter /www/config/easymodes eine eigene Konfigurationsseite bauen.
Siehe z.B. hier https://github.com/jp112sdl/JP-HB-Devic ... master.tcl

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

PN sind deaktiviert!

FUEL4EP
Beiträge: 140
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 23 Mal
Danksagung erhalten: 13 Mal

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von FUEL4EP » 13.11.2020, 16:23

Hi Jérôme,

vielen Dank für Deine schnelle und präzise Antwort.

Die XML und C++ Teile verstehe ich.

Easymodes TCL sind mir neu und da werde ich mich durchbeißen müssen. Ich sah diese schon in Deinem Addon. Wenn der Easymodes-'Granit' zu hart wird, werde ich nochmals nachfragen.
Grüße

Ewald

FUEL4EP
Beiträge: 140
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 23 Mal
Danksagung erhalten: 13 Mal

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von FUEL4EP » 13.11.2020, 16:49

Hi Jérôme,

ich hab doch noch eine sofortige Frage vor dem Codieren:

Die Regressionsparameter können positiv oder negativ sein:

Code: Alles auswählen

 
 <parameter id="MLR_ALPHA">
     <logical type="float" min="-2147.483648" max="2147.483648" />              
         <physical type="integer" interface="config" list="1" index="1.0" size="4" />
     <conversion type="float_integer_scale" factor="1000000.0" />
</parameter>
Wahrscheinlich muss ich auf weniger als 6 Nachkommastellen gehen müssen, um einen genügend großen Wertebereich zu bekommen.
Wird ein int64_t auch unterstützt?

Wie ist der C++ Code im Sketch dazu?

Vielen Dank im Voraus!
Grüße

Ewald

jp112sdl
Beiträge: 6762
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 341 Mal
Danksagung erhalten: 696 Mal
Kontaktdaten:

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von jp112sdl » 13.11.2020, 16:55

FUEL4EP hat geschrieben:
13.11.2020, 16:49
Wird ein int64_t auch unterstützt?
Nein, int32_t soweit ich weiß.

Musst im Sketch dann aus dem uint32_t ein int32_t machen.
Und in der xml

Code: Alles auswählen

<physical type="integer" signed="true" interface="config" list="1" index="1.0" size="4"/>

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

PN sind deaktiviert!

FUEL4EP
Beiträge: 140
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 23 Mal
Danksagung erhalten: 13 Mal

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von FUEL4EP » 13.11.2020, 17:04

Hi Jérôme,

danke. Das hilft.

Ein andere Option wäre es, einen Fließkommaparameter in der WebUI-Parametereingabe als normalisierte Mantisse (1. Parameter) und Exponenten (2. Parameter) einzugeben. Das Zusammenbauen und Zerlegen der Fließkommazahl wird dann im C++ Code gemacht. Damit lässt sich ein großer Wertebereich bei gleichzeitig großer Genauigkeit erreichen. Ein wenig umständlich, sollte aber mit Integer-'Bordmitteln' in der rftypes XML funktionieren.

Was hältst Du davon?
Grüße

Ewald

jp112sdl
Beiträge: 6762
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 341 Mal
Danksagung erhalten: 696 Mal
Kontaktdaten:

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von jp112sdl » 13.11.2020, 17:51

FUEL4EP hat geschrieben:
13.11.2020, 17:04
Was hältst Du davon?
Ich war nie gut in Mathe ^^

Wenn du weißt, wie es geht und dir die Präzision ausreicht, dann los...

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

PN sind deaktiviert!

TomMajor
Beiträge: 1196
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 87 Mal
Danksagung erhalten: 226 Mal
Kontaktdaten:

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von TomMajor » 13.11.2020, 23:53

statt Mantisse und Exp. könnte man auch Vorkomma- und Nachkomma-Zahl in 2 Felder in der WebUI eingeben, das macht die Eingabe vlt. etwas übersichtlicher. Und dann die zwei 32bit Werte im Sketch zu einem float zusammenrechnen.
Viele Grüße,
Tom

jp112sdl
Beiträge: 6762
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 341 Mal
Danksagung erhalten: 696 Mal
Kontaktdaten:

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von jp112sdl » 14.11.2020, 06:59

TomMajor hat geschrieben:
13.11.2020, 23:53
könnte man auch Vorkomma- und Nachkomma-Zahl in 2 Felder in der WebUI eingeben,
Über eine selbst gestrickte Konfigurations-Ansicht könnte man die beiden Felder sogar nebeneinander legen, mit dem Punkt-Zeichen dazwischen.
Dann sieht es auch optisch schick aus.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

PN sind deaktiviert!

FUEL4EP
Beiträge: 140
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 23 Mal
Danksagung erhalten: 13 Mal

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von FUEL4EP » 14.11.2020, 11:09

Hi Tom und Jérôme,

es ist ja toll, wie kreativ hier Lösungsideen entwickelt werden! Vielen Dank!

Inspiriert durch Eure Ideen, hier noch eine weitere Idee:

Eingabe der Fließkommazahl als String, siehe z.B. 'rf_dis_ep_wm55.xml':

Code: Alles auswählen

 
 <parameter id="TEXTLINE_1">
      <logical type="string" />
       <physical type="string" interface="config_string" list="1" index="54" size="12" />
 </parameter>
Dann im C++ Code den String mit der atof() Funktion in eine Fließkommazahl umwandeln.
Umgekehrt mittel sprintf eine Fließkommazahl in einen String umwandeln, z.B. https://stackoverflow.com/questions/413 ... tring-in-c

Frage: Kann eine Fehlermeldung von atof() wegen einer falschen Notation (z.B. 23.56F-01 statt 23.56E-01) einer Fließkommazahl an das WebUI zurückgegeben werden bzw. die Eingabe dann abgelehnt werden?
Grüße

Ewald

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“