mirror of
https://github.com/anklimov/lighthub
synced 2025-12-08 04:39:49 +03:00
multivent interim 2
This commit is contained in:
@@ -22,7 +22,7 @@ int out_Multivent::Setup()
|
||||
abstractOut::Setup();
|
||||
//getConfig();
|
||||
|
||||
//Expand Argument storage to 3
|
||||
//Expand Argument storage to 2
|
||||
for (int i = aJson.getArraySize(item->itemArg); i < 2; i++)
|
||||
aJson.addItemToArray(item->itemArg, aJson.createItem( (long int) 0));
|
||||
|
||||
@@ -33,13 +33,13 @@ if (gatesObj)
|
||||
while (i)
|
||||
{
|
||||
aJsonObject * setObj = aJson.getObjectItem(i, "set");
|
||||
if (!setObj) aJson.addNumberToObject(i, "set", (long int) 0);
|
||||
if (!setObj) aJson.addNumberToObject(i, "set", (long int) -1);
|
||||
|
||||
aJsonObject * cmdObj = aJson.getObjectItem(i, "cmd");
|
||||
if (!setObj) aJson.addNumberToObject(i, "cmd", (long int) 0);
|
||||
if (!setObj) aJson.addNumberToObject(i, "cmd", (long int) -1);
|
||||
|
||||
aJsonObject * outObj = aJson.getObjectItem(i, "out");
|
||||
if (!setObj) aJson.addNumberToObject(i, "out", (long int) 0);
|
||||
if (!setObj) aJson.addNumberToObject(i, "out", (long int) -1);
|
||||
|
||||
i=i->next;
|
||||
}
|
||||
@@ -91,51 +91,100 @@ int out_Multivent::getChanType()
|
||||
|
||||
int out_Multivent::Ctrl(itemCmd cmd, char* subItem , bool toExecute)
|
||||
{
|
||||
aJsonObject * gateObj = NULL;
|
||||
|
||||
int suffixCode = cmd.getSuffix();
|
||||
if (cmd.isCommand() && !suffixCode) suffixCode=S_CMD; //if some known command find, but w/o correct suffix - got it
|
||||
|
||||
//if (subItem && gatesObj)
|
||||
//{
|
||||
//gateObj = aJson.getObjectItem(gatesObj,subItem);
|
||||
//}
|
||||
|
||||
aJsonObject * i = NULL;
|
||||
if (gatesObj) i = gatesObj->child;
|
||||
aJsonObject * currentGateObj = NULL;
|
||||
|
||||
if (gatesObj) i = gatesObj->child; // Pass 1 - calculate summ air value, max value etc
|
||||
|
||||
int activeV = 0;
|
||||
int totalV = 0;
|
||||
int gateV = 0;
|
||||
char * gateEmit = NULL;
|
||||
int totalV = 0;
|
||||
int gateV = 0;
|
||||
//char * gateEmit = NULL;
|
||||
int gateCmd = 0;
|
||||
int maxV=0;
|
||||
|
||||
while (i)
|
||||
{
|
||||
int V =aJson.getObjectItem(i,"V")->valueint;
|
||||
aJsonObject * setObj=aJson.getObjectItem(i, "set");
|
||||
aJsonObject * cmdObj=aJson.getObjectItem(i, "cmd");
|
||||
if (!setObj || !cmdObj || setObj->type!=aJson_Int || cmdObj->type!=aJson_Int) continue;
|
||||
|
||||
int V =aJson.getObjectItem(i,"V")->valueint;
|
||||
int requestedV=0;
|
||||
|
||||
if (subItem && !strcmp (i->name,subItem))
|
||||
{
|
||||
gateObj=i;
|
||||
currentGateObj=i;
|
||||
gateV=V;
|
||||
gateEmit=aJson.getObjectItem(i,"emit")->valuestring;
|
||||
// gateEmit=aJson.getObjectItem(i,"emit")->valuestring;
|
||||
|
||||
gateCmd=cmdObj->valueint;
|
||||
if (cmdObj && cmd.isCommand()) cmdObj->valueint = cmd.getCmd();
|
||||
if (setObj && cmd.isValue()) setObj->valueint = cmd.getPercents255();
|
||||
if (cmdObj && cmd.isCommand())
|
||||
{
|
||||
cmdObj->valueint = cmd.getCmd();
|
||||
//publishTopic(i->name,cmdObj->valueint,"/set");
|
||||
item->SendStatusImmediate(SEND_COMMAND,i->name);
|
||||
}
|
||||
if (setObj && cmd.isValue())
|
||||
{
|
||||
setObj->valueint = cmd.getPercents255();
|
||||
//publishTopic(i->name,setObj->valueint,"/set");
|
||||
item->SendStatusImmediate(SEND_PARAMETERS,i->name);
|
||||
}
|
||||
}
|
||||
|
||||
if (cmdObj && cmdObj->valueint != CMD_OFF) activeV+=setObj->valueint*V;
|
||||
if (cmdObj->valueint != CMD_OFF)
|
||||
{
|
||||
requestedV=V*setObj->valueint;
|
||||
activeV+=requestedV;
|
||||
}
|
||||
totalV+=V;
|
||||
// numberGates++;
|
||||
|
||||
if(requestedV>maxV) maxV=requestedV;
|
||||
|
||||
i=i->next;
|
||||
}
|
||||
|
||||
int fanV=activeV*255/totalV;
|
||||
int fanV=activeV/totalV;
|
||||
debugSerial << F("Total V:")<<totalV<<F(" active V:")<<activeV<< F(" %:")<<fanV<< endl;
|
||||
|
||||
//RECALC gates
|
||||
//APPLY every gate
|
||||
//SUB current gate
|
||||
//uint8_t nGate=0;
|
||||
i=NULL;
|
||||
if (gatesObj) i = gatesObj->child; //Pass 2: re-distribute airflow
|
||||
|
||||
while (i)
|
||||
{
|
||||
// nGate++;
|
||||
int V =aJson.getObjectItem(i,"V")->valueint;
|
||||
|
||||
aJsonObject * outObj=aJson.getObjectItem(i, "out");
|
||||
aJsonObject * setObj=aJson.getObjectItem(i, "set");
|
||||
aJsonObject * cmdObj=aJson.getObjectItem(i, "cmd");
|
||||
|
||||
if (!outObj || !setObj || !cmdObj || outObj->type!=aJson_Int || setObj->type!=aJson_Int || cmdObj->type!=aJson_Int) continue;
|
||||
int out = 0;
|
||||
if (cmdObj->valueint != CMD_OFF)
|
||||
{
|
||||
int requestedV=V*setObj->valueint;
|
||||
int out = requestedV*255/maxV;
|
||||
debugSerial<<i->name,(" Req:")<<requestedV<<F( Out:)<<out<<endl;
|
||||
}
|
||||
if (out != outObj->valueint)
|
||||
{
|
||||
//report out
|
||||
executeCommand(i,-1,itemCmd().Percents255(out));
|
||||
outObj->valueint=out;
|
||||
}
|
||||
|
||||
i=i->next;
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
||||
switch(suffixCode)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user