From f6a57348ebc10f5acea1fe807cebc031fbead171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BB=D0=B8=D0=BC=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9=20=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B5?= =?UTF-8?q?=D0=B2=D0=B8=D1=87?= Date: Sat, 21 Oct 2023 21:06:00 +0300 Subject: [PATCH] text chan types, comp options, counter fixed --- build-flags/build_flags_due | 3 ++- build-flags/build_flags_esp32-wifi | 3 ++- build-flags/build_flags_lighthub21 | 2 +- build-flags/build_flags_mega2560-5500 | 6 +++++ build-flags/build_flags_mega2560-optiboot | 1 + build-flags/build_flags_nrf52840 | 3 ++- build-flags/build_flags_stm32 | 3 ++- lighthub/item.cpp | 24 ++++++++++++++--- lighthub/itemCmd.cpp | 30 +++++++++++++++++++++ lighthub/itemCmd.h | 32 +++++++++++++++++++++++ lighthub/modules/out_counter.cpp | 21 +++------------ lighthub/modules/out_counter.h | 11 ++------ 12 files changed, 104 insertions(+), 35 deletions(-) diff --git a/build-flags/build_flags_due b/build-flags/build_flags_due index c80ddab..72a8813 100644 --- a/build-flags/build_flags_due +++ b/build-flags/build_flags_due @@ -15,4 +15,5 @@ -DTIMER_INT -DRESTART_LAN_ON_MQTT_ERRORS --DOTA_PORT=80 \ No newline at end of file +-DOTA_PORT=80 +-DMERCURY_ENABLE \ No newline at end of file diff --git a/build-flags/build_flags_esp32-wifi b/build-flags/build_flags_esp32-wifi index a7e3b84..012bf46 100644 --- a/build-flags/build_flags_esp32-wifi +++ b/build-flags/build_flags_esp32-wifi @@ -56,4 +56,5 @@ -DMQTT_KEEPALIVE=10 -DMQTT_SOCKET_TIMEOUT=20 -D CORS=\"*\" --D REDIRECTION_URL=\"http://lazyhome.ru/pwa\" \ No newline at end of file +-D REDIRECTION_URL=\"http://lazyhome.ru/pwa\" +-DMERCURY_ENABLE \ No newline at end of file diff --git a/build-flags/build_flags_lighthub21 b/build-flags/build_flags_lighthub21 index a21fefc..53b1921 100644 --- a/build-flags/build_flags_lighthub21 +++ b/build-flags/build_flags_lighthub21 @@ -38,5 +38,5 @@ -DOTA_PORT=80 -D CORS=\"*\" -D REDIRECTION_URL=\"http://lazyhome.ru/pwa\" -#-D MERCURY_ENABLE +-D MERCURY_ENABLE #-D IPMODBUS \ No newline at end of file diff --git a/build-flags/build_flags_mega2560-5500 b/build-flags/build_flags_mega2560-5500 index 589728c..1d3f1bd 100644 --- a/build-flags/build_flags_mega2560-5500 +++ b/build-flags/build_flags_mega2560-5500 @@ -6,6 +6,12 @@ -DARDUINO_OTA_MDNS_DISABLE -DMDNS_ENABLE +-DNO_HOMIE +-DCSSHDC_DISABLE +-DSPILED_DISABLE +-DAC_DISABLE + + -DRESTART_LAN_ON_MQTT_ERRORS -D CORS=\"*\" -D REDIRECTION_URL=\"http://lazyhome.ru/pwa\" diff --git a/build-flags/build_flags_mega2560-optiboot b/build-flags/build_flags_mega2560-optiboot index 604ae4c..da29905 100644 --- a/build-flags/build_flags_mega2560-optiboot +++ b/build-flags/build_flags_mega2560-optiboot @@ -27,3 +27,4 @@ # Example of UARTBRIDGE configuration #-DUARTBRIDGE_ENABLE -DOTA_PORT=80 +-DMERCURY_ENABLE diff --git a/build-flags/build_flags_nrf52840 b/build-flags/build_flags_nrf52840 index db80194..6aff94e 100644 --- a/build-flags/build_flags_nrf52840 +++ b/build-flags/build_flags_nrf52840 @@ -15,4 +15,5 @@ #-DMCP23017 -D CORS=\"*\" --D REDIRECTION_URL=\"http://lazyhome.ru/pwa\" \ No newline at end of file +-D REDIRECTION_URL=\"http://lazyhome.ru/pwa\" +-DMERCURY_ENABLE \ No newline at end of file diff --git a/build-flags/build_flags_stm32 b/build-flags/build_flags_stm32 index 2926217..a74c552 100644 --- a/build-flags/build_flags_stm32 +++ b/build-flags/build_flags_stm32 @@ -36,4 +36,5 @@ -D HAL_CAN_MODULE_ENABLED #HAL_ETH_MODULE_DISABLED #HAL_SD_MODULE_DISABLED -#HAL_DAC_MODULE_DISABLED \ No newline at end of file +#HAL_DAC_MODULE_DISABLED +-DMERCURY_ENABLE \ No newline at end of file diff --git a/lighthub/item.cpp b/lighthub/item.cpp index 2bf650a..1d5be76 100644 --- a/lighthub/item.cpp +++ b/lighthub/item.cpp @@ -140,7 +140,8 @@ void Item::Parse() { for (int i = aJson.getArraySize(itemArr); i < 4; i++) aJson.addItemToArray(itemArr, aJson.createNull());//( (long int) 0)); // int(defval[i]) )); //Enlarge item to 4 elements. VAL=int if no other definition in conf - itemType = aJson.getArrayItem(itemArr, I_TYPE)->valueint; + //itemType = aJson.getArrayItem(itemArr, I_TYPE)->valueint; + itemType = replaceTypeToInt (aJson.getArrayItem(itemArr, I_TYPE)); itemArg = aJson.getArrayItem(itemArr, I_ARG); itemVal = aJson.getArrayItem(itemArr, I_VAL); itemExt = aJson.getArrayItem(itemArr, I_EXT); @@ -794,6 +795,8 @@ int Item::scheduleOppositeCommand(itemCmd cmd,bool authorized) break; case CMD_RESTORE: nextCmd.Cmd(CMD_HALT); break; + case CMD_TOGGLE: nextCmd.Cmd(CMD_TOGGLE); + break; default: return 0; } @@ -1341,12 +1344,12 @@ if (invalidArgument) return -4; if ((!driver || driver->isAllowed(cmd)) && (!getFlag(FLAG_FREEZED))) { - // UPDATE internal variables - if (status2Send) cmd.saveItem(this,status2Send); - //debugSerial<Ctrl(cmd, subItem, toExecute,authorized); if (driver->getChanType() == CH_THERMO) status2Send |= FLAG_SEND_IMMEDIATE; //if (res==-1) status2Send=0; ///////not working @@ -1365,6 +1368,9 @@ if ((!driver || driver->isAllowed(cmd)) && (!getFlag(FLAG_FREEZED))) short icmd =cmd.getCmd(); if (!authorized && isProtectedPin(iaddr)) {errorSerial<isAllowed(cmd)) && (!getFlag(FLAG_FREEZED))) } case CH_THERMO: + // UPDATE internal variables + if (status2Send) cmd.saveItem(this,status2Send); + switch (suffixCode) { case S_VAL: @@ -1438,6 +1447,9 @@ if ((!driver || driver->isAllowed(cmd)) && (!getFlag(FLAG_FREEZED))) #ifndef MODBUS_DISABLE case CH_MODBUS: + // UPDATE internal variables + if (status2Send) cmd.saveItem(this,status2Send); + if (toExecute && !(chActive && cmd.getCmd()==CMD_ON && !cmd.isValue())) { int vol; @@ -1451,9 +1463,13 @@ if ((!driver || driver->isAllowed(cmd)) && (!getFlag(FLAG_FREEZED))) } break; case CH_VC: + // UPDATE internal variables + if (status2Send) cmd.saveItem(this,status2Send); if (toExecute && !(chActive && cmd.getCmd()==CMD_ON && !cmd.isValue())) res=VacomSetFan(cmd); break; case CH_VCTEMP: + // UPDATE internal variables + if (status2Send) cmd.saveItem(this,status2Send); if (toExecute && !(chActive && cmd.getCmd()==CMD_ON && !cmd.isValue())) res=VacomSetHeat(cmd); break; #endif diff --git a/lighthub/itemCmd.cpp b/lighthub/itemCmd.cpp index 5a31ab2..fe655be 100644 --- a/lighthub/itemCmd.cpp +++ b/lighthub/itemCmd.cpp @@ -39,6 +39,20 @@ int txt2cmd(char *payload) { return cmd; } + +int type2num(char *payload) { + if (!payload || !payload[0]) return -1; + + for(uint8_t i=0; itype == aJson_String) + { + int type = type2num(verb->valuestring); + if (type>=0) + { + freeString(verb->valuestring); + verb->valueint=type; + verb->type=aJson_Int; + return verb->valueint; + } + } else if (verb && verb->type == aJson_Int) return verb->valueint; + return -1; + } + // Mapping from unified itemCmd object to some specific device-depended value itemCmd itemCmd::doMapping(aJsonObject *mappingData) { diff --git a/lighthub/itemCmd.h b/lighthub/itemCmd.h index 85d163a..ef0dcc4 100644 --- a/lighthub/itemCmd.h +++ b/lighthub/itemCmd.h @@ -31,8 +31,39 @@ const cmdstr commands_P[] PROGMEM = "HIGH","MEDIUM","LOW", "HEAT","COOL","DRY","STOP","RGB","HSV" }; + #define commandsNum sizeof(commands_P)/sizeof(cmdstr) +typedef char ch_type[9]; +const ch_type ch_type_P[] PROGMEM = +{ +"DMX", // 0 //DMX 1-4 ch +"DMXRGBW",// 1 //DMX 4 ch +"DMXRGB", // 2 //DMX 3 ch +"PWM", // 3 //PWM output directly to PIN 1-4 CH +"MBUSDIM",// 4 //Modbus AC Dimmer +"THERMO", // 5 //Simple ON/OFF thermostat +"RELAY", // 6 //ON_OFF relay output +"GROUP", // 7 //Group pseudochannel +"VCTEMP", // 8 //Vacom PID regulator +"MBUSVC", // 9 //Vacom modbus motor regulator +"ACHAIER",// 10 //AC Haier +"SPILED", // 11 //SPI led strip +"MOTOR", // 12 //Motorized gate with feedback resistor +"PID", // 13 //PID regulator +"MBUS", // 14 //Universal Modbus Master channel +"UARTBRDG", // 15 //Bridge between 2 UARTS with reporting PDUs to Wireshark via UDP +"RELAYPWM", // 16 //Slow PWM relay to control objects with inertia +"DMXRGBWW", // 17 //DMX RGBWW channel (warm&cold white) +"VENTS", // 18 //Multichannel ventilation +"ELEVATOR", // 19 // +"COUNTER", // 20 //Generic counter +"HUM", // 21 //Humidifier +"MERCURY" // 22 //Mercury energy meter/RS485 interface +}; + +#define ch_typeNum sizeof(ch_type_P)/sizeof(ch_type) + /// Definition of Commands #define CMD_ON 1 /// Turn channel ON #define CMD_OFF 2 /// Turn channel OFF @@ -241,4 +272,5 @@ public: }; +int replaceTypeToInt(aJsonObject* verb); #pragma pack(pop) diff --git a/lighthub/modules/out_counter.cpp b/lighthub/modules/out_counter.cpp index 465cc91..05f3c5a 100644 --- a/lighthub/modules/out_counter.cpp +++ b/lighthub/modules/out_counter.cpp @@ -6,19 +6,10 @@ #include "item.h" #include "main.h" -//#include "dmx.h" + static int driverStatus = CST_UNKNOWN; -void out_counter::getConfig() -{ - if (!item) return; - impulse = item->getFloatArg(0)*TENS_BASE; - - period = item->getFloatArg(1)*1000.0; - //debugSerial<<"CTR: imp:"<getExt(); - + uint32_t timer = item->getExt(); + uint32_t period = item->getFloatArg(1)*1000.0; if (timer && period && isTimeOver(timer,millis(),period)) { + uint32_t impulse = item->getFloatArg(0)*TENS_BASE; item->setExt(millisNZ()); itemCmd st; st.loadItem(item,FLAG_PARAMETERS|FLAG_COMMAND); - //float val = st.getFloat(); uint32_t val = st.getTens_raw(); - //short cmd = st.getCmd(); debugSerial<<"CTR: tick val:"<