Use dynamic min/max values for thermostat view

This commit is contained in:
Michael Zanetti 2021-12-13 00:54:24 +01:00
parent fb5fd0a6a0
commit 86ef48bebb
4 changed files with 13 additions and 9 deletions

View File

@ -299,7 +299,7 @@ void ThingManager::getPluginConfigResponse(int /*commandId*/, const QVariantMap
void ThingManager::getThingsResponse(int /*commandId*/, const QVariantMap &params) void ThingManager::getThingsResponse(int /*commandId*/, const QVariantMap &params)
{ {
// qDebug() << "Things received:" << params; // qCritical() << "Things received:" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
if (params.keys().contains("things")) { if (params.keys().contains("things")) {
QVariantList thingsList = params.value("things").toList(); QVariantList thingsList = params.value("things").toList();
foreach (QVariant thingVariant, thingsList) { foreach (QVariant thingVariant, thingsList) {

View File

@ -235,6 +235,7 @@ int Thing::executeAction(const QString &actionName, const QVariantList &params)
} }
finalParams.append(param); finalParams.append(param);
} }
// qCritical() << "Executing action" << finalParams;
int commandId = m_thingManager->executeAction(m_id, actionType->id(), finalParams); int commandId = m_thingManager->executeAction(m_id, actionType->id(), finalParams);
m_pendingActions.append(commandId); m_pendingActions.append(commandId);
return commandId; return commandId;

View File

@ -40,14 +40,14 @@ Item {
property int startAngle: 135 property int startAngle: 135
property int maxAngle: 270 property int maxAngle: 270
property int steps: roundToPrecision(root.targetTemperatureStateType.maxValue - root.targetTemperatureStateType.minValue) * (1/root.precision) property int steps: roundToPrecision(root.targetTemperatureState.maxValue - root.targetTemperatureState.minValue) * (1/root.precision)
property double stepSize: (root.targetTemperatureStateType.maxValue - root.targetTemperatureStateType.minValue) / steps property double stepSize: (root.targetTemperatureState.maxValue - root.targetTemperatureState.minValue) / steps
property double anglePerStep: maxAngle / steps property double anglePerStep: maxAngle / steps
function angleToValue(angle) { function angleToValue(angle) {
var from = root.targetTemperatureStateType.minValue var from = root.targetTemperatureState.minValue
var to = root.targetTemperatureStateType.maxValue var to = root.targetTemperatureState.maxValue
return (to - from) * angle / maxAngle + from return (to - from) * angle / maxAngle + from
} }
@ -77,10 +77,10 @@ Item {
// Step lines // Step lines
var currentValue = actionQueue.pendingValue || root.targetTemperatureState.value var currentValue = actionQueue.pendingValue || root.targetTemperatureState.value
var targetTempStep = roundToPrecision(currentValue - root.targetTemperatureStateType.minValue) * (1/root.precision) var targetTempStep = roundToPrecision(currentValue - root.targetTemperatureState.minValue) * (1/root.precision)
var currentTempStep; var currentTempStep;
if (root.temperatureState) { if (root.temperatureState) {
currentTempStep = roundToPrecision(root.temperatureState.value - root.targetTemperatureStateType.minValue) * (1/root.precision) currentTempStep = roundToPrecision(root.temperatureState.value - root.targetTemperatureState.minValue) * (1/root.precision)
} }
for(var step = 0; step < steps; step += root.precision) { for(var step = 0; step < steps; step += root.precision) {
@ -207,9 +207,10 @@ Item {
var valueDiff = angleDiff / canvas.anglePerStep * canvas.stepSize var valueDiff = angleDiff / canvas.anglePerStep * canvas.stepSize
valueDiff = canvas.roundToPrecision(valueDiff) valueDiff = canvas.roundToPrecision(valueDiff)
if (Math.abs(valueDiff) > 0) { if (Math.abs(valueDiff) > 0) {
var currentValue = actionQueue.pendingValue || root.targetTemperatureState.value var currentValue = actionQueue.pendingValue ? actionQueue.pendingValue : root.targetTemperatureState.value
var newValue = currentValue + valueDiff var newValue = currentValue + valueDiff
newValue = Math.min(root.targetTemperatureStateType.maxValue, Math.max(root.targetTemperatureStateType.minValue, newValue)) newValue = Math.min(root.targetTemperatureState.maxValue, Math.max(root.targetTemperatureState.minValue, newValue))
print("newValue:", newValue, "current:", currentValue, "diff:", valueDiff, root.targetTemperatureState.minValue)
if (currentValue !== newValue) { if (currentValue !== newValue) {
actionQueue.sendValue(newValue) actionQueue.sendValue(newValue)
} }

View File

@ -19,6 +19,7 @@ Item {
return; return;
} }
d.pendingValue = value; d.pendingValue = value;
// print("sending action", value)
var stateName = root.stateType == null ? root.stateName : root.stateType.name var stateName = root.stateType == null ? root.stateName : root.stateType.name
d.pendingCommand = root.thing.executeAction(stateName, d.pendingCommand = root.thing.executeAction(stateName,
[{ [{
@ -39,6 +40,7 @@ Item {
target: root.thing target: root.thing
onExecuteActionReply: { onExecuteActionReply: {
if (d.pendingCommand == commandId) { if (d.pendingCommand == commandId) {
// print("command finished")
d.pendingCommand = -1; d.pendingCommand = -1;
if (d.queuedValue != null) { if (d.queuedValue != null) {
root.sendValue(d.queuedValue) root.sendValue(d.queuedValue)