Merge branch 'development' into new-windmeter-sensor

# Conflicts:
#	tasmota/language/bg_BG.h
#	tasmota/language/cs_CZ.h
#	tasmota/language/de_DE.h
#	tasmota/language/el_GR.h
#	tasmota/language/en_GB.h
#	tasmota/language/es_ES.h
#	tasmota/language/fr_FR.h
#	tasmota/language/he_HE.h
#	tasmota/language/hu_HU.h
#	tasmota/language/it_IT.h
#	tasmota/language/ko_KO.h
#	tasmota/language/nl_NL.h
#	tasmota/language/pl_PL.h
#	tasmota/language/pt_BR.h
#	tasmota/language/pt_PT.h
#	tasmota/language/ro_RO.h
#	tasmota/language/ru_RU.h
#	tasmota/language/sk_SK.h
#	tasmota/language/sv_SE.h
#	tasmota/language/tr_TR.h
#	tasmota/language/uk_UA.h
#	tasmota/language/zh_CN.h
#	tasmota/language/zh_TW.h
This commit is contained in:
Matteo Albinola 2020-05-06 21:33:07 +02:00
commit a3455f235b
44 changed files with 1380 additions and 872 deletions

View File

@ -20,3 +20,480 @@ jobs:
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32
tasmota32-minimal:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-minimal
tasmota32-lite:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-lite
tasmota32-knx:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-knx
tasmota32-sensors:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-sensors
tasmota32-display:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-display
tasmota32-ir:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-ir
tasmota32-BG:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-BG
tasmota32-BR:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-BR
tasmota32-CN:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-CN
tasmota32-CZ:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-CZ
tasmota32-DE:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-DE
tasmota32-ES:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-ES
tasmota32-FR:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-FR
tasmota32-GR:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-GR
tasmota32-HE:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-HE
tasmota32-HU:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-HU
tasmota32-IT:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-IT
tasmota32-KO:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-KO
tasmota32-NL:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-NL
tasmota32-PL:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-PL
tasmota32-PT:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-PT
tasmota32-RO:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-RO
tasmota32-RU:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-RU
tasmota32-SE:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-SE
tasmota32-SK:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-SK
tasmota32-TR:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-TR
tasmota32-TW:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-TW
tasmota32-UK:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
cp platformio_override_sample.ini platformio_override.ini
platformio run -e tasmota32-UK

View File

@ -2,7 +2,7 @@
| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
|-----------------------|---------|-------|--------|-----|---------|----|---------|--------
| MY_LANGUAGE en-GB | x | x | x | x | x | x | x |
| MY_LANGUAGE en_GB | x | x | x | x | x | x | x |
| USE_ARDUINO_OTA | - | - | - | - | - | - | - |
| USE_DOMOTICZ | - | - | x | x | x | x | - |
| USE_HOME_ASSISTANT | - | - | x | x | x | x | - |

View File

