defaultSubitem core optimization

AC haier - sendinng command only after initial poll
This commit is contained in:
2026-01-09 22:42:43 +03:00
parent 4769f57f07
commit 08ded62f4a
2 changed files with 21 additions and 6 deletions

View File

@@ -307,7 +307,7 @@ Item::~Item()
Item::Item(char *name, aJsonObject *_items) //Constructor Item::Item(char *name, aJsonObject *_items) //Constructor
{ {
char * pDefaultSubItem = defaultSubItem; // char * pDefaultSubItem = defaultSubItem;
rootItems=_items; rootItems=_items;
driver = NULL; driver = NULL;
defaultSubItem[0] =0; defaultSubItem[0] =0;
@@ -323,10 +323,20 @@ Item::Item(char *name, aJsonObject *_items) //Constructor
buf[i]=0; buf[i]=0;
itemArr = aJson.getObjectItem(rootItems, buf); itemArr = aJson.getObjectItem(rootItems, buf);
sub++; sub++;
for(i=0;(sub[i] && (sub[i]!='/') && (i<sizeof(defaultSubItem)-1));i++)
defaultSubItem[i]=sub[i];
defaultSubItem[i]=0;
if (sub[i]=='/') defaultSuffixCode = txt2subItem(sub+i+1);
else if (defaultSuffixCode = txt2subItem(defaultSubItem))
defaultSubItem[0]=0;
/*
strncpy(defaultSubItem,sub,sizeof(defaultSubItem)-1); strncpy(defaultSubItem,sub,sizeof(defaultSubItem)-1);
defaultSuffixCode = retrieveCode (&pDefaultSubItem); defaultSuffixCode = retrieveCode (&pDefaultSubItem);
if (!pDefaultSubItem) defaultSubItem[0] =0; //Zero string if (!pDefaultSubItem) defaultSubItem[0] =0; //Zero string
//debugSerial<<F("defaultSubItem: ")<<defaultSubItem<<F(" defaultSuffixCode:")<<defaultSuffixCode<<endl; //debugSerial<<F("defaultSubItem: ")<<defaultSubItem<<F(" defaultSuffixCode:")<<defaultSuffixCode<<endl;
*/
} }
else else
itemArr = aJson.getObjectItem(rootItems, name); itemArr = aJson.getObjectItem(rootItems, name);
@@ -421,7 +431,7 @@ return NO_SUBITEM;
{ {
if (getCanNum(itemArr->child) == num) if (getCanNum(itemArr->child) == num)
{ {
debugSerial<<"CAN: Find item: "<< itemArr->name << " id:" << num << "sub:" << subItem; debugSerial<<"CAN: Find item: "<< itemArr->name << " id:" << num << " sub:" << subItem;
Parse(); Parse();
if (subItem & SUBITEM_IS_COMMAND) if (subItem & SUBITEM_IS_COMMAND)
{ {
@@ -1600,7 +1610,7 @@ if ((!driver || driver->isAllowed(cmd))
{ {
// UPDATE internal variables // UPDATE internal variables
if (status2Send) cmd.saveItem(this,status2Send); if (status2Send) cmd.saveItem(this,status2Send);
else debugSerial<<"NOT SAVED"<<endl; // else debugSerial<<"NOT SAVED"<<endl;
res = driver->Ctrl(cmd, subItem, toExecute,authorized); res = driver->Ctrl(cmd, subItem, toExecute,authorized);
if (driver->getChanType() == CH_THERMO) status2Send |= FLAG_SEND_IMMEDIATE; if (driver->getChanType() == CH_THERMO) status2Send |= FLAG_SEND_IMMEDIATE;

View File

@@ -276,6 +276,7 @@ byte getCRC(byte req[], size_t size){
void out_AC::SendData(byte req[], size_t size){ void out_AC::SendData(byte req[], size_t size){
if (!store || !item) return; if (!store || !item) return;
if (!store->data[0]) return; //Sending disabled until first poll
if (Status() == AC_SENDING) if (Status() == AC_SENDING)
{ {
while (store->timestamp && !isTimeOver(store->timestamp,millis(),150)) yield(); while (store->timestamp && !isTimeOver(store->timestamp,millis(),150)) yield();
@@ -326,8 +327,8 @@ if (!store)
return 0;} return 0;}
memset(store->data,0,sizeof(acPersistent::data)); memset(store->data,0,sizeof(acPersistent::data));
store->data[0]=255; //store->data[0]=255;
store->data[1]=255; //store->data[1]=255;
store->data[2]=0x22; store->data[2]=0x22;
store->mode=0; store->mode=0;
store->power=0; store->power=0;
@@ -428,6 +429,10 @@ case AC_AWAITINGCMD: //Flusing port for 5 sec, poll status
SendData(qstn, sizeof(qstn)/sizeof(byte)); //Опрос кондиционера SendData(qstn, sizeof(qstn)/sizeof(byte)); //Опрос кондиционера
store->timestamp=millisNZ(); store->timestamp=millisNZ();
setStatus(AC_IDLE); setStatus(AC_IDLE);
//Enable sending
store->data[0]=255;
store->data[1]=255;
} }