Page 1 of 1

Strange behavious of thermostate

Posted: 27 Mar 2020 19:28
by martgreb
I've uploaded simple thermostate code created with Z-uno shield and on Fibaro HC2 I can't set the setpoint for example 25 or 26 or 27, as it goes back to initial 4C. If I choose 25.5 or 26.6 and so on - everything works fine.

Re: Strange behavious of thermostate

Posted: 28 Mar 2020 04:31
by PoltoS
Please share the code

Re: Strange behavious of thermostate

Posted: 28 Mar 2020 11:32
by martgreb
Code was created with shield cinfigurator.


#include "ZUNO_DS18B20.h"

// Global variables

byte pin6ThermostatModeState = 0;
signed int pin6ThermostatTemperatureState = 0;
signed int pin6ThermostatTemperatureCurrent = 0;

OneWire ow(11);
DS18B20Sensor ds18b20(&ow);

byte addresses[8 * 1 + 8]; // last one for search
byte number_of_sensors; // Number of sensors found (if less than 1 connected)
signed int temperature[1];

// Z-Wave channels
ZUNO_SETUP_CHANNELS(
ZUNO_THERMOSTAT(THERMOSTAT_FLAGS_OFF | THERMOSTAT_FLAGS_HEAT, THERMOSTAT_UNITS_CELSIUS, THERMOSTAT_RANGE_POS, 4, pin6ThermostatModeGetter, pin6ThermostatModeSetter, pin6ThermostatTemperatureGetter, pin6ThermostatTemperatureSetter),
ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_TEMPERATURE, SENSOR_MULTILEVEL_SCALE_CELSIUS, SENSOR_MULTILEVEL_SIZE_TWO_BYTES, SENSOR_MULTILEVEL_PRECISION_ONE_DECIMAL, pin11SensorDS18B20Getter_1)
);

void setup() {
pinMode(6, OUTPUT);

number_of_sensors = ds18b20.findAllSensors(addresses);
}

void loop() {
if (pin6ThermostatModeState) {
pin6ThermostatTemperatureCurrent = temperature[0];
if (pin6ThermostatTemperatureState < pin6ThermostatTemperatureCurrent - 10) {
digitalWrite(6, HIGH);
}
if (pin6ThermostatTemperatureState > pin6ThermostatTemperatureCurrent + 10) {
digitalWrite(6, LOW);
}
}

if (number_of_sensors >= 1) {
temperature[0] = ds18b20.getTempC100(&addresses[8 * 0])/10;
zunoSendReport(2 + 0);
}

delay(20);
}

// Getters and setters

void pin6ThermostatModeSetter(byte value) {
pin6ThermostatModeState = value;
}

byte pin6ThermostatModeGetter() {
return pin6ThermostatModeState;
}

void pin6ThermostatTemperatureSetter(byte mode, signed int value) {
pin6ThermostatTemperatureState = value;
}

signed int pin6ThermostatTemperatureGetter(byte mode) {
return pin6ThermostatTemperatureState;
}

word pin11SensorDS18B20Getter_1() {
return temperature[0];
}

Re: Strange behavious of thermostate

Posted: 28 Mar 2020 21:14
by martgreb
Just checked on other controllers:

Vera working fine.
Home assistant initially working only mode, but after trial to change xml file, set point works with errors. Some numbers are working as 28.5C, but below 25 - result in hundreds C or even negative.