still fixing an issue with the blind state

master
Bernhard Trinnes 2018-10-09 20:47:00 +02:00 committed by Michael Zanetti
parent 6baa594c6f
commit c10144efd8
1 changed files with 45 additions and 26 deletions

View File

@ -583,23 +583,45 @@ void DevicePluginUniPi::onWebSocketTextMessageReceived(QString message)
device->setStateValue(relayOutputPowerStateTypeId, value);
} else if (device->deviceClassId() == blindDeviceClassId) {
if (circuit == device->paramValue(blindOutputOpenParamTypeId).toString()) {
if (value && device->stateValue(blindStatusStateTypeId).toString().contains("stopped")) {
device->setStateValue(blindStatusStateTypeId, "opening");
} else if (!value && device->stateValue(blindStatusStateTypeId).toString().contains("opening")) {
device->setStateValue(blindStatusStateTypeId, "stopped");
if (value) {
if (device->stateValue(blindStatusStateTypeId).toString().contains("stopped")) {
device->setStateValue(blindStatusStateTypeId, "opening");
} else if (device->stateValue(blindStatusStateTypeId).toString().contains("closing")) {
//error both relais are on
qWarning(dcUniPi()) << "Blind" << device->name() << "Critical state - Output close:" << value << "Status: " << device->stateValue(blindStatusStateTypeId).toString();
device->setStateValue(blindStatusStateTypeId, "stopped");
} else if (device->stateValue(blindStatusStateTypeId).toString().contains("opening")) {
//state unchanged
}
} else {
qWarning(dcUniPi()) << "Blind" << device << "Output open:" << value << "Status: " << device->stateValue(blindStatusStateTypeId).toString();
device->setStateValue(blindStatusStateTypeId, "stopped");
if (device->stateValue(blindStatusStateTypeId).toString().contains("stopped")) {
// state unchanged
} else if (device->stateValue(blindStatusStateTypeId).toString().contains("closing")) {
// state unchanged
} else if (device->stateValue(blindStatusStateTypeId).toString().contains("opening")) {
device->setStateValue(blindStatusStateTypeId, "stopped");
}
}
}
if (circuit == device->paramValue(blindOutputCloseParamTypeId).toString()) {
if (value && device->stateValue(blindStatusStateTypeId).toString().contains("stopped")) {
device->setStateValue(blindStatusStateTypeId, "closing");
} else if (!value && device->stateValue(blindStatusStateTypeId).toString().contains("closing")) {
device->setStateValue(blindStatusStateTypeId, "stopped");
if (value) {
if (device->stateValue(blindStatusStateTypeId).toString().contains("stopped")) {
device->setStateValue(blindStatusStateTypeId, "closing");
} else if (device->stateValue(blindStatusStateTypeId).toString().contains("closing")) {
//state unchanged
} else if (device->stateValue(blindStatusStateTypeId).toString().contains("opening")) {
//error both relais are on
qWarning(dcUniPi()) << "Blind" << device->name() << "Critical state - Output close:" << value << "Status: " << device->stateValue(blindStatusStateTypeId).toString();
device->setStateValue(blindStatusStateTypeId, "stopped");
}
} else {
qWarning(dcUniPi()) << "Blind" << device << "Output close:" << value << "Status: " << device->stateValue(blindStatusStateTypeId).toString();
device->setStateValue(blindStatusStateTypeId, "stopped");
if (device->stateValue(blindStatusStateTypeId).toString().contains("stopped")) {
// state unchanged
} else if (device->stateValue(blindStatusStateTypeId).toString().contains("closing")) {
device->setStateValue(blindStatusStateTypeId, "stopped");
} else if (device->stateValue(blindStatusStateTypeId).toString().contains("opening")) {
// state unchanged
}
}
}
@ -623,7 +645,7 @@ void DevicePluginUniPi::onWebSocketTextMessageReceived(QString message)
device->setStateValue(blindStatusStateTypeId, "opening");
} else if (!value && device->stateValue(blindStatusStateTypeId).toString().contains("opening")) {
device->setStateValue(blindStatusStateTypeId, "stopped");
} else {
} else {
qWarning(dcUniPi()) << "blind" << device << "Output open:" << value << "Status: " << device->stateValue(blindStatusStateTypeId).toString();
device->setStateValue(blindStatusStateTypeId, "stopped");
}
@ -667,7 +689,6 @@ void DevicePluginUniPi::onWebSocketTextMessageReceived(QString message)
}
}
if (obj["dev"] == "led") { //TODO can't discover leds without toggling it from another client
qCDebug(dcUniPi()) << "Led:" << obj["dev"] << "Circuit:" << obj["circuit"].toString() << "Value:" << obj["value"].toInt();
@ -683,14 +704,13 @@ void DevicePluginUniPi::onWebSocketTextMessageReceived(QString message)
if (!m_analogOutputs.contains(obj["circuit"].toString())){
//New Device detected
m_analogOutputs.append(obj["circuit"].toString());
} else {
foreach (Device *device, myDevices()) {
if (m_usedAnalogOutputs.contains(obj["circuit"].toString())) {
double value = QVariant(obj["value"]).toDouble();
Device *device = m_usedDigitalInputs.value(obj["circuit"].toString());
if (device->deviceClassId() == analogOutputDeviceClassId) {
if (obj["circuit"] == device->paramValue(analogOutputAnalogOutputNumberParamTypeId).toString()) {
device->setStateValue(analogOutputAnalogOutputValueStateTypeId, obj["value"].toDouble());
break;
}
device->setStateValue(analogOutputAnalogOutputValueStateTypeId, value);
}
}
}
@ -703,13 +723,12 @@ void DevicePluginUniPi::onWebSocketTextMessageReceived(QString message)
//New analog output detected
m_analogInputs.append(obj["circuit"].toString());
} else {
foreach (Device *device, myDevices()) {
if (device->deviceClassId() == analogInputDeviceClassId) {
if (m_usedAnalogInputs.contains(obj["circuit"].toString())) {
double value = QVariant(obj["value"]).toDouble();
Device *device = m_usedDigitalInputs.value(obj["circuit"].toString());
if (obj["circuit"] == device->paramValue(analogInputAnalogInputNumberParamTypeId).toString()) {
device->setStateValue(analogInputAnalogInputValueStateTypeId, obj["value"].toDouble());
break;
}
if (device->deviceClassId() == analogInputDeviceClassId) {
device->setStateValue(analogInputAnalogInputValueStateTypeId, value);
}
}
}