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
{
char * pDefaultSubItem = defaultSubItem;
// char * pDefaultSubItem = defaultSubItem;
rootItems=_items;
driver = NULL;
defaultSubItem[0] =0;
@@ -323,10 +323,20 @@ Item::Item(char *name, aJsonObject *_items) //Constructor
buf[i]=0;
itemArr = aJson.getObjectItem(rootItems, buf);
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);
defaultSuffixCode = retrieveCode (&pDefaultSubItem);
defaultSuffixCode = retrieveCode (&pDefaultSubItem);
if (!pDefaultSubItem) defaultSubItem[0] =0; //Zero string
//debugSerial<<F("defaultSubItem: ")<<defaultSubItem<<F(" defaultSuffixCode:")<<defaultSuffixCode<<endl;
*/
}
else
itemArr = aJson.getObjectItem(rootItems, name);
@@ -421,7 +431,7 @@ return NO_SUBITEM;
{
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();
if (subItem & SUBITEM_IS_COMMAND)
{
@@ -1600,7 +1610,7 @@ if ((!driver || driver->isAllowed(cmd))
{
// UPDATE internal variables
if (status2Send) cmd.saveItem(this,status2Send);
else debugSerial<<"NOT SAVED"<<endl;
// else debugSerial<<"NOT SAVED"<<endl;
res = driver->Ctrl(cmd, subItem, toExecute,authorized);
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){
if (!store || !item) return;
if (!store->data[0]) return; //Sending disabled until first poll
if (Status() == AC_SENDING)
{
while (store->timestamp && !isTimeOver(store->timestamp,millis(),150)) yield();
@@ -326,8 +327,8 @@ if (!store)
return 0;}
memset(store->data,0,sizeof(acPersistent::data));
store->data[0]=255;
store->data[1]=255;
//store->data[0]=255;
//store->data[1]=255;
store->data[2]=0x22;
store->mode=0;
store->power=0;
@@ -428,6 +429,10 @@ case AC_AWAITINGCMD: //Flusing port for 5 sec, poll status
SendData(qstn, sizeof(qstn)/sizeof(byte)); //Опрос кондиционера
store->timestamp=millisNZ();
setStatus(AC_IDLE);
//Enable sending
store->data[0]=255;
store->data[1]=255;
}