Hi Jérôme,
danke füer Deine Antworten.
#2 ist klar.
#1 ist noch nicht gelöst. Ich hatte in meiner vorherigen XML Datei das 'signed="true"'' manchmal an der falschen Stelle. Jetzt ist es korrigiert:
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="2" />
<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="3" 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="4" 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="6" 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="7" size="1" />
<conversion type="float_integer_scale" factor="1" />
</parameter>
</paramset>
<paramset type="VALUES" id="HB-UNI-Sensor-AQ-BME680_values" >
<parameter id="TEMPERATURE" operations="read,event">
<logical type="float" min="-50.0" max="120.0" unit="°C" />
<physical type="integer" interface="command" value_id="TEMPERATURE" >
<event frame="WEATHER_EVENT" />
</physical>
<conversion type="float_integer_scale" factor="10.0" />
<description>
<field id="AutoconfRoles" value="WEATHER" />
</description>
Hier der C++-Code dazu:
Code: Alles auswählen
DEFREGISTER(UReg1, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07)
class SensorList1 : public RegList1<UReg1> {
public:
SensorList1 (uint16_t addr) : RegList1<UReg1>(addr) {}
bool tempOffset10 (int16_t value) const {
return this->writeRegister(0x01, (value >> 8) & 0xff) && this->writeRegister(0x02, value & 0xf);
}
int16_t tempOffset10 () const {
return (((int16_t)(this->readRegister(0x01, 0)) << 8) + (int16_t)(this->readRegister(0x02, 0)));
}
bool humidOffset (int8_t value) const {
return this->writeRegister(0x03, value & 0xff);
}
int8_t humidOffset () const {
return (int8_t)(this->readRegister(0x03, 0));
}
bool pressOffset10 (int16_t value) const {
return this->writeRegister(0x04, (value >> 8) & 0xff) && this->writeRegister(0x05, value & 0xff);
}
int16_t pressOffset10 () const {
return (((int16_t)(this->readRegister(0x04, 0)) << 8) + (int16_t)(this->readRegister(0x05, 0)));
}
bool max_decay_factor_upper_limit (uint8_t value) const {
return this->writeRegister(0x06, value & 0xff);
}
uint8_t max_decay_factor_upper_limit () const {
return (uint8_t)(this->readRegister(0x06, 0));
}
bool max_increase_factor_lower_limit (uint8_t value) const {
return this->writeRegister(0x07, value & 0xff);
}
uint8_t max_increase_factor_lower_limit () const {
return (uint8_t)(this->readRegister(0x07, 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"));
}
};
Leider auch damit das gleiche Verhalten: Nach dem Drücken des 'OK' Buttons des 'Verknüfungs- und Programmstatus' Pop-Up Fensters, dass die Übertragung der Daten zum Gerät erfolgreich abgeschlossen ist, wird aus der negativen Zahl in der Eingabemaske die maximal positive Zahl.
Hat jemand ein AsksinPP Gerät am Laufen, bei dem das Setzen eines negativen Parameters in der Maske erhalten bleibt?
Welcher Code beschreibt die Maske? Ist es AsksinPP oder RaspberryMatic/Homematic Code? Wo muss ich suchen?
Danke für die Hilfe im Voraus!