Merge pull request #13111 from s-hadinger/denky_idf44

Fix Teleinfo for Denky D4
This commit is contained in:
s-hadinger 2021-09-12 21:09:40 +02:00 committed by GitHub
commit b382431cbc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 17 additions and 39 deletions

View File

@ -562,21 +562,9 @@ void TInfoDrvInit(void) {
// If one TInfo RX pin declared use it // If one TInfo RX pin declared use it
if (PinUsed(GPIO_TELEINFO_RX)) { if (PinUsed(GPIO_TELEINFO_RX)) {
tic_rx_pin = Pin(GPIO_TELEINFO_RX); tic_rx_pin = Pin(GPIO_TELEINFO_RX);
} else {
// Case we are on denky V4 board without any TInfo RX pin selected
#ifdef ARDUINO_DENKY_PICOV3
tic_rx_pin = 8;
AddLog(LOG_LEVEL_INFO, PSTR("TIC: Denky D4 board, RX on GPIO%d"), tic_rx_pin);
#endif
}
// Enable teleinfo
if (tic_rx_pin != NOT_A_PIN) {
TasmotaGlobal.energy_driver = XNRG_15; TasmotaGlobal.energy_driver = XNRG_15;
Energy.voltage_available = false; Energy.voltage_available = false;
Energy.phase_count = 1; Energy.phase_count = 1;
} else {
AddLog(LOG_LEVEL_ERROR, PSTR("TIC: Device has no RX pin"));
} }
} }
@ -589,6 +577,7 @@ Comments: -
====================================================================== */ ====================================================================== */
void TInfoInit(void) void TInfoInit(void)
{ {
if (!PinUsed(GPIO_TELEINFO_RX)) { return; } // ignore if pin not set
int baudrate; int baudrate;
// Deprecated SetOption102 - Set Baud rate for Teleinfo serial communication (0 = 1200 or 1 = 9600) // Deprecated SetOption102 - Set Baud rate for Teleinfo serial communication (0 = 1200 or 1 = 9600)
@ -611,8 +600,6 @@ void TInfoInit(void)
pinMode(en_pin, OUTPUT); pinMode(en_pin, OUTPUT);
digitalWrite(en_pin, HIGH); digitalWrite(en_pin, HIGH);
AddLog(LOG_LEVEL_INFO, PSTR("TIC: Enable with GPIO%d"), en_pin); AddLog(LOG_LEVEL_INFO, PSTR("TIC: Enable with GPIO%d"), en_pin);
} else {
AddLog(LOG_LEVEL_INFO, PSTR("TIC: always enabled"));
} }
#ifdef ESP8266 #ifdef ESP8266
@ -626,11 +613,7 @@ void TInfoInit(void)
TInfoSerial = new TasmotaSerial(tic_rx_pin, -1, 1, 0, serial_buffer_size); TInfoSerial = new TasmotaSerial(tic_rx_pin, -1, 1, 0, serial_buffer_size);
#endif // ESP32 #endif // ESP32
// Trick here even using SERIAL_7E1 or TS_SERIAL_7E1 if (TInfoSerial->begin(baudrate, SERIAL_7E1)) {
// this is not working, need to call SetSerialConfig after
if (TInfoSerial->begin(baudrate)) {
#ifdef ESP8266 #ifdef ESP8266
if (TInfoSerial->hardwareSerial() ) { if (TInfoSerial->hardwareSerial() ) {
ClaimSerial(); ClaimSerial();
@ -647,10 +630,6 @@ void TInfoInit(void)
AddLog(LOG_LEVEL_INFO, PSTR("TIC: using software serial")); AddLog(LOG_LEVEL_INFO, PSTR("TIC: using software serial"));
} }
#endif // ESP8266 #endif // ESP8266
#ifdef ESP32
SetSerialConfig(TS_SERIAL_7E1);
AddLog(LOG_LEVEL_INFO, PSTR("TIC: using ESP32 hardware serial"));
#endif // ESP32
// Init teleinfo // Init teleinfo
tinfo.init(tinfo_mode); tinfo.init(tinfo_mode);
// Attach needed callbacks // Attach needed callbacks
@ -666,7 +645,6 @@ void TInfoInit(void)
AddLog(LOG_LEVEL_INFO, PSTR("TIC: Sending only one frame over %d "), raw_skip+1); AddLog(LOG_LEVEL_INFO, PSTR("TIC: Sending only one frame over %d "), raw_skip+1);
} }
} }
AddLog(LOG_LEVEL_INFO, PSTR("TIC: Ready"));
} }
} }
@ -1029,27 +1007,27 @@ bool Xnrg15(uint8_t function)
bool result = false; bool result = false;
switch (function) switch (function)
{ {
case FUNC_EVERY_250_MSECOND:
TInfoProcess();
break;
case FUNC_COMMAND:
result = TInfoCmd();
break;
case FUNC_JSON_APPEND:
TInfoShow(1);
break;
#ifdef USE_WEBSERVER
case FUNC_WEB_SENSOR:
TInfoShow(0);
break;
#endif // USE_WEBSERVER
case FUNC_INIT: case FUNC_INIT:
TInfoInit(); TInfoInit();
break; break;
case FUNC_PRE_INIT: case FUNC_PRE_INIT:
TInfoDrvInit(); TInfoDrvInit();
break; break;
case FUNC_EVERY_250_MSECOND:
if (tinfo_found) { TInfoProcess(); }
break;
case FUNC_COMMAND:
if (tinfo_found) { result = TInfoCmd(); }
break;
case FUNC_JSON_APPEND:
if (tinfo_found) { TInfoShow(1); }
break;
#ifdef USE_WEBSERVER
case FUNC_WEB_SENSOR:
if (tinfo_found) { TInfoShow(0); }
break;
#endif // USE_WEBSERVER
} }
return result; return result;
} }