mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-29 05:36:39 +00:00
v5.11.1d - Add command State and fixes
5.11.1d * Add locale Decimal Separator to Web sensor page * Add command State to retrieve device state information (same data as teleperiod state and status 11 in slightly different JSON format) * Extent state information with Light parameters * Fix IRSend parameter translation (#1636) * Add optional login to Webserver AP mode (#1587, #1635) * Fix BME680 teleperiod resistance measuring (#1647)
This commit is contained in:
parent
1538d30c96
commit
c14234394a
@ -1,7 +1,7 @@
|
|||||||
## Sonoff-Tasmota
|
## Sonoff-Tasmota
|
||||||
Provide ESP8266 based Sonoff by [iTead Studio](https://www.itead.cc/) and ElectroDragon IoT Relay with Serial, Web and MQTT control allowing 'Over the Air' or OTA firmware updates using Arduino IDE.
|
Provide ESP8266 based Sonoff by [iTead Studio](https://www.itead.cc/) and ElectroDragon IoT Relay with Serial, Web and MQTT control allowing 'Over the Air' or OTA firmware updates using Arduino IDE.
|
||||||
|
|
||||||
Current version is **5.11.1c** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/development/sonoff/_releasenotes.ino) for change information.
|
Current version is **5.11.1d** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/development/sonoff/_releasenotes.ino) for change information.
|
||||||
|
|
||||||
### ATTENTION All versions
|
### ATTENTION All versions
|
||||||
|
|
||||||
|
@ -1,4 +1,12 @@
|
|||||||
/* 5.11.1c
|
/* 5.11.1d
|
||||||
|
* Add locale Decimal Separator to Web sensor page
|
||||||
|
* Add command State to retrieve device state information (same data as teleperiod state and status 11 in slightly different JSON format)
|
||||||
|
* Extent state information with Light parameters
|
||||||
|
* Fix IRSend parameter translation (#1636)
|
||||||
|
* Add optional login to Webserver AP mode (#1587, #1635)
|
||||||
|
* Fix BME680 teleperiod resistance measuring (#1647)
|
||||||
|
*
|
||||||
|
* 5.11.1c
|
||||||
* Make command color parameter input less strict to ease Hass support
|
* Make command color parameter input less strict to ease Hass support
|
||||||
* Add ColorTemperature to light status message
|
* Add ColorTemperature to light status message
|
||||||
* Change PubSubClient.h define MQTT_MAX_PACKET_SIZE from 512 to 1000 for Hass support
|
* Change PubSubClient.h define MQTT_MAX_PACKET_SIZE from 512 to 1000 for Hass support
|
||||||
|
@ -166,6 +166,7 @@
|
|||||||
#define D_STATUS9_MARGIN "PTH"
|
#define D_STATUS9_MARGIN "PTH"
|
||||||
#define D_STATUS10_SENSOR "SNS"
|
#define D_STATUS10_SENSOR "SNS"
|
||||||
#define D_STATUS11_STATUS "STS"
|
#define D_STATUS11_STATUS "STS"
|
||||||
|
#define D_CMND_STATE "State"
|
||||||
#define D_CMND_POWER "Power"
|
#define D_CMND_POWER "Power"
|
||||||
#define D_CMND_POWERONSTATE "PowerOnState"
|
#define D_CMND_POWERONSTATE "PowerOnState"
|
||||||
#define D_CMND_PULSETIME "PulseTime"
|
#define D_CMND_PULSETIME "PulseTime"
|
||||||
@ -255,7 +256,18 @@
|
|||||||
|
|
||||||
// Commands xdrv_02_irremote.ino
|
// Commands xdrv_02_irremote.ino
|
||||||
#define D_CMND_IRSEND "IRSend"
|
#define D_CMND_IRSEND "IRSend"
|
||||||
|
#define D_JSON_INVALID_JSON "Invalid JSON"
|
||||||
|
#define D_JSON_PROTOCOL_NOT_SUPPORTED "Protocol not supported"
|
||||||
|
#define D_JSON_IR_PROTOCOL "PROTOCOL"
|
||||||
|
#define D_JSON_IR_BITS "BITS"
|
||||||
|
#define D_JSON_IR_DATA "DATA"
|
||||||
#define D_CMND_IRHVAC "IRHVAC"
|
#define D_CMND_IRHVAC "IRHVAC"
|
||||||
|
#define D_JSON_IRHVAC_VENDOR "VENDOR"
|
||||||
|
#define D_JSON_IRHVAC_POWER "POWER"
|
||||||
|
#define D_JSON_IRHVAC_MODE "MODE"
|
||||||
|
#define D_JSON_IRHVAC_FANSPEED "FANSPEED"
|
||||||
|
#define D_JSON_IRHVAC_TEMP "TEMP"
|
||||||
|
#define D_JSON_IRRECEIVED "IrReceived"
|
||||||
|
|
||||||
// Commands xdrv_03_energy.ino
|
// Commands xdrv_03_energy.ino
|
||||||
#define D_CMND_POWERLOW "PowerLow"
|
#define D_CMND_POWERLOW "PowerLow"
|
||||||
|
@ -335,19 +335,6 @@
|
|||||||
#define D_HUE_POST_ARGS "Hue POST args"
|
#define D_HUE_POST_ARGS "Hue POST args"
|
||||||
#define D_3_RESPONSE_PACKETS_SENT "3 Antwortpakete gesendet"
|
#define D_3_RESPONSE_PACKETS_SENT "3 Antwortpakete gesendet"
|
||||||
|
|
||||||
// xdrv_02_irremote.ino
|
|
||||||
#define D_JSON_INVALID_JSON "ungültiger JSON"
|
|
||||||
#define D_JSON_PROTOCOL_NOT_SUPPORTED "Protokoll nicht unterstützt"
|
|
||||||
#define D_JSON_IR_PROTOCOL "PROTOKOLL"
|
|
||||||
#define D_JSON_IR_BITS "BITS"
|
|
||||||
#define D_JSON_IR_DATA "DATEN"
|
|
||||||
#define D_JSON_IRHVAC_VENDOR "HERSTELLER"
|
|
||||||
#define D_JSON_IRHVAC_POWER "STROM"
|
|
||||||
#define D_JSON_IRHVAC_MODE "MODUS"
|
|
||||||
#define D_JSON_IRHVAC_FANSPEED "LÜFTERGESCHWINDIGKEIT"
|
|
||||||
#define D_JSON_IRHVAC_TEMP "TEMPERATUR"
|
|
||||||
#define D_JSON_IRRECEIVED "IR empfangen"
|
|
||||||
|
|
||||||
// xdrv_05_domoticz.ino
|
// xdrv_05_domoticz.ino
|
||||||
#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
|
#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
|
||||||
#define D_DOMOTICZ_IDX "Idx"
|
#define D_DOMOTICZ_IDX "Idx"
|
||||||
|
@ -335,19 +335,6 @@
|
|||||||
#define D_HUE_POST_ARGS "Hue POST args"
|
#define D_HUE_POST_ARGS "Hue POST args"
|
||||||
#define D_3_RESPONSE_PACKETS_SENT "3 response packets sent"
|
#define D_3_RESPONSE_PACKETS_SENT "3 response packets sent"
|
||||||
|
|
||||||
// xdrv_02_irremote.ino
|
|
||||||
#define D_JSON_INVALID_JSON "Invalid JSON"
|
|
||||||
#define D_JSON_PROTOCOL_NOT_SUPPORTED "Protocol not supported"
|
|
||||||
#define D_JSON_IR_PROTOCOL "PROTOCOL"
|
|
||||||
#define D_JSON_IR_BITS "BITS"
|
|
||||||
#define D_JSON_IR_DATA "DATA"
|
|
||||||
#define D_JSON_IRHVAC_VENDOR "VENDOR"
|
|
||||||
#define D_JSON_IRHVAC_POWER "POWER"
|
|
||||||
#define D_JSON_IRHVAC_MODE "MODE"
|
|
||||||
#define D_JSON_IRHVAC_FANSPEED "FANSPEED"
|
|
||||||
#define D_JSON_IRHVAC_TEMP "TEMP"
|
|
||||||
#define D_JSON_IRRECEIVED "IrReceived"
|
|
||||||
|
|
||||||
// xdrv_05_domoticz.ino
|
// xdrv_05_domoticz.ino
|
||||||
#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
|
#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
|
||||||
#define D_DOMOTICZ_IDX "Idx"
|
#define D_DOMOTICZ_IDX "Idx"
|
||||||
|
@ -335,19 +335,6 @@
|
|||||||
#define D_HUE_POST_ARGS "Hue POST args"
|
#define D_HUE_POST_ARGS "Hue POST args"
|
||||||
#define D_3_RESPONSE_PACKETS_SENT "3 paquetes de respuesta enviados"
|
#define D_3_RESPONSE_PACKETS_SENT "3 paquetes de respuesta enviados"
|
||||||
|
|
||||||
// xdrv_02_irremote.ino
|
|
||||||
#define D_JSON_INVALID_JSON "JSON no válido"
|
|
||||||
#define D_JSON_PROTOCOL_NOT_SUPPORTED "Protocolo no soportado"
|
|
||||||
#define D_JSON_IR_PROTOCOL "PROTOCOLO"
|
|
||||||
#define D_JSON_IR_BITS "BITS"
|
|
||||||
#define D_JSON_IR_DATA "DATA"
|
|
||||||
#define D_JSON_IRHVAC_VENDOR "VENDOR"
|
|
||||||
#define D_JSON_IRHVAC_POWER "POWER"
|
|
||||||
#define D_JSON_IRHVAC_MODE "MODE"
|
|
||||||
#define D_JSON_IRHVAC_FANSPEED "FANSPEED"
|
|
||||||
#define D_JSON_IRHVAC_TEMP "TEMP"
|
|
||||||
#define D_JSON_IRRECEIVED "IrReceived"
|
|
||||||
|
|
||||||
// xdrv_05_domoticz.ino
|
// xdrv_05_domoticz.ino
|
||||||
#define D_DOMOTICZ_PARAMETERS "Parámetros Domoticz"
|
#define D_DOMOTICZ_PARAMETERS "Parámetros Domoticz"
|
||||||
#define D_DOMOTICZ_IDX "Idx"
|
#define D_DOMOTICZ_IDX "Idx"
|
||||||
|
@ -335,19 +335,6 @@
|
|||||||
#define D_HUE_POST_ARGS "Hue POST args"
|
#define D_HUE_POST_ARGS "Hue POST args"
|
||||||
#define D_3_RESPONSE_PACKETS_SENT "3 paquets response envoyés"
|
#define D_3_RESPONSE_PACKETS_SENT "3 paquets response envoyés"
|
||||||
|
|
||||||
// xdrv_02_irremote.ino
|
|
||||||
#define D_JSON_INVALID_JSON "JSON Invalide"
|
|
||||||
#define D_JSON_PROTOCOL_NOT_SUPPORTED "Protocole non supporté"
|
|
||||||
#define D_JSON_IR_PROTOCOL "PROTOCOL"
|
|
||||||
#define D_JSON_IR_BITS "BITS"
|
|
||||||
#define D_JSON_IR_DATA "DATA"
|
|
||||||
#define D_JSON_IRHVAC_VENDOR "VENDOR"
|
|
||||||
#define D_JSON_IRHVAC_POWER "POWER"
|
|
||||||
#define D_JSON_IRHVAC_MODE "MODE"
|
|
||||||
#define D_JSON_IRHVAC_FANSPEED "FANSPEED"
|
|
||||||
#define D_JSON_IRHVAC_TEMP "TEMP"
|
|
||||||
#define D_JSON_IRRECEIVED "IrReceived"
|
|
||||||
|
|
||||||
// xdrv_05_domoticz.ino
|
// xdrv_05_domoticz.ino
|
||||||
#define D_DOMOTICZ_PARAMETERS "Paramètres Domoticz"
|
#define D_DOMOTICZ_PARAMETERS "Paramètres Domoticz"
|
||||||
#define D_DOMOTICZ_IDX "Idx"
|
#define D_DOMOTICZ_IDX "Idx"
|
||||||
|
@ -335,19 +335,6 @@
|
|||||||
#define D_HUE_POST_ARGS "Hue POST argomenti"
|
#define D_HUE_POST_ARGS "Hue POST argomenti"
|
||||||
#define D_3_RESPONSE_PACKETS_SENT "3 pacchetti di risposta inviati"
|
#define D_3_RESPONSE_PACKETS_SENT "3 pacchetti di risposta inviati"
|
||||||
|
|
||||||
// xdrv_02_irremote.ino
|
|
||||||
#define D_JSON_INVALID_JSON "JSON non valido"
|
|
||||||
#define D_JSON_PROTOCOL_NOT_SUPPORTED "Protocollo non supportato"
|
|
||||||
#define D_JSON_IR_PROTOCOL "PROTOCOL"
|
|
||||||
#define D_JSON_IR_BITS "BITS"
|
|
||||||
#define D_JSON_IR_DATA "DATA"
|
|
||||||
#define D_JSON_IRHVAC_VENDOR "VENDOR"
|
|
||||||
#define D_JSON_IRHVAC_POWER "POWER"
|
|
||||||
#define D_JSON_IRHVAC_MODE "MODE"
|
|
||||||
#define D_JSON_IRHVAC_FANSPEED "FANSPEED"
|
|
||||||
#define D_JSON_IRHVAC_TEMP "TEMP"
|
|
||||||
#define D_JSON_IRRECEIVED "IrReceived"
|
|
||||||
|
|
||||||
// xdrv_05_domoticz.ino
|
// xdrv_05_domoticz.ino
|
||||||
#define D_DOMOTICZ_PARAMETERS "Parametri Domoticz"
|
#define D_DOMOTICZ_PARAMETERS "Parametri Domoticz"
|
||||||
#define D_DOMOTICZ_IDX "Idx"
|
#define D_DOMOTICZ_IDX "Idx"
|
||||||
|
@ -335,19 +335,6 @@
|
|||||||
#define D_HUE_POST_ARGS "Hue POST argumenten"
|
#define D_HUE_POST_ARGS "Hue POST argumenten"
|
||||||
#define D_3_RESPONSE_PACKETS_SENT "3 antwoord paketten verstuurd"
|
#define D_3_RESPONSE_PACKETS_SENT "3 antwoord paketten verstuurd"
|
||||||
|
|
||||||
// xdrv_02_irremote.ino
|
|
||||||
#define D_JSON_INVALID_JSON "Ongeldig JSON"
|
|
||||||
#define D_JSON_PROTOCOL_NOT_SUPPORTED "Protocol wordt niet ondersteund"
|
|
||||||
#define D_JSON_IR_PROTOCOL "PROTOCOL"
|
|
||||||
#define D_JSON_IR_BITS "BITS"
|
|
||||||
#define D_JSON_IR_DATA "DATA"
|
|
||||||
#define D_JSON_IRHVAC_VENDOR "VENDOR"
|
|
||||||
#define D_JSON_IRHVAC_POWER "POWER"
|
|
||||||
#define D_JSON_IRHVAC_MODE "MODE"
|
|
||||||
#define D_JSON_IRHVAC_FANSPEED "FANSPEED"
|
|
||||||
#define D_JSON_IRHVAC_TEMP "TEMP"
|
|
||||||
#define D_JSON_IRRECEIVED "IrReceived"
|
|
||||||
|
|
||||||
// xdrv_05_domoticz.ino
|
// xdrv_05_domoticz.ino
|
||||||
#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
|
#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
|
||||||
#define D_DOMOTICZ_IDX "Idx"
|
#define D_DOMOTICZ_IDX "Idx"
|
||||||
|
@ -335,19 +335,6 @@
|
|||||||
#define D_HUE_POST_ARGS "Hue POST args"
|
#define D_HUE_POST_ARGS "Hue POST args"
|
||||||
#define D_3_RESPONSE_PACKETS_SENT "3 pakiety odpowiedzi wysylane"
|
#define D_3_RESPONSE_PACKETS_SENT "3 pakiety odpowiedzi wysylane"
|
||||||
|
|
||||||
// xdrv_02_irremote.ino
|
|
||||||
#define D_JSON_INVALID_JSON "Invalid JSON"
|
|
||||||
#define D_JSON_PROTOCOL_NOT_SUPPORTED "Protokol nie jest obslugiwany"
|
|
||||||
#define D_JSON_IR_PROTOCOL "PROTOCOL"
|
|
||||||
#define D_JSON_IR_BITS "BITS"
|
|
||||||
#define D_JSON_IR_DATA "DATA"
|
|
||||||
#define D_JSON_IRHVAC_VENDOR "VENDOR"
|
|
||||||
#define D_JSON_IRHVAC_POWER "POWER"
|
|
||||||
#define D_JSON_IRHVAC_MODE "MODE"
|
|
||||||
#define D_JSON_IRHVAC_FANSPEED "FANSPEED"
|
|
||||||
#define D_JSON_IRHVAC_TEMP "TEMP"
|
|
||||||
#define D_JSON_IRRECEIVED "IrReceived"
|
|
||||||
|
|
||||||
// xdrv_05_domoticz.ino
|
// xdrv_05_domoticz.ino
|
||||||
#define D_DOMOTICZ_PARAMETERS "Parametry Domoticz"
|
#define D_DOMOTICZ_PARAMETERS "Parametry Domoticz"
|
||||||
#define D_DOMOTICZ_IDX "Idx"
|
#define D_DOMOTICZ_IDX "Idx"
|
||||||
|
@ -335,19 +335,6 @@
|
|||||||
#define D_HUE_POST_ARGS "Hue POST 参数"
|
#define D_HUE_POST_ARGS "Hue POST 参数"
|
||||||
#define D_3_RESPONSE_PACKETS_SENT "3 请求包发送"
|
#define D_3_RESPONSE_PACKETS_SENT "3 请求包发送"
|
||||||
|
|
||||||
// xdrv_02_irremote.ino
|
|
||||||
#define D_JSON_INVALID_JSON "无效的JSON"
|
|
||||||
#define D_JSON_PROTOCOL_NOT_SUPPORTED "协议不支持"
|
|
||||||
#define D_JSON_IR_PROTOCOL "协议"
|
|
||||||
#define D_JSON_IR_BITS "BITS"
|
|
||||||
#define D_JSON_IR_DATA "数据"
|
|
||||||
#define D_JSON_IRHVAC_VENDOR "供应商"
|
|
||||||
#define D_JSON_IRHVAC_POWER "电源"
|
|
||||||
#define D_JSON_IRHVAC_MODE "模式"
|
|
||||||
#define D_JSON_IRHVAC_FANSPEED "风扇转速"
|
|
||||||
#define D_JSON_IRHVAC_TEMP "温度"
|
|
||||||
#define D_JSON_IRRECEIVED "IrReceived"
|
|
||||||
|
|
||||||
// xdrv_05_domoticz.ino
|
// xdrv_05_domoticz.ino
|
||||||
#define D_DOMOTICZ_PARAMETERS "Domoticz 设置"
|
#define D_DOMOTICZ_PARAMETERS "Domoticz 设置"
|
||||||
#define D_DOMOTICZ_IDX "Idx"
|
#define D_DOMOTICZ_IDX "Idx"
|
||||||
|
@ -86,7 +86,7 @@ typedef unsigned long power_t; // Power (Relay) type
|
|||||||
#define CMDSZ 24 // Max number of characters in command
|
#define CMDSZ 24 // Max number of characters in command
|
||||||
#define TOPSZ 100 // Max number of characters in topic string
|
#define TOPSZ 100 // Max number of characters in topic string
|
||||||
#define LOGSZ 400 // Max number of characters in log
|
#define LOGSZ 400 // Max number of characters in log
|
||||||
#define MIN_MESSZ 893 // Min number of characters in MQTT message
|
#define MIN_MESSZ 893 // Min number of characters in MQTT message
|
||||||
#ifdef USE_MQTT_TLS
|
#ifdef USE_MQTT_TLS
|
||||||
#define MAX_LOG_LINES 10 // Max number of lines in weblog
|
#define MAX_LOG_LINES 10 // Max number of lines in weblog
|
||||||
#else
|
#else
|
||||||
@ -145,4 +145,10 @@ enum XsnsFunctions {FUNC_INIT, FUNC_EVERY_50_MSECOND, FUNC_EVERY_SECOND, FUNC_PR
|
|||||||
|
|
||||||
const uint8_t kDefaultRfCode[9] PROGMEM = { 0x21, 0x16, 0x01, 0x0E, 0x03, 0x48, 0x2E, 0x1A, 0x00 };
|
const uint8_t kDefaultRfCode[9] PROGMEM = { 0x21, 0x16, 0x01, 0x0E, 0x03, 0x48, 0x2E, 0x1A, 0x00 };
|
||||||
|
|
||||||
|
/*********************************************************************************************\
|
||||||
|
* Extern global variables
|
||||||
|
\*********************************************************************************************/
|
||||||
|
|
||||||
|
extern uint8_t light_device; // Light device number
|
||||||
|
|
||||||
#endif // _SONOFF_H_
|
#endif // _SONOFF_H_
|
@ -25,7 +25,7 @@
|
|||||||
- Select IDE Tools - Flash Size: "1M (no SPIFFS)"
|
- Select IDE Tools - Flash Size: "1M (no SPIFFS)"
|
||||||
====================================================*/
|
====================================================*/
|
||||||
|
|
||||||
#define VERSION 0x050B0103 // 5.11.1c
|
#define VERSION 0x050B0104 // 5.11.1d
|
||||||
|
|
||||||
// Location specific includes
|
// Location specific includes
|
||||||
#include "sonoff.h" // Enumaration used in user_config.h
|
#include "sonoff.h" // Enumaration used in user_config.h
|
||||||
@ -67,7 +67,7 @@
|
|||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
|
||||||
enum TasmotaCommands {
|
enum TasmotaCommands {
|
||||||
CMND_BACKLOG, CMND_DELAY, CMND_POWER, CMND_STATUS, CMND_POWERONSTATE, CMND_PULSETIME,
|
CMND_BACKLOG, CMND_DELAY, CMND_POWER, CMND_STATUS, CMND_STATE, CMND_POWERONSTATE, CMND_PULSETIME,
|
||||||
CMND_BLINKTIME, CMND_BLINKCOUNT, CMND_SAVEDATA, CMND_SETOPTION, CMND_TEMPERATURE_RESOLUTION, CMND_HUMIDITY_RESOLUTION,
|
CMND_BLINKTIME, CMND_BLINKCOUNT, CMND_SAVEDATA, CMND_SETOPTION, CMND_TEMPERATURE_RESOLUTION, CMND_HUMIDITY_RESOLUTION,
|
||||||
CMND_PRESSURE_RESOLUTION, CMND_POWER_RESOLUTION, CMND_VOLTAGE_RESOLUTION, CMND_CURRENT_RESOLUTION, CMND_ENERGY_RESOLUTION, CMND_MODULE, CMND_MODULES,
|
CMND_PRESSURE_RESOLUTION, CMND_POWER_RESOLUTION, CMND_VOLTAGE_RESOLUTION, CMND_CURRENT_RESOLUTION, CMND_ENERGY_RESOLUTION, CMND_MODULE, CMND_MODULES,
|
||||||
CMND_GPIO, CMND_GPIOS, CMND_PWM, CMND_PWMFREQUENCY, CMND_PWMRANGE, CMND_COUNTER, CMND_COUNTERTYPE,
|
CMND_GPIO, CMND_GPIOS, CMND_PWM, CMND_PWMFREQUENCY, CMND_PWMRANGE, CMND_COUNTER, CMND_COUNTERTYPE,
|
||||||
@ -77,7 +77,7 @@ enum TasmotaCommands {
|
|||||||
CMND_TELEPERIOD, CMND_RESTART, CMND_RESET, CMND_TIMEZONE, CMND_ALTITUDE, CMND_LEDPOWER, CMND_LEDSTATE,
|
CMND_TELEPERIOD, CMND_RESTART, CMND_RESET, CMND_TIMEZONE, CMND_ALTITUDE, CMND_LEDPOWER, CMND_LEDSTATE,
|
||||||
CMND_CFGDUMP, CMND_I2CSCAN, CMND_INA219MODE, CMND_EXCEPTION };
|
CMND_CFGDUMP, CMND_I2CSCAN, CMND_INA219MODE, CMND_EXCEPTION };
|
||||||
const char kTasmotaCommands[] PROGMEM =
|
const char kTasmotaCommands[] PROGMEM =
|
||||||
D_CMND_BACKLOG "|" D_CMND_DELAY "|" D_CMND_POWER "|" D_CMND_STATUS "|" D_CMND_POWERONSTATE "|" D_CMND_PULSETIME "|"
|
D_CMND_BACKLOG "|" D_CMND_DELAY "|" D_CMND_POWER "|" D_CMND_STATUS "|" D_CMND_STATE "|" D_CMND_POWERONSTATE "|" D_CMND_PULSETIME "|"
|
||||||
D_CMND_BLINKTIME "|" D_CMND_BLINKCOUNT "|" D_CMND_SAVEDATA "|" D_CMND_SETOPTION "|" D_CMND_TEMPERATURE_RESOLUTION "|" D_CMND_HUMIDITY_RESOLUTION "|"
|
D_CMND_BLINKTIME "|" D_CMND_BLINKCOUNT "|" D_CMND_SAVEDATA "|" D_CMND_SETOPTION "|" D_CMND_TEMPERATURE_RESOLUTION "|" D_CMND_HUMIDITY_RESOLUTION "|"
|
||||||
D_CMND_PRESSURE_RESOLUTION "|" D_CMND_POWER_RESOLUTION "|" D_CMND_VOLTAGE_RESOLUTION "|" D_CMND_CURRENT_RESOLUTION "|" D_CMND_ENERGY_RESOLUTION "|" D_CMND_MODULE "|" D_CMND_MODULES "|"
|
D_CMND_PRESSURE_RESOLUTION "|" D_CMND_POWER_RESOLUTION "|" D_CMND_VOLTAGE_RESOLUTION "|" D_CMND_CURRENT_RESOLUTION "|" D_CMND_ENERGY_RESOLUTION "|" D_CMND_MODULE "|" D_CMND_MODULES "|"
|
||||||
D_CMND_GPIO "|" D_CMND_GPIOS "|" D_CMND_PWM "|" D_CMND_PWMFREQUENCY "|" D_CMND_PWMRANGE "|" D_CMND_COUNTER "|" D_CMND_COUNTERTYPE "|"
|
D_CMND_GPIO "|" D_CMND_GPIOS "|" D_CMND_PWM "|" D_CMND_PWMFREQUENCY "|" D_CMND_PWMRANGE "|" D_CMND_COUNTER "|" D_CMND_COUNTERTYPE "|"
|
||||||
@ -194,13 +194,8 @@ char my_version[33]; // Composed version string
|
|||||||
char my_hostname[33]; // Composed Wifi hostname
|
char my_hostname[33]; // Composed Wifi hostname
|
||||||
char mqtt_client[33]; // Composed MQTT Clientname
|
char mqtt_client[33]; // Composed MQTT Clientname
|
||||||
char serial_in_buffer[INPUT_BUFFER_SIZE + 2]; // Receive buffer
|
char serial_in_buffer[INPUT_BUFFER_SIZE + 2]; // Receive buffer
|
||||||
|
|
||||||
//char mqtt_data[MESSZ + TOPSZ]; // MQTT publish buffer (MESSZ) and web page ajax buffer (MESSZ + TOPSZ)
|
|
||||||
char mqtt_data[MESSZ]; // MQTT publish buffer and web page ajax buffer
|
char mqtt_data[MESSZ]; // MQTT publish buffer and web page ajax buffer
|
||||||
|
|
||||||
//char log_data[TOPSZ + MESSZ]; // Logging
|
|
||||||
char log_data[LOGSZ]; // Logging
|
char log_data[LOGSZ]; // Logging
|
||||||
|
|
||||||
String web_log[MAX_LOG_LINES]; // Web log buffer
|
String web_log[MAX_LOG_LINES]; // Web log buffer
|
||||||
String backlog[MAX_BACKLOG]; // Command backlog
|
String backlog[MAX_BACKLOG]; // Command backlog
|
||||||
|
|
||||||
@ -317,7 +312,7 @@ void SetDevicePower(power_t rpower)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
XdrvSetPower(bitRead(rpower, devices_present -1));
|
XdrvSetPower(rpower);
|
||||||
|
|
||||||
if ((SONOFF_DUAL == Settings.module) || (CH4 == Settings.module)) {
|
if ((SONOFF_DUAL == Settings.module) || (CH4 == Settings.module)) {
|
||||||
Serial.write(0xA0);
|
Serial.write(0xA0);
|
||||||
@ -938,6 +933,10 @@ void MqttDataCallback(char* topic, byte* data, unsigned int data_len)
|
|||||||
fallback_topic_flag = 0;
|
fallback_topic_flag = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if (CMND_STATE == command_code) {
|
||||||
|
mqtt_data[0] = '\0';
|
||||||
|
MqttShowState();
|
||||||
|
}
|
||||||
else if ((CMND_POWERONSTATE == command_code) && (Settings.module != MOTOR)) {
|
else if ((CMND_POWERONSTATE == command_code) && (Settings.module != MOTOR)) {
|
||||||
/* 0 = Keep relays off after power on
|
/* 0 = Keep relays off after power on
|
||||||
* 1 = Turn relays on after power on, if PulseTime set wait for PulseTime seconds, and turn relays off
|
* 1 = Turn relays on after power on, if PulseTime set wait for PulseTime seconds, and turn relays off
|
||||||
@ -1796,9 +1795,15 @@ void MqttShowState()
|
|||||||
dtostrfd((double)ESP.getVcc()/1000, 3, stemp1);
|
dtostrfd((double)ESP.getVcc()/1000, 3, stemp1);
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_JSON_VCC "\":%s"), mqtt_data, stemp1);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_JSON_VCC "\":%s"), mqtt_data, stemp1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (byte i = 0; i < devices_present; i++) {
|
for (byte i = 0; i < devices_present; i++) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"%s\":\"%s\""), mqtt_data, GetPowerDevice(stemp1, i +1, sizeof(stemp1)), GetStateText(bitRead(power, i)));
|
if (i == light_device -1) {
|
||||||
|
LightState(1);
|
||||||
|
} else {
|
||||||
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"%s\":\"%s\""), mqtt_data, GetPowerDevice(stemp1, i +1, sizeof(stemp1)), GetStateText(bitRead(power, i)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_JSON_WIFI "\":{\"" D_JSON_AP "\":%d,\"" D_JSON_SSID "\":\"%s\",\"" D_JSON_RSSI "\":%d,\"" D_JSON_APMAC_ADDRESS "\":\"%s\"}}"),
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_JSON_WIFI "\":{\"" D_JSON_AP "\":%d,\"" D_JSON_SSID "\":\"%s\",\"" D_JSON_RSSI "\":%d,\"" D_JSON_APMAC_ADDRESS "\":\"%s\"}}"),
|
||||||
mqtt_data, Settings.sta_active +1, Settings.sta_ssid[Settings.sta_active], WifiGetRssiAsQuality(WiFi.RSSI()), WiFi.BSSIDstr().c_str());
|
mqtt_data, Settings.sta_active +1, Settings.sta_ssid[Settings.sta_active], WifiGetRssiAsQuality(WiFi.RSSI()), WiFi.BSSIDstr().c_str());
|
||||||
}
|
}
|
||||||
|
@ -148,83 +148,9 @@ Decoding 14 results
|
|||||||
* General
|
* General
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
char* _dtostrf(double number, unsigned char prec, char *s, bool i18n)
|
char* dtostrfd(double number, unsigned char prec, char *s)
|
||||||
{
|
{
|
||||||
bool negative = false;
|
return dtostrf(number, 1, prec, s);
|
||||||
|
|
||||||
if (isnan(number)) {
|
|
||||||
strcpy_P(s, PSTR("nan"));
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
if (isinf(number)) {
|
|
||||||
strcpy_P(s, PSTR("inf"));
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
char decimal = '.';
|
|
||||||
if (i18n) {
|
|
||||||
decimal = D_DECIMAL_SEPARATOR[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
char* out = s;
|
|
||||||
|
|
||||||
// Handle negative numbers
|
|
||||||
if (number < 0.0) {
|
|
||||||
negative = true;
|
|
||||||
number = -number;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Round correctly so that print(1.999, 2) prints as "2.00"
|
|
||||||
// I optimized out most of the divisions
|
|
||||||
double rounding = 2.0;
|
|
||||||
for (uint8_t i = 0; i < prec; ++i) {
|
|
||||||
rounding *= 10.0;
|
|
||||||
}
|
|
||||||
rounding = 1.0 / rounding;
|
|
||||||
number += rounding;
|
|
||||||
|
|
||||||
// Figure out how big our number really is
|
|
||||||
double tenpow = 1.0;
|
|
||||||
int digitcount = 1;
|
|
||||||
while (number >= 10.0 * tenpow) {
|
|
||||||
tenpow *= 10.0;
|
|
||||||
digitcount++;
|
|
||||||
}
|
|
||||||
number /= tenpow;
|
|
||||||
|
|
||||||
// Handle negative sign
|
|
||||||
if (negative) {
|
|
||||||
*out++ = '-';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Print the digits, and if necessary, the decimal point
|
|
||||||
digitcount += prec;
|
|
||||||
int8_t digit = 0;
|
|
||||||
while (digitcount-- > 0) {
|
|
||||||
digit = (int8_t)number;
|
|
||||||
if (digit > 9) {
|
|
||||||
digit = 9; // insurance
|
|
||||||
}
|
|
||||||
*out++ = (char)('0' | digit);
|
|
||||||
if ((digitcount == prec) && (prec > 0)) {
|
|
||||||
*out++ = decimal;
|
|
||||||
}
|
|
||||||
number -= digit;
|
|
||||||
number *= 10.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// make sure the string is terminated
|
|
||||||
*out = 0;
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
char* dtostrfd(double number, unsigned char prec, char *s) // Always decimal dot
|
|
||||||
{
|
|
||||||
return _dtostrf(number, prec, s, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
char* dtostrfi(double number, unsigned char prec, char *s) // Use localized decimal dot
|
|
||||||
{
|
|
||||||
return _dtostrf(number, prec, s, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean ParseIp(uint32_t* addr, const char* str)
|
boolean ParseIp(uint32_t* addr, const char* str)
|
||||||
|
@ -96,7 +96,11 @@ const char HTTP_HEAD[] PROGMEM =
|
|||||||
#ifdef BE_MINIMAL
|
#ifdef BE_MINIMAL
|
||||||
"<div style='text-align:center;color:red;'><h3>" D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "</h3></div>"
|
"<div style='text-align:center;color:red;'><h3>" D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "</h3></div>"
|
||||||
#endif
|
#endif
|
||||||
|
#if MY_LANGUAGE == es-AR
|
||||||
|
"<div style='text-align:center;'><h3>" D_MODULE " {ha</h3><h2>{h}</h2></div>";
|
||||||
|
#else
|
||||||
"<div style='text-align:center;'><h3>{ha " D_MODULE "</h3><h2>{h}</h2></div>";
|
"<div style='text-align:center;'><h3>{ha " D_MODULE "</h3><h2>{h}</h2></div>";
|
||||||
|
#endif
|
||||||
const char HTTP_SCRIPT_CONSOL[] PROGMEM =
|
const char HTTP_SCRIPT_CONSOL[] PROGMEM =
|
||||||
"var sn=0;" // Scroll position
|
"var sn=0;" // Scroll position
|
||||||
"var id=99;" // Get most of weblog initially
|
"var id=99;" // Get most of weblog initially
|
||||||
@ -190,6 +194,12 @@ const char HTTP_BTN_MENU4[] PROGMEM =
|
|||||||
"<br/><form action='rs' method='get'><button>" D_RESTORE_CONFIGURATION "</button></form>";
|
"<br/><form action='rs' method='get'><button>" D_RESTORE_CONFIGURATION "</button></form>";
|
||||||
const char HTTP_BTN_MAIN[] PROGMEM =
|
const char HTTP_BTN_MAIN[] PROGMEM =
|
||||||
"<br/><br/><form action='.' method='get'><button>" D_MAIN_MENU "</button></form>";
|
"<br/><br/><form action='.' method='get'><button>" D_MAIN_MENU "</button></form>";
|
||||||
|
const char HTTP_FORM_LOGIN[] PROGMEM =
|
||||||
|
"<form method='post' action='/'>"
|
||||||
|
"<br/><b>" D_USER "</b><br/><input name='USER1' placeholder='" D_USER "'><br/>"
|
||||||
|
"<br/><b>" D_PASSWORD "</b><br/><input name='PASS1' type='password' placeholder='" D_PASSWORD "'><br/>"
|
||||||
|
"<br/>"
|
||||||
|
"<br/><button>" D_OK "</button></form>";
|
||||||
const char HTTP_BTN_CONF[] PROGMEM =
|
const char HTTP_BTN_CONF[] PROGMEM =
|
||||||
"<br/><br/><form action='cn' method='get'><button>" D_CONFIGURATION "</button></form>";
|
"<br/><br/><form action='cn' method='get'><button>" D_CONFIGURATION "</button></form>";
|
||||||
const char HTTP_FORM_MODULE[] PROGMEM =
|
const char HTTP_FORM_MODULE[] PROGMEM =
|
||||||
@ -204,9 +214,9 @@ const char HTTP_FORM_WIFI[] PROGMEM =
|
|||||||
"<fieldset><legend><b> " D_WIFI_PARAMETERS " </b></legend><form method='get' action='sv'>"
|
"<fieldset><legend><b> " D_WIFI_PARAMETERS " </b></legend><form method='get' action='sv'>"
|
||||||
"<input id='w' name='w' value='1' hidden><input id='r' name='r' value='1' hidden>"
|
"<input id='w' name='w' value='1' hidden><input id='r' name='r' value='1' hidden>"
|
||||||
"<br/><b>" D_AP1_SSID "</b> (" STA_SSID1 ")<br/><input id='s1' name='s1' placeholder='" STA_SSID1 "' value='{s1'><br/>"
|
"<br/><b>" D_AP1_SSID "</b> (" STA_SSID1 ")<br/><input id='s1' name='s1' placeholder='" STA_SSID1 "' value='{s1'><br/>"
|
||||||
"<br/><b>" D_AP1_PASSWORD "</b><br/><input id='p1' name='p1' type='password' placeholder='" STA_PASS1 "' value='{p1'><br/>"
|
"<br/><b>" D_AP1_PASSWORD "</b><br/><input id='p1' name='p1' type='password' placeholder='" D_AP1_PASSWORD "' value='********'><br/>"
|
||||||
"<br/><b>" D_AP2_SSID "</b> (" STA_SSID2 ")<br/><input id='s2' name='s2' placeholder='" STA_SSID2 "' value='{s2'><br/>"
|
"<br/><b>" D_AP2_SSID "</b> (" STA_SSID2 ")<br/><input id='s2' name='s2' placeholder='" STA_SSID2 "' value='{s2'><br/>"
|
||||||
"<br/><b>" D_AP2_PASSWORD "</b><br/><input id='p2' name='p2' type='password' placeholder='" STA_PASS2 "' value='{p2'><br/>"
|
"<br/><b>" D_AP2_PASSWORD "</b><br/><input id='p2' name='p2' type='password' placeholder='" D_AP2_PASSWORD "' value='********'><br/>"
|
||||||
"<br/><b>" D_HOSTNAME "</b> (" WIFI_HOSTNAME ")<br/><input id='h' name='h' placeholder='" WIFI_HOSTNAME" ' value='{h1'><br/>";
|
"<br/><b>" D_HOSTNAME "</b> (" WIFI_HOSTNAME ")<br/><input id='h' name='h' placeholder='" WIFI_HOSTNAME" ' value='{h1'><br/>";
|
||||||
const char HTTP_FORM_MQTT[] PROGMEM =
|
const char HTTP_FORM_MQTT[] PROGMEM =
|
||||||
"<fieldset><legend><b> " D_MQTT_PARAMETERS " </b></legend><form method='get' action='sv'>"
|
"<fieldset><legend><b> " D_MQTT_PARAMETERS " </b></legend><form method='get' action='sv'>"
|
||||||
@ -236,7 +246,7 @@ const char HTTP_FORM_LOG3[] PROGMEM =
|
|||||||
const char HTTP_FORM_OTHER[] PROGMEM =
|
const char HTTP_FORM_OTHER[] PROGMEM =
|
||||||
"<fieldset><legend><b> " D_OTHER_PARAMETERS " </b></legend><form method='get' action='sv'>"
|
"<fieldset><legend><b> " D_OTHER_PARAMETERS " </b></legend><form method='get' action='sv'>"
|
||||||
"<input id='w' name='w' value='5' hidden><input id='r' name='r' value='1' hidden>"
|
"<input id='w' name='w' value='5' hidden><input id='r' name='r' value='1' hidden>"
|
||||||
"<br/><b>" D_WEB_ADMIN_PASSWORD "</b><br/><input id='p1' name='p1' type='password' placeholder='" WEB_PASSWORD "' value='{p1'><br/>"
|
"<br/><b>" D_WEB_ADMIN_PASSWORD "</b><br/><input id='p1' name='p1' type='password' placeholder='" D_WEB_ADMIN_PASSWORD "' value='********'><br/>"
|
||||||
"<br/><input style='width:10%;' id='b1' name='b1' type='checkbox'{r1><b>" D_MQTT_ENABLE "</b><br/>";
|
"<br/><input style='width:10%;' id='b1' name='b1' type='checkbox'{r1><b>" D_MQTT_ENABLE "</b><br/>";
|
||||||
const char HTTP_FORM_OTHER2[] PROGMEM =
|
const char HTTP_FORM_OTHER2[] PROGMEM =
|
||||||
"<br/><b>" D_FRIENDLY_NAME " {1</b> ({2)<br/><input id='a{1' name='a{1' placeholder='{2' value='{3'><br/>";
|
"<br/><b>" D_FRIENDLY_NAME " {1</b> ({2)<br/><input id='a{1' name='a{1' placeholder='{2' value='{3'><br/>";
|
||||||
@ -244,8 +254,8 @@ const char HTTP_FORM_OTHER[] PROGMEM =
|
|||||||
const char HTTP_FORM_OTHER3a[] PROGMEM =
|
const char HTTP_FORM_OTHER3a[] PROGMEM =
|
||||||
"<br/><fieldset><legend><b> " D_EMULATION " </b></legend>";
|
"<br/><fieldset><legend><b> " D_EMULATION " </b></legend>";
|
||||||
const char HTTP_FORM_OTHER3b[] PROGMEM =
|
const char HTTP_FORM_OTHER3b[] PROGMEM =
|
||||||
"<br/><input style='width:10%;' id='b2' name='b2' type='radio' value='{1'{2><b>{3</b>{4";
|
"<br/><input style='width:10%;' id='r{1' name='b2' type='radio' value='{1'{2><b>{3</b>{4"; // Different id only used for labels
|
||||||
#endif // USE_EMULATION
|
#endif // USE_EMULATION
|
||||||
const char HTTP_FORM_END[] PROGMEM =
|
const char HTTP_FORM_END[] PROGMEM =
|
||||||
"<br/><button type='submit'>" D_SAVE "</button></form></fieldset>";
|
"<br/><button type='submit'>" D_SAVE "</button></form></fieldset>";
|
||||||
const char HTTP_FORM_RST[] PROGMEM =
|
const char HTTP_FORM_RST[] PROGMEM =
|
||||||
@ -412,11 +422,17 @@ void SetHeader()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowPage(String &page)
|
void ShowPage(String &page, bool auth = true)
|
||||||
{
|
{
|
||||||
if((HTTP_ADMIN == webserver_state) && (Settings.web_password[0] != 0) && !WebServer->authenticate(WEB_USERNAME, Settings.web_password)) {
|
// if((HTTP_ADMIN == webserver_state) && (Settings.web_password[0] != 0) && !WebServer->authenticate(WEB_USERNAME, Settings.web_password)) {
|
||||||
|
// return WebServer->requestAuthentication();
|
||||||
|
// }
|
||||||
|
|
||||||
|
//Authentication
|
||||||
|
if (auth && (Settings.web_password[0] != 0) && !WebServer->authenticate(WEB_USERNAME, Settings.web_password)) {
|
||||||
return WebServer->requestAuthentication();
|
return WebServer->requestAuthentication();
|
||||||
}
|
}
|
||||||
|
|
||||||
page.replace(F("{ha"), my_module.name);
|
page.replace(F("{ha"), my_module.name);
|
||||||
page.replace(F("{h}"), Settings.friendlyname[0]);
|
page.replace(F("{h}"), Settings.friendlyname[0]);
|
||||||
if (HTTP_MANAGER == webserver_state) {
|
if (HTTP_MANAGER == webserver_state) {
|
||||||
@ -429,11 +445,20 @@ void ShowPage(String &page)
|
|||||||
page.replace(F("{mv"), my_version);
|
page.replace(F("{mv"), my_version);
|
||||||
SetHeader();
|
SetHeader();
|
||||||
WebServer->send(200, FPSTR(HDR_CTYPE_HTML), page);
|
WebServer->send(200, FPSTR(HDR_CTYPE_HTML), page);
|
||||||
|
// WebServer->sendContent("");
|
||||||
|
}
|
||||||
|
|
||||||
|
//Authentication
|
||||||
|
void HandleWifiLogin()
|
||||||
|
{
|
||||||
|
String page = FPSTR(HTTP_HEAD);
|
||||||
|
page.replace(F("{v}"), FPSTR( D_CONFIGURE_WIFI ));
|
||||||
|
page += FPSTR(HTTP_FORM_LOGIN);
|
||||||
|
ShowPage(page, false); // false means show page no matter if the client has or has not credentials
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandleRoot()
|
void HandleRoot()
|
||||||
{
|
{
|
||||||
// AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_MAIN_MENU));
|
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_MAIN_MENU);
|
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_MAIN_MENU);
|
||||||
|
|
||||||
if (CaptivePortal()) { // If captive portal redirect instead of displaying the page.
|
if (CaptivePortal()) { // If captive portal redirect instead of displaying the page.
|
||||||
@ -441,7 +466,20 @@ void HandleRoot()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (HTTP_MANAGER == webserver_state) {
|
if (HTTP_MANAGER == webserver_state) {
|
||||||
HandleWifiConfiguration();
|
// HandleWifiConfiguration();
|
||||||
|
|
||||||
|
//Authentication
|
||||||
|
if ((Settings.web_password[0] != 0) && !(WebServer->hasArg("USER1")) && !(WebServer->hasArg("PASS1"))) {
|
||||||
|
HandleWifiLogin();
|
||||||
|
} else {
|
||||||
|
if (!(Settings.web_password[0] != 0) || ((WebServer->arg("USER1") == WEB_USERNAME ) && (WebServer->arg("PASS1") == Settings.web_password ))) {
|
||||||
|
HandleWifiConfiguration();
|
||||||
|
} else {
|
||||||
|
// wrong user and pass
|
||||||
|
HandleWifiLogin();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
char stemp[10];
|
char stemp[10];
|
||||||
char line[160];
|
char line[160];
|
||||||
@ -520,6 +558,7 @@ void HandleAjaxStatusRefresh()
|
|||||||
if (strlen(mqtt_data)) {
|
if (strlen(mqtt_data)) {
|
||||||
page += FPSTR(HTTP_TABLE100);
|
page += FPSTR(HTTP_TABLE100);
|
||||||
page += mqtt_data;
|
page += mqtt_data;
|
||||||
|
page.replace(F("."), F(D_DECIMAL_SEPARATOR));
|
||||||
page += F("</table>");
|
page += F("</table>");
|
||||||
}
|
}
|
||||||
char line[80];
|
char line[80];
|
||||||
@ -529,7 +568,6 @@ void HandleAjaxStatusRefresh()
|
|||||||
uint8_t fsize = (devices_present < 5) ? 70 - (devices_present * 8) : 32;
|
uint8_t fsize = (devices_present < 5) ? 70 - (devices_present * 8) : 32;
|
||||||
for (byte idx = 1; idx <= devices_present; idx++) {
|
for (byte idx = 1; idx <= devices_present; idx++) {
|
||||||
snprintf_P(svalue, sizeof(svalue), PSTR("%d"), bitRead(power, idx -1));
|
snprintf_P(svalue, sizeof(svalue), PSTR("%d"), bitRead(power, idx -1));
|
||||||
// snprintf_P(line, sizeof(line), PSTR("<td style='width:%d%'><div style='text-align:center;font-weight:%s;font-size:%dpx'>%s</div></td>"),
|
|
||||||
snprintf_P(line, sizeof(line), PSTR("<td style='width:%d{t}%s;font-size:%dpx'>%s</div></td>"), // {t} = %'><div style='text-align:center;font-weight:
|
snprintf_P(line, sizeof(line), PSTR("<td style='width:%d{t}%s;font-size:%dpx'>%s</div></td>"), // {t} = %'><div style='text-align:center;font-weight:
|
||||||
100 / devices_present, (bitRead(power, idx -1)) ? "bold" : "normal", fsize, (devices_present < 5) ? GetStateText(bitRead(power, idx -1)) : svalue);
|
100 / devices_present, (bitRead(power, idx -1)) ? "bold" : "normal", fsize, (devices_present < 5) ? GetStateText(bitRead(power, idx -1)) : svalue);
|
||||||
page += line;
|
page += line;
|
||||||
@ -545,6 +583,7 @@ void HandleAjaxStatusRefresh()
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
WebServer->send(200, FPSTR(HDR_CTYPE_HTML), page);
|
WebServer->send(200, FPSTR(HDR_CTYPE_HTML), page);
|
||||||
|
// WebServer->sendContent("");
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean HttpUser()
|
boolean HttpUser()
|
||||||
@ -790,16 +829,15 @@ void HandleWifi(boolean scan)
|
|||||||
page += FPSTR(HTTP_FORM_WIFI);
|
page += FPSTR(HTTP_FORM_WIFI);
|
||||||
page.replace(F("{h1"), Settings.hostname);
|
page.replace(F("{h1"), Settings.hostname);
|
||||||
page.replace(F("{s1"), Settings.sta_ssid[0]);
|
page.replace(F("{s1"), Settings.sta_ssid[0]);
|
||||||
page.replace(F("{p1"), Settings.sta_pwd[0]);
|
|
||||||
page.replace(F("{s2"), Settings.sta_ssid[1]);
|
page.replace(F("{s2"), Settings.sta_ssid[1]);
|
||||||
page.replace(F("{p2"), Settings.sta_pwd[1]);
|
|
||||||
page += FPSTR(HTTP_FORM_END);
|
page += FPSTR(HTTP_FORM_END);
|
||||||
if (HTTP_MANAGER == webserver_state) {
|
if (HTTP_MANAGER == webserver_state) {
|
||||||
page += FPSTR(HTTP_BTN_RSTRT);
|
page += FPSTR(HTTP_BTN_RSTRT);
|
||||||
} else {
|
} else {
|
||||||
page += FPSTR(HTTP_BTN_CONF);
|
page += FPSTR(HTTP_BTN_CONF);
|
||||||
}
|
}
|
||||||
ShowPage(page);
|
// ShowPage(page);
|
||||||
|
ShowPage(page, !(HTTP_MANAGER == webserver_state));
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandleMqttConfiguration()
|
void HandleMqttConfiguration()
|
||||||
@ -886,7 +924,6 @@ void HandleOtherConfiguration()
|
|||||||
String page = FPSTR(HTTP_HEAD);
|
String page = FPSTR(HTTP_HEAD);
|
||||||
page.replace(F("{v}"), FPSTR(S_CONFIGURE_OTHER));
|
page.replace(F("{v}"), FPSTR(S_CONFIGURE_OTHER));
|
||||||
page += FPSTR(HTTP_FORM_OTHER);
|
page += FPSTR(HTTP_FORM_OTHER);
|
||||||
page.replace(F("{p1"), Settings.web_password);
|
|
||||||
page.replace(F("{r1"), (Settings.flag.mqtt_enabled) ? F(" checked") : F(""));
|
page.replace(F("{r1"), (Settings.flag.mqtt_enabled) ? F(" checked") : F(""));
|
||||||
uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : devices_present;
|
uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : devices_present;
|
||||||
for (byte i = 0; i < maxfn; i++) {
|
for (byte i = 0; i < maxfn; i++) {
|
||||||
@ -905,7 +942,7 @@ void HandleOtherConfiguration()
|
|||||||
page.replace(F("{3"), (i == EMUL_NONE) ? F(D_NONE) : (i == EMUL_WEMO) ? F(D_BELKIN_WEMO) : F(D_HUE_BRIDGE));
|
page.replace(F("{3"), (i == EMUL_NONE) ? F(D_NONE) : (i == EMUL_WEMO) ? F(D_BELKIN_WEMO) : F(D_HUE_BRIDGE));
|
||||||
page.replace(F("{4"), (i == EMUL_NONE) ? F("") : (i == EMUL_WEMO) ? F(" " D_SINGLE_DEVICE) : F(" " D_MULTI_DEVICE));
|
page.replace(F("{4"), (i == EMUL_NONE) ? F("") : (i == EMUL_WEMO) ? F(" " D_SINGLE_DEVICE) : F(" " D_MULTI_DEVICE));
|
||||||
}
|
}
|
||||||
// page += F("<br/>");
|
page += F("<br/>");
|
||||||
page += F("<br/></fieldset>");
|
page += F("<br/></fieldset>");
|
||||||
#endif // USE_EMULATION
|
#endif // USE_EMULATION
|
||||||
page += FPSTR(HTTP_FORM_END);
|
page += FPSTR(HTTP_FORM_END);
|
||||||
@ -964,9 +1001,11 @@ void HandleSaveSettings()
|
|||||||
strlcpy(Settings.hostname, WIFI_HOSTNAME, sizeof(Settings.hostname));
|
strlcpy(Settings.hostname, WIFI_HOSTNAME, sizeof(Settings.hostname));
|
||||||
}
|
}
|
||||||
strlcpy(Settings.sta_ssid[0], (!strlen(WebServer->arg("s1").c_str())) ? STA_SSID1 : WebServer->arg("s1").c_str(), sizeof(Settings.sta_ssid[0]));
|
strlcpy(Settings.sta_ssid[0], (!strlen(WebServer->arg("s1").c_str())) ? STA_SSID1 : WebServer->arg("s1").c_str(), sizeof(Settings.sta_ssid[0]));
|
||||||
strlcpy(Settings.sta_pwd[0], (!strlen(WebServer->arg("p1").c_str())) ? STA_PASS1 : WebServer->arg("p1").c_str(), sizeof(Settings.sta_pwd[0]));
|
|
||||||
strlcpy(Settings.sta_ssid[1], (!strlen(WebServer->arg("s2").c_str())) ? STA_SSID2 : WebServer->arg("s2").c_str(), sizeof(Settings.sta_ssid[1]));
|
strlcpy(Settings.sta_ssid[1], (!strlen(WebServer->arg("s2").c_str())) ? STA_SSID2 : WebServer->arg("s2").c_str(), sizeof(Settings.sta_ssid[1]));
|
||||||
strlcpy(Settings.sta_pwd[1], (!strlen(WebServer->arg("p2").c_str())) ? STA_PASS2 : WebServer->arg("p2").c_str(), sizeof(Settings.sta_pwd[1]));
|
// strlcpy(Settings.sta_ssid[0], (!strlen(WebServer->arg("s1").c_str())) ? "" : WebServer->arg("s1").c_str(), sizeof(Settings.sta_ssid[0]));
|
||||||
|
// strlcpy(Settings.sta_ssid[1], (!strlen(WebServer->arg("s2").c_str())) ? "" : WebServer->arg("s2").c_str(), sizeof(Settings.sta_ssid[1]));
|
||||||
|
strlcpy(Settings.sta_pwd[0], (!strlen(WebServer->arg("p1").c_str())) ? "" : (strchr(WebServer->arg("p1").c_str(),'*')) ? Settings.sta_pwd[0] : WebServer->arg("p1").c_str(), sizeof(Settings.sta_pwd[0]));
|
||||||
|
strlcpy(Settings.sta_pwd[1], (!strlen(WebServer->arg("p2").c_str())) ? "" : (strchr(WebServer->arg("p2").c_str(),'*')) ? Settings.sta_pwd[1] : WebServer->arg("p2").c_str(), sizeof(Settings.sta_pwd[1]));
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_WIFI D_CMND_HOSTNAME " %s, " D_CMND_SSID "1 %s, " D_CMND_PASSWORD "1 %s, " D_CMND_SSID "2 %s, " D_CMND_PASSWORD "2 %s"),
|
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_WIFI D_CMND_HOSTNAME " %s, " D_CMND_SSID "1 %s, " D_CMND_PASSWORD "1 %s, " D_CMND_SSID "2 %s, " D_CMND_PASSWORD "2 %s"),
|
||||||
Settings.hostname, Settings.sta_ssid[0], Settings.sta_pwd[0], Settings.sta_ssid[1], Settings.sta_pwd[1]);
|
Settings.hostname, Settings.sta_ssid[0], Settings.sta_pwd[0], Settings.sta_ssid[1], Settings.sta_pwd[1]);
|
||||||
AddLog(LOG_LEVEL_INFO);
|
AddLog(LOG_LEVEL_INFO);
|
||||||
@ -1014,7 +1053,7 @@ snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_LOG D_CMND_SERIALLOG " %d, " D
|
|||||||
break;
|
break;
|
||||||
#endif // USE_DOMOTICZ
|
#endif // USE_DOMOTICZ
|
||||||
case 5:
|
case 5:
|
||||||
strlcpy(Settings.web_password, (!strlen(WebServer->arg("p1").c_str())) ? WEB_PASSWORD : (!strcmp(WebServer->arg("p1").c_str(),"0")) ? "" : WebServer->arg("p1").c_str(), sizeof(Settings.web_password));
|
strlcpy(Settings.web_password, (!strlen(WebServer->arg("p1").c_str())) ? "" : (strchr(WebServer->arg("p1").c_str(),'*')) ? Settings.web_password : WebServer->arg("p1").c_str(), sizeof(Settings.web_password));
|
||||||
Settings.flag.mqtt_enabled = WebServer->hasArg("b1");
|
Settings.flag.mqtt_enabled = WebServer->hasArg("b1");
|
||||||
#ifdef USE_EMULATION
|
#ifdef USE_EMULATION
|
||||||
Settings.flag2.emulation = (!strlen(WebServer->arg("b2").c_str())) ? 0 : atoi(WebServer->arg("b2").c_str());
|
Settings.flag2.emulation = (!strlen(WebServer->arg("b2").c_str())) ? 0 : atoi(WebServer->arg("b2").c_str());
|
||||||
@ -1376,6 +1415,7 @@ void HandleHttpCommand()
|
|||||||
}
|
}
|
||||||
SetHeader();
|
SetHeader();
|
||||||
WebServer->send(200, FPSTR(HDR_CTYPE_JSON), message);
|
WebServer->send(200, FPSTR(HDR_CTYPE_JSON), message);
|
||||||
|
// WebServer->sendContent("");
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandleConsole()
|
void HandleConsole()
|
||||||
@ -1454,6 +1494,7 @@ void HandleAjaxConsoleRefresh()
|
|||||||
}
|
}
|
||||||
message += F("</l></r>");
|
message += F("</l></r>");
|
||||||
WebServer->send(200, FPSTR(HDR_CTYPE_XML), message);
|
WebServer->send(200, FPSTR(HDR_CTYPE_XML), message);
|
||||||
|
// WebServer->sendContent("");
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandleInformation()
|
void HandleInformation()
|
||||||
|
@ -99,6 +99,7 @@ uint8_t light_signal_color[5];
|
|||||||
|
|
||||||
uint8_t light_wheel = 0;
|
uint8_t light_wheel = 0;
|
||||||
uint8_t light_subtype = 0;
|
uint8_t light_subtype = 0;
|
||||||
|
uint8_t light_device = 0;
|
||||||
uint8_t light_power = 0;
|
uint8_t light_power = 0;
|
||||||
uint8_t light_update = 1;
|
uint8_t light_update = 1;
|
||||||
uint8_t light_wakeup_active = 0;
|
uint8_t light_wakeup_active = 0;
|
||||||
@ -337,6 +338,7 @@ void LightInit()
|
|||||||
{
|
{
|
||||||
uint8_t max_scheme = LS_MAX -1;
|
uint8_t max_scheme = LS_MAX -1;
|
||||||
|
|
||||||
|
light_device = devices_present;
|
||||||
light_subtype = light_type &7;
|
light_subtype = light_type &7;
|
||||||
|
|
||||||
if (light_type < LT_PWM6) { // PWM
|
if (light_type < LT_PWM6) { // PWM
|
||||||
@ -526,35 +528,56 @@ char* LightGetColor(uint8_t type, char* scolor)
|
|||||||
void LightPowerOn()
|
void LightPowerOn()
|
||||||
{
|
{
|
||||||
if (Settings.light_dimmer && !(light_power)) {
|
if (Settings.light_dimmer && !(light_power)) {
|
||||||
ExecuteCommandPower(devices_present, 1);
|
ExecuteCommandPower(light_device, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LightPreparePower()
|
void LightState(uint8_t append)
|
||||||
{
|
{
|
||||||
char scolor[25];
|
char scolor[25];
|
||||||
char scommand[33];
|
char scommand[33];
|
||||||
|
|
||||||
if (Settings.light_dimmer && !(light_power)) {
|
if (append) {
|
||||||
ExecuteCommandPower(devices_present, 7); // No publishPowerState
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,"), mqtt_data);
|
||||||
|
} else {
|
||||||
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{"));
|
||||||
}
|
}
|
||||||
else if (!Settings.light_dimmer && light_power) {
|
GetPowerDevice(scommand, light_device, sizeof(scommand));
|
||||||
ExecuteCommandPower(devices_present, 6); // No publishPowerState
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s\"%s\":\"%s\",\"" D_CMND_DIMMER "\":%d"),
|
||||||
}
|
mqtt_data, scommand, GetStateText(light_power), Settings.light_dimmer);
|
||||||
#ifdef USE_DOMOTICZ
|
|
||||||
DomoticzUpdatePowerState(devices_present);
|
|
||||||
#endif // USE_DOMOTICZ
|
|
||||||
|
|
||||||
GetPowerDevice(scommand, devices_present, sizeof(scommand));
|
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"%s\":\"%s\",\"" D_CMND_DIMMER "\":%d"),
|
|
||||||
scommand, GetStateText(light_power), Settings.light_dimmer);
|
|
||||||
if (light_subtype > LST_SINGLE) {
|
if (light_subtype > LST_SINGLE) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_CMND_COLOR "\":\"%s\""), mqtt_data, LightGetColor(0, scolor));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_CMND_COLOR "\":\"%s\""), mqtt_data, LightGetColor(0, scolor));
|
||||||
}
|
}
|
||||||
if ((LST_COLDWARM == light_subtype) || (LST_RGBWC == light_subtype)) {
|
if ((LST_COLDWARM == light_subtype) || (LST_RGBWC == light_subtype)) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_CMND_COLORTEMPERATURE "\":%d"), mqtt_data, LightGetColorTemp());
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_CMND_COLORTEMPERATURE "\":%d"), mqtt_data, LightGetColorTemp());
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s}"), mqtt_data);
|
if (append) {
|
||||||
|
if (light_subtype >= LST_RGB) {
|
||||||
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_CMND_SCHEME "\":%d"), mqtt_data, Settings.light_scheme);
|
||||||
|
}
|
||||||
|
if (LT_WS2812 == light_type) {
|
||||||
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_CMND_WIDTH "\":%d"), mqtt_data, Settings.light_width);
|
||||||
|
}
|
||||||
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_CMND_FADE "\":\"%s\",\"" D_CMND_SPEED "\":%d,\"" D_CMND_LEDTABLE "\":\"%s\""),
|
||||||
|
mqtt_data, GetStateText(Settings.light_fade), Settings.light_speed, GetStateText(Settings.light_correction));
|
||||||
|
} else {
|
||||||
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s}"), mqtt_data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LightPreparePower()
|
||||||
|
{
|
||||||
|
if (Settings.light_dimmer && !(light_power)) {
|
||||||
|
ExecuteCommandPower(light_device, 7); // No publishPowerState
|
||||||
|
}
|
||||||
|
else if (!Settings.light_dimmer && light_power) {
|
||||||
|
ExecuteCommandPower(light_device, 6); // No publishPowerState
|
||||||
|
}
|
||||||
|
#ifdef USE_DOMOTICZ
|
||||||
|
DomoticzUpdatePowerState(light_device);
|
||||||
|
#endif // USE_DOMOTICZ
|
||||||
|
|
||||||
|
LightState(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LightFade()
|
void LightFade()
|
||||||
@ -638,7 +661,8 @@ void LightRandomColor()
|
|||||||
|
|
||||||
void LightSetPower()
|
void LightSetPower()
|
||||||
{
|
{
|
||||||
light_power = XdrvMailbox.index;
|
// light_power = XdrvMailbox.index;
|
||||||
|
light_power = bitRead(XdrvMailbox.index, light_device -1);
|
||||||
if (light_wakeup_active) {
|
if (light_wakeup_active) {
|
||||||
light_wakeup_active--;
|
light_wakeup_active--;
|
||||||
}
|
}
|
||||||
|
@ -309,21 +309,26 @@ boolean IrSendCommand()
|
|||||||
data = ir_json[D_JSON_IR_DATA];
|
data = ir_json[D_JSON_IR_DATA];
|
||||||
if (protocol && bits && data) {
|
if (protocol && bits && data) {
|
||||||
int protocol_code = GetCommandCode(protocol_text, sizeof(protocol_text), protocol, kIrRemoteProtocols);
|
int protocol_code = GetCommandCode(protocol_text, sizeof(protocol_text), protocol, kIrRemoteProtocols);
|
||||||
|
|
||||||
|
snprintf_P(log_data, sizeof(log_data), PSTR("IRS: protocol_text %s, protocol %s, bits %d, data %d, protocol_code %d"),
|
||||||
|
protocol_text, protocol, bits, data, protocol_code);
|
||||||
|
AddLog(LOG_LEVEL_DEBUG);
|
||||||
|
|
||||||
switch (protocol_code) {
|
switch (protocol_code) {
|
||||||
case NEC:
|
case NEC:
|
||||||
irsend->sendNEC(data, bits); break;
|
irsend->sendNEC(data, (bits > NEC_BITS) ? NEC_BITS : bits); break;
|
||||||
case SONY:
|
case SONY:
|
||||||
irsend->sendSony(data, bits); break;
|
irsend->sendSony(data, (bits > SONY_20_BITS) ? SONY_20_BITS : bits, 2); break;
|
||||||
case RC5:
|
case RC5:
|
||||||
irsend->sendRC5(data, bits); break;
|
irsend->sendRC5(data, bits); break;
|
||||||
case RC6:
|
case RC6:
|
||||||
irsend->sendRC6(data, bits); break;
|
irsend->sendRC6(data, bits); break;
|
||||||
case DISH:
|
case DISH:
|
||||||
irsend->sendDISH(data, bits); break;
|
irsend->sendDISH(data, (bits > DISH_BITS) ? DISH_BITS : bits); break;
|
||||||
case JVC:
|
case JVC:
|
||||||
irsend->sendJVC(data, bits, 1); break;
|
irsend->sendJVC(data, (bits > JVC_BITS) ? JVC_BITS : bits, 1); break;
|
||||||
case SAMSUNG:
|
case SAMSUNG:
|
||||||
irsend->sendSAMSUNG(data, bits); break;
|
irsend->sendSAMSUNG(data, (bits > SAMSUNG_BITS) ? SAMSUNG_BITS : bits); break;
|
||||||
case PANASONIC:
|
case PANASONIC:
|
||||||
irsend->sendPanasonic(bits, data); break;
|
irsend->sendPanasonic(bits, data); break;
|
||||||
default:
|
default:
|
||||||
|
@ -82,7 +82,7 @@ boolean XdrvCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_len
|
|||||||
return XdrvCall(FUNC_COMMAND);
|
return XdrvCall(FUNC_COMMAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
void XdrvSetPower(uint8_t mpower)
|
void XdrvSetPower(power_t mpower)
|
||||||
{
|
{
|
||||||
// XdrvMailbox.valid = 1;
|
// XdrvMailbox.valid = 1;
|
||||||
XdrvMailbox.index = mpower;
|
XdrvMailbox.index = mpower;
|
||||||
@ -102,6 +102,16 @@ boolean XdrvMqttData(char *topicBuf, uint16_t stopicBuf, char *dataBuf, uint16_t
|
|||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* Function call to all xdrv
|
* Function call to all xdrv
|
||||||
|
*
|
||||||
|
* FUNC_INIT
|
||||||
|
* FUNC_MQTT_SUBSCRIBE
|
||||||
|
* FUNC_MQTT_INIT
|
||||||
|
* return FUNC_MQTT_DATA
|
||||||
|
* return FUNC_COMMAND
|
||||||
|
* FUNC_SET_POWER
|
||||||
|
* FUNC_SHOW_SENSOR
|
||||||
|
* FUNC_EVERY_SECOND
|
||||||
|
* FUNC_EVERY_50_MSECOND
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean XdrvCall(byte Function)
|
boolean XdrvCall(byte Function)
|
||||||
|
@ -504,8 +504,12 @@ boolean Xsns09(byte function)
|
|||||||
switch (function) {
|
switch (function) {
|
||||||
case FUNC_PREP_BEFORE_TELEPERIOD:
|
case FUNC_PREP_BEFORE_TELEPERIOD:
|
||||||
BmpDetect();
|
BmpDetect();
|
||||||
|
break;
|
||||||
|
case FUNC_EVERY_SECOND:
|
||||||
#ifdef USE_BME680
|
#ifdef USE_BME680
|
||||||
Bme680PerformReading();
|
if (tele_period == Settings.tele_period -3) {
|
||||||
|
Bme680PerformReading();
|
||||||
|
}
|
||||||
#endif // USE_BME680
|
#endif // USE_BME680
|
||||||
break;
|
break;
|
||||||
case FUNC_JSON_APPEND:
|
case FUNC_JSON_APPEND:
|
||||||
|
@ -71,6 +71,7 @@ const char kMhzTypes[] PROGMEM = "MHZ19|MHZ19B";
|
|||||||
const uint8_t mhz_cmnd_read_ppm[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
|
const uint8_t mhz_cmnd_read_ppm[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
|
||||||
const uint8_t mhz_cmnd_abc_enable[9] = {0xFF, 0x01, 0x79, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xE6};
|
const uint8_t mhz_cmnd_abc_enable[9] = {0xFF, 0x01, 0x79, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xE6};
|
||||||
const uint8_t mhz_cmnd_abc_disable[9] = {0xFF, 0x01, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86};
|
const uint8_t mhz_cmnd_abc_disable[9] = {0xFF, 0x01, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86};
|
||||||
|
//const uint8_t mhz_cmnd_zeropoint[9] = {0xff, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78};
|
||||||
|
|
||||||
uint8_t mhz_type = 1;
|
uint8_t mhz_type = 1;
|
||||||
uint16_t mhz_last_ppm = 0;
|
uint16_t mhz_last_ppm = 0;
|
||||||
|
@ -112,6 +112,14 @@ void XSnsInit()
|
|||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* Function call to all xsns
|
* Function call to all xsns
|
||||||
|
*
|
||||||
|
* FUNC_INIT
|
||||||
|
* FUNC_PREP_BEFORE_TELEPERIOD
|
||||||
|
* FUNC_SAVE_BEFORE_RESTART
|
||||||
|
* FUNC_JSON_APPEND
|
||||||
|
* FUNC_WEB_APPEND
|
||||||
|
* FUNC_EVERY_SECOND
|
||||||
|
* FUNC_EVERY_50_MSECOND
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
boolean XsnsCall(byte Function)
|
boolean XsnsCall(byte Function)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user