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.
Moderator: Co-Administratoren
Sketch
Du könntest erstmal meinen Sketch flashen (und zugehörige XML bzw. Addon) nehmen, um zu validieren, ob mein Beispiel überhaupt funktioniert.
Kann... kann auch nicht... serielles Log ist für Analysen immer wichtig.
Das kann auch sein.
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>
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"));
}
};
Code: Alles auswählen
<parameter id="HUMIDITY" operations="read,event">
<logical type="float" min="0.0" max="100.0" unit="%" />
<physical type="integer" interface="command" value_id="HUMIDITY" >
<event frame="WEATHER_EVENT" />
</physical>
<conversion type="float_integer_scale" factor="10.0" />
</parameter>
Code: Alles auswählen
<parameter type="integer" index="11" size="2.0" param="AIR_PRESSURE" />
<parameter type="integer" index="13" size="2.0" param="HUMIDITY" />
Code: Alles auswählen
class WeatherEventMsg : public Message {
public:
void init(uint8_t msgcnt, int16_t temp, uint16_t airPressure, uint16_t humidity, ....
uint8_t t1 = (temp >> 8) & 0x7f;
uint8_t t2 = temp & 0xff;
DPRINT("c temperature = "); DDECLN(temp);
DPRINT("c humidity = "); DDECLN(humidity); # <= diese Debugausgabe zeigt korrekte Werte an
DPRINT("c Pressure NN = "); DDECLN(airPressure); # <= diese Debugausgabe zeigt korrekte Werte an
if ( batlow == true ) {
t1 |= 0x80; // set bat low bit
}
..
..
..
pload[0] = (airPressure >> 8) & 0xff;
pload[1] = (airPressure >> 0) & 0xff;
pload[2] = (humidity >> 8) & 0xff;
pload[3] = (humidity >> 0) & 0xff;