aqhome-react: enable network loading.

This application has now basic functionality.
This commit is contained in:
Martin Preuss
2024-04-12 21:29:40 +02:00
parent 2ac4887f01
commit a479538743
25 changed files with 648 additions and 76 deletions

View File

@@ -68,6 +68,7 @@ AQHREACT_UNIT *AqHomeReact_UnitStabilize_new(AQHOME_REACT *aqh)
AQHREACT_UNIT *unit;
AQHREACT_OUTPUT_SLOT *outputSlot;
AQHREACT_INPUT_SLOT *inputSlot;
AQHREACT_PARAM *param;
unit=AQHREACT_Unit_new(aqh);
GWEN_NEW_OBJECT(AQHREACT_UNIT_STABILIZE, xunit);
@@ -95,6 +96,16 @@ AQHREACT_UNIT *AqHomeReact_UnitStabilize_new(AQHOME_REACT *aqh)
AQHREACT_InputSlot_SetAcceptedDataType(inputSlot, AQHREACT_DATAOBJECTTYPE_DOUBLE);
AQHREACT_Unit_AddInputSlot(unit, inputSlot);
param=AQHREACT_Param_new();
AQHREACT_Param_SetName(param, AQHOMEREACT_UNIT_STABILIZE_PARAM_HOLDTIME_HIGH);
AQHREACT_Param_SetDataType(param, AQHREACT_DATAOBJECTTYPE_DOUBLE);
AQHREACT_Unit_AddParam(unit, param);
param=AQHREACT_Param_new();
AQHREACT_Param_SetName(param, AQHOMEREACT_UNIT_STABILIZE_PARAM_HOLDTIME_LOW);
AQHREACT_Param_SetDataType(param, AQHREACT_DATAOBJECTTYPE_DOUBLE);
AQHREACT_Unit_AddParam(unit, param);
return unit;
}
@@ -119,7 +130,6 @@ int _cbProcessFn(AQHREACT_UNIT *unit)
AQHREACT_Unit_ClearChangeFlagsInUnitAndInputSlots(unit);
return rv;
}
return 0;
}
@@ -140,14 +150,19 @@ int _checkState(AQHREACT_UNIT *unit)
dataObject=AQHREACT_InputSlot_GetCurrentDataObject(dataSlot);
if (dataObject) {
double doubleData;
int newState;
newState=(AQHREACT_DataObject_GetDoubleData(dataObject)>0.0)?1:0;
doubleData=AQHREACT_DataObject_GetDoubleData(dataObject);
newState=(doubleData>0.0)?1:0;
DBG_DEBUG(NULL, "Got dataObject (%f), new state is %d (previously: %d)", doubleData, newState, xunit->lastProcessedState);
if (newState!=xunit->lastProcessedState) {
DBG_INFO(NULL, "Stage changed (%d->%d)", xunit->lastProcessedState, newState);
_startTimer(unit, xunit, newState);
result=1;
}
else {
DBG_DEBUG(NULL, "Stage unchanged (%d)", newState);
if (_handleStateNoChange(unit, xunit, newState)>0)
result=1;
}
@@ -166,7 +181,7 @@ int _handleStateNoChange(AQHREACT_UNIT *unit, AQHREACT_UNIT_STABILIZE *xunit, in
uint64_t now;
now=(uint64_t) time(NULL);
if (now>xunit->tsHoldUntil) {
if (xunit->tsHoldUntil && now>xunit->tsHoldUntil) {
/* timeout, switch output */
_setOutput(unit, xunit, newState);
result=1;
@@ -183,15 +198,18 @@ void _startTimer(AQHREACT_UNIT *unit, AQHREACT_UNIT_STABILIZE *xunit, int newSta
now=(uint64_t) time(NULL);
DBG_INFO(NULL, "Starting timeout counter (%d)", newState);
if (newState)
holdTime=AQHREACT_Unit_GetParamValueDouble(unit, AQHOMEREACT_UNIT_STABILIZE_PARAM_HOLDTIME_HIGH, 0.0);
else
holdTime=AQHREACT_Unit_GetParamValueDouble(unit, AQHOMEREACT_UNIT_STABILIZE_PARAM_HOLDTIME_LOW, 30.0);
if (holdTime<=0.0)
if (holdTime<=0.0) {
DBG_INFO(NULL, "Timeout is zero, immediately setting output (%d)", newState);
_setOutput(unit, xunit, newState);
else
}
else {
DBG_INFO(NULL, "Starting timeout counter (%d, t=%d)", newState, holdTime);
xunit->tsHoldUntil=now+holdTime;
}
}