mirror of https://github.com/arendst/Tasmota.git
v5.8.0n - Add language, device and clock commands
5.8.0n * Fix minimum TelePeriod of 10 seconds set by web page * Shrink information web page by 1k code space * Removed Arduino IDE version too low warning as it interferes with platformio.ini platform = espressif8266_stage * Add commands Color2, Color3, Color4, Width2, Width3, Width4 and SetOption16 to set Ws2812 Clock parameters (#1019) * Add Polish language file (#1044, #1047) * Add support for KMC 70011 Power Monitoring Smart Plug (#1045) * Corrected German language file (#1054)
This commit is contained in:
parent
fc89330056
commit
1296432da2
|
@ -1,7 +1,7 @@
|
|||
## Sonoff-Tasmota
|
||||
Provide ESP8266 based Sonoff by [iTead Studio](https://www.itead.cc/) and ElectroDragon IoT Relay with Serial, Web and MQTT control allowing 'Over the Air' or OTA firmware updates using Arduino IDE.
|
||||
|
||||
Current version is **5.8.0m** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/development/sonoff/_releasenotes.ino) for change information.
|
||||
Current version is **5.8.0n** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/development/sonoff/_releasenotes.ino) for change information.
|
||||
|
||||
### ATTENTION All versions
|
||||
|
||||
|
|
|
@ -14,10 +14,10 @@ src_dir = sonoff
|
|||
;env_default = sonoff
|
||||
;env_default = sonoff-NL
|
||||
;env_default = sonoff-DE
|
||||
;env_default = sonoff-PL
|
||||
;env_default = sonoff-minimal
|
||||
;env_default = sonoff-ds18x20
|
||||
|
||||
; *** Sonoff et al
|
||||
[env:sonoff]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
|
@ -40,7 +40,6 @@ monitor_baud = 115200
|
|||
;upload_port = domus1:80/api/upload-arduino.php
|
||||
;extra_scripts = pio/http-uploader.py
|
||||
|
||||
; *** Sonoff et al
|
||||
[env:sonoff-NL]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
|
@ -63,7 +62,6 @@ monitor_baud = 115200
|
|||
;upload_port = domus1:80/api/upload-arduino.php
|
||||
;extra_scripts = pio/http-uploader.py
|
||||
|
||||
; *** Sonoff et al
|
||||
[env:sonoff-DE]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
|
@ -86,6 +84,28 @@ monitor_baud = 115200
|
|||
;upload_port = domus1:80/api/upload-arduino.php
|
||||
;extra_scripts = pio/http-uploader.py
|
||||
|
||||
[env:sonoff-PL]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = esp01_1m
|
||||
board_flash_mode = dout
|
||||
build_flags = -Wl,-Tesp8266.flash.1m0.ld -DMQTT_MAX_PACKET_SIZE=512 -DMY_LANGUAGE=pl-PL
|
||||
lib_deps = PubSubClient, NeoPixelBus, IRremoteESP8266, ArduinoJSON
|
||||
|
||||
; *** Serial Monitor options
|
||||
monitor_baud = 115200
|
||||
|
||||
; *** Upload Serial reset method for Wemos and NodeMCU
|
||||
;upload_resetmethod = nodemcu
|
||||
|
||||
; *** Upload file to OTA server using SCP
|
||||
;upload_port = user@host:/path
|
||||
;extra_scripts = pio/sftp-uploader.py
|
||||
|
||||
; *** Upload file to OTA server using HTTP
|
||||
;upload_port = domus1:80/api/upload-arduino.php
|
||||
;extra_scripts = pio/http-uploader.py
|
||||
|
||||
; Sonoff minimal
|
||||
[env:sonoff-minimal] ; Placeholder to be configured
|
||||
platform = espressif8266
|
||||
|
|
|
@ -1,4 +1,13 @@
|
|||
/* 5.8.0m
|
||||
/* 5.8.0n
|
||||
* Fix minimum TelePeriod of 10 seconds set by web page
|
||||
* Shrink information web page by 1k code space
|
||||
* Removed Arduino IDE version too low warning as it interferes with platformio.ini platform = espressif8266_stage
|
||||
* Add commands Color2, Color3, Color4, Width2, Width3, Width4 and SetOption16 to set Ws2812 Clock parameters (#1019)
|
||||
* Add Polish language file (#1044, #1047)
|
||||
* Add support for KMC 70011 Power Monitoring Smart Plug (#1045)
|
||||
* Corrected German language file (#1054)
|
||||
*
|
||||
* 5.8.0m
|
||||
* Rewrite code (partly) using Google C++ Style Guide (https://google.github.io/styleguide/cppguide.html)
|
||||
* Allow empty MqttHost name by using option 0
|
||||
* Allow Mqtt server mDNS lookup only when MqttHost name is empty (#1026)
|
||||
|
@ -77,7 +86,7 @@
|
|||
* Fix compile error when DOMOTICZ_UPDATE_TIMER is not defined (#930)
|
||||
* Fix alignment of web page items in some browsers (#935)
|
||||
* Add smoother movement of hour hand in WS2812 led clock (#936)
|
||||
* Add support for Magic Home RGBW Led controller (#940)
|
||||
* Add support for Magic Home and Arilux RGBW Led controller (#940)
|
||||
*
|
||||
* 5.8.0b
|
||||
* Fix command FullTopic entry when using serial or console interface
|
||||
|
|
|
@ -100,12 +100,12 @@
|
|||
#define D_FREE_MEMORY "freier Speicher"
|
||||
#define D_FREEMEMORY "frei"
|
||||
#define D_FROM "von"
|
||||
#define D_GATEWAY "gateway"
|
||||
#define D_GATEWAY "Gateway"
|
||||
#define D_GROUP "Gruppe"
|
||||
#define D_HEAPSIZE "Heap-Größe"
|
||||
#define D_HIGH "hoch"
|
||||
#define D_HOST "host"
|
||||
#define D_HOSTNAME "hostname"
|
||||
#define D_HOSTNAME "Hostname"
|
||||
#define D_HUMIDITY "Feuchtigkeit"
|
||||
#define D_ILLUMINANCE "Beleuchtungsintensität"
|
||||
#define D_IMMEDIATE "direkt" // Button immediate
|
||||
|
@ -187,7 +187,7 @@
|
|||
#define D_UNKNOWN "unbekannt"
|
||||
#define D_UPGRADE "upgrade"
|
||||
#define D_UPLOAD "upload"
|
||||
#define D_UPTIME "uptime"
|
||||
#define D_UPTIME "Laufzeit"
|
||||
#define D_UTC_TIME "UTC"
|
||||
#define D_USER "Benutzer"
|
||||
#define D_VCC "VCC"
|
||||
|
@ -273,7 +273,7 @@
|
|||
#define D_CONFIGURE_MQTT "MQTT konfigurieren"
|
||||
#define D_CONFIGURE_DOMOTICZ "Domoticz konfigurieren"
|
||||
#define D_CONFIGURE_LOGGING "Logging konfigurieren"
|
||||
#define D_CONFIGURE_OTHER "Andere konfigurieren"
|
||||
#define D_CONFIGURE_OTHER "Sonstige Konfiguration"
|
||||
#define D_CONFIRM_RESET_CONFIGURATION "Zurücksetzen der Konfiguration bestätigen"
|
||||
#define D_RESET_CONFIGURATION "Konfiguration zurücksetzen"
|
||||
#define D_BACKUP_CONFIGURATION "Konfiguration sichern"
|
||||
|
@ -443,9 +443,9 @@
|
|||
#define D_POWERMONITOR "PowerMonitor"
|
||||
#define D_ENERGYMONITOR "EnergyMonitor"
|
||||
#define D_MAXENERGYREACHED "MaxEnergyReached"
|
||||
#define D_ENERGY_TODAY "Strom heute"
|
||||
#define D_ENERGY_YESTERDAY "Strom gestern"
|
||||
#define D_ENERGY_TOTAL "Stromtotal"
|
||||
#define D_ENERGY_TODAY "Energie heute"
|
||||
#define D_ENERGY_YESTERDAY "Energie gestern"
|
||||
#define D_ENERGY_TOTAL "Energie insgesamt"
|
||||
|
||||
// xsns_sht1x.ino
|
||||
#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor hat ACK-Befehl nicht ausgeführt"
|
||||
|
|
|
@ -0,0 +1,688 @@
|
|||
/*
|
||||
pl-PL.h - localization for Polish without fonetick - Poland for Sonoff-Tasmota
|
||||
|
||||
Copyright (C) 2017 Theo Arends (translated by roblad - Robert L.)
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef _LANGUAGE_PL_PL_H_
|
||||
#define _LANGUAGE_PL_PL_H_
|
||||
|
||||
/*************************** ATTENTION *******************************\
|
||||
*
|
||||
* Due to memory constraints only UTF-8 is supported.
|
||||
* To save code space keep text as short as possible.
|
||||
* Time and Date provided by SDK can not be localized (yet).
|
||||
* Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
|
||||
* Use online command Prefix to translate cmnd, stat and tele.
|
||||
*
|
||||
\*********************************************************************/
|
||||
|
||||
// "2017-03-07T11:08:02" - ISO8601:2004
|
||||
#define D_YEAR_MONTH_SEPARATOR "-"
|
||||
#define D_MONTH_DAY_SEPARATOR "-"
|
||||
#define D_DATE_TIME_SEPARATOR "T"
|
||||
#define D_HOUR_MINUTE_SEPARATOR ":"
|
||||
#define D_MINUTE_SECOND_SEPARATOR ":"
|
||||
|
||||
#define D_DAY3LIST "PonWtoSroCzwPiaSobNie"
|
||||
#define D_MONTH3LIST "StyLutMarKwiMajCzeLipSieWrzPazLisGru"
|
||||
|
||||
// Non JSON decimal separator
|
||||
#define D_DECIMAL_SEPARATOR ","
|
||||
|
||||
// Common
|
||||
#define D_ABORTED "Anulowany"
|
||||
#define D_ACTIVE "Aktywny"
|
||||
#define D_ADDRESS "Adres"
|
||||
#define D_ADMIN "Admin"
|
||||
#define D_AIR_QUALITY "Jakosc powietrza"
|
||||
#define D_AIRQUALITY "JakPowietrza"
|
||||
#define D_AP "AP" // Access Point
|
||||
#define D_APMAC_ADDRESS "APMac"
|
||||
#define D_APPENDED "Dolaczony"
|
||||
#define D_AS "jak"
|
||||
#define D_AUTO "AUTO"
|
||||
#define D_BAUDRATE "Szybkosc transmisji"
|
||||
#define D_BLINK "Miganie"
|
||||
#define D_BLINKOFF "MiganieWyl"
|
||||
#define D_BOOTVERSION "Uruchomienie"
|
||||
#define D_BOOT_COUNT "Licznik uruchomienia"
|
||||
#define D_BOOTCOUNT "LiczUruchomienia"
|
||||
#define D_BRIGHTLIGHT "Jasny"
|
||||
#define D_BUILDDATETIME "ZbudowanoDataCzas"
|
||||
#define D_BUTTON "Przycisk"
|
||||
#define D_CELSIUS "Celsiusza"
|
||||
#define D_CODE "kod" // Button code
|
||||
#define D_COLDLIGHT "Zimny"
|
||||
#define D_COMMAND "Komenda"
|
||||
#define D_CONNECTED "Polaczony"
|
||||
#define D_COREVERSION "Wersja"
|
||||
#define D_COUNT "Licz"
|
||||
#define D_COUNTER "Licznik"
|
||||
#define D_CURRENT "Biezacy" // As in Voltage and Current
|
||||
#define D_DATA "Data"
|
||||
#define D_DARKLIGHT "Ciemny"
|
||||
#define D_DEBUG "Debug"
|
||||
#define D_DISABLED "Zablokowany"
|
||||
#define D_DNS_SERVER "Server DNS"
|
||||
#define D_DNSSERVER "ServerDNS"
|
||||
#define D_DONE "Wykonane"
|
||||
#define D_DST_TIME "DST"
|
||||
#define D_EMPTY "Pusty"
|
||||
#define D_EMULATION "Emulacja"
|
||||
#define D_ENABLED "Otwarty"
|
||||
#define D_ENDDST "KoniecDST" // End Daylight Savings Time
|
||||
#define D_ERASE "Nadpisz"
|
||||
#define D_ERROR "Blad"
|
||||
#define D_EVERY "Kazdy"
|
||||
#define D_FAHRENHEIT "Fahrenheita"
|
||||
#define D_FAILED "Bledny"
|
||||
#define D_FALLBACK "Awaryjny"
|
||||
#define D_FALLBACK_TOPIC "Zastepczy temat"
|
||||
#define D_FALLBACKTOPIC "ZastepczyTemat"
|
||||
#define D_FALSE "Falsz"
|
||||
#define D_FILE "Plik"
|
||||
#define D_FLASHMODE "FlashMode"
|
||||
#define D_FLASHSIZE "FlashWielkosc"
|
||||
#define D_FREE_MEMORY "Wolna pamiec"
|
||||
#define D_FREEMEMORY "Wolne"
|
||||
#define D_FROM "z"
|
||||
#define D_GATEWAY "Brama"
|
||||
#define D_GROUP "Grupa"
|
||||
#define D_HEAPSIZE "Stos"
|
||||
#define D_HIGH "Wysoki"
|
||||
#define D_HOST "Serwer"
|
||||
#define D_HOSTNAME "Nazwa serwera"
|
||||
#define D_HUMIDITY "Wilgotnosc"
|
||||
#define D_ILLUMINANCE "Oswietlenie"
|
||||
#define D_IMMEDIATE "Natychmiastowe" // Button immediate
|
||||
#define D_INDEX "Indeks"
|
||||
#define D_INFO "Informacja"
|
||||
#define D_INITIALIZED "Zainicjowany"
|
||||
#define D_IP_ADDRESS "Adres IP"
|
||||
#define D_LIGHT "Swiatlo"
|
||||
#define D_LOCAL_TIME "Lokalny"
|
||||
#define D_LOW "Niski"
|
||||
#define D_LWT "LWT"
|
||||
#define D_MAC "Mac"
|
||||
#define D_MASK "Maska"
|
||||
#define D_MODULE "Modul"
|
||||
#define D_MQTT "MQTT"
|
||||
#define D_MULTI_PRESS "wielokrotne-nacisniecie"
|
||||
#define D_NO "Nie"
|
||||
#define D_NOISE "Halas"
|
||||
#define D_NONE "Brak"
|
||||
#define D_OFF "Wylaczony"
|
||||
#define D_OFFLINE "Nieaktywny"
|
||||
#define D_OK "Ok"
|
||||
#define D_ON "Wlaczony"
|
||||
#define D_ONLINE "Aktywny"
|
||||
#define D_OR "lub"
|
||||
#define D_PASSWORD "Haslo"
|
||||
#define D_PERIOD "Okres"
|
||||
#define D_PORT "Port"
|
||||
#define D_POWER_FACTOR "Wspolczynik mocy"
|
||||
#define D_POWERFACTOR "WspolczynikMocy"
|
||||
#define D_POWERUSAGE "Moc"
|
||||
#define D_PRESSURE "Cisnienie"
|
||||
#define D_PRESSUREATSEALEVEL "Cisnienie na poziomie morza"
|
||||
#define D_PROGRAM_FLASH_SIZE "Wielkosc programu flash"
|
||||
#define D_PROGRAMFLASHSIZE "ProgramFlashSize"
|
||||
#define D_PROGRAM_SIZE "Wielkosc programu"
|
||||
#define D_PROGRAMSIZE "ProgramSize"
|
||||
#define D_PROJECT "Projekt"
|
||||
#define D_RECEIVED "Otrzymany"
|
||||
#define D_RESTART "Restart"
|
||||
#define D_RESTARTING "Restartowanie"
|
||||
#define D_RESTART_REASON "Przyczyna restartu"
|
||||
#define D_RESTARTREASON "PrzyczynaRestartu"
|
||||
#define D_RESTORE "Przywracanie"
|
||||
#define D_RETAINED "Zachowane"
|
||||
#define D_SAVE "Zapisz"
|
||||
#define D_SAVEADDRESS "AdresZapisu"
|
||||
#define D_SAVECOUNT "LicznikZapisu"
|
||||
#define D_SAVESTATE "StanZapisu"
|
||||
#define D_SDKVERSION "SDK"
|
||||
#define D_SELECTED "Wybrany"
|
||||
#define D_SENSOR "Czujnik"
|
||||
#define D_SERIAL "Serial"
|
||||
#define D_BYTES "Bajtow"
|
||||
#define D_SSID "SSID"
|
||||
#define D_START "Start"
|
||||
#define D_STARTED "Uruchomiony"
|
||||
#define D_STARTDST "StartDST" // Start Daylight Savings Time
|
||||
#define D_STD_TIME "STD"
|
||||
#define D_STOP "Stop"
|
||||
#define D_SUBNET_MASK "Maska podsieci"
|
||||
#define D_SUBNETMASK "MaskaPodsieci"
|
||||
#define D_SUBSCRIBE_TO "Subskrybuj do"
|
||||
#define D_SUCCESSFUL "Powodzenie"
|
||||
#define D_SWITCH "Przelacznik"
|
||||
#define D_SYNC "Sync"
|
||||
#define D_SYS "System " // Sys log
|
||||
#define D_TEMPERATURE "Temperatura"
|
||||
#define D_TEMPERATURE_UNIT "JednTemp"
|
||||
#define D_TIME "Czas"
|
||||
#define D_TO "do"
|
||||
#define D_TODAY "Dzisiaj"
|
||||
#define D_TOGGLE "Przelacz"
|
||||
#define D_TOPIC "Temat"
|
||||
#define D_TOTAL "Suma"
|
||||
#define D_TRANSMIT "Wyslij"
|
||||
#define D_TRUE "Prawda"
|
||||
#define D_TYPE "Typ"
|
||||
#define D_UNKNOWN "Nieznany"
|
||||
#define D_UPGRADE "Aktualizacji"
|
||||
#define D_UPLOAD "Wgraj"
|
||||
#define D_UPTIME "Uptime"
|
||||
#define D_UTC_TIME "UTC"
|
||||
#define D_USER "Uzytkownik"
|
||||
#define D_VCC "VCC"
|
||||
#define D_VERSION "Wersja"
|
||||
#define D_VOLTAGE "Napiecie"
|
||||
#define D_WARMLIGHT "Nagrzanie"
|
||||
#define D_WEB "Web" // Web log
|
||||
#define D_WEB_SERVER "Web Server"
|
||||
#define D_WIFI "Wifi"
|
||||
#define D_WRONG "Bledny"
|
||||
#define D_YESTERDAY "Wczoraj"
|
||||
|
||||
// settings.ino
|
||||
#define D_SAVED_TO_FLASH_AT "Zapisane do pamieci flash w"
|
||||
#define D_LOADED_FROM_FLASH_AT "Wczytane z pamieci flash z"
|
||||
#define D_USE_DEFAULTS "Uzyj domyslnych"
|
||||
#define D_ERASED_SECTOR "Wymazany sektor"
|
||||
|
||||
// sonoff.ino
|
||||
#define D_LEVEL_10 "poziom 1-0"
|
||||
#define D_LEVEL_01 "poziom 0-1"
|
||||
#define D_SERIAL_LOGGING_DISABLED "Wylaczony dziennik na porcie szeregowym"
|
||||
#define D_SYSLOG_LOGGING_REENABLED "Wznowiono zapis do Syslog"
|
||||
|
||||
#define D_SET_BAUDRATE_TO "Ustaw szybkosc transmisji na"
|
||||
#define D_RECEIVED_TOPIC "Otrzymany temat"
|
||||
#define D_DATA_SIZE "Wielkosc danych"
|
||||
#define D_ANALOG_INPUT0 "Wejscie analogowe-0"
|
||||
|
||||
#define D_FINGERPRINT "Weryfikuj odcisk TLS..."
|
||||
#define D_TLS_CONNECT_FAILED_TO "Nieudane polaczenie TLS do"
|
||||
#define D_RETRY_IN "Sprobuj ponownie"
|
||||
#define D_VERIFIED "Zweryfikowano"
|
||||
#define D_INSECURE "Nieprawidlowe polaczenie z powodu blednego odcisku TLS"
|
||||
#define D_CONNECT_FAILED_TO "Nie udalo sie nawiazac polaczenia"
|
||||
|
||||
// support.ino
|
||||
#define D_OSWATCH "osWatch"
|
||||
#define D_BLOCKED_LOOP "Petla zablokowana"
|
||||
#define D_WPS_FAILED_WITH_STATUS "Blad WPSconfig ze statusem"
|
||||
#define D_ACTIVE_FOR_1_MINUTE "aktywny 1 minute"
|
||||
#define D_FAILED_TO_START "nie udalo sie uruchomic"
|
||||
#define D_PATCH_ISSUE_2186 "Blad latki 2186"
|
||||
#define D_CONNECTING_TO_AP "Laczenie z AP"
|
||||
#define D_IN_MODE "w trybie"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Polaczenie nie powiodlo sie, poniewaz nie otrzymano adresu IP"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Polaczenie nie powiodlo sie jako AP nie mozna osiagnac"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Polaczenie nie powiodlo sie z nieprawidlowym haslem dostepu AP"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Nie udalo sie nawiazac polaczenia, limit czasu AP przekroczony"
|
||||
#define D_ATTEMPTING_CONNECTION "Proba polaczenia..."
|
||||
#define D_CHECKING_CONNECTION "Sprawdzanie polaczenia..."
|
||||
#define D_QUERY_DONE "Wykonano zapytanie. Znaleziono uslugi MQTT"
|
||||
#define D_MQTT_SERVICE_FOUND "Usluga MQTT została znaleziona"
|
||||
#define D_I2CSCAN_DEVICES_FOUND_AT "Znaleziono urządzenie(a) na"
|
||||
#define D_FOUND_AT "znalezione w"
|
||||
#define D_I2CSCAN_UNKNOWN_ERROR_AT "Nieznany blad w"
|
||||
#define D_I2CSCAN_NO_DEVICES_FOUND "Nie znaleziono urzadzen"
|
||||
#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host nie znaleziony"
|
||||
|
||||
// webserver.ino
|
||||
#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Oprogramowanie MINIMAL - prosze uaktualnic"
|
||||
#define D_WEBSERVER_ACTIVE_ON "Aktywny serwer Web"
|
||||
#define D_WITH_IP_ADDRESS "z adresem IP"
|
||||
#define D_WEBSERVER_STOPPED "Serwer Web zatrzymany"
|
||||
#define D_FILE_NOT_FOUND "Plik nie odnaleziony"
|
||||
#define D_REDIRECTED "Przekierowano do wlasnego portalu"
|
||||
#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Menedzer Wifi ustawia punkt dostepowy i zachowuje stacje"
|
||||
#define D_WIFIMANAGER_SET_ACCESSPOINT "Menedzer sieci Wi-Fi Access Point"
|
||||
#define D_TRYING_TO_CONNECT "Probuje polaczyc urzadzenie z siecia"
|
||||
|
||||
#define D_RESTART_IN "Zrestartuj"
|
||||
#define D_SECONDS "sekund"
|
||||
#define D_DEVICE_WILL_RESTART "Urzadzenie zrestartuje sie za kilka sekund"
|
||||
#define D_BUTTON_TOGGLE "Przelacznik"
|
||||
#define D_CONFIGURATION "Konfiguracja"
|
||||
#define D_INFORMATION "Informacje"
|
||||
#define D_FIRMWARE_UPGRADE "Uaktualnienie oprogramowania"
|
||||
#define D_CONSOLE "Konsola"
|
||||
#define D_CONFIRM_RESTART "Potwierdz restart"
|
||||
|
||||
#define D_CONFIGURE_MODULE "Konfiguruj modul"
|
||||
#define D_CONFIGURE_WIFI "Konfiguruj WiFi"
|
||||
#define D_CONFIGURE_MQTT "Konfiguruj MQTT"
|
||||
#define D_CONFIGURE_DOMOTICZ "Konfiguruj Domoticz"
|
||||
#define D_CONFIGURE_LOGGING "Konfiguruj zapis dziennika"
|
||||
#define D_CONFIGURE_OTHER "Konfiguruj inne"
|
||||
#define D_CONFIRM_RESET_CONFIGURATION "Potwierdz reset ustawien"
|
||||
#define D_RESET_CONFIGURATION "Reset ustawien"
|
||||
#define D_BACKUP_CONFIGURATION "Kopia ustawien"
|
||||
#define D_RESTORE_CONFIGURATION "Przywrocenie ustawien"
|
||||
#define D_MAIN_MENU "Menu glowne"
|
||||
|
||||
#define D_MODULE_PARAMETERS "Parametery modulu"
|
||||
#define D_MODULE_TYPE "Typ modulu"
|
||||
#define D_GPIO "GPIO"
|
||||
#define D_SERIAL_IN "Serial In"
|
||||
#define D_SERIAL_OUT "Serial Out"
|
||||
|
||||
#define D_WIFI_PARAMETERS "Parametry WiFi"
|
||||
#define D_SCAN_FOR_WIFI_NETWORKS "Skanuj sieci WiFi"
|
||||
#define D_SCAN_DONE "Skan wykonany"
|
||||
#define D_NO_NETWORKS_FOUND "Nie znaleziono sieci"
|
||||
#define D_REFRESH_TO_SCAN_AGAIN "Odswiez aby ponownie zeskanowac"
|
||||
#define D_DUPLICATE_ACCESSPOINT "Kopiuj AP"
|
||||
#define D_SKIPPING_LOW_QUALITY "Pominieto z powodu niskiej jakości sygnalu"
|
||||
#define D_RSSI "RSSI"
|
||||
#define D_WEP "WEP"
|
||||
#define D_WPA_PSK "WPA PSK"
|
||||
#define D_WPA2_PSK "WPA2 PSK"
|
||||
#define D_AP1_SSID "AP1 SSID"
|
||||
#define D_AP1_PASSWORD "Haslo AP1"
|
||||
#define D_AP2_SSID "AP2 SSID"
|
||||
#define D_AP2_PASSWORD "Haslo AP2"
|
||||
|
||||
#define D_MQTT_PARAMETERS "Parametery MQTT"
|
||||
#define D_CLIENT "Klient"
|
||||
#define D_FULL_TOPIC "Pelen temat"
|
||||
|
||||
#define D_LOGGING_PARAMETERS "Opcje dziennika"
|
||||
#define D_LOG_LEVEL "poziom dziennika"
|
||||
#define D_MORE_DEBUG "Wiecej informacji debugujacych"
|
||||
#define D_SYSLOG_HOST "Syslog host"
|
||||
#define D_SYSLOG_PORT "Syslog port"
|
||||
#define D_TELEMETRY_PERIOD "Okres telemetrii"
|
||||
|
||||
#define D_OTHER_PARAMETERS "Inne parametery"
|
||||
#define D_WEB_ADMIN_PASSWORD "Haslo administratora Web"
|
||||
#define D_MQTT_ENABLE "MQTT aktywne"
|
||||
#define D_FRIENDLY_NAME "Przyjazna nazwa"
|
||||
#define D_BELKIN_WEMO "Belkin WeMo"
|
||||
#define D_HUE_BRIDGE "Hue Bridge"
|
||||
#define D_SINGLE_DEVICE "single device"
|
||||
#define D_MULTI_DEVICE "multi device"
|
||||
|
||||
#define D_SAVE_CONFIGURATION "Zapisz ustawienia"
|
||||
#define D_CONFIGURATION_SAVED "Ustawienia zapisane"
|
||||
#define D_CONFIGURATION_RESET "Ustawienia zresetowane"
|
||||
|
||||
#define D_PROGRAM_VERSION "Wersja programu"
|
||||
#define D_BUILD_DATE_AND_TIME "Dzien i godzina kompilacji"
|
||||
#define D_CORE_AND_SDK_VERSION "Wersja Core/SDK"
|
||||
#define D_FLASH_WRITE_COUNT "Liczba zapisow do pamieci"
|
||||
#define D_MAC_ADDRESS "Adres Mac"
|
||||
#define D_MQTT_HOST "Host MQTT"
|
||||
#define D_MQTT_PORT "Port MQTT"
|
||||
#define D_MQTT_CLIENT "Klient MQTT"
|
||||
#define D_MQTT_USER "Uzytkownik MQTT"
|
||||
#define D_MQTT_TOPIC "Temat MQTT"
|
||||
#define D_MQTT_GROUP_TOPIC "Temat grupy MQTT"
|
||||
#define D_MQTT_FULL_TOPIC "Pelen temat MQTT"
|
||||
#define D_MDNS_DISCOVERY "Wykrywanie mDNS"
|
||||
#define D_MDNS_ADVERTISE "Rozglaszanie mDNS"
|
||||
#define D_ESP_CHIP_ID "ID ukladu ESP"
|
||||
#define D_FLASH_CHIP_ID "ID ukladu pamieci flash"
|
||||
#define D_FLASH_CHIP_SIZE "Rozmiar flash"
|
||||
#define D_FREE_PROGRAM_SPACE "Wolne miejsce programu"
|
||||
|
||||
#define D_UPGRADE_BY_WEBSERVER "Aktualizacja z serwera Web"
|
||||
#define D_OTA_URL "URL OTA"
|
||||
#define D_START_UPGRADE "Start aktualizacji"
|
||||
#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizacja poprzez wgranie pliku"
|
||||
#define D_UPLOAD_STARTED "Wgrywanie rozpoczete"
|
||||
#define D_UPGRADE_STARTED "Aktualizacja rozpoczeta"
|
||||
#define D_UPLOAD_DONE "Wgrywanie zakonczone"
|
||||
#define D_UPLOAD_ERR_1 "Nie wybrano pliku"
|
||||
#define D_UPLOAD_ERR_2 "Niewystarczajaca ilosc miejsca"
|
||||
#define D_UPLOAD_ERR_3 "Magiczny bajt jest inny niz 0xE9"
|
||||
#define D_UPLOAD_ERR_4 "Rozmiar programu jest wiekszy niz rzeczywisty rozmiar pamieci flash"
|
||||
#define D_UPLOAD_ERR_5 "Wgrywanie, bufor niezgodnosci stanu porownywanych bitow"
|
||||
#define D_UPLOAD_ERR_6 "Blad wgrywania. Uruchomiono zapis do dziennika na poziomie 3"
|
||||
#define D_UPLOAD_ERR_7 "Wgrywanie przerwane"
|
||||
#define D_UPLOAD_ERR_8 "Bledny plik"
|
||||
#define D_UPLOAD_ERR_9 "Plik jest za duzy"
|
||||
#define D_UPLOAD_ERROR_CODE "Blad wgrywania"
|
||||
|
||||
#define D_ENTER_COMMAND "Wprowadz polecenie"
|
||||
#define D_ENABLE_WEBLOG_FOR_RESPONSE "Wlacz poziom 2 zapisu Weblog, jesli oczekiwana jest odpowiedz"
|
||||
#define D_NEED_USER_AND_PASSWORD "Wymagany uzytkownik=<username>&haslo=<password>"
|
||||
|
||||
// xdrv_domoticz.ino
|
||||
#define D_DOMOTICZ_PARAMETERS "Parametry Domoticz"
|
||||
#define D_DOMOTICZ_IDX "Idx"
|
||||
#define D_DOMOTICZ_KEY_IDX "Key idx"
|
||||
#define D_DOMOTICZ_SWITCH_IDX "Przelacznik idx"
|
||||
#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
|
||||
#define DOMOTICZ_SENSORS_MAX_STRING_LENGTH 14
|
||||
#define D_DOMOTICZ_TEMP "Temp"
|
||||
#define D_DOMOTICZ_TEMP_HUM "Temp,Wilg"
|
||||
#define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Wilg,Cis"
|
||||
#define D_DOMOTICZ_POWER_ENERGY "Moc,Energia"
|
||||
#define D_DOMOTICZ_ILLUMINANCE "Oswietl."
|
||||
#define D_DOMOTICZ_COUNT "Licznik"
|
||||
#define D_DOMOTICZ_VOLTAGE "Napiecie"
|
||||
#define D_DOMOTICZ_CURRENT "Prad"
|
||||
#define D_DOMOTICZ_UPDATE_TIMER "Zaktualizuj czasomierz"
|
||||
|
||||
// xdrv_ir-send.ino
|
||||
#define D_INVALID_JSON "Invalid JSON"
|
||||
#define D_PROTOCOL_NOT_SUPPORTED "Protokol nie jest obslugiwany"
|
||||
#define D_IR_PROTOCOL "PROTOCOL"
|
||||
#define D_IR_BITS "BITS"
|
||||
#define D_IR_DATA "DATA"
|
||||
#define D_IRHVAC_VENDOR "VENDOR"
|
||||
#define D_IRHVAC_POWER "POWER"
|
||||
#define D_IRHVAC_MODE "MODE"
|
||||
#define D_IRHVAC_FANSPEED "FANSPEED"
|
||||
#define D_IRHVAC_TEMP "TEMP"
|
||||
#define D_IRRECEIVED "IrReceived"
|
||||
|
||||
// xdrv_snfbridge.ino
|
||||
#define D_RFRECEIVED "RfReceived"
|
||||
#define D_START_LEARNING "Zacznij nauke"
|
||||
#define D_SET_TO_DEFAULT "Ustaw domyslne"
|
||||
#define D_DEFAULT_SENT "Domyslne wyslane"
|
||||
#define D_LEARNED_SENT "Wyuczone wyslane"
|
||||
#define D_LEARNING_ACTIVE "Wyuczone aktywne"
|
||||
#define D_LEARN_FAILED "Uczenie niepowodzenie"
|
||||
#define D_LEARNED "Wyuczone"
|
||||
|
||||
// xdrv_wemohue.ino
|
||||
#define D_MULTICAST_DISABLED "Multicast jest wylaczony"
|
||||
#define D_MULTICAST_REJOINED "Multicast (re)dolaczony"
|
||||
#define D_MULTICAST_JOIN_FAILED "Multicast nie powiodlo sie"
|
||||
#define D_FAILED_TO_SEND_RESPONSE "Nie udalo sie wyslac odpowiedzi"
|
||||
|
||||
#define D_WEMO "WeMo"
|
||||
#define D_WEMO_BASIC_EVENT "WeMo podstawowe zdarzenie"
|
||||
#define D_WEMO_EVENT_SERVICE "WeMo zdarzenie service"
|
||||
#define D_WEMO_SETUP "WeMo setup"
|
||||
#define D_RESPONSE_SENT "Odpowiedz wyslana"
|
||||
|
||||
#define D_HUE "Hue"
|
||||
#define D_HUE_BRIDGE_SETUP "Hue setup"
|
||||
#define D_HUE_API_NOT_IMPLEMENTED "Hue API nie zaimplementowane"
|
||||
#define D_HUE_API "Hue API"
|
||||
#define D_HUE_POST_ARGS "Hue POST args"
|
||||
#define D_3_RESPONSE_PACKETS_SENT "3 pakiety odpowiedzi wysylane"
|
||||
|
||||
// xsns_dht.ino
|
||||
#define D_TIMEOUT_WAITING_FOR "Trwa oczekiwanie"
|
||||
#define D_START_SIGNAL_LOW "sygnał startowy niski"
|
||||
#define D_START_SIGNAL_HIGH "sygnał startowy wysoki"
|
||||
#define D_PULSE "pulse"
|
||||
#define D_CHECKSUM_FAILURE "Bledna suma kontrolmna"
|
||||
|
||||
// xsns_ds18b20.ino
|
||||
#define D_SENSOR_BUSY "Czujnik DS18x20 zajety"
|
||||
#define D_SENSOR_CRC_ERROR "Czujnik DS18x20 blad CRC"
|
||||
|
||||
// xsns_hlw8012.ino
|
||||
#define D_MAXPOWERREACHED "MaksMocOsiagnieta"
|
||||
#define D_MAXPOWERREACHEDRETRY "MaksMocOsiagnietaPonowienie"
|
||||
#define D_POWERMONITOR "MonitorMocy"
|
||||
#define D_ENERGYMONITOR "MonitorEnergii"
|
||||
#define D_MAXENERGYREACHED "MaksEnergiaOsiagnieta"
|
||||
#define D_ENERGY_TODAY "Energia Dzisiaj"
|
||||
#define D_ENERGY_YESTERDAY "Energia Wczoraj"
|
||||
#define D_ENERGY_TOTAL "Energia suma"
|
||||
|
||||
// xsns_sht1x.ino
|
||||
#define D_SENSOR_DID_NOT_ACK_COMMAND "Czujnik nie otrzymal komendy ACK"
|
||||
#define D_SHT1X_FOUND "SHT1X znaleziony"
|
||||
|
||||
// sonoff_template.h
|
||||
// Max string length is 8 characters including suffixes
|
||||
#define D_SENSOR_NONE "Brak"
|
||||
#define D_SENSOR_DHT11 "DHT11"
|
||||
#define D_SENSOR_AM2301 "AM2301"
|
||||
#define D_SENSOR_DHT22 "DHT22"
|
||||
#define D_SENSOR_DS18X20 "DS18x20"
|
||||
#define D_SENSOR_I2C_SCL "I2C SCL"
|
||||
#define D_SENSOR_I2C_SDA "I2C SDA"
|
||||
#define D_SENSOR_WS2812 "WS2812"
|
||||
#define D_SENSOR_IRSEND "IRsend"
|
||||
#define D_SENSOR_SWITCH "Przela" // Suffix "1"
|
||||
#define D_SENSOR_BUTTON "Przyci" // Suffix "1"
|
||||
#define D_SENSOR_RELAY "Przek" // Suffix "1i"
|
||||
#define D_SENSOR_LED "Led" // Suffix "1i"
|
||||
#define D_SENSOR_PWM "PWM" // Suffix "1"
|
||||
#define D_SENSOR_COUNTER "Liczni" // Suffix "1"
|
||||
#define D_SENSOR_IRRECV "IRrecv"
|
||||
#define D_SENSOR_SPI_CS "SPI CS"
|
||||
#define D_SENSOR_SPI_DC "SPI DC"
|
||||
#define D_SENSOR_BACKLIGHT "BLight"
|
||||
|
||||
// Units
|
||||
#define D_UNIT_AMPERE "A"
|
||||
#define D_UNIT_HOUR "Godz"
|
||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||
#define D_UNIT_LUX "lx"
|
||||
#define D_UNIT_MICROSECOND "us"
|
||||
#define D_UNIT_MILLIAMPERE "mA"
|
||||
#define D_UNIT_MILLISECOND "ms"
|
||||
#define D_UNIT_MINUTE "Min"
|
||||
#define D_UNIT_PRESSURE "hPa"
|
||||
#define D_UNIT_SECOND "sec"
|
||||
#define D_UNIT_SECTORS "sektory"
|
||||
#define D_UNIT_VOLT "V"
|
||||
#define D_UNIT_WATT "W"
|
||||
#define D_UNIT_WATTHOUR "Wh"
|
||||
|
||||
// Log message prefix
|
||||
#define D_LOG_APPLICATION "APP: "
|
||||
#define D_LOG_BRIDGE "BRG: "
|
||||
#define D_LOG_CONFIG "CFG: "
|
||||
#define D_LOG_COMMAND "CMD: "
|
||||
#define D_LOG_DHT "DHT: "
|
||||
#define D_LOG_DOMOTICZ "DOM: "
|
||||
#define D_LOG_DSB "DSB: "
|
||||
#define D_LOG_HTTP "HTP: "
|
||||
#define D_LOG_I2C "I2C: "
|
||||
#define D_LOG_IRR "IRR: "
|
||||
#define D_LOG_LOG "LOG: "
|
||||
#define D_LOG_MODULE "MOD: "
|
||||
#define D_LOG_MDNS "DNS: "
|
||||
#define D_LOG_MQTT "MQT: "
|
||||
#define D_LOG_OTHER "OTH: "
|
||||
#define D_LOG_RESULT "RSL: "
|
||||
#define D_LOG_SERIAL "SER: "
|
||||
#define D_LOG_SHT1 "SHT: "
|
||||
#define D_LOG_UPLOAD "UPL: "
|
||||
#define D_LOG_UPNP "UPP: "
|
||||
#define D_LOG_WIFI "WIF: "
|
||||
|
||||
// Result
|
||||
#define D_RSLT_RESULT "REZULTAT"
|
||||
#define D_RSLT_INFO "INFO"
|
||||
#define D_RSLT_STATE "STAN"
|
||||
#define D_RSLT_SENSOR "SENSOR"
|
||||
#define D_RSLT_UPTIME "UPTIME"
|
||||
#define D_RSLT_MARGINS "MARGINES"
|
||||
#define D_RSLT_WARNING "OSTRZEZENIE"
|
||||
#define D_RSLT_ENERGY "ENERGIA"
|
||||
|
||||
// Commands
|
||||
#define D_CMND_MQTTHOST "MqttHost"
|
||||
#define D_CMND_MQTTPORT "MqttPort"
|
||||
#define D_CMND_MQTTRETRY "MqttRetry"
|
||||
#define D_CMND_STATETEXT "StateText"
|
||||
#define D_CMND_MQTTFINGERPRINT "MqttFingerprint"
|
||||
#define D_CMND_MQTTCLIENT "MqttClient"
|
||||
#define D_CMND_MQTTUSER "MqttUser"
|
||||
#define D_CMND_MQTTPASSWORD "MqttPassword"
|
||||
#define D_CMND_FULLTOPIC "FullTopic"
|
||||
#define D_CMND_PREFIX "Prefix"
|
||||
#define PRFX_MAX_STRING_LENGTH 5
|
||||
#define D_CMND "cmnd"
|
||||
#define D_STAT "stat"
|
||||
#define D_TELE "tele"
|
||||
#define D_CMND_GROUPTOPIC "GroupTopic"
|
||||
#define D_CMND_TOPIC "Topic"
|
||||
#define D_CMND_BUTTONTOPIC "ButtonTopic"
|
||||
#define D_CMND_SWITCHTOPIC "SwitchTopic"
|
||||
#define D_CMND_BUTTONRETAIN "ButtonRetain"
|
||||
#define D_CMND_SWITCHRETAIN "SwitchRetain"
|
||||
#define D_CMND_POWERRETAIN "PowerRetain"
|
||||
#define D_CMND_SENSORRETAIN "SensorRetain"
|
||||
#define D_CMND_BACKLOG "Backlog"
|
||||
#define D_CMND_DELAY "Delay"
|
||||
#define D_CMND_STATUS "Status"
|
||||
#define D_STATUS1_PARAMETER "PRM"
|
||||
#define D_STATUS2_FIRMWARE "FWR"
|
||||
#define D_STATUS3_LOGGING "LOG"
|
||||
#define D_STATUS4_MEMORY "MEM"
|
||||
#define D_STATUS5_NETWORK "NET"
|
||||
#define D_STATUS6_MQTT "MQT"
|
||||
#define D_STATUS7_TIME "TIM"
|
||||
#define D_STATUS8_POWER "PWR"
|
||||
#define D_STATUS9_MARGIN "PTH"
|
||||
#define D_STATUS10_SENSOR "SNS"
|
||||
#define D_STATUS11_STATUS "STS"
|
||||
#define D_CMND_POWER "Power"
|
||||
#define D_RSLT_POWER "POWER"
|
||||
#define D_CMND_POWERONSTATE "PowerOnState"
|
||||
#define D_CMND_PULSETIME "PulseTime"
|
||||
#define D_CMND_BLINKTIME "BlinkTime"
|
||||
#define D_CMND_BLINKCOUNT "BlinkCount"
|
||||
#define D_CMND_SAVEDATA "SaveData"
|
||||
#define D_CMND_SETOPTION "SetOption"
|
||||
#define D_CMND_TEMPERATURE_RESOLUTION "TempRes"
|
||||
#define D_CMND_HUMIDITY_RESOLUTION "HumRes"
|
||||
#define D_CMND_PRESSURE_RESOLUTION "PressRes"
|
||||
#define D_CMND_POWER_RESOLUTION "WattRes"
|
||||
#define D_CMND_VOLTAGE_RESOLUTION "VoltRes"
|
||||
#define D_CMND_ENERGY_RESOLUTION "EnergyRes"
|
||||
#define D_CMND_MODULE "Module"
|
||||
#define D_CMND_MODULES "Modules"
|
||||
#define D_CMND_GPIO "GPIO"
|
||||
#define D_NOT_SUPPORTED "Not supported"
|
||||
#define D_CMND_GPIOS "GPIOs"
|
||||
#define D_CMND_PWM "PWM"
|
||||
#define D_CMND_PWMFREQUENCY "PWMFrequency"
|
||||
#define D_CMND_PWMRANGE "PWMRange"
|
||||
#define D_CMND_COUNTER "Counter"
|
||||
#define D_CMND_COUNTERTYPE "CounterType"
|
||||
#define D_CMND_COUNTERDEBOUNCE "CounterDebounce"
|
||||
#define D_CMND_SLEEP "Sleep"
|
||||
#define D_CMND_UPLOAD "Upload"
|
||||
#define D_CMND_UPGRADE "Upgrade"
|
||||
#define D_ONE_OR_GT "1 or >%s to upgrade"
|
||||
#define D_CMND_OTAURL "OtaUrl"
|
||||
#define D_CMND_SERIALLOG "SerialLog"
|
||||
#define D_CMND_SYSLOG "SysLog"
|
||||
#define D_CMND_LOGHOST "LogHost"
|
||||
#define D_CMND_LOGPORT "LogPort"
|
||||
#define D_CMND_IPADDRESS "IPAddress"
|
||||
#define D_CMND_NTPSERVER "NtpServer"
|
||||
#define D_CMND_AP "Ap"
|
||||
#define D_CMND_SSID "SSID"
|
||||
#define D_CMND_PASSWORD "Password"
|
||||
#define D_CMND_HOSTNAME "Hostname"
|
||||
#define D_CMND_WIFICONFIG "WifiConfig"
|
||||
#define WCFG_MAX_STRING_LENGTH 12
|
||||
#define D_WCFG_0_RESTART "Restart"
|
||||
#define D_WCFG_1_SMARTCONFIG "SmartConfig"
|
||||
#define D_WCFG_2_WIFIMANAGER "WifiManager"
|
||||
#define D_WCFG_3_WPSCONFIG "WPSConfig"
|
||||
#define D_WCFG_4_RETRY "Retry"
|
||||
#define D_WCFG_5_WAIT "Wait"
|
||||
#define D_CMND_FRIENDLYNAME "FriendlyName"
|
||||
#define D_CMND_SWITCHMODE "SwitchMode"
|
||||
#define D_CMND_WEBSERVER "Webserver"
|
||||
#define D_WEBSERVER_MODE "WebServerMode"
|
||||
#define D_ACTIVE_FOR "Active for"
|
||||
#define D_ON_DEVICE "on"
|
||||
#define D_CMND_WEBPASSWORD "WebPassword"
|
||||
#define D_CMND_WEBLOG "WebLog"
|
||||
#define D_CMND_EMULATION "Emulation"
|
||||
#define D_CMND_TELEPERIOD "TelePeriod"
|
||||
#define D_CMND_RESTART "Restart"
|
||||
#define D_ONE_TO_RESTART "1 to restart"
|
||||
#define D_CMND_RESET "Reset"
|
||||
#define D_RESET_AND_RESTARTING "Reset and Restarting"
|
||||
#define D_ONE_TO_RESET "1 to reset"
|
||||
#define D_CMND_TIMEZONE "Timezone"
|
||||
#define D_CMND_ALTITUDE "Altitude"
|
||||
#define D_CMND_LEDPOWER "LedPower"
|
||||
#define D_CMND_LEDSTATE "LedState"
|
||||
#define D_CMND_CFGDUMP "CfgDump"
|
||||
#define D_CMND_I2CSCAN "I2CScan"
|
||||
#define D_CMND_EXCEPTION "Exception"
|
||||
|
||||
// Commands xdrv_domoticz.ino
|
||||
#define D_CMND_DOMOTICZ "Domoticz"
|
||||
#define D_CMND_IDX "Idx"
|
||||
#define D_CMND_KEYIDX "KeyIdx"
|
||||
#define D_CMND_SWITCHIDX "SwitchIdx"
|
||||
#define D_CMND_SENSORIDX "SensorIdx"
|
||||
#define D_CMND_UPDATETIMER "UpdateTimer"
|
||||
|
||||
// Commands xdrv_ir_send.ino
|
||||
#define D_CMND_IRSEND "IRSend"
|
||||
#define D_CMND_IRHVAC "IRHVAC"
|
||||
|
||||
// Commands xdrv_snfbridge.ino
|
||||
#define D_CMND_RFKEY "RfKey"
|
||||
#define D_CMND_RFDEFAULT "RfDefault"
|
||||
|
||||
// Commands xdrv_snfled.ino
|
||||
#define D_CMND_COLOR "Color"
|
||||
#define D_CMND_COLORTEMPERATURE "CT"
|
||||
#define D_CMND_DIMMER "Dimmer"
|
||||
#define D_CMND_LEDTABLE "LedTable"
|
||||
#define D_CMND_FADE "Fade"
|
||||
#define D_CMND_SPEED "Speed"
|
||||
#define D_CMND_WAKEUPDURATION "WakeUpDuration"
|
||||
#define D_CMND_WAKEUP "Wakeup"
|
||||
|
||||
// Commands xdrv_ws2812.ino
|
||||
#define D_CMND_PIXELS "Pixels"
|
||||
#define D_CMND_LED "Led"
|
||||
#define D_CMND_WIDTH "Width"
|
||||
#define D_CMND_SCHEME "Scheme"
|
||||
|
||||
// Commands xsns_hlw8012.ino
|
||||
#define D_CMND_POWERLOW "PowerLow"
|
||||
#define D_CMND_POWERHIGH "PowerHigh"
|
||||
#define D_CMND_VOLTAGELOW "VoltageLow"
|
||||
#define D_CMND_VOLTAGEHIGH "VoltageHigh"
|
||||
#define D_CMND_CURRENTLOW "CurrentLow"
|
||||
#define D_CMND_CURRENTHIGH "CurrentHigh"
|
||||
#define D_CMND_ENERGYRESET "EnergyReset"
|
||||
#define D_CMND_HLWPCAL "HlwPcal"
|
||||
#define D_CMND_HLWPSET "HlwPset"
|
||||
#define D_CMND_HLWUCAL "HlwUcal"
|
||||
#define D_CMND_HLWUSET "HlwUset"
|
||||
#define D_CMND_HLWICAL "HlwIcal"
|
||||
#define D_CMND_HLWISET "HlwIset"
|
||||
#define D_CMND_MAXPOWER "MaxPower"
|
||||
#define D_CMND_MAXPOWERHOLD "MaxPowerHold"
|
||||
#define D_CMND_MAXPOWERWINDOW "MaxPowerWindow"
|
||||
#define D_CMND_SAFEPOWER "SafePower"
|
||||
#define D_CMND_SAFEPOWERHOLD "SafePowerHold"
|
||||
#define D_CMND_SAFEPOWERWINDOW "SafePowerWindow"
|
||||
#define D_CMND_MAXENERGY "MaxEnergy"
|
||||
#define D_CMND_MAXENERGYSTART "MaxEnergyStart"
|
||||
|
||||
#endif // _LANGUAGE_PL_PL_H_
|
|
@ -41,8 +41,8 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu
|
|||
uint32_t button_single : 1; // bit 13 (v5.4.0)
|
||||
uint32_t interlock : 1; // bit 14 (v5.6.0)
|
||||
uint32_t pwm_control : 1; // bit 15 (v5.8.1)
|
||||
uint32_t spare16 : 1;
|
||||
uint32_t spare17 : 1;
|
||||
uint32_t ws_clock_reverse : 1; // bit 16 (v5.8.1)
|
||||
uint32_t decimal_text : 1; // bit 17 (v5.8.1)
|
||||
uint32_t spare18 : 1;
|
||||
uint32_t wattage_resolution : 1;
|
||||
uint32_t voltage_resolution : 1;
|
||||
|
@ -147,7 +147,7 @@ struct SYSCFG {
|
|||
uint8_t ws_fade; // 3A5 Not used since 5.8.0
|
||||
uint8_t ws_speed; // 3A6 Not used since 5.8.0
|
||||
uint8_t ws_scheme; // 3A7 Not used since 5.8.0
|
||||
uint8_t ws_width; // 3A8 Not used since 5.8.0
|
||||
uint8_t ex_ws_width; // 3A8 Not used since 5.8.0
|
||||
|
||||
byte free_3A9[1]; // 3A9
|
||||
|
||||
|
@ -162,7 +162,8 @@ struct SYSCFG {
|
|||
uint16_t domoticz_sensor_idx[12]; // 45C
|
||||
uint8_t module; // 474
|
||||
|
||||
byte free_475[15]; // 475
|
||||
uint8_t ws_color[4][3]; // 475
|
||||
uint8_t ws_width[3]; // 481
|
||||
|
||||
myio my_gp; // 484
|
||||
uint16_t led_pixels; // 496
|
||||
|
@ -190,7 +191,6 @@ struct SYSCFG {
|
|||
byte free_531[1]; // 531
|
||||
|
||||
uint16_t pulse_timer[MAX_PULSETIMERS]; // 532
|
||||
//uint16_t ex_pwm_value[MAX_PWMS]; // 53A
|
||||
|
||||
byte free_542[2]; // 542
|
||||
|
||||
|
|
|
@ -509,6 +509,9 @@ void SettingsDefaultSet2()
|
|||
|
||||
// 5.8.0
|
||||
Settings.led_pixels = WS2812_LEDS;
|
||||
|
||||
// 5.8.1
|
||||
SettingsDefaultSet_5_8_1();
|
||||
}
|
||||
|
||||
/********************************************************************************************/
|
||||
|
@ -524,7 +527,7 @@ void SettingsDefaultSet_3_2_4()
|
|||
Settings.ws_fade = 0;
|
||||
Settings.ws_speed = 1;
|
||||
Settings.ws_scheme = 0;
|
||||
Settings.ws_width = 1;
|
||||
Settings.ex_ws_width = 1;
|
||||
Settings.ws_wakeup = 0;
|
||||
}
|
||||
|
||||
|
@ -601,6 +604,23 @@ void SettingsDefaultSet_5_0_2()
|
|||
Settings.flag.energy_resolution = ENERGY_RESOLUTION;
|
||||
}
|
||||
|
||||
void SettingsDefaultSet_5_8_1()
|
||||
{
|
||||
// Settings.flag.ws_clock_reverse = 0;
|
||||
Settings.ws_width[WS_SECOND] = 1;
|
||||
Settings.ws_color[WS_SECOND][WS_RED] = 255;
|
||||
Settings.ws_color[WS_SECOND][WS_GREEN] = 0;
|
||||
Settings.ws_color[WS_SECOND][WS_BLUE] = 255;
|
||||
Settings.ws_width[WS_MINUTE] = 3;
|
||||
Settings.ws_color[WS_MINUTE][WS_RED] = 0;
|
||||
Settings.ws_color[WS_MINUTE][WS_GREEN] = 255;
|
||||
Settings.ws_color[WS_MINUTE][WS_BLUE] = 0;
|
||||
Settings.ws_width[WS_HOUR] = 5;
|
||||
Settings.ws_color[WS_HOUR][WS_RED] = 255;
|
||||
Settings.ws_color[WS_HOUR][WS_GREEN] = 0;
|
||||
Settings.ws_color[WS_HOUR][WS_BLUE] = 0;
|
||||
}
|
||||
|
||||
/********************************************************************************************/
|
||||
|
||||
void SettingsDelta()
|
||||
|
@ -723,7 +743,7 @@ void SettingsDelta()
|
|||
Settings.led_fade = Settings.ws_fade;
|
||||
Settings.led_speed = Settings.ws_speed;
|
||||
Settings.led_scheme = Settings.ws_scheme;
|
||||
Settings.led_width = Settings.ws_width;
|
||||
Settings.led_width = Settings.ex_ws_width;
|
||||
Settings.led_wakeup = Settings.ws_wakeup;
|
||||
} else {
|
||||
Settings.led_pixels = WS2812_LEDS;
|
||||
|
@ -749,6 +769,9 @@ void SettingsDelta()
|
|||
Settings.pwm_frequency = PWM_FREQ;
|
||||
Settings.pwm_range = PWM_RANGE;
|
||||
}
|
||||
if (Settings.version < 0x0508000E) {
|
||||
SettingsDefaultSet_5_8_1();
|
||||
}
|
||||
|
||||
Settings.version = VERSION;
|
||||
SettingsSave(1);
|
||||
|
|
|
@ -105,5 +105,7 @@ enum LedStateOptions {LED_OFF, LED_POWER, LED_MQTTSUB, LED_POWER_MQTTSUB, LED_MQ
|
|||
enum EmulationOptions {EMUL_NONE, EMUL_WEMO, EMUL_HUE, EMUL_MAX};
|
||||
enum ButtonStates {PRESSED, NOT_PRESSED};
|
||||
enum SettingsParmaIndex {P_HOLD_TIME, P_MAX_POWER_RETRY, P_MAX_PARAM8};
|
||||
enum Ws2812ClockIndex {WS_SECOND, WS_MINUTE, WS_HOUR};
|
||||
enum Ws2812Color {WS_RED, WS_GREEN, WS_BLUE};
|
||||
|
||||
#endif // _SONOFF_H_
|
|
@ -25,7 +25,7 @@
|
|||
- Select IDE Tools - Flash Size: "1M (no SPIFFS)"
|
||||
====================================================*/
|
||||
|
||||
#define VERSION 0x0508000D // 5.8.0m
|
||||
#define VERSION 0x0508000E // 5.8.0n
|
||||
|
||||
// Location specific includes
|
||||
#include "sonoff.h" // Enumaration used in user_config.h
|
||||
|
@ -942,7 +942,7 @@ void MqttDataCallback(char* topic, byte* data, unsigned int data_len)
|
|||
}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_SAVEDATA "\":\"%s\"}"), (Settings.save_data > 1) ? stemp1 : GetStateText(Settings.save_data));
|
||||
}
|
||||
else if (!strcasecmp_P(type, PSTR(D_CMND_SETOPTION)) && ((index >= 0) && (index <= 15)) || ((index > 31) && (index <= P_MAX_PARAM8 +31))) {
|
||||
else if (!strcasecmp_P(type, PSTR(D_CMND_SETOPTION)) && ((index >= 0) && (index <= 17)) || ((index > 31) && (index <= P_MAX_PARAM8 +31))) {
|
||||
if (index <= 31) {
|
||||
ptype = 0; // SetOption0 .. 31
|
||||
} else {
|
||||
|
@ -966,6 +966,8 @@ void MqttDataCallback(char* topic, byte* data, unsigned int data_len)
|
|||
case 12: // stop_flash_rotate
|
||||
case 13: // button_single
|
||||
case 14: // interlock
|
||||
case 16: // ws_clock_reverse
|
||||
case 17: // decimal_text
|
||||
bitWrite(Settings.flag.data, index, payload);
|
||||
}
|
||||
if (12 == index) { // stop_flash_rotate
|
||||
|
|
|
@ -192,6 +192,7 @@ enum SupportedModules {
|
|||
YUNSHAN,
|
||||
MAGICHOME,
|
||||
LUANIHVIO,
|
||||
KMC_70011,
|
||||
MAXMODULE };
|
||||
|
||||
/********************************************************************************************/
|
||||
|
@ -242,6 +243,7 @@ const uint8_t kNiceList[MAXMODULE] PROGMEM = {
|
|||
H801,
|
||||
MAGICHOME,
|
||||
HUAFAN_SS,
|
||||
KMC_70011,
|
||||
AILIGHT,
|
||||
WEMOS,
|
||||
WITTY
|
||||
|
@ -714,6 +716,17 @@ const mytmplt kModules[MAXMODULE] PROGMEM = {
|
|||
GPIO_LED1, // GPIO15 Led (1 = On, 0 = Off)
|
||||
0,
|
||||
GPIO_ADC0 // ADC0 A0 Analog input
|
||||
},
|
||||
{ "KMC 70011", // KMC 70011 (https://www.amazon.com/KMC-Timing-Monitoring-Network-125V-240V/dp/B06XRX2GTQ)
|
||||
GPIO_KEY1, // GPIO00 Button
|
||||
0, 0, 0,
|
||||
GPIO_HLW_CF, // GPIO04 HLW8012 CF
|
||||
GPIO_HLW_CF1, // GPIO05 HLW8012 CF1
|
||||
0, 0, 0, 0, 0, 0, // Flash connection
|
||||
GPIO_HLW_SEL, // GPIO12 HLW8012 SEL
|
||||
GPIO_LED1_INV, // GPIO13 Green Led
|
||||
GPIO_REL1, // GPIO14 Relay
|
||||
0, 0, 0
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -673,14 +673,11 @@ void WifiConnect()
|
|||
#ifdef MQTT_HOST_DISCOVERY
|
||||
boolean MdnsDiscoverMqttServer()
|
||||
{
|
||||
// char ip_str[20];
|
||||
int n;
|
||||
|
||||
if (!mdns_begun) {
|
||||
return false;
|
||||
}
|
||||
|
||||
n = MDNS.queryService("mqtt", "tcp"); // Search for mqtt service
|
||||
int n = MDNS.queryService("mqtt", "tcp"); // Search for mqtt service
|
||||
|
||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_MDNS D_QUERY_DONE " %d"), n);
|
||||
AddLog(LOG_LEVEL_INFO);
|
||||
|
|
|
@ -29,9 +29,10 @@
|
|||
\*********************************************************************************************/
|
||||
|
||||
// -- Localization --------------------------------
|
||||
//#define MY_LANGUAGE en-GB // Enabled by Default
|
||||
//#define MY_LANGUAGE nl-NL
|
||||
//#define MY_LANGUAGE de-DE
|
||||
//#define MY_LANGUAGE en-GB // English in Great Britain. Enabled by Default
|
||||
//#define MY_LANGUAGE nl-NL // Dutch in the Netherlands
|
||||
//#define MY_LANGUAGE de-DE // German in Germany
|
||||
//#define MY_LANGUAGE pl-PL // Polish in Poland
|
||||
|
||||
// -- Project -------------------------------------
|
||||
#define PROJECT "sonoff" // PROJECT is used as the default topic delimiter and OTA file name
|
||||
|
@ -177,13 +178,6 @@
|
|||
#define USE_WS2812 // WS2812 Led string using library NeoPixelBus (+5k code, +1k mem) - Disable by //
|
||||
#define USE_WS2812_CTYPE 1 // WS2812 Color type (0 - RGB, 1 - GRB)
|
||||
// #define USE_WS2812_DMA // DMA supports only GPIO03 (= Serial RXD) (+1k mem). When USE_WS2812_DMA is enabled expect Exceptions on Pow
|
||||
#define CLOCK_REVERSE 0 // WS2812 Clock display (0 - Normal, 1 - Reverse)
|
||||
#define CLOCK_SECOND_WIDTH 1 // WS2812 Clock second hand pixel width
|
||||
#define CLOCK_MINUTE_WIDTH 3 // WS2812 Clock minute hand pixel width
|
||||
#define CLOCK_HOUR_WIDTH 5 // WS2812 Clock hour hand pixel width
|
||||
#define CLOCK_SECOND_COLOR (255, 0, 255) // WS2812 Clock second pixel color
|
||||
#define CLOCK_MINUTE_COLOR (0, 255, 0) // WS2812 Clock minute pixel color
|
||||
#define CLOCK_HOUR_COLOR (255, 0,0 ) // WS2812 Clock hour pixel color
|
||||
|
||||
/*********************************************************************************************\
|
||||
* Compile a minimal version if upgrade memory gets tight ONLY TO BE USED FOR UPGRADE STEP 1!
|
||||
|
@ -202,8 +196,4 @@
|
|||
#error "Select either USE_MQTT_TLS or USE_WEBSERVER as there is just not enough memory to play with"
|
||||
#endif
|
||||
|
||||
#if (ARDUINO < 10610)
|
||||
#error "This software is supported with Arduino IDE starting from 1.6.10 and ESP8266 Release 2.3.0"
|
||||
#endif
|
||||
|
||||
#endif // _USER_CONFIG_H_
|
|
@ -140,10 +140,19 @@ const char HTTP_SCRIPT_MODULE1[] PROGMEM =
|
|||
"function sl(){"
|
||||
"var o0=\"";
|
||||
const char HTTP_SCRIPT_MODULE2[] PROGMEM =
|
||||
"}1'%d'>%02d %s}2"; // "}1" and "}2" means do not use "}" in Module name and Sensor name
|
||||
"}1'%d'>%02d %s}2"; // "}1" and "}2" means do not use "}x" in Module name and Sensor name
|
||||
const char HTTP_SCRIPT_MODULE3[] PROGMEM =
|
||||
"\";"
|
||||
"os=o0.replace(/}1/g,\"<option value=\").replace(/}2/g,\"</option>\");";
|
||||
const char HTTP_SCRIPT_INFO_BEGIN[] PROGMEM =
|
||||
"function i(){"
|
||||
"var s,o=\"";
|
||||
const char HTTP_SCRIPT_INFO_END[] PROGMEM =
|
||||
"\";" // "}1" and "}2" means do not use "}x" in Information text
|
||||
"s=o.replace(/}1/g,\"</td></tr><tr><th>\").replace(/}2/g,\"</th><td>\");"
|
||||
"document.getElementById('i').innerHTML=s;"
|
||||
"}"
|
||||
"</script>";
|
||||
const char HTTP_MSG_SLIDER1[] PROGMEM =
|
||||
"<div><span class='p'>" D_COLDLIGHT "</span><span class='q'>" D_WARMLIGHT "</span></div>"
|
||||
"<div><input type='range' min='153' max='500' value='%d' onchange='lc(value)'></div>";
|
||||
|
@ -1045,7 +1054,10 @@ void HandleSaveSettings()
|
|||
strlcpy(Settings.syslog_host, (!strlen(WebServer->arg("lh").c_str())) ? SYS_LOG_HOST : WebServer->arg("lh").c_str(), sizeof(Settings.syslog_host));
|
||||
Settings.syslog_port = (!strlen(WebServer->arg("lp").c_str())) ? SYS_LOG_PORT : atoi(WebServer->arg("lp").c_str());
|
||||
Settings.tele_period = (!strlen(WebServer->arg("lt").c_str())) ? TELE_PERIOD : atoi(WebServer->arg("lt").c_str());
|
||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_LOG D_CMND_SERIALLOG " %d, " D_CMND_WEBLOG " %d, " D_CMND_SYSLOG " %d, " D_CMND_LOGHOST " %s, " D_CMND_LOGPORT " %d, " D_CMND_TELEPERIOD " %d"),
|
||||
if ((Settings.tele_period > 0) && (Settings.tele_period < 10)) {
|
||||
Settings.tele_period = 10; // Do not allow periods < 10 seconds
|
||||
}
|
||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_LOG D_CMND_SERIALLOG " %d, " D_CMND_WEBLOG " %d, " D_CMND_SYSLOG " %d, " D_CMND_LOGHOST " %s, " D_CMND_LOGPORT " %d, " D_CMND_TELEPERIOD " %d"),
|
||||
Settings.seriallog_level, Settings.weblog_level, Settings.syslog_level, Settings.syslog_host, Settings.syslog_port, Settings.tele_period);
|
||||
AddLog(LOG_LEVEL_INFO);
|
||||
break;
|
||||
|
@ -1507,95 +1519,104 @@ void HandleInformation()
|
|||
|
||||
String page = FPSTR(HTTP_HEAD);
|
||||
page.replace(F("{v}"), FPSTR(S_INFORMATION));
|
||||
// page += F("<fieldset><legend><b> Information </b></legend>");
|
||||
// page += F("<fieldset><legend><b> Information </b></legend>");
|
||||
|
||||
page += F("<style>td{padding:0px 5px;}</style>");
|
||||
page += F("<table style'width:100%;'>");
|
||||
page += F("<tr><th>" D_PROGRAM_VERSION "</th><td>"); page += version; page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_BUILD_DATE_AND_TIME "</th><td>"); page += GetBuildDateAndTime(); page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_CORE_AND_SDK_VERSION "</th><td>"); page += ESP.getCoreVersion(); page += F("/"); page += String(ESP.getSdkVersion()); page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_UPTIME "</th><td>"); page += String(uptime); page += F(" Hours</td></tr>");
|
||||
page += F("<div id='i' name='i'></div>");
|
||||
|
||||
// Save 1k of code space replacing table html with javascript replace codes
|
||||
// }1 = </td></tr><tr><th>
|
||||
// }2 = </th><td>
|
||||
String func = FPSTR(HTTP_SCRIPT_INFO_BEGIN);
|
||||
func += F("<table style'width:100%;'><tr><th>");
|
||||
func += F(D_PROGRAM_VERSION "}2"); func += version;
|
||||
func += F("}1" D_BUILD_DATE_AND_TIME "}2"); func += GetBuildDateAndTime();
|
||||
func += F("}1" D_CORE_AND_SDK_VERSION "}2"); func += ESP.getCoreVersion(); func += F("/"); func += String(ESP.getSdkVersion());
|
||||
func += F("}1" D_UPTIME "}2"); func += String(uptime); func += F(" Hours");
|
||||
snprintf_P(stopic, sizeof(stopic), PSTR(" at %X"), GetSettingsAddress());
|
||||
page += F("<tr><th>" D_FLASH_WRITE_COUNT "</th><td>"); page += String(Settings.save_flag); page += stopic; page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_BOOT_COUNT "</th><td>"); page += String(Settings.bootcount); page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_RESTART_REASON "</th><td>"); page += GetResetReason(); page += F("</td></tr>");
|
||||
func += F("}1" D_FLASH_WRITE_COUNT "}2"); func += String(Settings.save_flag); func += stopic;
|
||||
func += F("}1" D_BOOT_COUNT "}2"); func += String(Settings.bootcount);
|
||||
func += F("}1" D_RESTART_REASON "}2"); func += GetResetReason();
|
||||
uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : devices_present;
|
||||
for (byte i = 0; i < maxfn; i++) {
|
||||
page += F("<tr><th>" D_FRIENDLY_NAME " ");
|
||||
page += i +1;
|
||||
page += F("</th><td>"); page += Settings.friendlyname[i]; page += F("</td></tr>");
|
||||
func += F("}1" D_FRIENDLY_NAME " "); func += i +1; func += F("}2"); func += Settings.friendlyname[i];
|
||||
}
|
||||
page += F("<tr><td> </td></tr>");
|
||||
page += F("<tr><th>" D_AP); page += String(Settings.sta_active +1);
|
||||
page += F(" " D_SSID " (" D_RSSI ")</th><td>"); page += Settings.sta_ssid[Settings.sta_active]; page += F(" ("); page += WifiGetRssiAsQuality(WiFi.RSSI()); page += F("%)</td></tr>");
|
||||
page += F("<tr><th>" D_HOSTNAME "</th><td>"); page += my_hostname; page += F("</td></tr>");
|
||||
|
||||
func += F("}1}2 "); // Empty line
|
||||
func += F("}1" D_AP); func += String(Settings.sta_active +1);
|
||||
func += F(" " D_SSID " (" D_RSSI ")}2"); func += Settings.sta_ssid[Settings.sta_active]; func += F(" ("); func += WifiGetRssiAsQuality(WiFi.RSSI()); func += F("%)");
|
||||
func += F("}1" D_HOSTNAME "}2"); func += my_hostname;
|
||||
if (static_cast<uint32_t>(WiFi.localIP()) != 0) {
|
||||
page += F("<tr><th>" D_IP_ADDRESS "</th><td>"); page += WiFi.localIP().toString(); page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_GATEWAY "</th><td>"); page += IPAddress(Settings.ip_address[1]).toString(); page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_SUBNET_MASK "</th><td>"); page += IPAddress(Settings.ip_address[2]).toString(); page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_DNS_SERVER "</th><td>"); page += IPAddress(Settings.ip_address[3]).toString(); page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_MAC_ADDRESS "</th><td>"); page += WiFi.macAddress(); page += F("</td></tr>");
|
||||
func += F("}1" D_IP_ADDRESS "}2"); func += WiFi.localIP().toString();
|
||||
func += F("}1" D_GATEWAY "}2"); func += IPAddress(Settings.ip_address[1]).toString();
|
||||
func += F("}1" D_SUBNET_MASK "}2"); func += IPAddress(Settings.ip_address[2]).toString();
|
||||
func += F("}1" D_DNS_SERVER "}2"); func += IPAddress(Settings.ip_address[3]).toString();
|
||||
func += F("}1" D_MAC_ADDRESS "}2"); func += WiFi.macAddress();
|
||||
}
|
||||
if (static_cast<uint32_t>(WiFi.softAPIP()) != 0) {
|
||||
page += F("<tr><th>" D_AP " " D_IP_ADDRESS "</th><td>"); page += WiFi.softAPIP().toString(); page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_AP " " D_GATEWAY "</th><td>"); page += WiFi.softAPIP().toString(); page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_AP " " D_MAC_ADDRESS "</th><td>"); page += WiFi.softAPmacAddress(); page += F("</td></tr>");
|
||||
func += F("}1" D_AP " " D_IP_ADDRESS "}2"); func += WiFi.softAPIP().toString();
|
||||
func += F("}1" D_AP " " D_GATEWAY "}2"); func += WiFi.softAPIP().toString();
|
||||
func += F("}1" D_AP " " D_MAC_ADDRESS "}2"); func += WiFi.softAPmacAddress();
|
||||
}
|
||||
page += F("<tr><td> </td></tr>");
|
||||
|
||||
func += F("}1}2 "); // Empty line
|
||||
if (Settings.flag.mqtt_enabled) {
|
||||
page += F("<tr><th>" D_MQTT_HOST "</th><td>"); page += Settings.mqtt_host; page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_MQTT_PORT "</th><td>"); page += String(Settings.mqtt_port); page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_MQTT_CLIENT " &<br/> " D_FALLBACK_TOPIC "</th><td>"); page += mqtt_client; page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_MQTT_USER "</th><td>"); page += Settings.mqtt_user; page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_MQTT_TOPIC "</th><td>"); page += Settings.mqtt_topic; page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_MQTT_GROUP_TOPIC "</th><td>"); page += Settings.mqtt_grptopic; page += F("</td></tr>");
|
||||
func += F("}1" D_MQTT_HOST "}2"); func += Settings.mqtt_host;
|
||||
func += F("}1" D_MQTT_PORT "}2"); func += String(Settings.mqtt_port);
|
||||
func += F("}1" D_MQTT_CLIENT " &<br/> " D_FALLBACK_TOPIC "}2"); func += mqtt_client;
|
||||
func += F("}1" D_MQTT_USER "}2"); func += Settings.mqtt_user;
|
||||
func += F("}1" D_MQTT_TOPIC "}2"); func += Settings.mqtt_topic;
|
||||
func += F("}1" D_MQTT_GROUP_TOPIC "}2"); func += Settings.mqtt_grptopic;
|
||||
GetTopic_P(stopic, 0, Settings.mqtt_topic, "");
|
||||
page += F("<tr><th>" D_MQTT_FULL_TOPIC "</th><td>"); page += stopic; page += F("</td></tr>");
|
||||
func += F("}1" D_MQTT_FULL_TOPIC "}2"); func += stopic;
|
||||
|
||||
} else {
|
||||
page += F("<tr><th>" D_MQTT "</th><td>" D_DISABLED "</td></tr>");
|
||||
func += F("}1" D_MQTT "}2" D_DISABLED);
|
||||
}
|
||||
page += F("<tr><td> </td></tr>");
|
||||
page += F("<tr><th>" D_EMULATION "</th><td>");
|
||||
|
||||
func += F("}1}2 "); // Empty line
|
||||
func += F("}1" D_EMULATION "}2");
|
||||
#ifdef USE_EMULATION
|
||||
if (EMUL_WEMO == Settings.flag.emulation) {
|
||||
page += F(D_BELKIN_WEMO);
|
||||
func += F(D_BELKIN_WEMO);
|
||||
}
|
||||
else if (EMUL_HUE == Settings.flag.emulation) {
|
||||
page += F(D_HUE_BRIDGE);
|
||||
func += F(D_HUE_BRIDGE);
|
||||
}
|
||||
else {
|
||||
page += F(D_NONE);
|
||||
func += F(D_NONE);
|
||||
}
|
||||
#else
|
||||
page += F(D_DISABLED);
|
||||
func += F(D_DISABLED);
|
||||
#endif // USE_EMULATION
|
||||
page += F("</td></tr>");
|
||||
|
||||
page += F("<tr><th>" D_MDNS_DISCOVERY "</th><td>");
|
||||
func += F("}1" D_MDNS_DISCOVERY "}2");
|
||||
#ifdef USE_DISCOVERY
|
||||
page += F(D_ENABLED);
|
||||
page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_MDNS_ADVERTISE "</th><td>");
|
||||
func += F(D_ENABLED);
|
||||
func += F("}1" D_MDNS_ADVERTISE "}2");
|
||||
#ifdef WEBSERVER_ADVERTISE
|
||||
page += F(D_WEB_SERVER);
|
||||
func += F(D_WEB_SERVER);
|
||||
#else
|
||||
page += F(D_DISABLED);
|
||||
func += F(D_DISABLED);
|
||||
#endif // WEBSERVER_ADVERTISE
|
||||
#else
|
||||
page += F(D_DISABLED);
|
||||
func += F(D_DISABLED);
|
||||
#endif // USE_DISCOVERY
|
||||
page += F("</td></tr>");
|
||||
|
||||
page += F("<tr><td> </td></tr>");
|
||||
page += F("<tr><th>" D_ESP_CHIP_ID "</th><td>"); page += String(ESP.getChipId()); page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_FLASH_CHIP_ID "</th><td>"); page += String(ESP.getFlashChipId()); page += F("</td></tr>");
|
||||
page += F("<tr><th>" D_FLASH_CHIP_SIZE "</th><td>"); page += String(ESP.getFlashChipRealSize() / 1024); page += F("kB</td></tr>");
|
||||
page += F("<tr><th>" D_PROGRAM_FLASH_SIZE "</th><td>"); page += String(ESP.getFlashChipSize() / 1024); page += F("kB</td></tr>");
|
||||
page += F("<tr><th>" D_PROGRAM_SIZE "</th><td>"); page += String(ESP.getSketchSize() / 1024); page += F("kB</td></tr>");
|
||||
page += F("<tr><th>" D_FREE_PROGRAM_SPACE "</th><td>"); page += String(ESP.getFreeSketchSpace() / 1024); page += F("kB</td></tr>");
|
||||
page += F("<tr><th>" D_FREE_MEMORY "</th><td>"); page += String(freeMem / 1024); page += F("kB</td></tr>");
|
||||
page += F("</table>");
|
||||
// page += F("</fieldset>");
|
||||
func += F("}1}2 "); // Empty line
|
||||
func += F("}1" D_ESP_CHIP_ID "}2"); func += String(ESP.getChipId());
|
||||
func += F("}1" D_FLASH_CHIP_ID "}2"); func += String(ESP.getFlashChipId());
|
||||
func += F("}1" D_FLASH_CHIP_SIZE "}2"); func += String(ESP.getFlashChipRealSize() / 1024); func += F("kB");
|
||||
func += F("}1" D_PROGRAM_FLASH_SIZE "}2"); func += String(ESP.getFlashChipSize() / 1024); func += F("kB");
|
||||
func += F("}1" D_PROGRAM_SIZE "}2"); func += String(ESP.getSketchSize() / 1024); func += F("kB");
|
||||
func += F("}1" D_FREE_PROGRAM_SPACE "}2"); func += String(ESP.getFreeSketchSpace() / 1024); func += F("kB");
|
||||
func += F("}1" D_FREE_MEMORY "}2"); func += String(freeMem / 1024); func += F("kB");
|
||||
func += F("</td></tr></table>");
|
||||
func += FPSTR(HTTP_SCRIPT_INFO_END);
|
||||
page.replace(F("</script>"), func);
|
||||
page.replace(F("<body>"), F("<body onload='i()'>"));
|
||||
|
||||
// page += F("</fieldset>");
|
||||
page += FPSTR(HTTP_BTN_MAIN);
|
||||
ShowPage(page);
|
||||
}
|
||||
|
|
|
@ -64,17 +64,19 @@ uint8_t ledTable[] = {
|
|||
184,186,189,191,193,195,197,199,201,204,206,208,210,212,215,217,
|
||||
219,221,224,226,228,231,233,235,238,240,243,245,248,250,253,255 };
|
||||
|
||||
uint8_t sl_dcolor[5];
|
||||
uint8_t sl_tcolor[5];
|
||||
uint8_t sl_lcolor[5];
|
||||
uint8_t light_entry_color[5];
|
||||
uint8_t light_current_color[5];
|
||||
uint8_t light_new_color[5];
|
||||
uint8_t light_last_color[5];
|
||||
|
||||
uint8_t sl_power = 0;
|
||||
uint8_t sl_any = 1;
|
||||
uint8_t sl_wakeupActive = 0;
|
||||
uint8_t sl_wakeupDimmer = 0;
|
||||
uint16_t sl_wakeupCntr = 0;
|
||||
uint8_t light_subtype = 0;
|
||||
uint8_t light_power = 0;
|
||||
uint8_t light_update = 1;
|
||||
uint8_t light_wakeup_active = 0;
|
||||
uint8_t light_wakeup_dimmer = 0;
|
||||
uint16_t light_wakeup_counter = 0;
|
||||
|
||||
unsigned long stripTimerCntr = 0; // Bars and Gradient
|
||||
unsigned long strip_timer_counter = 0; // Bars and Gradient
|
||||
|
||||
/*********************************************************************************************\
|
||||
* Sonoff B1 and AiLight inspired by OpenLight https://github.com/icamgo/noduino-sdk
|
||||
|
@ -84,89 +86,87 @@ extern "C" {
|
|||
void os_delay_us(unsigned int);
|
||||
}
|
||||
|
||||
uint8_t sl_pdi;
|
||||
uint8_t sl_pdcki;
|
||||
uint8_t light_pdi_pin;
|
||||
uint8_t light_pdcki_pin;
|
||||
|
||||
void LightDiPulse(uint8_t times)
|
||||
{
|
||||
for (uint8_t i = 0; i < times; i++) {
|
||||
digitalWrite(sl_pdi, HIGH);
|
||||
digitalWrite(sl_pdi, LOW);
|
||||
digitalWrite(light_pdi_pin, HIGH);
|
||||
digitalWrite(light_pdi_pin, LOW);
|
||||
}
|
||||
}
|
||||
|
||||
void LightDckiPulse(uint8_t times)
|
||||
{
|
||||
for (uint8_t i = 0; i < times; i++) {
|
||||
digitalWrite(sl_pdcki, HIGH);
|
||||
digitalWrite(sl_pdcki, LOW);
|
||||
digitalWrite(light_pdcki_pin, HIGH);
|
||||
digitalWrite(light_pdcki_pin, LOW);
|
||||
}
|
||||
}
|
||||
|
||||
void LightMy92x1Write(uint8_t data)
|
||||
{
|
||||
for (uint8_t i = 0; i < 4; i++) { // Send 8bit Data
|
||||
digitalWrite(sl_pdcki, LOW);
|
||||
digitalWrite(sl_pdi, (data & 0x80));
|
||||
digitalWrite(sl_pdcki, HIGH);
|
||||
for (uint8_t i = 0; i < 4; i++) { // Send 8bit Data
|
||||
digitalWrite(light_pdcki_pin, LOW);
|
||||
digitalWrite(light_pdi_pin, (data & 0x80));
|
||||
digitalWrite(light_pdcki_pin, HIGH);
|
||||
data = data << 1;
|
||||
digitalWrite(sl_pdi, (data & 0x80));
|
||||
digitalWrite(sl_pdcki, LOW);
|
||||
digitalWrite(sl_pdi, LOW);
|
||||
digitalWrite(light_pdi_pin, (data & 0x80));
|
||||
digitalWrite(light_pdcki_pin, LOW);
|
||||
digitalWrite(light_pdi_pin, LOW);
|
||||
data = data << 1;
|
||||
}
|
||||
}
|
||||
|
||||
void LightMy92x1Init()
|
||||
{
|
||||
uint8_t chips = light_type -11; // 1 (AiLight) or 2 (Sonoff B1)
|
||||
uint8_t chips = light_type -11; // 1 (AiLight) or 2 (Sonoff B1)
|
||||
|
||||
LightDckiPulse(chips * 32); // Clear all duty register
|
||||
os_delay_us(12); // TStop > 12us.
|
||||
LightDckiPulse(chips * 32); // Clear all duty register
|
||||
os_delay_us(12); // TStop > 12us.
|
||||
// Send 12 DI pulse, after 6 pulse's falling edge store duty data, and 12
|
||||
// pulse's rising edge convert to command mode.
|
||||
LightDiPulse(12);
|
||||
os_delay_us(12); // Delay >12us, begin send CMD data
|
||||
for (uint8_t n = 0; n < chips; n++) { // Send CMD data
|
||||
LightMy92x1Write(0x18); // ONE_SHOT_DISABLE, REACTION_FAST, BIT_WIDTH_8, FREQUENCY_DIVIDE_1, SCATTER_APDM
|
||||
os_delay_us(12); // Delay >12us, begin send CMD data
|
||||
for (uint8_t n = 0; n < chips; n++) { // Send CMD data
|
||||
LightMy92x1Write(0x18); // ONE_SHOT_DISABLE, REACTION_FAST, BIT_WIDTH_8, FREQUENCY_DIVIDE_1, SCATTER_APDM
|
||||
}
|
||||
os_delay_us(12); // TStart > 12us. Delay 12 us.
|
||||
os_delay_us(12); // TStart > 12us. Delay 12 us.
|
||||
// Send 16 DI pulse, at 14 pulse's falling edge store CMD data, and
|
||||
// at 16 pulse's falling edge convert to duty mode.
|
||||
LightDiPulse(16);
|
||||
os_delay_us(12); // TStop > 12us.
|
||||
os_delay_us(12); // TStop > 12us.
|
||||
}
|
||||
|
||||
void LightMy92x1Duty(uint8_t duty_r, uint8_t duty_g, uint8_t duty_b, uint8_t duty_w, uint8_t duty_c)
|
||||
{
|
||||
uint8_t channels[2] = { 4, 6 };
|
||||
|
||||
uint8_t didx = light_type -12; // 0 or 1
|
||||
|
||||
uint8_t didx = light_type -12; // 0 or 1
|
||||
uint8_t duty[2][6] = {{ duty_r, duty_g, duty_b, duty_w, 0, 0 }, // Definition for RGBW channels
|
||||
{ duty_w, duty_c, 0, duty_g, duty_r, duty_b }}; // Definition for RGBWC channels
|
||||
|
||||
os_delay_us(12); // TStop > 12us.
|
||||
os_delay_us(12); // TStop > 12us.
|
||||
for (uint8_t channel = 0; channel < channels[didx]; channel++) {
|
||||
LightMy92x1Write(duty[didx][channel]); // Send 8bit Data
|
||||
}
|
||||
os_delay_us(12); // TStart > 12us. Ready for send DI pulse.
|
||||
LightDiPulse(8); // Send 8 DI pulse. After 8 pulse falling edge, store old data.
|
||||
os_delay_us(12); // TStop > 12us.
|
||||
os_delay_us(12); // TStart > 12us. Ready for send DI pulse.
|
||||
LightDiPulse(8); // Send 8 DI pulse. After 8 pulse falling edge, store old data.
|
||||
os_delay_us(12); // TStop > 12us.
|
||||
}
|
||||
|
||||
/********************************************************************************************/
|
||||
|
||||
void LightInit(void)
|
||||
{
|
||||
if (light_type < 6) { // PWM
|
||||
if (light_type < 6) { // PWM
|
||||
for (byte i = 0; i < light_type; i++) {
|
||||
Settings.pwm_value[i] = 0; // Disable direct PWM control
|
||||
Settings.pwm_value[i] = 0; // Disable direct PWM control
|
||||
}
|
||||
if (1 == light_type) {
|
||||
Settings.led_color[0] = 255; // One PWM channel only supports Dimmer but needs max color
|
||||
Settings.led_color[0] = 255; // One PWM channel only supports Dimmer but needs max color
|
||||
}
|
||||
if (SONOFF_LED == Settings.module) { // Fix Sonoff Led instabilities
|
||||
if (SONOFF_LED == Settings.module) { // Fix Sonoff Led instabilities
|
||||
if (!my_module.gp.io[4]) {
|
||||
pinMode(4, OUTPUT); // Stop floating outputs
|
||||
digitalWrite(4, LOW);
|
||||
|
@ -191,21 +191,22 @@ void LightInit(void)
|
|||
}
|
||||
#endif // USE_WS2812 ************************************************************************
|
||||
else {
|
||||
sl_pdi = pin[GPIO_DI];
|
||||
sl_pdcki = pin[GPIO_DCKI];
|
||||
light_pdi_pin = pin[GPIO_DI];
|
||||
light_pdcki_pin = pin[GPIO_DCKI];
|
||||
|
||||
pinMode(sl_pdi, OUTPUT);
|
||||
pinMode(sl_pdcki, OUTPUT);
|
||||
digitalWrite(sl_pdi, LOW);
|
||||
digitalWrite(sl_pdcki, LOW);
|
||||
pinMode(light_pdi_pin, OUTPUT);
|
||||
pinMode(light_pdcki_pin, OUTPUT);
|
||||
digitalWrite(light_pdi_pin, LOW);
|
||||
digitalWrite(light_pdcki_pin, LOW);
|
||||
|
||||
LightMy92x1Init();
|
||||
Settings.led_scheme = 0;
|
||||
}
|
||||
|
||||
sl_power = 0;
|
||||
sl_any = 1;
|
||||
sl_wakeupActive = 0;
|
||||
light_subtype = light_type &7;
|
||||
light_power = 0;
|
||||
light_update = 1;
|
||||
light_wakeup_active = 0;
|
||||
}
|
||||
|
||||
void LightSetColorTemp(uint16_t ct)
|
||||
|
@ -221,7 +222,7 @@ void LightSetColorTemp(uint16_t ct)
|
|||
}
|
||||
uint16_t icold = (100 * (347 - my_ct)) / 136;
|
||||
uint16_t iwarm = (100 * my_ct) / 136;
|
||||
if (5 == (light_type &7)) {
|
||||
if (5 == light_subtype) {
|
||||
Settings.led_color[0] = 0;
|
||||
Settings.led_color[1] = 0;
|
||||
Settings.led_color[2] = 0;
|
||||
|
@ -236,7 +237,7 @@ void LightSetColorTemp(uint16_t ct)
|
|||
uint16_t LightGetColorTemp()
|
||||
{
|
||||
uint8_t ct_idx = 0;
|
||||
if (5 == (light_type &7)) {
|
||||
if (5 == light_subtype) {
|
||||
ct_idx = 3;
|
||||
}
|
||||
uint16_t my_ct = Settings.led_color[ct_idx +1];
|
||||
|
@ -253,12 +254,12 @@ void LightSetDimmer(uint8_t myDimmer)
|
|||
float temp;
|
||||
|
||||
if ((SONOFF_BN == Settings.module) && (100 == myDimmer)) {
|
||||
myDimmer = 99; // BN-SZ01 starts flickering at dimmer = 100
|
||||
myDimmer = 99; // BN-SZ01 starts flickering at dimmer = 100
|
||||
}
|
||||
float dimmer = 100 / (float)myDimmer;
|
||||
for (byte i = 0; i < (light_type &7); i++) {
|
||||
for (byte i = 0; i < light_subtype; i++) {
|
||||
temp = (float)Settings.led_color[i] / dimmer;
|
||||
sl_dcolor[i] = (uint8_t)temp;
|
||||
light_current_color[i] = (uint8_t)temp;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -267,39 +268,43 @@ void LightSetColor()
|
|||
uint8_t highest = 0;
|
||||
float temp;
|
||||
|
||||
for (byte i = 0; i < (light_type &7); i++) {
|
||||
if (highest < sl_dcolor[i]) {
|
||||
highest = sl_dcolor[i];
|
||||
for (byte i = 0; i < light_subtype; i++) {
|
||||
if (highest < light_current_color[i]) {
|
||||
highest = light_current_color[i];
|
||||
}
|
||||
}
|
||||
float mDim = (float)highest / 2.55;
|
||||
Settings.led_dimmer = (uint8_t)mDim;
|
||||
float dimmer = 100 / mDim;
|
||||
for (byte i = 0; i < (light_type &7); i++) {
|
||||
temp = (float)sl_dcolor[i] * dimmer;
|
||||
for (byte i = 0; i < light_subtype; i++) {
|
||||
temp = (float)light_current_color[i] * dimmer;
|
||||
Settings.led_color[i] = (uint8_t)temp;
|
||||
}
|
||||
}
|
||||
|
||||
char* LightGetColor(char* scolor)
|
||||
char* LightGetColor(uint8_t type, char* scolor)
|
||||
{
|
||||
LightSetDimmer(Settings.led_dimmer);
|
||||
scolor[0] = '\0';
|
||||
for (byte i = 0; i < (light_type &7); i++) {
|
||||
snprintf_P(scolor, 11, PSTR("%s%02X"), scolor, sl_dcolor[i]);
|
||||
for (byte i = 0; i < light_subtype; i++) {
|
||||
if (!type && Settings.flag.decimal_text) {
|
||||
snprintf_P(scolor, 25, PSTR("%s%s%d"), scolor, (i > 0) ? "," : "", light_current_color[i]);
|
||||
} else {
|
||||
snprintf_P(scolor, 25, PSTR("%s%02X"), scolor, light_current_color[i]);
|
||||
}
|
||||
}
|
||||
return scolor;
|
||||
}
|
||||
|
||||
void LightPreparePower()
|
||||
{
|
||||
char scolor[11];
|
||||
char scolor[25];
|
||||
char scommand[16];
|
||||
|
||||
if (Settings.led_dimmer && !(sl_power)) {
|
||||
if (Settings.led_dimmer && !(light_power)) {
|
||||
ExecuteCommandPower(devices_present, 7); // No publishPowerState
|
||||
}
|
||||
else if (!Settings.led_dimmer && sl_power) {
|
||||
else if (!Settings.led_dimmer && light_power) {
|
||||
ExecuteCommandPower(devices_present, 6); // No publishPowerState
|
||||
}
|
||||
#ifdef USE_DOMOTICZ
|
||||
|
@ -308,85 +313,84 @@ void LightPreparePower()
|
|||
#endif // USE_DOMOTICZ
|
||||
|
||||
GetPowerDevice(scommand, devices_present, sizeof(scommand));
|
||||
if ((light_type &7) > 1) {
|
||||
if (light_subtype > 1) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"%s\":\"%s\", \"" D_CMND_DIMMER "\":%d, \"" D_CMND_COLOR "\":\"%s\"}"),
|
||||
scommand, GetStateText(sl_power), Settings.led_dimmer, LightGetColor(scolor));
|
||||
scommand, GetStateText(light_power), Settings.led_dimmer, LightGetColor(0, scolor));
|
||||
} else {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"%s\":\"%s\", \"" D_CMND_DIMMER "\":%d}"),
|
||||
scommand, GetStateText(sl_power), Settings.led_dimmer);
|
||||
scommand, GetStateText(light_power), Settings.led_dimmer);
|
||||
}
|
||||
}
|
||||
|
||||
void LightSetPower(uint8_t mpower)
|
||||
{
|
||||
sl_power = mpower;
|
||||
if (sl_wakeupActive) {
|
||||
sl_wakeupActive--;
|
||||
light_power = mpower;
|
||||
if (light_wakeup_active) {
|
||||
light_wakeup_active--;
|
||||
}
|
||||
if (sl_power) {
|
||||
sl_any = 1;
|
||||
if (light_power) {
|
||||
light_update = 1;
|
||||
}
|
||||
LightAnimate();
|
||||
}
|
||||
|
||||
void LightAnimate()
|
||||
{
|
||||
// {"Wakeup":"Done"}
|
||||
uint8_t fadeValue;
|
||||
uint8_t cur_col[5];
|
||||
|
||||
stripTimerCntr++;
|
||||
if (!sl_power) { // Power Off
|
||||
strip_timer_counter++;
|
||||
if (!light_power) { // Power Off
|
||||
sleep = Settings.sleep;
|
||||
stripTimerCntr = 0;
|
||||
for (byte i = 0; i < (light_type &7); i++) {
|
||||
sl_tcolor[i] = 0;
|
||||
strip_timer_counter = 0;
|
||||
for (byte i = 0; i < light_subtype; i++) {
|
||||
light_new_color[i] = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
sleep = 0;
|
||||
switch (Settings.led_scheme) {
|
||||
case 0: // Power On
|
||||
LightSetDimmer(Settings.led_dimmer); // Power On
|
||||
case 0: // Power On
|
||||
LightSetDimmer(Settings.led_dimmer);
|
||||
if (0 == Settings.led_fade) {
|
||||
for (byte i = 0; i < (light_type &7); i++) {
|
||||
sl_tcolor[i] = sl_dcolor[i];
|
||||
for (byte i = 0; i < light_subtype; i++) {
|
||||
light_new_color[i] = light_current_color[i];
|
||||
}
|
||||
} else {
|
||||
for (byte i = 0; i < (light_type &7); i++) {
|
||||
if (sl_tcolor[i] != sl_dcolor[i]) {
|
||||
if (sl_tcolor[i] < sl_dcolor[i]) {
|
||||
sl_tcolor[i] += ((sl_dcolor[i] - sl_tcolor[i]) >> Settings.led_speed) +1;
|
||||
for (byte i = 0; i < light_subtype; i++) {
|
||||
if (light_new_color[i] != light_current_color[i]) {
|
||||
if (light_new_color[i] < light_current_color[i]) {
|
||||
light_new_color[i] += ((light_current_color[i] - light_new_color[i]) >> Settings.led_speed) +1;
|
||||
}
|
||||
if (sl_tcolor[i] > sl_dcolor[i]) {
|
||||
sl_tcolor[i] -= ((sl_tcolor[i] - sl_dcolor[i]) >> Settings.led_speed) +1;
|
||||
if (light_new_color[i] > light_current_color[i]) {
|
||||
light_new_color[i] -= ((light_new_color[i] - light_current_color[i]) >> Settings.led_speed) +1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1: // Power On using wake up duration
|
||||
if (2 == sl_wakeupActive) {
|
||||
sl_wakeupActive = 1;
|
||||
for (byte i = 0; i < (light_type &7); i++) {
|
||||
sl_tcolor[i] = 0;
|
||||
case 1: // Power On using wake up duration
|
||||
if (2 == light_wakeup_active) {
|
||||
light_wakeup_active = 1;
|
||||
for (byte i = 0; i < light_subtype; i++) {
|
||||
light_new_color[i] = 0;
|
||||
}
|
||||
sl_wakeupCntr = 0;
|
||||
sl_wakeupDimmer = 0;
|
||||
light_wakeup_counter = 0;
|
||||
light_wakeup_dimmer = 0;
|
||||
}
|
||||
sl_wakeupCntr++;
|
||||
if (sl_wakeupCntr > ((Settings.led_wakeup * STATES) / Settings.led_dimmer)) {
|
||||
sl_wakeupCntr = 0;
|
||||
sl_wakeupDimmer++;
|
||||
if (sl_wakeupDimmer <= Settings.led_dimmer) {
|
||||
LightSetDimmer(sl_wakeupDimmer);
|
||||
for (byte i = 0; i < (light_type &7); i++) {
|
||||
sl_tcolor[i] = sl_dcolor[i];
|
||||
light_wakeup_counter++;
|
||||
if (light_wakeup_counter > ((Settings.led_wakeup * STATES) / Settings.led_dimmer)) {
|
||||
light_wakeup_counter = 0;
|
||||
light_wakeup_dimmer++;
|
||||
if (light_wakeup_dimmer <= Settings.led_dimmer) {
|
||||
LightSetDimmer(light_wakeup_dimmer);
|
||||
for (byte i = 0; i < light_subtype; i++) {
|
||||
light_new_color[i] = light_current_color[i];
|
||||
}
|
||||
} else {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WAKEUP "\":\"" D_DONE "\"}"));
|
||||
MqttPublishPrefixTopic_P(2, PSTR(D_CMND_WAKEUP));
|
||||
sl_wakeupActive = 0;
|
||||
light_wakeup_active = 0;
|
||||
Settings.led_scheme = 0;
|
||||
}
|
||||
}
|
||||
|
@ -400,17 +404,17 @@ void LightAnimate()
|
|||
}
|
||||
}
|
||||
|
||||
if ((Settings.led_scheme < 2) || !sl_power) {
|
||||
for (byte i = 0; i < (light_type &7); i++) {
|
||||
if (sl_lcolor[i] != sl_tcolor[i]) {
|
||||
sl_any = 1;
|
||||
if ((Settings.led_scheme < 2) || !light_power) {
|
||||
for (byte i = 0; i < light_subtype; i++) {
|
||||
if (light_last_color[i] != light_new_color[i]) {
|
||||
light_update = 1;
|
||||
}
|
||||
}
|
||||
if (sl_any) {
|
||||
sl_any = 0;
|
||||
for (byte i = 0; i < (light_type &7); i++) {
|
||||
sl_lcolor[i] = sl_tcolor[i];
|
||||
cur_col[i] = (Settings.led_table) ? ledTable[sl_lcolor[i]] : sl_lcolor[i];
|
||||
if (light_update) {
|
||||
light_update = 0;
|
||||
for (byte i = 0; i < light_subtype; i++) {
|
||||
light_last_color[i] = light_new_color[i];
|
||||
cur_col[i] = (Settings.led_table) ? ledTable[light_last_color[i]] : light_last_color[i];
|
||||
if (light_type < 6) {
|
||||
if (pin[GPIO_PWM1 +i] < 99) {
|
||||
uint16_t curcol = cur_col[i] * (Settings.pwm_range / 255);
|
||||
|
@ -436,38 +440,38 @@ void LightAnimate()
|
|||
* Hue support
|
||||
\*********************************************************************************************/
|
||||
|
||||
float sl_Hue = 0.0;
|
||||
float sl_Sat = 0.0;
|
||||
float sl_Bri = 0.0;
|
||||
float light_hue = 0.0;
|
||||
float light_saturation = 0.0;
|
||||
float light_brightness = 0.0;
|
||||
|
||||
void LightRgbToHsb()
|
||||
{
|
||||
LightSetDimmer(Settings.led_dimmer);
|
||||
|
||||
// convert colors to float between (0.0 - 1.0)
|
||||
float r = sl_dcolor[0] / 255.0f;
|
||||
float g = sl_dcolor[1] / 255.0f;
|
||||
float b = sl_dcolor[2] / 255.0f;
|
||||
float r = light_current_color[0] / 255.0f;
|
||||
float g = light_current_color[1] / 255.0f;
|
||||
float b = light_current_color[2] / 255.0f;
|
||||
|
||||
float max = (r > g && r > b) ? r : (g > b) ? g : b;
|
||||
float min = (r < g && r < b) ? r : (g < b) ? g : b;
|
||||
|
||||
float d = max - min;
|
||||
|
||||
sl_Hue = 0.0;
|
||||
sl_Bri = max;
|
||||
sl_Sat = (0.0f == sl_Bri) ? 0 : (d / sl_Bri);
|
||||
light_hue = 0.0;
|
||||
light_brightness = max;
|
||||
light_saturation = (0.0f == light_brightness) ? 0 : (d / light_brightness);
|
||||
|
||||
if (d != 0.0f)
|
||||
{
|
||||
if (r == max) {
|
||||
sl_Hue = (g - b) / d + (g < b ? 6.0f : 0.0f);
|
||||
light_hue = (g - b) / d + (g < b ? 6.0f : 0.0f);
|
||||
} else if (g == max) {
|
||||
sl_Hue = (b - r) / d + 2.0f;
|
||||
light_hue = (b - r) / d + 2.0f;
|
||||
} else {
|
||||
sl_Hue = (r - g) / d + 4.0f;
|
||||
light_hue = (r - g) / d + 4.0f;
|
||||
}
|
||||
sl_Hue /= 6.0f;
|
||||
light_hue /= 6.0f;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -477,12 +481,12 @@ void LightHsbToRgb()
|
|||
float g;
|
||||
float b;
|
||||
|
||||
float h = sl_Hue;
|
||||
float s = sl_Sat;
|
||||
float v = sl_Bri;
|
||||
float h = light_hue;
|
||||
float s = light_saturation;
|
||||
float v = light_brightness;
|
||||
|
||||
if (0.0f == sl_Sat) {
|
||||
r = g = b = v; // achromatic or black
|
||||
if (0.0f == light_saturation) {
|
||||
r = g = b = v; // Achromatic or black
|
||||
} else {
|
||||
if (h < 0.0f) {
|
||||
h += 1.0f;
|
||||
|
@ -530,20 +534,20 @@ void LightHsbToRgb()
|
|||
}
|
||||
}
|
||||
|
||||
sl_dcolor[0] = (uint8_t)(r * 255.0f);
|
||||
sl_dcolor[1] = (uint8_t)(g * 255.0f);
|
||||
sl_dcolor[2] = (uint8_t)(b * 255.0f);
|
||||
light_current_color[0] = (uint8_t)(r * 255.0f);
|
||||
light_current_color[1] = (uint8_t)(g * 255.0f);
|
||||
light_current_color[2] = (uint8_t)(b * 255.0f);
|
||||
}
|
||||
|
||||
/********************************************************************************************/
|
||||
|
||||
void LightReplaceHsb(String *response)
|
||||
{
|
||||
if ((light_type &7) > 2) {
|
||||
if (light_subtype > 2) {
|
||||
LightRgbToHsb();
|
||||
response->replace("{h}", String((uint16_t)(65535.0f * sl_Hue)));
|
||||
response->replace("{s}", String((uint8_t)(254.0f * sl_Sat)));
|
||||
response->replace("{b}", String((uint8_t)(254.0f * sl_Bri)));
|
||||
response->replace("{h}", String((uint16_t)(65535.0f * light_hue)));
|
||||
response->replace("{s}", String((uint8_t)(254.0f * light_saturation)));
|
||||
response->replace("{b}", String((uint8_t)(254.0f * light_brightness)));
|
||||
} else {
|
||||
response->replace("{h}", "0");
|
||||
response->replace("{s}", "0");
|
||||
|
@ -554,11 +558,11 @@ void LightReplaceHsb(String *response)
|
|||
|
||||
void LightGetHsb(float *hue, float *sat, float *bri)
|
||||
{
|
||||
if ((light_type &7) > 2) {
|
||||
if (light_subtype > 2) {
|
||||
LightRgbToHsb();
|
||||
*hue = sl_Hue;
|
||||
*sat = sl_Sat;
|
||||
*bri = sl_Bri;
|
||||
*hue = light_hue;
|
||||
*sat = light_saturation;
|
||||
*bri = light_brightness;
|
||||
} else {
|
||||
*hue = 0;
|
||||
*sat = 0;
|
||||
|
@ -569,24 +573,13 @@ void LightGetHsb(float *hue, float *sat, float *bri)
|
|||
|
||||
void LightSetHsb(float hue, float sat, float bri, uint16_t ct)
|
||||
{
|
||||
/*
|
||||
char stemp1[10];
|
||||
char stemp2[10];
|
||||
char stemp3[10];
|
||||
dtostrfi(hue, 3, stemp1);
|
||||
dtostrfi(sat, 3, stemp2);
|
||||
dtostrfi(bri, 3, stemp3);
|
||||
snprintf_P(log_data, sizeof(log_data), PSTR("HUE: Set Hue %s, Sat %s, Bri %s, Ct %d"), stemp1, stemp2, stemp3, ct);
|
||||
AddLog(LOG_LEVEL_DEBUG);
|
||||
*/
|
||||
|
||||
if (light_type > 2) {
|
||||
if ((5 == (light_type &7)) && (ct > 0)) {
|
||||
if ((5 == light_subtype) && (ct > 0)) {
|
||||
LightSetColorTemp(ct);
|
||||
} else {
|
||||
sl_Hue = hue;
|
||||
sl_Sat = sat;
|
||||
sl_Bri = bri;
|
||||
light_hue = hue;
|
||||
light_saturation = sat;
|
||||
light_brightness = bri;
|
||||
LightHsbToRgb();
|
||||
LightSetColor();
|
||||
}
|
||||
|
@ -595,7 +588,7 @@ void LightSetHsb(float hue, float sat, float bri, uint16_t ct)
|
|||
} else {
|
||||
uint8_t tmp = (uint8_t)(bri * 100);
|
||||
Settings.led_dimmer = tmp;
|
||||
if (2 == (light_type &7)) {
|
||||
if (2 == light_subtype) {
|
||||
if (ct > 0) {
|
||||
LightSetColorTemp(ct);
|
||||
}
|
||||
|
@ -612,42 +605,79 @@ void LightSetHsb(float hue, float sat, float bri, uint16_t ct)
|
|||
* Commands
|
||||
\*********************************************************************************************/
|
||||
|
||||
boolean LightColorEntry(char *buffer, uint8_t buffer_length)
|
||||
{
|
||||
uint8_t entry_type = 0; // Decimal
|
||||
char scolor[10];
|
||||
char *p;
|
||||
char *str;
|
||||
|
||||
if (buffer[0] == '#') { // Optional hexadecimal entry
|
||||
buffer++;
|
||||
buffer_length--;
|
||||
}
|
||||
uint8_t size = (light_subtype > sizeof(light_entry_color)) ? sizeof(light_entry_color) : light_subtype;
|
||||
if (strstr(buffer, ",")) { // Decimal entry
|
||||
int8_t i = 0;
|
||||
for (str = strtok_r(buffer, ",", &p); str && i < size; str = strtok_r(NULL, ",", &p)) {
|
||||
light_entry_color[i++] = atoi(str);
|
||||
}
|
||||
entry_type = (size == i) ? 2 : 0; // Decimal
|
||||
}
|
||||
else if ((2 * size) == buffer_length) { // Hexadecimal entry
|
||||
for (byte i = 0; i < size; i++) {
|
||||
strlcpy(scolor, buffer + (i *2), 3);
|
||||
light_entry_color[i] = (uint8_t)strtol(scolor, &p, 16);
|
||||
}
|
||||
entry_type = 1; // Hexadecimal
|
||||
}
|
||||
if (entry_type) {
|
||||
Settings.flag.decimal_text = entry_type -1;
|
||||
}
|
||||
return (entry_type);
|
||||
}
|
||||
|
||||
boolean LightCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_len, int16_t payload)
|
||||
{
|
||||
boolean serviced = true;
|
||||
boolean coldim = false;
|
||||
char scolor[11];
|
||||
char *p;
|
||||
boolean valid_entry = false;
|
||||
char scolor[25];
|
||||
|
||||
if (((light_type &7) > 1) && !strcasecmp_P(type, PSTR(D_CMND_COLOR))) {
|
||||
if (dataBuf[0] == '#') {
|
||||
dataBuf++;
|
||||
data_len--;
|
||||
}
|
||||
if ((2 * (light_type &7)) == data_len) {
|
||||
for (byte i = 0; i < (light_type &7); i++) {
|
||||
strlcpy(scolor, dataBuf + (i *2), 3);
|
||||
sl_dcolor[i] = (uint8_t)strtol(scolor, &p, 16);
|
||||
if ((light_subtype > 1) && !strcasecmp_P(type, PSTR(D_CMND_COLOR)) && (index > 0) && (index <= 5)) {
|
||||
if (data_len > 0) {
|
||||
valid_entry = LightColorEntry(dataBuf, data_len);
|
||||
if (valid_entry) {
|
||||
if (1 == index) {
|
||||
memcpy(light_current_color, light_entry_color, sizeof(light_current_color));
|
||||
LightSetColor();
|
||||
coldim = true;
|
||||
} else {
|
||||
memcpy(Settings.ws_color + 3*(index -2), light_entry_color, 3);
|
||||
}
|
||||
}
|
||||
LightSetColor();
|
||||
coldim = true;
|
||||
} else {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_COLOR "\":\"%s\"}"), LightGetColor(scolor));
|
||||
}
|
||||
if (!valid_entry && (1 == index)) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_COLOR "\":\"%s\"}"), LightGetColor(0, scolor));
|
||||
}
|
||||
if (index > 1) {
|
||||
scolor[0] = '\0';
|
||||
for (byte i = 0; i < 3; i++) {
|
||||
if (Settings.flag.decimal_text) {
|
||||
snprintf_P(scolor, 25, PSTR("%s%s%d"), scolor, (i > 0) ? "," : "", Settings.ws_color[index -2][i]);
|
||||
} else {
|
||||
snprintf_P(scolor, 25, PSTR("%s%02X"), scolor, Settings.ws_color[index -2][i]);
|
||||
}
|
||||
}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_COLOR "%d\":\"%s\"}"), index, scolor);
|
||||
}
|
||||
}
|
||||
#ifdef USE_WS2812 // ***********************************************************************
|
||||
else if ((11 == light_type) && !strcasecmp_P(type, PSTR(D_CMND_LED)) && (index > 0) && (index <= Settings.led_pixels)) {
|
||||
if (dataBuf[0] == '#') {
|
||||
dataBuf++;
|
||||
data_len--;
|
||||
}
|
||||
uint8_t sl_ledcolor[3];
|
||||
if ((2 * (light_type &7)) == data_len) {
|
||||
for (byte i = 0; i < (light_type &7); i++) {
|
||||
strlcpy(scolor, dataBuf + (i *2), 3);
|
||||
sl_ledcolor[i] = (uint8_t)strtol(scolor, &p, 16);
|
||||
if (data_len > 0) {
|
||||
if (LightColorEntry(dataBuf, data_len)) {
|
||||
Ws2812SetColor(index, light_entry_color[0], light_entry_color[1], light_entry_color[2]);
|
||||
}
|
||||
Ws2812SetColor(index, sl_ledcolor[0], sl_ledcolor[1], sl_ledcolor[2]);
|
||||
}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_LED "%d\":\"%s\"}"), index, Ws2812GetColor(index, scolor));
|
||||
}
|
||||
|
@ -655,24 +685,31 @@ boolean LightCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_le
|
|||
if ((payload > 0) && (payload <= WS2812_MAX_LEDS)) {
|
||||
Settings.led_pixels = payload;
|
||||
Ws2812Clear();
|
||||
sl_any = 1;
|
||||
light_update = 1;
|
||||
}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_PIXELS "\":%d}"), Settings.led_pixels);
|
||||
}
|
||||
else if ((11 == light_type) && !strcasecmp_P(type, PSTR(D_CMND_WIDTH))) {
|
||||
if ((payload >= 0) && (payload <= 4)) {
|
||||
Settings.led_width = payload;
|
||||
else if ((11 == light_type) && !strcasecmp_P(type, PSTR(D_CMND_WIDTH)) && (index > 0) && (index <= 4)) {
|
||||
if (1 == index) {
|
||||
if ((payload >= 0) && (payload <= 4)) {
|
||||
Settings.led_width = payload;
|
||||
}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WIDTH "\":%d}"), Settings.led_width);
|
||||
} else {
|
||||
if ((payload > 0) && (payload < 32)) {
|
||||
Settings.ws_width[index -2] = payload;
|
||||
}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WIDTH "%d\":%d}"), index, Settings.ws_width[index -2]);
|
||||
}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WIDTH "\":%d}"), Settings.led_width);
|
||||
}
|
||||
else if ((11 == light_type) && !strcasecmp_P(type, PSTR(D_CMND_SCHEME))) {
|
||||
if ((payload >= 0) && (payload <= 9)) {
|
||||
Settings.led_scheme = payload;
|
||||
if (1 == Settings.led_scheme) {
|
||||
sl_wakeupActive = 3;
|
||||
light_wakeup_active = 3;
|
||||
}
|
||||
ExecuteCommandPower(devices_present, 1);
|
||||
stripTimerCntr = 0;
|
||||
strip_timer_counter = 0;
|
||||
}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_SCHEME "\":%d}"), Settings.led_scheme);
|
||||
}
|
||||
|
@ -681,12 +718,12 @@ boolean LightCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_le
|
|||
if ((payload >= 0) && (payload <= 100)) {
|
||||
Settings.led_dimmer = payload;
|
||||
}
|
||||
sl_wakeupActive = 3;
|
||||
light_wakeup_active = 3;
|
||||
Settings.led_scheme = 1;
|
||||
ExecuteCommandPower(devices_present, 1);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WAKEUP "\":\"" D_STARTED "\"}"));
|
||||
}
|
||||
else if (!strcasecmp_P(type, PSTR(D_CMND_COLORTEMPERATURE)) && ((2 == (light_type &7)) || (5 == (light_type &7)))) { // ColorTemp
|
||||
else if (!strcasecmp_P(type, PSTR(D_CMND_COLORTEMPERATURE)) && ((2 == light_subtype) || (5 == light_subtype))) { // ColorTemp
|
||||
if ((payload >= 153) && (payload <= 500)) { // https://developers.meethue.com/documentation/core-concepts
|
||||
LightSetColorTemp(payload);
|
||||
coldim = true;
|
||||
|
@ -713,7 +750,7 @@ boolean LightCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_le
|
|||
Settings.led_table ^= 1;
|
||||
break;
|
||||
}
|
||||
sl_any = 1;
|
||||
light_update = 1;
|
||||
}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_LEDTABLE "\":\"%s\"}"), GetStateText(Settings.led_table));
|
||||
}
|
||||
|
@ -738,12 +775,12 @@ boolean LightCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_le
|
|||
else if (!strcasecmp_P(type, PSTR(D_CMND_WAKEUPDURATION))) {
|
||||
if ((payload > 0) && (payload < 3001)) {
|
||||
Settings.led_wakeup = payload;
|
||||
sl_wakeupActive = 0;
|
||||
light_wakeup_active = 0;
|
||||
}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WAKEUPDURATION "\":%d}"), Settings.led_wakeup);
|
||||
}
|
||||
else if (!strcasecmp_P(type, PSTR("UNDOCA"))) { // Theos legacy status
|
||||
LightGetColor(scolor);
|
||||
LightGetColor(1, scolor);
|
||||
scolor[6] = '\0'; // RGB only
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s, %d, %d, %d, %d, %d"),
|
||||
scolor, Settings.led_fade, Settings.led_table, Settings.led_scheme, Settings.led_speed, Settings.led_width);
|
||||
|
|
|
@ -129,15 +129,15 @@ void Ws2812UpdatePixelColor(int position, struct RgbColor hand_color, uint8_t ha
|
|||
strip->SetPixelColor(mod_position, color);
|
||||
}
|
||||
|
||||
void Ws2812UpdateHand(int position, uint8_t width, struct RgbColor hand_color)
|
||||
void Ws2812UpdateHand(int position, uint8_t index)
|
||||
{
|
||||
boolean clock_reverse = CLOCK_REVERSE;
|
||||
|
||||
if (clock_reverse) {
|
||||
if (Settings.flag.ws_clock_reverse) {
|
||||
position = Settings.led_pixels -position;
|
||||
}
|
||||
RgbColor hand_color = RgbColor(Settings.ws_color[index][WS_RED], Settings.ws_color[index][WS_GREEN], Settings.ws_color[index][WS_BLUE]);
|
||||
|
||||
Ws2812UpdatePixelColor(position, hand_color, 0);
|
||||
for (uint8_t h = 1; h <= ((width -1) / 2); h++) {
|
||||
for (uint8_t h = 1; h <= ((Settings.ws_width[index] -1) / 2); h++) {
|
||||
Ws2812UpdatePixelColor(position -h, hand_color, h);
|
||||
Ws2812UpdatePixelColor(position +h, hand_color, h);
|
||||
}
|
||||
|
@ -145,21 +145,11 @@ void Ws2812UpdateHand(int position, uint8_t width, struct RgbColor hand_color)
|
|||
|
||||
void Ws2812Clock()
|
||||
{
|
||||
RgbColor c;
|
||||
|
||||
uint8_t hand_second_width = CLOCK_SECOND_WIDTH;
|
||||
uint8_t hand_minute_width = CLOCK_MINUTE_WIDTH;
|
||||
uint8_t hand_hour_width = CLOCK_HOUR_WIDTH;
|
||||
RgbColor hand_second_color CLOCK_SECOND_COLOR;
|
||||
RgbColor hand_minute_color CLOCK_MINUTE_COLOR;
|
||||
RgbColor hand_hour_color CLOCK_HOUR_COLOR;
|
||||
|
||||
strip->ClearTo(0); // Reset strip
|
||||
int clksize = 600 / (int)Settings.led_pixels;
|
||||
Ws2812UpdateHand((RtcTime.second * 10) / clksize, hand_second_width, hand_second_color);
|
||||
Ws2812UpdateHand((RtcTime.minute * 10) / clksize, hand_minute_width, hand_minute_color);
|
||||
Ws2812UpdateHand((RtcTime.hour % 12) * (50 / clksize), hand_hour_width, hand_hour_color);
|
||||
|
||||
Ws2812UpdateHand((RtcTime.second * 10) / clksize, WS_SECOND);
|
||||
Ws2812UpdateHand((RtcTime.minute * 10) / clksize, WS_MINUTE);
|
||||
Ws2812UpdateHand((RtcTime.hour % 12) * (50 / clksize), WS_HOUR);
|
||||
Ws2812StripShow();
|
||||
}
|
||||
|
||||
|
@ -205,7 +195,7 @@ void Ws2812Gradient(uint8_t schemenr)
|
|||
uint8_t repeat = kRepeat[Settings.led_width]; // number of scheme.count per ledcount
|
||||
uint16_t range = (uint16_t)ceil((float)Settings.led_pixels / (float)repeat);
|
||||
uint16_t gradRange = (uint16_t)ceil((float)range / (float)(scheme.count - 1));
|
||||
uint16_t offset = kSpeed[Settings.led_speed] > 0 ? stripTimerCntr / kSpeed[Settings.led_speed] : 0;
|
||||
uint16_t offset = kSpeed[Settings.led_speed] > 0 ? strip_timer_counter / kSpeed[Settings.led_speed] : 0;
|
||||
|
||||
WsColor oldColor, currentColor;
|
||||
Ws2812GradientColor(schemenr, &oldColor, range, gradRange, offset);
|
||||
|
@ -216,9 +206,9 @@ void Ws2812Gradient(uint8_t schemenr)
|
|||
}
|
||||
if (Settings.led_speed > 0) {
|
||||
// Blend old and current color based on time for smooth movement.
|
||||
c.R = map(stripTimerCntr % kSpeed[Settings.led_speed], 0, kSpeed[Settings.led_speed], oldColor.red, currentColor.red);
|
||||
c.G = map(stripTimerCntr % kSpeed[Settings.led_speed], 0, kSpeed[Settings.led_speed], oldColor.green, currentColor.green);
|
||||
c.B = map(stripTimerCntr % kSpeed[Settings.led_speed], 0, kSpeed[Settings.led_speed], oldColor.blue, currentColor.blue);
|
||||
c.R = map(strip_timer_counter % kSpeed[Settings.led_speed], 0, kSpeed[Settings.led_speed], oldColor.red, currentColor.red);
|
||||
c.G = map(strip_timer_counter % kSpeed[Settings.led_speed], 0, kSpeed[Settings.led_speed], oldColor.green, currentColor.green);
|
||||
c.B = map(strip_timer_counter % kSpeed[Settings.led_speed], 0, kSpeed[Settings.led_speed], oldColor.blue, currentColor.blue);
|
||||
}
|
||||
else {
|
||||
// No animation, just use the current color.
|
||||
|
@ -249,7 +239,7 @@ void Ws2812Bars(uint8_t schemenr)
|
|||
maxSize = 0;
|
||||
}
|
||||
|
||||
uint8_t offset = kSpeed[Settings.led_speed] > 0 ? stripTimerCntr / kSpeed[Settings.led_speed] : 0;
|
||||
uint8_t offset = kSpeed[Settings.led_speed] > 0 ? strip_timer_counter / kSpeed[Settings.led_speed] : 0;
|
||||
|
||||
WsColor mcolor[scheme.count];
|
||||
memcpy(mcolor, scheme.colors, sizeof(mcolor));
|
||||
|
@ -333,7 +323,11 @@ char* Ws2812GetColor(uint16_t led, char* scolor)
|
|||
sl_ledcolor[2] = lcolor.B;
|
||||
scolor[0] = '\0';
|
||||
for (byte i = 0; i < 3; i++) {
|
||||
snprintf_P(scolor, 11, PSTR("%s%02X"), scolor, sl_ledcolor[i]);
|
||||
if (Settings.flag.decimal_text) {
|
||||
snprintf_P(scolor, 25, PSTR("%s%s%d"), scolor, (i > 0) ? "," : "", sl_ledcolor[i]);
|
||||
} else {
|
||||
snprintf_P(scolor, 25, PSTR("%s%02X"), scolor, sl_ledcolor[i]);
|
||||
}
|
||||
}
|
||||
return scolor;
|
||||
}
|
||||
|
|
|
@ -25,13 +25,13 @@
|
|||
* Source: Heiko Krupp and Adafruit Industries
|
||||
\*********************************************************************************************/
|
||||
|
||||
#define BMP_ADDR 0x77
|
||||
#define BMP_ADDR 0x77
|
||||
|
||||
#define BMP180_CHIPID 0x55
|
||||
#define BMP280_CHIPID 0x58
|
||||
#define BME280_CHIPID 0x60
|
||||
#define BMP180_CHIPID 0x55
|
||||
#define BMP280_CHIPID 0x58
|
||||
#define BME280_CHIPID 0x60
|
||||
|
||||
#define BMP_REGISTER_CHIPID 0xD0
|
||||
#define BMP_REGISTER_CHIPID 0xD0
|
||||
|
||||
double bmp_sealevel = 0.0;
|
||||
uint8_t bmp_address;
|
||||
|
@ -42,36 +42,36 @@ char bmp_types[7];
|
|||
* BMP085 and BME180
|
||||
\*********************************************************************************************/
|
||||
|
||||
#define BMP180_REG_CONTROL 0xF4
|
||||
#define BMP180_REG_RESULT 0xF6
|
||||
#define BMP180_TEMPERATURE 0x2E
|
||||
#define BMP180_PRESSURE3 0xF4 // Max. oversampling -> OSS = 3
|
||||
#define BMP180_REG_CONTROL 0xF4
|
||||
#define BMP180_REG_RESULT 0xF6
|
||||
#define BMP180_TEMPERATURE 0x2E
|
||||
#define BMP180_PRESSURE3 0xF4 // Max. oversampling -> OSS = 3
|
||||
|
||||
#define BMP180_AC1 0xAA
|
||||
#define BMP180_AC2 0xAC
|
||||
#define BMP180_AC3 0xAE
|
||||
#define BMP180_AC4 0xB0
|
||||
#define BMP180_AC5 0xB2
|
||||
#define BMP180_AC6 0xB4
|
||||
#define BMP180_VB1 0xB6
|
||||
#define BMP180_VB2 0xB8
|
||||
#define BMP180_MB 0xBA
|
||||
#define BMP180_MC 0xBC
|
||||
#define BMP180_MD 0xBE
|
||||
#define BMP180_AC1 0xAA
|
||||
#define BMP180_AC2 0xAC
|
||||
#define BMP180_AC3 0xAE
|
||||
#define BMP180_AC4 0xB0
|
||||
#define BMP180_AC5 0xB2
|
||||
#define BMP180_AC6 0xB4
|
||||
#define BMP180_VB1 0xB6
|
||||
#define BMP180_VB2 0xB8
|
||||
#define BMP180_MB 0xBA
|
||||
#define BMP180_MC 0xBC
|
||||
#define BMP180_MD 0xBE
|
||||
|
||||
#define BMP180_OSS 3
|
||||
#define BMP180_OSS 3
|
||||
|
||||
int16_t cal_ac1;
|
||||
int16_t cal_ac2;
|
||||
int16_t cal_ac3;
|
||||
int16_t cal_b1;
|
||||
int16_t cal_b2;
|
||||
int16_t cal_mc;
|
||||
int16_t cal_md;
|
||||
int16_t cal_ac1;
|
||||
int16_t cal_ac2;
|
||||
int16_t cal_ac3;
|
||||
int16_t cal_b1;
|
||||
int16_t cal_b2;
|
||||
int16_t cal_mc;
|
||||
int16_t cal_md;
|
||||
uint16_t cal_ac4;
|
||||
uint16_t cal_ac5;
|
||||
uint16_t cal_ac6;
|
||||
int32_t bmp180_b5 = 0;
|
||||
int32_t bmp180_b5 = 0;
|
||||
|
||||
boolean Bmp180Calibration()
|
||||
{
|
||||
|
@ -81,10 +81,10 @@ boolean Bmp180Calibration()
|
|||
cal_ac4 = I2cRead16(bmp_address, BMP180_AC4);
|
||||
cal_ac5 = I2cRead16(bmp_address, BMP180_AC5);
|
||||
cal_ac6 = I2cRead16(bmp_address, BMP180_AC6);
|
||||
cal_b1 = I2cRead16(bmp_address, BMP180_VB1);
|
||||
cal_b2 = I2cRead16(bmp_address, BMP180_VB2);
|
||||
cal_mc = I2cRead16(bmp_address, BMP180_MC);
|
||||
cal_md = I2cRead16(bmp_address, BMP180_MD);
|
||||
cal_b1 = I2cRead16(bmp_address, BMP180_VB1);
|
||||
cal_b2 = I2cRead16(bmp_address, BMP180_VB2);
|
||||
cal_mc = I2cRead16(bmp_address, BMP180_MC);
|
||||
cal_md = I2cRead16(bmp_address, BMP180_MD);
|
||||
|
||||
// Check for Errors in calibration data. Value never is 0x0000 or 0xFFFF
|
||||
if (!cal_ac1 | !cal_ac2 | !cal_ac3 | !cal_ac4 | !cal_ac5 | !cal_ac6 | !cal_b1 | !cal_b2 | !cal_mc | !cal_md) {
|
||||
|
@ -126,7 +126,7 @@ double Bmp180ReadPressure()
|
|||
uint8_t xlsb;
|
||||
|
||||
I2cWrite8(bmp_address, BMP180_REG_CONTROL, BMP180_PRESSURE3); // Highest resolution
|
||||
delay(2 + (4 << BMP180_OSS)); // 26ms conversion time at ultra high resolution
|
||||
delay(2 + (4 << BMP180_OSS)); // 26ms conversion time at ultra high resolution
|
||||
uint32_t up = I2cRead24(bmp_address, BMP180_REG_RESULT);
|
||||
up >>= (8 - BMP180_OSS);
|
||||
|
||||
|
@ -154,7 +154,7 @@ double Bmp180ReadPressure()
|
|||
x2 = (-7357 * p) >> 16;
|
||||
|
||||
p += ((x1 + x2 + (int32_t)3791) >> 4);
|
||||
return p / 100.0; // convert to mbar
|
||||
return p / 100.0; // convert to mbar
|
||||
}
|
||||
|
||||
/*********************************************************************************************\
|
||||
|
@ -163,51 +163,51 @@ double Bmp180ReadPressure()
|
|||
* Programmer : BMP280/BME280 Datasheet and Adafruit with changes by Theo Arends
|
||||
\*********************************************************************************************/
|
||||
|
||||
#define BME280_REGISTER_CONTROLHUMID 0xF2
|
||||
#define BME280_REGISTER_CONTROL 0xF4
|
||||
#define BME280_REGISTER_PRESSUREDATA 0xF7
|
||||
#define BME280_REGISTER_TEMPDATA 0xFA
|
||||
#define BME280_REGISTER_HUMIDDATA 0xFD
|
||||
#define BME280_REGISTER_CONTROLHUMID 0xF2
|
||||
#define BME280_REGISTER_CONTROL 0xF4
|
||||
#define BME280_REGISTER_PRESSUREDATA 0xF7
|
||||
#define BME280_REGISTER_TEMPDATA 0xFA
|
||||
#define BME280_REGISTER_HUMIDDATA 0xFD
|
||||
|
||||
#define BME280_REGISTER_DIG_T1 0x88
|
||||
#define BME280_REGISTER_DIG_T2 0x8A
|
||||
#define BME280_REGISTER_DIG_T3 0x8C
|
||||
#define BME280_REGISTER_DIG_P1 0x8E
|
||||
#define BME280_REGISTER_DIG_P2 0x90
|
||||
#define BME280_REGISTER_DIG_P3 0x92
|
||||
#define BME280_REGISTER_DIG_P4 0x94
|
||||
#define BME280_REGISTER_DIG_P5 0x96
|
||||
#define BME280_REGISTER_DIG_P6 0x98
|
||||
#define BME280_REGISTER_DIG_P7 0x9A
|
||||
#define BME280_REGISTER_DIG_P8 0x9C
|
||||
#define BME280_REGISTER_DIG_P9 0x9E
|
||||
#define BME280_REGISTER_DIG_H1 0xA1
|
||||
#define BME280_REGISTER_DIG_H2 0xE1
|
||||
#define BME280_REGISTER_DIG_H3 0xE3
|
||||
#define BME280_REGISTER_DIG_H4 0xE4
|
||||
#define BME280_REGISTER_DIG_H5 0xE5
|
||||
#define BME280_REGISTER_DIG_H6 0xE7
|
||||
#define BME280_REGISTER_DIG_T1 0x88
|
||||
#define BME280_REGISTER_DIG_T2 0x8A
|
||||
#define BME280_REGISTER_DIG_T3 0x8C
|
||||
#define BME280_REGISTER_DIG_P1 0x8E
|
||||
#define BME280_REGISTER_DIG_P2 0x90
|
||||
#define BME280_REGISTER_DIG_P3 0x92
|
||||
#define BME280_REGISTER_DIG_P4 0x94
|
||||
#define BME280_REGISTER_DIG_P5 0x96
|
||||
#define BME280_REGISTER_DIG_P6 0x98
|
||||
#define BME280_REGISTER_DIG_P7 0x9A
|
||||
#define BME280_REGISTER_DIG_P8 0x9C
|
||||
#define BME280_REGISTER_DIG_P9 0x9E
|
||||
#define BME280_REGISTER_DIG_H1 0xA1
|
||||
#define BME280_REGISTER_DIG_H2 0xE1
|
||||
#define BME280_REGISTER_DIG_H3 0xE3
|
||||
#define BME280_REGISTER_DIG_H4 0xE4
|
||||
#define BME280_REGISTER_DIG_H5 0xE5
|
||||
#define BME280_REGISTER_DIG_H6 0xE7
|
||||
|
||||
struct BME280CALIBDATA
|
||||
{
|
||||
uint16_t dig_T1;
|
||||
int16_t dig_T2;
|
||||
int16_t dig_T3;
|
||||
int16_t dig_T2;
|
||||
int16_t dig_T3;
|
||||
uint16_t dig_P1;
|
||||
int16_t dig_P2;
|
||||
int16_t dig_P3;
|
||||
int16_t dig_P4;
|
||||
int16_t dig_P5;
|
||||
int16_t dig_P6;
|
||||
int16_t dig_P7;
|
||||
int16_t dig_P8;
|
||||
int16_t dig_P9;
|
||||
uint8_t dig_H1;
|
||||
int16_t dig_H2;
|
||||
uint8_t dig_H3;
|
||||
int16_t dig_H4;
|
||||
int16_t dig_H5;
|
||||
int8_t dig_H6;
|
||||
int16_t dig_P2;
|
||||
int16_t dig_P3;
|
||||
int16_t dig_P4;
|
||||
int16_t dig_P5;
|
||||
int16_t dig_P6;
|
||||
int16_t dig_P7;
|
||||
int16_t dig_P8;
|
||||
int16_t dig_P9;
|
||||
uint8_t dig_H1;
|
||||
int16_t dig_H2;
|
||||
uint8_t dig_H3;
|
||||
int16_t dig_H4;
|
||||
int16_t dig_H5;
|
||||
int8_t dig_H6;
|
||||
} Bme280CalibrationData;
|
||||
|
||||
int32_t t_fine;
|
||||
|
@ -254,8 +254,7 @@ double Bme280ReadTemperature(void)
|
|||
|
||||
var1 = ((((adc_T >> 3) - ((int32_t)Bme280CalibrationData.dig_T1 << 1))) * ((int32_t)Bme280CalibrationData.dig_T2)) >> 11;
|
||||
var2 = (((((adc_T >> 4) - ((int32_t)Bme280CalibrationData.dig_T1)) * ((adc_T >> 4) - ((int32_t)Bme280CalibrationData.dig_T1))) >> 12) *
|
||||
((int32_t)Bme280CalibrationData.dig_T3)) >>
|
||||
14;
|
||||
((int32_t)Bme280CalibrationData.dig_T3)) >> 14;
|
||||
t_fine = var1 + var2;
|
||||
double T = (t_fine * 5 + 128) >> 8;
|
||||
return T / 100.0;
|
||||
|
@ -302,19 +301,12 @@ double Bme280ReadHumidity(void)
|
|||
v_x1_u32r = (t_fine - ((int32_t)76800));
|
||||
|
||||
v_x1_u32r = (((((adc_H << 14) - (((int32_t)Bme280CalibrationData.dig_H4) << 20) -
|
||||
(((int32_t)Bme280CalibrationData.dig_H5) * v_x1_u32r)) +
|
||||
((int32_t)16384)) >>
|
||||
15) *
|
||||
(((((((v_x1_u32r * ((int32_t)Bme280CalibrationData.dig_H6)) >> 10) *
|
||||
(((v_x1_u32r * ((int32_t)Bme280CalibrationData.dig_H3)) >> 11) + ((int32_t)32768))) >>
|
||||
10) +
|
||||
((int32_t)2097152)) *
|
||||
((int32_t)Bme280CalibrationData.dig_H2) +
|
||||
8192) >>
|
||||
14));
|
||||
(((int32_t)Bme280CalibrationData.dig_H5) * v_x1_u32r)) + ((int32_t)16384)) >> 15) *
|
||||
(((((((v_x1_u32r * ((int32_t)Bme280CalibrationData.dig_H6)) >> 10) *
|
||||
(((v_x1_u32r * ((int32_t)Bme280CalibrationData.dig_H3)) >> 11) + ((int32_t)32768))) >> 10) +
|
||||
((int32_t)2097152)) * ((int32_t)Bme280CalibrationData.dig_H2) + 8192) >> 14));
|
||||
v_x1_u32r = (v_x1_u32r - (((((v_x1_u32r >> 15) * (v_x1_u32r >> 15)) >> 7) *
|
||||
((int32_t)Bme280CalibrationData.dig_H1)) >>
|
||||
4));
|
||||
((int32_t)Bme280CalibrationData.dig_H1)) >> 4));
|
||||
v_x1_u32r = (v_x1_u32r < 0) ? 0 : v_x1_u32r;
|
||||
v_x1_u32r = (v_x1_u32r > 419430400) ? 419430400 : v_x1_u32r;
|
||||
double h = (v_x1_u32r >> 12);
|
||||
|
@ -359,7 +351,7 @@ double BmpReadPressure(void)
|
|||
pressure = Bme280ReadPressure();
|
||||
}
|
||||
if (pressure != 0.0) {
|
||||
// bmp_sealevel = pressure / pow(1.0 - ((float)Settings.altitude / 44330.0), 5.255); // Adds 8k to the code
|
||||
// bmp_sealevel = pressure / pow(1.0 - ((float)Settings.altitude / 44330.0), 5.255); // pow adds 8k to the code
|
||||
bmp_sealevel = (pressure / FastPrecisePow(1.0 - ((float)Settings.altitude / 44330.0), 5.255)) - 21.6;
|
||||
}
|
||||
return pressure;
|
||||
|
|
Loading…
Reference in New Issue