Modbus retry for VaCom fixed

1-st attempt to add OTA
This commit is contained in:
2019-11-27 03:49:00 +03:00
parent b02edbda5e
commit 8a3980272e
7 changed files with 103 additions and 18 deletions

View File

@@ -1,2 +1,3 @@
-DMODBUS_DISABLE -DMODBUS_DISABLE
#-DCOUNTER_DISABLE #-DCOUNTER_DISABLE
-DOTA

View File

@@ -685,7 +685,7 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send, int suffixCode
case CMD_ON: case CMD_ON:
if (itemType==CH_RGBW && getCmd() == CMD_ON && send /*&& getEnableCMD(500) */) { if (itemType==CH_RGBW && getCmd() == CMD_ON && send && (chActive>0)/*&& getEnableCMD(500) */) {
debugSerial<<F("Force White\n"); debugSerial<<F("Force White\n");
itemType = CH_WHITE; itemType = CH_WHITE;
Par[1] = 0; //Zero saturation Par[1] = 0; //Zero saturation
@@ -869,7 +869,7 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send, int suffixCode
// 0..50 - white + RGB // 0..50 - white + RGB
//50..100 RGB //50..100 RGB
{ {
int k; // int k;
if (Par[1]<50 && iaddr>0) { // Using white if (Par[1]<50 && iaddr>0) { // Using white
DmxWrite(iaddr + 3, map((50 - Par[1]) * Par[2], 0, 5000, 0, 255)); DmxWrite(iaddr + 3, map((50 - Par[1]) * Par[2], 0, 5000, 0, 255));
int rgbvLevel = map (Par[1],0,50,0,255*2); int rgbvLevel = map (Par[1],0,50,0,255*2);
@@ -978,8 +978,8 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send, int suffixCode
//prescaler = 4 ---> PWM frequency is 120 Hz //prescaler = 4 ---> PWM frequency is 120 Hz
//prescaler = 5 ---> PWM frequency is 30 Hz //prescaler = 5 ---> PWM frequency is 30 Hz
//prescaler = 6 ---> PWM frequency is <20 Hz //prescaler = 6 ---> PWM frequency is <20 Hz
int tval = 7; // this is 111 in binary and is used as an eraser
#if defined(__AVR_ATmega2560__) #if defined(__AVR_ATmega2560__)
int tval = 7; // this is 111 in binary and is used as an eraser
TCCR4B &= ~tval; // this operation (AND plus NOT), set the three bits in TCCR2B to 0 TCCR4B &= ~tval; // this operation (AND plus NOT), set the three bits in TCCR2B to 0
TCCR3B &= ~tval; TCCR3B &= ~tval;
tval = 2; tval = 2;
@@ -997,9 +997,9 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send, int suffixCode
VacomSetFan(Par[0], cmd); VacomSetFan(Par[0], cmd);
break; break;
case CH_VCTEMP: { case CH_VCTEMP: {
Item it(itemArg->valuestring); // Item it(itemArg->valuestring);
if (it.isValid() && it.itemType == CH_VC) // if (it.isValid() && it.itemType == CH_VC)
VacomSetHeat(it.getArg(), Par[0], cmd); VacomSetHeat(Par[0], cmd);
break; break;
} }
#endif #endif
@@ -1172,8 +1172,8 @@ int Item::modbusDimmerSet(uint16_t value)
if (numpar >= (MODBUS_CMD_ARG_MAX_SCALE+1)) _maxval = aJson.getArrayItem(itemArg, MODBUS_CMD_ARG_MAX_SCALE)->valueint; if (numpar >= (MODBUS_CMD_ARG_MAX_SCALE+1)) _maxval = aJson.getArrayItem(itemArg, MODBUS_CMD_ARG_MAX_SCALE)->valueint;
int _regType = MODBUS_HOLDING_REG_TYPE; int _regType = MODBUS_HOLDING_REG_TYPE;
if (numpar >= (MODBUS_CMD_ARG_REG_TYPE+1)) _regType = aJson.getArrayItem(itemArg, MODBUS_CMD_ARG_REG_TYPE)->valueint; if (numpar >= (MODBUS_CMD_ARG_REG_TYPE+1)) _regType = aJson.getArrayItem(itemArg, MODBUS_CMD_ARG_REG_TYPE)->valueint;
if (_maxval) modbusDimmerSet(_addr, _reg, _regType, _mask, map(value, 0, 100, 0, _maxval)); if (_maxval) return modbusDimmerSet(_addr, _reg, _regType, _mask, map(value, 0, 100, 0, _maxval));
else modbusDimmerSet(_addr, _reg, _regType, _mask, value); else return modbusDimmerSet(_addr, _reg, _regType, _mask, value);
} }
} }
#endif #endif
@@ -1221,8 +1221,14 @@ int Item::VacomSetFan(int8_t val, int8_t cmd) {
#define a 0.1842f #define a 0.1842f
#define b -36.68f #define b -36.68f
int Item::VacomSetHeat(int addr, int8_t val, int8_t cmd) { int Item::VacomSetHeat(int8_t val, int8_t cmd) {
uint8_t result; uint8_t result;
int addr;
Item it(itemArg->valuestring);
if (it.isValid() && it.itemType == CH_VC) addr=it.getArg();
else return 0;
debugSerial<<F("VC_heat#")<<addr<<F("=")<<val<<F(" cmd=")<<cmd<<endl; debugSerial<<F("VC_heat#")<<addr<<F("=")<<val<<F(" cmd=")<<cmd<<endl;
if (modbusBusy) { if (modbusBusy) {
setCmd(cmd); setCmd(cmd);
@@ -1300,7 +1306,7 @@ int Item::modbusDimmerSet(int addr, uint16_t _reg, int _regType, int _mask, uint
int Item::checkFM() { int Item::checkFM() {
if (modbusBusy) return -1; if (modbusBusy) return -1;
if (checkModbusRetry()) return -2; if (checkVCRetry()) return -2;
modbusBusy = 1; modbusBusy = 1;
uint8_t j, result; uint8_t j, result;
@@ -1404,13 +1410,39 @@ int Item::checkFM() {
} }
boolean Item::checkModbusRetry() { boolean Item::checkModbusRetry() {
if (modbusBusy) return false;
// int cmd = getCmd();
if (getFlag(SEND_RETRY)) { // if last sending attempt of command was failed
int val = getVal();
debugSerial<<F("Retrying dimmer CMD\n");
clearFlag(SEND_RETRY); // Clean retry flag
modbusDimmerSet(val);
return true;
}
return false;
}
boolean Item::checkVCRetry() {
if (modbusBusy) return false;
int cmd = getCmd(); int cmd = getCmd();
if (getFlag(SEND_RETRY)) { // if last sending attempt of command was failed if (getFlag(SEND_RETRY)) { // if last sending attempt of command was failed
int val = getVal(); int val = getVal();
debugSerial<<F("Retrying CMD\n"); debugSerial<<F("Retrying VC CMD\n");
clearFlag(SEND_RETRY); // Clean retry flag clearFlag(SEND_RETRY); // Clean retry flag
//Ctrl(cmd,1,&val); // Execute command again VacomSetFan(val,cmd);
modbusDimmerSet(val); return true;
}
return false;
}
boolean Item::checkHeatRetry() {
if (modbusBusy) return false;
int cmd = getCmd();
if (getFlag(SEND_RETRY)) { // if last sending attempt of command was failed
int val = getVal();
debugSerial<<F("Retrying VC temp CMD\n");
clearFlag(SEND_RETRY); // Clean retry flag
VacomSetHeat(val,cmd);
return true; return true;
} }
return false; return false;
@@ -1537,6 +1569,11 @@ switch (cause)
sendDelayedStatus(); sendDelayedStatus();
return INTERVAL_CHECK_MODBUS; return INTERVAL_CHECK_MODBUS;
break; break;
case CH_VCTEMP:
checkHeatRetry();
sendDelayedStatus();
return INTERVAL_CHECK_MODBUS;
break;
/* case CH_RGB: //All channels with slider generate too many updates /* case CH_RGB: //All channels with slider generate too many updates
case CH_RGBW: case CH_RGBW:
case CH_DIMMER: case CH_DIMMER:

View File

@@ -193,7 +193,7 @@ class Item
protected: protected:
//short cmd2changeActivity(int lastActivity, short defaultCmd = CMD_SET); //short cmd2changeActivity(int lastActivity, short defaultCmd = CMD_SET);
int VacomSetFan (int8_t val, int8_t cmd=0); int VacomSetFan (int8_t val, int8_t cmd=0);
int VacomSetHeat(int addr, int8_t val, int8_t cmd=0); int VacomSetHeat(int8_t val, int8_t cmd=0);
int modbusDimmerSet(int addr, uint16_t _reg, int _regType, int _mask, uint16_t value); int modbusDimmerSet(int addr, uint16_t _reg, int _regType, int _mask, uint16_t value);
int modbusDimmerSet(uint16_t value); int modbusDimmerSet(uint16_t value);
void mb_fail(); void mb_fail();
@@ -201,6 +201,8 @@ class Item
int checkModbusDimmer(); int checkModbusDimmer();
int checkModbusDimmer(int data); int checkModbusDimmer(int data);
boolean checkModbusRetry(); boolean checkModbusRetry();
boolean checkVCRetry();
boolean checkHeatRetry();
void sendDelayedStatus(); void sendDelayedStatus();
int checkFM(); int checkFM();

View File

@@ -67,6 +67,9 @@ PWM Out
#include "main.h" #include "main.h"
#if defined(OTA)
#include <ArduinoOTA.h>
#endif
#if defined(__SAM3X8E__) #if defined(__SAM3X8E__)
DueFlashStorage EEPROM; DueFlashStorage EEPROM;
@@ -301,6 +304,11 @@ lan_status lanLoop() {
break; break;
case HAVE_IP_ADDRESS: case HAVE_IP_ADDRESS:
#ifdef OTA
// start the OTEthernet library with internal (flash) based storage
ArduinoOTA.begin(Ethernet.localIP(), "Lighthub", "password", InternalStorage);
#endif
if (!configOk) if (!configOk)
lanStatus = loadConfigFromHttp(0, NULL); lanStatus = loadConfigFromHttp(0, NULL);
else lanStatus = IP_READY_CONFIG_LOADED_CONNECTING_TO_BROKER; else lanStatus = IP_READY_CONFIG_LOADED_CONNECTING_TO_BROKER;
@@ -308,12 +316,15 @@ lan_status lanLoop() {
case IP_READY_CONFIG_LOADED_CONNECTING_TO_BROKER: case IP_READY_CONFIG_LOADED_CONNECTING_TO_BROKER:
wdt_res(); wdt_res();
ip_ready_config_loaded_connecting_to_broker(); ip_ready_config_loaded_connecting_to_broker();
break; break;
case RETAINING_COLLECTING: case RETAINING_COLLECTING:
if (millis() > nextLanCheckTime) { if (millis() > nextLanCheckTime) {
char buf[MQTT_TOPIC_LENGTH]; char buf[MQTT_TOPIC_LENGTH+1];
//Unsubscribe from status topics.. //Unsubscribe from status topics..
//strncpy_P(buf, outprefix, sizeof(buf)); //strncpy_P(buf, outprefix, sizeof(buf));
@@ -579,7 +590,7 @@ void ip_ready_config_loaded_connecting_to_broker() {
// wdt_en(); // wdt_en();
configOk = true; configOk = true;
// ... Temporary subscribe to status topic // ... Temporary subscribe to status topic
char buf[MQTT_TOPIC_LENGTH]; char buf[MQTT_TOPIC_LENGTH+1];
// strncpy_P(buf, outprefix, sizeof(buf)); // strncpy_P(buf, outprefix, sizeof(buf));
setTopic(buf,sizeof(buf),T_OUT); setTopic(buf,sizeof(buf),T_OUT);
@@ -1641,6 +1652,10 @@ void setupCmdArduino() {
} }
void loop_main() { void loop_main() {
#if defined(OTA)
ArduinoOTA.poll();
#endif
#if defined(M5STACK) #if defined(M5STACK)
// Initialize the M5Stack object // Initialize the M5Stack object
M5.update(); M5.update();

View File

@@ -73,7 +73,7 @@ return 1;
void i2cReset(){ void i2cReset(){
Wire.endTransmission(true); Wire.endTransmission(true);
#if defined (ARDUINO_ARCH_ESP8266) #if defined (SCL_RESET)
SCL_LOW(); SCL_LOW();
delay(300); delay(300);
SCL_HIGH(); SCL_HIGH();

View File

@@ -18,8 +18,17 @@
#define SCL_LOW() (GPES = (1 << twi_scl)) #define SCL_LOW() (GPES = (1 << twi_scl))
#define SCL_HIGH() (GPEC = (1 << twi_scl)) #define SCL_HIGH() (GPEC = (1 << twi_scl))
#define SCL_RESET
#endif #endif
/*
#if defined (__SAM3X8E__)
#define SCL_LOW() digitalWrite(21,LOW)
#define SCL_HIGH() digitalWrite(21,HIGH)
#define SCL_RESET
#endif
*/
#if defined (ARDUINO_ARCH_ESP32) #if defined (ARDUINO_ARCH_ESP32)
#undef WAK_PIN #undef WAK_PIN
//#ifndef WAK_PIN //#ifndef WAK_PIN

View File

@@ -29,7 +29,7 @@ default_envs =
; due-5100 ; due-5100
; Arduino DUE + Ethernet shield Wiznet 5500 ; Arduino DUE + Ethernet shield Wiznet 5500
; due-5500 due-5500
; ESP 8266 ; ESP 8266
; esp8266-wifi ; esp8266-wifi
@@ -86,6 +86,7 @@ lib_ignore =
SparkFun CCS811 Arduino Library SparkFun CCS811 Arduino Library
ESP8266HTTPClient ESP8266HTTPClient
M5Stack M5Stack
lib_deps = lib_deps =
https://github.com/anklimov/Arduino-Temperature-Control-Library.git https://github.com/anklimov/Arduino-Temperature-Control-Library.git
https://github.com/anklimov/DS2482_OneWire https://github.com/anklimov/DS2482_OneWire
@@ -102,6 +103,7 @@ lib_deps =
Streaming Streaming
https://github.com/anklimov/NRFFlashStorage https://github.com/anklimov/NRFFlashStorage
Adafruit NeoPixel Adafruit NeoPixel
ArduinoOTA
; https://github.com/livello/PrintEx#is-select-redecl ; https://github.com/livello/PrintEx#is-select-redecl
@@ -152,6 +154,7 @@ lib_deps =
https://github.com/sparkfun/SparkFun_CCS811_Arduino_Library.git https://github.com/sparkfun/SparkFun_CCS811_Arduino_Library.git
M5Stack M5Stack
Adafruit NeoPixel Adafruit NeoPixel
ArduinoOTA
[env:esp32-wifi] [env:esp32-wifi]
platform = espressif32 platform = espressif32
@@ -200,6 +203,8 @@ lib_deps =
;SparkFun CCS811 Arduino Library ;SparkFun CCS811 Arduino Library
https://github.com/sparkfun/SparkFun_CCS811_Arduino_Library.git https://github.com/sparkfun/SparkFun_CCS811_Arduino_Library.git
Adafruit NeoPixel Adafruit NeoPixel
ArduinoOTA
[env:due-5100] [env:due-5100]
platform = atmelsam platform = atmelsam
framework = arduino framework = arduino
@@ -242,6 +247,7 @@ lib_deps =
ClosedCube HDC1080 ClosedCube HDC1080
SparkFun CCS811 Arduino Library SparkFun CCS811 Arduino Library
Adafruit NeoPixel Adafruit NeoPixel
ArduinoOTA
[env:mega2560slim-5100] [env:mega2560slim-5100]
platform = atmelavr platform = atmelavr
@@ -282,6 +288,7 @@ lib_deps =
ClosedCube HDC1080 ClosedCube HDC1080
SparkFun CCS811 Arduino Library SparkFun CCS811 Arduino Library
Adafruit NeoPixel Adafruit NeoPixel
ArduinoOTA
[env:mega2560-5500] [env:mega2560-5500]
platform = atmelavr platform = atmelavr
@@ -321,12 +328,19 @@ lib_deps =
ClosedCube HDC1080 ClosedCube HDC1080
SparkFun CCS811 Arduino Library SparkFun CCS811 Arduino Library
Adafruit NeoPixel Adafruit NeoPixel
ArduinoOTA
[env:esp8266-wifi] [env:esp8266-wifi]
platform = espressif8266 platform = espressif8266
framework = arduino framework = arduino
board = nodemcuv2 board = nodemcuv2
upload_protocol = espota
upload_port = Lighthub.local
;192.168.88.46
upload_flags =
--auth=password
; --port=65280
build_flags = !python get_build_flags.py esp8266-wifi build_flags = !python get_build_flags.py esp8266-wifi
lib_ignore = lib_ignore =
DmxSimple DmxSimple
@@ -368,6 +382,7 @@ lib_deps =
ClosedCube HDC1080 ClosedCube HDC1080
SparkFun CCS811 Arduino Library SparkFun CCS811 Arduino Library
Adafruit NeoPixel Adafruit NeoPixel
ArduinoOTA
[env:mega2560-5100] [env:mega2560-5100]
platform = atmelavr platform = atmelavr
@@ -409,6 +424,7 @@ lib_deps =
ClosedCube HDC1080 ClosedCube HDC1080
SparkFun CCS811 Arduino Library SparkFun CCS811 Arduino Library
Adafruit NeoPixel Adafruit NeoPixel
ArduinoOTA
[env:due-5500] [env:due-5500]
platform = atmelsam platform = atmelsam
@@ -432,6 +448,7 @@ lib_ignore =
ESP_EEPROM ESP_EEPROM
EEPROM EEPROM
M5Stack M5Stack
ArduinoOTA
lib_deps = lib_deps =
https://github.com/sebnil/DueFlashStorage https://github.com/sebnil/DueFlashStorage
https://github.com/anklimov/Arduino-Temperature-Control-Library.git https://github.com/anklimov/Arduino-Temperature-Control-Library.git
@@ -456,6 +473,7 @@ lib_deps =
SparkFun CCS811 Arduino Library SparkFun CCS811 Arduino Library
Adafruit NeoPixel Adafruit NeoPixel
[env:lighthub21] [env:lighthub21]
platform = atmelsam platform = atmelsam
framework = arduino framework = arduino
@@ -500,6 +518,7 @@ lib_deps =
ClosedCube HDC1080 ClosedCube HDC1080
SparkFun CCS811 Arduino Library SparkFun CCS811 Arduino Library
Adafruit NeoPixel Adafruit NeoPixel
ArduinoOTA
[env:controllino] [env:controllino]
@@ -542,6 +561,7 @@ lib_deps =
ClosedCube HDC1080 ClosedCube HDC1080
SparkFun CCS811 Arduino Library SparkFun CCS811 Arduino Library
Adafruit NeoPixel Adafruit NeoPixel
ArduinoOTA
[env:stm32-enc2860] [env:stm32-enc2860]
platform = ststm32 platform = ststm32
@@ -588,3 +608,4 @@ lib_deps =
UIPEthernet UIPEthernet
https://github.com/anklimov/NRFFlashStorage https://github.com/anklimov/NRFFlashStorage
Adafruit NeoPixel Adafruit NeoPixel
ArduinoOTA