mirror of https://github.com/arendst/Tasmota.git
Prep for release 6.4.1
This commit is contained in:
parent
173c19d159
commit
c6ed4b037a
|
@ -184,6 +184,17 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
|
|||
| USE_DISPLAY | - | - | - | - | - | - |
|
||||
|
||||
## Changelog
|
||||
Version 6.4.1 20181223
|
||||
* Change RAM usage BMP/BME I2C sensors
|
||||
* Change FallbackTopic detection (#4706)
|
||||
* Change Hass discovery to short MQTT messages as used by Hass 0.81 and up (#4711)
|
||||
* Fix possible dtostrf buffer overflows by increasing buffers
|
||||
* Fix wifi strongest signal detection (#4704)
|
||||
* Fix Alexa "this value is outside the range of the device". Needs power cycle and Alexa deletion/discovery cycle. (#3159, #4712)
|
||||
* Add support for AZ-Instrument 7798 CO2 meter/datalogger (#4672)
|
||||
* Add define WIFI_SOFT_AP_CHANNEL in my_user_config.h to set Soft Access Point Channel number between 1 and 13 as used by Wifi Manager web GUI (#4673)
|
||||
* Add define USE_MQTT_TLS_CA_CERT for checking MQTT TLS against root ca using Let's Encrypt cert from sonoff_letsencrypt.h - not supported with core 2.3.0 (#4703)
|
||||
|
||||
Version 6.4.0 20181217
|
||||
* Change GUI Configure Module by using AJAX for data fetch to cut page size (and memory use) by 40%.
|
||||
In case of web page errors clear your browser cache or do Page Reload (F5 or Ctrl+R)
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,156 @@
|
|||
|
||||
# ESP8266 platform
|
||||
# ------------------------------
|
||||
|
||||
# For more info:
|
||||
# https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification
|
||||
|
||||
name=ESP8266 Boards (2.5.0-beta2)
|
||||
version=2.5.0-beta2
|
||||
|
||||
|
||||
|
||||
runtime.tools.signing={runtime.platform.path}/tools/signing.py
|
||||
|
||||
compiler.warning_flags=-w
|
||||
compiler.warning_flags.none=-w
|
||||
compiler.warning_flags.default=
|
||||
compiler.warning_flags.more=-Wall
|
||||
compiler.warning_flags.all=-Wall -Wextra
|
||||
|
||||
build.lwip_lib=-llwip_gcc
|
||||
build.lwip_include=lwip/include
|
||||
build.lwip_flags=-DLWIP_OPEN_SRC
|
||||
|
||||
build.vtable_flags=-DVTABLES_IN_FLASH
|
||||
|
||||
#build.exception_flags=-fexceptions
|
||||
build.exception_flags=-fno-exceptions
|
||||
#build.stdcpp_lib=-lstdc++
|
||||
build.stdcpp_lib=-lstdc++-nox
|
||||
|
||||
#build.float=-u _printf_float -u _scanf_float
|
||||
build.float=
|
||||
build.led=
|
||||
|
||||
compiler.path={runtime.tools.xtensa-lx106-elf-gcc.path}/bin/
|
||||
compiler.sdk.path={runtime.platform.path}/tools/sdk
|
||||
compiler.libc.path={runtime.platform.path}/tools/sdk/libc/xtensa-lx106-elf
|
||||
compiler.cpreprocessor.flags=-D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I{compiler.sdk.path}/include" "-I{compiler.sdk.path}/{build.lwip_include}" "-I{compiler.libc.path}/include" "-I{build.path}/core"
|
||||
|
||||
compiler.c.cmd=xtensa-lx106-elf-gcc
|
||||
compiler.c.flags=-c {compiler.warning_flags} -Os -g -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions=4 -MMD -std=gnu99 {build.exception_flags} -ffunction-sections -fdata-sections {build.exception_flags}
|
||||
|
||||
compiler.S.cmd=xtensa-lx106-elf-gcc
|
||||
compiler.S.flags=-c -g -x assembler-with-cpp -MMD -mlongcalls
|
||||
|
||||
compiler.c.elf.flags=-g {compiler.warning_flags} -Os -nostdlib -Wl,--no-check-sections -u app_entry {build.float} -Wl,-static "-L{compiler.sdk.path}/lib" "-L{compiler.sdk.path}/ld" "-L{compiler.libc.path}/lib" "-T{build.flash_ld}" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,spi_flash_read
|
||||
|
||||
compiler.c.elf.cmd=xtensa-lx106-elf-gcc
|
||||
compiler.c.elf.libs=-lhal -lphy -lpp -lnet80211 {build.lwip_lib} -lwpa -lcrypto -lmain -lwps -lbearssl -laxtls -lespnow -lsmartconfig -lairkiss -lwpa2 {build.stdcpp_lib} -lm -lc -lgcc
|
||||
|
||||
compiler.cpp.cmd=xtensa-lx106-elf-g++
|
||||
compiler.cpp.flags=-c {compiler.warning_flags} -Os -g -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 -std=c++11 -MMD -ffunction-sections -fdata-sections {build.exception_flags}
|
||||
|
||||
compiler.as.cmd=xtensa-lx106-elf-as
|
||||
|
||||
compiler.ar.cmd=xtensa-lx106-elf-ar
|
||||
compiler.ar.flags=cru
|
||||
|
||||
compiler.elf2hex.cmd=esptool
|
||||
compiler.elf2hex.flags=
|
||||
|
||||
compiler.size.cmd=xtensa-lx106-elf-size
|
||||
|
||||
compiler.esptool.cmd=esptool
|
||||
compiler.esptool.cmd.windows=esptool.exe
|
||||
|
||||
# This can be overriden in boards.txt
|
||||
build.extra_flags=-DESP8266
|
||||
|
||||
# These can be overridden in platform.local.txt
|
||||
compiler.c.extra_flags=
|
||||
compiler.c.elf.extra_flags=
|
||||
compiler.S.extra_flags=
|
||||
compiler.cpp.extra_flags=
|
||||
compiler.ar.extra_flags=
|
||||
compiler.objcopy.eep.extra_flags=
|
||||
compiler.elf2hex.extra_flags=
|
||||
|
||||
## generate file with git version number
|
||||
## needs bash, git, and echo
|
||||
recipe.hooks.core.prebuild.1.pattern=python "{runtime.tools.signing}" --mode header --publickey "{build.source.path}/public.key" --out "{build.path}/core/Updater_Signing.h"
|
||||
|
||||
|
||||
|
||||
## windows-compatible version without git
|
||||
recipe.hooks.core.prebuild.1.pattern.windows=cmd.exe /c rem cannot sign on windows
|
||||
|
||||
|
||||
|
||||
## Build the app.ld linker file
|
||||
recipe.hooks.linking.prelink.1.pattern="{compiler.path}{compiler.c.cmd}" -CC -E -P {build.vtable_flags} "{runtime.platform.path}/tools/sdk/ld/eagle.app.v6.common.ld.h" -o "{build.path}/local.eagle.app.v6.common.ld"
|
||||
|
||||
## Compile c files
|
||||
recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.cpreprocessor.flags} {compiler.c.flags} -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {build.led} {compiler.c.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
|
||||
|
||||
## Compile c++ files
|
||||
recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpreprocessor.flags} {compiler.cpp.flags} -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {build.led} {compiler.cpp.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
|
||||
|
||||
## Compile S files
|
||||
recipe.S.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.cpreprocessor.flags} {compiler.S.flags} -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {build.led} {compiler.c.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
|
||||
|
||||
## Create archives
|
||||
recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}"
|
||||
|
||||
## Combine gc-sections, archives, and objects
|
||||
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" -Wl,-Map "-Wl,{build.path}/{build.project_name}.map" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" -Wl,--start-group {object_files} "{archive_file_path}" {compiler.c.elf.libs} -Wl,--end-group "-L{build.path}"
|
||||
|
||||
## Create eeprom
|
||||
recipe.objcopy.eep.pattern=
|
||||
|
||||
## Create hex
|
||||
#recipe.objcopy.hex.pattern="{compiler.path}{compiler.elf2hex.cmd}" {compiler.elf2hex.flags} {compiler.elf2hex.extra_flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.hex"
|
||||
|
||||
recipe.objcopy.hex.1.pattern="{runtime.tools.esptool.path}/{compiler.esptool.cmd}" -eo "{runtime.platform.path}/bootloaders/eboot/eboot.elf" -bo "{build.path}/{build.project_name}.bin" -bm {build.flash_mode} -bf {build.flash_freq} -bz {build.flash_size} -bs .text -bp 4096 -ec -eo "{build.path}/{build.project_name}.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec
|
||||
recipe.objcopy.hex.2.pattern=python "{runtime.tools.signing}" --mode sign --privatekey "{build.source.path}/private.key" --bin "{build.path}/{build.project_name}.bin" --out "{build.path}/{build.project_name}.bin.signed"
|
||||
|
||||
# No signing on Windows
|
||||
recipe.objcopy.hex.1.pattern.windows="{runtime.tools.esptool.path}/{compiler.esptool.cmd}" -eo "{runtime.platform.path}/bootloaders/eboot/eboot.elf" -bo "{build.path}/{build.project_name}.bin" -bm {build.flash_mode} -bf {build.flash_freq} -bz {build.flash_size} -bs .text -bp 4096 -ec -eo "{build.path}/{build.project_name}.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec
|
||||
recipe.objcopy.hex.2.pattern.windows=
|
||||
|
||||
## Save hex
|
||||
recipe.output.tmp_file={build.project_name}.bin
|
||||
recipe.output.save_file={build.project_name}.{build.variant}.bin
|
||||
|
||||
## Compute size
|
||||
recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf"
|
||||
recipe.size.regex=^(?:\.irom0\.text|\.text|\.data|\.rodata|)\s+([0-9]+).*
|
||||
recipe.size.regex.data=^(?:\.data|\.rodata|\.bss)\s+([0-9]+).*
|
||||
#recipe.size.regex.eeprom=^(?:\.eeprom)\s+([0-9]+).*
|
||||
|
||||
# ------------------------------
|
||||
|
||||
tools.esptool.cmd=esptool
|
||||
tools.esptool.cmd.windows=esptool.exe
|
||||
tools.esptool.path={runtime.tools.esptool.path}
|
||||
tools.esptool.network_cmd=python
|
||||
tools.esptool.network_cmd.windows=python.exe
|
||||
|
||||
tools.esptool.upload.protocol=esp
|
||||
tools.esptool.upload.params.verbose=-vv
|
||||
tools.esptool.upload.params.quiet=
|
||||
tools.esptool.upload.pattern="{path}/{cmd}" {upload.verbose} -cd {upload.resetmethod} -cb {upload.speed} -cp "{serial.port}" {upload.erase_cmd} -ca 0x00000 -cf "{build.path}/{build.project_name}.bin"
|
||||
tools.esptool.upload.network_pattern="{network_cmd}" "{runtime.platform.path}/tools/espota.py" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin"
|
||||
|
||||
tools.mkspiffs.cmd=mkspiffs
|
||||
tools.mkspiffs.cmd.windows=mkspiffs.exe
|
||||
tools.mkspiffs.path={runtime.tools.mkspiffs.path}
|
||||
|
||||
tools.espupload.cmd=python
|
||||
tools.espupload.cmd.windows=python.exe
|
||||
tools.espupload.path={runtime.platform.path}/tools
|
||||
tools.espupload.upload.protocol=espupload
|
||||
tools.espupload.upload.params.verbose=
|
||||
tools.espupload.upload.params.quiet=
|
||||
tools.espupload.upload.pattern="{cmd}" "{path}/espupload.py" -f "{build.path}/{build.project_name}.bin"
|
165
platformio.ini
165
platformio.ini
|
@ -34,67 +34,132 @@ src_dir = sonoff
|
|||
;env_default = sonoff-PT
|
||||
;env_default = sonoff-RU
|
||||
;env_default = sonoff-SE
|
||||
;env_default = sonoff-SK
|
||||
;env_default = sonoff-TR
|
||||
;env_default = sonoff-TW
|
||||
;env_default = sonoff-UK
|
||||
|
||||
[common] ; ************************************************************
|
||||
[esp82xx_defaults]
|
||||
build_flags = -D NDEBUG
|
||||
-mtarget-align
|
||||
-Wl,-Map,firmware.map
|
||||
|
||||
[core_2_3_0]
|
||||
; *** Esp8266 core for Arduino version 2.3.0
|
||||
;platform = espressif8266@1.5.0
|
||||
platform = espressif8266@1.5.0
|
||||
build_flags = ${esp82xx_defaults.build_flags}
|
||||
-Wl,-Tesp8266.flash.1m0.ld
|
||||
|
||||
[core_2_4_2]
|
||||
; *** Esp8266 core for Arduino version 2.4.2
|
||||
platform = espressif8266@1.8.0
|
||||
platform = espressif8266@1.8.0
|
||||
build_flags = ${esp82xx_defaults.build_flags}
|
||||
-Wl,-Teagle.flash.1m0.ld
|
||||
-lstdc++ -lsupc++
|
||||
; lwIP 1.4 (Default)
|
||||
; -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH
|
||||
; lwIP 2 - Low Memory
|
||||
; -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
|
||||
; lwIP 2 - Higher Bandwidth (Tasmota default)
|
||||
-DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH
|
||||
-DVTABLES_IN_FLASH
|
||||
|
||||
[core_2_5_0]
|
||||
; *** Esp8266 core for Arduino version Core 2.5.0 beta tested for Tasmota
|
||||
platform = https://github.com/Jason2866/platform-espressif8266.git#Tasmota
|
||||
build_flags = ${esp82xx_defaults.build_flags}
|
||||
-Wl,-Teagle.flash.1m.ld
|
||||
; lwIP 1.4 (Default)
|
||||
; -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH
|
||||
; lwIP 2 - Low Memory
|
||||
; -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
|
||||
; lwIP 2 - Higher Bandwidth
|
||||
; -DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH
|
||||
; lwIP 2 - Higher Bandwidth Low Memory no Features
|
||||
; -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY_LOW_FLASH
|
||||
; lwIP 2 - Higher Bandwidth no Features (Tasmota default)
|
||||
-DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH
|
||||
-DVTABLES_IN_FLASH
|
||||
-fno-exceptions
|
||||
-lstdc++-nox
|
||||
|
||||
[core_stage]
|
||||
; *** Esp8266 core for Arduino version latest beta
|
||||
;platform = https://github.com/platformio/platform-espressif8266.git#feature/stage
|
||||
; *** Esp8266 core for Arduino current version (located in %USERPROFILE%\.platformio\platforms\espressif8266)
|
||||
;platform = espressif8266
|
||||
platform = https://github.com/platformio/platform-espressif8266.git#feature/stage
|
||||
build_flags = ${esp82xx_defaults.build_flags}
|
||||
-Wl,-Teagle.flash.1m.ld
|
||||
; lwIP 1.4 (Default)
|
||||
; -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH
|
||||
; lwIP 2 - Low Memory
|
||||
; -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
|
||||
; lwIP 2 - Higher Bandwidth
|
||||
; -DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH
|
||||
; lwIP 2 - Higher Bandwitdh Low Memory no Features
|
||||
; -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY_LOW_FLASH
|
||||
; lwIP 2 - Higher Bandwitdh no Features
|
||||
-DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH
|
||||
; VTABLES in Flash (default)
|
||||
-DVTABLES_IN_FLASH
|
||||
; VTABLES in Heap
|
||||
; -DVTABLES_IN_DRAM
|
||||
; VTABLES in IRAM
|
||||
; -DVTABLES_IN_IRAM
|
||||
; enable one option set -> No exception recommended
|
||||
; No exception code in firmware
|
||||
-fno-exceptions
|
||||
-lstdc++-nox
|
||||
; Exception code in firmware /needs much space! 90k
|
||||
; -fexceptions
|
||||
; -lstdc++
|
||||
|
||||
framework = arduino
|
||||
board = esp01_1m
|
||||
board_build.flash_mode = dout
|
||||
[core_active]
|
||||
; Select one core set for platform and build_flags
|
||||
;platform = ${core_2_3_0.platform}
|
||||
;build_flags = ${core_2_3_0.build_flags}
|
||||
platform = ${core_2_4_2.platform}
|
||||
build_flags = ${core_2_4_2.build_flags}
|
||||
;platform = ${core_2_5_0.platform}
|
||||
;build_flags = ${core_2_5_0.build_flags}
|
||||
;platform = ${core_stage.platform}
|
||||
;build_flags = ${core_stage.build_flags}
|
||||
|
||||
; set CPU frequency to 80MHz (default) or 160MHz
|
||||
board_build.f_cpu = 80000000L
|
||||
;board_build.f_cpu = 160000000L
|
||||
[common]
|
||||
framework = arduino
|
||||
board = esp01_1m
|
||||
board_build.flash_mode = dout
|
||||
|
||||
platform = ${core_active.platform}
|
||||
build_flags = ${core_active.build_flags}
|
||||
; -DUSE_CLASSIC
|
||||
; -DBE_MINIMAL
|
||||
; -DUSE_SENSORS
|
||||
; -DUSE_BASIC
|
||||
; -DUSE_KNX_NO_EMULATION
|
||||
; -DUSE_DISPLAYS
|
||||
; -DUSE_CONFIG_OVERRIDE
|
||||
|
||||
; *** Fix espressif8266@1.7.0 induced undesired all warnings
|
||||
build_unflags = -Wall
|
||||
build_unflags = -Wall
|
||||
|
||||
build_flags =
|
||||
; if using esp8266 core 2.5.0 (stage) or up
|
||||
; -Wl,-Tesp8266.flash.1m.ld -Wl,-Map,firmware.map
|
||||
; if using esp8266 core < 2.5.0
|
||||
-Wl,-Tesp8266.flash.1m0.ld -Wl,-Map,firmware.map
|
||||
-mtarget-align
|
||||
; -DUSE_CONFIG_OVERRIDE
|
||||
; lwIP 2 - Higher Bandwitdh (core 2.4.2)
|
||||
-DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH
|
||||
; lwIP 2 - Higher Bandwitdh no Features (core 2.5.0)
|
||||
; -DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH
|
||||
-DVTABLES_IN_FLASH
|
||||
; set CPU frequency to 80MHz (default) or 160MHz
|
||||
board_build.f_cpu = 80000000L
|
||||
;board_build.f_cpu = 160000000L
|
||||
|
||||
; if using esp8266 core 2.5.0 (stage) or up
|
||||
; No exception code in firmware
|
||||
; -fno-exceptions
|
||||
; -lstdc++-nox
|
||||
|
||||
; *** Serial Monitor options
|
||||
monitor_speed = 115200
|
||||
monitor_speed = 115200
|
||||
upload_speed = 115200
|
||||
upload_resetmethod = nodemcu
|
||||
|
||||
; *** Upload Serial reset method for Wemos and NodeMCU
|
||||
upload_speed = 115200
|
||||
upload_resetmethod = nodemcu
|
||||
upload_port = COM5
|
||||
|
||||
; *** Fix Esp/Arduino core 2.4.x induced Tasmota unused floating point includes
|
||||
extra_scripts = pio/strip-floats.py
|
||||
upload_port = COM5
|
||||
extra_scripts = pio/strip-floats.py
|
||||
|
||||
; *** Upload file to OTA server using SCP
|
||||
;upload_port = user@host:/path
|
||||
;extra_scripts = pio/strip-floats.py, pio/sftp-uploader.py
|
||||
;upload_port = user@host:/path
|
||||
;extra_scripts = pio/strip-floats.py, pio/sftp-uploader.py
|
||||
|
||||
; *** Upload file to OTA server using HTTP
|
||||
;upload_port = domus1:80/api/upload-arduino.php
|
||||
;extra_scripts = pio/strip-floats.py, pio/http-uploader.py
|
||||
; *** Upload file to OTA server in folder api/arduino using HTTP
|
||||
;upload_port = domus1:80/api/upload-arduino.php
|
||||
;extra_scripts = pio/strip-floats.py, pio/http-uploader.py
|
||||
|
||||
; *********************************************************************
|
||||
|
||||
|
@ -420,6 +485,20 @@ upload_resetmethod = ${common.upload_resetmethod}
|
|||
upload_speed = ${common.upload_speed}
|
||||
extra_scripts = ${common.extra_scripts}
|
||||
|
||||
[env:sonoff-SK]
|
||||
platform = ${common.platform}
|
||||
framework = ${common.framework}
|
||||
board = ${common.board}
|
||||
board_build.flash_mode = ${common.board_build.flash_mode}
|
||||
board_build.f_cpu = ${common.board_build.f_cpu}
|
||||
build_unflags = ${common.build_unflags}
|
||||
build_flags = ${common.build_flags} -DMY_LANGUAGE=sk-SK
|
||||
monitor_speed = ${common.monitor_speed}
|
||||
upload_port = ${common.upload_port}
|
||||
upload_resetmethod = ${common.upload_resetmethod}
|
||||
upload_speed = ${common.upload_speed}
|
||||
extra_scripts = ${common.extra_scripts}
|
||||
|
||||
[env:sonoff-TR]
|
||||
platform = ${common.platform}
|
||||
framework = ${common.framework}
|
||||
|
|
|
@ -1,4 +1,15 @@
|
|||
/* 6.4.0 20181217
|
||||
/* 6.4.1 20181223
|
||||
* Change RAM usage BMP/BME I2C sensors
|
||||
* Change FallbackTopic detection (#4706)
|
||||
* Change Hass discovery to short MQTT messages as used by Hass 0.81 and up (#4711)
|
||||
* Fix possible dtostrf buffer overflows by increasing buffers
|
||||
* Fix wifi strongest signal detection (#4704)
|
||||
* Fix Alexa "this value is outside the range of the device". Needs power cycle and Alexa deletion/discovery cycle. (#3159, #4712)
|
||||
* Add support for AZ-Instrument 7798 CO2 meter/datalogger (#4672)
|
||||
* Add define WIFI_SOFT_AP_CHANNEL in my_user_config.h to set Soft Access Point Channel number between 1 and 13 as used by Wifi Manager web GUI (#4673)
|
||||
* Add define USE_MQTT_TLS_CA_CERT for checking MQTT TLS against root ca using Let's Encrypt cert from sonoff_letsencrypt.h - not supported with core 2.3.0 (#4703)
|
||||
*
|
||||
* 6.4.0 20181217
|
||||
* Change GUI Configure Module by using AJAX for data fetch to cut page size (and memory use) by 40%
|
||||
In case of web page errors clear your browser cache or do Page Reload (F5 or Ctrl+R)
|
||||
* Change enforcing flashmode dout but it is still mandatory
|
||||
|
|
|
@ -18,8 +18,10 @@
|
|||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
// Use PWM from core 2.4.0 as all other version produce LED flickering when settings are saved to flash. Still true for 2.5.0
|
||||
//#include <core_version.h>
|
||||
//#ifdef ARDUINO_ESP8266_RELEASE_2_3_0
|
||||
//#if defined(ARDUINO_ESP8266_RELEASE_2_3_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_1) || defined(ARDUINO_ESP8266_RELEASE_2_4_2)
|
||||
//#warning **** Tasmota is using v2.4.0 timer.c as planned ****
|
||||
|
||||
#include "wiring_private.h"
|
||||
|
@ -106,4 +108,4 @@ void ICACHE_RAM_ATTR timer0_detachInterrupt(void) {
|
|||
ETS_CCOMPARE0_DISABLE();
|
||||
}
|
||||
|
||||
//#endif // ARDUINO_ESP8266_RELEASE_2_3_0
|
||||
//#endif // ARDUINO_ESP8266_RELEASE
|
||||
|
|
|
@ -18,8 +18,10 @@
|
|||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
// Use PWM from core 2.4.0 as all other version produce LED flickering when settings are saved to flash. Still true for 2.5.0
|
||||
//#include <core_version.h>
|
||||
//#ifdef ARDUINO_ESP8266_RELEASE_2_3_0
|
||||
//#if defined(ARDUINO_ESP8266_RELEASE_2_3_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_1) || defined(ARDUINO_ESP8266_RELEASE_2_4_2)
|
||||
//#warning **** Tasmota is using v2.4.0 wiring_digital.c as planned ****
|
||||
|
||||
#define ARDUINO_MAIN
|
||||
|
@ -212,4 +214,4 @@ extern int digitalRead(uint8_t pin) __attribute__ ((weak, alias("__digitalRead")
|
|||
extern void attachInterrupt(uint8_t pin, voidFuncPtr handler, int mode) __attribute__ ((weak, alias("__attachInterrupt")));
|
||||
extern void detachInterrupt(uint8_t pin) __attribute__ ((weak, alias("__detachInterrupt")));
|
||||
|
||||
//#endif // ARDUINO_ESP8266_RELEASE_2_3_0
|
||||
//#endif // ARDUINO_ESP8266_RELEASE
|
||||
|
|
|
@ -18,8 +18,10 @@
|
|||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
// Use PWM from core 2.4.0 as all other version produce flicker when settings are saved to flash. Still true for 2.5.0
|
||||
//#include <core_version.h>
|
||||
//#ifdef ARDUINO_ESP8266_RELEASE_2_3_0
|
||||
//#if defined(ARDUINO_ESP8266_RELEASE_2_3_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_1) || defined(ARDUINO_ESP8266_RELEASE_2_4_2)
|
||||
//#warning **** Tasmota is using v2.4.0 wiring_pwm.c as planned ****
|
||||
|
||||
#include "wiring_private.h"
|
||||
|
@ -224,4 +226,4 @@ extern void analogWrite(uint8_t pin, int val) __attribute__ ((weak, alias("__ana
|
|||
extern void analogWriteFreq(uint32_t freq) __attribute__ ((weak, alias("__analogWriteFreq")));
|
||||
extern void analogWriteRange(uint32_t range) __attribute__ ((weak, alias("__analogWriteRange")));
|
||||
|
||||
//#endif // ARDUINO_ESP8266_RELEASE_2_3_0
|
||||
//#endif // ARDUINO_ESP8266_RELEASE
|
||||
|
|
|
@ -548,7 +548,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>
|
||||
const char HTTP_SNS_ILLUMINANCE[] PROGMEM = "%s{s}%s " D_ILLUMINANCE "{m}%d " D_UNIT_LUX "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||
|
||||
#if defined(USE_MHZ19) || defined(USE_SENSEAIR)
|
||||
#if defined(USE_MHZ19) || defined(USE_SENSEAIR) || defined(USE_AZ7798)
|
||||
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
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
* Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
|
||||
* Use online command Prefix to translate cmnd, stat and tele.
|
||||
*
|
||||
* Updated until v6.2.1.20
|
||||
* Updated until v6.4.0.1
|
||||
\*********************************************************************/
|
||||
|
||||
//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
|
||||
|
@ -77,14 +77,14 @@
|
|||
#define D_DATA "Данни"
|
||||
#define D_DARKLIGHT "Тъмна"
|
||||
#define D_DEBUG "Дебъгване"
|
||||
#define D_DISABLED "Деактивиран"
|
||||
#define D_DISABLED "Забранен"
|
||||
#define D_DISTANCE "Разстояние"
|
||||
#define D_DNS_SERVER "DNS Сървър"
|
||||
#define D_DONE "Изпълнено"
|
||||
#define D_DST_TIME "DST"
|
||||
#define D_DST_TIME "Лятно време"
|
||||
#define D_ECO2 "eCO₂"
|
||||
#define D_EMULATION "Емулация"
|
||||
#define D_ENABLED "Активиран"
|
||||
#define D_ENABLED "Разрешен"
|
||||
#define D_ERASE "Изтриване"
|
||||
#define D_ERROR "Грешка"
|
||||
#define D_FAHRENHEIT "Фаренхайт"
|
||||
|
@ -128,11 +128,11 @@
|
|||
#define D_POWERUSAGE_APPARENT "Пълна мощност"
|
||||
#define D_POWERUSAGE_REACTIVE "Реактивна мощност"
|
||||
#define D_PRESSURE "Налягане"
|
||||
#define D_PRESSUREATSEALEVEL "Налягане на морското ниво"
|
||||
#define D_PRESSUREATSEALEVEL "Налягане при морското ниво"
|
||||
#define D_PROGRAM_FLASH_SIZE "Размер на флаш паметта за програми"
|
||||
#define D_PROGRAM_SIZE "Размер на програмата"
|
||||
#define D_PROJECT "Проект"
|
||||
#define D_RAIN "Rain"
|
||||
#define D_RAIN "Дъжд"
|
||||
#define D_RECEIVED "Получено"
|
||||
#define D_RESTART "Рестарт"
|
||||
#define D_RESTARTING "Рестартиране"
|
||||
|
@ -393,7 +393,7 @@
|
|||
#define D_CONFIGURE_TIMER "Конфигуриране на таймер"
|
||||
#define D_TIMER_PARAMETERS "Параметри на таймера"
|
||||
#define D_TIMER_ENABLE "Активиране на таймера"
|
||||
#define D_TIMER_ARM "Arm"
|
||||
#define D_TIMER_ARM "Активиран"
|
||||
#define D_TIMER_TIME "Време"
|
||||
#define D_TIMER_DAYS "Дни"
|
||||
#define D_TIMER_REPEAT "Повтори"
|
||||
|
@ -537,7 +537,9 @@
|
|||
#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
|
||||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_RF_SENSOR "RF датчик"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
@ -597,13 +599,13 @@
|
|||
#define D_LOG_WIFI "WIF: " // Wifi
|
||||
|
||||
//SDM220
|
||||
#define D_PHASE_ANGLE "Phase Angle"
|
||||
#define D_IMPORT_ACTIVE "Import Active"
|
||||
#define D_EXPORT_ACTIVE "Export Active"
|
||||
#define D_IMPORT_REACTIVE "Import Reactive"
|
||||
#define D_EXPORT_REACTIVE "Export Reactive"
|
||||
#define D_TOTAL_REACTIVE "Total Reactive"
|
||||
#define D_PHASE_ANGLE "Фазов ъгъл"
|
||||
#define D_IMPORT_ACTIVE "Входна активна мощност"
|
||||
#define D_EXPORT_ACTIVE "Изходна активна мощност"
|
||||
#define D_IMPORT_REACTIVE "Входна реактивна мощност"
|
||||
#define D_EXPORT_REACTIVE "Изходна реактивна мощност"
|
||||
#define D_TOTAL_REACTIVE "Общо реактивна мощност"
|
||||
#define D_UNIT_KWARH "kVArh"
|
||||
#define D_UNIT_ANGLE "Deg"
|
||||
#define D_UNIT_ANGLE "°"
|
||||
|
||||
#endif // _LANGUAGE_BG_BG_H_
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
|
|
@ -172,10 +172,10 @@
|
|||
#define D_UV_INDEX_6 "BurnL3"
|
||||
#define D_UV_INDEX_7 "OoR"
|
||||
#define D_UV_LEVEL "Livello UV"
|
||||
#define D_UV_POWER "UV Power"
|
||||
#define D_UV_POWER "Intensità UV"
|
||||
#define D_VERSION "Versione"
|
||||
#define D_VOLTAGE "Tensione"
|
||||
#define D_WEIGHT "Weight"
|
||||
#define D_WEIGHT "Peso"
|
||||
#define D_WARMLIGHT "Calda"
|
||||
#define D_WEB_SERVER "Web Server"
|
||||
|
||||
|
@ -218,7 +218,7 @@
|
|||
#define D_ERASED_SECTOR "Settore cancellato"
|
||||
|
||||
// xdrv_02_webserver.ino
|
||||
#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
|
||||
#define D_NOSCRIPT "Abilitare JavaScript per utilizzare Tasmota"
|
||||
#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware - effettuare aggiornamento"
|
||||
#define D_WEBSERVER_ACTIVE_ON "Web server attivo su"
|
||||
#define D_WITH_IP_ADDRESS "con indirizzo IP"
|
||||
|
@ -392,7 +392,7 @@
|
|||
// xdrv_09_timers.ino
|
||||
#define D_CONFIGURE_TIMER "Configura Timer"
|
||||
#define D_TIMER_PARAMETERS "Parametri Timer"
|
||||
#define D_TIMER_ENABLE "Abilita Timers"
|
||||
#define D_TIMER_ENABLE "Abilita Timer"
|
||||
#define D_TIMER_ARM "Attiva"
|
||||
#define D_TIMER_TIME "Ora"
|
||||
#define D_TIMER_DAYS "Giorni"
|
||||
|
@ -458,23 +458,23 @@
|
|||
#define D_GZ_AXIS "Gyro Z-Axis"
|
||||
|
||||
// xsns_34_hx711.ino
|
||||
#define D_HX_CAL_REMOVE "Remove weigth"
|
||||
#define D_HX_CAL_REFERENCE "Load reference weigth"
|
||||
#define D_HX_CAL_DONE "Calibrated"
|
||||
#define D_HX_CAL_FAIL "Calibration failed"
|
||||
#define D_RESET_HX711 "Reset Scale"
|
||||
#define D_CONFIGURE_HX711 "Configure Scale"
|
||||
#define D_HX711_PARAMETERS "Scale parameters"
|
||||
#define D_ITEM_WEIGHT "Item weight"
|
||||
#define D_REFERENCE_WEIGHT "Reference weigth"
|
||||
#define D_CALIBRATE "Calibrate"
|
||||
#define D_CALIBRATION "Calibration"
|
||||
#define D_HX_CAL_REMOVE "Rimuovere peso"
|
||||
#define D_HX_CAL_REFERENCE "Caricare peso di riferimento"
|
||||
#define D_HX_CAL_DONE "Calibrato"
|
||||
#define D_HX_CAL_FAIL "Calibrazione fallita"
|
||||
#define D_RESET_HX711 "Reset Scala"
|
||||
#define D_CONFIGURE_HX711 "Configura Scala"
|
||||
#define D_HX711_PARAMETERS "Parametri Scala"
|
||||
#define D_ITEM_WEIGHT "Peso oggetto"
|
||||
#define D_REFERENCE_WEIGHT "Peso di riferimento"
|
||||
#define D_CALIBRATE "Calibrato"
|
||||
#define D_CALIBRATION "Calibrazione"
|
||||
|
||||
//xsns_35_tx20.ino
|
||||
#define D_TX20_WIND_DIRECTION "Wind Direction"
|
||||
#define D_TX20_WIND_SPEED "Wind Speed"
|
||||
#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
|
||||
#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
|
||||
#define D_TX20_WIND_DIRECTION "Direzione Vento"
|
||||
#define D_TX20_WIND_SPEED "Velocità Vento"
|
||||
#define D_TX20_WIND_SPEED_AVG "Velocità Media Vento"
|
||||
#define D_TX20_WIND_SPEED_MAX "Velocità Massima Vento"
|
||||
#define D_TX20_NORTH "N"
|
||||
#define D_TX20_EAST "E"
|
||||
#define D_TX20_SOUTH "S"
|
||||
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
@ -597,13 +599,13 @@
|
|||
#define D_LOG_WIFI "WIF: " // Wifi
|
||||
|
||||
//SDM220
|
||||
#define D_PHASE_ANGLE "Phase Angle"
|
||||
#define D_IMPORT_ACTIVE "Import Active"
|
||||
#define D_EXPORT_ACTIVE "Export Active"
|
||||
#define D_IMPORT_REACTIVE "Import Reactive"
|
||||
#define D_EXPORT_REACTIVE "Export Reactive"
|
||||
#define D_TOTAL_REACTIVE "Total Reactive"
|
||||
#define D_PHASE_ANGLE "Angolo Fase"
|
||||
#define D_IMPORT_ACTIVE "Potenza Attiva Importata"
|
||||
#define D_EXPORT_ACTIVE "Potenza Attiva Esportata"
|
||||
#define D_IMPORT_REACTIVE "Potenza Reattiva Importata"
|
||||
#define D_EXPORT_REACTIVE "Potenza Reattiva Esportata"
|
||||
#define D_TOTAL_REACTIVE "Potenza Reattiva Totale"
|
||||
#define D_UNIT_KWARH "kVArh"
|
||||
#define D_UNIT_ANGLE "Deg"
|
||||
#define D_UNIT_ANGLE "°"
|
||||
|
||||
#endif // _LANGUAGE_IT_IT_H_
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "А"
|
||||
|
|
|
@ -0,0 +1,611 @@
|
|||
/*
|
||||
sk-SK.h - localization for Slovak with diacritics - Slovak for Sonoff-Tasmota
|
||||
|
||||
Copyright (C) 2018 Vladimír Jendroľ
|
||||
|
||||
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_SK_SK_H_
|
||||
#define _LANGUAGE_SK_SK_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.
|
||||
*
|
||||
* Updated until v6.2.1.14
|
||||
\*********************************************************************/
|
||||
|
||||
//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
|
||||
|
||||
#define LANGUAGE_LCID 1029
|
||||
// HTML (ISO 639-1) Language Code
|
||||
#define D_HTML_LANGUAGE "sk"
|
||||
|
||||
// "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 "Ne Po Ut St Št Pi So"
|
||||
#define D_MONTH3LIST "JanFebMarAprMájJúnJúlAugSepOktNovDec"
|
||||
|
||||
// Non JSON decimal separator
|
||||
#define D_DECIMAL_SEPARATOR ","
|
||||
|
||||
// Common
|
||||
#define D_ADMIN "Admin"
|
||||
#define D_AIR_QUALITY "Kvalita vzduchu"
|
||||
#define D_AP "AP" // Access Point
|
||||
#define D_AS "ako"
|
||||
#define D_AUTO "AUTO"
|
||||
#define D_BLINK "Blikanie"
|
||||
#define D_BLINKOFF "BlikanieVyp"
|
||||
#define D_BOOT_COUNT "Počítadlo spustení"
|
||||
#define D_BRIGHTLIGHT "Svetlý"
|
||||
#define D_BSSID "BSSId"
|
||||
#define D_BUTTON "Tlačídlo"
|
||||
#define D_BY "by" // Written by me
|
||||
#define D_BYTES "Bytov"
|
||||
#define D_CELSIUS "°C"
|
||||
#define D_CHANNEL "Kanál"
|
||||
#define D_CO2 "CO2"
|
||||
#define D_CODE "kód" // Button code
|
||||
#define D_COLDLIGHT "Studené svetlo"
|
||||
#define D_COMMAND "Príkaz"
|
||||
#define D_CONNECTED "...pripojené"
|
||||
#define D_COUNT "Počítaj"
|
||||
#define D_COUNTER "Počítadlo"
|
||||
#define D_CURRENT "Prúd" // As in Voltage and Current
|
||||
#define D_DATA "Dáta"
|
||||
#define D_DARKLIGHT "Tmavý"
|
||||
#define D_DEBUG "Debug"
|
||||
#define D_DISABLED "Zablokované"
|
||||
#define D_DISTANCE "Vzdialenosť"
|
||||
#define D_DNS_SERVER "Server DNS"
|
||||
#define D_DONE "Hotovo"
|
||||
#define D_DST_TIME "DST"
|
||||
#define D_ECO2 "eCO2"
|
||||
#define D_EMULATION "Emulácia"
|
||||
#define D_ENABLED "Otvorený"
|
||||
#define D_ERASE "Zmaž"
|
||||
#define D_ERROR "Chyba"
|
||||
#define D_FAHRENHEIT "Fahrenheita"
|
||||
#define D_FAILED "chyba"
|
||||
#define D_FALLBACK "Záložný"
|
||||
#define D_FALLBACK_TOPIC "Záložný topic"
|
||||
#define D_FALSE "Nepravda"
|
||||
#define D_FILE "Súbor"
|
||||
#define D_FREE_MEMORY "Voľná pamäť"
|
||||
#define D_FREQUENCY "Frekvencia"
|
||||
#define D_GAS "Plyn"
|
||||
#define D_GATEWAY "Predvolená brána"
|
||||
#define D_GROUP "Skupina"
|
||||
#define D_HOST "Server"
|
||||
#define D_HOSTNAME "Názov servera"
|
||||
#define D_HUMIDITY "Vlhkosť"
|
||||
#define D_ILLUMINANCE "Osvetlenie"
|
||||
#define D_IMMEDIATE "Okamžité" // Button immediate
|
||||
#define D_INDEX "Index"
|
||||
#define D_INFO "Informácie"
|
||||
#define D_INFRARED "Infračervené"
|
||||
#define D_INITIALIZED "Inicializovaný"
|
||||
#define D_IP_ADDRESS "Adresa IP"
|
||||
#define D_LIGHT "Svetlo"
|
||||
#define D_LWT "LWT"
|
||||
#define D_MODULE "Modul"
|
||||
#define D_MQTT "MQTT"
|
||||
#define D_MULTI_PRESS "multi-stlačenie"
|
||||
#define D_NOISE "Hluk"
|
||||
#define D_NONE "Žiadny"
|
||||
#define D_OFF "Vyp."
|
||||
#define D_OFFLINE "Neaktívny"
|
||||
#define D_OK "OK"
|
||||
#define D_ON "Zap."
|
||||
#define D_ONLINE "Aktívny"
|
||||
#define D_PASSWORD "Heslo"
|
||||
#define D_PORT "Port"
|
||||
#define D_POWER_FACTOR "Účinník"
|
||||
#define D_POWERUSAGE "Príkon"
|
||||
#define D_POWERUSAGE_ACTIVE "Činný príkon"
|
||||
#define D_POWERUSAGE_APPARENT "Zdanlivý príkon"
|
||||
#define D_POWERUSAGE_REACTIVE "Jalový príkon"
|
||||
#define D_PRESSURE "Tlak"
|
||||
#define D_PRESSUREATSEALEVEL "Tlak na hladine mora"
|
||||
#define D_PROGRAM_FLASH_SIZE "Veľkosť flash pamäte"
|
||||
#define D_PROGRAM_SIZE "Veľkosť programu"
|
||||
#define D_PROJECT "Projekt"
|
||||
#define D_RAIN "Dážď"
|
||||
#define D_RECEIVED "Prijatý"
|
||||
#define D_RESTART "Reštart"
|
||||
#define D_RESTARTING "Reštartuje sa"
|
||||
#define D_RESTART_REASON "Príčina reštartu"
|
||||
#define D_RESTORE "Obnoviť"
|
||||
#define D_RETAINED "Zachované"
|
||||
#define D_RULE "Pravidlo"
|
||||
#define D_SAVE "Ulož"
|
||||
#define D_SENSOR "Senzor"
|
||||
#define D_SSID "SSID"
|
||||
#define D_START "Spustiť"
|
||||
#define D_STD_TIME "STD"
|
||||
#define D_STOP "Stop"
|
||||
#define D_SUBNET_MASK "Maska podsiete"
|
||||
#define D_SUBSCRIBE_TO "Prihlásiť do"
|
||||
#define D_SUCCESSFUL "úspešné."
|
||||
#define D_SUNRISE "Svitanie"
|
||||
#define D_SUNSET "Súmrak"
|
||||
#define D_TEMPERATURE "Teplota"
|
||||
#define D_TO "do"
|
||||
#define D_TOGGLE "Prepni"
|
||||
#define D_TOPIC "Topic"
|
||||
#define D_TRANSMIT "Odošli"
|
||||
#define D_TRUE "Pravda"
|
||||
#define D_TVOC "TVOC"
|
||||
#define D_UPGRADE "aktualizáciu"
|
||||
#define D_UPLOAD "Nahrávanie..."
|
||||
#define D_UPTIME "Uptime"
|
||||
#define D_USER "Používateľ"
|
||||
#define D_UTC_TIME "UTC"
|
||||
#define D_UV_INDEX "UV Index"
|
||||
#define D_UV_INDEX_1 "Nízky"
|
||||
#define D_UV_INDEX_2 "Stredný"
|
||||
#define D_UV_INDEX_3 "Vysoký"
|
||||
#define D_UV_INDEX_4 "Nebezpečný"
|
||||
#define D_UV_INDEX_5 "Popál1/2"
|
||||
#define D_UV_INDEX_6 "Popál3"
|
||||
#define D_UV_INDEX_7 "MimoRozsah"
|
||||
#define D_UV_LEVEL "úroveň UV"
|
||||
#define D_UV_POWER "UV Power"
|
||||
#define D_VERSION "Verzia"
|
||||
#define D_VOLTAGE "Napätie"
|
||||
#define D_WEIGHT "Hmotnosť"
|
||||
#define D_WARMLIGHT "Teplé svetlo"
|
||||
#define D_WEB_SERVER "Web Server"
|
||||
|
||||
// sonoff.ino
|
||||
#define D_WARNING_MINIMAL_VERSION "UPOZORNENIE Táto verzia nepodporuje trvalé nastavenia"
|
||||
#define D_LEVEL_10 "úroveň 1-0"
|
||||
#define D_LEVEL_01 "úroveň 0-1"
|
||||
#define D_SERIAL_LOGGING_DISABLED "Logovanie na sériovom porte ukončené"
|
||||
#define D_SYSLOG_LOGGING_REENABLED "Obnovený zápis do Syslog"
|
||||
|
||||
#define D_SET_BAUDRATE_TO "Nastaviť rýchlosti prenosu na"
|
||||
#define D_RECEIVED_TOPIC "Prijatý topic"
|
||||
#define D_DATA_SIZE "Veľkosť dát"
|
||||
#define D_ANALOG_INPUT "Analógový vstup"
|
||||
|
||||
// support.ino
|
||||
#define D_OSWATCH "osWatch"
|
||||
#define D_BLOCKED_LOOP "Zablokovanie slučky"
|
||||
#define D_WPS_FAILED_WITH_STATUS "Chyba WPSconfig so statusom"
|
||||
#define D_ACTIVE_FOR_3_MINUTES "aktívny 3 minúty"
|
||||
#define D_FAILED_TO_START "nepodarilo sa spustiť"
|
||||
#define D_PATCH_ISSUE_2186 "Chyba 2186"
|
||||
#define D_CONNECTING_TO_AP "Pripájanie k AP"
|
||||
#define D_IN_MODE "v režime"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Chyba pripojenia, nebola obdržaná IP adresa"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Chyba pripojenia, nedostupný AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Chyba pripojenia, nesprávne heslo pre AP"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Chyba pripojenia, uplynul AP timeout"
|
||||
#define D_ATTEMPTING_CONNECTION "Pripájanie..."
|
||||
#define D_CHECKING_CONNECTION "Skúška spojenia..."
|
||||
#define D_QUERY_DONE "Vyslanie požiadavky. Nájdená služba MQTT"
|
||||
#define D_MQTT_SERVICE_FOUND "Služba MQTT bola nájdená"
|
||||
#define D_FOUND_AT "nájdené v"
|
||||
#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host nebol nájdený"
|
||||
|
||||
// settings.ino
|
||||
#define D_SAVED_TO_FLASH_AT "Uložené do flash pamäte v"
|
||||
#define D_LOADED_FROM_FLASH_AT "Stiahnuté z flash pamäte z"
|
||||
#define D_USE_DEFAULTS "Použi prednastavené hodnoty"
|
||||
#define D_ERASED_SECTOR "Zmazaný sektor"
|
||||
|
||||
// xdrv_02_webserver.ino
|
||||
#define D_NOSCRIPT "Pre používanie prostredia Tasmota povoľte JavaScript"
|
||||
#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MINIMÁLNY - prosím aktualizujte"
|
||||
#define D_WEBSERVER_ACTIVE_ON "Aktívny Web server"
|
||||
#define D_WITH_IP_ADDRESS "na IP adrese"
|
||||
#define D_WEBSERVER_STOPPED "Web server zastavený"
|
||||
#define D_FILE_NOT_FOUND "Súbor nebol nájdený"
|
||||
#define D_REDIRECTED "Presmerovanie na vlastný portál"
|
||||
#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wi-Fi manažér nastaví AP a zachová STA"
|
||||
#define D_WIFIMANAGER_SET_ACCESSPOINT "Wi-Fi manažér nastaví Access Point"
|
||||
#define D_TRYING_TO_CONNECT "Skúšam pripojiť zariadenie k sieti"
|
||||
|
||||
#define D_RESTART_IN "Reštart"
|
||||
#define D_SECONDS "sekúnd"
|
||||
#define D_DEVICE_WILL_RESTART "Zariadenie bude reštartované behom niekoľkých sekúnd"
|
||||
#define D_BUTTON_TOGGLE "Prepínač"
|
||||
#define D_CONFIGURATION "Nastavenia"
|
||||
#define D_INFORMATION "Informácie"
|
||||
#define D_FIRMWARE_UPGRADE "Aktualizácia firmware"
|
||||
#define D_CONSOLE "Konzola"
|
||||
#define D_CONFIRM_RESTART "Potvrdenie reštartu"
|
||||
|
||||
#define D_CONFIGURE_MODULE "Nastavenia modulu"
|
||||
#define D_CONFIGURE_WIFI "Nastavenia WiFi"
|
||||
#define D_CONFIGURE_MQTT "Nastavenia MQTT"
|
||||
#define D_CONFIGURE_DOMOTICZ "Nastavenia Domoticz"
|
||||
#define D_CONFIGURE_LOGGING "Nastavenia logovania"
|
||||
#define D_CONFIGURE_OTHER "Ostatné nastavenia"
|
||||
#define D_CONFIRM_RESET_CONFIGURATION "Potvrdenie resetu nastavení"
|
||||
#define D_RESET_CONFIGURATION "Reset nastavení"
|
||||
#define D_BACKUP_CONFIGURATION "Záloha nastavení"
|
||||
#define D_RESTORE_CONFIGURATION "Obnovenie nastavení"
|
||||
#define D_MAIN_MENU "Hlavné menu"
|
||||
|
||||
#define D_MODULE_PARAMETERS "Nastavenia modulu"
|
||||
#define D_MODULE_TYPE "Typ modulu"
|
||||
#define D_GPIO "GPIO"
|
||||
#define D_SERIAL_IN "Serial In"
|
||||
#define D_SERIAL_OUT "Serial Out"
|
||||
|
||||
#define D_WIFI_PARAMETERS "Nastavenia WiFi"
|
||||
#define D_SCAN_FOR_WIFI_NETWORKS "Sken WiFi sietí"
|
||||
#define D_SCAN_DONE "Sken dokončený"
|
||||
#define D_NO_NETWORKS_FOUND "Sieť nebola nájdená"
|
||||
#define D_REFRESH_TO_SCAN_AGAIN "Zopakovať sken"
|
||||
#define D_DUPLICATE_ACCESSPOINT "Kópia AP"
|
||||
#define D_SKIPPING_LOW_QUALITY "Preskočenie z dôvodu kvality signálu"
|
||||
#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 SSID"
|
||||
#define D_AP1_PASSWORD "Heslo AP1"
|
||||
#define D_AP2_SSID "AP2 SSID"
|
||||
#define D_AP2_PASSWORD "Heslo AP2"
|
||||
|
||||
#define D_MQTT_PARAMETERS "Nastavenia MQTT"
|
||||
#define D_CLIENT "Klient"
|
||||
#define D_FULL_TOPIC "Celý topic"
|
||||
|
||||
#define D_LOGGING_PARAMETERS "Voľba logovania"
|
||||
#define D_SERIAL_LOG_LEVEL "Sériová úroveň logu"
|
||||
#define D_WEB_LOG_LEVEL "Webová úroveň logu"
|
||||
#define D_SYS_LOG_LEVEL "Systemová úroveň logu"
|
||||
#define D_MORE_DEBUG "Viac debug informácí"
|
||||
#define D_SYSLOG_HOST "Syslog host"
|
||||
#define D_SYSLOG_PORT "Syslog port"
|
||||
#define D_TELEMETRY_PERIOD "Interval telemetrie"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Ostatné nastavenia"
|
||||
#define D_WEB_ADMIN_PASSWORD "Heslo Web administrátora"
|
||||
#define D_MQTT_ENABLE "MQTT aktívne"
|
||||
#define D_FRIENDLY_NAME "Friendly Name"
|
||||
#define D_BELKIN_WEMO "Belkin WeMo"
|
||||
#define D_HUE_BRIDGE "Hue Bridge"
|
||||
#define D_SINGLE_DEVICE "single device"
|
||||
#define D_MULTI_DEVICE "multi device"
|
||||
|
||||
#define D_SAVE_CONFIGURATION "Ulož nastavenia"
|
||||
#define D_CONFIGURATION_SAVED "Nastavenia uložené"
|
||||
#define D_CONFIGURATION_RESET "Nastavenia resetované"
|
||||
|
||||
#define D_PROGRAM_VERSION "Verzia programu"
|
||||
#define D_BUILD_DATE_AND_TIME "Datum a čas kompilácie"
|
||||
#define D_CORE_AND_SDK_VERSION "Verzia Core/SDK"
|
||||
#define D_FLASH_WRITE_COUNT "Počet zápisov do pamäte"
|
||||
#define D_MAC_ADDRESS "Adresa MAC"
|
||||
#define D_MQTT_HOST "Host MQTT"
|
||||
#define D_MQTT_PORT "Port MQTT"
|
||||
#define D_MQTT_CLIENT "Klient MQTT"
|
||||
#define D_MQTT_USER "Používateľ MQTT"
|
||||
#define D_MQTT_TOPIC "Topic MQTT"
|
||||
#define D_MQTT_GROUP_TOPIC "Topic skupiny MQTT"
|
||||
#define D_MQTT_FULL_TOPIC "Celý topic MQTT"
|
||||
#define D_MDNS_DISCOVERY "Získavanie mDNS"
|
||||
#define D_MDNS_ADVERTISE "Rozosielanie mDNS"
|
||||
#define D_ESP_CHIP_ID "ID systému ESP"
|
||||
#define D_FLASH_CHIP_ID "ID systému flash pamäte"
|
||||
#define D_FLASH_CHIP_SIZE "Veľkosť flash"
|
||||
#define D_FREE_PROGRAM_SPACE "Voľné místo pre program"
|
||||
|
||||
#define D_UPGRADE_BY_WEBSERVER "Aktualizácia z Web serveru"
|
||||
#define D_OTA_URL "URL OTA"
|
||||
#define D_START_UPGRADE "Spustiť aktualizáciu"
|
||||
#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizácia nahraním súboru"
|
||||
#define D_UPLOAD_STARTED "Nahrávanie spustené"
|
||||
#define D_UPGRADE_STARTED "Aktualizácia spustená"
|
||||
#define D_UPLOAD_DONE "Nahrávanie ukončené"
|
||||
#define D_UPLOAD_ERR_1 "Súbor nebol vybraný"
|
||||
#define D_UPLOAD_ERR_2 "Málo miesta"
|
||||
#define D_UPLOAD_ERR_3 "Magický byte má hodnotu inú než 0xE9"
|
||||
#define D_UPLOAD_ERR_4 "Veľkosť programu je väčšia než skutočná veľkosť flash pamäte"
|
||||
#define D_UPLOAD_ERR_5 "Chyba nahrávania, nesúhlasia porovnávané bity"
|
||||
#define D_UPLOAD_ERR_6 "Chyba nahrávania. Spustený zápis do logu na úrovni 3"
|
||||
#define D_UPLOAD_ERR_7 "Nahrávanie prerušené"
|
||||
#define D_UPLOAD_ERR_8 "Nesprávny súbor"
|
||||
#define D_UPLOAD_ERR_9 "Súbor je príliš veľký"
|
||||
#define D_UPLOAD_ERR_10 "Chyba inicializácie RF chipu"
|
||||
#define D_UPLOAD_ERR_11 "Chyba zmazania RF chipu"
|
||||
#define D_UPLOAD_ERR_12 "Chyba pri zápise do RF chipu"
|
||||
#define D_UPLOAD_ERR_13 "Chyba dekódovania RF firmwaru"
|
||||
#define D_UPLOAD_ERROR_CODE "Chyba nahrávania"
|
||||
|
||||
#define D_ENTER_COMMAND "Vlož príkaz"
|
||||
#define D_ENABLE_WEBLOG_FOR_RESPONSE "Zapni úroveň 2 zápisu Weblog, ak je očekávaná odpoveď"
|
||||
#define D_NEED_USER_AND_PASSWORD "Vyžadovaný používateľ=<username>&heslo=<password>"
|
||||
|
||||
// xdrv_01_mqtt.ino
|
||||
#define D_FINGERPRINT "Verifikuj odtlačok TLS..."
|
||||
#define D_TLS_CONNECT_FAILED_TO "Nepripojené TLS do"
|
||||
#define D_RETRY_IN "Zopakujem o"
|
||||
#define D_VERIFIED "Overený odtlačok "
|
||||
#define D_INSECURE "Nesprávne pripojenie z dôvodu chybného odtlačku TLS"
|
||||
#define D_CONNECT_FAILED_TO "Nepodarilo sa nadviazať spojenie"
|
||||
|
||||
// xplg_wemohue.ino
|
||||
#define D_MULTICAST_DISABLED "Multicast je vypnutý"
|
||||
#define D_MULTICAST_REJOINED "Multicast opäť pripojený"
|
||||
#define D_MULTICAST_JOIN_FAILED "Multicast neúspešný"
|
||||
#define D_FAILED_TO_SEND_RESPONSE "Nepodarilo sa odoslať odpoveď"
|
||||
|
||||
#define D_WEMO "WeMo"
|
||||
#define D_WEMO_BASIC_EVENT "WeMo základná udalosť"
|
||||
#define D_WEMO_EVENT_SERVICE "WeMo servisná udalosť"
|
||||
#define D_WEMO_META_SERVICE "WeMo meta udalosť"
|
||||
#define D_WEMO_SETUP "WeMo setup"
|
||||
#define D_RESPONSE_SENT "Odpoveď odoslaná"
|
||||
|
||||
#define D_HUE "Hue"
|
||||
#define D_HUE_BRIDGE_SETUP "Hue setup"
|
||||
#define D_HUE_API_NOT_IMPLEMENTED "Hue API nie je implementované"
|
||||
#define D_HUE_API "Hue API"
|
||||
#define D_HUE_POST_ARGS "Hue POST args"
|
||||
#define D_3_RESPONSE_PACKETS_SENT "3 pakety odpovede odoslané"
|
||||
|
||||
// xdrv_07_domoticz.ino
|
||||
#define D_DOMOTICZ_PARAMETERS "Nastavenia Domoticz"
|
||||
#define D_DOMOTICZ_IDX "Idx"
|
||||
#define D_DOMOTICZ_KEY_IDX "Key idx"
|
||||
#define D_DOMOTICZ_SWITCH_IDX "Spinac idx"
|
||||
#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
|
||||
#define D_DOMOTICZ_TEMP "Temp"
|
||||
#define D_DOMOTICZ_TEMP_HUM "Temp,Vlhk"
|
||||
#define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Vlhk,Tlak"
|
||||
#define D_DOMOTICZ_POWER_ENERGY "Príkon,Energia"
|
||||
#define D_DOMOTICZ_ILLUMINANCE "Osvetlenie"
|
||||
#define D_DOMOTICZ_COUNT "Počítadlo/PM1"
|
||||
#define D_DOMOTICZ_VOLTAGE "Napätie/PM2,5"
|
||||
#define D_DOMOTICZ_CURRENT "Prúd/PM10"
|
||||
#define D_DOMOTICZ_AIRQUALITY "AirQuality"
|
||||
#define D_DOMOTICZ_UPDATE_TIMER "Aktualizácia časovača"
|
||||
|
||||
// xdrv_09_timers.ino
|
||||
#define D_CONFIGURE_TIMER "Nastavenia časovača"
|
||||
#define D_TIMER_PARAMETERS "Časovač"
|
||||
#define D_TIMER_ENABLE "Povoľ časovače"
|
||||
#define D_TIMER_ARM "Aktívne"
|
||||
#define D_TIMER_TIME "Čas"
|
||||
#define D_TIMER_DAYS "Dni"
|
||||
#define D_TIMER_REPEAT "Opakovať"
|
||||
#define D_TIMER_OUTPUT "Výstup"
|
||||
#define D_TIMER_ACTION "Napájanie"
|
||||
|
||||
// xdrv_10_knx.ino
|
||||
#define D_CONFIGURE_KNX "Nastavenie KNX"
|
||||
#define D_KNX_PARAMETERS "KNX parametre"
|
||||
#define D_KNX_GENERAL_CONFIG "Všeobecné"
|
||||
#define D_KNX_PHYSICAL_ADDRESS "Fyzická adresa"
|
||||
#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Musí být jedinečná v sieti KNX )"
|
||||
#define D_KNX_ENABLE "Povoľ KNX"
|
||||
#define D_KNX_GROUP_ADDRESS_TO_WRITE "Dáta na odoslanie na skupinové adresy"
|
||||
#define D_ADD "Pridať"
|
||||
#define D_DELETE "Zmazať"
|
||||
#define D_REPLY "Odpoveď"
|
||||
#define D_KNX_GROUP_ADDRESS_TO_READ "Skupinové adresy pre príjem dát z"
|
||||
#define D_LOG_KNX "KNX: "
|
||||
#define D_RECEIVED_FROM "Prijaté z"
|
||||
#define D_KNX_COMMAND_WRITE "Zapíš"
|
||||
#define D_KNX_COMMAND_READ "Čítaj"
|
||||
#define D_KNX_COMMAND_OTHER "Iné"
|
||||
#define D_SENT_TO "pošli"
|
||||
#define D_KNX_WARNING "Skupinová adresa ( 0 / 0 / 0 ) je rezervovaná a nemôže byť použitá."
|
||||
#define D_KNX_ENHANCEMENT "Communication Enhancement"
|
||||
#define D_KNX_TX_SLOT "KNX TX"
|
||||
#define D_KNX_RX_SLOT "KNX RX"
|
||||
|
||||
// xdrv_03_energy.ino
|
||||
#define D_ENERGY_TODAY "Spotreba dnes"
|
||||
#define D_ENERGY_YESTERDAY "Spotreba včera"
|
||||
#define D_ENERGY_TOTAL "Celková spotreba"
|
||||
|
||||
// xsns_05_ds18b20.ino
|
||||
#define D_SENSOR_BUSY "Sensor DS18x20 obsadený"
|
||||
#define D_SENSOR_CRC_ERROR "Sensor DS18x20 chyba CRC"
|
||||
#define D_SENSORS_FOUND "Nanájdený senzor DS18x20"
|
||||
|
||||
// xsns_06_dht.ino
|
||||
#define D_TIMEOUT_WAITING_FOR "Čakanie na"
|
||||
#define D_START_SIGNAL_LOW "nízký štartovací signál"
|
||||
#define D_START_SIGNAL_HIGH "vysoký štartovací signál"
|
||||
#define D_PULSE "impulz"
|
||||
#define D_CHECKSUM_FAILURE "Chybný kontrolný súčet"
|
||||
|
||||
// xsns_07_sht1x.ino
|
||||
#define D_SENSOR_DID_NOT_ACK_COMMAND "Senzor neobdržal príkaz ACK"
|
||||
#define D_SHT1X_FOUND "SHT1X nanájdený"
|
||||
|
||||
// xsns_18_pms5003.ino
|
||||
#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
|
||||
#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
|
||||
#define D_PARTICALS_BEYOND "častíc"
|
||||
|
||||
// xsns_32_mpu6050.ino
|
||||
#define D_AX_AXIS "Accel. os-X"
|
||||
#define D_AY_AXIS "Accel. os-Y"
|
||||
#define D_AZ_AXIS "Accel. os-Z"
|
||||
#define D_GX_AXIS "Gyro os-X"
|
||||
#define D_GY_AXIS "Gyro os-Y"
|
||||
#define D_GZ_AXIS "Gyro os-Z"
|
||||
|
||||
// xsns_34_hx711.ino
|
||||
#define D_HX_CAL_REMOVE "Odstráňte záťaž"
|
||||
#define D_HX_CAL_REFERENCE "Vložte referenčnú záťaž"
|
||||
#define D_HX_CAL_DONE "Skalibrováné"
|
||||
#define D_HX_CAL_FAIL "Chyba kalibráce"
|
||||
#define D_RESET_HX711 "Reset váhy"
|
||||
#define D_CONFIGURE_HX711 "Konfiguráce váhy"
|
||||
#define D_HX711_PARAMETERS "Parametre váhy"
|
||||
#define D_ITEM_WEIGHT "Vlastná hmotnosť"
|
||||
#define D_REFERENCE_WEIGHT "Referenčná hmotnosť"
|
||||
#define D_CALIBRATE "Kalibruj"
|
||||
#define D_CALIBRATION "Kalibrácia"
|
||||
|
||||
//xsns_35_tx20.ino
|
||||
#define D_TX20_WIND_DIRECTION "Smer vetra"
|
||||
#define D_TX20_WIND_SPEED "Rýchlosť vetra"
|
||||
#define D_TX20_WIND_SPEED_AVG "Priemerná rýchlosť vetra"
|
||||
#define D_TX20_WIND_SPEED_MAX "Maximálna rýchlosť vetra"
|
||||
#define D_TX20_NORTH "S"
|
||||
#define D_TX20_EAST "V"
|
||||
#define D_TX20_SOUTH "J"
|
||||
#define D_TX20_WEST "Z"
|
||||
|
||||
// sonoff_template.h
|
||||
#define D_SENSOR_NONE "Žiaden"
|
||||
#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_DFR562 "MP3 Player"
|
||||
#define D_SENSOR_IRSEND "IRsend"
|
||||
#define D_SENSOR_SWITCH "Spínač" // Suffix "1"
|
||||
#define D_SENSOR_BUTTON "Tlačidlo" // Suffix "1"
|
||||
#define D_SENSOR_RELAY "Relé" // Suffix "1i"
|
||||
#define D_SENSOR_LED "Led" // Suffix "1i"
|
||||
#define D_SENSOR_PWM "PWM" // Suffix "1",
|
||||
#define D_SENSOR_COUNTER "Počítadlo" // Suffix "1"
|
||||
#define D_SENSOR_IRRECV "IRrecv"
|
||||
#define D_SENSOR_MHZ_RX "MHZ Rx"
|
||||
#define D_SENSOR_MHZ_TX "MHZ Tx"
|
||||
#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
|
||||
#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
|
||||
#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
|
||||
#define D_SENSOR_PZEM0XX_TX "PZEM0XX 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"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SDM120_TX "SDM120/220 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDM120/220 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
#define D_SENSOR_SDM630_RX "SDM630 Rx"
|
||||
#define D_SENSOR_TM1638_CLK "TM16 CLK"
|
||||
#define D_SENSOR_TM1638_DIO "TM16 DIO"
|
||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||
#define D_SENSOR_TX20_TX "TX20"
|
||||
#define D_SENSOR_RFSEND "RFSend"
|
||||
#define D_SENSOR_RFRECV "RFrecv"
|
||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||
#define D_SENSOR_TUYA_RX "Tuya Rx"
|
||||
#define D_SENSOR_MGC3130_XFER "MGC3130 Xfer"
|
||||
#define D_SENSOR_MGC3130_RESET "MGC3130 Reset"
|
||||
#define D_SENSOR_SSPI_MISO "SSPI MISO"
|
||||
#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
|
||||
#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
|
||||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Senzor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
#define D_UNIT_CENTIMETER "cm"
|
||||
#define D_UNIT_HERTZ "Hz"
|
||||
#define D_UNIT_HOUR "hod"
|
||||
#define D_UNIT_KILOGRAM "kg"
|
||||
#define D_UNIT_INCREMENTS "inc"
|
||||
#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
|
||||
#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_MILLIMETER "mm"
|
||||
#define D_UNIT_MILLIMETER_MERCURY "mmHg"
|
||||
#define D_UNIT_MILLISECOND "ms"
|
||||
#define D_UNIT_MINUTE "min"
|
||||
#define D_UNIT_PARTS_PER_BILLION "ppb"
|
||||
#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 "sektory"
|
||||
#define D_UNIT_VA "VA"
|
||||
#define D_UNIT_VAR "VAr"
|
||||
#define D_UNIT_VOLT "V"
|
||||
#define D_UNIT_WATT "W"
|
||||
#define D_UNIT_WATTHOUR "Wh"
|
||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||
|
||||
// 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
|
||||
|
||||
//SDM220
|
||||
#define D_PHASE_ANGLE "Phase Angle"
|
||||
#define D_IMPORT_ACTIVE "Import Active"
|
||||
#define D_EXPORT_ACTIVE "Export Active"
|
||||
#define D_IMPORT_REACTIVE "Import Reactive"
|
||||
#define D_EXPORT_REACTIVE "Export Reactive"
|
||||
#define D_TOTAL_REACTIVE "Total Reactive"
|
||||
#define D_UNIT_KWARH "kVArh"
|
||||
#define D_UNIT_ANGLE "Deg"
|
||||
|
||||
#endif // _LANGUAGE_SK_SK_H_
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "А"
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "安"
|
||||
|
|
|
@ -538,6 +538,8 @@
|
|||
#define D_SENSOR_SSPI_CS "SSPI CS"
|
||||
#define D_SENSOR_SSPI_DC "SSPI DC"
|
||||
#define D_SENSOR_RF_SENSOR "RF Sensor"
|
||||
#define D_SENSOR_AZ_RX "AZ Rx"
|
||||
#define D_SENSOR_AZ_TX "AZ Tx"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "安"
|
||||
|
|
|
@ -209,6 +209,7 @@
|
|||
//#define MY_LANGUAGE pt-BR // Portuguese in Brazil
|
||||
//#define MY_LANGUAGE pt-PT // Portuguese in Portugal
|
||||
//#define MY_LANGUAGE ru-RU // Russian in Russia
|
||||
//#define MY_LANGUAGE sk-SK // Slovak in Slovakia
|
||||
//#define MY_LANGUAGE sv-SE // Swedish in Sweden
|
||||
//#define MY_LANGUAGE tr-TR // Turkish in Turkey
|
||||
//#define MY_LANGUAGE uk-UK // Ukrainian in Ukrain
|
||||
|
@ -216,6 +217,7 @@
|
|||
//#define MY_LANGUAGE zh-TW // Chinese (Traditional) in Taiwan
|
||||
|
||||
// -- Wifi Config tools ---------------------------
|
||||
#define WIFI_SOFT_AP_CHANNEL 1 // Soft Access Point Channel number between 1 and 13 as used by Wifi Manager web GUI
|
||||
//#define USE_WPS // Add support for WPS as initial wifi configuration tool (+33k code, 1k mem (5k mem with core v2.4.2+))
|
||||
//#define USE_SMARTCONFIG // Add support for Wifi SmartConfig as initial wifi configuration tool (+23k code, +0.6k mem)
|
||||
|
||||
|
@ -247,6 +249,7 @@
|
|||
// -- MQTT - TLS ----------------------------------
|
||||
// !!! TLS uses a LOT OF MEMORY so be careful to enable other options at the same time !!!
|
||||
//#define USE_MQTT_TLS // Use TLS for MQTT connection (+53k code, +15k mem)
|
||||
// #define USE_MQTT_TLS_CA_CERT // Use LetsEncrypt Certificate from sonoff_letsencrypt.h - Not supported with core 2.3.0
|
||||
|
||||
// -- KNX IP Protocol -----------------------------
|
||||
//#define USE_KNX // Enable KNX IP Protocol Support (+9.4k code, +3k7 mem)
|
||||
|
@ -366,6 +369,7 @@
|
|||
#define TUYA_DIMMER_ID 0 // Default dimmer Id
|
||||
#define USE_ARMTRONIX_DIMMERS // Add support for Armtronix Dimmers (+1k4 code)
|
||||
#define USE_PS_16_DZ // Add support for PS-16-DZ Dimmer
|
||||
//#define USE_AZ7798 // Add support for AZ-Instrument 7798 CO2 datalogger (+1k6 code)
|
||||
|
||||
// Power monitoring sensors -----------------------
|
||||
#define USE_PZEM004T // Add support for PZEM004T Energy monitor (+2k code)
|
||||
|
|
|
@ -68,7 +68,7 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu
|
|||
uint32_t time_append_timezone : 1; // bit 2 (v6.2.1.2)
|
||||
uint32_t gui_hostname_ip : 1; // bit 3 (v6.2.1.20)
|
||||
uint32_t tuya_apply_o20 : 1; // bit 4 (v6.3.0.4)
|
||||
uint32_t hass_short_discovery_msg : 1; // bit 5 (v6.3.0.7)
|
||||
uint32_t spare5 : 1;
|
||||
uint32_t use_wifi_scan : 1; // bit 6 (v6.3.0.10)
|
||||
uint32_t use_wifi_rescan : 1; // bit 7 (v6.3.0.10)
|
||||
uint32_t receive_raw : 1; // bit 8 (v6.3.0.11)
|
||||
|
|
|
@ -245,7 +245,7 @@ enum XsnsFunctions {FUNC_SETTINGS_OVERRIDE, FUNC_MODULE_INIT, FUNC_PRE_INIT, FUN
|
|||
FUNC_MQTT_SUBSCRIBE, FUNC_MQTT_INIT, FUNC_MQTT_DATA,
|
||||
FUNC_SET_POWER, FUNC_SET_DEVICE_POWER, FUNC_SHOW_SENSOR,
|
||||
FUNC_RULES_PROCESS, FUNC_SERIAL, FUNC_FREE_MEM, FUNC_BUTTON_PRESSED,
|
||||
FUNC_WEB_ADD_BUTTON, FUNC_WEB_ADD_MAIN_BUTTON, FUNC_WEB_ADD_HANDLER};
|
||||
FUNC_WEB_ADD_BUTTON, FUNC_WEB_ADD_MAIN_BUTTON, FUNC_WEB_ADD_HANDLER, FUNC_SET_CHANNELS};
|
||||
|
||||
enum CommandSource { SRC_IGNORE, SRC_MQTT, SRC_RESTART, SRC_BUTTON, SRC_SWITCH, SRC_BACKLOG, SRC_SERIAL, SRC_WEBGUI, SRC_WEBCOMMAND, SRC_WEBCONSOLE, SRC_PULSETIMER,
|
||||
SRC_TIMER, SRC_RULE, SRC_MAXPOWER, SRC_MAXENERGY, SRC_LIGHT, SRC_KNX, SRC_DISPLAY, SRC_WEMO, SRC_HUE, SRC_RETRY, SRC_MAX };
|
||||
|
|
|
@ -467,7 +467,8 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
|||
if (XdrvMqttData(topicBuf, sizeof(topicBuf), dataBuf, sizeof(dataBuf))) return;
|
||||
|
||||
grpflg = (strstr(topicBuf, Settings.mqtt_grptopic) != NULL);
|
||||
fallback_topic_flag = (strstr(topicBuf, mqtt_client) != NULL);
|
||||
snprintf_P(stemp1, sizeof(stemp1), PSTR(D_CMND "/%s/"), mqtt_client); // Full Fallback topic = cmnd/DVES_xxxxxxxx
|
||||
fallback_topic_flag = (!strncmp(topicBuf, stemp1, strlen(stemp1)));
|
||||
type = strrchr(topicBuf, '/'); // Last part of received topic is always the command (type)
|
||||
|
||||
index = 1;
|
||||
|
|
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
sonoff_letsencrypt.h - TLS Lets Encrypt certificate for Sonoff-Tasmota
|
||||
|
||||
Copyright (C) 2018 Theo Arends
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#ifdef USE_MQTT_TLS_CA_CERT
|
||||
/*********************************************************************************************\
|
||||
* LetsEncrypt IdenTrust DST Root CA X3 certificate valid until 20210930
|
||||
*
|
||||
* https://letsencrypt.org/certificates/
|
||||
* Downloaded from https://www.identrust.com/support/downloads
|
||||
\*********************************************************************************************/
|
||||
|
||||
#define MQTT_TLS_CA_CERT_LENGTH 846 // Letsencrypt
|
||||
#define MQTT_TLS_CA_CERT { \
|
||||
0x30, 0x82, 0x03, 0x4a, 0x30, 0x82, 0x02, 0x32, 0xa0, 0x03, 0x02, 0x01, \
|
||||
0x02, 0x02, 0x10, 0x44, 0xaf, 0xb0, 0x80, 0xd6, 0xa3, 0x27, 0xba, 0x89, \
|
||||
0x30, 0x39, 0x86, 0x2e, 0xf8, 0x40, 0x6b, 0x30, 0x0d, 0x06, 0x09, 0x2a, \
|
||||
0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x3f, \
|
||||
0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1b, 0x44, \
|
||||
0x69, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x53, 0x69, 0x67, 0x6e, 0x61, \
|
||||
0x74, 0x75, 0x72, 0x65, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, \
|
||||
0x6f, 0x2e, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, \
|
||||
0x0e, 0x44, 0x53, 0x54, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, \
|
||||
0x20, 0x58, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x30, 0x30, 0x39, 0x33, \
|
||||
0x30, 0x32, 0x31, 0x31, 0x32, 0x31, 0x39, 0x5a, 0x17, 0x0d, 0x32, 0x31, \
|
||||
0x30, 0x39, 0x33, 0x30, 0x31, 0x34, 0x30, 0x31, 0x31, 0x35, 0x5a, 0x30, \
|
||||
0x3f, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1b, \
|
||||
0x44, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x53, 0x69, 0x67, 0x6e, \
|
||||
0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, \
|
||||
0x43, 0x6f, 0x2e, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x03, \
|
||||
0x13, 0x0e, 0x44, 0x53, 0x54, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, \
|
||||
0x41, 0x20, 0x58, 0x33, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, \
|
||||
0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, \
|
||||
0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, \
|
||||
0x00, 0xdf, 0xaf, 0xe9, 0x97, 0x50, 0x08, 0x83, 0x57, 0xb4, 0xcc, 0x62, \
|
||||
0x65, 0xf6, 0x90, 0x82, 0xec, 0xc7, 0xd3, 0x2c, 0x6b, 0x30, 0xca, 0x5b, \
|
||||
0xec, 0xd9, 0xc3, 0x7d, 0xc7, 0x40, 0xc1, 0x18, 0x14, 0x8b, 0xe0, 0xe8, \
|
||||
0x33, 0x76, 0x49, 0x2a, 0xe3, 0x3f, 0x21, 0x49, 0x93, 0xac, 0x4e, 0x0e, \
|
||||
0xaf, 0x3e, 0x48, 0xcb, 0x65, 0xee, 0xfc, 0xd3, 0x21, 0x0f, 0x65, 0xd2, \
|
||||
0x2a, 0xd9, 0x32, 0x8f, 0x8c, 0xe5, 0xf7, 0x77, 0xb0, 0x12, 0x7b, 0xb5, \
|
||||
0x95, 0xc0, 0x89, 0xa3, 0xa9, 0xba, 0xed, 0x73, 0x2e, 0x7a, 0x0c, 0x06, \
|
||||
0x32, 0x83, 0xa2, 0x7e, 0x8a, 0x14, 0x30, 0xcd, 0x11, 0xa0, 0xe1, 0x2a, \
|
||||
0x38, 0xb9, 0x79, 0x0a, 0x31, 0xfd, 0x50, 0xbd, 0x80, 0x65, 0xdf, 0xb7, \
|
||||
0x51, 0x63, 0x83, 0xc8, 0xe2, 0x88, 0x61, 0xea, 0x4b, 0x61, 0x81, 0xec, \
|
||||
0x52, 0x6b, 0xb9, 0xa2, 0xe2, 0x4b, 0x1a, 0x28, 0x9f, 0x48, 0xa3, 0x9e, \
|
||||
0x0c, 0xda, 0x09, 0x8e, 0x3e, 0x17, 0x2e, 0x1e, 0xdd, 0x20, 0xdf, 0x5b, \
|
||||
0xc6, 0x2a, 0x8a, 0xab, 0x2e, 0xbd, 0x70, 0xad, 0xc5, 0x0b, 0x1a, 0x25, \
|
||||
0x90, 0x74, 0x72, 0xc5, 0x7b, 0x6a, 0xab, 0x34, 0xd6, 0x30, 0x89, 0xff, \
|
||||
0xe5, 0x68, 0x13, 0x7b, 0x54, 0x0b, 0xc8, 0xd6, 0xae, 0xec, 0x5a, 0x9c, \
|
||||
0x92, 0x1e, 0x3d, 0x64, 0xb3, 0x8c, 0xc6, 0xdf, 0xbf, 0xc9, 0x41, 0x70, \
|
||||
0xec, 0x16, 0x72, 0xd5, 0x26, 0xec, 0x38, 0x55, 0x39, 0x43, 0xd0, 0xfc, \
|
||||
0xfd, 0x18, 0x5c, 0x40, 0xf1, 0x97, 0xeb, 0xd5, 0x9a, 0x9b, 0x8d, 0x1d, \
|
||||
0xba, 0xda, 0x25, 0xb9, 0xc6, 0xd8, 0xdf, 0xc1, 0x15, 0x02, 0x3a, 0xab, \
|
||||
0xda, 0x6e, 0xf1, 0x3e, 0x2e, 0xf5, 0x5c, 0x08, 0x9c, 0x3c, 0xd6, 0x83, \
|
||||
0x69, 0xe4, 0x10, 0x9b, 0x19, 0x2a, 0xb6, 0x29, 0x57, 0xe3, 0xe5, 0x3d, \
|
||||
0x9b, 0x9f, 0xf0, 0x02, 0x5d, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, \
|
||||
0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, \
|
||||
0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, \
|
||||
0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, \
|
||||
0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xc4, 0xa7, \
|
||||
0xb1, 0xa4, 0x7b, 0x2c, 0x71, 0xfa, 0xdb, 0xe1, 0x4b, 0x90, 0x75, 0xff, \
|
||||
0xc4, 0x15, 0x60, 0x85, 0x89, 0x10, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, \
|
||||
0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, \
|
||||
0x01, 0x00, 0xa3, 0x1a, 0x2c, 0x9b, 0x17, 0x00, 0x5c, 0xa9, 0x1e, 0xee, \
|
||||
0x28, 0x66, 0x37, 0x3a, 0xbf, 0x83, 0xc7, 0x3f, 0x4b, 0xc3, 0x09, 0xa0, \
|
||||
0x95, 0x20, 0x5d, 0xe3, 0xd9, 0x59, 0x44, 0xd2, 0x3e, 0x0d, 0x3e, 0xbd, \
|
||||
0x8a, 0x4b, 0xa0, 0x74, 0x1f, 0xce, 0x10, 0x82, 0x9c, 0x74, 0x1a, 0x1d, \
|
||||
0x7e, 0x98, 0x1a, 0xdd, 0xcb, 0x13, 0x4b, 0xb3, 0x20, 0x44, 0xe4, 0x91, \
|
||||
0xe9, 0xcc, 0xfc, 0x7d, 0xa5, 0xdb, 0x6a, 0xe5, 0xfe, 0xe6, 0xfd, 0xe0, \
|
||||
0x4e, 0xdd, 0xb7, 0x00, 0x3a, 0xb5, 0x70, 0x49, 0xaf, 0xf2, 0xe5, 0xeb, \
|
||||
0x02, 0xf1, 0xd1, 0x02, 0x8b, 0x19, 0xcb, 0x94, 0x3a, 0x5e, 0x48, 0xc4, \
|
||||
0x18, 0x1e, 0x58, 0x19, 0x5f, 0x1e, 0x02, 0x5a, 0xf0, 0x0c, 0xf1, 0xb1, \
|
||||
0xad, 0xa9, 0xdc, 0x59, 0x86, 0x8b, 0x6e, 0xe9, 0x91, 0xf5, 0x86, 0xca, \
|
||||
0xfa, 0xb9, 0x66, 0x33, 0xaa, 0x59, 0x5b, 0xce, 0xe2, 0xa7, 0x16, 0x73, \
|
||||
0x47, 0xcb, 0x2b, 0xcc, 0x99, 0xb0, 0x37, 0x48, 0xcf, 0xe3, 0x56, 0x4b, \
|
||||
0xf5, 0xcf, 0x0f, 0x0c, 0x72, 0x32, 0x87, 0xc6, 0xf0, 0x44, 0xbb, 0x53, \
|
||||
0x72, 0x6d, 0x43, 0xf5, 0x26, 0x48, 0x9a, 0x52, 0x67, 0xb7, 0x58, 0xab, \
|
||||
0xfe, 0x67, 0x76, 0x71, 0x78, 0xdb, 0x0d, 0xa2, 0x56, 0x14, 0x13, 0x39, \
|
||||
0x24, 0x31, 0x85, 0xa2, 0xa8, 0x02, 0x5a, 0x30, 0x47, 0xe1, 0xdd, 0x50, \
|
||||
0x07, 0xbc, 0x02, 0x09, 0x90, 0x00, 0xeb, 0x64, 0x63, 0x60, 0x9b, 0x16, \
|
||||
0xbc, 0x88, 0xc9, 0x12, 0xe6, 0xd2, 0x7d, 0x91, 0x8b, 0xf9, 0x3d, 0x32, \
|
||||
0x8d, 0x65, 0xb4, 0xe9, 0x7c, 0xb1, 0x57, 0x76, 0xea, 0xc5, 0xb6, 0x28, \
|
||||
0x39, 0xbf, 0x15, 0x65, 0x1c, 0xc8, 0xf6, 0x77, 0x96, 0x6a, 0x0a, 0x8d, \
|
||||
0x77, 0x0b, 0xd8, 0x91, 0x0b, 0x04, 0x8e, 0x07, 0xdb, 0x29, 0xb6, 0x0a, \
|
||||
0xee, 0x9d, 0x82, 0x35, 0x35, 0x10 }
|
||||
|
||||
#endif // USE_MQTT_TLS_CA_CERT
|
|
@ -135,6 +135,7 @@ void KNX_CB_Action(message_t const &msg, void *arg);
|
|||
#define USE_RF_SENSOR // Add support for RF sensor receiver (434MHz or 868MHz) (+0k8 code)
|
||||
// #define USE_THEO_V2 // Add support for decoding Theo V2 sensors as documented on https://sidweb.nl using 434MHz RF sensor receiver (+1k4 code)
|
||||
#define USE_ALECTO_V2 // Add support for decoding Alecto V2 sensors like ACH2010, WS3000 and DKW2012 using 868MHz RF sensor receiver (+1k7 code)
|
||||
//#define USE_AZ7798 // Add support for AZ-Instrument 7798 CO2 datalogger
|
||||
#endif // USE_SENSORS
|
||||
|
||||
/*********************************************************************************************\
|
||||
|
@ -193,6 +194,7 @@ void KNX_CB_Action(message_t const &msg, void *arg);
|
|||
#undef USE_RF_SENSOR // Disable support for RF sensor receiver (434MHz or 868MHz) (+0k8 code)
|
||||
#undef DEBUG_THEO // Disable debug code
|
||||
#undef USE_DEBUG_DRIVER // Disable debug code
|
||||
#undef USE_AZ7798 // Disable support for AZ-Instrument 7798 CO2 datalogger
|
||||
#endif // USE_CLASSIC
|
||||
|
||||
/*********************************************************************************************\
|
||||
|
@ -313,6 +315,7 @@ void KNX_CB_Action(message_t const &msg, void *arg);
|
|||
#undef USE_RF_SENSOR // Disable support for RF sensor receiver (434MHz or 868MHz) (+0k8 code)
|
||||
#undef DEBUG_THEO // Disable debug code
|
||||
#undef USE_DEBUG_DRIVER // Disable debug code
|
||||
#undef USE_AZ7798 // Disable support for AZ-Instrument 7798 CO2 datalogger
|
||||
#endif // USE_BASIC
|
||||
|
||||
/*********************************************************************************************\
|
||||
|
@ -375,6 +378,7 @@ void KNX_CB_Action(message_t const &msg, void *arg);
|
|||
#undef USE_RF_SENSOR // Disable support for RF sensor receiver (434MHz or 868MHz) (+0k8 code)
|
||||
#undef DEBUG_THEO // Disable debug code
|
||||
#undef USE_DEBUG_DRIVER // Disable debug code
|
||||
#undef USE_AZ7798 // Disable support for AZ-Instrument 7798 CO2 datalogger
|
||||
#endif // BE_MINIMAL
|
||||
|
||||
/*********************************************************************************************\
|
||||
|
@ -422,4 +426,8 @@ void KNX_CB_Action(message_t const &msg, void *arg);
|
|||
#define ARDUINO_ESP8266_RELEASE "STAGE"
|
||||
#endif
|
||||
|
||||
#ifdef ARDUINO_ESP8266_RELEASE_2_3_0 // Disable not supported features in core 2.3.0
|
||||
#undef USE_MQTT_TLS_CA_CERT
|
||||
#endif
|
||||
|
||||
#endif // _SONOFF_POST_H_
|
||||
|
|
|
@ -141,6 +141,8 @@ enum UserSelectablePins {
|
|||
GPIO_SSPI_CS, // Software SPI Chip Select
|
||||
GPIO_SSPI_DC, // Software SPI Data or Command
|
||||
GPIO_RF_SENSOR, // Rf receiver with sensor decoding
|
||||
GPIO_AZ_TXD, // AZ-Instrument 7798 Serial interface
|
||||
GPIO_AZ_RXD, // AZ-Instrument 7798 Serial interface
|
||||
GPIO_SENSOR_END };
|
||||
|
||||
// Programmer selectable GPIO functionality offset by user selectable GPIOs
|
||||
|
@ -201,7 +203,8 @@ const char kSensorNames[] PROGMEM =
|
|||
D_SENSOR_TUYA_TX "|" D_SENSOR_TUYA_RX "|"
|
||||
D_SENSOR_MGC3130_XFER "|" D_SENSOR_MGC3130_RESET "|"
|
||||
D_SENSOR_SSPI_MISO "|" D_SENSOR_SSPI_MOSI "|" D_SENSOR_SSPI_SCLK "|" D_SENSOR_SSPI_CS "|" D_SENSOR_SSPI_DC "|"
|
||||
D_SENSOR_RF_SENSOR;
|
||||
D_SENSOR_RF_SENSOR "|"
|
||||
D_SENSOR_AZ_TX "|" D_SENSOR_AZ_RX;
|
||||
|
||||
/********************************************************************************************/
|
||||
|
||||
|
@ -454,6 +457,10 @@ const uint8_t kGpioNiceList[] PROGMEM = {
|
|||
GPIO_MGC3130_XFER,
|
||||
GPIO_MGC3130_RESET
|
||||
#endif
|
||||
#ifdef USE_AZ7798
|
||||
GPIO_AZ_TXD, // AZ-Instrument 7798 CO2 datalogger Serial interface
|
||||
GPIO_AZ_RXD // AZ-Instrument 7798 CO2 datalogger Serial interface
|
||||
#endif
|
||||
};
|
||||
|
||||
const uint8_t kModuleNiceList[MAXMODULE] PROGMEM = {
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#ifndef _SONOFF_VERSION_H_
|
||||
#define _SONOFF_VERSION_H_
|
||||
|
||||
#define VERSION 0x06040000
|
||||
#define VERSION 0x06040100
|
||||
|
||||
#define D_PROGRAMNAME "Sonoff-Tasmota"
|
||||
#define D_AUTHOR "Theo Arends"
|
||||
|
|
|
@ -1113,7 +1113,7 @@ void AddLog(byte loglevel)
|
|||
snprintf_P(mxtime, sizeof(mxtime), PSTR("%02d" D_HOUR_MINUTE_SEPARATOR "%02d" D_MINUTE_SECOND_SEPARATOR "%02d "), RtcTime.hour, RtcTime.minute, RtcTime.second);
|
||||
|
||||
if (loglevel <= seriallog_level) {
|
||||
Serial.printf("%s%s\n", mxtime, log_data);
|
||||
Serial.printf("%s%s\r\n", mxtime, log_data);
|
||||
}
|
||||
#ifdef USE_WEBSERVER
|
||||
if (Settings.webserver && (loglevel <= Settings.weblog_level)) {
|
||||
|
|
|
@ -370,7 +370,9 @@ void GetFeatures(void)
|
|||
#ifdef USE_ALECTO_V2
|
||||
feature_sns2 |= 0x00020000;
|
||||
#endif
|
||||
// feature_sns2 |= 0x00040000;
|
||||
#ifdef USE_AZ7798
|
||||
feature_sns2 |= 0x00040000;
|
||||
#endif
|
||||
// feature_sns2 |= 0x00080000;
|
||||
// feature_sns2 |= 0x00100000;
|
||||
// feature_sns2 |= 0x00200000;
|
||||
|
|
|
@ -249,7 +249,7 @@ void WifiBeginAfterScan()
|
|||
uint8_t* bssid = WiFi.BSSID(); // Get current bssid
|
||||
memcpy((void*) &wifi_bssid, (void*) bssid, sizeof(wifi_bssid));
|
||||
best_network_db = WiFi.RSSI(); // Get current rssi and add threshold
|
||||
if (best_network_db < -WIFI_RSSI_THRESHOLD) { best_network_db +WIFI_RSSI_THRESHOLD; }
|
||||
if (best_network_db < -WIFI_RSSI_THRESHOLD) { best_network_db += WIFI_RSSI_THRESHOLD; }
|
||||
wifi_scan_state = 3;
|
||||
}
|
||||
// Init scan
|
||||
|
|
|
@ -27,6 +27,10 @@
|
|||
|
||||
#define XDRV_01 1
|
||||
|
||||
#ifndef WIFI_SOFT_AP_CHANNEL
|
||||
#define WIFI_SOFT_AP_CHANNEL 1 // Soft Access Point Channel number between 1 and 11 as used by SmartConfig web GUI
|
||||
#endif
|
||||
|
||||
#define HTTP_REFRESH_TIME 2345 // milliseconds
|
||||
#define HTTP_RESTART_RECONNECT_TIME 9000 // milliseconds
|
||||
#define HTTP_OTA_RESTART_RECONNECT_TIME 20000 // milliseconds
|
||||
|
@ -165,7 +169,7 @@ const char HTTP_SCRIPT_MODULE2[] PROGMEM =
|
|||
"x.send();"
|
||||
"}";
|
||||
const char HTTP_SCRIPT_MODULE3[] PROGMEM =
|
||||
"}1'%d'>%02d %s}2"; // "}1" and "}2" means do not use "}x" in Module name and Sensor name
|
||||
"}1'%d'>%s (%02d)}2"; // "}1" and "}2" means do not use "}x" in Module name and Sensor name
|
||||
|
||||
const char HTTP_SCRIPT_INFO_BEGIN[] PROGMEM =
|
||||
"function i(){"
|
||||
|
@ -441,7 +445,11 @@ void WifiManagerBegin(void)
|
|||
StopWebserver();
|
||||
|
||||
DnsServer = new DNSServer();
|
||||
WiFi.softAP(my_hostname);
|
||||
|
||||
int channel = WIFI_SOFT_AP_CHANNEL;
|
||||
if ((channel < 1) || (channel > 13)) { channel = 1; }
|
||||
WiFi.softAP(my_hostname, NULL, channel);
|
||||
|
||||
delay(500); // Without delay I've seen the IP address blank
|
||||
/* Setup the DNS server redirecting all the domains to the apIP */
|
||||
DnsServer->setErrorReplyCode(DNSReplyCode::NoError);
|
||||
|
@ -798,14 +806,14 @@ void HandleModuleConfiguration(void)
|
|||
for (byte i = 0; i < MAXMODULE; i++) {
|
||||
midx = pgm_read_byte(kModuleNiceList + i);
|
||||
snprintf_P(stemp, sizeof(stemp), kModules[midx].name);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SCRIPT_MODULE3, midx, midx +1, stemp);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SCRIPT_MODULE3, midx, stemp, midx +1);
|
||||
page += mqtt_data;
|
||||
}
|
||||
page += "}3"; // String separator means do not use "}3" in Module name and Sensor name
|
||||
for (byte j = 0; j < sizeof(kGpioNiceList); j++) {
|
||||
midx = pgm_read_byte(kGpioNiceList + j);
|
||||
if (!GetUsedInModule(midx, cmodule.gp.io)) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SCRIPT_MODULE3, midx, midx, GetTextIndexed(stemp, sizeof(stemp), midx, kSensorNames));
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SCRIPT_MODULE3, midx, GetTextIndexed(stemp, sizeof(stemp), midx, kSensorNames), midx);
|
||||
page += mqtt_data;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,11 +51,14 @@
|
|||
#define MQTT_LIBRARY_TYPE MQTT_PUBSUBCLIENT // Use PubSubClient library as it only supports TLS
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif // USE_MQTT_TLS
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
#ifdef USE_MQTT_TLS
|
||||
#ifdef USE_MQTT_TLS_CA_CERT
|
||||
#include "sonoff_letsencrypt.h" // LetsEncrypt certificate
|
||||
#endif
|
||||
WiFiClientSecure EspClient; // Wifi Secure Client
|
||||
#else
|
||||
WiFiClient EspClient; // Wifi Client
|
||||
|
@ -467,6 +470,15 @@ boolean MqttCheckTls(void)
|
|||
Settings.mqtt_host, Settings.mqtt_port, mqtt_retry_counter);
|
||||
AddLog(LOG_LEVEL_DEBUG);
|
||||
} else {
|
||||
#ifdef USE_MQTT_TLS_CA_CERT
|
||||
unsigned char tls_ca_cert[] = MQTT_TLS_CA_CERT;
|
||||
if (EspClient.setCACert(tls_ca_cert, MQTT_TLS_CA_CERT_LENGTH)) {
|
||||
if (EspClient.verifyCertChain(Settings.mqtt_host)) {
|
||||
AddLog_P(LOG_LEVEL_INFO, S_LOG_MQTT, PSTR(D_VERIFIED "CA"));
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (EspClient.verify(fingerprint1, Settings.mqtt_host)) {
|
||||
AddLog_P(LOG_LEVEL_INFO, S_LOG_MQTT, PSTR(D_VERIFIED "1"));
|
||||
result = true;
|
||||
|
@ -475,6 +487,7 @@ boolean MqttCheckTls(void)
|
|||
AddLog_P(LOG_LEVEL_INFO, S_LOG_MQTT, PSTR(D_VERIFIED "2"));
|
||||
result = true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if (!result) AddLog_P(LOG_LEVEL_INFO, S_LOG_MQTT, PSTR(D_FAILED));
|
||||
EspClient.stop();
|
||||
|
|
|
@ -402,12 +402,11 @@ boolean EnergyCommand(void)
|
|||
break;
|
||||
}
|
||||
}
|
||||
char energy_yesterday_chr[10];
|
||||
char energy_daily_chr[10];
|
||||
char energy_total_chr[10];
|
||||
|
||||
char energy_total_chr[33];
|
||||
dtostrfd(energy_total, Settings.flag2.energy_resolution, energy_total_chr);
|
||||
char energy_daily_chr[33];
|
||||
dtostrfd(energy_daily, Settings.flag2.energy_resolution, energy_daily_chr);
|
||||
char energy_yesterday_chr[33];
|
||||
dtostrfd((float)Settings.energy_kWhyesterday / 100000, Settings.flag2.energy_resolution, energy_yesterday_chr);
|
||||
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"%s\":{\"" D_JSON_TOTAL "\":%s,\"" D_JSON_YESTERDAY "\":%s,\"" D_JSON_TODAY "\":%s}}"),
|
||||
|
@ -549,18 +548,6 @@ const char HTTP_ENERGY_SNS4[] PROGMEM = "%s"
|
|||
|
||||
void EnergyShow(boolean json)
|
||||
{
|
||||
char voltage_chr[10];
|
||||
char current_chr[10];
|
||||
char active_power_chr[10];
|
||||
char apparent_power_chr[10];
|
||||
char reactive_power_chr[10];
|
||||
char power_factor_chr[10];
|
||||
char frequency_chr[10];
|
||||
char energy_daily_chr[10];
|
||||
char energy_period_chr[10];
|
||||
char energy_yesterday_chr[10];
|
||||
char energy_total_chr[10];
|
||||
|
||||
char speriod[20];
|
||||
char sfrequency[20];
|
||||
|
||||
|
@ -568,6 +555,10 @@ void EnergyShow(boolean json)
|
|||
|
||||
float power_factor = energy_power_factor;
|
||||
|
||||
char apparent_power_chr[33];
|
||||
char reactive_power_chr[33];
|
||||
char power_factor_chr[33];
|
||||
char frequency_chr[33];
|
||||
if (!energy_type_dc) {
|
||||
float apparent_power = energy_apparent_power;
|
||||
if (isnan(apparent_power)) {
|
||||
|
@ -602,14 +593,21 @@ void EnergyShow(boolean json)
|
|||
}
|
||||
}
|
||||
|
||||
char voltage_chr[33];
|
||||
dtostrfd(energy_voltage, Settings.flag2.voltage_resolution, voltage_chr);
|
||||
char current_chr[33];
|
||||
dtostrfd(energy_current, Settings.flag2.current_resolution, current_chr);
|
||||
char active_power_chr[33];
|
||||
dtostrfd(energy_active_power, Settings.flag2.wattage_resolution, active_power_chr);
|
||||
char energy_daily_chr[33];
|
||||
dtostrfd(energy_daily, Settings.flag2.energy_resolution, energy_daily_chr);
|
||||
char energy_yesterday_chr[33];
|
||||
dtostrfd((float)Settings.energy_kWhyesterday / 100000, Settings.flag2.energy_resolution, energy_yesterday_chr);
|
||||
char energy_total_chr[33];
|
||||
dtostrfd(energy_total, Settings.flag2.energy_resolution, energy_total_chr);
|
||||
|
||||
float energy = 0;
|
||||
char energy_period_chr[33];
|
||||
if (show_energy_period) {
|
||||
if (energy_period) energy = (float)(energy_kWhtoday - energy_period) / 100;
|
||||
energy_period = energy_kWhtoday;
|
||||
|
|
|
@ -828,30 +828,20 @@ void LightAnimate(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
XdrvMailbox.index = light_device;
|
||||
XdrvMailbox.data = (char*)cur_col;
|
||||
XdrvMailbox.data_len = sizeof(cur_col);
|
||||
if (XdrvCall(FUNC_SET_CHANNELS)) {
|
||||
// Serviced
|
||||
}
|
||||
#ifdef USE_WS2812 // ************************************************************************
|
||||
if (LT_WS2812 == light_type) {
|
||||
else if (LT_WS2812 == light_type) {
|
||||
Ws2812SetColor(0, cur_col[0], cur_col[1], cur_col[2], cur_col[3]);
|
||||
}
|
||||
#endif // USE_ES2812 ************************************************************************
|
||||
if (light_type > LT_WS2812) {
|
||||
else if (light_type > LT_WS2812) {
|
||||
LightMy92x1Duty(cur_col[0], cur_col[1], cur_col[2], cur_col[3], cur_col[4]);
|
||||
}
|
||||
#ifdef USE_TUYA_DIMMER
|
||||
if (light_type == LT_SERIAL1 && Settings.module == TUYA_DIMMER ) {
|
||||
LightSerialDuty(cur_col[0]);
|
||||
}
|
||||
#endif // USE_TUYA_DIMMER
|
||||
#ifdef USE_ARMTRONIX_DIMMERS
|
||||
if (light_type == LT_SERIAL2) {
|
||||
LightSerial2Duty(cur_col[0],cur_col[1]);
|
||||
}
|
||||
#endif // USE_ARMTRONIX_DIMMERS
|
||||
#ifdef USE_PS_16_DZ
|
||||
if (light_type == LT_SERIAL1 && Settings.module == PS_16_DZ) {
|
||||
PS16DZSerialDuty(cur_col[0]);
|
||||
}
|
||||
#endif // USE_PS_16_DZ
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -488,7 +488,7 @@ boolean TimerCommand(void)
|
|||
if (XdrvMailbox.data_len) {
|
||||
Settings.longitude = (int)(CharToDouble(XdrvMailbox.data) *1000000);
|
||||
}
|
||||
char lbuff[32];
|
||||
char lbuff[33];
|
||||
dtostrfd(((double)Settings.longitude) /1000000, 6, lbuff);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_SVALUE, command, lbuff);
|
||||
}
|
||||
|
@ -496,7 +496,7 @@ boolean TimerCommand(void)
|
|||
if (XdrvMailbox.data_len) {
|
||||
Settings.latitude = (int)(CharToDouble(XdrvMailbox.data) *1000000);
|
||||
}
|
||||
char lbuff[32];
|
||||
char lbuff[33];
|
||||
dtostrfd(((double)Settings.latitude) /1000000, 6, lbuff);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_SVALUE, command, lbuff);
|
||||
}
|
||||
|
|
|
@ -94,7 +94,7 @@ uint8_t rules_trigger_count[MAX_RULE_SETS] = { 0 };
|
|||
uint8_t rules_teleperiod = 0;
|
||||
|
||||
char event_data[100];
|
||||
char vars[MAX_RULE_VARS][10] = { 0 };
|
||||
char vars[MAX_RULE_VARS][33] = { 0 };
|
||||
|
||||
/*******************************************************************************************/
|
||||
|
||||
|
|
|
@ -551,7 +551,7 @@ void KNX_CB_Action(message_t const &msg, void *arg)
|
|||
device_parameters_t *chan = (device_parameters_t *)arg;
|
||||
if (!(Settings.flag.knx_enabled)) { return; }
|
||||
|
||||
char tempchar[25];
|
||||
char tempchar[33];
|
||||
|
||||
if (msg.data_len == 1) {
|
||||
// COMMAND
|
||||
|
|
|
@ -22,77 +22,6 @@
|
|||
#define XDRV_12 12
|
||||
|
||||
const char HASS_DISCOVER_RELAY[] PROGMEM =
|
||||
"{\"name\":\"%s\"," // dualr2 1
|
||||
"\"command_topic\":\"%s\"," // cmnd/dualr2/POWER2
|
||||
"\"state_topic\":\"%s\"," // stat/dualr2/RESULT (implies "\"optimistic\":\"false\",")
|
||||
"\"value_template\":\"{{value_json.%s}}\"," // POWER2
|
||||
"\"payload_off\":\"%s\"," // OFF
|
||||
"\"payload_on\":\"%s\"," // ON
|
||||
// "\"optimistic\":\"false\"," // false is Hass default when state_topic is set
|
||||
"\"availability_topic\":\"%s\"," // tele/dualr2/LWT
|
||||
"\"payload_available\":\"" D_ONLINE "\"," // Online
|
||||
"\"payload_not_available\":\"" D_OFFLINE "\""; // Offline
|
||||
|
||||
const char HASS_DISCOVER_BUTTON_SWITCH[] PROGMEM =
|
||||
"{\"name\":\"%s\"," // dualr2 1 BTN
|
||||
"\"state_topic\":\"%s\"," // cmnd/dualr2/POWER (implies "\"optimistic\":\"false\",")
|
||||
// "\"value_template\":\"{{value_json.%s}}\"," // POWER2
|
||||
"\"payload_on\":\"%s\"," // TOGGLE / ON
|
||||
// "\"optimistic\":\"false\"," // false is Hass default when state_topic is set
|
||||
"\"availability_topic\":\"%s\"," // tele/dualr2/LWT
|
||||
"\"payload_available\":\"" D_ONLINE "\"," // Online
|
||||
"\"payload_not_available\":\"" D_OFFLINE "\""; // Offline
|
||||
|
||||
const char HASS_DISCOVER_BUTTON_SWITCH_TOGGLE[] PROGMEM =
|
||||
"%s,\"off_delay\":1"; // Hass has no support for TOGGLE, fake it by resetting to OFF after 1s
|
||||
|
||||
const char HASS_DISCOVER_BUTTON_SWITCH_ONOFF[] PROGMEM =
|
||||
"%s,\"force_update\":true," // In ON/OFF case, enable force_update to make automations work
|
||||
"\"payload_off\":\"%s\""; // OFF
|
||||
|
||||
const char HASS_DISCOVER_LIGHT_DIMMER[] PROGMEM =
|
||||
"%s,\"brightness_command_topic\":\"%s\"," // cmnd/led2/Dimmer
|
||||
"\"brightness_state_topic\":\"%s\"," // stat/led2/RESULT
|
||||
"\"brightness_scale\":100," // 100%
|
||||
"\"on_command_type\":\"brightness\"," // power on (first), power on (last), no power on (brightness)
|
||||
"\"brightness_value_template\":\"{{value_json." D_CMND_DIMMER "}}\"";
|
||||
|
||||
const char HASS_DISCOVER_LIGHT_COLOR[] PROGMEM =
|
||||
"%s,\"rgb_command_topic\":\"%s2\"," // cmnd/led2/Color2
|
||||
"\"rgb_state_topic\":\"%s\"," // stat/led2/RESULT
|
||||
"\"rgb_value_template\":\"{{value_json." D_CMND_COLOR ".split(',')[0:3]|join(',')}}\"";
|
||||
|
||||
const char HASS_DISCOVER_LIGHT_WHITE[] PROGMEM =
|
||||
"%s,\"white_value_command_topic\":\"%s\"," // cmnd/led2/White
|
||||
"\"white_value_state_topic\":\"%s\"," // stat/led2/RESULT
|
||||
"\"white_value_scale\":100,"
|
||||
"\"white_value_template\":\"{{ value_json.Channel[3] }}\"";
|
||||
|
||||
const char HASS_DISCOVER_LIGHT_CT[] PROGMEM =
|
||||
"%s,\"color_temp_command_topic\":\"%s\"," // cmnd/led2/CT
|
||||
"\"color_temp_state_topic\":\"%s\"," // stat/led2/RESULT
|
||||
"\"color_temp_value_template\":\"{{value_json." D_CMND_COLORTEMPERATURE "}}\"";
|
||||
|
||||
const char HASS_DISCOVER_SENSOR[] PROGMEM =
|
||||
"{\"name\":\"%s\"," // dualr2 1 BTN
|
||||
"\"state_topic\":\"%s\"," // cmnd/dualr2/POWER (implies "\"optimistic\":\"false\",")
|
||||
"\"availability_topic\":\"%s\"," // tele/dualr2/LWT
|
||||
"\"payload_available\":\"" D_ONLINE "\"," // Online
|
||||
"\"payload_not_available\":\"" D_OFFLINE "\""; // Offline
|
||||
|
||||
const char HASS_DISCOVER_SENSOR_TEMP[] PROGMEM =
|
||||
"%s,\"unit_of_measurement\":\"°%c\"," // °C / °F
|
||||
"\"value_template\":\"{{value_json['%s'].Temperature}}\""; // "SI7021-14":{"Temperature":null,"Humidity":null} -> {{ value_json['SI7021-14'].Temperature }}
|
||||
|
||||
const char HASS_DISCOVER_SENSOR_HUM[] PROGMEM =
|
||||
"%s,\"unit_of_measurement\":\"%%\"," // %
|
||||
"\"value_template\":\"{{value_json['%s'].Humidity}}\"," // "SI7021-14":{"Temperature":null,"Humidity":null} -> {{ value_json['SI7021-14'].Humidity }}
|
||||
"\"device_class\":\"humidity\""; // temperature / humidity
|
||||
|
||||
const char HASS_DISCOVER_SENSOR_ANY[] PROGMEM =
|
||||
"%s,\"value_template\":\"{{value_json['%s'].%s}}\""; // "COUNTER":{"C1":0} -> {{ value_json['COUNTER'].C1 }}
|
||||
|
||||
const char HASS_DISCOVER_RELAY_SHORT[] PROGMEM =
|
||||
"{\"name\":\"%s\"," // dualr2 1
|
||||
"\"cmd_t\":\"%s\"," // cmnd/dualr2/POWER2
|
||||
"\"stat_t\":\"%s\"," // stat/dualr2/RESULT (implies "\"optimistic\":\"false\",")
|
||||
|
@ -104,7 +33,7 @@ const char HASS_DISCOVER_RELAY_SHORT[] PROGMEM =
|
|||
"\"pl_avail\":\"" D_ONLINE "\"," // Online
|
||||
"\"pl_not_avail\":\"" D_OFFLINE "\""; // Offline
|
||||
|
||||
const char HASS_DISCOVER_BUTTON_SWITCH_SHORT[] PROGMEM =
|
||||
const char HASS_DISCOVER_BUTTON_SWITCH[] PROGMEM =
|
||||
"{\"name\":\"%s\"," // dualr2 1 BTN
|
||||
"\"stat_t\":\"%s\"," // cmnd/dualr2/POWER (implies "\"optimistic\":\"false\",")
|
||||
// "\"value_template\":\"{{value_json.%s}}\"," // POWER2
|
||||
|
@ -114,63 +43,86 @@ const char HASS_DISCOVER_BUTTON_SWITCH_SHORT[] PROGMEM =
|
|||
"\"pl_avail\":\"" D_ONLINE "\"," // Online
|
||||
"\"pl_not_avail\":\"" D_OFFLINE "\""; // Offline
|
||||
|
||||
const char HASS_DISCOVER_BUTTON_SWITCH_TOGGLE_SHORT[] PROGMEM =
|
||||
const char HASS_DISCOVER_BUTTON_SWITCH_TOGGLE[] PROGMEM =
|
||||
"%s,\"off_delay\":1"; // Hass has no support for TOGGLE, fake it by resetting to OFF after 1s
|
||||
|
||||
const char HASS_DISCOVER_BUTTON_SWITCH_ONOFF_SHORT[] PROGMEM =
|
||||
const char HASS_DISCOVER_BUTTON_SWITCH_ONOFF[] PROGMEM =
|
||||
"%s,\"frc_upd\":true," // In ON/OFF case, enable force_update to make automations work
|
||||
"\"pl_off\":\"%s\""; // OFF
|
||||
|
||||
|
||||
const char HASS_DISCOVER_LIGHT_DIMMER_SHORT[] PROGMEM =
|
||||
const char HASS_DISCOVER_LIGHT_DIMMER[] PROGMEM =
|
||||
"%s,\"bri_cmd_t\":\"%s\"," // cmnd/led2/Dimmer
|
||||
"\"bri_stat_t\":\"%s\"," // stat/led2/RESULT
|
||||
"\"bri_scl\":100," // 100%
|
||||
"\"on_cmd_type\":\"brightness\"," // power on (first), power on (last), no power on (brightness)
|
||||
"\"bri_val_tpl\":\"{{value_json." D_CMND_DIMMER "}}\"";
|
||||
|
||||
const char HASS_DISCOVER_LIGHT_COLOR_SHORT[] PROGMEM =
|
||||
const char HASS_DISCOVER_LIGHT_COLOR[] PROGMEM =
|
||||
"%s,\"rgb_cmd_t\":\"%s2\"," // cmnd/led2/Color2
|
||||
"\"rgb_stat_t\":\"%s\"," // stat/led2/RESULT
|
||||
"\"rgb_val_tpl\":\"{{value_json." D_CMND_COLOR ".split(',')[0:3]|join(',')}}\"";
|
||||
|
||||
const char HASS_DISCOVER_LIGHT_WHITE_SHORT[] PROGMEM =
|
||||
const char HASS_DISCOVER_LIGHT_WHITE[] PROGMEM =
|
||||
"%s,\"whit_val_cmd_t\":\"%s\"," // cmnd/led2/White
|
||||
"\"whit_val_stat_t\":\"%s\"," // stat/led2/RESULT
|
||||
"\"white_value_scale\":100," // (No abbreviation defined)
|
||||
"\"whit_val_tpl\":\"{{ value_json.Channel[3] }}\"";
|
||||
|
||||
const char HASS_DISCOVER_LIGHT_CT_SHORT[] PROGMEM =
|
||||
const char HASS_DISCOVER_LIGHT_CT[] PROGMEM =
|
||||
"%s,\"clr_temp_cmd_t\":\"%s\"," // cmnd/led2/CT
|
||||
"\"clr_temp_stat_t\":\"%s\"," // stat/led2/RESULT
|
||||
"\"clr_temp_val_tpl\":\"{{value_json." D_CMND_COLORTEMPERATURE "}}\"";
|
||||
|
||||
const char HASS_DISCOVER_LIGHT_SCHEME_SHORT[] PROGMEM =
|
||||
const char HASS_DISCOVER_LIGHT_SCHEME[] PROGMEM =
|
||||
"%s,\"fx_cmd_t\":\"%s\"," // cmnd/led2/Scheme
|
||||
"\"fx_stat_t\":\"%s\"," // stat/led2/RESULT
|
||||
"\"fx_val_tpl\":\"{{value_json." D_CMND_SCHEME "}}\","
|
||||
"\"fx_list\":[\"0\",\"1\",\"2\",\"3\",\"4\"]"; // string list with reference to scheme parameter.
|
||||
|
||||
const char HASS_DISCOVER_SENSOR_SHORT[] PROGMEM =
|
||||
const char HASS_DISCOVER_SENSOR[] PROGMEM =
|
||||
"{\"name\":\"%s\"," // dualr2 1 BTN
|
||||
"\"stat_t\":\"%s\"," // cmnd/dualr2/POWER (implies "\"optimistic\":\"false\",")
|
||||
"\"avty_t\":\"%s\"," // tele/dualr2/LWT
|
||||
"\"pl_avail\":\"" D_ONLINE "\"," // Online
|
||||
"\"pl_not_avail\":\"" D_OFFLINE "\""; // Offline
|
||||
|
||||
const char HASS_DISCOVER_SENSOR_TEMP_SHORT[] PROGMEM =
|
||||
const char HASS_DISCOVER_SENSOR_TEMP[] PROGMEM =
|
||||
"%s,\"unit_of_meas\":\"°%c\"," // °C / °F
|
||||
"\"val_tpl\":\"{{value_json['%s'].Temperature}}\""; // "SI7021-14":{"Temperature":null,"Humidity":null} -> {{ value_json['SI7021-14'].Temperature }}
|
||||
|
||||
const char HASS_DISCOVER_SENSOR_HUM_SHORT[] PROGMEM =
|
||||
const char HASS_DISCOVER_SENSOR_HUM[] PROGMEM =
|
||||
"%s,\"unit_of_meas\":\"%%\"," // %
|
||||
"\"val_tpl\":\"{{value_json['%s'].Humidity}}\"," // "SI7021-14":{"Temperature":null,"Humidity":null} -> {{ value_json['SI7021-14'].Humidity }}
|
||||
"\"dev_cla\":\"humidity\""; // humidity
|
||||
|
||||
const char HASS_DISCOVER_SENSOR_ANY_SHORT[] PROGMEM =
|
||||
"%s,\"val_tpl\":\"{{value_json['%s'].%s}}\""; // "COUNTER":{"C1":0} -> {{ value_json['COUNTER'].C1 }}
|
||||
const char HASS_DISCOVER_SENSOR_PRESS[] PROGMEM =
|
||||
"%s,\"unit_of_meas\":\"%s\"," // PressureUnit() setting
|
||||
"\"val_tpl\":\"{{value_json['%s'].Pressure}}\"," // "BME280":{"Temperature":19.7,"Humidity":27.8,"Pressure":990.1} -> {{ value_json['BME280'].Pressure }}
|
||||
"\"dev_cla\":\"pressure\""; // pressure
|
||||
|
||||
const char HASS_DISCOVER_DEVICE_INFO_SHORT[] PROGMEM =
|
||||
//ENERGY
|
||||
const char HASS_DISCOVER_SENSOR_KWH[] PROGMEM =
|
||||
"%s,\"unit_of_meas\":\"kWh\"," // kWh
|
||||
"\"val_tpl\":\"{{value_json['%s'].%s}}\""; // "ENERGY":{"TotalStartTime":null,"Total":null,"Yesterday":null,"Today":null,"Power":null,"ApparentPower":null,"ReactivePower":null,"Factor":null,"Voltage":null,"Current":null} -> {{ value_json['ENERGY'].Total/Yesterday/Today }}
|
||||
|
||||
const char HASS_DISCOVER_SENSOR_WATT[] PROGMEM =
|
||||
"%s,\"unit_of_meas\":\"W\"," // W
|
||||
"\"val_tpl\":\"{{value_json['%s'].%s}}\""; // "ENERGY":{"TotalStartTime":null,"Total":null,"Yesterday":null,"Today":null,"Power":null,"ApparentPower":null,"ReactivePower":null,"Factor":null,"Voltage":null,"Current":null} -> {{ value_json['ENERGY'].POWER }}
|
||||
|
||||
const char HASS_DISCOVER_SENSOR_VOLTAGE[] PROGMEM =
|
||||
"%s,\"unit_of_meas\":\"V\"," // V
|
||||
"\"val_tpl\":\"{{value_json['%s'].%s}}\""; // "ENERGY":{"TotalStartTime":null,"Total":null,"Yesterday":null,"Today":null,"Power":null,"ApparentPower":null,"ReactivePower":null,"Factor":null,"Voltage":null,"Current":null} -> {{ value_json['ENERGY'].Voltage }}
|
||||
|
||||
const char HASS_DISCOVER_SENSOR_AMPERE[] PROGMEM =
|
||||
"%s,\"unit_of_meas\":\"A\"," // A
|
||||
"\"val_tpl\":\"{{value_json['%s'].%s}}\""; // "ENERGY":{"TotalStartTime":null,"Total":null,"Yesterday":null,"Today":null,"Power":null,"ApparentPower":null,"ReactivePower":null,"Factor":null,"Voltage":null,"Current":null} -> {{ value_json['ENERGY'].Current }}
|
||||
|
||||
const char HASS_DISCOVER_SENSOR_ANY[] PROGMEM =
|
||||
"%s,\"unit_of_meas\":\" \"," // " " As unit of measurement to get a value graph in Hass
|
||||
"\"val_tpl\":\"{{value_json['%s'].%s}}\""; // "COUNTER":{"C1":0} -> {{ value_json['COUNTER'].C1 }}
|
||||
|
||||
const char HASS_DISCOVER_DEVICE_INFO[] PROGMEM =
|
||||
"%s,\"uniq_id\":\"%s\","
|
||||
"\"device\":{\"identifiers\":[\"%06X\"],"
|
||||
"\"name\":\"%s\","
|
||||
|
@ -244,66 +196,52 @@ void HAssAnnounceRelayLight(void)
|
|||
GetTopic_P(state_topic, TELE, mqtt_topic, D_RSLT_STATE);
|
||||
GetTopic_P(availability_topic, TELE, mqtt_topic, S_LWT);
|
||||
FindPrefix(command_topic, state_topic, prefix);
|
||||
if (Settings.flag3.hass_short_discovery_msg) {
|
||||
Shorten(&command_topic, prefix);
|
||||
Shorten(&state_topic, prefix);
|
||||
Shorten(&availability_topic, prefix);
|
||||
}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), Settings.flag3.hass_short_discovery_msg?HASS_DISCOVER_RELAY_SHORT:HASS_DISCOVER_RELAY,
|
||||
Shorten(&command_topic, prefix);
|
||||
Shorten(&state_topic, prefix);
|
||||
Shorten(&availability_topic, prefix);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_RELAY,
|
||||
name, command_topic, state_topic, value_template, Settings.state_text[0], Settings.state_text[1], availability_topic);
|
||||
|
||||
if (is_light) {
|
||||
char *brightness_command_topic = stemp1;
|
||||
|
||||
GetTopic_P(brightness_command_topic, CMND, mqtt_topic, D_CMND_DIMMER);
|
||||
if (Settings.flag3.hass_short_discovery_msg)
|
||||
Shorten(&brightness_command_topic, prefix);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), Settings.flag3.hass_short_discovery_msg?HASS_DISCOVER_LIGHT_DIMMER_SHORT:HASS_DISCOVER_LIGHT_DIMMER,
|
||||
mqtt_data, brightness_command_topic, state_topic);
|
||||
Shorten(&brightness_command_topic, prefix);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_LIGHT_DIMMER, mqtt_data, brightness_command_topic, state_topic);
|
||||
|
||||
if (light_subtype >= LST_RGB) {
|
||||
char *rgb_command_topic = stemp1;
|
||||
|
||||
GetTopic_P(rgb_command_topic, CMND, mqtt_topic, D_CMND_COLOR);
|
||||
if (Settings.flag3.hass_short_discovery_msg)
|
||||
Shorten(&rgb_command_topic, prefix);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), Settings.flag3.hass_short_discovery_msg?HASS_DISCOVER_LIGHT_COLOR_SHORT:HASS_DISCOVER_LIGHT_COLOR,
|
||||
mqtt_data, rgb_command_topic, state_topic);
|
||||
Shorten(&rgb_command_topic, prefix);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_LIGHT_COLOR, mqtt_data, rgb_command_topic, state_topic);
|
||||
|
||||
char *effect_command_topic = stemp1;
|
||||
GetTopic_P(effect_command_topic, CMND, mqtt_topic, D_CMND_SCHEME);
|
||||
if (Settings.flag3.hass_short_discovery_msg) {
|
||||
Shorten(&effect_command_topic, prefix);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_LIGHT_SCHEME_SHORT, mqtt_data, effect_command_topic, state_topic);
|
||||
}
|
||||
Shorten(&effect_command_topic, prefix);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_LIGHT_SCHEME, mqtt_data, effect_command_topic, state_topic);
|
||||
|
||||
}
|
||||
if (LST_RGBW == light_subtype) {
|
||||
char *white_temp_command_topic = stemp1;
|
||||
|
||||
GetTopic_P(white_temp_command_topic, CMND, mqtt_topic, D_CMND_WHITE);
|
||||
if (Settings.flag3.hass_short_discovery_msg)
|
||||
Shorten(&white_temp_command_topic, prefix);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), Settings.flag3.hass_short_discovery_msg?HASS_DISCOVER_LIGHT_WHITE_SHORT:HASS_DISCOVER_LIGHT_WHITE,
|
||||
mqtt_data, white_temp_command_topic, state_topic);
|
||||
Shorten(&white_temp_command_topic, prefix);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_LIGHT_WHITE, mqtt_data, white_temp_command_topic, state_topic);
|
||||
}
|
||||
if ((LST_COLDWARM == light_subtype) || (LST_RGBWC == light_subtype)) {
|
||||
char *color_temp_command_topic = stemp1;
|
||||
|
||||
GetTopic_P(color_temp_command_topic, CMND, mqtt_topic, D_CMND_COLORTEMPERATURE);
|
||||
if (Settings.flag3.hass_short_discovery_msg)
|
||||
Shorten(&color_temp_command_topic, prefix);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), Settings.flag3.hass_short_discovery_msg?HASS_DISCOVER_LIGHT_CT_SHORT:HASS_DISCOVER_LIGHT_CT,
|
||||
mqtt_data, color_temp_command_topic, state_topic);
|
||||
Shorten(&color_temp_command_topic, prefix);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_LIGHT_CT, mqtt_data, color_temp_command_topic, state_topic);
|
||||
}
|
||||
}
|
||||
if (Settings.flag3.hass_short_discovery_msg) {
|
||||
snprintf_P(stemp1, sizeof(stemp1), kModules[Settings.module].name);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_DEVICE_INFO_SHORT, mqtt_data,
|
||||
unique_id, ESP.getChipId(),
|
||||
Settings.friendlyname[0], stemp1, my_version, my_image, "Tasmota");
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_TOPIC_PREFIX, mqtt_data, prefix);
|
||||
}
|
||||
snprintf_P(stemp1, sizeof(stemp1), kModules[Settings.module].name);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_DEVICE_INFO, mqtt_data,
|
||||
unique_id, ESP.getChipId(),
|
||||
Settings.friendlyname[0], stemp1, my_version, my_image, "Tasmota");
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_TOPIC_PREFIX, mqtt_data, prefix);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s}"), mqtt_data);
|
||||
}
|
||||
MqttPublish(stopic, true);
|
||||
|
@ -342,26 +280,18 @@ void HAssAnnounceButtonSwitch(byte device, char* topic, byte present, byte key,
|
|||
GetTopic_P(state_topic, CMND, topic, value_template); // State of button is sent as CMND TOGGLE, state of switch is sent as ON/OFF
|
||||
GetTopic_P(availability_topic, TELE, mqtt_topic, S_LWT);
|
||||
FindPrefix(state_topic, availability_topic, prefix);
|
||||
if (Settings.flag3.hass_short_discovery_msg) {
|
||||
Shorten(&state_topic, prefix);
|
||||
Shorten(&availability_topic, prefix);
|
||||
}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), Settings.flag3.hass_short_discovery_msg?HASS_DISCOVER_BUTTON_SWITCH_SHORT:HASS_DISCOVER_BUTTON_SWITCH,
|
||||
Shorten(&state_topic, prefix);
|
||||
Shorten(&availability_topic, prefix);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_BUTTON_SWITCH,
|
||||
name, state_topic, Settings.state_text[toggle?2:1], availability_topic);
|
||||
if (toggle) snprintf_P(mqtt_data, sizeof(mqtt_data),
|
||||
Settings.flag3.hass_short_discovery_msg?HASS_DISCOVER_BUTTON_SWITCH_TOGGLE_SHORT:HASS_DISCOVER_BUTTON_SWITCH_TOGGLE,
|
||||
mqtt_data);
|
||||
if (!toggle) snprintf_P(mqtt_data, sizeof(mqtt_data),
|
||||
Settings.flag3.hass_short_discovery_msg?HASS_DISCOVER_BUTTON_SWITCH_ONOFF_SHORT:HASS_DISCOVER_BUTTON_SWITCH_ONOFF,
|
||||
mqtt_data, Settings.state_text[0]);
|
||||
if (toggle) snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_BUTTON_SWITCH_TOGGLE, mqtt_data);
|
||||
else snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_BUTTON_SWITCH_ONOFF, mqtt_data, Settings.state_text[0]);
|
||||
|
||||
if (Settings.flag3.hass_short_discovery_msg) {
|
||||
snprintf_P(stemp1, sizeof(stemp1), kModules[Settings.module].name);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_DEVICE_INFO_SHORT, mqtt_data,
|
||||
unique_id, ESP.getChipId(),
|
||||
Settings.friendlyname[0], stemp1, my_version, my_image, "Tasmota");
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_TOPIC_PREFIX, mqtt_data, prefix);
|
||||
}
|
||||
snprintf_P(stemp1, sizeof(stemp1), kModules[Settings.module].name);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_DEVICE_INFO, mqtt_data,
|
||||
unique_id, ESP.getChipId(),
|
||||
Settings.friendlyname[0], stemp1, my_version, my_image, "Tasmota");
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_TOPIC_PREFIX, mqtt_data, prefix);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s}"), mqtt_data);
|
||||
}
|
||||
MqttPublish(stopic, true);
|
||||
|
@ -452,29 +382,42 @@ void HAssAnnounceSensor(const char* sensorname, const char* subsensortype)
|
|||
GetTopic_P(state_topic, TELE, mqtt_topic, PSTR(D_RSLT_SENSOR));
|
||||
GetTopic_P(availability_topic, TELE, mqtt_topic, S_LWT);
|
||||
FindPrefix(state_topic, availability_topic, prefix);
|
||||
if (Settings.flag3.hass_short_discovery_msg) {
|
||||
Shorten(&state_topic, prefix);
|
||||
Shorten(&availability_topic, prefix);
|
||||
}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), Settings.flag3.hass_short_discovery_msg?HASS_DISCOVER_SENSOR_SHORT:HASS_DISCOVER_SENSOR,
|
||||
Shorten(&state_topic, prefix);
|
||||
Shorten(&availability_topic, prefix);
|
||||
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_SENSOR,
|
||||
name, state_topic, availability_topic);
|
||||
if (!strcmp_P(subsensortype, PSTR(D_JSON_TEMPERATURE))) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), Settings.flag3.hass_short_discovery_msg?HASS_DISCOVER_SENSOR_TEMP_SHORT:HASS_DISCOVER_SENSOR_TEMP,
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_SENSOR_TEMP,
|
||||
mqtt_data, TempUnit(), sensorname);
|
||||
} else if (!strcmp_P(subsensortype, PSTR(D_JSON_HUMIDITY))) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), Settings.flag3.hass_short_discovery_msg?HASS_DISCOVER_SENSOR_HUM_SHORT:HASS_DISCOVER_SENSOR_HUM,
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_SENSOR_HUM,
|
||||
mqtt_data, sensorname);
|
||||
} else {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), Settings.flag3.hass_short_discovery_msg?HASS_DISCOVER_SENSOR_ANY_SHORT:HASS_DISCOVER_SENSOR_ANY,
|
||||
} else if (!strcmp_P(subsensortype, PSTR(D_JSON_PRESSURE))) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_SENSOR_PRESS,
|
||||
mqtt_data, PressureUnit().c_str(), sensorname);
|
||||
} else if (!strcmp_P(subsensortype, PSTR(D_JSON_TOTAL)) || !strcmp_P(subsensortype, PSTR(D_JSON_TODAY)) || !strcmp_P(subsensortype, PSTR(D_JSON_YESTERDAY))){
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_SENSOR_KWH,
|
||||
mqtt_data, sensorname, subsensortype);
|
||||
} else if (!strcmp_P(subsensortype, PSTR(D_JSON_POWERUSAGE))){
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_SENSOR_WATT,
|
||||
mqtt_data, sensorname, subsensortype);
|
||||
} else if (!strcmp_P(subsensortype, PSTR(D_JSON_VOLTAGE))){
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_SENSOR_VOLTAGE,
|
||||
mqtt_data, sensorname, subsensortype);
|
||||
} else if (!strcmp_P(subsensortype, PSTR(D_JSON_CURRENT))){
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_SENSOR_AMPERE,
|
||||
mqtt_data, sensorname, subsensortype);
|
||||
}
|
||||
if (Settings.flag3.hass_short_discovery_msg) {
|
||||
snprintf_P(stemp1, sizeof(stemp1), kModules[Settings.module].name);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_DEVICE_INFO_SHORT, mqtt_data,
|
||||
unique_id, ESP.getChipId(),
|
||||
Settings.friendlyname[0], stemp1, my_version, my_image, "Tasmota");
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_TOPIC_PREFIX, mqtt_data, prefix);
|
||||
else {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_SENSOR_ANY,
|
||||
mqtt_data, sensorname, subsensortype);
|
||||
}
|
||||
snprintf_P(stemp1, sizeof(stemp1), kModules[Settings.module].name);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_DEVICE_INFO, mqtt_data,
|
||||
unique_id, ESP.getChipId(),
|
||||
Settings.friendlyname[0], stemp1, my_version, my_image, "Tasmota");
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HASS_DISCOVER_TOPIC_PREFIX, mqtt_data, prefix);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s}"), mqtt_data);
|
||||
}
|
||||
MqttPublish(stopic, true);
|
||||
|
|
|
@ -133,6 +133,12 @@ boolean TuyaSetPower(void)
|
|||
return status;
|
||||
}
|
||||
|
||||
boolean TuyaSetChannels(void)
|
||||
{
|
||||
LightSerialDuty(((uint8_t*)XdrvMailbox.data)[0]);
|
||||
return true;
|
||||
}
|
||||
|
||||
void LightSerialDuty(uint8_t duty)
|
||||
{
|
||||
if (duty > 0 && !tuya_ignore_dim && TuyaSerial) {
|
||||
|
@ -416,6 +422,9 @@ boolean Xdrv16(byte function)
|
|||
case FUNC_EVERY_SECOND:
|
||||
if(TuyaSerial && tuya_wifi_state!=WifiState()) { TuyaSetWifiLed(); }
|
||||
break;
|
||||
case FUNC_SET_CHANNELS:
|
||||
result = TuyaSetChannels();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
|
|
@ -40,6 +40,12 @@ int8_t armtronix_knobState[2]; // Dimmer state values.
|
|||
* Internal Functions
|
||||
\*********************************************************************************************/
|
||||
|
||||
boolean ArmtronixSetChannels(void)
|
||||
{
|
||||
LightSerial2Duty(((uint8_t*)XdrvMailbox.data)[0], ((uint8_t*)XdrvMailbox.data)[1]);
|
||||
return true;
|
||||
}
|
||||
|
||||
void LightSerial2Duty(uint8_t duty1, uint8_t duty2)
|
||||
{
|
||||
if (ArmtronixSerial && !armtronix_ignore_dim) {
|
||||
|
@ -186,6 +192,9 @@ boolean Xdrv18(byte function)
|
|||
}
|
||||
}
|
||||
break;
|
||||
case FUNC_SET_CHANNELS:
|
||||
result = ArmtronixSetChannels();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
|
|
@ -91,6 +91,12 @@ boolean PS16DZSetPower(void)
|
|||
return status;
|
||||
}
|
||||
|
||||
boolean PS16DZSetChannels(void)
|
||||
{
|
||||
PS16DZSerialDuty(((uint8_t*)XdrvMailbox.data)[0]);
|
||||
return true;
|
||||
}
|
||||
|
||||
void PS16DZSerialDuty(uint8_t duty)
|
||||
{
|
||||
if (duty > 0 && !ps16dz_ignore_dim && PS16DZSerial) {
|
||||
|
@ -236,6 +242,9 @@ boolean Xdrv19(byte function)
|
|||
case FUNC_SET_DEVICE_POWER:
|
||||
result = PS16DZSetPower();
|
||||
break;
|
||||
case FUNC_SET_CHANNELS:
|
||||
result = PS16DZSetChannels();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
|
|
@ -568,7 +568,7 @@ void HueLightStatus1(byte device, String *response)
|
|||
{
|
||||
float hue = 0;
|
||||
float sat = 0;
|
||||
float bri = 0;
|
||||
float bri = 254;
|
||||
uint16_t ct = 500;
|
||||
|
||||
if (light_type) {
|
||||
|
|
|
@ -93,12 +93,12 @@ const char HTTP_SNS_COUNTER[] PROGMEM =
|
|||
void CounterShow(boolean json)
|
||||
{
|
||||
char stemp[10];
|
||||
char counter[16];
|
||||
|
||||
byte dsxflg = 0;
|
||||
byte header = 0;
|
||||
for (byte i = 0; i < MAX_COUNTERS; i++) {
|
||||
if (pin[GPIO_CNTR1 +i] < 99) {
|
||||
char counter[33];
|
||||
if (bitRead(Settings.pulse_counter_type, i)) {
|
||||
dtostrfd((double)RtcSettings.pulse_counter[i] / 1000000, 6, counter);
|
||||
} else {
|
||||
|
|
|
@ -113,12 +113,12 @@ const char HTTP_SNS_SCPLUS[] PROGMEM =
|
|||
void SonoffScShow(boolean json)
|
||||
{
|
||||
if (sc_value[0] > 0) {
|
||||
char temperature[10];
|
||||
char humidity[10];
|
||||
|
||||
float t = ConvertTemp(sc_value[1]);
|
||||
float h = sc_value[0];
|
||||
|
||||
char temperature[33];
|
||||
dtostrfd(t, Settings.flag2.temperature_resolution, temperature);
|
||||
char humidity[33];
|
||||
dtostrfd(h, Settings.flag2.humidity_resolution, humidity);
|
||||
|
||||
if (json) {
|
||||
|
|
|
@ -190,8 +190,7 @@ void Ds18b20EverySecond(void)
|
|||
void Ds18b20Show(boolean json)
|
||||
{
|
||||
if (ds18b20_valid) { // Check for valid temperature
|
||||
char temperature[10];
|
||||
|
||||
char temperature[33];
|
||||
dtostrfd(ds18b20_temperature, Settings.flag2.temperature_resolution, temperature);
|
||||
if(json) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), JSON_SNS_TEMP, mqtt_data, ds18b20_types, temperature);
|
||||
|
|
|
@ -424,12 +424,11 @@ void Ds18x20EverySecond(void)
|
|||
|
||||
void Ds18x20Show(boolean json)
|
||||
{
|
||||
char temperature[10];
|
||||
|
||||
for (uint8_t i = 0; i < ds18x20_sensors; i++) {
|
||||
uint8_t index = ds18x20_sensor[i].index;
|
||||
|
||||
if (ds18x20_sensor[index].valid) { // Check for valid temperature
|
||||
char temperature[33];
|
||||
dtostrfd(ds18x20_sensor[index].temperature, Settings.flag2.temperature_resolution, temperature);
|
||||
|
||||
Ds18x20Name(i);
|
||||
|
|
|
@ -170,7 +170,6 @@ void Ds18x20Type(uint8_t sensor)
|
|||
|
||||
void Ds18x20Show(boolean json)
|
||||
{
|
||||
char temperature[10];
|
||||
char stemp[10];
|
||||
float t;
|
||||
|
||||
|
@ -178,6 +177,7 @@ void Ds18x20Show(boolean json)
|
|||
for (byte i = 0; i < Ds18x20Sensors(); i++) {
|
||||
if (Ds18x20Read(i, t)) { // Check if read failed
|
||||
Ds18x20Type(i);
|
||||
char temperature[33];
|
||||
dtostrfd(t, Settings.flag2.temperature_resolution, temperature);
|
||||
|
||||
if (json) {
|
||||
|
|
|
@ -207,11 +207,10 @@ void DhtEverySecond(void)
|
|||
|
||||
void DhtShow(boolean json)
|
||||
{
|
||||
char temperature[10];
|
||||
char humidity[10];
|
||||
|
||||
for (byte i = 0; i < dht_sensors; i++) {
|
||||
char temperature[33];
|
||||
dtostrfd(Dht[i].t, Settings.flag2.temperature_resolution, temperature);
|
||||
char humidity[33];
|
||||
dtostrfd(Dht[i].h, Settings.flag2.humidity_resolution, humidity);
|
||||
|
||||
if (json) {
|
||||
|
|
|
@ -188,10 +188,9 @@ void ShtEverySecond(void)
|
|||
void ShtShow(boolean json)
|
||||
{
|
||||
if (sht_valid) {
|
||||
char temperature[10];
|
||||
char humidity[10];
|
||||
|
||||
char temperature[33];
|
||||
dtostrfd(sht_temperature, Settings.flag2.temperature_resolution, temperature);
|
||||
char humidity[33];
|
||||
dtostrfd(sht_humidity, Settings.flag2.humidity_resolution, humidity);
|
||||
|
||||
if (json) {
|
||||
|
|
|
@ -249,10 +249,9 @@ void HtuEverySecond(void)
|
|||
void HtuShow(boolean json)
|
||||
{
|
||||
if (htu_valid) {
|
||||
char temperature[10];
|
||||
char humidity[10];
|
||||
|
||||
char temperature[33];
|
||||
dtostrfd(htu_temperature, Settings.flag2.temperature_resolution, temperature);
|
||||
char humidity[33];
|
||||
dtostrfd(htu_humidity, Settings.flag2.humidity_resolution, humidity);
|
||||
|
||||
if (json) {
|
||||
|
|
|
@ -42,23 +42,26 @@
|
|||
#define BMP_MAX_SENSORS 2
|
||||
|
||||
const char kBmpTypes[] PROGMEM = "BMP180|BMP280|BME280|BME680";
|
||||
|
||||
typedef struct {
|
||||
uint8_t bmp_address; // I2C bus address
|
||||
char bmp_name[7]; // Sensor name - "BMPXXX"
|
||||
uint8_t bmp_type;
|
||||
uint8_t bmp_model;
|
||||
#ifdef USE_BME680
|
||||
uint8_t bme680_state;
|
||||
float bmp_gas_resistance;
|
||||
#endif // USE_BME680
|
||||
float bmp_temperature;
|
||||
float bmp_pressure;
|
||||
float bmp_humidity;
|
||||
} bmp_sensors_t;
|
||||
|
||||
uint8_t bmp_addresses[] = { BMP_ADDR1, BMP_ADDR2 };
|
||||
uint8_t bmp_count = 0;
|
||||
uint8_t bmp_once = 1;
|
||||
|
||||
struct BMPSTRUCT {
|
||||
uint8_t bmp_address; // I2C bus address
|
||||
char bmp_name[7]; // Sensor name - "BMPXXX"
|
||||
uint8_t bmp_type = 0;
|
||||
uint8_t bmp_model = 0;
|
||||
#ifdef USE_BME680
|
||||
uint8_t bme680_state = 0;
|
||||
float bmp_gas_resistance = 0.0;
|
||||
#endif // USE_BME680
|
||||
float bmp_temperature = 0.0;
|
||||
float bmp_pressure = 0.0;
|
||||
float bmp_humidity = 0.0;
|
||||
} bmp_sensors[BMP_MAX_SENSORS];
|
||||
bmp_sensors_t *bmp_sensors = NULL;
|
||||
|
||||
/*********************************************************************************************\
|
||||
* BMP085 and BME180
|
||||
|
@ -83,7 +86,7 @@ struct BMPSTRUCT {
|
|||
|
||||
#define BMP180_OSS 3
|
||||
|
||||
struct BMP180CALIBDATA {
|
||||
typedef struct {
|
||||
int16_t cal_ac1;
|
||||
int16_t cal_ac2;
|
||||
int16_t cal_ac3;
|
||||
|
@ -94,10 +97,17 @@ struct BMP180CALIBDATA {
|
|||
uint16_t cal_ac4;
|
||||
uint16_t cal_ac5;
|
||||
uint16_t cal_ac6;
|
||||
} bmp180_cal_data[BMP_MAX_SENSORS];
|
||||
} bmp180_cal_data_t;
|
||||
|
||||
bmp180_cal_data_t *bmp180_cal_data = NULL;
|
||||
|
||||
boolean Bmp180Calibration(uint8_t bmp_idx)
|
||||
{
|
||||
if (!bmp180_cal_data) {
|
||||
bmp180_cal_data = (bmp180_cal_data_t*)malloc(BMP_MAX_SENSORS * sizeof(bmp180_cal_data_t));
|
||||
}
|
||||
if (!bmp180_cal_data) { return false; }
|
||||
|
||||
bmp180_cal_data[bmp_idx].cal_ac1 = I2cRead16(bmp_sensors[bmp_idx].bmp_address, BMP180_AC1);
|
||||
bmp180_cal_data[bmp_idx].cal_ac2 = I2cRead16(bmp_sensors[bmp_idx].bmp_address, BMP180_AC2);
|
||||
bmp180_cal_data[bmp_idx].cal_ac3 = I2cRead16(bmp_sensors[bmp_idx].bmp_address, BMP180_AC3);
|
||||
|
@ -140,6 +150,8 @@ boolean Bmp180Calibration(uint8_t bmp_idx)
|
|||
|
||||
void Bmp180Read(uint8_t bmp_idx)
|
||||
{
|
||||
if (!bmp180_cal_data) { return; }
|
||||
|
||||
I2cWrite8(bmp_sensors[bmp_idx].bmp_address, BMP180_REG_CONTROL, BMP180_TEMPERATURE);
|
||||
delay(5); // 5ms conversion time
|
||||
int ut = I2cRead16(bmp_sensors[bmp_idx].bmp_address, BMP180_REG_RESULT);
|
||||
|
@ -211,8 +223,7 @@ void Bmp180Read(uint8_t bmp_idx)
|
|||
#define BME280_REGISTER_DIG_H5 0xE5
|
||||
#define BME280_REGISTER_DIG_H6 0xE7
|
||||
|
||||
struct BME280CALIBDATA
|
||||
{
|
||||
typedef struct {
|
||||
uint16_t dig_T1;
|
||||
int16_t dig_T2;
|
||||
int16_t dig_T3;
|
||||
|
@ -231,12 +242,19 @@ struct BME280CALIBDATA
|
|||
uint8_t dig_H1;
|
||||
uint8_t dig_H3;
|
||||
int8_t dig_H6;
|
||||
} Bme280CalibrationData[BMP_MAX_SENSORS];
|
||||
} Bme280CalibrationData_t;
|
||||
|
||||
Bme280CalibrationData_t *Bme280CalibrationData = NULL;
|
||||
|
||||
boolean Bmx280Calibrate(uint8_t bmp_idx)
|
||||
{
|
||||
// if (I2cRead8(bmp_address, BMP_REGISTER_CHIPID) != BME280_CHIPID) return false;
|
||||
|
||||
if (!Bme280CalibrationData) {
|
||||
Bme280CalibrationData = (Bme280CalibrationData_t*)malloc(BMP_MAX_SENSORS * sizeof(Bme280CalibrationData_t));
|
||||
}
|
||||
if (!Bme280CalibrationData) { return false; }
|
||||
|
||||
Bme280CalibrationData[bmp_idx].dig_T1 = I2cRead16LE(bmp_sensors[bmp_idx].bmp_address, BME280_REGISTER_DIG_T1);
|
||||
Bme280CalibrationData[bmp_idx].dig_T2 = I2cReadS16_LE(bmp_sensors[bmp_idx].bmp_address, BME280_REGISTER_DIG_T2);
|
||||
Bme280CalibrationData[bmp_idx].dig_T3 = I2cReadS16_LE(bmp_sensors[bmp_idx].bmp_address, BME280_REGISTER_DIG_T3);
|
||||
|
@ -270,6 +288,8 @@ boolean Bmx280Calibrate(uint8_t bmp_idx)
|
|||
|
||||
void Bme280Read(uint8_t bmp_idx)
|
||||
{
|
||||
if (!Bme280CalibrationData) { return; }
|
||||
|
||||
int32_t adc_T = I2cRead24(bmp_sensors[bmp_idx].bmp_address, BME280_REGISTER_TEMPDATA);
|
||||
adc_T >>= 4;
|
||||
|
||||
|
@ -324,7 +344,7 @@ void Bme280Read(uint8_t bmp_idx)
|
|||
|
||||
#include <bme680.h>
|
||||
|
||||
struct bme680_dev gas_sensor[BMP_MAX_SENSORS];
|
||||
struct bme680_dev *gas_sensor = NULL;
|
||||
|
||||
static void BmeDelayMs(uint32_t ms)
|
||||
{
|
||||
|
@ -333,6 +353,11 @@ static void BmeDelayMs(uint32_t ms)
|
|||
|
||||
boolean Bme680Init(uint8_t bmp_idx)
|
||||
{
|
||||
if (!gas_sensor) {
|
||||
gas_sensor = (bme680_dev*)malloc(BMP_MAX_SENSORS * sizeof(bme680_dev));
|
||||
}
|
||||
if (!gas_sensor) { return false; }
|
||||
|
||||
gas_sensor[bmp_idx].dev_id = bmp_sensors[bmp_idx].bmp_address;
|
||||
gas_sensor[bmp_idx].intf = BME680_I2C_INTF;
|
||||
gas_sensor[bmp_idx].read = &I2cReadBuffer;
|
||||
|
@ -377,6 +402,8 @@ boolean Bme680Init(uint8_t bmp_idx)
|
|||
|
||||
void Bme680Read(uint8_t bmp_idx)
|
||||
{
|
||||
if (!gas_sensor) { return; }
|
||||
|
||||
int8_t rslt = BME680_OK;
|
||||
|
||||
if (BME680_CHIPID == bmp_sensors[bmp_idx].bmp_type) {
|
||||
|
@ -421,6 +448,13 @@ void BmpDetect(void)
|
|||
{
|
||||
if (bmp_count) return;
|
||||
|
||||
int bmp_sensor_size = BMP_MAX_SENSORS * sizeof(bmp_sensors_t);
|
||||
if (!bmp_sensors) {
|
||||
bmp_sensors = (bmp_sensors_t*)malloc(bmp_sensor_size);
|
||||
}
|
||||
if (!bmp_sensors) { return; }
|
||||
memset(bmp_sensors, 0, bmp_sensor_size); // Init defaults to 0
|
||||
|
||||
for (byte i = 0; i < BMP_MAX_SENSORS; i++) {
|
||||
uint8_t bmp_type = I2cRead8(bmp_addresses[i], BMP_REGISTER_CHIPID);
|
||||
if (bmp_type) {
|
||||
|
@ -458,6 +492,8 @@ void BmpDetect(void)
|
|||
|
||||
void BmpRead(void)
|
||||
{
|
||||
if (!bmp_sensors) { return; }
|
||||
|
||||
for (byte bmp_idx = 0; bmp_idx < bmp_count; bmp_idx++) {
|
||||
switch (bmp_sensors[bmp_idx].bmp_type) {
|
||||
case BMP180_CHIPID:
|
||||
|
@ -491,15 +527,11 @@ void BmpEverySecond(void)
|
|||
|
||||
void BmpShow(boolean json)
|
||||
{
|
||||
if (!bmp_sensors) { return; }
|
||||
|
||||
for (byte bmp_idx = 0; bmp_idx < bmp_count; bmp_idx++) {
|
||||
if (bmp_sensors[bmp_idx].bmp_type) {
|
||||
float bmp_sealevel = 0.0;
|
||||
char temperature[10];
|
||||
char pressure[10];
|
||||
char sea_pressure[10];
|
||||
char humidity[10];
|
||||
char name[10];
|
||||
|
||||
if (bmp_sensors[bmp_idx].bmp_pressure != 0.0) {
|
||||
bmp_sealevel = (bmp_sensors[bmp_idx].bmp_pressure / FastPrecisePow(1.0 - ((float)Settings.altitude / 44330.0), 5.255)) - 21.6;
|
||||
bmp_sealevel = ConvertPressure(bmp_sealevel);
|
||||
|
@ -507,17 +539,22 @@ void BmpShow(boolean json)
|
|||
float bmp_temperature = ConvertTemp(bmp_sensors[bmp_idx].bmp_temperature);
|
||||
float bmp_pressure = ConvertPressure(bmp_sensors[bmp_idx].bmp_pressure);
|
||||
|
||||
char name[10];
|
||||
snprintf(name, sizeof(name), bmp_sensors[bmp_idx].bmp_name);
|
||||
if (bmp_count > 1) {
|
||||
snprintf_P(name, sizeof(name), PSTR("%s-%02X"), name, bmp_sensors[bmp_idx].bmp_address); // BMXXXX-XX
|
||||
}
|
||||
|
||||
char temperature[33];
|
||||
dtostrfd(bmp_temperature, Settings.flag2.temperature_resolution, temperature);
|
||||
char pressure[33];
|
||||
dtostrfd(bmp_pressure, Settings.flag2.pressure_resolution, pressure);
|
||||
char sea_pressure[33];
|
||||
dtostrfd(bmp_sealevel, Settings.flag2.pressure_resolution, sea_pressure);
|
||||
char humidity[33];
|
||||
dtostrfd(bmp_sensors[bmp_idx].bmp_humidity, Settings.flag2.humidity_resolution, humidity);
|
||||
#ifdef USE_BME680
|
||||
char gas_resistance[10];
|
||||
char gas_resistance[33];
|
||||
dtostrfd(bmp_sensors[bmp_idx].bmp_gas_resistance, 2, gas_resistance);
|
||||
#endif // USE_BME680
|
||||
|
||||
|
@ -530,17 +567,14 @@ void BmpShow(boolean json)
|
|||
char json_gas[40];
|
||||
snprintf_P(json_gas, sizeof(json_gas), PSTR(",\"" D_JSON_GAS "\":%s"), gas_resistance);
|
||||
|
||||
snprintf_P(mqtt_data,
|
||||
sizeof(mqtt_data),
|
||||
PSTR("%s,\"%s\":{\"" D_JSON_TEMPERATURE "\":%s%s,\"" D_JSON_PRESSURE "\":%s%s%s}"),
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"%s\":{\"" D_JSON_TEMPERATURE "\":%s%s,\"" D_JSON_PRESSURE "\":%s%s%s}"),
|
||||
mqtt_data,
|
||||
name,
|
||||
temperature,
|
||||
(bmp_sensors[bmp_idx].bmp_model >= 2) ? json_humidity : "",
|
||||
pressure,
|
||||
(Settings.altitude != 0) ? json_sealevel : "",
|
||||
(bmp_sensors[bmp_idx].bmp_model >= 3) ? json_gas : ""
|
||||
);
|
||||
(bmp_sensors[bmp_idx].bmp_model >= 3) ? json_gas : "");
|
||||
#else
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"%s\":{\"" D_JSON_TEMPERATURE "\":%s%s,\"" D_JSON_PRESSURE "\":%s%s}"),
|
||||
mqtt_data, name, temperature, (bmp_sensors[bmp_idx].bmp_model >= 2) ? json_humidity : "", pressure, (Settings.altitude != 0) ? json_sealevel : "");
|
||||
|
|
|
@ -273,12 +273,12 @@ double Veml6070UvPower(double uvrisk)
|
|||
void Veml6070Show(boolean json)
|
||||
{
|
||||
if (veml6070_type) {
|
||||
char str_uvlevel[6]; // e.g. 99999 inc = UVLevel
|
||||
char str_uvrisk[6]; // e.g. 25.99 text = UvIndex
|
||||
char str_uvpower[6]; // e.g. 0.399 W/m² = UvPower
|
||||
// convert double values to string
|
||||
char str_uvlevel[33]; // e.g. 99999 inc = UVLevel
|
||||
dtostrfd((double)uvlevel, 0, str_uvlevel);
|
||||
char str_uvrisk[33]; // e.g. 25.99 text = UvIndex
|
||||
dtostrfd(uvrisk, 2, str_uvrisk);
|
||||
char str_uvpower[33]; // e.g. 0.399 W/m² = UvPower
|
||||
dtostrfd(uvpower, 3, str_uvpower);
|
||||
if (json) {
|
||||
#ifdef USE_VEML6070_SHOW_RAW
|
||||
|
|
|
@ -232,13 +232,12 @@ const char HTTP_SNS_INA219_DATA[] PROGMEM = "%s"
|
|||
void Ina219Show(boolean json)
|
||||
{
|
||||
if (ina219_valid) {
|
||||
char voltage[10];
|
||||
char current[10];
|
||||
char power[10];
|
||||
|
||||
float fpower = ina219_voltage * ina219_current;
|
||||
char voltage[33];
|
||||
dtostrfd(ina219_voltage, Settings.flag2.voltage_resolution, voltage);
|
||||
char power[33];
|
||||
dtostrfd(fpower, Settings.flag2.wattage_resolution, power);
|
||||
char current[33];
|
||||
dtostrfd(ina219_current, Settings.flag2.current_resolution, current);
|
||||
|
||||
if (json) {
|
||||
|
|
|
@ -98,15 +98,15 @@ void Sht3xShow(boolean json)
|
|||
if (sht3x_count) {
|
||||
float t;
|
||||
float h;
|
||||
char temperature[10];
|
||||
char humidity[10];
|
||||
char types[11];
|
||||
for (byte i = 0; i < sht3x_count; i++) {
|
||||
if (Sht3xRead(t, h, sht3x_sensors[i].address)) {
|
||||
|
||||
if (0 == i) { SetGlobalValues(t, h); }
|
||||
|
||||
char temperature[33];
|
||||
dtostrfd(t, Settings.flag2.temperature_resolution, temperature);
|
||||
char humidity[33];
|
||||
dtostrfd(h, Settings.flag2.humidity_resolution, humidity);
|
||||
snprintf_P(types, sizeof(types), PSTR("%s-0x%02X"), sht3x_sensors[i].types, sht3x_sensors[i].address); // "SHT3X-0xXX"
|
||||
|
||||
|
|
|
@ -322,7 +322,7 @@ void MhzInit(void)
|
|||
|
||||
void MhzShow(boolean json)
|
||||
{
|
||||
char temperature[10];
|
||||
char temperature[33];
|
||||
dtostrfd(mhz_temperature, Settings.flag2.temperature_resolution, temperature);
|
||||
GetTextIndexed(mhz_types, sizeof(mhz_types), mhz_type -1, kMhzTypes);
|
||||
|
||||
|
|
|
@ -147,9 +147,9 @@ void SenseairInit(void)
|
|||
|
||||
void SenseairShow(boolean json)
|
||||
{
|
||||
char temperature[10];
|
||||
char humidity[10];
|
||||
char temperature[33];
|
||||
dtostrfd(senseair_temperature, Settings.flag2.temperature_resolution, temperature);
|
||||
char humidity[33];
|
||||
dtostrfd(senseair_humidity, Settings.flag2.temperature_resolution, humidity);
|
||||
GetTextIndexed(senseair_types, sizeof(senseair_types), senseair_type -1, kSenseairTypes);
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ const char HTTP_MGS_GAS[] PROGMEM = "%s{s}MGS %s{m}%s " D_UNIT_PARTS_PER_MILLION
|
|||
|
||||
void MGSShow(boolean json)
|
||||
{
|
||||
char buffer[25];
|
||||
char buffer[33];
|
||||
if (json) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"MGS\":{\"NH3\":%s"), mqtt_data, measure_gas(NH3, buffer));
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"CO\":%s"), mqtt_data, measure_gas(CO, buffer));
|
||||
|
|
|
@ -189,11 +189,11 @@ const char HTTP_SDS0X1_SNS[] PROGMEM = "%s"
|
|||
void NovaSdsShow(boolean json)
|
||||
{
|
||||
if (novasds_valid) {
|
||||
char pm10[10];
|
||||
char pm2_5[10];
|
||||
float pm10f = (float)(novasds_data.pm100) / 10.0f;
|
||||
float pm2_5f = (float)(novasds_data.pm25) / 10.0f;
|
||||
char pm10[33];
|
||||
dtostrfd(pm10f, 1, pm10);
|
||||
char pm2_5[33];
|
||||
dtostrfd(pm2_5f, 1, pm2_5);
|
||||
if (json) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"SDS0X1\":{\"PM2.5\":%s,\"PM10\":%s}"), mqtt_data, pm2_5, pm10);
|
||||
|
|
|
@ -51,8 +51,7 @@ void Sr04Show(boolean json)
|
|||
distance = (real64_t)(sonar->ping_median(5))/ US_ROUNDTRIP_CM;
|
||||
|
||||
if (distance != 0) { // Check if read failed
|
||||
char distance_chr[10];
|
||||
|
||||
char distance_chr[33];
|
||||
dtostrfd(distance, 3, distance_chr);
|
||||
|
||||
if(json) {
|
||||
|
|
|
@ -203,28 +203,28 @@ void SDM120250ms(void) // Every 250 mSec
|
|||
#ifdef USE_SDM220
|
||||
case 8:
|
||||
sdm120_phase_angle = value;
|
||||
break;
|
||||
|
||||
break;
|
||||
|
||||
case 9:
|
||||
sdm120_import_active = value;
|
||||
break;
|
||||
break;
|
||||
|
||||
case 10:
|
||||
sdm120_export_active = value;
|
||||
break;
|
||||
break;
|
||||
|
||||
case 11:
|
||||
sdm120_import_reactive = value;
|
||||
break;
|
||||
break;
|
||||
|
||||
case 12:
|
||||
sdm120_export_reactive = value;
|
||||
break;
|
||||
break;
|
||||
|
||||
case 13:
|
||||
sdm120_total_reactive = value;
|
||||
break;
|
||||
#endif // USE_SDM220
|
||||
break;
|
||||
#endif // USE_SDM220
|
||||
} // end switch
|
||||
|
||||
sdm120_read_state++;
|
||||
|
@ -283,35 +283,34 @@ const char HTTP_SNS_SDM120_DATA[] PROGMEM = "%s"
|
|||
|
||||
void SDM120Show(boolean json)
|
||||
{
|
||||
char voltage[10];
|
||||
char current[10];
|
||||
char active_power[10];
|
||||
char apparent_power[10];
|
||||
char reactive_power[10];
|
||||
char power_factor[10];
|
||||
char frequency[10];
|
||||
char energy_total[10];
|
||||
char phase_angle[10];
|
||||
char import_active[10];
|
||||
char export_active[10];
|
||||
char import_reactive[10];
|
||||
char export_reactive[10];
|
||||
char total_reactive[10];
|
||||
|
||||
char voltage[33];
|
||||
dtostrfd(sdm120_voltage, Settings.flag2.voltage_resolution, voltage);
|
||||
char current[33];
|
||||
dtostrfd(sdm120_current, Settings.flag2.current_resolution, current);
|
||||
char active_power[33];
|
||||
dtostrfd(sdm120_active_power, Settings.flag2.wattage_resolution, active_power);
|
||||
char apparent_power[33];
|
||||
dtostrfd(sdm120_apparent_power, Settings.flag2.wattage_resolution, apparent_power);
|
||||
char reactive_power[33];
|
||||
dtostrfd(sdm120_reactive_power, Settings.flag2.wattage_resolution, reactive_power);
|
||||
char power_factor[33];
|
||||
dtostrfd(sdm120_power_factor, 2, power_factor);
|
||||
char frequency[33];
|
||||
dtostrfd(sdm120_frequency, Settings.flag2.frequency_resolution, frequency);
|
||||
char energy_total[33];
|
||||
dtostrfd(sdm120_energy_total, Settings.flag2.energy_resolution, energy_total);
|
||||
#ifdef USE_SDM220
|
||||
char phase_angle[33];
|
||||
dtostrfd(sdm120_phase_angle, 2, phase_angle);
|
||||
char import_active[33];
|
||||
dtostrfd(sdm120_import_active, Settings.flag2.wattage_resolution, import_active);
|
||||
char export_active[33];
|
||||
dtostrfd(sdm120_export_active, Settings.flag2.wattage_resolution, export_active);
|
||||
char import_reactive[33];
|
||||
dtostrfd(sdm120_import_reactive,Settings.flag2.wattage_resolution, import_reactive);
|
||||
char export_reactive[33];
|
||||
dtostrfd(sdm120_export_reactive,Settings.flag2.wattage_resolution, export_reactive);
|
||||
char total_reactive[33];
|
||||
dtostrfd(sdm120_total_reactive, Settings.flag2.wattage_resolution, total_reactive);
|
||||
#endif // USE_SDM220
|
||||
if (json) {
|
||||
|
|
|
@ -269,38 +269,37 @@ const char HTTP_SNS_SDM630_DATA[] PROGMEM = "%s"
|
|||
|
||||
void SDM630Show(boolean json)
|
||||
{
|
||||
char voltage_l1[10];
|
||||
char voltage_l2[10];
|
||||
char voltage_l3[10];
|
||||
char current_l1[10];
|
||||
char current_l2[10];
|
||||
char current_l3[10];
|
||||
char active_power_l1[10];
|
||||
char active_power_l2[10];
|
||||
char active_power_l3[10];
|
||||
char reactive_power_l1[10];
|
||||
char reactive_power_l2[10];
|
||||
char reactive_power_l3[10];
|
||||
char power_factor_l1[10];
|
||||
char power_factor_l2[10];
|
||||
char power_factor_l3[10];
|
||||
char energy_total[10];
|
||||
|
||||
char voltage_l1[33];
|
||||
dtostrfd(sdm630_voltage[0], Settings.flag2.voltage_resolution, voltage_l1);
|
||||
char voltage_l2[33];
|
||||
dtostrfd(sdm630_voltage[1], Settings.flag2.voltage_resolution, voltage_l2);
|
||||
char voltage_l3[33];
|
||||
dtostrfd(sdm630_voltage[2], Settings.flag2.voltage_resolution, voltage_l3);
|
||||
char current_l1[33];
|
||||
dtostrfd(sdm630_current[0], Settings.flag2.current_resolution, current_l1);
|
||||
char current_l2[33];
|
||||
dtostrfd(sdm630_current[1], Settings.flag2.current_resolution, current_l2);
|
||||
char current_l3[33];
|
||||
dtostrfd(sdm630_current[2], Settings.flag2.current_resolution, current_l3);
|
||||
char active_power_l1[33];
|
||||
dtostrfd(sdm630_active_power[0], Settings.flag2.wattage_resolution, active_power_l1);
|
||||
char active_power_l2[33];
|
||||
dtostrfd(sdm630_active_power[1], Settings.flag2.wattage_resolution, active_power_l2);
|
||||
char active_power_l3[33];
|
||||
dtostrfd(sdm630_active_power[2], Settings.flag2.wattage_resolution, active_power_l3);
|
||||
char reactive_power_l1[33];
|
||||
dtostrfd(sdm630_reactive_power[0], Settings.flag2.wattage_resolution, reactive_power_l1);
|
||||
char reactive_power_l2[33];
|
||||
dtostrfd(sdm630_reactive_power[1], Settings.flag2.wattage_resolution, reactive_power_l2);
|
||||
char reactive_power_l3[33];
|
||||
dtostrfd(sdm630_reactive_power[2], Settings.flag2.wattage_resolution, reactive_power_l3);
|
||||
char power_factor_l1[33];
|
||||
dtostrfd(sdm630_power_factor[0], 2, power_factor_l1);
|
||||
char power_factor_l2[33];
|
||||
dtostrfd(sdm630_power_factor[1], 2, power_factor_l2);
|
||||
char power_factor_l3[33];
|
||||
dtostrfd(sdm630_power_factor[2], 2, power_factor_l3);
|
||||
char energy_total[33];
|
||||
dtostrfd(sdm630_energy_total, Settings.flag2.energy_resolution, energy_total);
|
||||
|
||||
if (json) {
|
||||
|
|
|
@ -81,9 +81,8 @@ float LM75ADGetTemp(void) {
|
|||
void LM75ADShow(boolean json)
|
||||
{
|
||||
if (lm75ad_type) {
|
||||
char temperature[10];
|
||||
|
||||
float t = LM75ADGetTemp();
|
||||
char temperature[33];
|
||||
dtostrfd(t, Settings.flag2.temperature_resolution, temperature);
|
||||
|
||||
if (json) {
|
||||
|
|
|
@ -177,19 +177,19 @@ void MPU_6050Show(boolean json)
|
|||
MPU_6050PerformReading();
|
||||
|
||||
double tempConv = (MPU_6050_temperature / 340.0 + 35.53);
|
||||
char temperature[10];
|
||||
char temperature[33];
|
||||
dtostrfd(tempConv, Settings.flag2.temperature_resolution, temperature);
|
||||
char axis_ax[10];
|
||||
char axis_ax[33];
|
||||
dtostrfd(MPU_6050_ax, Settings.flag2.axis_resolution, axis_ax);
|
||||
char axis_ay[10];
|
||||
char axis_ay[33];
|
||||
dtostrfd(MPU_6050_ay, Settings.flag2.axis_resolution, axis_ay);
|
||||
char axis_az[10];
|
||||
char axis_az[33];
|
||||
dtostrfd(MPU_6050_az, Settings.flag2.axis_resolution, axis_az);
|
||||
char axis_gx[10];
|
||||
char axis_gx[33];
|
||||
dtostrfd(MPU_6050_gx, Settings.flag2.axis_resolution, axis_gx);
|
||||
char axis_gy[10];
|
||||
char axis_gy[33];
|
||||
dtostrfd(MPU_6050_gy, Settings.flag2.axis_resolution, axis_gy);
|
||||
char axis_gz[10];
|
||||
char axis_gz[33];
|
||||
dtostrfd(MPU_6050_gz, Settings.flag2.axis_resolution, axis_gz);
|
||||
|
||||
if (json) {
|
||||
|
|
|
@ -204,7 +204,7 @@ bool HxCommand(void)
|
|||
}
|
||||
|
||||
if (show_parms) {
|
||||
char item[10];
|
||||
char item[33];
|
||||
dtostrfd((float)Settings.weight_item / 10, 1, item);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"Sensor34\":{\"" D_JSON_WEIGHT_REF "\":%d,\"" D_JSON_WEIGHT_CAL "\":%d,\"" D_JSON_WEIGHT_MAX "\":%d,\"" D_JSON_WEIGHT_ITEM "\":%s}}"),
|
||||
Settings.weight_reference, Settings.weight_calibration, Settings.weight_max * 1000, item);
|
||||
|
@ -331,7 +331,6 @@ const char HTTP_HX711_CAL[] PROGMEM = "%s"
|
|||
|
||||
void HxShow(boolean json)
|
||||
{
|
||||
char weight_chr[10];
|
||||
char scount[30] = { 0 };
|
||||
|
||||
uint16_t count = 0;
|
||||
|
@ -345,6 +344,7 @@ void HxShow(boolean json)
|
|||
}
|
||||
weight = (float)hx_weight / 1000; // kilograms
|
||||
}
|
||||
char weight_chr[33];
|
||||
dtostrfd(weight, Settings.flag2.weight_resolution, weight_chr);
|
||||
|
||||
if (json) {
|
||||
|
@ -452,10 +452,9 @@ void HxSaveSettings(void)
|
|||
|
||||
void HxLogUpdates(void)
|
||||
{
|
||||
char weigth_ref_chr[10];
|
||||
char weigth_item_chr[10];
|
||||
|
||||
char weigth_ref_chr[33];
|
||||
dtostrfd((float)Settings.weight_reference / 1000, Settings.flag2.weight_resolution, weigth_ref_chr);
|
||||
char weigth_item_chr[33];
|
||||
dtostrfd((float)Settings.weight_item / 10000, 4, weigth_item_chr);
|
||||
|
||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_WIFI D_JSON_WEIGHT_REF " %s, " D_JSON_WEIGHT_ITEM " %s"),
|
||||
|
|
|
@ -172,14 +172,13 @@ void Tx20Init(void) {
|
|||
|
||||
void Tx20Show(boolean json)
|
||||
{
|
||||
char wind_speed_string[10];
|
||||
char wind_speed_max_string[10];
|
||||
char wind_speed_avg_string[10];
|
||||
char wind_direction_string[4];
|
||||
|
||||
char wind_speed_string[33];
|
||||
dtostrfd(tx20_wind_speed_kmh, 2, wind_speed_string);
|
||||
char wind_speed_max_string[33];
|
||||
dtostrfd(tx20_wind_speed_max, 2, wind_speed_max_string);
|
||||
char wind_speed_avg_string[33];
|
||||
dtostrfd(tx20_wind_speed_avg, 2, wind_speed_avg_string);
|
||||
char wind_direction_string[4];
|
||||
GetTextIndexed(wind_direction_string, sizeof(wind_direction_string), tx20_wind_direction, kTx20Directions);
|
||||
|
||||
if (json) {
|
||||
|
|
|
@ -19,10 +19,15 @@
|
|||
|
||||
#ifdef USE_RF_SENSOR
|
||||
/*********************************************************************************************\
|
||||
* RF receive based on work by Paul Tonkes (www.nodo-domotica.nl)
|
||||
* RF receiver based on work by Paul Tonkes (www.nodo-domotica.nl)
|
||||
*
|
||||
* Supported 434MHz receiver is Aurel RX-4M50RR30SF
|
||||
* Supported 868MHz receiver is Aurel RX-AM8SF
|
||||
*
|
||||
* Connect one of above receivers with a 330 Ohm resistor to any GPIO
|
||||
*
|
||||
* USE_THEO_V2 Add support for 434MHz Theo V2 sensors as documented on https://sidweb.nl
|
||||
* USE_ALECTO_V2 Add support for 868MHz Alecto V2 sensors like ACH2010, WS3000 and DKW2012
|
||||
* USE_ALECTO_V2 Add support for 868MHz Alecto V2 sensors like ACH2010, WS3000 and DKW2012 weather stations
|
||||
\*********************************************************************************************/
|
||||
|
||||
#define XSNS_37 37
|
||||
|
@ -41,24 +46,26 @@
|
|||
#define RFSNS_SIGNAL_TIMEOUT 10 // Pulse timings in mSec. Beyond this value indicate end of message
|
||||
#define RFSNS_SIGNAL_REPEAT_TIME 500 // (500) Tijd in mSec. waarbinnen hetzelfde event niet nogmaals via RF mag binnenkomen. Onderdrukt ongewenste herhalingen van signaal
|
||||
|
||||
struct RawSignalStruct // Variabelen geplaatst in struct zodat deze later eenvoudig kunnen worden weggeschreven naar SDCard
|
||||
typedef struct RawSignalStruct // Variabelen geplaatst in struct zodat deze later eenvoudig kunnen worden weggeschreven naar SDCard
|
||||
{
|
||||
int Number; // aantal bits, maal twee omdat iedere bit een mark en een space heeft.
|
||||
byte Repeats; // Aantal maal dat de pulsreeks verzonden moet worden bij een zendactie.
|
||||
byte Multiply; // Pulses[] * Multiply is de echte tijd van een puls in microseconden
|
||||
unsigned long Time; // Tijdstempel wanneer signaal is binnengekomen (millis())
|
||||
byte Pulses[RFSNS_RAW_BUFFER_SIZE+2]; // Tabel met de gemeten pulsen in microseconden gedeeld door rfsns_raw_signal.Multiply. Dit scheelt helft aan RAM geheugen.
|
||||
byte Pulses[RFSNS_RAW_BUFFER_SIZE+2]; // Tabel met de gemeten pulsen in microseconden gedeeld door rfsns_raw_signal->Multiply. Dit scheelt helft aan RAM geheugen.
|
||||
// Om legacy redenen zit de eerste puls in element 1. Element 0 wordt dus niet gebruikt.
|
||||
} rfsns_raw_signal = {0, 0, 0, 0L};
|
||||
} raw_signal_t;
|
||||
|
||||
raw_signal_t *rfsns_raw_signal = NULL;
|
||||
uint8_t rfsns_rf_bit;
|
||||
uint8_t rfsns_rf_port;
|
||||
uint8_t rfsns_any_sensor = 0;
|
||||
|
||||
/*********************************************************************************************\
|
||||
* Fetch signals from RF pin
|
||||
\*********************************************************************************************/
|
||||
|
||||
boolean RfSnsFetchSignal(byte DataPin, boolean StateSignal)
|
||||
bool RfSnsFetchSignal(byte DataPin, bool StateSignal)
|
||||
{
|
||||
uint8_t Fbit = digitalPinToBitMask(DataPin);
|
||||
uint8_t Fport = digitalPinToPort(DataPin);
|
||||
|
@ -73,15 +80,15 @@ boolean RfSnsFetchSignal(byte DataPin, boolean StateSignal)
|
|||
// rust tussen de signalen. Op deze wijze wordt het aantal zinloze captures teruggebracht.
|
||||
|
||||
unsigned long PulseLength = 0;
|
||||
if (rfsns_raw_signal.Time) { // Eerst een snelle check, want dit bevindt zich in een tijdkritisch deel...
|
||||
if (rfsns_raw_signal.Repeats && (rfsns_raw_signal.Time + RFSNS_SIGNAL_REPEAT_TIME) > millis()) { // ...want deze check duurt enkele micro's langer!
|
||||
if (rfsns_raw_signal->Time) { // Eerst een snelle check, want dit bevindt zich in een tijdkritisch deel...
|
||||
if (rfsns_raw_signal->Repeats && (rfsns_raw_signal->Time + RFSNS_SIGNAL_REPEAT_TIME) > millis()) { // ...want deze check duurt enkele micro's langer!
|
||||
PulseLength = micros() + RFSNS_SIGNAL_TIMEOUT *1000; // Wachttijd
|
||||
while (((rfsns_raw_signal.Time + RFSNS_SIGNAL_REPEAT_TIME) > millis()) && (PulseLength > micros())) {
|
||||
while (((rfsns_raw_signal->Time + RFSNS_SIGNAL_REPEAT_TIME) > millis()) && (PulseLength > micros())) {
|
||||
if ((*portInputRegister(Fport) & Fbit) == FstateMask) {
|
||||
PulseLength = micros() + RFSNS_SIGNAL_TIMEOUT *1000;
|
||||
}
|
||||
}
|
||||
while (((rfsns_raw_signal.Time + RFSNS_SIGNAL_REPEAT_TIME) > millis()) && ((*portInputRegister(Fport) & Fbit) != FstateMask));
|
||||
while (((rfsns_raw_signal->Time + RFSNS_SIGNAL_REPEAT_TIME) > millis()) && ((*portInputRegister(Fport) & Fbit) != FstateMask));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -89,7 +96,7 @@ boolean RfSnsFetchSignal(byte DataPin, boolean StateSignal)
|
|||
bool Ftoggle = false;
|
||||
unsigned long numloops = 0;
|
||||
unsigned long maxloops = RFSNS_SIGNAL_TIMEOUT * LoopsPerMilli;
|
||||
rfsns_raw_signal.Multiply = RFSNS_RAWSIGNAL_SAMPLE; // Ingestelde sample groote.
|
||||
rfsns_raw_signal->Multiply = RFSNS_RAWSIGNAL_SAMPLE; // Ingestelde sample groote.
|
||||
do { // lees de pulsen in microseconden en plaats deze in de tijdelijke buffer rfsns_raw_signal
|
||||
numloops = 0;
|
||||
while(((*portInputRegister(Fport) & Fbit) == FstateMask) ^ Ftoggle) { // while() loop *A*
|
||||
|
@ -98,19 +105,19 @@ boolean RfSnsFetchSignal(byte DataPin, boolean StateSignal)
|
|||
PulseLength = (numloops *1000) / LoopsPerMilli; // Bevat nu de pulslengte in microseconden
|
||||
if (PulseLength < RFSNS_MIN_PULSE_LENGTH) { break; }
|
||||
Ftoggle = !Ftoggle;
|
||||
rfsns_raw_signal.Pulses[RawCodeLength++] = PulseLength / (unsigned long)rfsns_raw_signal.Multiply; // sla op in de tabel rfsns_raw_signal
|
||||
rfsns_raw_signal->Pulses[RawCodeLength++] = PulseLength / (unsigned long)rfsns_raw_signal->Multiply; // sla op in de tabel rfsns_raw_signal
|
||||
}
|
||||
while(RawCodeLength < RFSNS_RAW_BUFFER_SIZE && numloops <= maxloops); // Zolang nog ruimte in de buffer, geen timeout en geen stoorpuls
|
||||
while(RawCodeLength < RFSNS_RAW_BUFFER_SIZE && numloops <= maxloops); // Zolang nog ruimte in de buffer, geen timeout en geen stoorpuls
|
||||
|
||||
if ((RawCodeLength >= RFSNS_MIN_RAW_PULSES) && (RawCodeLength < RFSNS_RAW_BUFFER_SIZE -1)) {
|
||||
rfsns_raw_signal.Repeats = 0; // Op dit moment weten we nog niet het type signaal, maar de variabele niet ongedefinieerd laten.
|
||||
rfsns_raw_signal.Number = RawCodeLength -1; // Aantal ontvangen tijden (pulsen *2)
|
||||
rfsns_raw_signal.Pulses[rfsns_raw_signal.Number] = 0; // Laatste element bevat de timeout. Niet relevant.
|
||||
rfsns_raw_signal.Time = millis();
|
||||
rfsns_raw_signal->Repeats = 0; // Op dit moment weten we nog niet het type signaal, maar de variabele niet ongedefinieerd laten.
|
||||
rfsns_raw_signal->Number = RawCodeLength -1; // Aantal ontvangen tijden (pulsen *2)
|
||||
rfsns_raw_signal->Pulses[rfsns_raw_signal->Number] = 0; // Laatste element bevat de timeout. Niet relevant.
|
||||
rfsns_raw_signal->Time = millis();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
rfsns_raw_signal.Number = 0;
|
||||
rfsns_raw_signal->Number = 0;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -151,8 +158,6 @@ typedef struct {
|
|||
uint8_t volt;
|
||||
} theo_v2_t1_t;
|
||||
|
||||
theo_v2_t1_t rfsns_theo_v2_t1[RFSNS_THEOV2_MAX_CHANNEL];
|
||||
|
||||
typedef struct {
|
||||
uint32_t time;
|
||||
int16_t temp;
|
||||
|
@ -160,11 +165,19 @@ typedef struct {
|
|||
uint8_t volt;
|
||||
} theo_v2_t2_t;
|
||||
|
||||
theo_v2_t2_t rfsns_theo_v2_t2[RFSNS_THEOV2_MAX_CHANNEL];
|
||||
theo_v2_t1_t *rfsns_theo_v2_t1 = NULL;
|
||||
theo_v2_t2_t *rfsns_theo_v2_t2 = NULL;
|
||||
|
||||
boolean RfSnsAnalyzeTheov2(void)
|
||||
void RfSnsInitTheoV2(void)
|
||||
{
|
||||
if (rfsns_raw_signal.Number != RFSNS_THEOV2_PULSECOUNT) return false;
|
||||
rfsns_theo_v2_t1 = (theo_v2_t1_t*)malloc(RFSNS_THEOV2_MAX_CHANNEL * sizeof(theo_v2_t1_t));
|
||||
rfsns_theo_v2_t2 = (theo_v2_t2_t*)malloc(RFSNS_THEOV2_MAX_CHANNEL * sizeof(theo_v2_t2_t));
|
||||
rfsns_any_sensor++;
|
||||
}
|
||||
|
||||
void RfSnsAnalyzeTheov2(void)
|
||||
{
|
||||
if (rfsns_raw_signal->Number != RFSNS_THEOV2_PULSECOUNT) { return; }
|
||||
|
||||
byte Checksum; // 8 bits Checksum over following bytes
|
||||
byte Channel; // 3 bits channel
|
||||
|
@ -174,7 +187,6 @@ boolean RfSnsAnalyzeTheov2(void)
|
|||
int Payload2; // 16 bits
|
||||
|
||||
byte b, bytes, bits, id;
|
||||
char log[128];
|
||||
|
||||
byte idx = 3;
|
||||
byte chksum = 0;
|
||||
|
@ -182,7 +194,7 @@ boolean RfSnsAnalyzeTheov2(void)
|
|||
b = 0;
|
||||
for (bits = 0; bits <= 7; bits++)
|
||||
{
|
||||
if ((rfsns_raw_signal.Pulses[idx] * rfsns_raw_signal.Multiply) > RFSNS_THEOV2_RF_PULSE_MID) {
|
||||
if ((rfsns_raw_signal->Pulses[idx] * rfsns_raw_signal->Multiply) > RFSNS_THEOV2_RF_PULSE_MID) {
|
||||
b |= 1 << bits;
|
||||
}
|
||||
idx += 2;
|
||||
|
@ -216,13 +228,13 @@ boolean RfSnsAnalyzeTheov2(void)
|
|||
}
|
||||
}
|
||||
|
||||
if (Checksum != chksum) { return false; }
|
||||
if (Channel == 0) { return false; }
|
||||
if (Checksum != chksum) { return; }
|
||||
if ((Channel == 0) || (Channel > RFSNS_THEOV2_MAX_CHANNEL)) { return; }
|
||||
Channel--;
|
||||
|
||||
rfsns_raw_signal.Repeats = 1; // het is een herhalend signaal. Bij ontvangst herhalingen onderdukken
|
||||
rfsns_raw_signal->Repeats = 1; // het is een herhalend signaal. Bij ontvangst herhalingen onderdukken
|
||||
|
||||
int Payload3 = Voltage & 0x3f;
|
||||
Channel--;
|
||||
|
||||
switch (Type) {
|
||||
case 1: // Temp / Lux
|
||||
|
@ -242,11 +254,9 @@ boolean RfSnsAnalyzeTheov2(void)
|
|||
snprintf_P(log_data, sizeof(log_data), PSTR("RFS: TheoV2, ChkCalc %d, Chksum %d, id %d, Type %d, Ch %d, Volt %d, BattLo %d, Pld1 %d, Pld2 %d"),
|
||||
chksum, Checksum, id, Type, Channel +1, Payload3, (Voltage & 0x80) >> 7, Payload1, Payload2);
|
||||
AddLog(LOG_LEVEL_DEBUG);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void RfSnsTheoV2Show(boolean json)
|
||||
void RfSnsTheoV2Show(bool json)
|
||||
{
|
||||
bool sensor_once = false;
|
||||
|
||||
|
@ -254,7 +264,7 @@ void RfSnsTheoV2Show(boolean json)
|
|||
if (rfsns_theo_v2_t1[i].time) {
|
||||
char sensor[10];
|
||||
snprintf_P(sensor, sizeof(sensor), PSTR("TV2T1C%d"), i +1);
|
||||
char voltage[10];
|
||||
char voltage[33];
|
||||
dtostrfd((float)rfsns_theo_v2_t1[i].volt / 10, 1, voltage);
|
||||
|
||||
if (rfsns_theo_v2_t1[i].time < LocalTime() - RFSNS_VALID_WINDOW) {
|
||||
|
@ -263,7 +273,7 @@ void RfSnsTheoV2Show(boolean json)
|
|||
mqtt_data, sensor, GetDT(rfsns_theo_v2_t1[i].time).c_str(), voltage);
|
||||
}
|
||||
} else {
|
||||
char temperature[10];
|
||||
char temperature[33];
|
||||
dtostrfd(ConvertTemp((float)rfsns_theo_v2_t1[i].temp / 100), Settings.flag2.temperature_resolution, temperature);
|
||||
|
||||
if (json) {
|
||||
|
@ -291,7 +301,7 @@ void RfSnsTheoV2Show(boolean json)
|
|||
if (rfsns_theo_v2_t2[i].time) {
|
||||
char sensor[10];
|
||||
snprintf_P(sensor, sizeof(sensor), PSTR("TV2T2C%d"), i +1);
|
||||
char voltage[10];
|
||||
char voltage[33];
|
||||
dtostrfd((float)rfsns_theo_v2_t2[i].volt / 10, 1, voltage);
|
||||
|
||||
if (rfsns_theo_v2_t2[i].time < LocalTime() - RFSNS_VALID_WINDOW) {
|
||||
|
@ -301,10 +311,10 @@ void RfSnsTheoV2Show(boolean json)
|
|||
}
|
||||
} else {
|
||||
float temp = ConvertTemp((float)rfsns_theo_v2_t2[i].temp / 100);
|
||||
char temperature[10];
|
||||
dtostrfd(temp, Settings.flag2.temperature_resolution, temperature);
|
||||
float humi = (float)rfsns_theo_v2_t2[i].hum / 100;
|
||||
char humidity[10];
|
||||
char temperature[33];
|
||||
dtostrfd(temp, Settings.flag2.temperature_resolution, temperature);
|
||||
char humidity[33];
|
||||
dtostrfd(humi, Settings.flag2.humidity_resolution, humidity);
|
||||
|
||||
if (json) {
|
||||
|
@ -414,15 +424,19 @@ typedef struct {
|
|||
uint8_t wdir;
|
||||
} alecto_v2_t;
|
||||
|
||||
alecto_v2_t rfsns_alecto_v2;
|
||||
|
||||
alecto_v2_t *rfsns_alecto_v2 = NULL;
|
||||
uint16_t rfsns_alecto_rain_base = 0;
|
||||
//unsigned long rfsns_alecto_time = 60000;
|
||||
|
||||
boolean RfSnsAnalyzeAlectov2()
|
||||
void RfSnsInitAlectoV2(void)
|
||||
{
|
||||
if (!(((rfsns_raw_signal.Number >= RFSNS_ACH2010_MIN_PULSECOUNT) &&
|
||||
(rfsns_raw_signal.Number <= RFSNS_ACH2010_MAX_PULSECOUNT)) || (rfsns_raw_signal.Number == RFSNS_DKW2012_PULSECOUNT))) { return false; }
|
||||
rfsns_alecto_v2 = (alecto_v2_t*)malloc(sizeof(alecto_v2_t));
|
||||
rfsns_any_sensor++;
|
||||
}
|
||||
|
||||
void RfSnsAnalyzeAlectov2()
|
||||
{
|
||||
if (!(((rfsns_raw_signal->Number >= RFSNS_ACH2010_MIN_PULSECOUNT) &&
|
||||
(rfsns_raw_signal->Number <= RFSNS_ACH2010_MAX_PULSECOUNT)) || (rfsns_raw_signal->Number == RFSNS_DKW2012_PULSECOUNT))) { return; }
|
||||
|
||||
byte c = 0;
|
||||
byte rfbit;
|
||||
|
@ -437,11 +451,11 @@ boolean RfSnsAnalyzeAlectov2()
|
|||
float factor;
|
||||
char buf1[16];
|
||||
|
||||
if (rfsns_raw_signal.Number > RFSNS_ACH2010_MAX_PULSECOUNT) { maxidx = 9; }
|
||||
if (rfsns_raw_signal->Number > RFSNS_ACH2010_MAX_PULSECOUNT) { maxidx = 9; }
|
||||
// Get message back to front as the header is almost never received complete for ACH2010
|
||||
byte idx = maxidx;
|
||||
for (byte x = rfsns_raw_signal.Number; x > 0; x = x-2) {
|
||||
if (rfsns_raw_signal.Pulses[x-1] * rfsns_raw_signal.Multiply < 0x300) {
|
||||
for (byte x = rfsns_raw_signal->Number; x > 0; x = x-2) {
|
||||
if (rfsns_raw_signal->Pulses[x-1] * rfsns_raw_signal->Multiply < 0x300) {
|
||||
rfbit = 0x80;
|
||||
} else {
|
||||
rfbit = 0;
|
||||
|
@ -461,49 +475,47 @@ boolean RfSnsAnalyzeAlectov2()
|
|||
msgtype = (data[0] >> 4) & 0xf;
|
||||
rc = (data[0] << 4) | (data[1] >> 4);
|
||||
|
||||
if (checksum != checksumcalc) { return false; }
|
||||
if ((msgtype != 10) && (msgtype != 5)) { return true; }
|
||||
if (checksum != checksumcalc) { return; }
|
||||
if ((msgtype != 10) && (msgtype != 5)) { return; }
|
||||
|
||||
rfsns_raw_signal.Repeats = 1; // het is een herhalend signaal. Bij ontvangst herhalingen onderdukken
|
||||
rfsns_raw_signal->Repeats = 1; // het is een herhalend signaal. Bij ontvangst herhalingen onderdukken
|
||||
|
||||
// Test set
|
||||
// rfsns_raw_signal.Number = RFSNS_DKW2012_PULSECOUNT; // DKW2012
|
||||
// rfsns_raw_signal->Number = RFSNS_DKW2012_PULSECOUNT; // DKW2012
|
||||
// data[8] = 11; // WSW
|
||||
|
||||
factor = 1.22; // (1.08)
|
||||
// atime = rfsns_raw_signal.Time - rfsns_alecto_time;
|
||||
// atime = rfsns_raw_signal->Time - rfsns_alecto_time;
|
||||
// if ((atime > 10000) && (atime < 60000)) factor = (float)60000 / atime;
|
||||
// rfsns_alecto_time = rfsns_raw_signal.Time;
|
||||
// rfsns_alecto_time = rfsns_raw_signal->Time;
|
||||
// Serial.printf("atime %d, rfsns_alecto_time %d\n", atime, rfsns_alecto_time);
|
||||
|
||||
rfsns_alecto_v2.time = LocalTime();
|
||||
rfsns_alecto_v2.type = (RFSNS_DKW2012_PULSECOUNT == rfsns_raw_signal.Number);
|
||||
rfsns_alecto_v2.temp = (float)(((data[1] & 0x3) * 256 + data[2]) - 400) / 10;
|
||||
rfsns_alecto_v2.humi = data[3];
|
||||
rfsns_alecto_v2->time = LocalTime();
|
||||
rfsns_alecto_v2->type = (RFSNS_DKW2012_PULSECOUNT == rfsns_raw_signal->Number);
|
||||
rfsns_alecto_v2->temp = (float)(((data[1] & 0x3) * 256 + data[2]) - 400) / 10;
|
||||
rfsns_alecto_v2->humi = data[3];
|
||||
uint16_t rain = (data[6] * 256) + data[7];
|
||||
// check if rain unit has been reset!
|
||||
if (rain < rfsns_alecto_rain_base) { rfsns_alecto_rain_base = rain; }
|
||||
if (rfsns_alecto_rain_base > 0) {
|
||||
rfsns_alecto_v2.rain += ((float)rain - rfsns_alecto_rain_base) * 0.30;
|
||||
rfsns_alecto_v2->rain += ((float)rain - rfsns_alecto_rain_base) * 0.30;
|
||||
}
|
||||
rfsns_alecto_rain_base = rain;
|
||||
rfsns_alecto_v2.wind = (float)data[4] * factor;
|
||||
rfsns_alecto_v2.gust = (float)data[5] * factor;
|
||||
if (rfsns_alecto_v2.type) {
|
||||
rfsns_alecto_v2.wdir = data[8] & 0xf;
|
||||
rfsns_alecto_v2->wind = (float)data[4] * factor;
|
||||
rfsns_alecto_v2->gust = (float)data[5] * factor;
|
||||
if (rfsns_alecto_v2->type) {
|
||||
rfsns_alecto_v2->wdir = data[8] & 0xf;
|
||||
}
|
||||
|
||||
snprintf_P(log_data, sizeof(log_data), PSTR("RFS: " D_ALECTOV2 ", ChkCalc %d, Chksum %d, rc %d, Temp %d, Hum %d, Rain %d, Wind %d, Gust %d, Dir %d, Factor %s"),
|
||||
checksumcalc, checksum, rc, ((data[1] & 0x3) * 256 + data[2]) - 400, data[3], (data[6] * 256) + data[7], data[4], data[5], data[8] & 0xf, dtostrfd(factor, 3, buf1));
|
||||
AddLog(LOG_LEVEL_DEBUG);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void RfSnsAlectoResetRain(void)
|
||||
{
|
||||
if ((RtcTime.hour == 0) && (RtcTime.minute == 0) && (RtcTime.second == 5)) {
|
||||
rfsns_alecto_v2.rain = 0; // Reset Rain
|
||||
rfsns_alecto_v2->rain = 0; // Reset Rain
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -537,40 +549,43 @@ const char HTTP_SNS_ALECTOV2_WDIR[] PROGMEM = "%s"
|
|||
"{s}" D_ALECTOV2 " " D_TX20_WIND_DIRECTION "{m}%s{e}";
|
||||
#endif
|
||||
|
||||
void RfSnsAlectoV2Show(boolean json)
|
||||
void RfSnsAlectoV2Show(bool json)
|
||||
{
|
||||
if (rfsns_alecto_v2.time) {
|
||||
if (rfsns_alecto_v2.time < LocalTime() - RFSNS_VALID_WINDOW) {
|
||||
if (rfsns_alecto_v2->time) {
|
||||
if (rfsns_alecto_v2->time < LocalTime() - RFSNS_VALID_WINDOW) {
|
||||
if (json) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_ALECTOV2 "\":{\"" D_JSON_RFRECEIVED "\":\"%s\"}"),
|
||||
mqtt_data, GetDT(rfsns_alecto_v2.time).c_str());
|
||||
mqtt_data, GetDT(rfsns_alecto_v2->time).c_str());
|
||||
}
|
||||
} else {
|
||||
float temp = ConvertTemp(rfsns_alecto_v2.temp);
|
||||
char temperature[10];
|
||||
float temp = ConvertTemp(rfsns_alecto_v2->temp);
|
||||
char temperature[33];
|
||||
dtostrfd(temp, Settings.flag2.temperature_resolution, temperature);
|
||||
float humi = (float)rfsns_alecto_v2.humi;
|
||||
char humidity[10];
|
||||
float humi = (float)rfsns_alecto_v2->humi;
|
||||
char humidity[33];
|
||||
dtostrfd(humi, Settings.flag2.humidity_resolution, humidity);
|
||||
char rain[10];
|
||||
dtostrfd(rfsns_alecto_v2.rain, 2, rain);
|
||||
char wind[10];
|
||||
dtostrfd(rfsns_alecto_v2.wind, 2, wind);
|
||||
char gust[10];
|
||||
dtostrfd(rfsns_alecto_v2.gust, 2, gust);
|
||||
char rain[33];
|
||||
dtostrfd(rfsns_alecto_v2->rain, 2, rain);
|
||||
char wind[33];
|
||||
dtostrfd(rfsns_alecto_v2->wind, 2, wind);
|
||||
char gust[33];
|
||||
dtostrfd(rfsns_alecto_v2->gust, 2, gust);
|
||||
char wdir[4];
|
||||
char direction[20];
|
||||
if (rfsns_alecto_v2.type) {
|
||||
GetTextIndexed(wdir, sizeof(wdir), rfsns_alecto_v2.wdir, kAlectoV2Directions);
|
||||
if (rfsns_alecto_v2->type) {
|
||||
GetTextIndexed(wdir, sizeof(wdir), rfsns_alecto_v2->wdir, kAlectoV2Directions);
|
||||
snprintf_P(direction, sizeof(direction), PSTR(",\"Direction\":\"%s\""), wdir);
|
||||
}
|
||||
|
||||
if (json) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_ALECTOV2 "\":{\"" D_JSON_TEMPERATURE "\":%s,\"" D_JSON_HUMIDITY "\":%s,\"Rain\":%s,\"Wind\":%s,\"Gust\":%s%s}"),
|
||||
mqtt_data, temperature, humidity, rain, wind, gust, (rfsns_alecto_v2.type) ? direction : "");
|
||||
mqtt_data, temperature, humidity, rain, wind, gust, (rfsns_alecto_v2->type) ? direction : "");
|
||||
if (0 == tele_period) {
|
||||
#ifdef USE_DOMOTICZ
|
||||
// Use a rule
|
||||
// Use a rules to send data to Domoticz where also a local BMP280 is connected:
|
||||
// on tele-alectov2#temperature do var1 %value% endon on tele-alectov2#humidity do var2 %value% endon on tele-bmp280#pressure do publish domoticz/in {"idx":68,"svalue":"%var1%;%var2%;0;%value%;0"} endon
|
||||
// on tele-alectov2#wind do var1 %value% endon on tele-alectov2#gust do publish domoticz/in {"idx":69,"svalue":"0;N;%var1%;%value%;22;24"} endon"}
|
||||
// on tele-alectov2#rain do publish domoticz/in {"idx":70,"svalue":"0;%value%"} endon
|
||||
#endif // USE_DOMOTICZ
|
||||
}
|
||||
#ifdef USE_WEBSERVER
|
||||
|
@ -578,7 +593,7 @@ void RfSnsAlectoV2Show(boolean json)
|
|||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_TEMP, mqtt_data, D_ALECTOV2, temperature, TempUnit());
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_HUM, mqtt_data, D_ALECTOV2, humidity);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_ALECTOV2, mqtt_data, rain, wind, gust);
|
||||
if (rfsns_alecto_v2.type) {
|
||||
if (rfsns_alecto_v2->type) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_ALECTOV2_WDIR, mqtt_data, wdir);
|
||||
}
|
||||
#endif // USE_WEBSERVER
|
||||
|
@ -590,25 +605,37 @@ void RfSnsAlectoV2Show(boolean json)
|
|||
|
||||
void RfSnsInit(void)
|
||||
{
|
||||
rfsns_rf_bit = digitalPinToBitMask(pin[GPIO_RF_SENSOR]);
|
||||
rfsns_rf_port = digitalPinToPort(pin[GPIO_RF_SENSOR]);
|
||||
pinMode(pin[GPIO_RF_SENSOR], INPUT);
|
||||
rfsns_raw_signal = (raw_signal_t*)(malloc(sizeof(raw_signal_t)));
|
||||
if (rfsns_raw_signal) {
|
||||
memset(rfsns_raw_signal, 0, sizeof(raw_signal_t)); // Init defaults to 0
|
||||
#ifdef USE_THEO_V2
|
||||
RfSnsInitTheoV2();
|
||||
#endif
|
||||
#ifdef USE_ALECTO_V2
|
||||
RfSnsInitAlectoV2();
|
||||
#endif
|
||||
if (rfsns_any_sensor) {
|
||||
rfsns_rf_bit = digitalPinToBitMask(pin[GPIO_RF_SENSOR]);
|
||||
rfsns_rf_port = digitalPinToPort(pin[GPIO_RF_SENSOR]);
|
||||
pinMode(pin[GPIO_RF_SENSOR], INPUT);
|
||||
} else {
|
||||
free(rfsns_raw_signal);
|
||||
rfsns_raw_signal = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RfSnsAnalyzeRawSignal(void)
|
||||
{
|
||||
snprintf_P(log_data, sizeof(log_data), PSTR("RFS: Pulses %d"), (int)rfsns_raw_signal.Number);
|
||||
snprintf_P(log_data, sizeof(log_data), PSTR("RFS: Pulses %d"), (int)rfsns_raw_signal->Number);
|
||||
AddLog(LOG_LEVEL_DEBUG);
|
||||
|
||||
// if (Settings.flag3.rf_type) {
|
||||
#ifdef USE_THEO_V2
|
||||
RfSnsAnalyzeTheov2();
|
||||
#endif
|
||||
// } else {
|
||||
#ifdef USE_ALECTO_V2
|
||||
RfSnsAnalyzeAlectov2();
|
||||
#endif
|
||||
// }
|
||||
}
|
||||
|
||||
void RfSnsEverySecond(void)
|
||||
|
@ -618,12 +645,11 @@ void RfSnsEverySecond(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
void RfSnsShow(boolean json)
|
||||
void RfSnsShow(bool json)
|
||||
{
|
||||
#ifdef USE_THEO_V2
|
||||
RfSnsTheoV2Show(json);
|
||||
#endif
|
||||
|
||||
#ifdef USE_ALECTO_V2
|
||||
RfSnsAlectoV2Show(json);
|
||||
#endif
|
||||
|
@ -635,13 +661,13 @@ void RfSnsShow(boolean json)
|
|||
|
||||
boolean Xsns37(byte function)
|
||||
{
|
||||
boolean result = false;
|
||||
bool result = false;
|
||||
|
||||
if (pin[GPIO_RF_SENSOR] < 99) {
|
||||
if ((pin[GPIO_RF_SENSOR] < 99) && (FUNC_INIT == function)) {
|
||||
RfSnsInit();
|
||||
}
|
||||
else if (rfsns_raw_signal) {
|
||||
switch (function) {
|
||||
case FUNC_INIT:
|
||||
RfSnsInit();
|
||||
break;
|
||||
case FUNC_LOOP:
|
||||
if ((*portInputRegister(rfsns_rf_port) &rfsns_rf_bit) == rfsns_rf_bit) {
|
||||
if (RfSnsFetchSignal(pin[GPIO_RF_SENSOR], HIGH)) {
|
||||
|
|
|
@ -0,0 +1,305 @@
|
|||
/*
|
||||
xsns_38_az7798.ino - AZ_Instrument 7798 CO2/temperature/humidity meter support for Sonoff-Tasmota
|
||||
|
||||
Copyright (C) 2018 Theo Arends
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#ifdef USE_AZ7798
|
||||
|
||||
#define XSNS_38 38
|
||||
|
||||
/*********************************************************************************************\
|
||||
* CO2, temperature and humidity meter and data logger
|
||||
* Known by different names (brief survey 2018-12-16):
|
||||
* - AZ-Instrument 7798 (http://www.az-instrument.com.tw)
|
||||
* - co2meter.com AZ-0004
|
||||
* - Extech CO200
|
||||
* - BES CO7788 (https://www.aliexpress.com)
|
||||
* - AZ CO87 (https://www.aliexpress.com)
|
||||
* - no doubt there are more ...
|
||||
*
|
||||
* Hardware Serial will be selected if GPIO1 = [AZ Tx] and GPIO3 = [AZ Rx]
|
||||
*
|
||||
* Inside the meter, the serial comms wire with the red stripe goes to GPIO1.
|
||||
* The other one therefore to GPIO3.
|
||||
* WeMos D1 Mini is powered from the incoming 5V.
|
||||
*
|
||||
* This implementation was derived from xsns_15_mhz19.ino from
|
||||
* Sonoff-Tasmota-6.3.0 by Arthur de Beun.
|
||||
*
|
||||
* The serial comms protocol is not publicly documented, that I could find.
|
||||
* The info below was obtained by reverse-engineering.
|
||||
* Port settings: 9600 8N1
|
||||
* The suppied USB interface has a CP20x USB-serial bridge.
|
||||
* The 3-way, 2.5mm jack has tip=RxD, middle=TxD and base=0V
|
||||
* The TxD output swing is 3V3.
|
||||
*
|
||||
* There is never a space before the 0x0d, but the other spaces are there.
|
||||
*
|
||||
* serial number / ID
|
||||
* request: I 0x0d
|
||||
* response: i 12345678 7798V3.4 0x0d
|
||||
*
|
||||
* log info
|
||||
* request: M 0x0d
|
||||
* response: m 45 1 C 1af4 0cf4 0x0d
|
||||
*
|
||||
* 45 = number of records, but there are only 15 lines of 3 values each)
|
||||
* 1 = sample rate in seconds
|
||||
* C = celcius, F
|
||||
* 1af4 0cf4 = seconds since 2000-01-01 00:00:00
|
||||
*
|
||||
* start time 2014-04-30 19:35:16
|
||||
* end time 2014-04-30 19:35:30
|
||||
*
|
||||
* download log data
|
||||
* request: D 0x0d
|
||||
* response: m 45 1 C 1af4 0cf4 0x0d
|
||||
* d 174 955 698 0x0d
|
||||
* 174 = temp in [C * 10]
|
||||
* 955 = CO2 [ppm]
|
||||
* 698 = RH in [% * 10]
|
||||
* d 174 990 694 0x0d
|
||||
* ...
|
||||
* d 173 929 654 0x0d
|
||||
*
|
||||
* 15 lines in total, 1 second apart
|
||||
*
|
||||
* Sync datalogger time with PC
|
||||
* request: C 452295746 0x0d
|
||||
* response: > 0x0d
|
||||
*
|
||||
* 452295746 = seconds since 2000-01-01 00:00:00
|
||||
*
|
||||
* Identifier:
|
||||
* request: J -------- 1 0x0d
|
||||
*
|
||||
* the characters (dashes) in the above become the first part of the response to the I command (12345678 above)
|
||||
*
|
||||
* Set sample rate
|
||||
* request: S 10 0x0d
|
||||
* response: m 12 10 C 1af5 7be1 0x0d
|
||||
*
|
||||
* Other characters that seem to give a response:
|
||||
* A responds with >
|
||||
* so is similar to the response to C, so other characters may be required
|
||||
* A is the beep alarm perhaps?
|
||||
* parameters would be CO2 level and on/off, as per front panel P1.3 setting?
|
||||
*
|
||||
* L responds with >
|
||||
* L perhaps sets the limits for the good and normal levels (P1.1 and P1.2)?
|
||||
*
|
||||
* Q responds with >
|
||||
* Q is reset maybe (P4.1)?
|
||||
*
|
||||
* : responds with : T19.9C:C2167ppm:H57.4%
|
||||
* This one gives the current readings.
|
||||
**********************************************************************************************
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
#include <TasmotaSerial.h>
|
||||
|
||||
#ifndef CO2_LOW
|
||||
#define CO2_LOW 800 // Below this CO2 value show green light
|
||||
#endif
|
||||
#ifndef CO2_HIGH
|
||||
#define CO2_HIGH 1200 // Above this CO2 value show red light
|
||||
#endif
|
||||
|
||||
#define AZ_READ_TIMEOUT 400 // Must be way less than 1000 but enough to read 9 bytes at 9600 bps
|
||||
|
||||
TasmotaSerial *AzSerial;
|
||||
|
||||
const char ktype[] = "AZ7798";
|
||||
uint8_t az_type = 1;
|
||||
uint16_t az_co2 = 0;
|
||||
double az_temperature = 0;
|
||||
double az_humidity = 0;
|
||||
uint8_t az_received = 0;
|
||||
uint8_t az_state = 0;
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
void AzEverySecond(void)
|
||||
{
|
||||
az_state++;
|
||||
if (5 == az_state) { // every 5 seconds
|
||||
az_state = 0;
|
||||
|
||||
AzSerial->flush(); // sync reception
|
||||
AzSerial->write(":\r", 2);
|
||||
az_received = 0;
|
||||
|
||||
uint8_t az_response[32];
|
||||
unsigned long start = millis();
|
||||
uint8_t counter = 0;
|
||||
uint8_t i, j;
|
||||
uint8_t response_substr[16];
|
||||
|
||||
do {
|
||||
if (AzSerial->available() > 0) {
|
||||
az_response[counter] = AzSerial->read();
|
||||
if(az_response[counter] == 0x0d) { az_received = 1; }
|
||||
counter++;
|
||||
} else {
|
||||
delay(5);
|
||||
}
|
||||
} while(((millis() - start) < AZ_READ_TIMEOUT) && (counter < sizeof(az_response)) && !az_received);
|
||||
|
||||
AddLogSerial(LOG_LEVEL_DEBUG_MORE, az_response, counter);
|
||||
|
||||
if (!az_received) {
|
||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "AZ7798 comms timeout"));
|
||||
return;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
while((az_response[i] != 'T') && (i < counter)) {i++;} // find the start of response
|
||||
if(az_response[i] != 'T') {
|
||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "AZ7798 failed to find start of response"));
|
||||
return;
|
||||
}
|
||||
i++; // advance to start of temperature value
|
||||
j = 0;
|
||||
// find the end of temperature
|
||||
while((az_response[i] != 'C') && (az_response[i] != 'F') && (i < counter)) {
|
||||
response_substr[j++] = az_response[i++];
|
||||
}
|
||||
if((az_response[i] != 'C') && (az_response[i] != 'F')){
|
||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "AZ7798 failed to find end of temperature"));
|
||||
return;
|
||||
}
|
||||
response_substr[j] = 0; // add null terminator
|
||||
az_temperature = CharToDouble((char*)response_substr); // units (C or F) depends on meter setting
|
||||
if(az_response[i] == 'C') { // meter transmits in degC
|
||||
az_temperature = ConvertTemp((float)az_temperature); // convert to degF, depending on settings
|
||||
} else { // meter transmits in degF
|
||||
az_temperature = ConvertTemp((az_temperature - 32) / 1.8); // convert to degC and then C or F depending on setting
|
||||
}
|
||||
i++; // advance to first delimiter
|
||||
if(az_response[i] != ':') {
|
||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "AZ7798 error first delimiter"));
|
||||
return;
|
||||
}
|
||||
i++; // advance to start of CO2
|
||||
if(az_response[i] != 'C') {
|
||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "AZ7798 error start of CO2"));
|
||||
return;
|
||||
}
|
||||
i++; // advance to start of CO2 value
|
||||
j = 0;
|
||||
// find the end of CO2
|
||||
while((az_response[i] != 'p') && (i < counter)) {
|
||||
response_substr[j++] = az_response[i++];
|
||||
}
|
||||
if(az_response[i] != 'p') {
|
||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "AZ7798 failed to find end of CO2"));
|
||||
return;
|
||||
}
|
||||
response_substr[j] = 0; // add null terminator
|
||||
az_co2 = atoi((char*)response_substr);
|
||||
LightSetSignal(CO2_LOW, CO2_HIGH, az_co2);
|
||||
i += 3; // advance to second delimiter
|
||||
if(az_response[i] != ':') {
|
||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "AZ7798 error second delimiter"));
|
||||
return;
|
||||
}
|
||||
i++; // advance to start of humidity
|
||||
if(az_response[i] != 'H') {
|
||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "AZ7798 error start of humidity"));
|
||||
return;
|
||||
}
|
||||
i++; // advance to start of humidity value
|
||||
j = 0;
|
||||
// find the end of humidity
|
||||
while((az_response[i] != '%') && (i < counter)) {
|
||||
response_substr[j++] = az_response[i++];
|
||||
}
|
||||
if(az_response[i] != '%') {
|
||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "AZ7798 failed to find end of humidity"));
|
||||
return;
|
||||
}
|
||||
response_substr[j] = 0; // add null terminator
|
||||
az_humidity = CharToDouble((char*)response_substr);
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
void AzInit(void)
|
||||
{
|
||||
az_type = 0;
|
||||
if ((pin[GPIO_AZ_RXD] < 99) && (pin[GPIO_AZ_TXD] < 99)) {
|
||||
AzSerial = new TasmotaSerial(pin[GPIO_AZ_RXD], pin[GPIO_AZ_TXD], 1);
|
||||
if (AzSerial->begin(9600)) {
|
||||
if (AzSerial->hardwareSerial()) { ClaimSerial(); }
|
||||
az_type = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AzShow(boolean json)
|
||||
{
|
||||
char temperature[33];
|
||||
dtostrfd(az_temperature, Settings.flag2.temperature_resolution, temperature);
|
||||
char humidity[33];
|
||||
dtostrfd(az_humidity, Settings.flag2.humidity_resolution, humidity);
|
||||
|
||||
if (json) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"%s\":{\"" D_JSON_CO2 "\":%d,\"" D_JSON_TEMPERATURE "\":%s,\"" D_JSON_HUMIDITY "\":%s}"), mqtt_data, ktype, az_co2, temperature, humidity);
|
||||
#ifdef USE_DOMOTICZ
|
||||
if (0 == tele_period) DomoticzSensor(DZ_AIRQUALITY, az_co2);
|
||||
#endif // USE_DOMOTICZ
|
||||
#ifdef USE_WEBSERVER
|
||||
} else {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_CO2, mqtt_data, ktype, az_co2);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_TEMP, mqtt_data, ktype, temperature, TempUnit());
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_HUM, mqtt_data, ktype, humidity);
|
||||
#endif // USE_WEBSERVER
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************************************\
|
||||
* Interface
|
||||
\*********************************************************************************************/
|
||||
|
||||
boolean Xsns38(byte function)
|
||||
{
|
||||
boolean result = false;
|
||||
|
||||
if(az_type){
|
||||
switch (function) {
|
||||
case FUNC_INIT:
|
||||
AzInit();
|
||||
break;
|
||||
case FUNC_EVERY_SECOND:
|
||||
AzEverySecond();
|
||||
break;
|
||||
case FUNC_JSON_APPEND:
|
||||
AzShow(1);
|
||||
break;
|
||||
#ifdef USE_WEBSERVER
|
||||
case FUNC_WEB_APPEND:
|
||||
AzShow(0);
|
||||
break;
|
||||
#endif // USE_WEBSERVER
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
#endif // USE_AZ7798
|
|
@ -0,0 +1,492 @@
|
|||
:020000040000FA
|
||||
:1000000002142AED24F8FEEFD39E4015ED2408FDDE
|
||||
:10001000E433FCC3EF9DEC6480F874809850028058
|
||||
:1000200001C32202139A7597A522220218387EFF77
|
||||
:10003000EFD394004022EF9480501DE4FDED75F065
|
||||
:1000400005A4240CF582E4341EF583E493B507047B
|
||||
:10005000AE0580040DBD06E5AF06220215CD121DCA
|
||||
:100060004053D87853DBFE121D04E4900085F02243
|
||||
:10007000D2DE2202188BD202121ABAC290C296D2D3
|
||||
:1000800080E4FBFD7F10121CEB1206CE74A4F0D2AC
|
||||
:10009000AFE4F53BF53CD296053CE53C7002053BF0
|
||||
:1000A000B410F3E53BB427EEC296120026300209E5
|
||||
:1000B0001219F48E3E8F3F8006753E01753F00E5B4
|
||||
:1000C0003F7004E53E640170409000CCE07007F59D
|
||||
:1000D0003BF53C02028D053CE53C7002053BD394A8
|
||||
:1000E00010E53B94274002D296D3E53C9430E53BA3
|
||||
:1000F0009475500302028DE4F53BF53C9000CCF082
|
||||
:100100009000CBF0C29602028DE4F53BF53C9000E6
|
||||
:10011000CCE014602A14700302025F147003020220
|
||||
:100120001D1470030202332404600302028DE53FB4
|
||||
:1001300064AA600302028D9000CC04F002028DE5F7
|
||||
:100140003F9000CBF0A37402F0E53F120C3902059A
|
||||
:10015000A00173A10185A501A9A601BDA701C6A89B
|
||||
:1001600001E2A901C9B001D2B1019AC0028DFF001C
|
||||
:100170000002141206879000A87401F0E490007544
|
||||
:10018000F07FA1806E12005E9000CC7404F0753D8B
|
||||
:1001900008E4F54175400902028D9000CC7404F02A
|
||||
:1001A000E4F54175400202028DE49000A8F0900051
|
||||
:1001B00075F07FA612071174A6F002028D1206CE0A
|
||||
:1001C00074A4F002028D753D089000CC7403F00217
|
||||
:1001D000028D9000757401F07FB1120711EFF002EB
|
||||
:1001E000028D1206879000A8E0F53AE4F0900075C1
|
||||
:1001F000F07FA91219B790007CEFF07D307C75126A
|
||||
:10020000070002028D1206EE90007CEFF0E49000F1
|
||||
:10021000CCF08079E49000CBF0A3F08070E4F5415D
|
||||
:10022000E53FF540E540D394009000CC402C7404A9
|
||||
:10023000F0805A74042541F582E43400F583E53FEB
|
||||
:10024000F00541E541B540059000CC800DE541C386
|
||||
:10025000947040397540709000CC7402F0802EE5A7
|
||||
:100260003F645570289000CCF0C2029000CBE0248F
|
||||
:1002700060601824FC600F24FE600B14600824F6F4
|
||||
:100280006004241070077FA0121CB8D2029000CB2B
|
||||
:10029000E0120C3902B6A102E0A402F2A503DAA62C
|
||||
:1002A00003F6A805C0A905FDB00670B103A6C003FA
|
||||
:1002B000C8FF000000AA900084E030E70F7DC87CF2
|
||||
:1002C000001206B77FA312192E0205DA121CFC4099
|
||||
:1002D000030200AA7DE87C031206B77FA20205F59F
|
||||
:1002E000900084E020E7030200AA7FA412192E02E6
|
||||
:1002F00003EE9000CCE060030200AA900085E024A9
|
||||
:10030000FC6070240460030200AA153D900008E020
|
||||
:10031000FEA3E0FF7C007D64120C5FC006C00712E4
|
||||
:100320001573D007D006120BA78F4B900006E0FE86
|
||||
:10033000A3E0FF8E4CF54D7C007D64120C5FC0067F
|
||||
:10034000C007121573D007D006120BA78F4E754F3A
|
||||
:1003500018900008E0FAA3E0FB900004E0FCA3E0A2
|
||||
:10036000FDA3E0FEA3E0FF1217569000747406F0A0
|
||||
:100370000204B97F0112002E12159960030200AA2F
|
||||
:10038000E53D601A7F0112002EEF12154912158DFE
|
||||
:1003900050030205B81206E2121D2E0205B812061D
|
||||
:1003A000EE7FA00205F59000CCE060030200AA9069
|
||||
:1003B0000004E0FCA3E0FD120700D296121D2EC23D
|
||||
:1003C000967FA0121CB8800A7F01121CB8E490002E
|
||||
:1003D000CCF0D2021206F70200AA900084E020E7D7
|
||||
:1003E000030200AA547FF543FD7FA61214B9E490DE
|
||||
:1003F0000084F00200AA9000CCE060030200AA9002
|
||||
:100400000085E024FC7003020569240460030200F7
|
||||
:10041000AA900004E0FF2480600804700DE4F51D3C
|
||||
:100420008003751D017542FF800F12002E8F42E57B
|
||||
:1004300042F46005121599F51D153D12005EE51D8B
|
||||
:1004400014607C0460030200AA900004E0647F70E2
|
||||
:1004500024A31215BAA3E0FAA3E0FBA3E0F54BA393
|
||||
:10046000E0F54CA3E0F54DA3E0F54EA3E01207083C
|
||||
:10047000740CF0803BE542F46031121547F5828E32
|
||||
:10048000831215AA740593FA740693FB740993F505
|
||||
:100490004B740793F54C740893F54D740A93F54E1D
|
||||
:1004A000740B931207087401F08005E49000CBF000
|
||||
:1004B0009000CBE070030200AA121BF00200AA9089
|
||||
:1004C0000004E06480704E900074740CF090000B97
|
||||
:1004D000E0FF7E00900009E0FCA3E0FD120A47C0A7
|
||||
:1004E00006C00790000C1215C6C007C00690000D8C
|
||||
:1004F0001215C6AA06AB0790000E1215C68E4F8FB6
|
||||
:10050000508A4D8B4ED04BD04C9000051215BA90AE
|
||||
:10051000000FE08048E542F4700302062F121547F1
|
||||
:100520009000747401F08544828E83740612156401
|
||||
:10053000C006C0077407121564C007C0067408120D
|
||||
:100540001564AA06AB0774091215648E4F8F508A82
|
||||
:100550004D8B4ED04BD04C1215AA740A93F551D046
|
||||
:1005600003D0021217D00200AAE53D70101206F760
|
||||
:100570007FA0121CB8D202E4F51D0200AAE51D14EA
|
||||
:10058000601B0460030200AAE542F4600E121547E6
|
||||
:1005900012158D40061206E2121D2E801BE542F454
|
||||
:1005A000601612154712158D400EEFFD7C007F017D
|
||||
:1005B0007E00121B0D121D2EE4900085F00200AA91
|
||||
:1005C000900084E0FF30E71C547FF5437DC87C0039
|
||||
:1005D00012069AAD437FAB1214B9E4900084F0D2B6
|
||||
:1005E000020200AA121CFC40030200AA7DE87C0360
|
||||
:1005F00012069A7FAA121CB8D2020200AA90000426
|
||||
:10060000E025E0F5439000CCE060030200AA9000F2
|
||||
:1006100085E0700512005E800B900085E064046048
|
||||
:10062000030200AAE5436007E540C394045008E4D0
|
||||
:100630009000CBF00200AA74062543F9E43400755B
|
||||
:100640004801F549894AC3E540954324FEF54B909E
|
||||
:100650000005E0F54C7B017A0079061216527FA066
|
||||
:10066000121CB890007CE0FF1219B7D2020200AA57
|
||||
:10067000900084E020E7030200AA7FB11216D4E4C0
|
||||
:10068000900084F00200AA7D327C007F017E00127F
|
||||
:100690001B0DD296121D2EC296227F017E00121BC8
|
||||
:1006A0000DD296121D2EC2969000A8E53AF0900049
|
||||
:1006B0007CE0FF1219B7227F017E00121B0DD2963B
|
||||
:1006C000121D2EC29690007CE0FF1219B7229000F6
|
||||
:1006D000A87401F0E4900075F07FA41219B790009F
|
||||
:1006E0007C22EFFD7C007F017E00121B0D2290001A
|
||||
:1006F0007CE0FF1219B72290007CE0FF1219B722AC
|
||||
:100700007F017E00121B0D22F54F121756900074C8
|
||||
:10071000221219B790007C22AFE9AEEA120DB68E14
|
||||
:10072000088F092093030209A285080A85090BC3D3
|
||||
:10073000E509950DF511E508950CF510900075E0AB
|
||||
:1007400014700302099C0460030209C3900085E051
|
||||
:100750001460650460030209C3900084E060030232
|
||||
:1007600009C39000A8E0FFAB11AA10AD0FAC0E12A8
|
||||
:1007700010558F1AE51A648070030209C390007F38
|
||||
:10078000120E6B900002E510F0A3E511120DC1E40A
|
||||
:10079000900074F0900077F090007EF0F51BF51C4F
|
||||
:1007A000FE7F70FD7B017A007904120C8CE49000CE
|
||||
:1007B0007DF090008504F022E51A120D998E23F544
|
||||
:1007C00024E51A120DFA70030208D004600302092E
|
||||
:1007D000C3900004120CBBFFD39400400B90007E2A
|
||||
:1007E000E09F5004E004F022120E13AE10AF11ABE4
|
||||
:1007F00007AA06E50F2BFFE50E3AFEE433FDE433CE
|
||||
:10080000FCC004A905AA06AB07AE0EAF0F120E730B
|
||||
:10081000D000120BA78F22120D80FD120003401989
|
||||
:1008200090000A120D83FDAF22120003400B120C40
|
||||
:10083000B8120E646003020954120D80FDAF22123B
|
||||
:1008400000035009120CB8C3120E444013D3E50F35
|
||||
:10085000951CE50E951B402B120CB8120E647023EC
|
||||
:10086000900086120E6B120CC4C083C082120E0B55
|
||||
:100870007401A806088002C333D8FC4FD082D0830D
|
||||
:10088000F0801790007A120E6BC290D3951CE50E83
|
||||
:10089000951B4006850E1B850F1C900088E0700D8F
|
||||
:1008A000120CC6120D78FF121C4D120DBD120CB8A1
|
||||
:1008B000120E6460030209C3121CF45005E4900098
|
||||
:1008C00083F0120D7570030209941209D70209947E
|
||||
:1008D000120CB8FF7E00900004120AE4FDACF01286
|
||||
:1008E0000A47120DE18E258F26120E13E4850F158F
|
||||
:1008F000850E14F513F512851119851018F517F5E5
|
||||
:1009000016900006120CF81209C4500F900007123E
|
||||
:100910000CF21209F55004C2908043900008120CAA
|
||||
:10092000F21209C4502EAA23A9247BFF90000912B9
|
||||
:100930000CF81209F5501D120CC4C083C082120EAF
|
||||
:100940000B7401A806088002C333D8FC4FD082D0B4
|
||||
:1009500083F0800AE4900084F0C290A3F02290001B
|
||||
:1009600088E0700D120CC6120D78FF121C4D120D8E
|
||||
:10097000BDAA23A9247BFF90000A120A08120E6464
|
||||
:100980007041121CF45005E4900083F0120D756064
|
||||
:10099000031209D7C290E4900085F022AF11AE1087
|
||||
:1009A000801E85080C85090DC3E509950BF50FE53B
|
||||
:1009B00008950AF50E900075E0147007AF0FAE0EA3
|
||||
:1009C000120E9B22E5159FFFE5149EFE121CACC380
|
||||
:1009D000EF9526EE952522121D047D207C037F01D4
|
||||
:1009E0007E00121AE490007DE0900083F0A3E51AE7
|
||||
:1009F000F04480F022E5199FFFE5189EFE121CAC22
|
||||
:100A0000C3EF9526EE952522BB010CE58229F582E0
|
||||
:100A1000E5833AF583E0225006E92582F8E622BB19
|
||||
:100A2000FE06E92582F8E222E58229F582E5833A8D
|
||||
:100A3000F583E49322BB010689828A83F022500267
|
||||
:100A4000F722BBFE01F322EF8DF0A4A8F0CF8CF0CB
|
||||
:100A5000A428CE8DF0A42EFE22BC000BBE0029EFF0
|
||||
:100A60008DF084FFADF022E4CCF875F008EF2FFF95
|
||||
:100A7000EE33FEEC33FCEE9DEC984005FCEE9DFE63
|
||||
:100A80000FD5F0E9E4CEFD22EDF8F5F0EE8420D2AA
|
||||
:100A90001CFEADF075F008EF2FFFED33FD40079819
|
||||
:100AA0005006D5F0F222C398FD0FD5F0EA22C2D548
|
||||
:100AB000EC30E709B2D5E4C39DFDE49CFCEE30E7E1
|
||||
:100AC00015B2D5E4C39FFFE49EFE120A59C3E49D0C
|
||||
:100AD000FDE49CFC8003120A5930D507C3E49FFF54
|
||||
:100AE000E49EFE22BB0110E58229F582E5833AF5FA
|
||||
:100AF00083E0F5F0A3E0225009E92582F886F008AA
|
||||
:100B0000E622BBFE0AE92582F8E2F5F008E222E5DA
|
||||
:100B1000832AF583E993F5F0A3E99322E88FF0A403
|
||||
:100B2000CC8BF0A42CFCE98EF0A42CFC8AF0EDA474
|
||||
:100B30002CFCEA8EF0A4CDA8F08BF0A42DCC3825A7
|
||||
:100B4000F0FDE98FF0A42CCD35F0FCEB8EF0A4FE87
|
||||
:100B5000A9F0EB8FF0A4CFC5F02ECD39FEE43CFC1C
|
||||
:100B6000EAA42DCE35F0FDE43CFC2275F008758238
|
||||
:100B700000EF2FFFEE33FECD33CDCC33CCC5823327
|
||||
:100B8000C5829BED9AEC99E58298400CF582EE9B2C
|
||||
:100B9000FEED9AFDEC99FC0FD5F0D6E4CEFBE4CD4A
|
||||
:100BA000FAE4CCF9A88222B800C1B90059BA002DE4
|
||||
:100BB000EC8BF084CFCECDFCE5F0CBF97818EF2F9D
|
||||
:100BC000FFEE33FEED33FDEC33FCEB33FB10D703CC
|
||||
:100BD000994004EB99FB0FD8E5E4F9FA227818EF75
|
||||
:100BE0002FFFEE33FEED33FDEC33FCC933C910D7D4
|
||||
:100BF000059BE99A4007EC9BFCE99AF90FD8E0E4E1
|
||||
:100C0000C9FAE4CCFB2275F010EF2FFFEE33FEEDB6
|
||||
:100C100033FDCC33CCC833C810D7079BEC9AE89986
|
||||
:100C2000400AED9BFDEC9AFCE899F80FD5F0DAE468
|
||||
:100C3000CDFBE4CCFAE4C8F922D083D082F8E49367
|
||||
:100C40007012740193700DA3A393F8740193F5824D
|
||||
:100C50008883E4737402936860EFA3A3A380DFEC3E
|
||||
:100C60008EF0A4CCC5F0CCCDF8EFA4CEC5F02DFD10
|
||||
:100C7000E43CFCE8A42EC8C5F03DFDE43CFCEFA438
|
||||
:100C8000FFE5F028FEE43DFDE43CFC22EF4E60125F
|
||||
:100C9000EF60010EEDBB010B89828A83F0A3DFFCBC
|
||||
:100CA000DEFA2289F05007F709DFFCA9F022BBFE2B
|
||||
:100CB000FCF309DFFCA9F02290000BAA23A9247BF6
|
||||
:100CC000FF020A08D290900077E024FFFFE434FF8F
|
||||
:100CD000FE7C007D08120AAE74042FF58274003E7B
|
||||
:100CE000F58322FF900074E02404F582E43400F5DB
|
||||
:100CF0008322AA23A9247BFF120A08FD7C0090000E
|
||||
:100D000004120AE4FFAEF0120A47C322120BA7AB8B
|
||||
:100D100007AA06E4F9F87F407E427D0FFC120BA77C
|
||||
:100D2000E47BFFFAF9F8120B1CA804A905AA06AB8C
|
||||
:100D3000077F207ED77D757C01120BA7EFF404227C
|
||||
:100D4000E53725E0248AF582E43400F58322AE2AD3
|
||||
:100D5000AF2B7C007D1F120A598E2E8F2F7C007DB9
|
||||
:100D600005120A59C3E52F9FFDE52E9EFCD3E52908
|
||||
:100D70009DE5289C22900083E0FF90007DE06F229B
|
||||
:100D8000900009AA23A9247BFF020A0853DBFE5323
|
||||
:100D9000DAFE53F7DF53F7BF2275F005A4240EF5F2
|
||||
:100DA00082E4341EF583E4740193FA740293AE0274
|
||||
:100DB000227D64120A597C007D0A020A4790007D58
|
||||
:100DC000EFF09000887408F022C3E5379FFDE53608
|
||||
:100DD0009ED3FCE5339DE5329C2275F0FFA4FFAE67
|
||||
:100DE000F07C007D64020A59AA2EA92F7BFF900097
|
||||
:100DF00002120AE4F53785F0362275F005A4240DB9
|
||||
:100E0000F582E4341EF583E4931422E0FF90008819
|
||||
:100E1000E0FE22900088E014F0900077E004F022D9
|
||||
:100E2000E52F2FFFE52E3EFEC3E5299FE5289E22F4
|
||||
:100E3000AB48AA49A94A854D82758300020A0890E9
|
||||
:100E40000081E0D3FF900077E09F22900078E527B3
|
||||
:100E5000F0A3E528F022852F82852E83E493FA748F
|
||||
:100E60000193FB22FF900077E06F22E50EF0A3E5EF
|
||||
:100E70000FF0227C007D64020C5F540F75F002A419
|
||||
:100E8000F58285F083227B007A007929AF28AE278E
|
||||
:100E900022D3E52B9494E52A9411228E278F289053
|
||||
:100EA0000085E0146035147003020F802402600393
|
||||
:100EB000021054C290900084E06003021054AF28E6
|
||||
:100EC000AE27121C7A4003021054E4900001F01285
|
||||
:100ED0000E4B9000857401F0D29022900078E0FCD7
|
||||
:100EE000A3E0FDAE047802CEC313CE13D8F92DFFD4
|
||||
:100EF000EC3EFED3E5289FE5279E4009120E4BE409
|
||||
:100F0000900001F022AF28AE271218DE501F90008B
|
||||
:100F100001E094004017E4900074F090008874049D
|
||||
:100F2000F0E490007DF09000857402F022C3E52883
|
||||
:100F30009464E52794005003020FE6120E86121106
|
||||
:100F4000BE5020E529120D42E0FEA3E02528FFE572
|
||||
:100F5000273EC313FEEF13FFE529120D42EEF0A367
|
||||
:100F6000EFF022900001E0120D42120E4E900001AF
|
||||
:100F7000E004F0E0D3940F5003021054E402104553
|
||||
:100F8000B290AF28AE271218DE505E121CF4500546
|
||||
:100F9000E4900083F0120D75604A121D047DF47C0C
|
||||
:100FA000017F017E00121AE490007DE0900083F042
|
||||
:100FB000900088E07019120CE4C083C082E0FF90BA
|
||||
:100FC0000001E0540FFEEF4ED082D083F0800E90EF
|
||||
:100FD0000001E0C454F0440F120CE3EFF0900084E1
|
||||
:100FE000E04480F0C290E48067120E8612126450D2
|
||||
:100FF00057900088E0B40410E529C454F0120CE3C3
|
||||
:10100000EFF0E4900088F022900074E0FF120CE80A
|
||||
:10101000E0FEE529540FFDEE4DF074042F120CEAAA
|
||||
:10102000120D78FF121C4DEFF0900074E004F09068
|
||||
:1010300000887404F0900074E0D394704016121D80
|
||||
:1010400004E4900001F08008121D04E4900001F017
|
||||
:10105000900085F0228F278C288D298A2A8B2B756A
|
||||
:101060002C80E5277071E4F52D7F0112002EEF65CD
|
||||
:101070002D701B120E914054E52B9450E52A944696
|
||||
:10108000504A120D4E4045120E2050408073E52DFF
|
||||
:10109000120D998E2EF52FE52D120DFA60180470A1
|
||||
:1010A0002B120E56C002C003120DE8D003D002125C
|
||||
:1010B000110750188013120E56C002C003120DE81B
|
||||
:1010C000D003D0021211075003852D2C052DE52DDC
|
||||
:1010D000C394064094802DAF2712002E8F2D7F01E0
|
||||
:1010E00012002EEF652D701C120E914017E52B9407
|
||||
:1010F00050E52A9446500D120D4E4008120E205015
|
||||
:1011000003852D2CAF2C22AD2BAC2AAF29AE281293
|
||||
:101110001113228E308F318C328D33C2007C007DD2
|
||||
:1011200064AF03AE02120DB38F828E83AE36AF373B
|
||||
:10113000120DB1D3E58294F4E583940140050C7D52
|
||||
:10114000F48004AC83AD828C838D82D3EF94F4EE73
|
||||
:10115000940140067C017DF48004AC06AD07AE042A
|
||||
:10116000AF05D3EB9400EA94004038EB9582FDEA9A
|
||||
:101170009583FCD3E5319DE5309C403FEB2582FD16
|
||||
:10118000EA3583FCC3E5319DE5309C502E120DC934
|
||||
:101190004029E5372FFDE5363EC3120DD2501CD253
|
||||
:1011A000008018120DC94013E5372FFFE5363EFECB
|
||||
:1011B000C3E5339FE5329E5002D200A200228E2A60
|
||||
:1011C0008F2B8B2C8A2D892EC2001212645005D2CF
|
||||
:1011D00000021261E52BAE2A7803CEC313CE13D8DA
|
||||
:1011E000F9FDAC06E52BAE2A7802CEC313CE13D898
|
||||
:1011F000F92DFDEE3CFCE52AC4F854F0C868FEE584
|
||||
:101200002BC4540F482DF531EC3EF530E4F52F900A
|
||||
:101210000001E0FFE52FC39F5047C3E52B9531FF49
|
||||
:10122000E52A9530FEE52F120D42E0FCA3E0FDD348
|
||||
:101230009FEC9E4028E52B2531FFE52A3530FEC383
|
||||
:10124000ED9FEC9E5017E52E452D452C600BAB2CE9
|
||||
:10125000AA2DA92EE52F120A35D2008004052F8071
|
||||
:10126000AEA200228E328F338B348A358936C2018A
|
||||
:10127000E4F537900001E0FFE537C39F4003021318
|
||||
:1012800005E533AE327803CEC313CE13D8F9FDACE7
|
||||
:1012900006E533AE327802CEC313CE13D8F92DF55E
|
||||
:1012A00039EE3CF538120D40E0FEA3E0FFC395395E
|
||||
:1012B000EE953850028004AE38AF398E388F39122F
|
||||
:1012C0000D40E0FEA3E0FFC39539FDEE9538FCC369
|
||||
:1012D000ED9533EC95325028E5392FFFE5383EFE89
|
||||
:1012E000C3E5339FE5329E5017E5364535453460FA
|
||||
:1012F0000BAB34AA35A936E537120A35D201800581
|
||||
:101300000537021273A201224200C700004200C347
|
||||
:1013100000004200C900004200C500004100CC00AE
|
||||
:101320004100CB00011D00410084004100850041C7
|
||||
:1013300000A8004100750041007C00410076564144
|
||||
:101340000089AB410000004100820042007F0000A4
|
||||
:101350004200020000420086000042007A00004184
|
||||
:10136000008100410088004100770041007E00417B
|
||||
:101370000074004100830041007D004100010041F4
|
||||
:1013800000C0004100C1004100BE004100BF00415B
|
||||
:1013900000C2004100BD00C10300C0E0C0F0C08336
|
||||
:1013A000C082C0D075D000C000C001C002C003C060
|
||||
:1013B00004C005C006C007E5985403F55AF45298D6
|
||||
:1013C000E55A30E017121D499000C0121A52EFF092
|
||||
:1013D0009000C0E004F0E0B41402E4F0E55A30E11B
|
||||
:1013E0002E9000C2E0D39400401A9000BFE0245B2E
|
||||
:1013F000F8E6FF121D469000BFE004F09000C2E046
|
||||
:1014000014F08002D2039000BFE0B42002E4F0D0D8
|
||||
:1014100007D006D005D004D003D002D001D000D030
|
||||
:10142000D0D082D083D0F0D0E032121D4F787FE44C
|
||||
:10143000F6D8FD75817A021474020076E493A3F85D
|
||||
:10144000E493A34003F68001F208DFF48029E493DB
|
||||
:10145000A3F85407240CC8C333C4540F4420C883D2
|
||||
:101460004004F456800146F6DFE4800B01020408D4
|
||||
:1014700010204080901308E47E019360BCA3FF54C9
|
||||
:101480003F30E509541FFEE493A360010ECF54C022
|
||||
:1014900025E060A840B8E493A3FAE493A3F8E493AA
|
||||
:1014A000A3C8C582C8CAC583CAF0A3C8C582C8CAB2
|
||||
:1014B000C583CADFE9DEE780BE8F458D46E4FEFDC9
|
||||
:1014C000F547121A3F247AF582E4341EF58374013D
|
||||
:1014D00093FA7402938A48F5497FAA121BB0AF456C
|
||||
:1014E000121A3C2479F582E4341EF583E4931460E7
|
||||
:1014F0000E047019AA48A9497BFF90000B8009AA25
|
||||
:1015000048A9497BFF90000A120A08F547EEC395E7
|
||||
:1015100047500774082EFE0D80F3ED04FF121A3CAD
|
||||
:101520002478F582E4341EF583E493FF121BB0E4C3
|
||||
:10153000FEEEC39D500974042E121A2A0E80F27F0B
|
||||
:1015400055121BB0021D43E54275F005A424A2F517
|
||||
:1015500082E4341DF583740193FA740293AE028E13
|
||||
:1015600043F5442293FF7E00740493FC740593FDBD
|
||||
:10157000020A47900006E0FEA3E0FF900009E02F7A
|
||||
:10158000FF900008E03EAB07FAE4F9F822F5828EFE
|
||||
:1015900083740C93FFD3940022EF75F005A424A16B
|
||||
:1015A000F582E4341DF583E49322E493FE74019301
|
||||
:1015B000FF740293FC740393FD22E0FEA3E0FFA3FB
|
||||
:1015C000E0FCA3E0FD22E0FF7E00020A47C0E0C08D
|
||||
:1015D000F0C083C082C0D075D000C000C001C0027E
|
||||
:1015E000C003C004C005C006C007E5D85487F52174
|
||||
:1015F000F452D8E5F730E508E5F730E603121A5D56
|
||||
:1016000053F7DFE52130E708E5D930E003121D503C
|
||||
:10161000E52130E008E5DA30E003121B5DE521301A
|
||||
:10162000E108E5DB30E003120718E52130E208E5C8
|
||||
:10163000DC30E003121D51D007D006D005D004D015
|
||||
:1016400003D002D001D000D0D0D082D083D0F0D04F
|
||||
:10165000E0328B458A468947120D8C53E2FDE4F552
|
||||
:101660004DE54DC3954B504FAB45AA46A947C00326
|
||||
:10167000C002C001120E30C4120E7AD001D002D0C6
|
||||
:1016800003120AE4F54F85F04ED2801216C6AB4520
|
||||
:10169000AA46A947C003C002C001120E30120E7A3A
|
||||
:1016A000D001D002D003120AE4F54F85F04EC2807B
|
||||
:1016B0001216C6054D80AAB290AF4C154CEF709E25
|
||||
:1016C00043E202C29022FDAC4E7F0A7E00121A8EC7
|
||||
:1016D000121D2E22AE07E4F545121BA9900001E071
|
||||
:1016E00004FF121BB012174F900001E0FFE545C345
|
||||
:1016F0009F5012121A46121A2F121A46F583121A06
|
||||
:1017000036054580E3900078E0FF121BB09000782A
|
||||
:10171000121A3612174FE4F545900074E02401FFC9
|
||||
:10172000E433FEC3E5459FEE6480F874809850175B
|
||||
:1017300074042545121A2A0545E545541F70DA122E
|
||||
:101740001D43121D3C80D27F55121BB0021D431257
|
||||
:101750001D43121D3C228E458F468C478D48AE029C
|
||||
:10176000AF03120E73C007AF4BAB07E4FAF9F8D022
|
||||
:1017700007120D0C900000F0AE4CAF4D120E73C06E
|
||||
:1017800007AF4EAB07E4FAF9F8D007120D0C900042
|
||||
:1017900082F0E54B120DDA900076EFF0E54E120D77
|
||||
:1017A000DA900089EFF090007FE545F0A3E546F080
|
||||
:1017B000900002E547F0A3E548F0900081E54FF086
|
||||
:1017C00043DA0153F7DF43F74053DBFE75F9FF229D
|
||||
:1017D0008A498B4A755380120D8C53E2FD90007F2D
|
||||
:1017E000EEF0A3EFF0900002ECF0A3EDF0121B3648
|
||||
:1017F000E4F552E552C395515032120CE4E05553D2
|
||||
:10180000600AAD50AC4FAF4EAE4D8008AD4CAC4B06
|
||||
:10181000AF4AAE49121BCCE553C313F55370099080
|
||||
:101820000074E004F0755380055280C743E202C2A1
|
||||
:10183000909000857404F022C0E0C083C082C0D0C4
|
||||
:1018400075D000C004C005C006C00753C87F900013
|
||||
:10185000C7E0FEA3E0FF4E700353C8FB9000C31225
|
||||
:1018600019AC50099000C7E4F0A3F0800DC39000BC
|
||||
:10187000C8E09DF09000C7E09CF0D007D006D005EE
|
||||
:10188000D004D0D0D082D083D0E032C0E0C083C0BA
|
||||
:1018900082C0D075D000C004C005C006C0075391F7
|
||||
:1018A0007F9000C9E0FEA3E0FF4E70035391FB90D0
|
||||
:1018B00000C51219AC50099000C9E4F0A3F0800DE6
|
||||
:1018C000C39000CAE09DF09000C9E09CF0D007D022
|
||||
:1018D00006D005D004D0D0D082D083D0E032AB0780
|
||||
:1018E000AA06900078E0FEA3E0FF7C00120DB1D3C1
|
||||
:1018F000EF94F4EE940140050C7DF48004AC06AD49
|
||||
:1019000007AE04AF05C3900079E09FFD900078E03A
|
||||
:101910009EFCC3ED9BEC9A5013A3E02FFF90007840
|
||||
:10192000E03EFEC3EB9FEA9E50028001C322AE0759
|
||||
:10193000E4FDF545121BA9900002E0FF121BB090D8
|
||||
:101940000002121A3690007AE0FF121BB090007A63
|
||||
:10195000121A36900086E0FF121BB0900086121A11
|
||||
:101960003674042D121A2A0DBD03F67F55121BB0D2
|
||||
:10197000021D43AB07AA06E4F9F87F407E427D0FC3
|
||||
:10198000FC120BA7A804A905AA06AB077F207ED7E7
|
||||
:101990007D757C01120BA7C3E49FFFE49EFE22AB82
|
||||
:1019A00007AA06E4F9F87FE87E03FD22E0FCA3E045
|
||||
:1019B000FDC3EF9DEE9C228F4590007CE0F5467FB5
|
||||
:1019C0000B121D4C43DB01120D8F1200707D0A7C3F
|
||||
:1019D000007F017E00121B0D121D2E43E202E490D7
|
||||
:1019E0000085F0900084F09000CBE545F090007CFD
|
||||
:1019F000F0AF46229000C0E0FF9000BEE0B50705C2
|
||||
:101A00007E017F00229000BE121A52E0FD7C009001
|
||||
:101A100000BEE004F0E0B41402E4F09000BDE0FE8B
|
||||
:101A2000EE4204E4F0AE04AF0522F582E43400F5A2
|
||||
:101A300083E0FF021BB0A3E0FF021BB0121BB0E566
|
||||
:101A40004675F005A422E54525E0248AF582E434B4
|
||||
:101A50000022E024A9F582E43400F58322120E3F2F
|
||||
:101A60004003021C2F120CE4120E0BEFA806088094
|
||||
:101A700002C313D8FC30E00B900000E0FF121D4CB5
|
||||
:101A8000D29022900082E0FF121D4CC290228E560E
|
||||
:101A90008F578C588D59121973121C94E55924BF15
|
||||
:101AA0009000CAF0E55834FF9000C9F09000C5E5F9
|
||||
:101AB00056F0A3E557F04391042212002A121D0BA1
|
||||
:101AC000121D12121CC3121D34121C64121CE112CE
|
||||
:101AD0001CCD121CD7121CA0121D19121D20121D84
|
||||
:101AE00038021D278E2A8F2B8C2C8D2D12199F12B8
|
||||
:101AF0001980121C889000C7E52CF0A3E52DF0900A
|
||||
:101B000000C3E52AF0A3E52BF043C804228E478FDB
|
||||
:101B1000488C498D4A12199F121980121C9490000A
|
||||
:101B2000C9E549F0A3E54AF09000C5E547F0A3E513
|
||||
:101B300048F043910422D290D28090007F121B5033
|
||||
:101B4000121D2EC290C280900002121B50021D2E48
|
||||
:101B5000E0FCA3E0FD7F0A7E00121A8E229000882E
|
||||
:101B6000E07008900074E004120DC1120E1990008C
|
||||
:101B700088E014F0120E3F5003021B8253E2FDC2B4
|
||||
:101B80008022120CE4120E0BEFA806088002C31389
|
||||
:101B9000D8FC30E0059000768003900089E07D005D
|
||||
:101BA000FCE4FF121C1122AE077FAA121BB0AF0685
|
||||
:101BB000C2039000C1E0B42002E4F09000C1E02430
|
||||
:101BC0005BF8A607E004F0A3E004F0228C548D55E6
|
||||
:101BD000D280AD07AC067F0A7E00121A8E121D2E2F
|
||||
:101BE000C280AD55AC547F0A7E00121A8E021D2EA3
|
||||
:101BF000120DC2E014F09000777401F0900085742B
|
||||
:101C000003F0121B8253E2FD121B3643E202020074
|
||||
:101C100070AB07AF04EB14600C14600E2402700E5E
|
||||
:101C20008DFB8FFC228DE98FEA228DEB8FEC22E475
|
||||
:101C3000FDFCFF121C11120D8F121D4053D878535A
|
||||
:101C4000E2FDC280C2909000857404F0227E1DE403
|
||||
:101C5000FDEF30E70625E06EFF8004EF25E0FF0D85
|
||||
:101C6000BD08EE22AF885388AF758CA0758DCBEF81
|
||||
:101C70005440FEEF54104E428822C3EF94ACEE94D1
|
||||
:101C80000D4003D38001C322AD07AC06ECF5CBAF0A
|
||||
:101C9000058FCA22AD07AC06ECF593AF058F9222F3
|
||||
:101CA000C2DE75D90575F9FF75960122EE30E7079A
|
||||
:101CB000C3E49FFFE49EFE22121BA77F55121BB0B8
|
||||
:101CC000021D4375E34075E10175E20222E591547E
|
||||
:101CD000045391FB429122758E547589224388509A
|
||||
:101CE00022E5C8540453C8FB42C82253984FEB4F17
|
||||
:101CF0004DF59822E5C8C320E201D322E591C32027
|
||||
:101D0000E201D32253C8FB53C87F2275A41175D4B6
|
||||
:101D1000CE2275A54175D5772253F77F75DA4A2211
|
||||
:101D200053F77F75DB302275E69075A8B022E591F8
|
||||
:101D300020E2FB22E4F5A922439810223003FD2281
|
||||
:101D4000C2DE22D299228F9922AF99228F8C222231
|
||||
:101D500022220190307000064001904B19180012A9
|
||||
:101D6000C005DC0002BC012C461E28080BB8232845
|
||||
:101D700000044C01904B191800251C0BB80003847B
|
||||
:101D80000140461E1800000072D80702BC012C2634
|
||||
:101D90004040000BB81C520190010303011846009B
|
||||
:101DA0000100FF1D520200FF1D5F0300FF1D6C04B8
|
||||
:101DB00000FF1D790500FF1D860601FF1D930190A0
|
||||
:101DC000307000064001904B19180012C005DC006D
|
||||
:101DD00002BC012C461E28080BB8232800044C0125
|
||||
:101DE000904B191800251C0BB80003840140461EB7
|
||||
:101DF0001800000072D80702BC012C264040000BDE
|
||||
:101E0000B81C520190010303011846000100FF1D98
|
||||
:101E1000BE0200FF1DCB0300FF1DD80400FF1DE51F
|
||||
:101E20000500FF1DF20601FF1DFF01903070000646
|
||||
:101E30004001904B19180012C005DC0002BC012CB7
|
||||
:101E4000461E28080BB8232800044C01904B191893
|
||||
:101E500000251C0BB80003840140461E180000003A
|
||||
:101E600072D80702BC012C264040000BB81C52015E
|
||||
:101E700090010303011846000100FF1E2A0200FF23
|
||||
:101E80001E370300FF1E440400FF1E510500FF1E05
|
||||
:061E90005E0601FF1E6B5F
|
||||
:00000001FF
|
|
@ -0,0 +1,452 @@
|
|||
:020000040000FA
|
||||
:1000000002135C7E1DE4FDEF30E70625E06EFF8005
|
||||
:1000100004EF25E0FF0DBD08EE2253984FEB4F4D46
|
||||
:10002000F598220212CC7597A522220216418E590C
|
||||
:100030008F5A8C5B8D5C121807121A3EE55C24BF48
|
||||
:100040009000D8F0E55B34FF9000D7F09000D3E546
|
||||
:1000500059F0A3E55AF043910422220213EB121A3D
|
||||
:10006000CF53D87853DAFE121A9AE4900080F02227
|
||||
:10007000D2DE22021694D202121972C290C296C225
|
||||
:1000800080E4FBFD7F1012001A12066274A4F0D205
|
||||
:10009000AFE4F53CF53DD296053DE53D7002053CEB
|
||||
:1000A000B410F3E53CB427EEC296120026300209E4
|
||||
:1000B0001218C28E3F8F408006753F01754000E5E3
|
||||
:1000C000407004E53F640170409000BCE07007F5AB
|
||||
:1000D0003CF53D020293053DE53D7002053CD3949D
|
||||
:1000E00010E53C94274002D296D3E53D9430E53CA0
|
||||
:1000F00094755003020293E4F53CF53D9000BCF08A
|
||||
:100100009000A3F0C296020293E4F53CF53D900006
|
||||
:10011000BCE014602A14700302026514700302022A
|
||||
:100120002314700302023924046003020293E540A1
|
||||
:1001300064AA60030202939000BC04F0020293E5FB
|
||||
:10014000409000A3F09000BC7402F0E540120B4018
|
||||
:10015000020DA00175A10185A501A9A601BFA701F6
|
||||
:10016000C8A801E4A901CBB001D4B1019AC002939F
|
||||
:10017000FF0000021812061BE49000A2F090007429
|
||||
:10018000F07FA1807212005E9000BC7404F0753E96
|
||||
:1001900008E4F5427541090202939000BC7404F032
|
||||
:1001A000E4F5427541020202939000A27480F0E4EB
|
||||
:1001B000900074F07FA612069274A6F002029312C9
|
||||
:1001C000066274A4F0020293753E089000BC7403AA
|
||||
:1001D000F00202939000747401F07FB1120692EF66
|
||||
:1001E000F002029312061B9000A2E0F53B7480F02F
|
||||
:1001F000E4900074F07FA912188B90007AEFF07DE4
|
||||
:10020000307C757F017E0012192102029312067460
|
||||
:1002100090007AEFF0E48005E49000A3F09000BC39
|
||||
:10022000F08070E4F542E540F541E541D39400905B
|
||||
:1002300000BC402C7404F0805A74032542F582E41B
|
||||
:100240003400F583E540F00542E542B541059000F4
|
||||
:10025000BC800DE542C3947040397541709000BC7C
|
||||
:100260007402F0802EE540645570289000BCF0C206
|
||||
:10027000029000A3E02460601824FC600F24FE605C
|
||||
:100280000B14600824F66004241070077FA0121A73
|
||||
:1002900025D2029000A3E0120B4002BCA102E6A40A
|
||||
:1002A00002F8A50399A603B3A8055EA90595B006B3
|
||||
:1002B00004B10366C00387FF000000AA90007FE03E
|
||||
:1002C00030E70F7DC87C0012064B7FA31217C202D5
|
||||
:1002D0000578121A9240030200AA7DE87C031206F8
|
||||
:1002E0004B7FA20205FC90007FE020E7030200AAFA
|
||||
:1002F0007FA41217C20203AB9000BCE060030200AF
|
||||
:10030000AA12176A6043240360030200AA153E1272
|
||||
:10031000005E900005E0FAA3E0FBFFAE0212176159
|
||||
:10032000900007E0F8A3E0888385834BF54C858334
|
||||
:100330004DF54E900005E0F54FA3E0F550E4F55182
|
||||
:10034000755218755306020534E53E601112177197
|
||||
:10035000500302054E12067D121ABD02054E12060A
|
||||
:10036000747FA00205FC9000BCE060030200AA12AA
|
||||
:1003700017617F017E00121921D296121ABDC29612
|
||||
:100380007FA0121A25800A7F02121A25E49000BC71
|
||||
:10039000F0D2021206890200AA90007FE020E70353
|
||||
:1003A0000200AA547FFD7FA61216E7E490007FF0BA
|
||||
:1003B0000200AA9000BCE060030200AA12176A7053
|
||||
:1003C0000302053A240360030200AA900003E0FF41
|
||||
:1003D000248070057543FF80028F43153E12005E36
|
||||
:1003E000900003E06480600302046EA3E0FCA3E0DD
|
||||
:1003F000FD900008E0FAA3E0FBFFAE02120991C0F5
|
||||
:1004000006C007900006E0FCA3E0FDAF03AE0212B9
|
||||
:100410000991C006C00790000AE0FF7E0090000826
|
||||
:10042000E0FCA3E0FD120991C006C00790000B128A
|
||||
:10043000175AC007C00690000C12175AAA06AB073D
|
||||
:1004400090000D12175A8E4F8F508A4D8B4ED04B05
|
||||
:10045000D04C90000EE0F551A3E0F55275530DD04D
|
||||
:1004600003D002D005D004D007D006020534E543FE
|
||||
:10047000F470030205C012175324E2F582E4341A23
|
||||
:10048000F583E493FF7E0012175324E5F582E434EC
|
||||
:100490001AF583E493FA740193FDAC02120991C03A
|
||||
:1004A00006C00712175324E3F582E4341AF583E4F7
|
||||
:1004B0009312175BC006C00712175324E7F582E4B6
|
||||
:1004C000341A121733C006C00712175324E8F582F6
|
||||
:1004D000E4341A121733C007C00612175324E9F583
|
||||
:1004E00082E4341A121733AA06AB0712175324EA10
|
||||
:1004F000F582E4341A12173312175324E4F582E418
|
||||
:10050000341AF583E493FD12175324EBF582E43497
|
||||
:100510001AF583E493F5528D518E4F8F508A4D8B8F
|
||||
:100520004ED04BD04C755301D003D002D005D0042F
|
||||
:10053000D007D00612156C0200AAE53E6018E5430C
|
||||
:10054000F4600B121771400612067D121ABDE4907A
|
||||
:100550000080F00200AA1206897FA00205FC90002C
|
||||
:100560007FE030E71D7DC87C0012062E90007FE002
|
||||
:10057000547FFD7FAB1216E7E490007FF0D20202B9
|
||||
:1005800000AA121A9240030200AA7DE87C03120618
|
||||
:100590002E7FAA8067900003E025E0F5449000BC20
|
||||
:1005A000E060030200AA12176A6047240360030296
|
||||
:1005B00000AA12005EE5446007E541C394045008B8
|
||||
:1005C000E49000A3F00200AA74052544F9E4340085
|
||||
:1005D000754801F549894AC3E541954424FEF54B28
|
||||
:1005E000900004E0F54C7B017A0079051215DE02DB
|
||||
:1005F00000AA90007AE0FF12188B7FA0121A25D271
|
||||
:10060000020200AA90007FE020E7030200AA7FB167
|
||||
:10061000121470E490007FF00200AA7D327C007F0B
|
||||
:10062000017E00121921D296121ABDC296227F01B4
|
||||
:100630007E00121921D296121ABDC2969000A2E530
|
||||
:100640003BF090007AE0FF12188B227F017E0012AF
|
||||
:100650001921D296121ABDC29690007AE0FF1218A4
|
||||
:100660008B22E49000A2F0900074F07FA412188B0B
|
||||
:1006700090007A2290007AE0FF12188B22EFFD7C26
|
||||
:10068000007F017E001219212290007AE0FF1218EB
|
||||
:100690008B2212188B90007A228C228D238A248B35
|
||||
:1006A00025AE07900080E014607F046003020921FA
|
||||
:1006B00090007FE06003020921C3E5239414E52242
|
||||
:1006C0009405500EC3E5259414E5249405500302C7
|
||||
:1006D00009219000A2E0FFAD0685242C85252DABD5
|
||||
:1006E00023AA2212184B90007DEFF0648070030261
|
||||
:1006F0000921900001E524F0A3E525F09000837422
|
||||
:1007000008F0E4900075F090007CF0F508F509FE23
|
||||
:100710007F70FD7B017A007903120B66E490007B09
|
||||
:10072000F0D29090008004F02290007DE0FD75F002
|
||||
:100730000DA42454F582E4341B120D82FC74019341
|
||||
:10074000120E4C90007DE075F00DA4244CF582E46F
|
||||
:10075000341BF583E493FFD39400400B90007CE0BE
|
||||
:100760009F5004E004F02290007DE0F96053FD12F8
|
||||
:100770000E94120D82120EB59000C1120DF7245086
|
||||
:10078000F582E4341B120E021209919000C3120D7F
|
||||
:10079000F72451F582E4341BF583E493FFE9120D4D
|
||||
:1007A00088120EB59000C5120DF72452F582E4347C
|
||||
:1007B0001B120E021209919000C7EEF0A3EFF08019
|
||||
:1007C0003E900078E0FEA3E0FF9000C1EEF0A3EFC2
|
||||
:1007D000F0900081E0FCA3E0FD9000C3ECF0A3EDFD
|
||||
:1007E000F0A3ECF0A3EDF0A3120DF72454F582E48E
|
||||
:1007F000341B120E02900078E0FCA3E0120E4C9025
|
||||
:100800000083E014F0900075E004F0AE22AF23E422
|
||||
:10081000FCFD9000C9120B34AE24AF25E4FCFD9022
|
||||
:1008200000CD120B34120E5C9000C1120922500E42
|
||||
:100830009000CD120E5F9000C3120922400CC3122B
|
||||
:100840000EA05020120D9AB5071A900078E522F0FC
|
||||
:10085000A3E523F0C290D3120EA2406A8522088538
|
||||
:1008600023098062120E5C9000C512093A500E9066
|
||||
:1008700000CD120E5F9000C712093A400CD3120E41
|
||||
:10088000A04033120D9A6F702D900081E522F0A3E5
|
||||
:10089000E523F0D290120DDAC083C082E0FF900011
|
||||
:1008A00083E0FE7401A806088002C333D8FC4FD051
|
||||
:1008B00082D083F08010E490007FF0C290A3F0908B
|
||||
:1008C000007D7480F022900083E07012120DDA1225
|
||||
:1008D0000E33FF120003EFF09000837408F0120D46
|
||||
:1008E0009A6F703D121A8A5005E490007EF0120E45
|
||||
:1008F000306027121A9A7D207C037F017E00121837
|
||||
:10090000F890007BE090007EF090007DE090007F0A
|
||||
:10091000F04480F090007D7480F0C290E4900080FC
|
||||
:10092000F022FFE0FCA3E0FDC3EF9DFFEE9CFE1272
|
||||
:100930001A56C3EF9527EE952622FFE0FCA3E0FDB3
|
||||
:10094000C3EF9DFFEE9CFE121A56C3EF9527EE955E
|
||||
:100950002622BB010CE58229F582E5833AF583E086
|
||||
:10096000225006E92582F8E622BBFE06E92582F838
|
||||
:10097000E222E58229F582E5833AF583E49322BBFE
|
||||
:10098000010689828A83F0225002F722BBFE01F31E
|
||||
:1009900022EF8DF0A4A8F0CF8CF0A428CE8DF0A487
|
||||
:1009A0002EFE22BC000BBE0029EF8DF084FFADF0BF
|
||||
:1009B00022E4CCF875F008EF2FFFEE33FEEC33FCA9
|
||||
:1009C000EE9DEC984005FCEE9DFE0FD5F0E9E4CEDF
|
||||
:1009D000FD22EDF8F5F0EE8420D21CFEADF075F0AE
|
||||
:1009E00008EF2FFFED33FD4007985006D5F0F222B7
|
||||
:1009F000C398FD0FD5F0EA22C2D5EC30E709B2D595
|
||||
:100A0000E4C39DFDE49CFCEE30E715B2D5E4C39F42
|
||||
:100A1000FFE49EFE1209A3C3E49DFDE49CFC800359
|
||||
:100A20001209A330D507C3E49FFFE49EFE22BB0159
|
||||
:100A300010E58229F582E5833AF583E0F5F0A3E03D
|
||||
:100A4000225009E92582F886F008E622BBFE0AE971
|
||||
:100A50002582F8E2F5F008E222E5832AF583E9939E
|
||||
:100A6000F5F0A3E9932275F008758200EF2FFFEEF1
|
||||
:100A700033FECD33CDCC33CCC58233C5829BED9ACA
|
||||
:100A8000EC99E58298400CF582EE9BFEED9AFDEC28
|
||||
:100A900099FC0FD5F0D6E4CEFBE4CDFAE4CCF9A86E
|
||||
:100AA0008222B800C1B90059BA002DEC8BF084CF76
|
||||
:100AB000CECDFCE5F0CBF97818EF2FFFEE33FEED4D
|
||||
:100AC00033FDEC33FCEB33FB10D703994004EB9977
|
||||
:100AD000FB0FD8E5E4F9FA227818EF2FFFEE33FE8A
|
||||
:100AE000ED33FDEC33FCC933C910D7059BE99A40BF
|
||||
:100AF00007EC9BFCE99AF90FD8E0E4C9FAE4CCFBD7
|
||||
:100B00002275F010EF2FFFEE33FEED33FDCC33CC2A
|
||||
:100B1000C833C810D7079BEC9AE899400AED9BFDB3
|
||||
:100B2000EC9AFCE899F80FD5F0DAE4CDFBE4CCFAC6
|
||||
:100B3000E4C8F922ECF0A3EDF0A3EEF0A3EFF0226D
|
||||
:100B4000D083D082F8E4937012740193700DA3A344
|
||||
:100B500093F8740193F5828883E473740293686058
|
||||
:100B6000EFA3A3A380DFEF4E6012EF60010EEDBB99
|
||||
:100B7000010B89828A83F0A3DFFCDEFA2289F05020
|
||||
:100B800007F709DFFCA9F022BBFEFCF309DFFCA993
|
||||
:100B9000F0228E228F23900080E014604A147003AC
|
||||
:100BA000020C6F24026003020D4DC29090007FE0A2
|
||||
:100BB0006003020D4DAF23AE22121A174003020D3F
|
||||
:100BC0004DE4F524E524120D51E4F0A3F00524E5ED
|
||||
:100BD00024B40FF0E4900000F0F524120E709000A1
|
||||
:100BE000807401F0D29022900076E0FCA3E0FDAE8C
|
||||
:100BF000047802CEC313CE13D8F92DFFEC3EFED3FA
|
||||
:100C0000E5239FE5229E4009120E70E4900000F05B
|
||||
:100C100022AF23AE2212177B501F900000E09400F9
|
||||
:100C20004017E4900073F09000837404F0E49000A7
|
||||
:100C30007BF09000807402F022C3E5239464E522E7
|
||||
:100C400094005003020D3E120EBF1210E05003023A
|
||||
:100C50000D4D900000E0120D51120E73900000E057
|
||||
:100C600004F0E0D3940F5003020D4DE4020D48B29E
|
||||
:100C700090120EBF12122A5059900083E0B4041053
|
||||
:100C8000E524C454F0120D73EFF0E4900083F022D9
|
||||
:100C9000900073E0FF120D78E0FEE524540FFDEEA6
|
||||
:100CA0004DF074032F120D7A120E33FF120003EF72
|
||||
:100CB000F0900073E004F09000837404F0900073EF
|
||||
:100CC000E0D394705003020D4D121A9AE490000084
|
||||
:100CD0008076AF23AE2212177B5066121A8A500517
|
||||
:100CE000E490007EF0120E306052121A9A7DF47C6D
|
||||
:100CF000017F017E001218F890007BE090007EF0EA
|
||||
:100D0000900083E07019120D74C083C082E0FF90E0
|
||||
:100D10000000E0540FFEEF4ED082D083F0800E90A2
|
||||
:100D20000000E0C454F0440F120D73EFF090007314
|
||||
:100D3000E0FF120EDB90007FE04480F0C290E48080
|
||||
:100D400008121A9AE4900000F0900080F022FCE56E
|
||||
:100D50002A25E02484F582E43400F583228E398F3D
|
||||
:100D60003AE53075F00DA4244BF582E4341BF5838D
|
||||
:100D7000E49322FF900073E02403F582E43400F54D
|
||||
:100D80008322F583E493FFED7E0075F00DA4244DDE
|
||||
:100D9000F582E4341BF583E4932290007DE075F046
|
||||
:100DA0000DA42453F582E4341BF583E493FF9000F3
|
||||
:100DB00075E0227C007D641209A37C007D0A120983
|
||||
:100DC00091D3EF94F4EE940122EF75F00DA4245624
|
||||
:100DD000F582E4341BF583E49322900075E024FF50
|
||||
:100DE000FFE434FFFE7C007D081209F874032FF540
|
||||
:100DF0008274003EF58322EEF0A3EFF0E975F00D6A
|
||||
:100E0000A422F583E493FF7E0022E4F9C3ED9BF571
|
||||
:100E100082EC9AF583D3EF9582EE958322FFE5303D
|
||||
:100E200075F00DA4244AF582E4341BF583E4932283
|
||||
:100E300090007EE0FF90007BE06F22E0FCA3E0FDED
|
||||
:100E4000EC547FFAD3ED9400EA940022FD1209914C
|
||||
:100E50007C007D641209A38E268F27229000C9A3EF
|
||||
:100E6000A3E0FEA3E022FF7E00AC37AD380209917B
|
||||
:100E7000900076E522F0A3E523F022852C34852D21
|
||||
:100E800035AB2BAA2AAD2922ED2BFDEC3AFCC3EFA2
|
||||
:100E90009DEE9C2275F00DA4244FF582E4341B22B4
|
||||
:100EA000E5239509E522950822540F75F002A4F573
|
||||
:100EB0008285F08322FA740193FDAC020209917BD2
|
||||
:100EC000007A007924AF23AE2222E0FEA3E0FFC324
|
||||
:100ED00022EC4480AF05F0A3EFF0228F25E4F52744
|
||||
:100EE000F526E5252401FFE433FEC3E5269FEE64E5
|
||||
:100EF00080F8748098503974032526120D7AE0C466
|
||||
:100F0000540FFF120D51120E3B4007EF120D5112FC
|
||||
:100F10000ED174032526120D7AE0540FFF120D51E5
|
||||
:100F2000120E3B4007EF120D51120ED1052680B272
|
||||
:100F3000E4F526900000E0FFE526C39F4003020F82
|
||||
:100F4000F7E526120D51E030E703020FE9AF2690D6
|
||||
:100F50000000E0FEEFC39E4003020FE5EF25E02412
|
||||
:100F600086F582E43400F583E0FCA3E0FDEF120D8A
|
||||
:100F700051ECF0A3EDF0E4FEE5252401FDE433FCA3
|
||||
:100F8000EEC39DEC6480F8748098505574032E1263
|
||||
:100F90000D7AE0F9C4540FFDEF2401FBE433FAEDC0
|
||||
:100FA000B50316E4B50212E9540FFDEFC454F04D39
|
||||
:100FB000FD74032E120D7AEDF0EF2401FDE433FCF5
|
||||
:100FC00074032E120D7AE0F9540FB50511E4B5043F
|
||||
:100FD0000DE954F04FFD74032E120D7AEDF00E80E2
|
||||
:100FE000970F020F4F05278009E526120D51E05497
|
||||
:100FF0007FF00526020F33900000E0C39527F02212
|
||||
:101000008F30E4F536120DC96D6003AF3622E5303E
|
||||
:101010007028120D61120E1DFED39F400AEEFD7C5A
|
||||
:1010200000AF03AE02800A120D61FD7C00AE34AF4A
|
||||
:10103000351209A38E378F38800CE530120D8AF5F2
|
||||
:1010400037740193F538120D61120E1DD39F402E97
|
||||
:101050007C007D64AF03AE02120DB740070C7E0129
|
||||
:101060007FF48000120D5D120E66AC06AD07AF0373
|
||||
:10107000AE02AB3AAA391219FBEF602D8028AE34CC
|
||||
:10108000AF35120DB340070C7E017FF48000120DC6
|
||||
:101090005D120E66AC06AD07AB3AAA39AF35AE3479
|
||||
:1010A000121A09EF6003753601E5366401702EE50A
|
||||
:1010B00030120E94120E02120E69900078EEF0A318
|
||||
:1010C000EFF0E53075F00DA42451F582E4341B12E5
|
||||
:1010D0000E02120991900081EEF0A3EFF0AF3622DC
|
||||
:1010E0008E258F268B278A288929C20012122A5022
|
||||
:1010F00005D200021184E4F52A900000E0FFE52A01
|
||||
:10110000C39F4003021184120D4FE0FCA3E0FDAE2B
|
||||
:10111000047803CEC313CE13D8F9FBAA06EDAE04B0
|
||||
:101120007802CEC313CE13D8F92BFDEE3A120D4E32
|
||||
:10113000E0C4F854F0C868FEA3E0C4540F482DFF83
|
||||
:10114000EC3EFEC3E5269FFDE5259E120D4EE0FA1E
|
||||
:10115000A3E0FBD39DEA9C4026E5262FFFE5253E34
|
||||
:10116000FEC3EB9FEA9E5017E52945284527600BF3
|
||||
:10117000AB27AA28A929E52A12097FD200800505F4
|
||||
:101180002A0210F9A20022AFFBAEFC7C007D0A12FD
|
||||
:1011900009919000BFEEF0A3EFF09000BF120ECACD
|
||||
:1011A0009464EE9400500302122930933B8E0A8F10
|
||||
:1011B0000BC3EF950DF511EE950CF510900074E052
|
||||
:1011C00014601F04706390007DE0FF64806007126C
|
||||
:1011D0000DC964016053AB11AA10AD0FAC0EE4FF52
|
||||
:1011E000803DAF11AE10803E9000BFE0FEA3E08EC8
|
||||
:1011F0000CF50DC3950BF50FEE950AF50E900074E6
|
||||
:10120000E014601E04702290007DE0FF64806005A1
|
||||
:10121000120DC96014AB0FAA0EAD11AC107F010204
|
||||
:101220000699AF0FAE0E120B92228E2B8F2C8B2DA8
|
||||
:101230008A2E892FC201E4F530900000E0FFE530EE
|
||||
:10124000C39F40030212C9E52CAE2B7803CEC31313
|
||||
:10125000CE13D8F9FDAC06E52CAE2B7802CEC31325
|
||||
:10126000CE13D8F92DF532EE3CF531E530120D51A3
|
||||
:10127000120ECA9532EE953150028004AE31AF3273
|
||||
:101280008E318F32E530120D51120ECA9532FDEEBD
|
||||
:101290009531FCC3ED952CEC952B5028E5322FFFB2
|
||||
:1012A000E5313EFEC3E52C9FE52B9E5017E52F450B
|
||||
:1012B0002E452D600BAB2DAA2EA92FE53012097FEC
|
||||
:1012C000D20180050530021239A20122C0E0C0F02F
|
||||
:1012D000C083C082C0D075D000C000C001C002C0B1
|
||||
:1012E00003C004C005C006C007E5985403F55DF4CB
|
||||
:1012F0005298E55D30E017121AD89000BB1219B56C
|
||||
:10130000EFF09000BBE004F0E0B41402E4F0E55D1F
|
||||
:1013100030E12E9000BEE0D39400401A9000BAE075
|
||||
:10132000245EF8E6FF121AD59000BAE004F09000AF
|
||||
:10133000BEE014F08002D2039000BAE0B42002E4D0
|
||||
:10134000F0D007D006D005D004D003D002D001D011
|
||||
:1013500000D0D0D082D083D0F0D0E03212005A78C2
|
||||
:101360007FE4F6D8FD75817D0213A6020076E49332
|
||||
:10137000A3F8E493A34003F68001F208DFF4802988
|
||||
:10138000E493A3F85407240CC8C333C4540F442077
|
||||
:10139000C8834004F456800146F6DFE4800B010266
|
||||
:1013A0000408102040809014F2E47E019360BCA3F6
|
||||
:1013B000FF543F30E509541FFEE493A360010ECFB4
|
||||
:1013C00054C025E060A840B8E493A3FAE493A3F8DE
|
||||
:1013D000E493A3C8C582C8CAC583CAF0A3C8C5829E
|
||||
:1013E000C8CAC583CADFE9DEE780BEC0E0C0F0C07E
|
||||
:1013F00083C082C0D075D000C000C001C002C0034D
|
||||
:10140000C004C005C006C007E5D85487F521F452D2
|
||||
:10141000D8E5F730E508E5F730E603121ADF53F7B1
|
||||
:10142000DFE52130E708E5D930E003121ADEE521D7
|
||||
:1014300030E008E5DA30E003121187E52130E108F9
|
||||
:10144000E5DB30E003121AE0E52130E208E5DC30AC
|
||||
:10145000E003121AE1D007D006D005D004D003D0A3
|
||||
:1014600002D001D000D0D0D082D083D0F0D0E032F2
|
||||
:10147000AE07E4F545121999900000E004FF121937
|
||||
:10148000C91214EB900000E0FFE545C39F50121213
|
||||
:1014900019A91219C51219A9F5831219A3054580B6
|
||||
:1014A000E3900076E0FF1219C99000761219A3129A
|
||||
:1014B00014EBE4F545900073E02401FFE433FEC330
|
||||
:1014C000E5459FEE6480F8748098501774032545B5
|
||||
:1014D0001219C00545E545541F70DA121AD2121AC6
|
||||
:1014E000CB80D27F551219C9021AD2121AD2121AFF
|
||||
:1014F000CB224200D500004200D100004200D700BC
|
||||
:10150000004200D3000041007F0041008000410004
|
||||
:10151000A2804100740041007D8041007A004200B9
|
||||
:101520000100004200810000420078000041008379
|
||||
:10153000004100750041007C004100730041007EC5
|
||||
:101540000041007B00410000004100BB004100BDA4
|
||||
:10155000004100B9004100BA004100BE004100B89E
|
||||
:1015600000C1034100BC004100A300008A498B4A2E
|
||||
:1015700085535575568012194AE551D39400401988
|
||||
:10158000E4F554E554C39551500FAD50AC4FAF4EF8
|
||||
:10159000AE4D12194A055480EAE4F554E554C3955A
|
||||
:1015A00052503274032555120D7AE05556600AAD3B
|
||||
:1015B00050AC4FAF4EAE4D8008AD4CAC4BAF4AAEC9
|
||||
:1015C0004912194AE556C313F55670050555755667
|
||||
:1015D00080055480C7C2909000807403F0228B4530
|
||||
:1015E0008A468947E4F54DE54DC3954B5043AB45DD
|
||||
:1015F000AA46A947C003C002C001AB48AA49A94AEC
|
||||
:10160000854D82758300120952FDC4120EA9D001C6
|
||||
:10161000D002D003120A2EFFAEF0AB45AA46A9476E
|
||||
:10162000ED120EA9120A2EFDACF012194A054D80DA
|
||||
:10163000B6AF4C154CEF70ACC2909000807403F0C4
|
||||
:1016400022C0E0C083C082C0D075D000C004C005F5
|
||||
:10165000C006C00753C87F9000D5E0FEA3E0FF4E50
|
||||
:10166000700353C8FB9000D112184050099000D568
|
||||
:10167000E4F0A3F0800DC39000D6E09DF09000D57B
|
||||
:10168000E09CF0D007D006D005D004D0D0D082D0D6
|
||||
:1016900083D0E032C0E0C083C082C0D075D000C02B
|
||||
:1016A00004C005C006C00753917F9000D7E0FEA399
|
||||
:1016B000E0FF4E70035391FB9000D3121840500985
|
||||
:1016C0009000D7E4F0A3F0800DC39000D8E09DF027
|
||||
:1016D0009000D7E09CF0D007D006D005D004D0D041
|
||||
:1016E000D082D083D0E032AE05AD07E4FCFB7FAA08
|
||||
:1016F0001219C9AF051219C9EE75F00DA424BBF576
|
||||
:1017000082E4341BF583E493FFECC39F5007740815
|
||||
:101710002CFC0B80F4EB04FF12199BE4FCECC39B44
|
||||
:10172000500974032C1219C00C80F27F551219C98C
|
||||
:10173000021AD2F583E493FF7E00E54375F00DA411
|
||||
:1017400024E5F582E4341AF583E493FC740193FDF7
|
||||
:10175000020991E54375F00DA422E0FF7E00020925
|
||||
:1017600091900003E0FCA3E0FD22900080E024FDC6
|
||||
:1017700022901AEDE493FFD3940022AB07AA0690BF
|
||||
:101780000076E0FEA3E0FF120DB340050C7DF4806F
|
||||
:1017900004AC06AD07AE04AF05C3900077E09FFD33
|
||||
:1017A000900076E09EFCC3ED9BEC9A5013A3E02FD3
|
||||
:1017B000FF900076E03EFEC3EB9FEA9E5002800160
|
||||
:1017C000C322AE07E4FDF545121999900001E0FF30
|
||||
:1017D0001219C99000011219A3900078E0FF1219A4
|
||||
:1017E000C99000781219A3900081E0FF1219C990E6
|
||||
:1017F00000811219A374032D1219C00DBD03F67FC9
|
||||
:10180000551219C9021AD2AB07AA06E4F9F87F40AB
|
||||
:101810007E427D0FFC120AA2A804A905AA06AB0706
|
||||
:101820007F207ED77D757C01120AA2C3E49FFFE46E
|
||||
:101830009EFE22AB07AA06E4F9F87FE87E03FD22AC
|
||||
:10184000E0FCA3E0FDC3EF9DEE9C228F288D298A4A
|
||||
:101850002A8B2B752E80E5282480701EE4F52F122C
|
||||
:101860000E7BAF2F121000EF6005852F2E8019051B
|
||||
:101870002FE52FC3940840E7800E120E7BAF28128D
|
||||
:101880001000EF600385282EAF2E228F4590007A3E
|
||||
:10189000E0F5467F0B121ADB43DA011200707D0A75
|
||||
:1018A0007C007F017E00121921121ABDE490008095
|
||||
:1018B000F090007FF09000A3E545F090007AF0AF43
|
||||
:1018C00046229000BBE0FF9000B9E0B507057E011D
|
||||
:1018D0007F00229000B91219B5E0FD7C009000B99C
|
||||
:1018E000E004F0E0B41402E4F09000B8E0FEEE4250
|
||||
:1018F00004E4F0AE04AF05228E288F298C2A8D2BAC
|
||||
:10190000121833121814121A329000D5E52AF0A3D7
|
||||
:10191000E52BF09000D1E528F0A3E529F043C804B9
|
||||
:10192000228E478F488C498D4A1218331218141290
|
||||
:101930001A3E9000D7E549F0A3E54AF09000D3E5C0
|
||||
:1019400047F0A3E548F0439104228C578D58D2907C
|
||||
:10195000D280AD07AC067F0A7E0012002E121ABD9F
|
||||
:10196000C290C280AD58AC577F0A7E0012002E0292
|
||||
:101970001ABD12002A121AA1121AA8121A62121AF9
|
||||
:10198000C31219E5121A80121A6C121A76121A4A28
|
||||
:10199000121AAF121AC7021AB67FAA1219C9AF06D5
|
||||
:1019A0000219C9A3E0FF0219C9E54525E02484F521
|
||||
:1019B00082E4340022E024A4F582E43400F583229A
|
||||
:1019C000F582E43400F583E0FFC2039000BDE0B48B
|
||||
:1019D0002002E4F09000BDE0245EF8A607E004F0E9
|
||||
:1019E000A3E004F022AF885388AF758CA0758DCB2F
|
||||
:1019F000EF5440FEEF54104E428822120E0A400669
|
||||
:101A0000120E88500109AF0122120E0A4006120E72
|
||||
:101A100088500109AF0122C3EF9414EE94054003EE
|
||||
:101A2000D38001C322AE071219997F551219C9023A
|
||||
:101A30001AD2AD07AC06ECF5CBAF058FCA22AD07C5
|
||||
:101A4000AC06ECF593AF058F9222C2DE75D9057511
|
||||
:101A5000F9FF75960122EE30E707C3E49FFFE49E8D
|
||||
:101A6000FE2275E34075E10175E20122E59154041F
|
||||
:101A70005391FB429122758E5475892243885022DE
|
||||
:101A8000E5C8540453C8FB42C822E5C8C320E2019C
|
||||
:101A9000D322E591C320E201D32253C8FB53C87F70
|
||||
:101AA0002275A41175D4CF2275A54175D57722531F
|
||||
:101AB000F77F75DA302275E69075A8B022E591209F
|
||||
:101AC000E2FB22E4F5A922439810223003FD22C252
|
||||
:101AD000DE22D299228F9922AF99228F8C22222244
|
||||
:101AE0002222011F00015E01030301183C00000DCA
|
||||
:101AF0000400017201020201283C080008170001DD
|
||||
:101B00008601030301183C00001F0A00012C010399
|
||||
:101B10000301183C0000003B0701F40302010240EE
|
||||
:101B20003C0000071200019001030301183C000073
|
||||
:101B300017010001C201020201183C00012401004A
|
||||
:101B400000D2010202010C3C0001011F00015E01F4
|
||||
:101B5000030301183C00000D0400017201020201A0
|
||||
:101B6000283C0800081700018601030301183C0007
|
||||
:101B7000001F0A00012C01030301183C0000003B78
|
||||
:101B80000701F403020102403C000007120001902B
|
||||
:101B900001030301183C000017010001C201020209
|
||||
:101BA00001183C000124010000D2010202010C3C9A
|
||||
:101BB0000001011F00015E01030301183C00000D3C
|
||||
:101BC0000400017201020201283C0800081700010C
|
||||
:101BD0008601030301183C00001F0A00012C0103C9
|
||||
:101BE0000301183C0000003B0701F403020102401E
|
||||
:101BF0003C0000071200019001030301183C0000A3
|
||||
:101C000017010001C201020201183C000124010079
|
||||
:0A1C100000D2010202010C3C0001A9
|
||||
:00000001FF
|
Loading…
Reference in New Issue