@ -22,8 +22,8 @@ In addition to the [release webpage](https://github.com/arendst/Tasmota/releases
[![Dev Version](https://img.shields.io/badge/development%20version-v8.2.x.x-blue.svg)](https://github.com/arendst/Tasmota)
[![Download Dev](https://img.shields.io/badge/download-development-yellow.svg)](http://thehackbox.org/tasmota/)
![Tasmota CI](https://github.com/arendst/Tasmota/workflows/Tasmota%20CI/badge.svg)
![Tasmota ESP32 CI](https://github.com/arendst/Tasmota/workflows/Tasmota%20ESP32%20CI/badge.svg)
[![Tasmota CI](https://github.com/arendst/Tasmota/workflows/Tasmota%20CI/badge.svg)](https://github.com/arendst/Tasmota/actions?query=workflow%3A%22Tasmota+CI%22)
[![Tasmota ESP32 CI](https://github.com/arendst/Tasmota/workflows/Tasmota%20ESP32%20CI/badge.svg)](https://github.com/arendst/Tasmota/actions?query=workflow%3A%22Tasmota+ESP32+CI%22)
See [tasmota/CHANGELOG.md](tasmota/CHANGELOG.md) for detailed change information.
@ -145,7 +145,7 @@ People helping to keep the show on the road:
- Stefan Bode for his Shutter and Deep sleep drivers
- Jacek Ziółkowski for his [TDM](https://github.com/jziolkowski/tdm) management tool and [Tasmotizer](https://github.com/tasmota/tasmotizer) flashing tool
- Christian Staars for NRF24L01 and HM-10 Bluetooth sensor support
- Pail Diem for UDP Group communication support
- Paul Diem for UDP Group communication support
- Jörg Schüler-Maroldt for his initial ESP32 port
- Many more providing Tips, Wips, Pocs, PRs and Donations

9
pio/override_copy.py Normal file
View File

@ -0,0 +1,9 @@
Import('env')
import os
import shutil
# copy tasmota/user_config_override_sample.h to tasmota/user_config_override.h
if os.path.isfile("tasmota/user_config_override.h"):
print ("*** use provided user_config_override.h as planned ***")
else:
shutil.copy("tasmota/user_config_override_sample.h", "tasmota/user_config_override.h")

View File

@ -8,8 +8,10 @@
; http://docs.platformio.org/en/stable/projectconf.html
[platformio]
description = Provide ESP8266 based devices with Web, MQTT and OTA firmware
src_dir = tasmota
build_dir = .pioenvs
workspace_dir = .pioenvs
build_cache_dir = .cache
extra_configs = platformio_tasmota_env.ini
platformio_override.ini
@ -64,11 +66,8 @@ platform_packages = ${core_active.platform_packages}
build_flags = ${core_active.build_flags}
; *********************************************************************
; *** Uncomment, by deleting ";" in line below, to use custom settings from file user_config_override.h
; -DUSE_CONFIG_OVERRIDE
;
; *** alternatively can be done in: platformio_override.ini
; *** See example: platformio_override_sample.ini
; *** Use custom settings from file user_config_override.h
-DUSE_CONFIG_OVERRIDE
; *********************************************************************
; *** Fix espressif8266@1.7.0 induced undesired all warnings
@ -86,6 +85,7 @@ extra_scripts = ${scripts_defaults.extra_scripts}
extra_scripts = pio/strip-floats.py
pio/name-firmware.py
pio/gzip-firmware.py
pio/override_copy.py
[esp_defaults]
build_flags = -D_IR_ENABLE_DEFAULT_=false
@ -99,7 +99,8 @@ build_flags = ${esp_defaults.build_flags}
-D NDEBUG
-mtarget-align
-DFP_IN_IROM
; the following removes the 4-bytes alignment for PSTR(), waiting for a cleaner flag from Arduino Core
-DPSTR\(s\)=\(__extension__\(\{static\ const\ char\ __c\[\]\ __attribute__\(\(__aligned__\(1\)\)\)\ __attribute__\(\(section\(\ \"\\\\\".irom0.pstr.\"\ __FILE__\ \".\"\ __STRINGIZE\(__LINE__\)\ \".\"\ \ __STRINGIZE\(__COUNTER__\)\ \"\\\\\"\,\ \\\\\"aSM\\\\\"\,\ \@progbits\,\ 1\ \#\"\)\)\)\ =\ \(s\)\;\ \&__c\[0\]\;\}\)\)
[irremoteesp_full]
build_flags = -DUSE_IR_REMOTE_FULL
@ -113,7 +114,7 @@ build_flags = ${tasmota_core.build_flags}
[tasmota_core]
; *** Esp8266 Arduino core 2.7.0
platform = espressif8266@2.4.0
platform = espressif8266@2.5.0
platform_packages = framework-arduinoespressif8266 @ https://github.com/tasmota/Arduino/releases/download/2.7.0/esp8266-2.7.0.zip
build_flags = ${esp82xx_defaults.build_flags}
-DBEARSSL_SSL_BASIC

View File

@ -83,7 +83,7 @@ extra_scripts = ${scripts_defaults.extra_scripts}
[tasmota_stage]
; *** Esp8266 core for Arduino version Tasmota stage
platform = espressif8266@2.4.0
platform = espressif8266@2.5.0
platform_packages = framework-arduinoespressif8266 @ https://github.com/esp8266/Arduino.git#36e047e908cfa6eafaaf824988070b49f2c2ff2a
build_flags = ${esp82xx_defaults.build_flags}
-DBEARSSL_SSL_BASIC
@ -127,7 +127,7 @@ build_flags = ${esp82xx_defaults.build_flags}
[core_stage]
; *** Esp8266 core for Arduino version latest development version
platform = espressif8266@2.4.0
platform = espressif8266@2.5.0
platform_packages = framework-arduinoespressif8266 @ https://github.com/esp8266/Arduino.git
build_flags = ${esp82xx_defaults.build_flags}
-DBEARSSL_SSL_BASIC

View File

@ -38,67 +38,67 @@ build_flags = ${common.build_flags} ${irremoteesp_full.build_flags} -DFIRMWARE_I
build_flags = ${common.build_flags} ${irremoteesp_full.build_flags}
[env:tasmota-BG]
build_flags = ${common.build_flags} -DMY_LANGUAGE=bg-BG
build_flags = ${common.build_flags} -DMY_LANGUAGE=bg_BG
[env:tasmota-BR]
build_flags = ${common.build_flags} -DMY_LANGUAGE=pt-BR
build_flags = ${common.build_flags} -DMY_LANGUAGE=pt_BR
[env:tasmota-CN]
build_flags = ${common.build_flags} -DMY_LANGUAGE=zh-CN
build_flags = ${common.build_flags} -DMY_LANGUAGE=zh_CN
[env:tasmota-CZ]
build_flags = ${common.build_flags} -DMY_LANGUAGE=cs-CZ
build_flags = ${common.build_flags} -DMY_LANGUAGE=cs_CZ
[env:tasmota-DE]
build_flags = ${common.build_flags} -DMY_LANGUAGE=de-DE
build_flags = ${common.build_flags} -DMY_LANGUAGE=de_DE
[env:tasmota-ES]
build_flags = ${common.build_flags} -DMY_LANGUAGE=es-ES
build_flags = ${common.build_flags} -DMY_LANGUAGE=es_ES
[env:tasmota-FR]
build_flags = ${common.build_flags} -DMY_LANGUAGE=fr-FR
build_flags = ${common.build_flags} -DMY_LANGUAGE=fr_FR
[env:tasmota-GR]
build_flags = ${common.build_flags} -DMY_LANGUAGE=el-GR
build_flags = ${common.build_flags} -DMY_LANGUAGE=el_GR
[env:tasmota-HE]
build_flags = ${common.build_flags} -DMY_LANGUAGE=he-HE
build_flags = ${common.build_flags} -DMY_LANGUAGE=he_HE
[env:tasmota-HU]
build_flags = ${common.build_flags} -DMY_LANGUAGE=hu-HU
build_flags = ${common.build_flags} -DMY_LANGUAGE=hu_HU
[env:tasmota-IT]
build_flags = ${common.build_flags} -DMY_LANGUAGE=it-IT
build_flags = ${common.build_flags} -DMY_LANGUAGE=it_IT
[env:tasmota-KO]
build_flags = ${common.build_flags} -DMY_LANGUAGE=ko-KO
build_flags = ${common.build_flags} -DMY_LANGUAGE=ko_KO
[env:tasmota-NL]
build_flags = ${common.build_flags} -DMY_LANGUAGE=nl-NL
build_flags = ${common.build_flags} -DMY_LANGUAGE=nl_NL
[env:tasmota-PL]
build_flags = ${common.build_flags} -DMY_LANGUAGE=pl-PL
build_flags = ${common.build_flags} -DMY_LANGUAGE=pl_PL
[env:tasmota-PT]
build_flags = ${common.build_flags} -DMY_LANGUAGE=pt-PT
build_flags = ${common.build_flags} -DMY_LANGUAGE=pt_PT
[env:tasmota-RO]
build_flags = ${common.build_flags} -DMY_LANGUAGE=ro-RO
build_flags = ${common.build_flags} -DMY_LANGUAGE=ro_RO
[env:tasmota-RU]
build_flags = ${common.build_flags} -DMY_LANGUAGE=ru-RU
build_flags = ${common.build_flags} -DMY_LANGUAGE=ru_RU
[env:tasmota-SE]
build_flags = ${common.build_flags} -DMY_LANGUAGE=sv-SE
build_flags = ${common.build_flags} -DMY_LANGUAGE=sv_SE
[env:tasmota-SK]
build_flags = ${common.build_flags} -DMY_LANGUAGE=sk-SK
build_flags = ${common.build_flags} -DMY_LANGUAGE=sk_SK
[env:tasmota-TR]
build_flags = ${common.build_flags} -DMY_LANGUAGE=tr-TR
build_flags = ${common.build_flags} -DMY_LANGUAGE=tr_TR
[env:tasmota-TW]
build_flags = ${common.build_flags} -DMY_LANGUAGE=zh-TW
build_flags = ${common.build_flags} -DMY_LANGUAGE=zh_TW
[env:tasmota-UK]
build_flags = ${common.build_flags} -DMY_LANGUAGE=uk-UA
build_flags = ${common.build_flags} -DMY_LANGUAGE=uk_UA

View File

@ -47,88 +47,88 @@ build_flags = ${common32.build_flags} ${irremoteesp_full.build_flags
[env:tasmota32-BG]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=bg-BG
build_flags = ${common32.build_flags} -DMY_LANGUAGE=bg_BG
[env:tasmota32-BR]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=pt-BR
build_flags = ${common32.build_flags} -DMY_LANGUAGE=pt_BR
[env:tasmota32-CN]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=zh-CN
build_flags = ${common32.build_flags} -DMY_LANGUAGE=zh_CN
[env:tasmota32-CZ]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=cs-CZ
build_flags = ${common32.build_flags} -DMY_LANGUAGE=cs_CZ
[env:tasmota32-DE]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=de-DE
build_flags = ${common32.build_flags} -DMY_LANGUAGE=de_DE
[env:tasmota32-ES]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=es-ES
build_flags = ${common32.build_flags} -DMY_LANGUAGE=es_ES
[env:tasmota32-FR]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=fr-FR
build_flags = ${common32.build_flags} -DMY_LANGUAGE=fr_FR
[env:tasmota32-GR]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=el-GR
build_flags = ${common32.build_flags} -DMY_LANGUAGE=el_GR
[env:tasmota32-HE]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=he-HE
build_flags = ${common32.build_flags} -DMY_LANGUAGE=he_HE
[env:tasmota32-HU]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=hu-HU
build_flags = ${common32.build_flags} -DMY_LANGUAGE=hu_HU
[env:tasmota32-IT]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=it-IT
build_flags = ${common32.build_flags} -DMY_LANGUAGE=it_IT
[env:tasmota32-KO]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=ko-KO
build_flags = ${common32.build_flags} -DMY_LANGUAGE=ko_KO
[env:tasmota32-NL]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=nl-NL
build_flags = ${common32.build_flags} -DMY_LANGUAGE=nl_NL
[env:tasmota32-PL]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=pl-PL
build_flags = ${common32.build_flags} -DMY_LANGUAGE=pl_PL
[env:tasmota32-PT]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=pt-PT
build_flags = ${common32.build_flags} -DMY_LANGUAGE=pt_PT
[env:tasmota32-RO]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=ro-RO
build_flags = ${common32.build_flags} -DMY_LANGUAGE=ro_RO
[env:tasmota32-RU]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=ru-RU
build_flags = ${common32.build_flags} -DMY_LANGUAGE=ru_RU
[env:tasmota32-SE]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=sv-SE
build_flags = ${common32.build_flags} -DMY_LANGUAGE=sv_SE
[env:tasmota32-SK]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=sk-SK
build_flags = ${common32.build_flags} -DMY_LANGUAGE=sk_SK
[env:tasmota32-TR]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=tr-TR
build_flags = ${common32.build_flags} -DMY_LANGUAGE=tr_TR
[env:tasmota32-TW]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=zh-TW
build_flags = ${common32.build_flags} -DMY_LANGUAGE=zh_TW
[env:tasmota32-UK]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DMY_LANGUAGE=uk-UA
build_flags = ${common32.build_flags} -DMY_LANGUAGE=uk_UA

View File

@ -617,7 +617,7 @@
#define D_ASTERISK_PWD "****"
#ifndef MY_LANGUAGE
#include "language/en-GB.h"
#include "language/en_GB.h"
#else
#define QUOTEME(x) QUOTEME_1(x)
#define QUOTEME_1(x) #x
@ -625,7 +625,7 @@
#include INCLUDE_FILE(MY_LANGUAGE)
#endif
#ifndef LANGUAGE_LCID
#define LANGUAGE_LCID 2057 // en-GB
#define LANGUAGE_LCID 2057 // en_GB
#endif
// Common

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -652,9 +652,9 @@
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
#define D_SENSOR_GPS_RX "GPS RX"
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -62,7 +62,7 @@
#define D_BRIGHTLIGHT "Luminoso"
#define D_BSSID "BSSId"
#define D_BUTTON "Pulsante"
#define D_BY "da" // Written by me
#define D_BY "di" // Written by me
#define D_BYTES "Byte"
#define D_CELSIUS "Celsius"
#define D_CHANNEL "Canale"
@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 - GDO2"
#define D_SENSOR_HRXL_RX "HRXL - RX"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL - TX"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"
@ -773,26 +764,26 @@
#define D_SCRIPT_UPLOAD_FILES "Upload file"
//xsns_67_as3935.ino
#define D_AS3935_GAIN "gain:"
#define D_AS3935_ENERGY "energy:"
#define D_AS3935_DISTANCE "distance:"
#define D_AS3935_DISTURBER "disturber:"
#define D_AS3935_GAIN "guadagno:"
#define D_AS3935_ENERGY "energia:"
#define D_AS3935_DISTANCE "distanza:"
#define D_AS3935_DISTURBER "disturbatore:"
#define D_AS3935_VRMS "µVrms:"
#define D_AS3935_APRX "aprx.:"
#define D_AS3935_AWAY "away"
#define D_AS3935_LIGHT "lightning"
#define D_AS3935_OUT "lightning out of range"
#define D_AS3935_NOT "distance not determined"
#define D_AS3935_ABOVE "lightning overhead"
#define D_AS3935_NOISE "noise detected"
#define D_AS3935_DISTDET "disturber detected"
#define D_AS3935_INTNOEV "Interrupt with no Event!"
#define D_AS3935_NOMESS "listening..."
#define D_AS3935_ON "On"
#define D_AS3935_OFF "Off"
#define D_AS3935_INDOORS "Indoors"
#define D_AS3935_OUTDOORS "Outdoors"
#define D_AS3935_CAL_FAIL "calibration failed"
#define D_AS3935_CAL_OK "calibration set to:"
#define D_AS3935_APRX "apross.:"
#define D_AS3935_AWAY "lontano"
#define D_AS3935_LIGHT "illuminazione"
#define D_AS3935_OUT "illuminazione fuori intervallo"
#define D_AS3935_NOT "distanza non determinata"
#define D_AS3935_ABOVE "illuminazione ambientale"
#define D_AS3935_NOISE "rilevato rumore"
#define D_AS3935_DISTDET "rilevato disturbatore"
#define D_AS3935_INTNOEV "Interrupt senza evento!"
#define D_AS3935_NOMESS "in ascolto..."
#define D_AS3935_ON "ON"
#define D_AS3935_OFF "OFF"
#define D_AS3935_INDOORS "Interno"
#define D_AS3935_OUTDOORS "Esterno"
#define D_AS3935_CAL_FAIL "calibrazione fallita"
#define D_AS3935_CAL_OK "calibrazione impostata a:"
#endif // _LANGUAGE_IT_IT_H_

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "А"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "А"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "安"

View File

@ -665,29 +665,20 @@
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
#define D_SENSOR_HRXL_RX "HRXL Rx"
#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Speed"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_Y9 "CAM_Y9"
#define D_GPIO_WEBCAM_Y8 "CAM_Y8"
#define D_GPIO_WEBCAM_Y7 "CAM_Y7"
#define D_GPIO_WEBCAM_Y6 "CAM_Y6"
#define D_GPIO_WEBCAM_Y5 "CAM_Y5"
#define D_GPIO_WEBCAM_Y4 "CAM_Y4"
#define D_GPIO_WEBCAM_Y3 "CAM_Y3"
#define D_GPIO_WEBCAM_Y2 "CAM_Y2"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD1 "CAM_HSD1"
#define D_GPIO_WEBCAM_HSD2 "CAM_HSD2"
#define D_GPIO_WEBCAM_HSD3 "CAM_HSD3"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "WindMeter Spd"
#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
#define D_GPIO_WEBCAM_RESET "CAM_RESET"
#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
#define D_GPIO_WEBCAM_DATA "CAM_DATA"
#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
#define D_GPIO_WEBCAM_HREF "CAM_HREF"
#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
// Units
#define D_UNIT_AMPERE "安"

View File

@ -313,29 +313,29 @@
// -- Localization --------------------------------
// If non selected the default en-GB will be used
//#define MY_LANGUAGE bg-BG // Bulgarian in Bulgaria
//#define MY_LANGUAGE cs-CZ // Czech in Czech
//#define MY_LANGUAGE de-DE // German in Germany
//#define MY_LANGUAGE el-GR // Greek in Greece
//#define MY_LANGUAGE en-GB // English in Great Britain. Enabled by Default
//#define MY_LANGUAGE es-ES // Spanish in Spain
//#define MY_LANGUAGE fr-FR // French in France
//#define MY_LANGUAGE he-HE // Hebrew in Israel
//#define MY_LANGUAGE hu-HU // Hungarian in Hungary
//#define MY_LANGUAGE it-IT // Italian in Italy
//#define MY_LANGUAGE ko-KO // Korean in Korea
//#define MY_LANGUAGE nl-NL // Dutch in the Netherlands
//#define MY_LANGUAGE pl-PL // Polish in Poland
//#define MY_LANGUAGE pt-BR // Portuguese in Brazil
//#define MY_LANGUAGE pt-PT // Portuguese in Portugal
//#define MY_LANGUAGE ro-RO // Romanian in Romania
//#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-UA // Ukrainian in Ukraine
//#define MY_LANGUAGE zh-CN // Chinese (Simplified) in China
//#define MY_LANGUAGE zh-TW // Chinese (Traditional) in Taiwan
//#define MY_LANGUAGE bg_BG // Bulgarian in Bulgaria
//#define MY_LANGUAGE cs_CZ // Czech in Czech
//#define MY_LANGUAGE de_DE // German in Germany
//#define MY_LANGUAGE el_GR // Greek in Greece
//#define MY_LANGUAGE en_GB // English in Great Britain. Enabled by Default
//#define MY_LANGUAGE es_ES // Spanish in Spain
//#define MY_LANGUAGE fr_FR // French in France
//#define MY_LANGUAGE he_HE // Hebrew in Israel
//#define MY_LANGUAGE hu_HU // Hungarian in Hungary
//#define MY_LANGUAGE it_IT // Italian in Italy
//#define MY_LANGUAGE ko_KO // Korean in Korea
//#define MY_LANGUAGE nl_NL // Dutch in the Netherlands
//#define MY_LANGUAGE pl_PL // Polish in Poland
//#define MY_LANGUAGE pt_BR // Portuguese in Brazil
//#define MY_LANGUAGE pt_PT // Portuguese in Portugal
//#define MY_LANGUAGE ro_RO // Romanian in Romania
//#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_UA // Ukrainian in Ukraine
//#define MY_LANGUAGE zh_CN // Chinese (Simplified) in China
//#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

View File

@ -481,6 +481,9 @@ struct {
uint8_t shutter_position[MAX_SHUTTERS]; // E80
uint8_t shutter_startrelay[MAX_SHUTTERS]; // E84
uint8_t pcf8574_config[MAX_PCF8574]; // E88
uint8_t free_e8c[4]; // E8C
uint16_t dimmer_hw_min; // E90
uint16_t dimmer_hw_max; // E92
uint32_t deepsleep; // E94

View File

@ -715,6 +715,12 @@ void SettingsDefaultSet2(void)
{
memset((char*)&Settings +16, 0x00, sizeof(Settings) -16);
// this little trick allows GCC to optimize the assignment by grouping values and doing only ORs
SysBitfield flag = { 0 };
SysBitfield2 flag2 = { 0 };
SysBitfield3 flag3 = { 0 };
SysBitfield4 flag4 = { 0 };
#ifdef ESP8266
// Settings.config_version = 0; // ESP8266 (Has been 0 for long time)
#endif // ESP8266
@ -722,13 +728,13 @@ void SettingsDefaultSet2(void)
Settings.config_version = 1; // ESP32
#endif // ESP32
Settings.flag.stop_flash_rotate = APP_FLASH_CYCLE;
Settings.flag.global_state = APP_ENABLE_LEDLINK;
Settings.flag3.sleep_normal = APP_NORMAL_SLEEP;
Settings.flag3.no_power_feedback = APP_NO_RELAY_SCAN;
Settings.flag3.fast_power_cycle_disable = APP_DISABLE_POWERCYCLE;
Settings.flag3.bootcount_update = DEEPSLEEP_BOOTCOUNT;
Settings.flag3.compatibility_check = OTA_COMPATIBILITY;
flag.stop_flash_rotate |= APP_FLASH_CYCLE;
flag.global_state |= APP_ENABLE_LEDLINK;
flag3.sleep_normal |= APP_NORMAL_SLEEP;
flag3.no_power_feedback |= APP_NO_RELAY_SCAN;
flag3.fast_power_cycle_disable |= APP_DISABLE_POWERCYCLE;
flag3.bootcount_update |= DEEPSLEEP_BOOTCOUNT;
flag3.compatibility_check |= OTA_COMPATIBILITY;
Settings.save_data = SAVE_DATA;
Settings.param[P_BACKLOG_DELAY] = MIN_BACKLOG_DELAY;
Settings.param[P_BOOT_LOOP_OFFSET] = BOOT_LOOP_OFFSET; // SetOption36
@ -739,7 +745,7 @@ void SettingsDefaultSet2(void)
}
// Module
// Settings.flag.interlock = 0;
// flag.interlock |= 0;
Settings.interlock[0] = 0xFF; // Legacy support using all relays in one interlock group
Settings.module = MODULE;
ModuleDefault(WEMOS);
@ -751,7 +757,7 @@ void SettingsDefaultSet2(void)
SettingsUpdateText(SET_OTAURL, PSTR(OTA_URL));
// Power
Settings.flag.save_state = SAVE_STATE;
flag.save_state |= SAVE_STATE;
Settings.power = APP_POWER;
Settings.poweronstate = APP_POWERON_STATE;
Settings.blinktime = APP_BLINKTIME;
@ -769,8 +775,8 @@ void SettingsDefaultSet2(void)
Settings.seriallog_level = SERIAL_LOG_LEVEL;
// Wifi
Settings.flag3.use_wifi_scan = WIFI_SCAN_AT_RESTART;
Settings.flag3.use_wifi_rescan = WIFI_SCAN_REGULARLY;
flag3.use_wifi_scan |= WIFI_SCAN_AT_RESTART;
flag3.use_wifi_rescan |= WIFI_SCAN_REGULARLY;
Settings.wifi_output_power = 170;
Settings.param[P_ARP_GRATUITOUS] = WIFI_ARP_INTERVAL;
ParseIp(&Settings.ip_address[0], WIFI_IP_ADDRESS);
@ -791,38 +797,38 @@ void SettingsDefaultSet2(void)
Settings.syslog_level = SYS_LOG_LEVEL;
// Webserver
Settings.flag2.emulation = EMULATION;
Settings.flag3.gui_hostname_ip = GUI_SHOW_HOSTNAME;
Settings.flag3.mdns_enabled = MDNS_ENABLED;
flag2.emulation |= EMULATION;
flag3.gui_hostname_ip |= GUI_SHOW_HOSTNAME;
flag3.mdns_enabled |= MDNS_ENABLED;
Settings.webserver = WEB_SERVER;
Settings.weblog_level = WEB_LOG_LEVEL;
SettingsUpdateText(SET_WEBPWD, PSTR(WEB_PASSWORD));
SettingsUpdateText(SET_CORS, PSTR(CORS_DOMAIN));
// Button
Settings.flag.button_restrict = KEY_DISABLE_MULTIPRESS;
Settings.flag.button_swap = KEY_SWAP_DOUBLE_PRESS;
Settings.flag.button_single = KEY_ONLY_SINGLE_PRESS;
flag.button_restrict |= KEY_DISABLE_MULTIPRESS;
flag.button_swap |= KEY_SWAP_DOUBLE_PRESS;
flag.button_single |= KEY_ONLY_SINGLE_PRESS;
Settings.param[P_HOLD_TIME] = KEY_HOLD_TIME; // Default 4 seconds hold time
// Switch
for (uint32_t i = 0; i < MAX_SWITCHES; i++) { Settings.switchmode[i] = SWITCH_MODE; }
// MQTT
Settings.flag.mqtt_enabled = MQTT_USE;
Settings.flag.mqtt_response = MQTT_RESULT_COMMAND;
Settings.flag.mqtt_offline = MQTT_LWT_MESSAGE;
Settings.flag.mqtt_power_retain = MQTT_POWER_RETAIN;
Settings.flag.mqtt_button_retain = MQTT_BUTTON_RETAIN;
Settings.flag.mqtt_switch_retain = MQTT_SWITCH_RETAIN;
Settings.flag.mqtt_sensor_retain = MQTT_SENSOR_RETAIN;
// Settings.flag.mqtt_serial = 0;
Settings.flag.device_index_enable = MQTT_POWER_FORMAT;
Settings.flag3.time_append_timezone = MQTT_APPEND_TIMEZONE;
Settings.flag3.button_switch_force_local = MQTT_BUTTON_SWITCH_FORCE_LOCAL;
Settings.flag3.no_hold_retain = MQTT_NO_HOLD_RETAIN;
Settings.flag3.use_underscore = MQTT_INDEX_SEPARATOR;
Settings.flag3.grouptopic_mode = MQTT_GROUPTOPIC_FORMAT;
flag.mqtt_enabled |= MQTT_USE;
flag.mqtt_response |= MQTT_RESULT_COMMAND;
flag.mqtt_offline |= MQTT_LWT_MESSAGE;
flag.mqtt_power_retain |= MQTT_POWER_RETAIN;
flag.mqtt_button_retain |= MQTT_BUTTON_RETAIN;
flag.mqtt_switch_retain |= MQTT_SWITCH_RETAIN;
flag.mqtt_sensor_retain |= MQTT_SENSOR_RETAIN;
// flag.mqtt_serial |= 0;
flag.device_index_enable |= MQTT_POWER_FORMAT;
flag3.time_append_timezone |= MQTT_APPEND_TIMEZONE;
flag3.button_switch_force_local |= MQTT_BUTTON_SWITCH_FORCE_LOCAL;
flag3.no_hold_retain |= MQTT_NO_HOLD_RETAIN;
flag3.use_underscore |= MQTT_INDEX_SEPARATOR;
flag3.grouptopic_mode |= MQTT_GROUPTOPIC_FORMAT;
SettingsUpdateText(SET_MQTT_HOST, MQTT_HOST);
Settings.mqtt_port = MQTT_PORT;
SettingsUpdateText(SET_MQTT_CLIENT, MQTT_CLIENT_ID);
@ -856,13 +862,13 @@ void SettingsDefaultSet2(void)
Settings.mqttlog_level = MQTT_LOG_LEVEL;
// Energy
Settings.flag.no_power_on_check = ENERGY_VOLTAGE_ALWAYS;
Settings.flag2.current_resolution = 3;
// Settings.flag2.voltage_resolution = 0;
// Settings.flag2.wattage_resolution = 0;
Settings.flag2.energy_resolution = ENERGY_RESOLUTION;
Settings.flag3.dds2382_model = ENERGY_DDS2382_MODE;
Settings.flag3.hardware_energy_total = ENERGY_HARDWARE_TOTALS;
flag.no_power_on_check |= ENERGY_VOLTAGE_ALWAYS;
flag2.current_resolution |= 3;
// flag2.voltage_resolution |= 0;
// flag2.wattage_resolution |= 0;
flag2.energy_resolution |= ENERGY_RESOLUTION;
flag3.dds2382_model |= ENERGY_DDS2382_MODE;
flag3.hardware_energy_total |= ENERGY_HARDWARE_TOTALS;
Settings.param[P_MAX_POWER_RETRY] = MAX_POWER_RETRY;
// Settings.energy_power_delta = 0;
Settings.energy_power_calibration = HLW_PREF_PULSE;
@ -892,12 +898,12 @@ void SettingsDefaultSet2(void)
Settings.param[P_OVER_TEMP] = ENERGY_OVERTEMP;
// IRRemote
Settings.flag.ir_receive_decimal = IR_DATA_RADIX;
Settings.flag3.receive_raw = IR_ADD_RAW_DATA;
flag.ir_receive_decimal |= IR_DATA_RADIX;
flag3.receive_raw |= IR_ADD_RAW_DATA;
Settings.param[P_IR_UNKNOW_THRESHOLD] = IR_RCV_MIN_UNKNOWN_SIZE;
// RF Bridge
Settings.flag.rf_receive_decimal = RF_DATA_RADIX;
flag.rf_receive_decimal |= RF_DATA_RADIX;
// for (uint32_t i = 0; i < 17; i++) { Settings.rf_code[i][0] = 0; }
memcpy_P(Settings.rf_code[0], kDefaultRfCode, 9);
@ -913,43 +919,43 @@ void SettingsDefaultSet2(void)
// }
// Sensor
Settings.flag.temperature_conversion = TEMP_CONVERSION;
Settings.flag.pressure_conversion = PRESSURE_CONVERSION;
Settings.flag2.pressure_resolution = PRESSURE_RESOLUTION;
Settings.flag2.humidity_resolution = HUMIDITY_RESOLUTION;
Settings.flag2.temperature_resolution = TEMP_RESOLUTION;
Settings.flag3.ds18x20_internal_pullup = DS18X20_PULL_UP;
Settings.flag3.counter_reset_on_tele = COUNTER_RESET;
flag.temperature_conversion |= TEMP_CONVERSION;
flag.pressure_conversion |= PRESSURE_CONVERSION;
flag2.pressure_resolution |= PRESSURE_RESOLUTION;
flag2.humidity_resolution |= HUMIDITY_RESOLUTION;
flag2.temperature_resolution |= TEMP_RESOLUTION;
flag3.ds18x20_internal_pullup |= DS18X20_PULL_UP;
flag3.counter_reset_on_tele |= COUNTER_RESET;
// Settings.altitude = 0;
// Rules
// Settings.rule_enabled = 0;
// Settings.rule_once = 0;
// for (uint32_t i = 1; i < MAX_RULE_SETS; i++) { Settings.rules[i][0] = '\0'; }
Settings.flag2.calc_resolution = CALC_RESOLUTION;
flag2.calc_resolution |= CALC_RESOLUTION;
// Timer
Settings.flag3.timers_enable = TIMERS_ENABLED;
flag3.timers_enable |= TIMERS_ENABLED;
// Home Assistant
Settings.flag.hass_light = HASS_AS_LIGHT;
Settings.flag.hass_discovery = HOME_ASSISTANT_DISCOVERY_ENABLE;
Settings.flag3.hass_tele_on_power = TELE_ON_POWER;
flag.hass_light |= HASS_AS_LIGHT;
flag.hass_discovery |= HOME_ASSISTANT_DISCOVERY_ENABLE;
flag3.hass_tele_on_power |= TELE_ON_POWER;
// Knx
Settings.flag.knx_enabled = KNX_ENABLED;
Settings.flag.knx_enable_enhancement = KNX_ENHANCED;
flag.knx_enabled |= KNX_ENABLED;
flag.knx_enable_enhancement |= KNX_ENHANCED;
// Light
Settings.flag.pwm_control = LIGHT_MODE;
Settings.flag.ws_clock_reverse = LIGHT_CLOCK_DIRECTION;
Settings.flag.light_signal = LIGHT_PAIRS_CO2;
Settings.flag.not_power_linked = LIGHT_POWER_CONTROL;
Settings.flag.decimal_text = LIGHT_COLOR_RADIX;
Settings.flag3.pwm_multi_channels = LIGHT_CHANNEL_MODE;
Settings.flag3.slider_dimmer_stay_on = LIGHT_SLIDER_POWER;
Settings.flag4.alexa_ct_range = LIGHT_ALEXA_CT_RANGE;
Settings.flag4.pwm_ct_mode = LIGHT_PWM_CT_MODE;
flag.pwm_control |= LIGHT_MODE;
flag.ws_clock_reverse |= LIGHT_CLOCK_DIRECTION;
flag.light_signal |= LIGHT_PAIRS_CO2;
flag.not_power_linked |= LIGHT_POWER_CONTROL;
flag.decimal_text |= LIGHT_COLOR_RADIX;
flag3.pwm_multi_channels |= LIGHT_CHANNEL_MODE;
flag3.slider_dimmer_stay_on |= LIGHT_SLIDER_POWER;
flag4.alexa_ct_range |= LIGHT_ALEXA_CT_RANGE;
flag4.pwm_ct_mode |= LIGHT_PWM_CT_MODE;
Settings.pwm_frequency = PWM_FREQ;
Settings.pwm_range = PWM_RANGE;
@ -1036,13 +1042,18 @@ void SettingsDefaultSet2(void)
SettingsEnableAllI2cDrivers();
// Tuya
Settings.flag3.tuya_apply_o20 = TUYA_SETOPTION_20;
Settings.flag3.tuya_serial_mqtt_publish = MQTT_TUYA_RECEIVED;
flag3.tuya_apply_o20 |= TUYA_SETOPTION_20;
flag3.tuya_serial_mqtt_publish |= MQTT_TUYA_RECEIVED;
Settings.flag3.buzzer_enable = BUZZER_ENABLE;
Settings.flag3.shutter_mode = SHUTTER_SUPPORT;
Settings.flag3.pcf8574_ports_inverted = PCF8574_INVERT_PORTS;
Settings.flag4.zigbee_use_names = ZIGBEE_FRIENDLY_NAMES;
flag3.buzzer_enable |= BUZZER_ENABLE;
flag3.shutter_mode |= SHUTTER_SUPPORT;
flag3.pcf8574_ports_inverted |= PCF8574_INVERT_PORTS;
flag4.zigbee_use_names |= ZIGBEE_FRIENDLY_NAMES;
Settings.flag = flag;
Settings.flag2 = flag2;
Settings.flag3 = flag3;
Settings.flag4 = flag4;
}
/********************************************************************************************/

View File

@ -87,10 +87,7 @@ void ResponseCmndIdxNumber(int value)
void ResponseCmndChar_P(const char* value)
{
size_t buf_size = strlen_P(value);
char buf[buf_size + 1];
strcpy_P(buf, value);
Response_P(S_JSON_COMMAND_SVALUE, XdrvMailbox.command, buf);
Response_P(S_JSON_COMMAND_SVALUE, XdrvMailbox.command, value);
}
void ResponseCmndChar(const char* value)

View File

@ -68,7 +68,7 @@ const uint8_t MAX_XDRV_DRIVERS = 96; // Max number of allowed driver driv
const uint8_t MAX_XSNS_DRIVERS = 96; // Max number of allowed sensor drivers
const uint8_t MAX_I2C_DRIVERS = 96; // Max number of allowed i2c drivers
const uint8_t MAX_SHUTTERS = 4; // Max number of shutters
const uint8_t MAX_PCF8574 = 8; // Max number of PCF8574 devices
const uint8_t MAX_PCF8574 = 4; // Max number of PCF8574 devices
const uint8_t MAX_RULE_SETS = 3; // Max number of rule sets of size 512 characters
const uint16_t MAX_RULE_SIZE = 512; // Max number of characters in rules

View File

@ -118,11 +118,13 @@ enum UserSelectablePins {
ADC0_BUTTON, ADC0_BUTTON_INV, // Analog Button
ADC0_RANGE, // Analog Range
ADC0_CT_POWER, // ANalog Current
GPIO_WEBCAM_PWDN, GPIO_WEBCAM_RESET, GPIO_WEBCAM_XCLK, GPIO_WEBCAM_SIOD, GPIO_WEBCAM_SIOC, // Webcam
GPIO_WEBCAM_Y9, GPIO_WEBCAM_Y8, GPIO_WEBCAM_Y7, GPIO_WEBCAM_Y6,
GPIO_WEBCAM_Y5, GPIO_WEBCAM_Y4, GPIO_WEBCAM_Y3, GPIO_WEBCAM_Y2,
GPIO_WEBCAM_VSYNC, GPIO_WEBCAM_HREF, GPIO_WEBCAM_PCLK, GPIO_WEBCAM_PSCLK,
GPIO_WEBCAM_HSD1, GPIO_WEBCAM_HSD2, GPIO_WEBCAM_HSD3, GPIO_WEBCAM_PSRCS,
GPIO_WEBCAM_PWDN, GPIO_WEBCAM_RESET, GPIO_WEBCAM_XCLK, // Webcam
GPIO_WEBCAM_SIOD, GPIO_WEBCAM_SIOC, // Webcam I2C
GPIO_WEBCAM_DATA,
GPIO_WEBCAM_VSYNC, GPIO_WEBCAM_HREF, GPIO_WEBCAM_PCLK,
GPIO_WEBCAM_PSCLK,
GPIO_WEBCAM_HSD,
GPIO_WEBCAM_PSRCS,
GPIO_SENSOR_END };
enum ProgramSelectablePins {
@ -203,16 +205,21 @@ const char kSensorNames[] PROGMEM =
D_SENSOR_BUTTON "|" D_SENSOR_BUTTON "i|"
D_RANGE "|"
D_CT_POWER "|"
D_GPIO_WEBCAM_PWDN "|" D_GPIO_WEBCAM_RESET "|" D_GPIO_WEBCAM_XCLK "|" D_GPIO_WEBCAM_SIOD "|" D_GPIO_WEBCAM_SIOC "|"
D_GPIO_WEBCAM_Y9 "|" D_GPIO_WEBCAM_Y8 "|" D_GPIO_WEBCAM_Y7 "|" D_GPIO_WEBCAM_Y6 "|"
D_GPIO_WEBCAM_Y5 "|" D_GPIO_WEBCAM_Y4 "|" D_GPIO_WEBCAM_Y3 "|" D_GPIO_WEBCAM_Y2 "|"
D_GPIO_WEBCAM_VSYNC "|" D_GPIO_WEBCAM_HREF "|" D_GPIO_WEBCAM_PCLK "|" D_GPIO_WEBCAM_PSCLK "|"
D_GPIO_WEBCAM_HSD1 "|" D_GPIO_WEBCAM_HSD2 "|" D_GPIO_WEBCAM_HSD3 "|" D_GPIO_WEBCAM_PSRCS
D_GPIO_WEBCAM_PWDN "|" D_GPIO_WEBCAM_RESET "|" D_GPIO_WEBCAM_XCLK "|"
D_GPIO_WEBCAM_SIOD "|" D_GPIO_WEBCAM_SIOC "|"
D_GPIO_WEBCAM_DATA "|"
D_GPIO_WEBCAM_VSYNC "|" D_GPIO_WEBCAM_HREF "|" D_GPIO_WEBCAM_PCLK "|"
D_GPIO_WEBCAM_PSCLK "|"
D_GPIO_WEBCAM_HSD "|"
D_GPIO_WEBCAM_PSRCS
;
const char kSensorNamesFixed[] PROGMEM =
D_SENSOR_USER;
#define MAX_WEBCAM_DATA 8
#define MAX_WEBCAM_HSD 3
const uint16_t kGpioNiceList[] PROGMEM = {
GPIO_NONE, // Not used
AGPIO(GPIO_KEY1) + MAX_KEYS, // Buttons
@ -516,21 +523,29 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_WEBCAM_XCLK),
AGPIO(GPIO_WEBCAM_SIOD),
AGPIO(GPIO_WEBCAM_SIOC),
AGPIO(GPIO_WEBCAM_Y9),
AGPIO(GPIO_WEBCAM_Y8),
AGPIO(GPIO_WEBCAM_Y7),
AGPIO(GPIO_WEBCAM_Y6),
AGPIO(GPIO_WEBCAM_Y5),
AGPIO(GPIO_WEBCAM_Y4),
AGPIO(GPIO_WEBCAM_Y3),
AGPIO(GPIO_WEBCAM_Y2),
// AGPIO(GPIO_WEBCAM_Y9),
// AGPIO(GPIO_WEBCAM_Y8),
// AGPIO(GPIO_WEBCAM_Y7),
// AGPIO(GPIO_WEBCAM_Y6),
// AGPIO(GPIO_WEBCAM_Y5),
// AGPIO(GPIO_WEBCAM_Y4),
// AGPIO(GPIO_WEBCAM_Y3),
// AGPIO(GPIO_WEBCAM_Y2),
AGPIO(GPIO_WEBCAM_DATA) + MAX_WEBCAM_DATA,
AGPIO(GPIO_WEBCAM_VSYNC),
AGPIO(GPIO_WEBCAM_HREF),
AGPIO(GPIO_WEBCAM_PCLK),
AGPIO(GPIO_WEBCAM_PSCLK),
AGPIO(GPIO_WEBCAM_HSD1),
AGPIO(GPIO_WEBCAM_HSD2),
AGPIO(GPIO_WEBCAM_HSD3),
// AGPIO(GPIO_WEBCAM_HSD1),
// AGPIO(GPIO_WEBCAM_HSD2),
// AGPIO(GPIO_WEBCAM_HSD3),
AGPIO(GPIO_WEBCAM_HSD) + MAX_WEBCAM_HSD,
AGPIO(GPIO_WEBCAM_PSRCS),
#endif
};

View File

@ -246,13 +246,15 @@ const char HTTP_SCRIPT_MODULE_TEMPLATE[] PROGMEM =
"q.appendChild(o);"
"}"
"function ot(g,s){" // g = id and name, s = value
"var p,l,t=qs('#h'+g),u=s&0x001f;"
"var a=s&0xffe0,b=0,c,p,l,t=qs('#h'+g),u=s&0x001f;"
"l=t.options.length;" // Remove current options
"for(i=l;i;i--){p=t.options[i-1].parentNode;p.removeChild(t.options[i-1]);}"
"l=hs.length;" // Find max indexes for s
"for(i=0;i<l;i++){c=hs[i]&0xffe0;if(a==c){b=hs[i]&0x001f;break;}}"
"s>>=5;" // Add options
"for(i=1;i<=hs[s];i++){ce((i<10)?(' '+i):i,t);}"
"for(i=1;i<=b;i++){ce((i<10)?(' '+i):i,t);}"
"eb('h'+g).value=u+1;" // Set selected value
"t.style.visibility=(hs[s]>0)?'':'hidden';"
"t.style.visibility=(b>0)?'':'hidden';"
"}"
"function sk(s,g){" // s = value, g = id and name
"var o=os.replace(/}2/g,\"<option value='\").replace(/}3/g,\")</option>\");"
@ -842,9 +844,7 @@ void WSContentStart_P(const char* title, bool auth)
WSContentBegin(200, CT_HTML);
if (title != nullptr) {
char ctitle[strlen_P(title) +1];
strcpy_P(ctitle, title); // Get title from flash to RAM
WSContentSend_P(HTTP_HEADER1, SettingsText(SET_FRIENDLYNAME1), ctitle);
WSContentSend_P(HTTP_HEADER1, SettingsText(SET_FRIENDLYNAME1), title);
}
}
@ -1469,28 +1469,14 @@ void HandleTemplateConfiguration(void)
#ifdef ESP32
WSContentSend_P(PSTR("hs=["));
bool first_done = false;
/*
for (uint32_t i = 0; i < ARRAY_SIZE(kGpioNiceList); i++) {
uint32_t midx = pgm_read_word(kGpioNiceList + i) & 0x001F;
if (first_done) { WSContentSend_P(PSTR(",")); }
WSContentSend_P(PSTR("%d"), midx);
first_done = true;
}
*/
uint32_t j = 0;
for (uint32_t i = 0; i < GPIO_SENSOR_END; i++) {
uint32_t midx = pgm_read_word(kGpioNiceList + j);
if ((midx >> 5) != i) {
midx = 0;
} else {
midx &= 0x001F;
j++;
for (uint32_t i = 0; i < ARRAY_SIZE(kGpioNiceList); i++) { // hs=[36,68,100,132,168,200,232,264,292,324,356,388,421,453];
uint32_t midx = pgm_read_word(kGpioNiceList + i);
if (midx & 0x001F) {
if (first_done) { WSContentSend_P(PSTR(",")); }
WSContentSend_P(PSTR("%d"), midx);
first_done = true;
}
if (first_done) { WSContentSend_P(PSTR(",")); }
WSContentSend_P(PSTR("%d"), midx);
first_done = true;
}
WSContentSend_P(PSTR("];"));
#endif // ESP32
@ -1651,28 +1637,14 @@ void HandleModuleConfiguration(void)
#ifdef ESP32
WSContentSend_P(PSTR("hs=["));
bool first_done = false;
/*
for (uint32_t i = 0; i < ARRAY_SIZE(kGpioNiceList); i++) {
midx = pgm_read_word(kGpioNiceList + i) & 0x001F;
if (first_done) { WSContentSend_P(PSTR(",")); }
WSContentSend_P(PSTR("%d"), midx);
first_done = true;
}
*/
uint32_t j = 0;
for (uint32_t i = 0; i < GPIO_SENSOR_END; i++) {
midx = pgm_read_word(kGpioNiceList + j);
if ((midx >> 5) != i) {
midx = 0;
} else {
midx &= 0x001F;
j++;
for (uint32_t i = 0; i < ARRAY_SIZE(kGpioNiceList); i++) { // hs=[36,68,100,132,168,200,232,264,292,324,356,388,421,453];
midx = pgm_read_word(kGpioNiceList + i);
if (midx & 0x001F) {
if (first_done) { WSContentSend_P(PSTR(",")); }
WSContentSend_P(PSTR("%d"), midx);
first_done = true;
}
if (first_done) { WSContentSend_P(PSTR(",")); }
WSContentSend_P(PSTR("%d"), midx);
first_done = true;
}
WSContentSend_P(PSTR("];"));
#endif // ESP32

View File

@ -110,7 +110,7 @@ void DomoticzUpdateFanState(void)
void MqttPublishDomoticzPowerState(uint8_t device)
{
if (Settings.flag.mqtt_enabled) { // SetOption3 - Enable MQTT
if ((device < 1) || (device > devices_present)) { device = 1; }
if ((device < 1) || (device > devices_present) || (device > MAX_DOMOTICZ_IDX)) { device = 1; }
if (Settings.domoticz_relay_idx[device -1]) {
#ifdef USE_SHUTTER
if (domoticz_is_shutter) {

View File

@ -70,6 +70,8 @@ uint32_t DecodeLightId(uint32_t hue_id);
#include "FS.h"
#include "SPIFFS.h"
void SaveFile(const char *name,const uint8_t *buf,uint32_t len) {
File file = SPIFFS.open(name, FILE_WRITE);
if (!file) return;
@ -2048,7 +2050,14 @@ chknext:
fvar=wc_set_motion_detect(fvar2);
}
break;
#ifdef USE_FACE_DETECT
case 7:
{ float fvar2;
lp=GetNumericResult(lp,OPER_EQU,&fvar2,0);
fvar=wc_set_face_detect(fvar2);
}
break;
#endif
default:
fvar=0;
}
@ -5224,10 +5233,11 @@ bool Xdrv10(uint8_t function)
case FUNC_WEB_ADD_BUTTON:
WSContentSend_P(HTTP_BTN_MENU_RULES);
break;
#ifdef USE_SCRIPT_WEB_DISPLAY
case FUNC_WEB_ADD_MAIN_BUTTON:
ScriptWebShow('&');
break;
#endif // USE_SCRIPT_WEB_DISPLAY
case FUNC_WEB_ADD_HANDLER:
Webserver->on("/" WEB_HANDLE_SCRIPT, HandleScriptConfiguration);
Webserver->on("/ta",HTTP_POST, HandleScriptTextareaConfiguration);

View File

@ -626,10 +626,8 @@ void ZigbeeStateMachine_Run(void) {
case ZGB_INSTR_MQTT_STATE:
{
const char *f_msg = (const char*) cur_ptr1;
char buf[strlen_P(f_msg) + 1];
strcpy_P(buf, f_msg);
Response_P(PSTR("{\"" D_JSON_ZIGBEE_STATE "\":{\"Status\":%d,\"Message\":\"%s\"}}"),
cur_d8, buf);
cur_d8, f_msg);
MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_ZIGBEE_STATE));
XdrvRulesProcess();
}

View File

@ -23,9 +23,7 @@
* ESP32 webcam based on example in Arduino-ESP32 library
*
* Template as used on ESP32-CAM WiFi + bluetooth Camera Module Development Board ESP32 With Camera Module OV2640 Geekcreit for Arduino
* {"NAME":"AITHINKER CAM No SPI","GPIO":[4992,65504,65504,65504,5472,5312,65504,65504,5504,5536,65504,65504,5568,5440,5280,5248,0,5216,5408,5376,0,5344,5024,5056,0,0,0,0,4928,65504,5120,5088,5184,0,0,5152],"FLAG":0,"BASE":1}
* Template with SPI configured. This needs define USE_SPI
* {"NAME":"AITHINKER CAM","GPIO":[4992,65504,672,65504,5472,5312,65504,65504,5504,5536,736,704,5568,5440,5280,5248,0,5216,5408,5376,0,5344,5024,5056,0,0,0,0,4928,65504,5120,5088,5184,0,0,5152],"FLAG":0,"BASE":1}
* {"NAME":"AITHINKER CAM No SPI","GPIO":[4992,65504,65504,65504,65504,5088,65504,65504,65504,65504,65504,65504,65504,65504,5089,5090,0,5091,5184,5152,0,5120,5024,5056,0,0,0,0,4928,65504,5094,5095,5092,0,0,5093],"FLAG":0,"BASE":1}
*
* Command: Webcam <number>
* 0 = Stop streaming
@ -50,10 +48,13 @@
#define CAMERA_MODEL_AI_THINKER
//#define USE_TEMPLATE
#define USE_TEMPLATE
#define WC_LOGLEVEL LOG_LEVEL_INFO
#include "fb_gfx.h"
#include "fd_forward.h"
#include "fr_forward.h"
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
@ -81,6 +82,30 @@ uint8_t wc_up;
uint16_t wc_width;
uint16_t wc_height;
uint8_t wc_stream_active;
#ifdef USE_FACE_DETECT
uint8_t faces;
uint16_t face_detect_time;
#endif
bool WcPinUsed(void) {
bool pin_used = true;
for (uint32_t i = 0; i < MAX_WEBCAM_DATA; i++) {
if (!PinUsed(GPIO_WEBCAM_DATA, i)) {
pin_used = false;
}
// if (i < MAX_WEBCAM_HSD) {
// if (!PinUsed(GPIO_WEBCAM_HSD, i)) {
// pin_used = false;
// }
// }
}
if (!PinUsed(GPIO_WEBCAM_XCLK) || !PinUsed(GPIO_WEBCAM_PCLK) ||
!PinUsed(GPIO_WEBCAM_VSYNC) || !PinUsed(GPIO_WEBCAM_HREF) ||
!PinUsed(GPIO_WEBCAM_SIOD) || !PinUsed(GPIO_WEBCAM_SIOC)) {
pin_used = false;
}
return pin_used;
}
uint32_t wc_setup(int32_t fsiz) {
if (fsiz > 10) { fsiz = 10; }
@ -89,11 +114,13 @@ uint32_t wc_setup(int32_t fsiz) {
if (fsiz < 0) {
esp_camera_deinit();
wc_up = 0;
return 0;
}
if (wc_up) {
esp_camera_deinit();
AddLog_P2(WC_LOGLEVEL, PSTR("CAM: deinit"));
//return wc_up;
}
@ -125,31 +152,25 @@ uint32_t wc_setup(int32_t fsiz) {
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
#else
if (PinUsed(GPIO_WEBCAM_Y2) && PinUsed(GPIO_WEBCAM_Y3) && PinUsed(GPIO_WEBCAM_Y4) && PinUsed(GPIO_WEBCAM_Y5)\
&& PinUsed(GPIO_WEBCAM_Y6) && PinUsed(GPIO_WEBCAM_Y7) && PinUsed(GPIO_WEBCAM_Y8) && PinUsed(GPIO_WEBCAM_Y9)\
&& PinUsed(GPIO_WEBCAM_XCLK) && PinUsed(GPIO_WEBCAM_PCLK) && PinUsed(GPIO_WEBCAM_VSYNC) && PinUsed(GPIO_WEBCAM_HREF)\
&& PinUsed(GPIO_WEBCAM_SIOD) && PinUsed(GPIO_WEBCAM_SIOC)) {
config.pin_d0 = Pin(GPIO_WEBCAM_Y2); //Y2_GPIO_NUM;
config.pin_d1 = Pin(GPIO_WEBCAM_Y3); //Y3_GPIO_NUM;
config.pin_d2 = Pin(GPIO_WEBCAM_Y4); //Y4_GPIO_NUM;
config.pin_d3 = Pin(GPIO_WEBCAM_Y5); //Y5_GPIO_NUM;
config.pin_d4 = Pin(GPIO_WEBCAM_Y6); //Y6_GPIO_NUM;
config.pin_d5 = Pin(GPIO_WEBCAM_Y7); //Y7_GPIO_NUM;
config.pin_d6 = Pin(GPIO_WEBCAM_Y8); //Y8_GPIO_NUM;
config.pin_d7 = Pin(GPIO_WEBCAM_Y9); //Y9_GPIO_NUM;
config.pin_xclk = Pin(GPIO_WEBCAM_XCLK); //XCLK_GPIO_NUM;
config.pin_pclk = Pin(GPIO_WEBCAM_PCLK); //PCLK_GPIO_NUM;
config.pin_vsync = Pin(GPIO_WEBCAM_VSYNC); //VSYNC_GPIO_NUM;
config.pin_href = Pin(GPIO_WEBCAM_HREF); //HREF_GPIO_NUM;
config.pin_sscb_sda = Pin(GPIO_WEBCAM_SIOD); //SIOD_GPIO_NUM;
config.pin_sscb_scl = Pin(GPIO_WEBCAM_SIOC); //SIOC_GPIO_NUM;
int16_t xpin;
xpin = Pin(GPIO_WEBCAM_PWDN);
if (99 == xpin) { xpin = -1; }
config.pin_pwdn = xpin; //PWDN_GPIO_NUM;
xpin = Pin(GPIO_WEBCAM_RESET);
if (99 == xpin) { xpin=-1; }
config.pin_reset = xpin; //RESET_GPIO_NUM;
if (WcPinUsed()) {
config.pin_d0 = Pin(GPIO_WEBCAM_DATA); // Y2_GPIO_NUM;
config.pin_d1 = Pin(GPIO_WEBCAM_DATA, 1); // Y3_GPIO_NUM;
config.pin_d2 = Pin(GPIO_WEBCAM_DATA, 2); // Y4_GPIO_NUM;
config.pin_d3 = Pin(GPIO_WEBCAM_DATA, 3); // Y5_GPIO_NUM;
config.pin_d4 = Pin(GPIO_WEBCAM_DATA, 4); // Y6_GPIO_NUM;
config.pin_d5 = Pin(GPIO_WEBCAM_DATA, 5); // Y7_GPIO_NUM;
config.pin_d6 = Pin(GPIO_WEBCAM_DATA, 6); // Y8_GPIO_NUM;
config.pin_d7 = Pin(GPIO_WEBCAM_DATA, 7); // Y9_GPIO_NUM;
config.pin_xclk = Pin(GPIO_WEBCAM_XCLK); // XCLK_GPIO_NUM;
config.pin_pclk = Pin(GPIO_WEBCAM_PCLK); // PCLK_GPIO_NUM;
config.pin_vsync = Pin(GPIO_WEBCAM_VSYNC); // VSYNC_GPIO_NUM;
config.pin_href = Pin(GPIO_WEBCAM_HREF); // HREF_GPIO_NUM;
config.pin_sscb_sda = Pin(GPIO_WEBCAM_SIOD); // SIOD_GPIO_NUM;
config.pin_sscb_scl = Pin(GPIO_WEBCAM_SIOC); // SIOC_GPIO_NUM;
config.pin_pwdn = (PinUsed(GPIO_WEBCAM_PWDN)) ? Pin(GPIO_WEBCAM_PWDN) : -1; // PWDN_GPIO_NUM;
config.pin_reset = (PinUsed(GPIO_WEBCAM_RESET)) ? Pin(GPIO_WEBCAM_RESET) : -1; // RESET_GPIO_NUM;
AddLog_P2(WC_LOGLEVEL, PSTR("CAM: User template"));
} else {
// defaults to AI THINKER
config.pin_d0 = Y2_GPIO_NUM;
@ -168,6 +189,7 @@ uint32_t wc_setup(int32_t fsiz) {
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
AddLog_P2(WC_LOGLEVEL, PSTR("CAM: Default template"));
}
#endif
@ -221,6 +243,11 @@ uint32_t wc_setup(int32_t fsiz) {
wc_height = wc_fb->height;
esp_camera_fb_return(wc_fb);
#ifdef USE_FACE_DETECT
fd_init();
#endif
AddLog_P2(WC_LOGLEVEL, PSTR("CAM: Initialized"));
wc_up = 1;
@ -441,6 +468,141 @@ void handleMjpeg(void) {
//}
}
#ifdef USE_FACE_DETECT
static mtmn_config_t mtmn_config = {0};
void fd_init(void) {
mtmn_config.type = FAST;
mtmn_config.min_face = 80;
mtmn_config.pyramid = 0.707;
mtmn_config.pyramid_times = 4;
mtmn_config.p_threshold.score = 0.6;
mtmn_config.p_threshold.nms = 0.7;
mtmn_config.p_threshold.candidate_number = 20;
mtmn_config.r_threshold.score = 0.7;
mtmn_config.r_threshold.nms = 0.7;
mtmn_config.r_threshold.candidate_number = 10;
mtmn_config.o_threshold.score = 0.7;
mtmn_config.o_threshold.nms = 0.7;
mtmn_config.o_threshold.candidate_number = 1;
}
#define FACE_COLOR_WHITE 0x00FFFFFF
#define FACE_COLOR_BLACK 0x00000000
#define FACE_COLOR_RED 0x000000FF
#define FACE_COLOR_GREEN 0x0000FF00
#define FACE_COLOR_BLUE 0x00FF0000
#define FACE_COLOR_YELLOW (FACE_COLOR_RED | FACE_COLOR_GREEN)
#define FACE_COLOR_CYAN (FACE_COLOR_BLUE | FACE_COLOR_GREEN)
#define FACE_COLOR_PURPLE (FACE_COLOR_BLUE | FACE_COLOR_RED)
void draw_face_boxes(dl_matrix3du_t *image_matrix, box_array_t *boxes, int face_id);
/*
void draw_face_boxes(dl_matrix3du_t *image_matrix, box_array_t *boxes, int face_id) {
int x, y, w, h, i;
uint32_t color = FACE_COLOR_YELLOW;
if(face_id < 0){
color = FACE_COLOR_RED;
} else if(face_id > 0){
color = FACE_COLOR_GREEN;
}
fb_data_t fb;
fb.width = image_matrix->w;
fb.height = image_matrix->h;
fb.data = image_matrix->item;
fb.bytes_per_pixel = 3;
fb.format = FB_BGR888;
for (i = 0; i < boxes->len; i++){
// rectangle box
x = (int)boxes->box[i].box_p[0];
y = (int)boxes->box[i].box_p[1];
w = (int)boxes->box[i].box_p[2] - x + 1;
h = (int)boxes->box[i].box_p[3] - y + 1;
fb_gfx_drawFastHLine(&fb, x, y, w, color);
fb_gfx_drawFastHLine(&fb, x, y+h-1, w, color);
fb_gfx_drawFastVLine(&fb, x, y, h, color);
fb_gfx_drawFastVLine(&fb, x+w-1, y, h, color);
#if 0
// landmark
int x0, y0, j;
for (j = 0; j < 10; j+=2) {
x0 = (int)boxes->landmark[i].landmark_p[j];
y0 = (int)boxes->landmark[i].landmark_p[j+1];
fb_gfx_fillRect(&fb, x0, y0, 3, 3, color);
}
#endif
}
}
*/
#define DL_SPIRAM_SUPPORT
uint32_t wc_set_face_detect(int32_t value) {
if (value >= 0) { face_detect_time = value; }
return faces;
}
uint32_t face_ltime;
uint32_t detect_face(void);
uint32_t detect_face(void) {
dl_matrix3du_t *image_matrix;
size_t out_len, out_width, out_height;
uint8_t * out_buf;
bool s;
bool detected = false;
int face_id = 0;
camera_fb_t *fb;
if ((millis() - face_ltime) > face_detect_time) {
face_ltime = millis();
fb = esp_camera_fb_get();
if (!fb) { return ESP_FAIL; }
image_matrix = dl_matrix3du_alloc(1, fb->width, fb->height, 3);
if (!image_matrix) {
AddLog_P2(WC_LOGLEVEL, PSTR("CAM: dl_matrix3du_alloc failed"));
esp_camera_fb_return(fb);
return ESP_FAIL;
}
out_buf = image_matrix->item;
//out_len = fb->width * fb->height * 3;
//out_width = fb->width;
//out_height = fb->height;
s = fmt2rgb888(fb->buf, fb->len, fb->format, out_buf);
esp_camera_fb_return(fb);
if (!s){
dl_matrix3du_free(image_matrix);
AddLog_P2(WC_LOGLEVEL, PSTR("CAM: to rgb888 failed"));
return ESP_FAIL;
}
box_array_t *net_boxes = face_detect(image_matrix, &mtmn_config);
if (net_boxes){
detected = true;
faces = net_boxes->len;
//if(recognition_enabled){
// face_id = run_face_recognition(image_matrix, net_boxes);
//}
//draw_face_boxes(image_matrix, net_boxes, face_id);
free(net_boxes->score);
free(net_boxes->box);
free(net_boxes->landmark);
free(net_boxes);
} else {
faces = 0;
}
dl_matrix3du_free(image_matrix);
//Serial.printf("face detected: %d",faces);
}
}
#endif
void handleMjpeg_task(void) {
camera_fb_t *wc_fb;
size_t _jpg_buf_len = 0;
@ -472,6 +634,7 @@ void handleMjpeg_task(void) {
goto exit;
}
if (wc_fb->format != PIXFORMAT_JPEG) {
jpeg_converted = frame2jpg(wc_fb, 80, &_jpg_buf, &_jpg_buf_len);
if (!jpeg_converted){
@ -524,7 +687,6 @@ void CamHandleRoot(void) {
//CamServer->redirect("http://" + String(ip) + ":81/cam.mjpeg");
CamServer->sendHeader("Location", WiFi.localIP().toString() + ":81/cam.mjpeg");
CamServer->send(302, "", "");
//Serial.printf("WC root called");
AddLog_P2(WC_LOGLEVEL, PSTR("CAM: root called"));
}
@ -535,10 +697,10 @@ uint32_t motion_brightness;
uint8_t *last_motion_buffer;
uint32_t wc_set_motion_detect(int32_t value) {
if (value >= 0) { motion_detect=value; }
if (value >= 0) { motion_detect = value; }
if (-1 == value) {
return motion_trigger;
} else {
} else {
return motion_brightness;
}
}
@ -546,7 +708,7 @@ uint32_t wc_set_motion_detect(int32_t value) {
// optional motion detector
void detect_motion(void) {
camera_fb_t *wc_fb;
uint8_t *out_buf=0;
uint8_t *out_buf = 0;
if ((millis()-motion_ltime) > motion_detect) {
motion_ltime = millis();
@ -589,12 +751,10 @@ void detect_motion(void) {
}
void wc_show_stream(void) {
#ifndef USE_SCRIPT
if (CamServer) {
WSContentSend_P(PSTR("<p></p><center><img src='http://%s:81/stream' alt='Webcam stream' style='width:99%%;'></center><p></p>"),
WiFi.localIP().toString().c_str());
WiFi.localIP().toString().c_str());
}
#endif
}
uint32_t wc_set_streamserver(uint32_t flag) {
@ -625,6 +785,9 @@ uint32_t wc_set_streamserver(uint32_t flag) {
void WcStreamControl(uint32_t resolution) {
wc_set_streamserver(resolution);
/*if (0 == resolution) {
resolution=-1;
}*/
wc_setup(resolution);
}
@ -632,6 +795,9 @@ void wc_loop(void) {
if (CamServer) { CamServer->handleClient(); }
if (wc_stream_active) { handleMjpeg_task(); }
if (motion_detect) { detect_motion(); }
#ifdef USE_FACE_DETECT
if (face_detect_time) { detect_face(); }
#endif
}
void wc_pic_setup(void) {
@ -672,6 +838,7 @@ void WcInit(void) {
}
}
/*********************************************************************************************\
* Commands
\*********************************************************************************************/
@ -689,7 +856,7 @@ void (* const WCCommand[])(void) PROGMEM = {
void CmndWebcam(void) {
uint32_t flag = 0;
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 10)) {
Settings.esp32_webcam_resolution = XdrvMailbox.payload;
Settings.esp32_webcam_resolution=XdrvMailbox.payload;
WcStreamControl(Settings.esp32_webcam_resolution);
}
if (CamServer) { flag = 1; }
@ -711,15 +878,21 @@ bool Xdrv39(uint8_t function) {
wc_pic_setup();
break;
case FUNC_WEB_ADD_MAIN_BUTTON:
WcStreamControl(Settings.esp32_webcam_resolution);
wc_show_stream();
break;
//if (Settings.esp32_webcam_resolution) {
#ifndef USE_SCRIPT
WcStreamControl(Settings.esp32_webcam_resolution);
delay(50); // Give the webcam webserver some time to prepare the stream
wc_show_stream();
#endif
//}
break;
case FUNC_COMMAND:
result = DecodeCommand(kWCCommands, WCCommand);
break;
case FUNC_PRE_INIT:
WcInit();
break;
}
return result;
}

View File

@ -64,9 +64,13 @@
// TODO() : Move to my_user_config.h file
#define USE_APDS9960_GESTURE // Enable Gesture feature (+2k code)
#define USE_APDS9960_PROXIMITY // Enable Proximity feature (Not use)
#define USE_APDS9960_COLOR // Enable Color feature (Not use)
#define USE_APDS9960_PROXIMITY // Enable Proximity feature (>50 code)
#define USE_APDS9960_COLOR // Enable Color feature (+0.8k code)
#define APDS9960_MODE_GESTURE 0
#define APDS9960_MODE_COLOR 1
#define USE_APDS9960_STARTMODE APDS9960_MODE_GESTURE
/* Gesture parameters */
#define GESTURE_THRESHOLD_OUT 10
@ -96,16 +100,19 @@ const char APDS9960_TAG[] PROGMEM = "APDS9960"; // Only one actualy
#ifdef USE_WEBSERVER
#ifdef USE_APDS9960_GESTURE
const char HTTP_SNS_GESTURE[] PROGMEM = "{s}%s " D_GESTURE "{m}%s{e}";
#endif // USE_APDS9960_GESTURE
#ifdef USE_APDS9960_COLOR
const char HTTP_SNS_COLOR_RED[] PROGMEM = "{s}%s " D_COLOR_RED "{m}%u{e}";
const char HTTP_SNS_COLOR_GREEN[] PROGMEM = "{s}%s " D_COLOR_GREEN "{m}%u{e}";
const char HTTP_SNS_COLOR_BLUE[] PROGMEM = "{s}%s " D_COLOR_BLUE "{m}%u{e}";
const char HTTP_SNS_CCT[] PROGMEM = "{s}%s " D_CCT "{m}%u " D_UNIT_KELVIN "{e}";
#endif // USE_APDS9960_COLOR
#ifdef USE_APDS9960_PROXIMITY
const char HTTP_SNS_PROXIMITY[] PROGMEM = "{s}%s " D_PROXIMITY "{m}%u{e}";
#endif // USE_APDS9960_PROXIMITY
#endif // USE_WEBSERVER
@ -321,6 +328,7 @@ typedef struct gesture_type {
#endif // USE_APDS9960_GESTURE
#if defined(USE_APDS9960_COLOR) || defined(USE_APDS9960_PROXIMITY)
typedef struct color_data_type {
uint16_t a; // measured ambient
uint16_t r; // Red
@ -331,32 +339,33 @@ typedef struct color_data_type {
uint16_t cct; // calculated color temperature
uint16_t lux; // calculated illuminance - atm only from rgb
} color_data_t;
#endif // USE_APDS9960_COLOR || USE_APDS9960_PROXIMITY
/******************************************************************************\
* Globals
\******************************************************************************/
#ifdef USE_APDS9960_GESTURE
gesture_data_t gesture_data;
gesture_t gesture;
#endif // USE_APDS9960_GESTURE
char currentGesture[6];
#endif // USE_APDS9960_GESTURE
#if defined(USE_APDS9960_COLOR) || defined(USE_APDS9960_PROXIMITY)
color_data_t color_data;
#endif // USE_APDS9960_COLOR || USE_APDS9960_PROXIMITY
volatile uint8_t recovery_loop_counter = 0; // count number of stateloops to switch the sensor off, if needed
volatile uint8_t recovery_loop_counter = 0; // count number of stateloops to switch the sensor off, if needed
bool APDS9960_overload = false;
uint8_t APDS9960_aTime = DEFAULT_ATIME;
uint8_t APDS9960_type = 0;
uint8_t gesture_mode = 1;
uint8_t gesture_mode = 1; // 1 : Gesture | 2 : Color
/******************************************************************************\
* Helper functions
\******************************************************************************/
#ifdef USE_APDS9960_COLOR
/**
* Taken from the Adafruit-library
* @brief Converts the raw R/G/B values to color temperature in degrees
@ -388,6 +397,7 @@ void calculateColorTemperature(void) {
return;
}
#endif // USE_APDS9960_COLOR
/******************************************************************************\
* Getters and setters for register values
@ -1249,7 +1259,6 @@ bool APDS9960_init(void) {
/* Set default values for gesture sense registers */
#ifdef USE_APDS9960_GESTURE
setGestureEnterThresh(DEFAULT_GPENTH);
setGestureExitThresh(DEFAULT_GEXTH);
@ -1267,7 +1276,6 @@ bool APDS9960_init(void) {
I2cWrite8(APDS9960_I2C_ADDR, APDS9960_GCONF3, DEFAULT_GCONF3);
setGestureIntEnable(DEFAULT_GIEN);
#endif // USE_APDS9960_GESTURE
disablePower(); // go to sleep
@ -1543,6 +1551,7 @@ inline void disablePower(void) {
* Ambient light and color sensor controls
\******************************************************************************/
#if defined(USE_APDS9960_COLOR) || defined(USE_APDS9960_PROXIMITY)
/**
* @brief Reads the ARGB-Data and fills color_data
*/
@ -1553,6 +1562,38 @@ inline void readAllColorAndProximityData(void) {
}
}
void APDS9960_adjustATime(void) { // not really used atm
// readAllColorAndProximityData();
I2cValidRead16LE(&color_data.a, APDS9960_I2C_ADDR, APDS9960_CDATAL);
// disablePower();
if (color_data.a < (uint16_t)20) {
APDS9960_aTime = 0x40;
} else if (color_data.a < (uint16_t)40) {
APDS9960_aTime = 0x80;
} else if (color_data.a < (uint16_t)50) {
APDS9960_aTime = DEFAULT_ATIME;
} else if (color_data.a < (uint16_t)70) {
APDS9960_aTime = 0xc0;
}
if (color_data.a < 200) {
APDS9960_aTime = 0xe9;
}
/* if (color_data.a < 10000){
APDS9960_aTime = 0xF0;
}*/
else {
APDS9960_aTime = 0xff;
}
// disableLightSensor();
I2cWrite8(APDS9960_I2C_ADDR, APDS9960_ATIME, APDS9960_aTime);
enablePower();
enableLightSensor();
delay(20);
}
#endif // USE_APDS9960_COLOR || USE_APDS9960_PROXIMITY
/******************************************************************************\
* High-level gesture controls
@ -1754,42 +1795,6 @@ void handleGesture(void) {
}
}
#endif // USE_APDS9960_GESTURE
void APDS9960_adjustATime(void) { // not really used atm
// readAllColorAndProximityData();
I2cValidRead16LE(&color_data.a, APDS9960_I2C_ADDR, APDS9960_CDATAL);
// disablePower();
if (color_data.a < (uint16_t)20) {
APDS9960_aTime = 0x40;
} else if (color_data.a < (uint16_t)40) {
APDS9960_aTime = 0x80;
} else if (color_data.a < (uint16_t)50) {
APDS9960_aTime = DEFAULT_ATIME;
} else if (color_data.a < (uint16_t)70) {
APDS9960_aTime = 0xc0;
}
if (color_data.a < 200) {
APDS9960_aTime = 0xe9;
}
/* if (color_data.a < 10000){
APDS9960_aTime = 0xF0;
}*/
else {
APDS9960_aTime = 0xff;
}
// disableLightSensor();
I2cWrite8(APDS9960_I2C_ADDR, APDS9960_ATIME, APDS9960_aTime);
enablePower();
enableLightSensor();
delay(20);
}
#ifdef USE_APDS9960_GESTURE
void APDS9960_loop(void) {
if (recovery_loop_counter > 0) {
recovery_loop_counter -= 1;
@ -1835,9 +1840,17 @@ void APDS9960_detect(void) {
I2cSetActiveFound(APDS9960_I2C_ADDR, APDS9960_TAG);
enableProximitySensor();
#ifdef USE_APDS9960_GESTURE
#if defined(USE_APDS9960_GESTURE) && USE_APDS9960_STARTMODE == APDS9960_MODE_GESTURE
gesture_mode = 1;
enableGestureSensor();
#endif // USE_APDS9960_GESTURE
#if ( defined(USE_APDS9960_COLOR) || defined(USE_APDS9960_PROXIMITY) ) && USE_APDS9960_STARTMODE == APDS9960_MODE_COLOR
gesture_mode = 0;
enableLightSensor();
APDS9960_overload = false;
#endif // USE_APDS9960_GESTURE
} else {
APDS9960_type = 0;
}
@ -1845,7 +1858,9 @@ void APDS9960_detect(void) {
APDS9960_type = 0;
}
#ifdef USE_APDS9960_GESTURE
currentGesture[0] = '\0';
#endif // USE_APDS9960_GESTURE
}
/*********************************************************************************************\
@ -1856,6 +1871,8 @@ void APDS9960_show(bool json) {
if (!APDS9960_type) { return; }
if (!gesture_mode && !APDS9960_overload) {
#if defined(USE_APDS9960_COLOR) || defined(USE_APDS9960_PROXIMITY)
uint16_t ambient;
readAllColorAndProximityData();
@ -1865,8 +1882,11 @@ void APDS9960_show(bool json) {
I2cWrite8(APDS9960_I2C_ADDR, APDS9960_ATIME, DEFAULT_ATIME); // reset to default
enableLightSensor();*/
#ifdef USE_APDS9960_COLOR
calculateColorTemperature(); // and calculate Lux
#endif // USE_APDS9960_COLOR
if (json) {
#if defined(USE_APDS9960_COLOR) && defined(USE_APDS9960_PROXIMITY)
ResponseAppend_P(PSTR(",\"%s\":{\"Red\":%u,\"Green\":%u,\"Blue\":%u,\"" D_JSON_ILLUMINANCE "\":%u,\"CCT\":%u,\"Proximity\":%u}"),
APDS9960_TAG,
color_data.r,
@ -1875,16 +1895,44 @@ void APDS9960_show(bool json) {
ambient,
color_data.cct,
color_data.p);
#else
#ifdef USE_APDS9960_COLOR
ResponseAppend_P(PSTR(",\"%s\":{\"Red\":%u,\"Green\":%u,\"Blue\":%u,\"" D_JSON_ILLUMINANCE "\":%u,\"CCT\":%u}"),
APDS9960_TAG,
color_data.r,
color_data.g,
color_data.b,
ambient,
color_data.cct);
#endif // USE_APDS9960_COLOR
#ifdef USE_APDS9960_PROXIMITY
ResponseAppend_P(PSTR(",\"%s\":{\"Proximity\":%u}"),
APDS9960_TAG,
color_data.p);
#endif // USE_APDS9960_PROXIMITY
#endif // USE_APDS9960_COLOR && USE_APDS9960_PROXIMITY
#ifdef USE_WEBSERVER
} else {
#ifdef USE_APDS9960_COLOR
WSContentSend_PD(HTTP_SNS_COLOR_RED, APDS9960_TAG, color_data.r);
WSContentSend_PD(HTTP_SNS_COLOR_GREEN, APDS9960_TAG, color_data.g);
WSContentSend_PD(HTTP_SNS_COLOR_BLUE, APDS9960_TAG, color_data.b);
WSContentSend_PD(HTTP_SNS_ILLUMINANCE, APDS9960_TAG, ambient);
WSContentSend_PD(HTTP_SNS_CCT, APDS9960_TAG, color_data.cct);
#endif // USE_APDS9960_COLOR
#ifdef USE_APDS9960_PROXIMITY
WSContentSend_PD(HTTP_SNS_PROXIMITY, APDS9960_TAG, color_data.p);
#endif // USE_APDS9960_PROXIMITY
#endif // USE_WEBSERVER
}
#endif // USE_APDS9960_COLOR || USE_APDS9960_PROXIMITY
#ifdef USE_APDS9960_GESTURE
} else {
if (currentGesture[0] != '\0') {
@ -1898,6 +1946,7 @@ void APDS9960_show(bool json) {
}
}
#endif // USE_APDS9960_GESTURE
}
}