From 5737665a2f3445deccd611567e424f3243929dd7 Mon Sep 17 00:00:00 2001 From: Markus Past Date: Sun, 30 Dec 2018 11:45:21 +0100 Subject: [PATCH 1/3] MAX31855 driver for Sonoff-Tasmota - Initial commit --- sonoff/i18n.h | 2 + sonoff/language/en-GB.h | 3 + sonoff/my_user_config.h | 3 + sonoff/sonoff_template.h | 11 ++- sonoff/xsns_39_max31855.ino | 163 ++++++++++++++++++++++++++++++++++++ 5 files changed, 181 insertions(+), 1 deletion(-) create mode 100644 sonoff/xsns_39_max31855.ino diff --git a/sonoff/i18n.h b/sonoff/i18n.h index 2347cba22..a4de6d1bd 100644 --- a/sonoff/i18n.h +++ b/sonoff/i18n.h @@ -106,8 +106,10 @@ #define D_JSON_PRESSURE "Pressure" #define D_JSON_PRESSUREATSEALEVEL "SeaPressure" #define D_JSON_PRESSURE_UNIT "PressureUnit" +#define D_JSON_PROBETEMPERATURE "ProbeTemperature" #define D_JSON_PROGRAMFLASHSIZE "ProgramFlashSize" #define D_JSON_PROGRAMSIZE "ProgramSize" +#define D_JSON_REFERENCETEMPERATURE "ReferenceTemperature" #define D_JSON_RESET "Reset" #define D_JSON_RESTARTING "Restarting" #define D_JSON_RESTARTREASON "RestartReason" diff --git a/sonoff/language/en-GB.h b/sonoff/language/en-GB.h index 2ea9c249a..20b4f8ddb 100644 --- a/sonoff/language/en-GB.h +++ b/sonoff/language/en-GB.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/my_user_config.h b/sonoff/my_user_config.h index 8684ac7a0..69f21dec7 100644 --- a/sonoff/my_user_config.h +++ b/sonoff/my_user_config.h @@ -285,6 +285,9 @@ // #define W1_PARASITE_POWER // If using USE_DS18x20 then optimize for parasite powered sensors // #define DS18B20_INTERNAL_PULLUP // Use INPUT_PULLUP internal pullup resistors for single DS18B20 +// -- SPI sensors ---------------------------------- +#define USE_MAX31855 // Enable MAX31855 K-Type thermocouple sensor + // -- I2C sensors --------------------------------- #define USE_I2C // I2C using library wire (+10k code, 0k2 mem, 124 iram) diff --git a/sonoff/sonoff_template.h b/sonoff/sonoff_template.h index 48af9cf4b..d8a9296e7 100644 --- a/sonoff/sonoff_template.h +++ b/sonoff/sonoff_template.h @@ -143,6 +143,9 @@ enum UserSelectablePins { GPIO_RF_SENSOR, // Rf receiver with sensor decoding GPIO_AZ_TXD, // AZ-Instrument 7798 Serial interface GPIO_AZ_RXD, // AZ-Instrument 7798 Serial interface + GPIO_MAX31855CS, // MAX31855 Serial interface + GPIO_MAX31855CLK, // MAX31855 Serial interface + GPIO_MAX31855DO, // MAX31855 Serial interface GPIO_SENSOR_END }; // Programmer selectable GPIO functionality offset by user selectable GPIOs @@ -204,7 +207,8 @@ const char kSensorNames[] PROGMEM = D_SENSOR_MGC3130_XFER "|" D_SENSOR_MGC3130_RESET "|" D_SENSOR_SSPI_MISO "|" D_SENSOR_SSPI_MOSI "|" D_SENSOR_SSPI_SCLK "|" D_SENSOR_SSPI_CS "|" D_SENSOR_SSPI_DC "|" D_SENSOR_RF_SENSOR "|" - D_SENSOR_AZ_TX "|" D_SENSOR_AZ_RX; + D_SENSOR_AZ_TX "|" D_SENSOR_AZ_RX "|" + D_SENSOR_MAX31855_CS "|" D_SENSOR_MAX31855_CLK "|" D_SENSOR_MAX31855_DO; /********************************************************************************************/ @@ -461,6 +465,11 @@ const uint8_t kGpioNiceList[] PROGMEM = { GPIO_AZ_TXD, // AZ-Instrument 7798 CO2 datalogger Serial interface GPIO_AZ_RXD // AZ-Instrument 7798 CO2 datalogger Serial interface #endif +#ifdef USE_MAX31855 + GPIO_MAX31855CS, // MAX31855 Serial interface + GPIO_MAX31855CLK, // MAX31855 Serial interface + GPIO_MAX31855DO, // MAX31855 Serial interface +#endif }; const uint8_t kModuleNiceList[MAXMODULE] PROGMEM = { diff --git a/sonoff/xsns_39_max31855.ino b/sonoff/xsns_39_max31855.ino new file mode 100644 index 000000000..2668f914c --- /dev/null +++ b/sonoff/xsns_39_max31855.ino @@ -0,0 +1,163 @@ +/* + xsns_39_max31855.ino - MAX31855 thermocouple sensor support for Sonoff-Tasmota + + Copyright (C) 2018 Markus Past + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +//#define USE_MAX31855 + +#ifdef USE_MAX31855 + +#define XSNS_39 39 + +bool initialized = false; + +struct MAX31855_ResultStruct{ + uint8_t ErrorCode; + float ProbeTemperature; + float ReferenceTemperature; +} MAX31855_Result; + +void MAX31855_Init(void){ + if(initialized) + return; + + pinMode(pin[GPIO_MAX31855CS], OUTPUT); + pinMode(pin[GPIO_MAX31855CLK], OUTPUT); + pinMode(pin[GPIO_MAX31855DO], INPUT); + digitalWrite(pin[GPIO_MAX31855CS], HIGH); + digitalWrite(pin[GPIO_MAX31855CLK], LOW); + + initialized = true; +} + +void MAX31855_GetResult(void){ + int32_t RawData = MAX31855_ShiftIn(32); + uint8_t probeerror = RawData & 0x7; + + MAX31855_Result.ErrorCode = probeerror; + MAX31855_Result.ReferenceTemperature = MAX31855_GetReferenceTemperature(RawData); + if(probeerror) + MAX31855_Result.ProbeTemperature = NAN; + else + MAX31855_Result.ProbeTemperature = MAX31855_GetProbeTemperature(RawData); +} + +float MAX31855_GetProbeTemperature(int32_t RawData){ + if(RawData & 0x80000000) + RawData = (RawData >> 18) | 0xFFFFC000; + else + RawData >>= 18; + + float result = (RawData * 0.25); + + return (Settings.flag.temperature_conversion) ? ConvertTemp(result) : result; +} + +float MAX31855_GetReferenceTemperature(int32_t RawData){ + if(RawData & 0x8000) + RawData = (RawData >> 4) | 0xFFFFF000; + else + RawData = (RawData >> 4) & 0x00000FFF; + + float result = (RawData * 0.0625); + + return (Settings.flag.temperature_conversion) ? ConvertTemp(result) : result; +} + +int32_t MAX31855_ShiftIn(uint8_t Length){ + int32_t dataIn = 0; + + digitalWrite(pin[GPIO_MAX31855CS], LOW); + delayMicroseconds(1); + + for(uint8_t i = 0; i < Length; i++) + { + digitalWrite(pin[GPIO_MAX31855CLK], LOW); + delayMicroseconds(1); + dataIn <<= 1; + if(digitalRead(pin[GPIO_MAX31855DO])) + dataIn |= 1; + digitalWrite(pin[GPIO_MAX31855CLK], HIGH); + delayMicroseconds(1); + } + + digitalWrite(pin[GPIO_MAX31855CS], HIGH); + digitalWrite(pin[GPIO_MAX31855CLK], LOW); + return dataIn; +} + +void MAX31855_Show(bool Json){ + char probetemp[33]; + char referencetemp[33]; + dtostrfd(MAX31855_Result.ProbeTemperature, Settings.flag2.temperature_resolution, probetemp); + dtostrfd(MAX31855_Result.ReferenceTemperature, Settings.flag2.temperature_resolution, referencetemp); + + if(Json){ + snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"%s\":{\"" D_JSON_PROBETEMPERATURE "\":%s,\"" D_JSON_REFERENCETEMPERATURE "\":%s,\"" D_JSON_ERROR "\":%d}"), \ + mqtt_data, "MAX31855", probetemp, referencetemp, MAX31855_Result.ErrorCode); + } else { +#ifdef USE_WEBSERVER + snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_TEMP, mqtt_data, "MAX31855", probetemp, TempUnit()); +#endif // USE_WEBSERVER + } +} + + +// void MAX31855_ShowDebug(void){ +// char probetemp[33]; +// char referencetemp[33]; +// dtostrfd(MAX31855_Result.ProbeTemperature, Settings.flag2.temperature_resolution, probetemp); +// dtostrfd(MAX31855_Result.ReferenceTemperature, Settings.flag2.temperature_resolution, referencetemp); + +// snprintf_P(mqtt_data, sizeof(mqtt_data), "%s %d %s %d %s %d %s %d %s %d %s %s %s %s %s %d", \ +// "CS:", pin[GPIO_MAX31855CS], "CLK:", pin[GPIO_MAX31855CLK], "DO:", pin[GPIO_MAX31855DO], \ +// "DO-State:", digitalRead(pin[GPIO_MAX31855DO]), \ +// "RAW-Data:", MAX31855_ShiftIn(32), \ +// "Probe-Temp:", probetemp, "Internal-Temp:", referencetemp, "Error:", MAX31855_Result.ErrorCode); +// } + +/*********************************************************************************************\ + * Interface +\*********************************************************************************************/ + +boolean Xsns39(byte function) +{ + boolean result = false; + if((pin[GPIO_MAX31855CS] < 99) && (pin[GPIO_MAX31855CLK] < 99) && (pin[GPIO_MAX31855DO] < 99)){ + + switch (function) { + case FUNC_INIT: + MAX31855_Init(); + break; + case FUNC_EVERY_SECOND: + MAX31855_GetResult(); + break; + case FUNC_JSON_APPEND: + //MAX31855_ShowDebug(); + MAX31855_Show(true); + break; +#ifdef USE_WEBSERVER + case FUNC_WEB_APPEND: + MAX31855_Show(false); + break; +#endif // USE_WEBSERVER + } + } + return result; +} + +#endif // USE_MAX31855 \ No newline at end of file From 1e125fc4c6160785a93b7dd821f8b640d7a9884a Mon Sep 17 00:00:00 2001 From: Markus Past Date: Sun, 30 Dec 2018 12:47:59 +0100 Subject: [PATCH 2/3] added some comments --- sonoff/xsns_39_max31855.ino | 83 +++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 35 deletions(-) diff --git a/sonoff/xsns_39_max31855.ino b/sonoff/xsns_39_max31855.ino index 2668f914c..02288ca4b 100644 --- a/sonoff/xsns_39_max31855.ino +++ b/sonoff/xsns_39_max31855.ino @@ -17,8 +17,6 @@ along with this program. If not, see . */ -//#define USE_MAX31855 - #ifdef USE_MAX31855 #define XSNS_39 39 @@ -26,76 +24,96 @@ bool initialized = false; struct MAX31855_ResultStruct{ - uint8_t ErrorCode; - float ProbeTemperature; - float ReferenceTemperature; + uint8_t ErrorCode; // Error Codes: 0 = No Error / 1 = TC open circuit / 2 = TC short to GND / 4 = TC short to VCC + float ProbeTemperature; // Measured temperature of the 'hot' TC junction (probe temp) + float ReferenceTemperature; // Measured temperature of the 'cold' TC junction (reference temp) } MAX31855_Result; void MAX31855_Init(void){ if(initialized) return; + // Set GPIO modes for SW-SPI pinMode(pin[GPIO_MAX31855CS], OUTPUT); pinMode(pin[GPIO_MAX31855CLK], OUTPUT); pinMode(pin[GPIO_MAX31855DO], INPUT); + + // Chip not selected / Clock low digitalWrite(pin[GPIO_MAX31855CS], HIGH); digitalWrite(pin[GPIO_MAX31855CLK], LOW); initialized = true; } +/* +* MAX31855_GetResult(void) +* Acquires the raw data via SPI, checks for MAX31855 errors and fills result structure +*/ void MAX31855_GetResult(void){ int32_t RawData = MAX31855_ShiftIn(32); uint8_t probeerror = RawData & 0x7; MAX31855_Result.ErrorCode = probeerror; MAX31855_Result.ReferenceTemperature = MAX31855_GetReferenceTemperature(RawData); - if(probeerror) - MAX31855_Result.ProbeTemperature = NAN; + if(probeerror) + MAX31855_Result.ProbeTemperature = NAN; // Return NaN if MAX31855 reports an error else MAX31855_Result.ProbeTemperature = MAX31855_GetProbeTemperature(RawData); } + +/* +* MAX31855_GetProbeTemperature(int32_t RawData) +* Decodes and returns the temperature of TCs 'hot' junction from RawData +*/ float MAX31855_GetProbeTemperature(int32_t RawData){ if(RawData & 0x80000000) - RawData = (RawData >> 18) | 0xFFFFC000; + RawData = (RawData >> 18) | 0xFFFFC000; // Negative value - Drop lower 18 bits and extend to negative number else - RawData >>= 18; + RawData >>= 18; // Positiv value - Drop lower 18 bits - float result = (RawData * 0.25); + float result = (RawData * 0.25); // MAX31855 LSB resolution is 0.25°C for probe temperature - return (Settings.flag.temperature_conversion) ? ConvertTemp(result) : result; + return (Settings.flag.temperature_conversion) ? ConvertTemp(result) : result; // Check if we have to convert to Fahrenheit } +/* +* MAX31855_GetReferenceTemperature(int32_t RawData) +* Decodes and returns the temperature of TCs 'cold' junction from RawData +*/ float MAX31855_GetReferenceTemperature(int32_t RawData){ if(RawData & 0x8000) - RawData = (RawData >> 4) | 0xFFFFF000; + RawData = (RawData >> 4) | 0xFFFFF000; // Negative value - Drop lower 4 bits and extend to negative number else - RawData = (RawData >> 4) & 0x00000FFF; + RawData = (RawData >> 4) & 0x00000FFF; // Positiv value - Drop lower 4 bits and mask out remaining bits (probe temp, error bit, etc.) - float result = (RawData * 0.0625); + float result = (RawData * 0.0625); // MAX31855 LSB resolution is 0.0625°C for reference temperature - return (Settings.flag.temperature_conversion) ? ConvertTemp(result) : result; + return (Settings.flag.temperature_conversion) ? ConvertTemp(result) : result; // Check if we have to convert to Fahrenheit } +/* +* MAX31855_ShiftIn(uint8_t Length) +* Communicates with MAX31855 via SW-SPI and returns the raw data read from the chip +*/ int32_t MAX31855_ShiftIn(uint8_t Length){ int32_t dataIn = 0; - digitalWrite(pin[GPIO_MAX31855CS], LOW); - delayMicroseconds(1); + digitalWrite(pin[GPIO_MAX31855CS], LOW); // CS = LOW -> Start SPI communication + delayMicroseconds(1); // CS fall to output enable = max. 100ns for(uint8_t i = 0; i < Length; i++) { digitalWrite(pin[GPIO_MAX31855CLK], LOW); - delayMicroseconds(1); + delayMicroseconds(1); // CLK pulse width low = min. 100ns / CLK fall to output valid = max. 40ns dataIn <<= 1; if(digitalRead(pin[GPIO_MAX31855DO])) dataIn |= 1; digitalWrite(pin[GPIO_MAX31855CLK], HIGH); - delayMicroseconds(1); + delayMicroseconds(1); // CLK pulse width high = min. 100ns } - digitalWrite(pin[GPIO_MAX31855CS], HIGH); + digitalWrite(pin[GPIO_MAX31855CS], HIGH); // CS = HIGH -> End SPI communication digitalWrite(pin[GPIO_MAX31855CLK], LOW); return dataIn; } @@ -109,6 +127,16 @@ void MAX31855_Show(bool Json){ if(Json){ snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"%s\":{\"" D_JSON_PROBETEMPERATURE "\":%s,\"" D_JSON_REFERENCETEMPERATURE "\":%s,\"" D_JSON_ERROR "\":%d}"), \ mqtt_data, "MAX31855", probetemp, referencetemp, MAX31855_Result.ErrorCode); +#ifdef USE_DOMOTICZ + if (0 == tele_period) { + DomoticzSensor(DZ_TEMP, probetemp); + } +#endif // USE_DOMOTICZ +#ifdef USE_KNX + if (0 == tele_period) { + KnxSensor(KNX_TEMPERATURE, MAX31855_Result.ProbeTemperature); + } +#endif // USE_KNX } else { #ifdef USE_WEBSERVER snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_TEMP, mqtt_data, "MAX31855", probetemp, TempUnit()); @@ -116,20 +144,6 @@ void MAX31855_Show(bool Json){ } } - -// void MAX31855_ShowDebug(void){ -// char probetemp[33]; -// char referencetemp[33]; -// dtostrfd(MAX31855_Result.ProbeTemperature, Settings.flag2.temperature_resolution, probetemp); -// dtostrfd(MAX31855_Result.ReferenceTemperature, Settings.flag2.temperature_resolution, referencetemp); - -// snprintf_P(mqtt_data, sizeof(mqtt_data), "%s %d %s %d %s %d %s %d %s %d %s %s %s %s %s %d", \ -// "CS:", pin[GPIO_MAX31855CS], "CLK:", pin[GPIO_MAX31855CLK], "DO:", pin[GPIO_MAX31855DO], \ -// "DO-State:", digitalRead(pin[GPIO_MAX31855DO]), \ -// "RAW-Data:", MAX31855_ShiftIn(32), \ -// "Probe-Temp:", probetemp, "Internal-Temp:", referencetemp, "Error:", MAX31855_Result.ErrorCode); -// } - /*********************************************************************************************\ * Interface \*********************************************************************************************/ @@ -147,7 +161,6 @@ boolean Xsns39(byte function) MAX31855_GetResult(); break; case FUNC_JSON_APPEND: - //MAX31855_ShowDebug(); MAX31855_Show(true); break; #ifdef USE_WEBSERVER From 9d62f3cb49429c4de8cd8d3080625d981ae438d7 Mon Sep 17 00:00:00 2001 From: Markus Past Date: Sun, 30 Dec 2018 13:34:20 +0100 Subject: [PATCH 3/3] added missing languages --- sonoff/language/bg-BG.h | 3 +++ sonoff/language/cs-CZ.h | 3 +++ sonoff/language/de-DE.h | 3 +++ sonoff/language/el-GR.h | 3 +++ sonoff/language/es-AR.h | 3 +++ sonoff/language/fr-FR.h | 3 +++ sonoff/language/he-HE.h | 3 +++ sonoff/language/hu-HU.h | 3 +++ sonoff/language/it-IT.h | 3 +++ sonoff/language/nl-NL.h | 3 +++ sonoff/language/pl-PL.h | 3 +++ sonoff/language/pt-BR.h | 3 +++ sonoff/language/pt-PT.h | 3 +++ sonoff/language/ru-RU.h | 3 +++ sonoff/language/sk-SK.h | 3 +++ sonoff/language/sv-SE.h | 3 +++ sonoff/language/tr-TR.h | 3 +++ sonoff/language/uk-UK.h | 3 +++ sonoff/language/zh-CN.h | 3 +++ sonoff/language/zh-TW.h | 3 +++ 20 files changed, 60 insertions(+) diff --git a/sonoff/language/bg-BG.h b/sonoff/language/bg-BG.h index 222c62b58..cf899685f 100644 --- a/sonoff/language/bg-BG.h +++ b/sonoff/language/bg-BG.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF датчик" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/cs-CZ.h b/sonoff/language/cs-CZ.h index 45f55af6a..21366053b 100644 --- a/sonoff/language/cs-CZ.h +++ b/sonoff/language/cs-CZ.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/de-DE.h b/sonoff/language/de-DE.h index 23d8de9ed..80ea03d1e 100644 --- a/sonoff/language/de-DE.h +++ b/sonoff/language/de-DE.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/el-GR.h b/sonoff/language/el-GR.h index a8b48ed35..b36efe3b4 100644 --- a/sonoff/language/el-GR.h +++ b/sonoff/language/el-GR.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/es-AR.h b/sonoff/language/es-AR.h index fc50b9d6f..dbf69404f 100644 --- a/sonoff/language/es-AR.h +++ b/sonoff/language/es-AR.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/fr-FR.h b/sonoff/language/fr-FR.h index 0638b408a..1a3cfae5f 100644 --- a/sonoff/language/fr-FR.h +++ b/sonoff/language/fr-FR.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/he-HE.h b/sonoff/language/he-HE.h index cd1b0e92e..cbfacad14 100644 --- a/sonoff/language/he-HE.h +++ b/sonoff/language/he-HE.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/hu-HU.h b/sonoff/language/hu-HU.h index 244d55776..ea2f65ea0 100644 --- a/sonoff/language/hu-HU.h +++ b/sonoff/language/hu-HU.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/it-IT.h b/sonoff/language/it-IT.h index a6d0d693c..b497ef04b 100644 --- a/sonoff/language/it-IT.h +++ b/sonoff/language/it-IT.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/nl-NL.h b/sonoff/language/nl-NL.h index b3bf10989..df9d4dcb1 100644 --- a/sonoff/language/nl-NL.h +++ b/sonoff/language/nl-NL.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/pl-PL.h b/sonoff/language/pl-PL.h index d80826751..7a42aff61 100644 --- a/sonoff/language/pl-PL.h +++ b/sonoff/language/pl-PL.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/pt-BR.h b/sonoff/language/pt-BR.h index 7add978f0..c62816af8 100644 --- a/sonoff/language/pt-BR.h +++ b/sonoff/language/pt-BR.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/pt-PT.h b/sonoff/language/pt-PT.h index 9869762b8..5e2b13255 100644 --- a/sonoff/language/pt-PT.h +++ b/sonoff/language/pt-PT.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/ru-RU.h b/sonoff/language/ru-RU.h index d0a3f6933..ef8aaccef 100644 --- a/sonoff/language/ru-RU.h +++ b/sonoff/language/ru-RU.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "А" diff --git a/sonoff/language/sk-SK.h b/sonoff/language/sk-SK.h index f46372426..16da51d32 100644 --- a/sonoff/language/sk-SK.h +++ b/sonoff/language/sk-SK.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Senzor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/sv-SE.h b/sonoff/language/sv-SE.h index f36162a4b..7f1b4ba5a 100644 --- a/sonoff/language/sv-SE.h +++ b/sonoff/language/sv-SE.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/tr-TR.h b/sonoff/language/tr-TR.h index 06d82b9cb..4ff68c52f 100755 --- a/sonoff/language/tr-TR.h +++ b/sonoff/language/tr-TR.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/uk-UK.h b/sonoff/language/uk-UK.h index 509c90753..5043c857c 100644 --- a/sonoff/language/uk-UK.h +++ b/sonoff/language/uk-UK.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "А" diff --git a/sonoff/language/zh-CN.h b/sonoff/language/zh-CN.h index 05bedca81..858d45186 100644 --- a/sonoff/language/zh-CN.h +++ b/sonoff/language/zh-CN.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "安" diff --git a/sonoff/language/zh-TW.h b/sonoff/language/zh-TW.h index 2780181aa..b1a46d3a4 100644 --- a/sonoff/language/zh-TW.h +++ b/sonoff/language/zh-TW.h @@ -540,6 +540,9 @@ #define D_SENSOR_RF_SENSOR "RF Sensor" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" +#define D_SENSOR_MAX31855_CS "MAX31855 CS" +#define D_SENSOR_MAX31855_CLK "MAX31855 CLK" +#define D_SENSOR_MAX31855_DO "MAX31855 DO" // Units #define D_UNIT_AMPERE "安"