mirror of https://github.com/arendst/Tasmota.git
Add automagic two step OTA and Chinese locale
5.11.1a * Add automagic two step Web server OTA upgrade using filename-minimal image if OTA free space is too small * Add chinese language file (#1551)
This commit is contained in:
parent
594f465f71
commit
aed070cc90
|
@ -1,4 +1,6 @@
|
|||
/* 5.11.1a
|
||||
* Add automagic two step Web server OTA upgrade using filename-minimal image if OTA free space is too small
|
||||
* Add chinese language file (#1551)
|
||||
*
|
||||
* 5.11.1 20180107
|
||||
* Fix Sonoff Pow command handling (#1542)
|
||||
|
|
|
@ -75,6 +75,7 @@
|
|||
#define D_JSON_LOW "Low"
|
||||
#define D_JSON_MAC "Mac"
|
||||
#define D_JSON_MASK "Mask"
|
||||
#define D_JSON_MINIMAL "minimal"
|
||||
#define D_JSON_NO "No"
|
||||
#define D_JSON_NOISE "Noise"
|
||||
#define D_JSON_NONE "None"
|
||||
|
@ -359,7 +360,7 @@ const char kUnitNames[] PROGMEM =
|
|||
D_UNIT_MILLIAMPERE "|"
|
||||
D_UNIT_MILLISECOND "|"
|
||||
D_UNIT_MINUTE "|"
|
||||
D_UNIT_PPM "|"
|
||||
D_UNIT_PARTS_PER_MILLION "|"
|
||||
D_UNIT_PRESSURE "|"
|
||||
D_UNIT_SECOND "|"
|
||||
D_UNIT_SECTORS "|"
|
||||
|
@ -428,7 +429,7 @@ const char HTTP_SNS_SEAPRESSURE[] PROGMEM = "%s{s}%s " D_PRESSUREATSEALEVEL "{m}
|
|||
const char HTTP_SNS_ANALOG[] PROGMEM = "%s{s}%s " D_ANALOG_INPUT "%d{m}%d{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||
|
||||
#if defined(USE_MHZ19) || defined(USE_SENSEAIR)
|
||||
const char HTTP_SNS_CO2[] PROGMEM = "%s{s}%s " D_CO2 "{m}%d " D_UNIT_PPM "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||
const char HTTP_SNS_CO2[] PROGMEM = "%s{s}%s " D_CO2 "{m}%d " D_UNIT_PARTS_PER_MILLION "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||
#endif // USE_WEBSERVER
|
||||
|
||||
const char S_MAIN_MENU[] PROGMEM = D_MAIN_MENU;
|
||||
|
|
|
@ -149,6 +149,7 @@
|
|||
#define D_WEB_SERVER "Web-Server"
|
||||
|
||||
// sonoff.ino
|
||||
#define D_WARNING_MINIMAL_VERSION "WARNING This version does not support persistent settings"
|
||||
#define D_LEVEL_10 "level 1-0"
|
||||
#define D_LEVEL_01 "level 0-1"
|
||||
#define D_SERIAL_LOGGING_DISABLED "Serielles logging deaktiviert"
|
||||
|
@ -385,6 +386,11 @@
|
|||
#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor hat ACK-Befehl nicht ausgeführt"
|
||||
#define D_SHT1X_FOUND "SHT1X gefunden"
|
||||
|
||||
// xsns_18_pms5003.ino
|
||||
#define D_STANDARD_CONCENTRATION "Standard Concentration"
|
||||
#define D_ENVIRONMENTAL_CONCENTRATION "Environmental Concentration"
|
||||
#define D_PARTICALS_BEYOND "Particals beyond"
|
||||
|
||||
// sonoff_template.h
|
||||
// Max string length is 8 characters including suffixes
|
||||
#define D_SENSOR_NONE "None"
|
||||
|
@ -420,11 +426,14 @@
|
|||
#define D_UNIT_KILOOHM "kOhm"
|
||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||
#define D_UNIT_LUX "lx"
|
||||
#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
|
||||
#define D_UNIT_MICROMETER "um"
|
||||
#define D_UNIT_MICROSECOND "µs"
|
||||
#define D_UNIT_MILLIAMPERE "mA"
|
||||
#define D_UNIT_MILLISECOND "ms"
|
||||
#define D_UNIT_MINUTE "min"
|
||||
#define D_UNIT_PPM "ppm"
|
||||
#define D_UNIT_PARTS_PER_DECILITER "ppd"
|
||||
#define D_UNIT_PARTS_PER_MILLION "ppm"
|
||||
#define D_UNIT_PRESSURE "hPa"
|
||||
#define D_UNIT_SECOND "sek"
|
||||
#define D_UNIT_SECTORS "Sektoren"
|
||||
|
|
|
@ -149,6 +149,7 @@
|
|||
#define D_WEB_SERVER "Web Server"
|
||||
|
||||
// sonoff.ino
|
||||
#define D_WARNING_MINIMAL_VERSION "WARNING This version does not support persistent settings"
|
||||
#define D_LEVEL_10 "level 1-0"
|
||||
#define D_LEVEL_01 "level 0-1"
|
||||
#define D_SERIAL_LOGGING_DISABLED "Serial logging disabled"
|
||||
|
@ -385,6 +386,11 @@
|
|||
#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor did not ACK command"
|
||||
#define D_SHT1X_FOUND "SHT1X found"
|
||||
|
||||
// xsns_18_pms5003.ino
|
||||
#define D_STANDARD_CONCENTRATION "Standard Concentration"
|
||||
#define D_ENVIRONMENTAL_CONCENTRATION "Environmental Concentration"
|
||||
#define D_PARTICALS_BEYOND "Particals beyond"
|
||||
|
||||
// sonoff_template.h
|
||||
// Max string length is 8 characters including suffixes
|
||||
#define D_SENSOR_NONE "None"
|
||||
|
@ -420,11 +426,14 @@
|
|||
#define D_UNIT_KILOOHM "kOhm"
|
||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||
#define D_UNIT_LUX "lx"
|
||||
#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
|
||||
#define D_UNIT_MICROMETER "um"
|
||||
#define D_UNIT_MICROSECOND "us"
|
||||
#define D_UNIT_MILLIAMPERE "mA"
|
||||
#define D_UNIT_MILLISECOND "ms"
|
||||
#define D_UNIT_MINUTE "Min"
|
||||
#define D_UNIT_PPM "ppm"
|
||||
#define D_UNIT_PARTS_PER_DECILITER "ppd"
|
||||
#define D_UNIT_PARTS_PER_MILLION "ppm"
|
||||
#define D_UNIT_PRESSURE "hPa"
|
||||
#define D_UNIT_SECOND "sec"
|
||||
#define D_UNIT_SECTORS "sectors"
|
||||
|
|
|
@ -149,6 +149,7 @@
|
|||
#define D_WEB_SERVER "Web Server"
|
||||
|
||||
// sonoff.ino
|
||||
#define D_WARNING_MINIMAL_VERSION "WARNING This version does not support persistent settings"
|
||||
#define D_LEVEL_10 "level 1-0"
|
||||
#define D_LEVEL_01 "level 0-1"
|
||||
#define D_SERIAL_LOGGING_DISABLED "Log seriale disabilitato"
|
||||
|
@ -385,6 +386,11 @@
|
|||
#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensore non ha eseguito il comando ACK"
|
||||
#define D_SHT1X_FOUND "SHT1X trovato"
|
||||
|
||||
// xsns_18_pms5003.ino
|
||||
#define D_STANDARD_CONCENTRATION "Standard Concentration"
|
||||
#define D_ENVIRONMENTAL_CONCENTRATION "Environmental Concentration"
|
||||
#define D_PARTICALS_BEYOND "Particals beyond"
|
||||
|
||||
// sonoff_template.h
|
||||
// Max string length is 8 characters including suffixes
|
||||
#define D_SENSOR_NONE "None"
|
||||
|
@ -420,11 +426,14 @@
|
|||
#define D_UNIT_KILOOHM "kOhm"
|
||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||
#define D_UNIT_LUX "lx"
|
||||
#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
|
||||
#define D_UNIT_MICROMETER "um"
|
||||
#define D_UNIT_MICROSECOND "us"
|
||||
#define D_UNIT_MILLIAMPERE "mA"
|
||||
#define D_UNIT_MILLISECOND "ms"
|
||||
#define D_UNIT_MINUTE "Min"
|
||||
#define D_UNIT_PPM "ppm"
|
||||
#define D_UNIT_PARTS_PER_DECILITER "ppd"
|
||||
#define D_UNIT_PARTS_PER_MILLION "ppm"
|
||||
#define D_UNIT_PRESSURE "hPa"
|
||||
#define D_UNIT_SECOND "sec"
|
||||
#define D_UNIT_SECTORS "settori"
|
||||
|
|
|
@ -149,6 +149,7 @@
|
|||
#define D_WEB_SERVER "Webserver"
|
||||
|
||||
// sonoff.ino
|
||||
#define D_WARNING_MINIMAL_VERSION "WAARSCHUWING Deze versie bewaart geen instellingen"
|
||||
#define D_LEVEL_10 "niveau 1-0"
|
||||
#define D_LEVEL_01 "niveau 0-1"
|
||||
#define D_SERIAL_LOGGING_DISABLED "Serieel logging uitgeschakeld"
|
||||
|
@ -385,6 +386,11 @@
|
|||
#define D_SENSOR_DID_NOT_ACK_COMMAND "Geen opdracht ACK van sensor"
|
||||
#define D_SHT1X_FOUND "SHT1X gevonden"
|
||||
|
||||
// xsns_18_pms5003.ino
|
||||
#define D_STANDARD_CONCENTRATION "Standard Concentration"
|
||||
#define D_ENVIRONMENTAL_CONCENTRATION "Environmental Concentration"
|
||||
#define D_PARTICALS_BEYOND "Particals beyond"
|
||||
|
||||
// sonoff_template.h
|
||||
// Max string length is 8 characters including suffixes
|
||||
#define D_SENSOR_NONE "Geen"
|
||||
|
@ -420,11 +426,14 @@
|
|||
#define D_UNIT_KILOOHM "kOhm"
|
||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||
#define D_UNIT_LUX "lx"
|
||||
#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
|
||||
#define D_UNIT_MICROMETER "um"
|
||||
#define D_UNIT_MICROSECOND "us"
|
||||
#define D_UNIT_MILLIAMPERE "mA"
|
||||
#define D_UNIT_MILLISECOND "ms"
|
||||
#define D_UNIT_MINUTE "Min"
|
||||
#define D_UNIT_PPM "ppm"
|
||||
#define D_UNIT_PARTS_PER_DECILITER "ppd"
|
||||
#define D_UNIT_PARTS_PER_MILLION "ppm"
|
||||
#define D_UNIT_PRESSURE "hPa"
|
||||
#define D_UNIT_SECOND "sec"
|
||||
#define D_UNIT_SECTORS "sectoren"
|
||||
|
|
|
@ -149,6 +149,7 @@
|
|||
#define D_WEB_SERVER "Web Server"
|
||||
|
||||
// sonoff.ino
|
||||
#define D_WARNING_MINIMAL_VERSION "WARNING This version does not support persistent settings"
|
||||
#define D_LEVEL_10 "poziom 1-0"
|
||||
#define D_LEVEL_01 "poziom 0-1"
|
||||
#define D_SERIAL_LOGGING_DISABLED "Wylaczony dziennik na porcie szeregowym"
|
||||
|
@ -385,6 +386,11 @@
|
|||
#define D_SENSOR_DID_NOT_ACK_COMMAND "Czujnik nie otrzymal komendy ACK"
|
||||
#define D_SHT1X_FOUND "SHT1X znaleziony"
|
||||
|
||||
// xsns_18_pms5003.ino
|
||||
#define D_STANDARD_CONCENTRATION "Standard Concentration"
|
||||
#define D_ENVIRONMENTAL_CONCENTRATION "Environmental Concentration"
|
||||
#define D_PARTICALS_BEYOND "Particals beyond"
|
||||
|
||||
// sonoff_template.h
|
||||
// Max string length is 8 characters including suffixes
|
||||
#define D_SENSOR_NONE "Brak"
|
||||
|
@ -420,11 +426,14 @@
|
|||
#define D_UNIT_KILOOHM "kOhm"
|
||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||
#define D_UNIT_LUX "lx"
|
||||
#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
|
||||
#define D_UNIT_MICROMETER "um"
|
||||
#define D_UNIT_MICROSECOND "us"
|
||||
#define D_UNIT_MILLIAMPERE "mA"
|
||||
#define D_UNIT_MILLISECOND "ms"
|
||||
#define D_UNIT_MINUTE "Min"
|
||||
#define D_UNIT_PPM "ppm"
|
||||
#define D_UNIT_PARTS_PER_DECILITER "ppd"
|
||||
#define D_UNIT_PARTS_PER_MILLION "ppm"
|
||||
#define D_UNIT_PRESSURE "hPa"
|
||||
#define D_UNIT_SECOND "sec"
|
||||
#define D_UNIT_SECTORS "sektory"
|
||||
|
|
|
@ -0,0 +1,469 @@
|
|||
/*
|
||||
zh-CN.h - localization for Chinese (Simplified) - China for Sonoff-Tasmota
|
||||
|
||||
Copyright (C) 2018 Theo Arends (translated by killadm)
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef _LANGUAGE_ZH_CN_H_
|
||||
#define _LANGUAGE_ZH_CN_H_
|
||||
|
||||
/*************************** ATTENTION *******************************\
|
||||
*
|
||||
* Due to memory constraints only UTF-8 is supported.
|
||||
* To save code space keep text as short as possible.
|
||||
* Time and Date provided by SDK can not be localized (yet).
|
||||
* Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
|
||||
* Use online command Prefix to translate cmnd, stat and tele.
|
||||
*
|
||||
\*********************************************************************/
|
||||
|
||||
// "2017-03-07T11:08:02" - ISO8601:2004
|
||||
#define D_YEAR_MONTH_SEPARATOR "-"
|
||||
#define D_MONTH_DAY_SEPARATOR "-"
|
||||
#define D_DATE_TIME_SEPARATOR "T"
|
||||
#define D_HOUR_MINUTE_SEPARATOR ":"
|
||||
#define D_MINUTE_SECOND_SEPARATOR ":"
|
||||
|
||||
#define D_DAY3LIST "SunMonTueWedThuFriSat"
|
||||
#define D_MONTH3LIST "JanFebMarAprMayJunJulAugSepOctNovDec"
|
||||
|
||||
// Non JSON decimal separator
|
||||
#define D_DECIMAL_SEPARATOR "."
|
||||
|
||||
// Common
|
||||
#define D_ADMIN "Admin"
|
||||
#define D_AIR_QUALITY "空气质量"
|
||||
#define D_AP "AP" // Access Point
|
||||
#define D_AS "名称:"
|
||||
#define D_AUTO "自动"
|
||||
#define D_BLINK "闪烁"
|
||||
#define D_BLINKOFF "闪烁关"
|
||||
#define D_BOOT_COUNT "启动次数"
|
||||
#define D_BRIGHTLIGHT "亮度"
|
||||
#define D_BUTTON "按钮"
|
||||
#define D_BY "by" // Written by me
|
||||
#define D_BYTES "大小:"
|
||||
#define D_CELSIUS "摄氏"
|
||||
#define D_CO2 "二氧化碳"
|
||||
#define D_CODE "代码" // Button code
|
||||
#define D_COLDLIGHT "冷"
|
||||
#define D_COMMAND "命令:"
|
||||
#define D_CONNECTED "已连接"
|
||||
#define D_COUNT "数量:"
|
||||
#define D_COUNTER "Counter"
|
||||
#define D_CURRENT "电流" // As in Voltage and Current
|
||||
#define D_DATA "数据:"
|
||||
#define D_DARKLIGHT "Dark"
|
||||
#define D_DEBUG "调试"
|
||||
#define D_DISABLED "禁用"
|
||||
#define D_DNS_SERVER "DNS服务器"
|
||||
#define D_DONE "完成"
|
||||
#define D_DST_TIME "DST"
|
||||
#define D_EMULATION "设备模拟"
|
||||
#define D_ENABLED "启用"
|
||||
#define D_ERASE "擦除"
|
||||
#define D_ERROR "错误"
|
||||
#define D_FAHRENHEIT "华氏"
|
||||
#define D_FAILED "失败"
|
||||
#define D_FALLBACK "Fallback"
|
||||
#define D_FALLBACK_TOPIC "Fallback Topic"
|
||||
#define D_FALSE "False"
|
||||
#define D_FILE "文件:"
|
||||
#define D_FREE_MEMORY "空闲内存"
|
||||
#define D_GAS "气体"
|
||||
#define D_GATEWAY "网关"
|
||||
#define D_GROUP "组:"
|
||||
#define D_HOST "主机"
|
||||
#define D_HOSTNAME "主机名"
|
||||
#define D_HUMIDITY "湿度"
|
||||
#define D_ILLUMINANCE "照度"
|
||||
#define D_IMMEDIATE "immediate" // Button immediate
|
||||
#define D_INDEX "索引:"
|
||||
#define D_INFO "信息"
|
||||
#define D_INITIALIZED "初始化完成"
|
||||
#define D_IP_ADDRESS "IP地址"
|
||||
#define D_LIGHT "灯"
|
||||
#define D_LWT "LWT"
|
||||
#define D_MODULE "模块"
|
||||
#define D_MQTT "MQTT"
|
||||
#define D_MULTI_PRESS "多次按键"
|
||||
#define D_NOISE "嘈杂"
|
||||
#define D_NONE "无"
|
||||
#define D_OFF "关"
|
||||
#define D_OFFLINE "离线"
|
||||
#define D_OK "好"
|
||||
#define D_ON "开"
|
||||
#define D_ONLINE "在线"
|
||||
#define D_PASSWORD "密码"
|
||||
#define D_PORT "端口"
|
||||
#define D_POWER_FACTOR "功率因数"
|
||||
#define D_POWERUSAGE "功率"
|
||||
#define D_PRESSURE "气压"
|
||||
#define D_PRESSUREATSEALEVEL "海平面气压"
|
||||
#define D_PROGRAM_FLASH_SIZE "固件 Flash 大小"
|
||||
#define D_PROGRAM_SIZE "固件大小"
|
||||
#define D_PROJECT "项目:"
|
||||
#define D_RECEIVED "已接收"
|
||||
#define D_RESTART "重启"
|
||||
#define D_RESTARTING "正在重启"
|
||||
#define D_RESTART_REASON "重启原因"
|
||||
#define D_RESTORE "恢复"
|
||||
#define D_RETAINED "已保留"
|
||||
#define D_SAVE "保存"
|
||||
#define D_SENSOR "传感器"
|
||||
#define D_SSID "名称"
|
||||
#define D_START "开始"
|
||||
#define D_STD_TIME "STD"
|
||||
#define D_STOP "停止"
|
||||
#define D_SUBNET_MASK "子网掩码"
|
||||
#define D_SUBSCRIBE_TO "订阅"
|
||||
#define D_SUCCESSFUL "成功"
|
||||
#define D_TEMPERATURE "温度"
|
||||
#define D_TO "to"
|
||||
#define D_TOGGLE "切换"
|
||||
#define D_TOPIC "主题"
|
||||
#define D_TRANSMIT "发送"
|
||||
#define D_TRUE "True"
|
||||
#define D_UPGRADE "升级"
|
||||
#define D_UPLOAD "上传"
|
||||
#define D_UPTIME "运行时间"
|
||||
#define D_USER "用户名"
|
||||
#define D_UTC_TIME "UTC"
|
||||
#define D_UV_LEVEL "紫外线水平"
|
||||
#define D_VERSION "版本"
|
||||
#define D_VOLTAGE "电压"
|
||||
#define D_WARMLIGHT "暖"
|
||||
#define D_WEB_SERVER "Web Server"
|
||||
|
||||
// sonoff.ino
|
||||
#define D_WARNING_MINIMAL_VERSION "警告:精简固件不支持配置持久化保存"
|
||||
#define D_LEVEL_10 "level 1-0"
|
||||
#define D_LEVEL_01 "level 0-1"
|
||||
#define D_SERIAL_LOGGING_DISABLED "串口日志已禁用"
|
||||
#define D_SYSLOG_LOGGING_REENABLED "Syslog 日志已开启"
|
||||
|
||||
#define D_SET_BAUDRATE_TO "设置波特率为:"
|
||||
#define D_RECEIVED_TOPIC "接收到的主题:"
|
||||
#define D_DATA_SIZE "数据大小:"
|
||||
#define D_ANALOG_INPUT "Analog"
|
||||
|
||||
#define D_FINGERPRINT "验证 TLS 指纹..."
|
||||
#define D_TLS_CONNECT_FAILED_TO "TLS 连接失败"
|
||||
#define D_RETRY_IN "重试倒计时:"
|
||||
#define D_VERIFIED "验证成功"
|
||||
#define D_INSECURE "指纹无效导致连接不安全"
|
||||
#define D_CONNECT_FAILED_TO "连接失败:"
|
||||
|
||||
// support.ino
|
||||
#define D_OSWATCH "osWatch"
|
||||
#define D_BLOCKED_LOOP "Blocked Loop"
|
||||
#define D_WPS_FAILED_WITH_STATUS "WPSconfig FAILED with status"
|
||||
#define D_ACTIVE_FOR_3_MINUTES "active for 3 minutes"
|
||||
#define D_FAILED_TO_START "未能启动"
|
||||
#define D_PATCH_ISSUE_2186 "Patch issue 2186"
|
||||
#define D_CONNECTING_TO_AP "连接到 AP"
|
||||
#define D_IN_MODE "模式:"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "连接失败,因为没有获取到IP地址"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "连接失败,无法连接AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "连接失败,AP密码不正确"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "连接失败,AP超时"
|
||||
#define D_ATTEMPTING_CONNECTION "尝试连接..."
|
||||
#define D_CHECKING_CONNECTION "检查连接..."
|
||||
#define D_QUERY_DONE "查询完成。 发现MQTT服务"
|
||||
#define D_MQTT_SERVICE_FOUND "发现MQTT服务:"
|
||||
#define D_FOUND_AT "found at"
|
||||
#define D_SYSLOG_HOST_NOT_FOUND "Syslog主机未找到"
|
||||
|
||||
// settings.ino
|
||||
#define D_SAVED_TO_FLASH_AT "保存到 flash:"
|
||||
#define D_LOADED_FROM_FLASH_AT "从 flash 载入"
|
||||
#define D_USE_DEFAULTS "使用默认设置"
|
||||
#define D_ERASED_SECTOR "擦除删除"
|
||||
|
||||
// webserver.ino
|
||||
#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "固件版本过低 - 请升级"
|
||||
#define D_WEBSERVER_ACTIVE_ON "Web服务器:"
|
||||
#define D_WITH_IP_ADDRESS "IP地址:"
|
||||
#define D_WEBSERVER_STOPPED "Web 服务器已停止"
|
||||
#define D_FILE_NOT_FOUND "文件未找到"
|
||||
#define D_REDIRECTED "重定向到认证页面"
|
||||
#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
|
||||
#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager 设置接入点"
|
||||
#define D_TRYING_TO_CONNECT "尝试将设备连接到网络"
|
||||
|
||||
#define D_RESTART_IN "重启需要"
|
||||
#define D_SECONDS "秒"
|
||||
#define D_DEVICE_WILL_RESTART "设备将在几分钟内重启"
|
||||
#define D_BUTTON_TOGGLE "状态切换"
|
||||
#define D_CONFIGURATION "设置"
|
||||
#define D_INFORMATION "信息"
|
||||
#define D_FIRMWARE_UPGRADE "固件升级"
|
||||
#define D_CONSOLE "控制台"
|
||||
#define D_CONFIRM_RESTART "确认重启"
|
||||
|
||||
#define D_CONFIGURE_MODULE "模块设置"
|
||||
#define D_CONFIGURE_WIFI "WiFi设置"
|
||||
#define D_CONFIGURE_MQTT "MQTT设置"
|
||||
#define D_CONFIGURE_DOMOTICZ "Domoticz设置"
|
||||
#define D_CONFIGURE_LOGGING "日志设置"
|
||||
#define D_CONFIGURE_OTHER "其他设置"
|
||||
#define D_CONFIRM_RESET_CONFIGURATION "确认重置配置"
|
||||
#define D_RESET_CONFIGURATION "重置配置"
|
||||
#define D_BACKUP_CONFIGURATION "备份配置"
|
||||
#define D_RESTORE_CONFIGURATION "还原配置"
|
||||
#define D_MAIN_MENU "主菜单"
|
||||
|
||||
#define D_MODULE_PARAMETERS "模块设置"
|
||||
#define D_MODULE_TYPE "模块类型"
|
||||
#define D_GPIO "GPIO"
|
||||
#define D_SERIAL_IN "串口输入(RX)"
|
||||
#define D_SERIAL_OUT "串口输出(TX)"
|
||||
|
||||
#define D_WIFI_PARAMETERS "Wifi设置"
|
||||
#define D_SCAN_FOR_WIFI_NETWORKS "扫描无线网络"
|
||||
#define D_SCAN_DONE "扫描完毕"
|
||||
#define D_NO_NETWORKS_FOUND "未找到任何网络"
|
||||
#define D_REFRESH_TO_SCAN_AGAIN "刷新并重试"
|
||||
#define D_DUPLICATE_ACCESSPOINT "重复AP"
|
||||
#define D_SKIPPING_LOW_QUALITY "忽略弱信号网络"
|
||||
#define D_RSSI "RSSI"
|
||||
#define D_WEP "WEP"
|
||||
#define D_WPA_PSK "WPA PSK"
|
||||
#define D_WPA2_PSK "WPA2 PSK"
|
||||
#define D_AP1_SSID "AP1 名称"
|
||||
#define D_AP1_PASSWORD "AP1 密码"
|
||||
#define D_AP2_SSID "AP2 名称"
|
||||
#define D_AP2_PASSWORD "AP2 密码"
|
||||
|
||||
#define D_MQTT_PARAMETERS "MQTT设置"
|
||||
#define D_CLIENT "客户端"
|
||||
#define D_FULL_TOPIC "完整主题"
|
||||
|
||||
#define D_LOGGING_PARAMETERS "日志设置"
|
||||
#define D_SERIAL_LOG_LEVEL "串口日志级别"
|
||||
#define D_WEB_LOG_LEVEL "Web 日志级别"
|
||||
#define D_SYS_LOG_LEVEL "Syslog 日志级别"
|
||||
#define D_MORE_DEBUG "全部调试"
|
||||
#define D_SYSLOG_HOST "Syslog 主机地址"
|
||||
#define D_SYSLOG_PORT "Syslog 端口"
|
||||
#define D_TELEMETRY_PERIOD "上报周期"
|
||||
|
||||
#define D_OTHER_PARAMETERS "其他设置"
|
||||
#define D_WEB_ADMIN_PASSWORD "WEB管理密码"
|
||||
#define D_MQTT_ENABLE "启用MQTT"
|
||||
#define D_FRIENDLY_NAME "昵称"
|
||||
#define D_BELKIN_WEMO "贝尔金 WeMo"
|
||||
#define D_HUE_BRIDGE "飞利浦 Hue 网桥"
|
||||
#define D_SINGLE_DEVICE "单设备"
|
||||
#define D_MULTI_DEVICE "多设备"
|
||||
|
||||
#define D_SAVE_CONFIGURATION "保存设置"
|
||||
#define D_CONFIGURATION_SAVED "设置已保存"
|
||||
#define D_CONFIGURATION_RESET "设置已重置"
|
||||
|
||||
#define D_PROGRAM_VERSION "固件版本"
|
||||
#define D_BUILD_DATE_AND_TIME "编译时间"
|
||||
#define D_CORE_AND_SDK_VERSION "内核版本"
|
||||
#define D_FLASH_WRITE_COUNT "刷机次数"
|
||||
#define D_MAC_ADDRESS "MAC地址"
|
||||
#define D_MQTT_HOST "MQTT主机"
|
||||
#define D_MQTT_PORT "MQTT端口"
|
||||
#define D_MQTT_CLIENT "MQTT客户端"
|
||||
#define D_MQTT_USER "MQTT用户名"
|
||||
#define D_MQTT_TOPIC "MQTT 主题(Topic)"
|
||||
#define D_MQTT_GROUP_TOPIC "MQTT 主题组(Group Topic)"
|
||||
#define D_MQTT_FULL_TOPIC "MQTT 完整主题(Full Topic)"
|
||||
#define D_MDNS_DISCOVERY "mDNS 发现"
|
||||
#define D_MDNS_ADVERTISE "mDNS 广播"
|
||||
#define D_ESP_CHIP_ID "ESP芯片ID"
|
||||
#define D_FLASH_CHIP_ID "Flash芯片ID"
|
||||
#define D_FLASH_CHIP_SIZE "Flash大小"
|
||||
#define D_FREE_PROGRAM_SPACE "空闲程序空间"
|
||||
|
||||
#define D_UPGRADE_BY_WEBSERVER "通过Web升级"
|
||||
#define D_OTA_URL "OTA地址"
|
||||
#define D_START_UPGRADE "开始升级"
|
||||
#define D_UPGRADE_BY_FILE_UPLOAD "通过文件升级"
|
||||
#define D_UPLOAD_STARTED "开始上传"
|
||||
#define D_UPGRADE_STARTED "开始升级"
|
||||
#define D_UPLOAD_DONE "上传完成"
|
||||
#define D_UPLOAD_ERR_1 "没有选择文件"
|
||||
#define D_UPLOAD_ERR_2 "没有足够空间"
|
||||
#define D_UPLOAD_ERR_3 "固件头不是 0xE9"
|
||||
#define D_UPLOAD_ERR_4 "固件太大"
|
||||
#define D_UPLOAD_ERR_5 "上传缓冲区不匹配"
|
||||
#define D_UPLOAD_ERR_6 "上传失败。 启用日志记录 3"
|
||||
#define D_UPLOAD_ERR_7 "上传取消"
|
||||
#define D_UPLOAD_ERR_8 "错误的固件"
|
||||
#define D_UPLOAD_ERR_9 "固件太大"
|
||||
#define D_UPLOAD_ERROR_CODE "上传错误代码"
|
||||
|
||||
#define D_ENTER_COMMAND "输入命令"
|
||||
#define D_ENABLE_WEBLOG_FOR_RESPONSE "如果预期响应,则启用Weblog 2"
|
||||
#define D_NEED_USER_AND_PASSWORD "需要 user=<用户名>&password=<密码>"
|
||||
|
||||
// xdrv_wemohue.ino
|
||||
#define D_MULTICAST_DISABLED "组播已禁用"
|
||||
#define D_MULTICAST_REJOINED "组播已(重新)加入"
|
||||
#define D_MULTICAST_JOIN_FAILED "组播加入失败"
|
||||
#define D_FAILED_TO_SEND_RESPONSE "请求发送失败"
|
||||
|
||||
#define D_WEMO "WeMo"
|
||||
#define D_WEMO_BASIC_EVENT "WeMo 基础事件"
|
||||
#define D_WEMO_EVENT_SERVICE "WeMo 事件服务"
|
||||
#define D_WEMO_META_SERVICE "WeMo meta 服务"
|
||||
#define D_WEMO_SETUP "WeMo 设置"
|
||||
#define D_RESPONSE_SENT "发送请求"
|
||||
|
||||
#define D_HUE "Hue"
|
||||
#define D_HUE_BRIDGE_SETUP "Hue 设置"
|
||||
#define D_HUE_API_NOT_IMPLEMENTED "Hue API 未实现"
|
||||
#define D_HUE_API "Hue API"
|
||||
#define D_HUE_POST_ARGS "Hue POST 参数"
|
||||
#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
|
||||
#define D_DOMOTICZ_PARAMETERS "Domoticz 设置"
|
||||
#define D_DOMOTICZ_IDX "Idx"
|
||||
#define D_DOMOTICZ_KEY_IDX "Key idx"
|
||||
#define D_DOMOTICZ_SWITCH_IDX "开关 idx"
|
||||
#define D_DOMOTICZ_SENSOR_IDX "传感器 idx"
|
||||
#define D_DOMOTICZ_TEMP "温度"
|
||||
#define D_DOMOTICZ_TEMP_HUM "温度,湿度"
|
||||
#define D_DOMOTICZ_TEMP_HUM_BARO "温度,湿度,气压"
|
||||
#define D_DOMOTICZ_POWER_ENERGY "功率,电量"
|
||||
#define D_DOMOTICZ_ILLUMINANCE "照度"
|
||||
#define D_DOMOTICZ_COUNT "数值"
|
||||
#define D_DOMOTICZ_VOLTAGE "电压"
|
||||
#define D_DOMOTICZ_CURRENT "电流"
|
||||
#define D_DOMOTICZ_AIRQUALITY "空气质量"
|
||||
#define D_DOMOTICZ_UPDATE_TIMER "更新计时器"
|
||||
|
||||
// xdrv_03_energy.ino
|
||||
#define D_ENERGY_TODAY "今日用电量"
|
||||
#define D_ENERGY_YESTERDAY "昨日用电量"
|
||||
#define D_ENERGY_TOTAL "总用电量"
|
||||
|
||||
// xsns_05_ds18b20.ino
|
||||
#define D_SENSOR_BUSY "传感器正忙"
|
||||
#define D_SENSOR_CRC_ERROR "传感器 CRC 校验错误"
|
||||
#define D_SENSORS_FOUND "发现传感器"
|
||||
|
||||
// xsns_06_dht.ino
|
||||
#define D_TIMEOUT_WAITING_FOR "等待超时"
|
||||
#define D_START_SIGNAL_LOW "开始低电平"
|
||||
#define D_START_SIGNAL_HIGH "开始高电平"
|
||||
#define D_PULSE "pulse"
|
||||
#define D_CHECKSUM_FAILURE "校验失败"
|
||||
|
||||
// xsns_07_sht1x.ino
|
||||
#define D_SENSOR_DID_NOT_ACK_COMMAND "传感器没有确认命令"
|
||||
#define D_SHT1X_FOUND "发现 SHT1X 传感器"
|
||||
|
||||
// xsns_18_pms5003.ino
|
||||
#define D_STANDARD_CONCENTRATION "标准颗粒物浓度"
|
||||
#define D_ENVIRONMENTAL_CONCENTRATION "大气环境下浓度"
|
||||
#define D_PARTICALS_BEYOND "颗粒物直径大于"
|
||||
|
||||
// sonoff_template.h
|
||||
// Max string length is 8 characters including suffixes
|
||||
#define D_SENSOR_NONE "None"
|
||||
#define D_SENSOR_DHT11 "DHT11"
|
||||
#define D_SENSOR_AM2301 "AM2301"
|
||||
#define D_SENSOR_SI7021 "SI7021"
|
||||
#define D_SENSOR_DS18X20 "DS18x20"
|
||||
#define D_SENSOR_I2C_SCL "I2C SCL"
|
||||
#define D_SENSOR_I2C_SDA "I2C SDA"
|
||||
#define D_SENSOR_WS2812 "WS2812"
|
||||
#define D_SENSOR_IRSEND "IRsend"
|
||||
#define D_SENSOR_SWITCH "Switch" // Suffix "1"
|
||||
#define D_SENSOR_BUTTON "Button" // Suffix "1"
|
||||
#define D_SENSOR_RELAY "Relay" // Suffix "1i"
|
||||
#define D_SENSOR_LED "Led" // Suffix "1i"
|
||||
#define D_SENSOR_PWM "PWM" // Suffix "1"
|
||||
#define D_SENSOR_COUNTER "Counter" // Suffix "1"
|
||||
#define D_SENSOR_IRRECV "IRrecv"
|
||||
#define D_SENSOR_MHZ_RX "MHZ Rx"
|
||||
#define D_SENSOR_MHZ_TX "MHZ Tx"
|
||||
#define D_SENSOR_PZEM_RX "PZEM Rx"
|
||||
#define D_SENSOR_PZEM_TX "PZEM Tx"
|
||||
#define D_SENSOR_SAIR_RX "SAir Rx"
|
||||
#define D_SENSOR_SAIR_TX "SAir Tx"
|
||||
#define D_SENSOR_SPI_CS "SPI CS"
|
||||
#define D_SENSOR_SPI_DC "SPI DC"
|
||||
#define D_SENSOR_BACKLIGHT "BkLight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "安"
|
||||
#define D_UNIT_HOUR "时"
|
||||
#define D_UNIT_KILOOHM "千欧"
|
||||
#define D_UNIT_KILOWATTHOUR "千瓦时"
|
||||
#define D_UNIT_LUX "勒克斯"
|
||||
#define D_UNIT_MICROGRAM_PER_CUBIC_METER "微克/立方米"
|
||||
#define D_UNIT_MICROMETER "微米"
|
||||
#define D_UNIT_MICROSECOND "微秒"
|
||||
#define D_UNIT_MILLIAMPERE "毫安"
|
||||
#define D_UNIT_MILLISECOND "毫秒"
|
||||
#define D_UNIT_MINUTE "分"
|
||||
#define D_UNIT_PARTS_PER_DECILITER "每分升"
|
||||
#define D_UNIT_PARTS_PER_MILLION "ppm"
|
||||
#define D_UNIT_PRESSURE "百帕"
|
||||
#define D_UNIT_SECOND "秒"
|
||||
#define D_UNIT_SECTORS "扇区"
|
||||
#define D_UNIT_VOLT "伏"
|
||||
#define D_UNIT_WATT "瓦"
|
||||
#define D_UNIT_WATTHOUR "瓦时"
|
||||
|
||||
// Log message prefix
|
||||
#define D_LOG_APPLICATION "APP: " // Application
|
||||
#define D_LOG_BRIDGE "BRG: " // Bridge
|
||||
#define D_LOG_CONFIG "CFG: " // Settings
|
||||
#define D_LOG_COMMAND "CMD: " // Command
|
||||
#define D_LOG_DEBUG "DBG: " // Debug
|
||||
#define D_LOG_DHT "DHT: " // DHT sensor
|
||||
#define D_LOG_DOMOTICZ "DOM: " // Domoticz
|
||||
#define D_LOG_DSB "DSB: " // DS18xB20 sensor
|
||||
#define D_LOG_HTTP "HTP: " // HTTP webserver
|
||||
#define D_LOG_I2C "I2C: " // I2C
|
||||
#define D_LOG_IRR "IRR: " // Infra Red Received
|
||||
#define D_LOG_LOG "LOG: " // Logging
|
||||
#define D_LOG_MODULE "MOD: " // Module
|
||||
#define D_LOG_MDNS "DNS: " // mDNS
|
||||
#define D_LOG_MQTT "MQT: " // MQTT
|
||||
#define D_LOG_OTHER "OTH: " // Other
|
||||
#define D_LOG_RESULT "RSL: " // Result
|
||||
#define D_LOG_RFR "RFR: " // RF Received
|
||||
#define D_LOG_SERIAL "SER: " // Serial
|
||||
#define D_LOG_SHT1 "SHT: " // SHT1x sensor
|
||||
#define D_LOG_UPLOAD "UPL: " // Upload
|
||||
#define D_LOG_UPNP "UPP: " // UPnP
|
||||
#define D_LOG_WIFI "WIF: " // Wifi
|
||||
|
||||
#endif // _LANGUAGE_ZH_CN_H_
|
|
@ -262,7 +262,7 @@ struct SYSCFG {
|
|||
struct RTCMEM {
|
||||
uint16_t valid; // 000
|
||||
byte oswatch_blocked_loop; // 002
|
||||
uint8_t unused; // 003
|
||||
uint8_t ota_loader; // 003
|
||||
unsigned long energy_kWhtoday; // 004
|
||||
unsigned long energy_kWhtotal; // 008
|
||||
unsigned long pulse_counter[MAX_COUNTERS]; // 00C
|
||||
|
|
|
@ -80,7 +80,7 @@ typedef unsigned long power_t; // Power (Relay) type
|
|||
#define STATES 20 // State loops per second
|
||||
#define SYSLOG_TIMER 600 // Seconds to restore syslog_level
|
||||
#define SERIALLOG_TIMER 600 // Seconds to disable SerialLog
|
||||
#define OTA_ATTEMPTS 10 // Number of times to try fetching the new firmware
|
||||
#define OTA_ATTEMPTS 5 // Number of times to try fetching the new firmware
|
||||
|
||||
#define INPUT_BUFFER_SIZE 250 // Max number of characters in (serial) command buffer
|
||||
#define CMDSZ 24 // Max number of characters in command
|
||||
|
|
|
@ -25,8 +25,7 @@
|
|||
- Select IDE Tools - Flash Size: "1M (no SPIFFS)"
|
||||
====================================================*/
|
||||
|
||||
#define VERSION 0x050B0101
|
||||
#define VERSION_STRING "5.11.1a" // Would be great to have a macro that fills this from VERSION ...
|
||||
#define VERSION 0x050B0101 // 5.11.1a
|
||||
|
||||
// Location specific includes
|
||||
#include "sonoff.h" // Enumaration used in user_config.h
|
||||
|
@ -120,6 +119,7 @@ int mqtt_connection_flag = 2; // MQTT connection messages flag
|
|||
int ota_state_flag = 0; // OTA state flag
|
||||
int ota_result = 0; // OTA result
|
||||
byte ota_retry_counter = OTA_ATTEMPTS; // OTA retry counter
|
||||
char *ota_url; // OTA url string
|
||||
int restart_flag = 0; // Sonoff restart flag
|
||||
int wifi_state_flag = WIFI_RESTART; // Wifi state flag
|
||||
int uptime = 0; // Current uptime in hours
|
||||
|
@ -188,6 +188,7 @@ uint8_t xdrv_present = 0; // Number of drivers found
|
|||
boolean (*xdrv_func_ptr[XDRV_MAX])(byte); // Driver Function Pointers
|
||||
uint8_t xsns_present = 0; // Number of External Sensors found
|
||||
boolean (*xsns_func_ptr[XSNS_MAX])(byte); // External Sensor Function Pointers for simple implementation of sensors
|
||||
char my_version[33]; // Composed version string
|
||||
char my_hostname[33]; // Composed Wifi hostname
|
||||
char mqtt_client[33]; // Composed MQTT Clientname
|
||||
char serial_in_buffer[INPUT_BUFFER_SIZE + 2]; // Receive buffer
|
||||
|
@ -467,8 +468,8 @@ void MqttConnected()
|
|||
}
|
||||
|
||||
if (mqtt_connection_flag) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_MODULE "\":\"%s\",\"" D_JSON_VERSION "\":\"" VERSION_STRING "\",\"" D_JSON_FALLBACKTOPIC "\":\"%s\",\"" D_CMND_GROUPTOPIC "\":\"%s\"}"),
|
||||
my_module.name, mqtt_client, Settings.mqtt_grptopic);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_MODULE "\":\"%s\",\"" D_JSON_VERSION "\":\"%s\",\"" D_JSON_FALLBACKTOPIC "\":\"%s\",\"" D_CMND_GROUPTOPIC "\":\"%s\"}"),
|
||||
my_module.name, my_version, mqtt_client, Settings.mqtt_grptopic);
|
||||
MqttPublishPrefixTopic_P(2, PSTR(D_RSLT_INFO "1"));
|
||||
#ifdef USE_WEBSERVER
|
||||
if (Settings.webserver) {
|
||||
|
@ -1222,9 +1223,9 @@ void MqttDataCallback(char* topic, byte* data, unsigned int data_len)
|
|||
// We also need at least 3 chars to make a valid version number string.
|
||||
if (((1 == data_len) && (1 == payload)) || ((data_len >= 3) && NewerVersion(dataBuf))) {
|
||||
ota_state_flag = 3;
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), "{\"%s\":\"" D_JSON_VERSION " " VERSION_STRING " " D_JSON_FROM " %s\"}", command, Settings.ota_url);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), "{\"%s\":\"" D_JSON_VERSION " %s " D_JSON_FROM " %s\"}", command, my_version, Settings.ota_url);
|
||||
} else {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), "{\"%s\":\"" D_JSON_ONE_OR_GT "\"}", command, VERSION_STRING);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), "{\"%s\":\"" D_JSON_ONE_OR_GT "\"}", command, my_version);
|
||||
}
|
||||
}
|
||||
else if (CMND_OTAURL == command_code) {
|
||||
|
@ -1699,8 +1700,8 @@ void PublishStatus(uint8_t payload)
|
|||
}
|
||||
|
||||
if ((0 == payload) || (2 == payload)) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_STATUS D_STATUS2_FIRMWARE "\":{\"" D_JSON_VERSION "\":\"" VERSION_STRING "\",\"" D_JSON_BUILDDATETIME "\":\"%s\",\"" D_JSON_BOOTVERSION "\":%d,\"" D_JSON_COREVERSION "\":\"" ARDUINO_ESP8266_RELEASE "\",\"" D_JSON_SDKVERSION "\":\"%s\"}}"),
|
||||
GetBuildDateAndTime().c_str(), ESP.getBootVersion(), ESP.getSdkVersion());
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_STATUS D_STATUS2_FIRMWARE "\":{\"" D_JSON_VERSION "\":\"%s\",\"" D_JSON_BUILDDATETIME "\":\"%s\",\"" D_JSON_BOOTVERSION "\":%d,\"" D_JSON_COREVERSION "\":\"" ARDUINO_ESP8266_RELEASE "\",\"" D_JSON_SDKVERSION "\":\"%s\"}}"),
|
||||
my_version, GetBuildDateAndTime().c_str(), ESP.getBootVersion(), ESP.getSdkVersion());
|
||||
MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "2"));
|
||||
}
|
||||
|
||||
|
@ -2224,6 +2225,8 @@ void StateLoop()
|
|||
if (ota_state_flag && (backlog_pointer == backlog_index)) {
|
||||
ota_state_flag--;
|
||||
if (2 == ota_state_flag) {
|
||||
ota_url = Settings.ota_url;
|
||||
RtcSettings.ota_loader = 0; // Try requested image first
|
||||
ota_retry_counter = OTA_ATTEMPTS;
|
||||
ESPhttpUpdate.rebootOnUpdate(false);
|
||||
SettingsSave(1); // Free flash for OTA update
|
||||
|
@ -2241,10 +2244,32 @@ void StateLoop()
|
|||
ota_result = 0;
|
||||
ota_retry_counter--;
|
||||
if (ota_retry_counter) {
|
||||
// snprintf_P(log_data, sizeof(log_data), PSTR("OTA: Attempt %d"), OTA_ATTEMPTS - ota_retry_counter);
|
||||
// AddLog(LOG_LEVEL_INFO);
|
||||
ota_result = (HTTP_UPDATE_FAILED != ESPhttpUpdate.update(Settings.ota_url));
|
||||
#ifndef BE_MINIMAL
|
||||
if (RtcSettings.ota_loader) {
|
||||
char *pch = strrchr(Settings.ota_url, '-'); // Change from filename-DE.bin into filename-minimal.bin
|
||||
char *ech = strrchr(Settings.ota_url, '.'); // Change from filename.bin into filename-minimal.bin
|
||||
if (!pch) {
|
||||
pch = ech;
|
||||
}
|
||||
if (pch) {
|
||||
strlcpy(mqtt_data, Settings.ota_url, pch - Settings.ota_url +1);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s-" D_JSON_MINIMAL "%s"), mqtt_data, ech); // Minimal filename must be filename-minimal
|
||||
ota_url = mqtt_data; // Try minimal image
|
||||
}
|
||||
}
|
||||
#endif // BE_MINIMAL
|
||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_UPLOAD "%s"), ota_url);
|
||||
AddLog(LOG_LEVEL_DEBUG);
|
||||
ota_result = (HTTP_UPDATE_FAILED != ESPhttpUpdate.update(ota_url));
|
||||
if (!ota_result) {
|
||||
#ifndef BE_MINIMAL
|
||||
int ota_error = ESPhttpUpdate.getLastError();
|
||||
// snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_UPLOAD "Ota error %d"), ota_error);
|
||||
// AddLog(LOG_LEVEL_DEBUG);
|
||||
if ((HTTP_UE_TOO_LESS_SPACE == ota_error) || (HTTP_UE_BIN_FOR_WRONG_FLASH == ota_error)) {
|
||||
RtcSettings.ota_loader = 1; // Try minimal image next
|
||||
}
|
||||
#endif // BE_MINIMAL
|
||||
ota_state_flag = 2; // Upgrade failed - retry
|
||||
}
|
||||
}
|
||||
|
@ -2607,6 +2632,16 @@ void setup()
|
|||
Serial.println();
|
||||
seriallog_level = LOG_LEVEL_INFO; // Allow specific serial messages until config loaded
|
||||
|
||||
snprintf_P(my_version, sizeof(my_version), PSTR("%d.%d.%d"), VERSION >> 24 & 0xff, VERSION >> 16 & 0xff, VERSION >> 8 & 0xff);
|
||||
if (VERSION & 0x1f) {
|
||||
idx = strlen(my_version);
|
||||
my_version[idx] = 96 + (VERSION & 0x1f);
|
||||
my_version[idx +1] = 0;
|
||||
}
|
||||
#ifdef BE_MINIMAL
|
||||
snprintf_P(my_version, sizeof(my_version), PSTR("%s-" D_JSON_MINIMAL), my_version);
|
||||
#endif // BE_MINIMAL
|
||||
|
||||
SettingsLoad();
|
||||
SettingsDelta();
|
||||
|
||||
|
@ -2689,9 +2724,13 @@ void setup()
|
|||
|
||||
blink_powersave = power;
|
||||
|
||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_PROJECT " %s %s (" D_CMND_TOPIC " %s, " D_FALLBACK " %s, " D_CMND_GROUPTOPIC " %s) " D_VERSION " " VERSION_STRING),
|
||||
PROJECT, Settings.friendlyname[0], Settings.mqtt_topic, mqtt_client, Settings.mqtt_grptopic);
|
||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_PROJECT " %s %s (" D_CMND_TOPIC " %s, " D_FALLBACK " %s, " D_CMND_GROUPTOPIC " %s) " D_VERSION " %s"),
|
||||
PROJECT, Settings.friendlyname[0], Settings.mqtt_topic, mqtt_client, Settings.mqtt_grptopic, my_version);
|
||||
AddLog(LOG_LEVEL_INFO);
|
||||
#ifdef BE_MINIMAL
|
||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_WARNING_MINIMAL_VERSION));
|
||||
AddLog(LOG_LEVEL_INFO);
|
||||
#endif // BE_MINIMAL
|
||||
|
||||
RtcInit();
|
||||
XSnsInit();
|
||||
|
|
|
@ -86,7 +86,8 @@ enum UserSelectablePins {
|
|||
GPIO_SAIR_RX, // SenseAir Serial interface
|
||||
GPIO_SPI_CS, // SPI Chip Select
|
||||
GPIO_SPI_DC, // SPI Data Direction
|
||||
GPIO_BACKLIGHT,
|
||||
GPIO_BACKLIGHT, // Display backlight control
|
||||
GPIO_PMS5003, // Plantower PMS5003 Serial interface
|
||||
GPIO_SENSOR_END };
|
||||
|
||||
// Text in webpage Module Parameters and commands GPIOS and GPIO
|
||||
|
@ -155,7 +156,8 @@ const char kSensors[GPIO_SENSOR_END][9] PROGMEM = {
|
|||
D_SENSOR_SAIR_RX,
|
||||
D_SENSOR_SPI_CS,
|
||||
D_SENSOR_SPI_DC,
|
||||
D_SENSOR_BACKLIGHT
|
||||
D_SENSOR_BACKLIGHT,
|
||||
D_SENSOR_PMS5003
|
||||
};
|
||||
|
||||
// Programmer selectable GPIO functionality offset by user selectable GPIOs
|
||||
|
|
|
@ -612,6 +612,12 @@ void WifiCheck(uint8_t param)
|
|||
WifiCheckIp();
|
||||
}
|
||||
if ((WL_CONNECTED == WiFi.status()) && (static_cast<uint32_t>(WiFi.localIP()) != 0) && !wifi_config_type) {
|
||||
#ifdef BE_MINIMAL
|
||||
if (1 == RtcSettings.ota_loader) {
|
||||
RtcSettings.ota_loader = 0;
|
||||
ota_state_flag = 3;
|
||||
}
|
||||
#endif // BE_MINIMAL
|
||||
#ifdef USE_DISCOVERY
|
||||
if (!mdns_begun) {
|
||||
mdns_begun = MDNS.begin(my_hostname);
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
//#define MY_LANGUAGE de-DE // German in Germany
|
||||
//#define MY_LANGUAGE pl-PL // Polish in Poland
|
||||
//#define MY_LANGUAGE it-IT // Italian in Italy
|
||||
//#define MY_LANGUAGE zh-CN // Chinese (Simplified) in China
|
||||
|
||||
// -- Project -------------------------------------
|
||||
#define PROJECT "sonoff" // PROJECT is used as the default topic delimiter and OTA file name
|
||||
|
|
|
@ -278,7 +278,7 @@ const char HTTP_COUNTER[] PROGMEM =
|
|||
"<br/><div id='t' name='t' style='text-align:center;'></div>";
|
||||
const char HTTP_END[] PROGMEM =
|
||||
"<br/>"
|
||||
"<div style='text-align:right;font-size:11px;'><hr/><a href='" D_WEBLINK "' target='_blank' style='color:#aaa;'>" D_PROGRAMNAME " " VERSION_STRING " " D_BY " " D_AUTHOR "</a></div>"
|
||||
"<div style='text-align:right;font-size:11px;'><hr/><a href='" D_WEBLINK "' target='_blank' style='color:#aaa;'>" D_PROGRAMNAME " {mv " D_BY " " D_AUTHOR "</a></div>"
|
||||
"</div>"
|
||||
"</body>"
|
||||
"</html>";
|
||||
|
@ -423,6 +423,7 @@ void ShowPage(String &page)
|
|||
}
|
||||
}
|
||||
page += FPSTR(HTTP_END);
|
||||
page.replace(F("{mv"), my_version);
|
||||
SetHeader();
|
||||
WebServer->send(200, FPSTR(HDR_CTYPE_HTML), page);
|
||||
}
|
||||
|
@ -926,8 +927,7 @@ void HandleBackupConfiguration()
|
|||
WebServer->setContentLength(sizeof(buffer));
|
||||
|
||||
char attachment[100];
|
||||
snprintf_P(attachment, sizeof(attachment), PSTR("attachment; filename=Config_%s_" VERSION_STRING ".dmp"),
|
||||
Settings.friendlyname[0]);
|
||||
snprintf_P(attachment, sizeof(attachment), PSTR("attachment; filename=Config_%s_%s.dmp"), Settings.friendlyname[0], my_version);
|
||||
WebServer->sendHeader(F("Content-Disposition"), attachment);
|
||||
WebServer->send(200, FPSTR(HDR_CTYPE_STREAM), "");
|
||||
memcpy(buffer, &Settings, sizeof(buffer));
|
||||
|
@ -1479,7 +1479,7 @@ void HandleInformation()
|
|||
// }2 = </th><td>
|
||||
String func = FPSTR(HTTP_SCRIPT_INFO_BEGIN);
|
||||
func += F("<table width='100%'><tr><th>");
|
||||
func += F(D_PROGRAM_VERSION "}2" VERSION_STRING);
|
||||
func += F(D_PROGRAM_VERSION "}2"); func += my_version;
|
||||
func += F("}1" D_BUILD_DATE_AND_TIME "}2"); func += GetBuildDateAndTime();
|
||||
func += F("}1" D_CORE_AND_SDK_VERSION "}2" ARDUINO_ESP8266_RELEASE "/"); func += String(ESP.getSdkVersion());
|
||||
func += F("}1" D_UPTIME "}2"); func += String(uptime); func += F(" Hours");
|
||||
|
|
|
@ -304,6 +304,7 @@ void PzemSend(uint8_t cmd)
|
|||
uint8_t *bytes = (uint8_t*)&pzem;
|
||||
pzem.crc = PzemCrc(bytes);
|
||||
|
||||
PzemSerial->flush();
|
||||
PzemSerial->write(bytes, sizeof(pzem));
|
||||
}
|
||||
|
||||
|
|
|
@ -134,6 +134,7 @@ void Mhz50ms()
|
|||
if (6 == mhz_timer) { // MH-Z19 measuring cycle takes 1005 +5% ms
|
||||
mhz_timer = 0;
|
||||
|
||||
MhzSerial->flush();
|
||||
MhzSerial->write(mhz_cmnd_read_ppm, 9);
|
||||
}
|
||||
|
||||
|
|
|
@ -74,6 +74,7 @@ void ModbusSend(uint8_t function_code, uint16_t start_address, uint16_t register
|
|||
frame[7] = (uint8_t)((crc >> 8) & 0xFF);
|
||||
frame[6] = (uint8_t)(crc & 0xFF);
|
||||
|
||||
SensairSerial->flush();
|
||||
SensairSerial->write(frame, sizeof(frame));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue