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

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 » 17.11.2020, 13:21

FUEL4EP hat geschrieben:
17.11.2020, 13:16
Hat jemand ein AsksinPP Gerät am Laufen, bei dem das Setzen eines negativen Parameters in der Maske erhalten bleibt?
Sketch
https://github.com/jp112sdl/HB-UNI-Sen- ... S18B20.ino
XML
https://github.com/jp112sdl/JP-HB-Devic ... n-temp.xml

Kann es selbst grad nicht testen... aber bisher hat sich niemand beschwert, dass es nicht geht.

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 » 17.11.2020, 13:42

Hi Jérôme,

danke.

Deinen Sketch und Deine XML hatte ich schon analysiert und glaube, alles korrekt in meinem Code angepasst zu haben.
Vielleicht habe ich ja eine Kleinigkeit übersehen ?

Die RaspberryMatic Log Datei zeigt zum Übernahmezeitpunkt keine Warnungen oder Fehler.

Was kann ich sonst noch tun, mein Problem zu debuggen?
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 » 17.11.2020, 13:46

FUEL4EP hat geschrieben:
17.11.2020, 13:42
Was kann ich sonst noch tun, mein Problem zu debuggen?
Du könntest erstmal meinen Sketch flashen (und zugehörige XML bzw. Addon) nehmen, um zu validieren, ob mein Beispiel überhaupt funktioniert.

Auch habe ich 4 Byte vorgesehen, du nur 2 Byte. Das wäre schon mal ein Unterschied.

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 » 17.11.2020, 16:05

Hi Jérôme,

leider kann ich den HB-UNI-Sen-TEMP-DS18B20 Sketch nach dem Flashen nicht anlernen, wohl deshalb da ich keinen DS18B20 Sensor habe.

Kann mein Problem am MCU Typ liegen? Ich nutze einen atmega1284P.
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 » 17.11.2020, 16:15

FUEL4EP hat geschrieben:
17.11.2020, 16:05
Kann mein Problem am MCU Typ liegen? Ich nutze einen atmega1284P.
Kann... kann auch nicht... serielles Log ist für Analysen immer wichtig.
FUEL4EP hat geschrieben:
17.11.2020, 16:05
leider kann ich den HB-UNI-Sen-TEMP-DS18B20 Sketch nach dem Flashen nicht anlernen, wohl deshalb da ich keinen DS18B20 Sensor habe.
Das kann auch sein.

Oder du übernimmst den OFFSET-Teil aus Sketch und XML unverändert in dein Projekt.

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 » 17.11.2020, 16:58

Hi Jérôme,

es ist ein wenig verrückt: Mit size="4" funktioniert es !?????

Ich habe nur den ersten Parameter 'TemperatureOffset' auf 32Bit konvertiert:

Code: Alles auswählen

<channel index="1" type="WEATHER" autoregister="true">
      <link_roles>
        <source name="WEATHER_CS" />
      </link_roles>
      <paramset type="MASTER" id="HB-UNI-Sensor-AQ-BME680_master" >
        <parameter id="TemperatureOffset">
          <logical type="float" min="-5.0" max="5.0" default="0.0" unit="K" />
          <physical type="integer" signed="true" interface="config" list="1" index="1" size="4" />
          <conversion type="float_integer_scale" factor="10" />
        </parameter>
        <parameter id="HumidityOffset">
          <logical type="float" min="-5.0" max="5.0" default="0.0" unit="%" />
          <physical type="integer" signed="true" interface="config" list="1" index="5" size="1" />
          <conversion type="float_integer_scale" factor="1" />
        </parameter>
        <parameter id="PressureOffset">
          <logical type="float" min="-100.0" max="100.0" default="0.0" unit="hPa" />
          <physical type="integer" signed="true" interface="config" list="1" index="6" size="2" />
          <conversion type="float_integer_scale" factor="10" />
        </parameter>
        <parameter id="max_decay_factor_upper_limit">
          <logical  type="float" min="0.0" max="100.0" default="70.0" unit="%" />
          <physical type="integer" signed="true" interface="config" list="1" index="8" size="1" />
          <conversion type="float_integer_scale" factor="1" />
        </parameter>
        <parameter id="max_increase_factor_lower_limit">
          <logical type="float" min="0.0" max="100.0" default="30.0" unit="%" />
          <physical type="integer" signed="true" interface="config" list="1" index="9" size="1" />
          <conversion type="float_integer_scale" factor="1" />
        </parameter>
      </paramset>
C++ Code:

Code: Alles auswählen

DEFREGISTER(UReg1, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09)
class SensorList1 : public RegList1<UReg1> {
  public:
    SensorList1 (uint16_t addr) : RegList1<UReg1>(addr) {}

    bool tempOffset10 (int32_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)
          ;
    }

    int32_t tempOffset10 () const {
      return
          ((int32_t)(this->readRegister(0x01, 0)) << 24) +
          ((int32_t)(this->readRegister(0x02, 0)) << 16) +
          ((int32_t)(this->readRegister(0x03, 0)) << 8) +
          ((int32_t)(this->readRegister(0x04, 0)))
          ;
    }

    bool humidOffset (int8_t value) const {
      return this->writeRegister(0x05, value & 0xff);
    }
    int8_t humidOffset () const {
      return (int8_t)(this->readRegister(0x05, 0));
    }    

    bool pressOffset10 (int16_t value) const {
      return this->writeRegister(0x06, (value >> 8) & 0xff) && this->writeRegister(0x07, value & 0xff);
    }
    int16_t pressOffset10 () const {
      return (((int16_t)(this->readRegister(0x06, 0)) << 8) + (int16_t)(this->readRegister(0x07, 0)));
    }
    
    bool max_decay_factor_upper_limit (uint8_t value) const {
      return this->writeRegister(0x08, value & 0xff);
    }
    uint8_t max_decay_factor_upper_limit () const {
      return (uint8_t)(this->readRegister(0x08, 0));
    }

    bool max_increase_factor_lower_limit (uint8_t value) const {
      return this->writeRegister(0x09, value & 0xff);
    }
    uint8_t max_increase_factor_lower_limit () const {
      return (uint8_t)(this->readRegister(0x09, 0));
    }

    void defaults () {
      clear();
      tempOffset10(-16);  // temperature measurement offset, multiplied by 10 [K], calibrate your sensor's characteristics
      humidOffset(3);     // humidity measurement offset [%, calibrate your sensor's characteristics
      pressOffset10(-60); // pressure measurement offset, multiplied by 10 [hPa], calibrate your sensor's characteristics
      max_decay_factor_upper_limit(70);  //IIR's filter max decay value of gas resistor upper limit
      max_increase_factor_lower_limit(30);  //IIR's filter max increase value of gas resistor lower limit 
      DPRINTLN(F("Init of channel parameters done"));
    }
    
};


Hast Du oder jemand sonst eine Idee, woran es liegen könnte, dass 32 Bit gehen und 16 Bt / 8 Bit nicht korrekt gehen?

Nachtrag: Alle 5 Parameter sind nun auf 32 Bit umgestellt und funktionieren korrekt.
Dennoch sollten wir die Ursache des bisherigen Fehlverhaltens finden und korrigieren.
Grüße

Ewald

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 » 17.11.2020, 18:33

Ein float hat 32bit Datenbreite. Eventuell setzt "conversion type="float_integer_scale" voraus dass der zu konvertierende Integer der float Datenbreite entsprechen muss.
Viele Grüße,
Tom

Antworten

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