Написал обработчик для управления режимами работы климат контроля
var ThermostatMode = "ClimatZone_2/TermostatMode";
var Off = "ClimatZone_2/Active";
var OffSt = "ClimatZone_2/ActiveSt";
var Auto = "ClimatZone_2/TermostatMode_Auto";
var AutoSt = "ClimatZone_2/TermostatMode_AutoSt";
var Fan = "ClimatZone_2/TermostatMode_Fan";
var FanSt = "ClimatZone_2/TermostatMode_FanSt";
var Dry = "ClimatZone_2/TermostatMode_Dry";
var DrySt = "ClimatZone_2/TermostatMode_DrySt";
var SetPoint = "ClimatZone_2/SetPoint";
var Temperature = "ClimatZone_2/CurrentTemperature";
var Cond = "ClimatZone_2/CondActive";
var CondMode = "ClimatZone_2/CondMod";
var CondFanSpeed = "ClimatZone_2/CondFan";
var Heater = "ClimatZone_2/HeaterActive";
var HydActive = "Hum_1/Active";
var Humidity = "Hum_1/Current";
var FirstSpeed = 90;
var SecondSpeed = 170;
var ThirdSpeed = 170;
trackMqtt("/devices/{}/controls/{}".format(Off.split('/')[0], Off.split('/')[1]), function(message) {
if(message.value == true) {
dev[ThermostatMode] = 1;
}
});
log("/devices/{}/controls/{}".format(Auto.split('/')[0], Auto.split('/')[1]))
trackMqtt("/devices/{}/controls/{}".format(Auto.split('/')[0], Auto.split('/')[1]), function(message) {
if(message.value == true) {
log("test")
dev[ThermostatMode] = 2;
}
});
trackMqtt("/devices/{}/controls/{}".format(Fan.split('/')[0], Fan.split('/')[1]), function(message) {
if(message.value == true) {
dev[ThermostatMode] = 3;
}
});
trackMqtt("/devices/{}/controls/{}".format(Dry.split('/')[0], Dry.split('/')[1]), function(message) {
if(message.value == true) {
dev[ThermostatMode] = 4;
}
});
defineRule("getMode", {
whenChanged: ThermostatMode,
then: function(newValue) {
switch(newValue) {
case 1:
dev[OffSt] = true;
dev[AutoSt] = false;
dev[FanSt] = false;
dev[DrySt] = false;
break;
case 2:
dev[OffSt] = false;
dev[AutoSt] = true;
dev[FanSt] = false;
dev[DrySt] = false;
break;
case 3:
dev[OffSt] = false;
dev[AutoSt] = false;
dev[FanSt] = true;
dev[DrySt] = false;
break;
case 4:
dev[OffSt] = false;
dev[AutoSt] = false;
dev[FanSt] = false;
dev[DrySt] = true;
break;
}
}
});
все работало стабильно никаких проблем не возникало
Сегодня обновил пакеты(к сожалению не посмотрел какие) и после этого в логах wb-rules начало появляться сообщение:
ERROR: control ClimatZone_2/TermostatMode SetValue() error: can’t convert control value ‘2’ (type float64) to datatype ‘0’
В конфиге KNX тип данных для телеграмм выбран корректно (в ETS 20.105, в конфиге 20.xxx_N8)
При этом если менять значение в ручную через веб то значение в шину улетает и статус приходит обратно
Если через ETS отправлять значение, на контроллер оно тоже приходит
То есть проблема возникает только если переключение происходит через wb-rules, пробывал и через defineRule() и через trackMqtt()