diff --git a/sonoff/language/de-DE.h b/sonoff/language/de-DE.h index 92e456f96..acff5f96b 100644 --- a/sonoff/language/de-DE.h +++ b/sonoff/language/de-DE.h @@ -28,7 +28,7 @@ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE. * Use online command Prefix to translate cmnd, stat and tele. * - * Updated until v6.6.0.14 + * Updated until v6.6.0.21 \*********************************************************************/ //#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English) @@ -157,7 +157,7 @@ #define D_TO "zu" #define D_TOGGLE "An/Aus" #define D_TOPIC "topic" -#define D_TOTAL_USAGE "Total Usage" +#define D_TOTAL_USAGE "Gesamtverbrauch" #define D_TRANSMIT "Übertragen" #define D_TRUE "wahr" #define D_TVOC "TVOC" @@ -320,11 +320,11 @@ #define D_MAC_ADDRESS "MAC-Adresse" #define D_MQTT_HOST "MQTT Host" #define D_MQTT_PORT "MQTT Port" -#define D_MQTT_CLIENT "MQTT client" -#define D_MQTT_USER "MQTT-Benutzer" -#define D_MQTT_TOPIC "MQTT topic" -#define D_MQTT_GROUP_TOPIC "MQTT group topic" -#define D_MQTT_FULL_TOPIC "MQTT full topic" +#define D_MQTT_CLIENT "MQTT Client" +#define D_MQTT_USER "MQTT Benutzer" +#define D_MQTT_TOPIC "MQTT Topic" +#define D_MQTT_GROUP_TOPIC "MQTT Group Topic" +#define D_MQTT_FULL_TOPIC "MQTT Full Topic" #define D_MDNS_DISCOVERY "mDNS-Ermittlung" #define D_MDNS_ADVERTISE "mDNS-Bekanntmachung" #define D_ESP_CHIP_ID "ESP Chip ID" @@ -335,15 +335,15 @@ #define D_UPGRADE_BY_WEBSERVER "Update über Web-Server" #define D_OTA_URL "OTA-URL" #define D_START_UPGRADE "Update starten" -#define D_UPGRADE_BY_FILE_UPLOAD "Update-Datei hochladen" +#define D_UPGRADE_BY_FILE_UPLOAD "Update Datei hochladen" #define D_UPLOAD_STARTED "Upload gestartet" #define D_UPGRADE_STARTED "Update gestartet" #define D_UPLOAD_DONE "Upload abgeschlossen" -#define D_UPLOAD_ERR_1 "keine Datei ausgewählt" -#define D_UPLOAD_ERR_2 "ungenügend Speicherplatz" -#define D_UPLOAD_ERR_3 "magic byte ist nicht 0xE9" -#define D_UPLOAD_ERR_4 "Flash-Größe des Programmes ist größer als der reale Flashspeicher" -#define D_UPLOAD_ERR_5 "Upload-buffer-Vergleich weicht ab" +#define D_UPLOAD_ERR_1 "Keine Datei ausgewählt" +#define D_UPLOAD_ERR_2 "Ungenügend Speicherplatz" +#define D_UPLOAD_ERR_3 "Magic Byte ist nicht 0xE9" +#define D_UPLOAD_ERR_4 "Datei überschreitet vorhdn. Flashspeicher" +#define D_UPLOAD_ERR_5 "Upload Buffer Vergleich weicht ab" #define D_UPLOAD_ERR_6 "Upload fehlgeschlagen. Aktiviere logging 3" #define D_UPLOAD_ERR_7 "Upload abgebrochen" #define D_UPLOAD_ERR_8 "Datei ungültig" @@ -641,7 +641,7 @@ #define D_UNIT_INCREMENTS "inc" #define D_UNIT_KILOGRAM "kg" #define D_UNIT_KILOMETER_PER_HOUR "km/h" -#define D_UNIT_KILOOHM "kOhm" +#define D_UNIT_KILOOHM "kΩ" #define D_UNIT_KILOWATTHOUR "kWh" #define D_UNIT_LUX "lx" #define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3" diff --git a/sonoff/language/nl-NL.h b/sonoff/language/nl-NL.h index 4091f9928..0e81cebff 100644 --- a/sonoff/language/nl-NL.h +++ b/sonoff/language/nl-NL.h @@ -28,7 +28,7 @@ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE. * Use online command Prefix to translate cmnd, stat and tele. * - * Updated until v6.0.0a + * Updated until v6.7.0 \*********************************************************************/ //#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English) @@ -93,7 +93,7 @@ #define D_FALLBACK_TOPIC "Fallback Topic" #define D_FALSE "Onwaar" #define D_FILE "Bestand" -#define D_FLOW_RATE "Flow rate" +#define D_FLOW_RATE "Debiet" #define D_FREE_MEMORY "Vrij geheugen" #define D_FREQUENCY "Frequentie" #define D_GAS "Gas" @@ -149,7 +149,7 @@ #define D_STOP "Stop" #define D_SUBNET_MASK "Subnet Masker" #define D_SUBSCRIBE_TO "Abonneer op" -#define D_UNSUBSCRIBE_FROM "Unsubscribe from" +#define D_UNSUBSCRIBE_FROM "Uitschrijven van" #define D_SUCCESSFUL "Gelukt" #define D_SUNRISE "Zonsopgang" #define D_SUNSET "Zonsondergang" @@ -157,7 +157,7 @@ #define D_TO "naar" #define D_TOGGLE "Toggle" // Wissel, Tuimel #define D_TOPIC "Topic" // Onderwerp -#define D_TOTAL_USAGE "Total Usage" +#define D_TOTAL_USAGE "Totaal verbruik" #define D_TRANSMIT "Verzend" #define D_TRUE "Waar" #define D_TVOC "TVOC" @@ -167,15 +167,15 @@ #define D_USER "Gebruiker" #define D_UTC_TIME "UTC" #define D_UV_INDEX "UV-index" -#define D_UV_INDEX_1 "Low" -#define D_UV_INDEX_2 "Mid" -#define D_UV_INDEX_3 "High" -#define D_UV_INDEX_4 "Danger" -#define D_UV_INDEX_5 "BurnL1/2" -#define D_UV_INDEX_6 "BurnL3" -#define D_UV_INDEX_7 "OoR" +#define D_UV_INDEX_1 "Laag" +#define D_UV_INDEX_2 "Gemiddeld" +#define D_UV_INDEX_3 "Hoog" +#define D_UV_INDEX_4 "Intens" +#define D_UV_INDEX_5 "Gevaarlijk" +#define D_UV_INDEX_6 "Schadelijk" +#define D_UV_INDEX_7 "Uitzonderlijk" #define D_UV_LEVEL "UV niveau" -#define D_UV_POWER "UV Power" +#define D_UV_POWER "UV intensiteit" #define D_VERSION "Versie" #define D_VOLTAGE "Spanning" #define D_WEIGHT "Gewicht" @@ -227,7 +227,7 @@ #define D_WITH_IP_ADDRESS "met IP adres" #define D_WEBSERVER_STOPPED "Webserver gestopt" #define D_FILE_NOT_FOUND "Bestand niet gevonden" -#define D_REDIRECTED "Redirected to captive portal" +#define D_REDIRECTED "Omleiding naar captive portal" #define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager start AccessPoint en hou Station" #define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager start AccessPoint" #define D_TRYING_TO_CONNECT "Apparaat probeert te verbinden met netwerk" @@ -284,7 +284,7 @@ #define D_LOGGING_PARAMETERS "Logging parameters" #define D_SERIAL_LOG_LEVEL "Serieel log niveau" -#define D_MQTT_LOG_LEVEL "Mqtt log level" +#define D_MQTT_LOG_LEVEL "Mqtt log niveau" #define D_WEB_LOG_LEVEL "Web log niveau" #define D_SYS_LOG_LEVEL "Syslog niveau" #define D_MORE_DEBUG "Meer debug" @@ -444,17 +444,17 @@ #define D_ENERGY_TOTAL "Verbruik totaal" // xdrv_27_shutter.ino -#define D_OPEN "Open" -#define D_CLOSE "Close" -#define D_DOMOTICZ_SHUTTER "Shutter" +#define D_OPEN "Openen" +#define D_CLOSE "Sluiten" +#define D_DOMOTICZ_SHUTTER "Rolluik" // xdrv_28_pcf8574.ino -#define D_CONFIGURE_PCF8574 "Configure PCF8574" -#define D_PCF8574_PARAMETERS "PCF8574 parameters" -#define D_INVERT_PORTS "Invert Ports" -#define D_DEVICE "Device" -#define D_DEVICE_INPUT "Input" -#define D_DEVICE_OUTPUT "Output" +#define D_CONFIGURE_PCF8574 "Configureer PCF8574" +#define D_PCF8574_PARAMETERS "PCF8574 Parameters" +#define D_INVERT_PORTS "Inverteer Poorten" +#define D_DEVICE "Apparaat" +#define D_DEVICE_INPUT "Ingang" +#define D_DEVICE_OUTPUT "Uitgang" // xsns_05_ds18b20.ino #define D_SENSOR_BUSY "Sensor bezet" @@ -641,12 +641,12 @@ #define D_UNIT_INCREMENTS "inc" #define D_UNIT_KILOGRAM "kg" #define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h" -#define D_UNIT_KILOOHM "kOhm" +#define D_UNIT_KILOOHM "kΩ" #define D_UNIT_KILOWATTHOUR "kWh" #define D_UNIT_LUX "lx" -#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3" -#define D_UNIT_MICROMETER "um" -#define D_UNIT_MICROSECOND "us" +#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3" +#define D_UNIT_MICROMETER "µm" +#define D_UNIT_MICROSECOND "µs" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" @@ -691,37 +691,37 @@ #define D_LOG_WIFI "WIF: " // Wifi //SDM220 -#define D_PHASE_ANGLE "Phase Angle" -#define D_IMPORT_ACTIVE "Import Active" -#define D_EXPORT_ACTIVE "Export Active" -#define D_IMPORT_REACTIVE "Import Reactive" -#define D_EXPORT_REACTIVE "Export Reactive" -#define D_TOTAL_REACTIVE "Total Reactive" +#define D_PHASE_ANGLE "Fase hoek" +#define D_IMPORT_ACTIVE "Import werkelijk" +#define D_EXPORT_ACTIVE "Export werkelijk" +#define D_IMPORT_REACTIVE "Import blind" +#define D_EXPORT_REACTIVE "Export blind" +#define D_TOTAL_REACTIVE "Totaal blind" #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" //SOLAXX1 -#define D_PV1_VOLTAGE "PV1 Voltage" -#define D_PV1_CURRENT "PV1 Current" -#define D_PV1_POWER "PV1 Power" -#define D_PV2_VOLTAGE "PV2 Voltage" -#define D_PV2_CURRENT "PV2 Current" -#define D_PV2_POWER "PV2 Power" -#define D_SOLAR_POWER "Solar Power" -#define D_INVERTER_POWER "Inverter Power" +#define D_PV1_VOLTAGE "PV1 spanning" +#define D_PV1_CURRENT "PV1 stroom" +#define D_PV1_POWER "PV1 vermogen" +#define D_PV2_VOLTAGE "PV2 spanning" +#define D_PV2_CURRENT "PV2 stroom" +#define D_PV2_POWER "PV2 vermogen" +#define D_SOLAR_POWER "Zon vermogen" +#define D_INVERTER_POWER "Omvormer vermogen" #define D_STATUS "Status" -#define D_WAITING "Waiting" -#define D_CHECKING "Checking" -#define D_WORKING "Working" -#define D_FAILURE "Failure" -#define D_SOLAX_ERROR_0 "No Error Code" -#define D_SOLAX_ERROR_1 "Grid Lost Fault" -#define D_SOLAX_ERROR_2 "Grid Voltage Fault" -#define D_SOLAX_ERROR_3 "Grid Frequency Fault" -#define D_SOLAX_ERROR_4 "Pv Voltage Fault" -#define D_SOLAX_ERROR_5 "Isolation Fault" -#define D_SOLAX_ERROR_6 "Over Temperature Fault" -#define D_SOLAX_ERROR_7 "Fan Fault" -#define D_SOLAX_ERROR_8 "Other Device Fault" +#define D_WAITING "Wacht" +#define D_CHECKING "Controle" +#define D_WORKING "Actief" +#define D_FAILURE "Fout" +#define D_SOLAX_ERROR_0 "Geen" +#define D_SOLAX_ERROR_1 "Netverbinding" +#define D_SOLAX_ERROR_2 "Netspanning" +#define D_SOLAX_ERROR_3 "Netfrequentie" +#define D_SOLAX_ERROR_4 "Pv spanning" +#define D_SOLAX_ERROR_5 "Isolatie" +#define D_SOLAX_ERROR_6 "Overtemperatuur" +#define D_SOLAX_ERROR_7 "Ventilator" +#define D_SOLAX_ERROR_8 "Overige" #endif // _LANGUAGE_NL_NL_H_ diff --git a/sonoff/language/pt-PT.h b/sonoff/language/pt-PT.h index bfa234599..f060ec5d3 100644 --- a/sonoff/language/pt-PT.h +++ b/sonoff/language/pt-PT.h @@ -57,7 +57,7 @@ #define D_AS "como" #define D_AUTO "AUTO" #define D_BLINK "Piscar" -#define D_BLINKOFF "Piscar desligado" +#define D_BLINKOFF "Piscar Desligado" #define D_BOOT_COUNT "Contagem de Inicialização" #define D_BRIGHTLIGHT "Brilho" #define D_BSSID "BSSId" @@ -65,7 +65,7 @@ #define D_BY "por" // Write by me #define D_BYTES "Bytes" #define D_CELSIUS "Celsius" -#define D_CHANNEL "Channel" +#define D_CHANNEL "Canal" #define D_CO2 "Dioxido de Carbono" #define D_CODE "Código" // Button code #define D_COLDLIGHT "Luz Fria" @@ -78,7 +78,7 @@ #define D_DARKLIGHT "Luz Escura" #define D_DEBUG "Depurar" #define D_DISABLED "Disabilitado" -#define D_DISTANCE "Distance" +#define D_DISTANCE "Distância" #define D_DNS_SERVER "Servidor DNS" #define D_DONE "Concluído" #define D_DST_TIME "DST" @@ -93,9 +93,9 @@ #define D_FALLBACK_TOPIC "Tópico para retornar" #define D_FALSE "Falso" #define D_FILE "Ficheiro" -#define D_FLOW_RATE "Flow rate" +#define D_FLOW_RATE "Taxa de Fluxo" #define D_FREE_MEMORY "Memoria Livre" -#define D_FREQUENCY "Frequency" +#define D_FREQUENCY "Frequência" #define D_GAS "Gás" #define D_GATEWAY "Gateway" #define D_GROUP "Grupo" @@ -106,7 +106,7 @@ #define D_IMMEDIATE "Immediato" // Button immediate #define D_INDEX "Indíce" #define D_INFO "Info" -#define D_INFRARED "Infrared" +#define D_INFRARED "Infravermelho" #define D_INITIALIZED "Inicializado" #define D_IP_ADDRESS "Endereço IP" #define D_LIGHT "Luz" @@ -125,39 +125,39 @@ #define D_PORT "Porta" #define D_POWER_FACTOR "Factor de Potência" #define D_POWERUSAGE "Potência" -#define D_POWERUSAGE_ACTIVE "Active Power" -#define D_POWERUSAGE_APPARENT "Apparent Power" -#define D_POWERUSAGE_REACTIVE "Reactive Power" +#define D_POWERUSAGE_ACTIVE "Potência Ativa" +#define D_POWERUSAGE_APPARENT "Potência Aparente" +#define D_POWERUSAGE_REACTIVE "Potência Reativa" #define D_PRESSURE "Pressão" #define D_PRESSUREATSEALEVEL "Pressão ao nível do Mar" #define D_PROGRAM_FLASH_SIZE "Tamanho do Programa na Flash" #define D_PROGRAM_SIZE "Tamanho do Programa" #define D_PROJECT "Projeto" -#define D_RAIN "Rain" +#define D_RAIN "Chuva" #define D_RECEIVED "Recebido" #define D_RESTART "Reiniciar" #define D_RESTARTING "A reiniciar" #define D_RESTART_REASON "Razão do reinicio" #define D_RESTORE "Restauro" #define D_RETAINED "Manter" -#define D_RULE "Rule" -#define D_SAVE "Salvar" +#define D_RULE "Regra" +#define D_SAVE "Guardar" #define D_SENSOR "Sensor" #define D_SSID "SSId" #define D_START "Início" #define D_STD_TIME "STD" #define D_STOP "Parar" #define D_SUBNET_MASK "Mascara sub rede" -#define D_SUBSCRIBE_TO "Subescrever para" -#define D_UNSUBSCRIBE_FROM "Unsubscribe from" +#define D_SUBSCRIBE_TO "Subscrever" +#define D_UNSUBSCRIBE_FROM "Cancelar subscrição de" #define D_SUCCESSFUL "Successo" -#define D_SUNRISE "Sunrise" -#define D_SUNSET "Sunset" +#define D_SUNRISE "Nascer do Sol" +#define D_SUNSET "Pôr do Sol" #define D_TEMPERATURE "Temperatura" #define D_TO "para" #define D_TOGGLE "Pressionar" #define D_TOPIC "Tópico" -#define D_TOTAL_USAGE "Total Usage" +#define D_TOTAL_USAGE "Uso total" #define D_TRANSMIT "Transmitir" #define D_TRUE "Verdadeiro" #define D_TVOC "TVOC" @@ -167,38 +167,38 @@ #define D_USER "Utilizador" #define D_UTC_TIME "UTC" #define D_UV_INDEX "Indíce UV" -#define D_UV_INDEX_1 "Low" -#define D_UV_INDEX_2 "Mid" -#define D_UV_INDEX_3 "High" -#define D_UV_INDEX_4 "Danger" -#define D_UV_INDEX_5 "BurnL1/2" -#define D_UV_INDEX_6 "BurnL3" +#define D_UV_INDEX_1 "Baixo" +#define D_UV_INDEX_2 "Médio" +#define D_UV_INDEX_3 "Elevado" +#define D_UV_INDEX_4 "Perigoso" +#define D_UV_INDEX_5 "QueimaduraL1/2" +#define D_UV_INDEX_6 "QueimaduraL3" #define D_UV_INDEX_7 "OoR" #define D_UV_LEVEL "Nível UV" -#define D_UV_POWER "UV Power" +#define D_UV_POWER "Poder UV" #define D_VERSION "Versão" #define D_VOLTAGE "Voltagem" -#define D_WEIGHT "Weight" +#define D_WEIGHT "Peso" #define D_WARMLIGHT "Luz Quente" -#define D_WEB_SERVER "servidor WEB" +#define D_WEB_SERVER "Servidor WEB" // sonoff.ino #define D_WARNING_MINIMAL_VERSION "AVISO esta versão não supporta configurações persistentes" #define D_LEVEL_10 "nível 1-0" #define D_LEVEL_01 "nível 0-1" -#define D_SERIAL_LOGGING_DISABLED "Registro em serie desabilitado" +#define D_SERIAL_LOGGING_DISABLED "Registro de porta série desabilitado" #define D_SYSLOG_LOGGING_REENABLED "Registro do Syslog reativado" #define D_SET_BAUDRATE_TO "Ajuste da velocidade para" #define D_RECEIVED_TOPIC "Topico Recebido" -#define D_DATA_SIZE "Tamanho de dados" +#define D_DATA_SIZE "Tamanho de Dados" #define D_ANALOG_INPUT "Entrada Analógica" // support.ino #define D_OSWATCH "osWatch" #define D_BLOCKED_LOOP "Loop Bloqueado" -#define D_WPS_FAILED_WITH_STATUS "WPSconfig Falha de estado" -#define D_ACTIVE_FOR_3_MINUTES "ativo por 3 minutes" +#define D_WPS_FAILED_WITH_STATUS "WPSconfig FALHOU com estado" +#define D_ACTIVE_FOR_3_MINUTES "ativo por 3 minutos" #define D_FAILED_TO_START "Falha ao iníciar" #define D_PATCH_ISSUE_2186 "Questão 2186" #define D_CONNECTING_TO_AP "Ligando ao AP" @@ -212,17 +212,17 @@ #define D_QUERY_DONE "Consulta finalizada. Serviço MQTT não encontrado" #define D_MQTT_SERVICE_FOUND "Serviço MQTT encontrado em" #define D_FOUND_AT "encontrado em" -#define D_SYSLOG_HOST_NOT_FOUND "Syslog anfitrião não encontrado" +#define D_SYSLOG_HOST_NOT_FOUND "Anfitrião Syslog não encontrado" // settings.ino #define D_SAVED_TO_FLASH_AT "Guardado na flash em" #define D_LOADED_FROM_FLASH_AT "Lido da flash em" #define D_USE_DEFAULTS "Usar predefinições" -#define D_ERASED_SECTOR "Apagar setores" +#define D_ERASED_SECTOR "Apagado setor" // xdrv_02_webserver.ino -#define D_NOSCRIPT "To use Tasmota, please enable JavaScript" -#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMO firmware
Atualizar Por favor" +#define D_NOSCRIPT "Para utilizar o Tasmota, por favor ative o JavaScript" +#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MÍNIMO
Por favor atualize" #define D_WEBSERVER_ACTIVE_ON "Servidor WEB ativo em" #define D_WITH_IP_ADDRESS "com o endereço IP" #define D_WEBSERVER_STOPPED "Servitor WEB parou" @@ -235,20 +235,20 @@ #define D_RESTART_IN "Reinicia em" #define D_SECONDS "segundos" #define D_DEVICE_WILL_RESTART "O dispositivo irá reiniciar dentro de alguns segundos" -#define D_BUTTON_TOGGLE "Pressionar" +#define D_BUTTON_TOGGLE "Alternar" #define D_CONFIGURATION "Configuração" #define D_INFORMATION "Informação" #define D_FIRMWARE_UPGRADE "Atualização de Firmware" #define D_CONSOLE "Consola" -#define D_CONFIRM_RESTART "Confirmar o reinicio" +#define D_CONFIRM_RESTART "Confirmar o reinício" #define D_CONFIGURE_MODULE "Configurar Módulo" #define D_CONFIGURE_WIFI "Configurar WiFi" #define D_CONFIGURE_MQTT "Configurar MQTT" #define D_CONFIGURE_DOMOTICZ "Configurar Domoticz" -#define D_CONFIGURE_LOGGING "Configurar Logging" +#define D_CONFIGURE_LOGGING "Configurar registro" #define D_CONFIGURE_OTHER "Configurar outras opções" -#define D_CONFIRM_RESET_CONFIGURATION "Apagar configuração Confirmar" +#define D_CONFIRM_RESET_CONFIGURATION "Confirme o reinício da configuração" #define D_RESET_CONFIGURATION "Apagar configuração" #define D_BACKUP_CONFIGURATION "Guardar configuração" #define D_RESTORE_CONFIGURATION "Repor configuração" @@ -256,102 +256,102 @@ #define D_MODULE_PARAMETERS "Parametros do Módulo" #define D_MODULE_TYPE "Tipo de Módulo" -#define D_PULLUP_ENABLE "No Button/Switch pull-up" +#define D_PULLUP_ENABLE "Sem pull-up de Botão/Interruptor" #define D_ADC "ADC" #define D_GPIO "GPIO" -#define D_SERIAL_IN "Serial Entrada" -#define D_SERIAL_OUT "Serial Saída" +#define D_SERIAL_IN "Entrada de porta série" +#define D_SERIAL_OUT "Saída de porta série" #define D_WIFI_PARAMETERS "Parametros Wifi" -#define D_SCAN_FOR_WIFI_NETWORKS "Em busca de redes wifi" -#define D_SCAN_DONE "Busca finalizada" -#define D_NO_NETWORKS_FOUND "Sem redes" -#define D_REFRESH_TO_SCAN_AGAIN "Nova busca" -#define D_DUPLICATE_ACCESSPOINT "Ponto de Acesso duplicado" +#define D_SCAN_FOR_WIFI_NETWORKS "Procurar redes Wifi" +#define D_SCAN_DONE "Pesquisa terminada" +#define D_NO_NETWORKS_FOUND "Sem redes encontradas" +#define D_REFRESH_TO_SCAN_AGAIN "Atualize para realizar nova pesquisa" +#define D_DUPLICATE_ACCESSPOINT "Duplicar ponto de Acesso" #define D_SKIPPING_LOW_QUALITY "Ignorado devido a baixa qualidade do sinal" #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 "AP1 Palavra Chave" -#define D_AP2_SSID "AP2 SSId" -#define D_AP2_PASSWORD "AP2 Palavra Chave" +#define D_AP1_SSID "SSId do AP1" +#define D_AP1_PASSWORD "Palavra Chave do AP1" +#define D_AP2_SSID "SSId do AP2" +#define D_AP2_PASSWORD "Palavra Chave do AP2" #define D_MQTT_PARAMETERS "Parametros MQTT" #define D_CLIENT "Cliente" #define D_FULL_TOPIC "Tópico completo" -#define D_LOGGING_PARAMETERS "Parametros Logging" -#define D_SERIAL_LOG_LEVEL "Nível de registro serial" -#define D_MQTT_LOG_LEVEL "Mqtt log level" +#define D_LOGGING_PARAMETERS "Parametros para registro" +#define D_SERIAL_LOG_LEVEL "Nível de registro na porta série" +#define D_MQTT_LOG_LEVEL "Nível de registro MQTT" #define D_WEB_LOG_LEVEL "Nível de registro WEB" -#define D_SYS_LOG_LEVEL "Nível de registro Syslog" +#define D_SYS_LOG_LEVEL "Nível de registro do Syslog" #define D_MORE_DEBUG "Depurar mais" -#define D_SYSLOG_HOST "Syslog anfitrião" +#define D_SYSLOG_HOST "Anfitrião Syslog" #define D_SYSLOG_PORT "Porta Syslog" -#define D_TELEMETRY_PERIOD "Periodo de Telemetria" +#define D_TELEMETRY_PERIOD "Período de Telemetria" #define D_OTHER_PARAMETERS "Outros parametros" -#define D_TEMPLATE "Template" -#define D_ACTIVATE "Activate" -#define D_WEB_ADMIN_PASSWORD "Palavra Chave de WEB Admin" +#define D_TEMPLATE "Modelo" +#define D_ACTIVATE "Ativar" +#define D_WEB_ADMIN_PASSWORD "Palavra Chave do Admin WEB" #define D_MQTT_ENABLE "MQTT habilitado" #define D_FRIENDLY_NAME "Nome amigável" #define D_BELKIN_WEMO "Belkin WeMo" #define D_HUE_BRIDGE "Hue Bridge" #define D_SINGLE_DEVICE "dispositivo único" -#define D_MULTI_DEVICE "multiplos dispositivos" +#define D_MULTI_DEVICE "dispositivo múltiplo" -#define D_CONFIGURE_TEMPLATE "Configure Template" -#define D_TEMPLATE_PARAMETERS "Template parameters" -#define D_TEMPLATE_NAME "Name" -#define D_BASE_TYPE "Based on" -#define D_TEMPLATE_FLAGS "Options" +#define D_CONFIGURE_TEMPLATE "Configurar Modelo" +#define D_TEMPLATE_PARAMETERS "Parametros do Modelo" +#define D_TEMPLATE_NAME "Nome do Modelo" +#define D_BASE_TYPE "Baseado em" +#define D_TEMPLATE_FLAGS "Opções" -#define D_SAVE_CONFIGURATION "Salvar configuração" +#define D_SAVE_CONFIGURATION "Guardar configuração" #define D_CONFIGURATION_SAVED "Configuração guardada" -#define D_CONFIGURATION_RESET "Reinicialização da configuração" +#define D_CONFIGURATION_RESET "Reinicializar a configuração" #define D_PROGRAM_VERSION "Versão do Programa" -#define D_BUILD_DATE_AND_TIME "Data e Hora da construção" +#define D_BUILD_DATE_AND_TIME "Data e Hora de criação" #define D_CORE_AND_SDK_VERSION "Versão Core/SDK" -#define D_FLASH_WRITE_COUNT "contagem de gravação flash" +#define D_FLASH_WRITE_COUNT "Contagem de gravação da flash" #define D_MAC_ADDRESS "Endereço MAC" -#define D_MQTT_HOST "MQTT Servidor" -#define D_MQTT_PORT "MQTT Porta" -#define D_MQTT_CLIENT "MQTT Cliente" -#define D_MQTT_USER "MQTT Utilizador" -#define D_MQTT_TOPIC "MQTT Tópico" -#define D_MQTT_GROUP_TOPIC "MQTT Tópico Grupo" -#define D_MQTT_FULL_TOPIC "MQTT Tópico Completo" +#define D_MQTT_HOST "Servidor MQTT" +#define D_MQTT_PORT "Porta MQTT" +#define D_MQTT_CLIENT "Cliente MQTT" +#define D_MQTT_USER "Utilizador MQTT" +#define D_MQTT_TOPIC "Tópico MQTT" +#define D_MQTT_GROUP_TOPIC "Tópico MQTT de Grupo" +#define D_MQTT_FULL_TOPIC "Tópico MQTT Completo" #define D_MDNS_DISCOVERY "Descobrir mDNS" #define D_MDNS_ADVERTISE "Anunciar mDNS" -#define D_ESP_CHIP_ID "ESP Chip Id" -#define D_FLASH_CHIP_ID "Flash Chip Id" -#define D_FLASH_CHIP_SIZE "Flash Size" -#define D_FREE_PROGRAM_SPACE "Espaço Livre Programa" +#define D_ESP_CHIP_ID "ID do chip ESP" +#define D_FLASH_CHIP_ID "ID do chip da Flash" +#define D_FLASH_CHIP_SIZE "Tamanho da Flash" +#define D_FREE_PROGRAM_SPACE "Espaço de Programa Livre" #define D_UPGRADE_BY_WEBSERVER "Atualizar pelo servidor WEB" -#define D_OTA_URL "OTA Url" +#define D_OTA_URL "Url OTA" #define D_START_UPGRADE "Iniciar atualização" -#define D_UPGRADE_BY_FILE_UPLOAD "Atualização por envio de ficheiro" -#define D_UPLOAD_STARTED "Início do envio" +#define D_UPGRADE_BY_FILE_UPLOAD "Atualizar por envio de ficheiro" +#define D_UPLOAD_STARTED "Envio Iniciado" #define D_UPGRADE_STARTED "Atualização Iniciada" #define D_UPLOAD_DONE "Atualização Finalizada" #define D_UPLOAD_ERR_1 "Nenhum ficheiro selecionado" -#define D_UPLOAD_ERR_2 "Nao existe espaço disponível" -#define D_UPLOAD_ERR_3 "Byte mágico não é 0xE9" +#define D_UPLOAD_ERR_2 "Não existe espaço disponível" +#define D_UPLOAD_ERR_3 "O Byte mágico não é 0xE9" #define D_UPLOAD_ERR_4 "O tamanho do programa e maior do que o tamanho real da flash" -#define D_UPLOAD_ERR_5 "Envio buffer miscompare" -#define D_UPLOAD_ERR_6 "Falha no envio. Hablitar logging 3" +#define D_UPLOAD_ERR_5 "Comparação incorreta do buffer de upload" +#define D_UPLOAD_ERR_6 "Falha no envio. Habilitar registro 3" #define D_UPLOAD_ERR_7 "Envio cancelado" #define D_UPLOAD_ERR_8 "Ficheiro inválido" #define D_UPLOAD_ERR_9 "Ficheiro demasiado grande" -#define D_UPLOAD_ERR_10 "Failed to init RF chip" -#define D_UPLOAD_ERR_11 "Failed to erase RF chip" -#define D_UPLOAD_ERR_12 "Failed to write to RF chip" -#define D_UPLOAD_ERR_13 "Failed to decode RF firmware" +#define D_UPLOAD_ERR_10 "Falha ao iniciar o chip de RF" +#define D_UPLOAD_ERR_11 "Falha ao apagar o chip de RF" +#define D_UPLOAD_ERR_12 "Falha ao escrever no chip de RF" +#define D_UPLOAD_ERR_13 "Falha ao descodificar o firmware RF" #define D_UPLOAD_ERROR_CODE "Código de erro do envio" #define D_ENTER_COMMAND "Inserir comando" @@ -361,14 +361,14 @@ // xdrv_01_mqtt.ino #define D_FINGERPRINT "Verifique a impressão digital TLS..." #define D_TLS_CONNECT_FAILED_TO "TLS não conseguiu ligar" -#define D_RETRY_IN "Tentativa em" -#define D_VERIFIED "Verificado impressão digital " +#define D_RETRY_IN "Nova tentativa em" +#define D_VERIFIED "Verificado usando impressão digital" #define D_INSECURE "Ligação insegura devido à impressão digital inválida" #define D_CONNECT_FAILED_TO "A ligação falhou ao" // xplg_wemohue.ino #define D_MULTICAST_DISABLED "Multicast desabilitado" -#define D_MULTICAST_REJOINED "Multicast (re)ingressou" +#define D_MULTICAST_REJOINED "Multicast (re)ingressado" #define D_MULTICAST_JOIN_FAILED "Multicast falha no reingresso" #define D_FAILED_TO_SEND_RESPONSE "Falha no envio de reposta" @@ -377,13 +377,13 @@ #define D_WEMO_EVENT_SERVICE "WeMo evento de serviço" #define D_WEMO_META_SERVICE "WeMo serviço meta" #define D_WEMO_SETUP "WeMo configuração" -#define D_RESPONSE_SENT "Rsposta enviada" +#define D_RESPONSE_SENT "Resposta enviada" #define D_HUE "Hue" -#define D_HUE_BRIDGE_SETUP "Hue setup" -#define D_HUE_API_NOT_IMPLEMENTED "Hue API nao implementada" -#define D_HUE_API "Hue API" -#define D_HUE_POST_ARGS "Hue POST args" +#define D_HUE_BRIDGE_SETUP "Configuração do Hue" +#define D_HUE_API_NOT_IMPLEMENTED "API Hue nao implementada" +#define D_HUE_API "API Hue" +#define D_HUE_POST_ARGS "Argumentos de POST HUE" #define D_3_RESPONSE_PACKETS_SENT "3 pacotes de resposta enviados" // xdrv_07_domoticz.ino @@ -402,71 +402,71 @@ #define D_DOMOTICZ_CURRENT "Corrente/PM10" #define D_DOMOTICZ_AIRQUALITY "Qualidade do Ar" #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter" -#define D_DOMOTICZ_UPDATE_TIMER "Tempo de atualização" +#define D_DOMOTICZ_UPDATE_TIMER "Temporizador de atualização" // xdrv_09_timers.ino -#define D_CONFIGURE_TIMER "Configure Timer" -#define D_TIMER_PARAMETERS "Timer parameters" -#define D_TIMER_ENABLE "Enable Timers" -#define D_TIMER_ARM "Arm" -#define D_TIMER_TIME "Time" -#define D_TIMER_DAYS "Days" -#define D_TIMER_REPEAT "Repeat" -#define D_TIMER_OUTPUT "Output" -#define D_TIMER_ACTION "Action" +#define D_CONFIGURE_TIMER "Configurar temporizador" +#define D_TIMER_PARAMETERS "Parâmetros do temporizador" +#define D_TIMER_ENABLE "Habilitar Temporizadores" +#define D_TIMER_ARM "Armar" +#define D_TIMER_TIME "Tempo" +#define D_TIMER_DAYS "Dias" +#define D_TIMER_REPEAT "Repetir" +#define D_TIMER_OUTPUT "Aaída" +#define D_TIMER_ACTION "Açao" // xdrv_10_knx.ino -#define D_CONFIGURE_KNX "Configure KNX" -#define D_KNX_PARAMETERS "KNX Parameters" -#define D_KNX_GENERAL_CONFIG "General" -#define D_KNX_PHYSICAL_ADDRESS "Physical Address" -#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )" -#define D_KNX_ENABLE "Enable KNX" -#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses" -#define D_ADD "Add" -#define D_DELETE "Delete" -#define D_REPLY "Reply" -#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from" +#define D_CONFIGURE_KNX "Configurar KNX" +#define D_KNX_PARAMETERS "Parâmetros KNX" +#define D_KNX_GENERAL_CONFIG "Geral" +#define D_KNX_PHYSICAL_ADDRESS "Endereço físico" +#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Deve ser exclusivo na rede KNX )" +#define D_KNX_ENABLE "Habilitar KNX" +#define D_KNX_GROUP_ADDRESS_TO_WRITE "Dados para enviar para Endereços de Grupo" +#define D_ADD "Adicionar" +#define D_DELETE "Remover" +#define D_REPLY "Responder" +#define D_KNX_GROUP_ADDRESS_TO_READ "Endereços de Grupo de onde receber dados" #define D_LOG_KNX "KNX: " -#define D_RECEIVED_FROM "Received from" -#define D_KNX_COMMAND_WRITE "Write" -#define D_KNX_COMMAND_READ "Read" -#define D_KNX_COMMAND_OTHER "Other" -#define D_SENT_TO "sent to" -#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used." -#define D_KNX_ENHANCEMENT "Communication Enhancement" +#define D_RECEIVED_FROM "Recebido de" +#define D_KNX_COMMAND_WRITE "Escrever" +#define D_KNX_COMMAND_READ "Ler" +#define D_KNX_COMMAND_OTHER "Outro" +#define D_SENT_TO "enviar para" +#define D_KNX_WARNING "O Endereço de Grupo ( 0 / 0 / 0 ) está reservado e não pode ser usado." +#define D_KNX_ENHANCEMENT "Melhoria de Comunicação" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Consumo energético de hoje" #define D_ENERGY_YESTERDAY "Consumo energético de ontem" -#define D_ENERGY_TOTAL "Consumo total de energial" +#define D_ENERGY_TOTAL "Consumo energético total" // xdrv_27_shutter.ino -#define D_OPEN "Open" -#define D_CLOSE "Close" -#define D_DOMOTICZ_SHUTTER "Shutter" +#define D_OPEN "Abrir" +#define D_CLOSE "Fechar" +#define D_DOMOTICZ_SHUTTER "Estore" // xdrv_28_pcf8574.ino -#define D_CONFIGURE_PCF8574 "Configure PCF8574" -#define D_PCF8574_PARAMETERS "PCF8574 parameters" -#define D_INVERT_PORTS "Invert Ports" -#define D_DEVICE "Device" -#define D_DEVICE_INPUT "Input" -#define D_DEVICE_OUTPUT "Output" +#define D_CONFIGURE_PCF8574 "Configurar PCF8574" +#define D_PCF8574_PARAMETERS "Parâmetros PCF8574" +#define D_INVERT_PORTS "Inverter Portas" +#define D_DEVICE "Dispositivo" +#define D_DEVICE_INPUT "Entrada" +#define D_DEVICE_OUTPUT "Saída" // xsns_05_ds18b20.ino #define D_SENSOR_BUSY "Sensor ocupado" -#define D_SENSOR_CRC_ERROR "Erro Sensor CRC" -#define D_SENSORS_FOUND "Sensors encontrados" +#define D_SENSOR_CRC_ERROR "Erro no CRC do sensor" +#define D_SENSORS_FOUND "Sensores encontrados" // xsns_06_dht.ino #define D_TIMEOUT_WAITING_FOR "Fim do tempo de espera" #define D_START_SIGNAL_LOW "Sinal de início baixo" #define D_START_SIGNAL_HIGH "Sinal de início elevado" -#define D_PULSE "pulse" -#define D_CHECKSUM_FAILURE "Falha Checksum" +#define D_PULSE "pulso" +#define D_CHECKSUM_FAILURE "Falha na soma de verificação" // xsns_07_sht1x.ino #define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor não aceitou o comando ACK" @@ -486,27 +486,27 @@ #define D_GZ_AXIS "Gyro Z-Axis" // xsns_34_hx711.ino -#define D_HX_CAL_REMOVE "Remove weigth" -#define D_HX_CAL_REFERENCE "Load reference weigth" -#define D_HX_CAL_DONE "Calibrated" -#define D_HX_CAL_FAIL "Calibration failed" -#define D_RESET_HX711 "Reset Scale" -#define D_CONFIGURE_HX711 "Configure Scale" -#define D_HX711_PARAMETERS "Scale parameters" -#define D_ITEM_WEIGHT "Item weight" -#define D_REFERENCE_WEIGHT "Reference weigth" -#define D_CALIBRATE "Calibrate" -#define D_CALIBRATION "Calibration" +#define D_HX_CAL_REMOVE "Remover peso" +#define D_HX_CAL_REFERENCE "Carregar peso de referência" +#define D_HX_CAL_DONE "Calibrado" +#define D_HX_CAL_FAIL "Falha na calibração" +#define D_RESET_HX711 "Reiniciar balança" +#define D_CONFIGURE_HX711 "Configurar balança" +#define D_HX711_PARAMETERS "Parâmetros da balança" +#define D_ITEM_WEIGHT "Peso do item" +#define D_REFERENCE_WEIGHT "Peso de referência" +#define D_CALIBRATE "Calibrar" +#define D_CALIBRATION "Calibração" //xsns_35_tx20.ino -#define D_TX20_WIND_DIRECTION "Wind Direction" -#define D_TX20_WIND_SPEED "Wind Speed" -#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg" -#define D_TX20_WIND_SPEED_MAX "Wind Speed Max" +#define D_TX20_WIND_DIRECTION "Direção do vento +#define D_TX20_WIND_SPEED "Velocidade do vento" +#define D_TX20_WIND_SPEED_AVG "Velocidade média do vento" +#define D_TX20_WIND_SPEED_MAX "Velocidade máxima do vento" #define D_TX20_NORTH "N" #define D_TX20_EAST "E" #define D_TX20_SOUTH "S" -#define D_TX20_WEST "W" +#define D_TX20_WEST "O" //xsns_43_hre.ino #define D_LOG_HRE "HRE: " @@ -544,7 +544,7 @@ #define D_SENSOR_SPI_MISO "SPI MISO" #define D_SENSOR_SPI_MOSI "SPI MOSI" #define D_SENSOR_SPI_CLK "SPI CLK" -#define D_SENSOR_BACKLIGHT "Luz negra" +#define D_SENSOR_BACKLIGHT "Luz fundo" #define D_SENSOR_PMS5003 "PMS5003" #define D_SENSOR_SDS0X1_RX "SDS0X1 Rx" #define D_SENSOR_SDS0X1_TX "SDS0X1 Tx" @@ -573,7 +573,7 @@ #define D_SENSOR_SSPI_SCLK "SSPI SCLK" #define D_SENSOR_SSPI_CS "SSPI CS" #define D_SENSOR_SSPI_DC "SSPI DC" -#define D_SENSOR_RF_SENSOR "RF Sensor" +#define D_SENSOR_RF_SENSOR "Sensor RF" #define D_SENSOR_AZ_RX "AZ Rx" #define D_SENSOR_AZ_TX "AZ Tx" #define D_SENSOR_MAX31855_CS "MX31855 CS" @@ -599,7 +599,7 @@ #define D_SENSOR_ARIRFSEL "ALux IrSel" #define D_SENSOR_TXD "Serial Tx" #define D_SENSOR_RXD "Serial Rx" -#define D_SENSOR_ROTARY "Rotary" // Suffix "1A" +#define D_SENSOR_ROTARY "Rotativo" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" @@ -657,7 +657,7 @@ #define D_UNIT_PARTS_PER_MILLION "ppm" #define D_UNIT_PRESSURE "hPa" #define D_UNIT_SECOND "sec" -#define D_UNIT_SECTORS "sectors" +#define D_UNIT_SECTORS "setores" #define D_UNIT_VA "VA" #define D_UNIT_VAR "VAr" #define D_UNIT_VOLT "V" @@ -691,37 +691,37 @@ #define D_LOG_WIFI "WIF: " // Wifi //SDM220 -#define D_PHASE_ANGLE "Phase Angle" -#define D_IMPORT_ACTIVE "Import Active" -#define D_EXPORT_ACTIVE "Export Active" -#define D_IMPORT_REACTIVE "Import Reactive" -#define D_EXPORT_REACTIVE "Export Reactive" -#define D_TOTAL_REACTIVE "Total Reactive" +#define D_PHASE_ANGLE "Ângulo de fase" +#define D_IMPORT_ACTIVE "Ativo importado" +#define D_EXPORT_ACTIVE "Ativo exportado" +#define D_IMPORT_REACTIVE "Reativo importado" +#define D_EXPORT_REACTIVE "Reativo exportado" +#define D_TOTAL_REACTIVE "Reactivo total" #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" //SOLAXX1 -#define D_PV1_VOLTAGE "PV1 Voltage" -#define D_PV1_CURRENT "PV1 Current" -#define D_PV1_POWER "PV1 Power" -#define D_PV2_VOLTAGE "PV2 Voltage" -#define D_PV2_CURRENT "PV2 Current" -#define D_PV2_POWER "PV2 Power" -#define D_SOLAR_POWER "Solar Power" -#define D_INVERTER_POWER "Inverter Power" -#define D_STATUS "Status" -#define D_WAITING "Waiting" -#define D_CHECKING "Checking" -#define D_WORKING "Working" -#define D_FAILURE "Failure" -#define D_SOLAX_ERROR_0 "No Error Code" -#define D_SOLAX_ERROR_1 "Grid Lost Fault" -#define D_SOLAX_ERROR_2 "Grid Voltage Fault" -#define D_SOLAX_ERROR_3 "Grid Frequency Fault" -#define D_SOLAX_ERROR_4 "Pv Voltage Fault" -#define D_SOLAX_ERROR_5 "Isolation Fault" -#define D_SOLAX_ERROR_6 "Over Temperature Fault" -#define D_SOLAX_ERROR_7 "Fan Fault" -#define D_SOLAX_ERROR_8 "Other Device Fault" +#define D_PV1_VOLTAGE "Voltagem PV1" +#define D_PV1_CURRENT "Corrente PV1" +#define D_PV1_POWER "Potência PV1" +#define D_PV2_VOLTAGE "Voltagem PV2" +#define D_PV2_CURRENT "Corrente PV2" +#define D_PV2_POWER "Potência PV2" +#define D_SOLAR_POWER "Potência Solar" +#define D_INVERTER_POWER "Potência do Inversor" +#define D_STATUS "Estado" +#define D_WAITING "Esperando" +#define D_CHECKING "Verificando" +#define D_WORKING "Trabalhando" +#define D_FAILURE "Falha" +#define D_SOLAX_ERROR_0 "Nenhum código de erro" +#define D_SOLAX_ERROR_1 "Falha devido a perda de rede" +#define D_SOLAX_ERROR_2 "Falha devido a perda de tensão" +#define D_SOLAX_ERROR_3 "Falha devido a perda de frequência" +#define D_SOLAX_ERROR_4 "Falha de tensão de Pv" +#define D_SOLAX_ERROR_5 "Falha de isolamento" +#define D_SOLAX_ERROR_6 "Falha de temperatura excessiva" +#define D_SOLAX_ERROR_7 "Falha no ventilador" +#define D_SOLAX_ERROR_8 "Outra falha no dispositivo" #endif // _LANGUAGE_PT_PT_H_ diff --git a/sonoff/language/uk-UK.h b/sonoff/language/uk-UK.h index 8030b1f2a..67999ef11 100644 --- a/sonoff/language/uk-UK.h +++ b/sonoff/language/uk-UK.h @@ -139,7 +139,7 @@ #define D_RESTARTING "Перезавантаження" #define D_RESTART_REASON "Причина перезавантаження" #define D_RESTORE "відновлення" -#define D_RETAINED "нерозподілений" +#define D_RETAINED "зберігати" #define D_RULE "Правило" #define D_SAVE "Зберегти" #define D_SENSOR "Давач" diff --git a/sonoff/sonoff.h b/sonoff/sonoff.h index 9dd173167..62dce5e2f 100644 --- a/sonoff/sonoff.h +++ b/sonoff/sonoff.h @@ -270,7 +270,7 @@ enum XsnsFunctions {FUNC_SETTINGS_OVERRIDE, FUNC_PIN_STATE, FUNC_MODULE_INIT, FU FUNC_SAVE_AT_MIDNIGHT, FUNC_SAVE_BEFORE_RESTART, FUNC_PREP_BEFORE_TELEPERIOD, FUNC_AFTER_TELEPERIOD, FUNC_JSON_APPEND, FUNC_WEB_SENSOR, FUNC_COMMAND, FUNC_COMMAND_SENSOR, FUNC_COMMAND_DRIVER, FUNC_MQTT_SUBSCRIBE, FUNC_MQTT_INIT, FUNC_MQTT_DATA, - FUNC_SET_POWER, FUNC_SET_DEVICE_POWER, FUNC_SHOW_SENSOR, + FUNC_SET_POWER, FUNC_SET_DEVICE_POWER, FUNC_SHOW_SENSOR, FUNC_ANY_KEY, FUNC_ENERGY_EVERY_SECOND, FUNC_ENERGY_RESET, FUNC_RULES_PROCESS, FUNC_SERIAL, FUNC_FREE_MEM, FUNC_BUTTON_PRESSED, FUNC_WEB_ADD_BUTTON, FUNC_WEB_ADD_MAIN_BUTTON, FUNC_WEB_ADD_HANDLER, FUNC_SET_CHANNELS, FUNC_SET_SCHEME}; diff --git a/sonoff/sonoff.ino b/sonoff/sonoff.ino index 18afb76c7..18a699350 100755 --- a/sonoff/sonoff.ino +++ b/sonoff/sonoff.ino @@ -537,9 +537,10 @@ bool SendKey(uint32_t key, uint32_t device, uint32_t state) Response_P(PSTR("{\"%s%d\":{\"State\":%d}}"), (key) ? "Switch" : "Button", device, state); result = XdrvRulesProcess(); } -#ifdef USE_KNX - KnxSendButtonPower(key, device, state); -#endif // USE_KNX + int32_t payload_save = XdrvMailbox.payload; + XdrvMailbox.payload = key << 16 | state << 8 | device; + XdrvCall(FUNC_ANY_KEY); + XdrvMailbox.payload = payload_save; return result; } diff --git a/sonoff/support_wifi.ino b/sonoff/support_wifi.ino index a0f4bd3e5..bfbc3631f 100644 --- a/sonoff/support_wifi.ino +++ b/sonoff/support_wifi.ino @@ -323,12 +323,22 @@ bool WifiCheckIPv6(void) } return ipv6_global; } + +bool WifiCheckIPAddrStatus(void) // Return false for 169.254.x.x or fe80::/64 +{ + bool ip_global=false; + + for (auto a : addrList) { + if(!a.isLocal()) ip_global=true; + } + return ip_global; +} #endif // LWIP_IPV6=1 void WifiCheckIp(void) { #if LWIP_IPV6 - if(WifiCheckIPv6()) { + if(WifiCheckIPAddrStatus()) { Wifi.status = WL_CONNECTED; #else if ((WL_CONNECTED == WiFi.status()) && (static_cast(WiFi.localIP()) != 0)) { @@ -456,7 +466,7 @@ void WifiCheck(uint8_t param) WifiCheckIp(); } #if LWIP_IPV6 - if (WifiCheckIPv6()) { + if (WifiCheckIPAddrStatus()) { #else if ((WL_CONNECTED == WiFi.status()) && (static_cast(WiFi.localIP()) != 0) && !Wifi.config_type) { #endif // LWIP_IPV6=1 diff --git a/sonoff/xdrv_02_mqtt.ino b/sonoff/xdrv_02_mqtt.ino index 50f66c8ce..22ecf5f58 100644 --- a/sonoff/xdrv_02_mqtt.ino +++ b/sonoff/xdrv_02_mqtt.ino @@ -346,7 +346,7 @@ void MqttPublishLogging(const char *mxtime) void MqttPublishDirect(const char* topic, bool retained) { char sretained[CMDSZ]; - char slog_type[10]; + char slog_type[20]; #ifdef USE_DEBUG_DRIVER ShowFreeMem(PSTR("MqttPublishDirect")); diff --git a/sonoff/xdrv_11_knx.ino b/sonoff/xdrv_11_knx.ino index 6fa6231c0..a1b45800e 100644 --- a/sonoff/xdrv_11_knx.ino +++ b/sonoff/xdrv_11_knx.ino @@ -672,8 +672,13 @@ void KnxUpdatePowerState(uint8_t device, power_t state) } -void KnxSendButtonPower(uint8_t key, uint8_t device, uint8_t state) +void KnxSendButtonPower(void) { + if (!(Settings.flag.knx_enabled)) { return; } + + uint32_t key = (XdrvMailbox.payload >> 16) & 0xFF; + uint32_t device = XdrvMailbox.payload & 0xFF; + uint32_t state = (XdrvMailbox.payload >> 8) & 0xFF; // key 0 = button_topic // key 1 = switch_topic // state 0 = off @@ -681,9 +686,6 @@ void KnxSendButtonPower(uint8_t key, uint8_t device, uint8_t state) // state 2 = toggle // state 3 = hold // state 9 = clear retain flag - if (!(Settings.flag.knx_enabled)) { return; } -// if (key) -// { // Search all the registered GA that has that output (variable: device) as parameter uint8_t i = KNX_GA_Search(device + 8); @@ -1207,8 +1209,13 @@ bool Xdrv11(uint8_t function) case FUNC_LOOP: if (!global_state.wifi_down) { knx.loop(); } // Process knx events break; - case FUNC_PRE_INIT: - KNX_INIT(); + case FUNC_EVERY_50_MSECOND: + if (toggle_inhibit) { + toggle_inhibit--; + } + break; + case FUNC_ANY_KEY: + KnxSendButtonPower(); break; #ifdef USE_WEBSERVER #ifdef USE_KNX_WEB_MENU @@ -1220,14 +1227,12 @@ bool Xdrv11(uint8_t function) break; #endif // USE_KNX_WEB_MENU #endif // USE_WEBSERVER - case FUNC_EVERY_50_MSECOND: - if (toggle_inhibit) { - toggle_inhibit--; - } - break; case FUNC_COMMAND: result = DecodeCommand(kKnxCommands, KnxCommand); break; + case FUNC_PRE_INIT: + KNX_INIT(); + break; // case FUNC_SET_POWER: // break; } diff --git a/sonoff/xdrv_12_home_assistant.ino b/sonoff/xdrv_12_home_assistant.ino index d5a52a491..e27f4a4d7 100644 --- a/sonoff/xdrv_12_home_assistant.ino +++ b/sonoff/xdrv_12_home_assistant.ino @@ -28,17 +28,15 @@ const char HASS_DISCOVER_RELAY[] PROGMEM = "\"val_tpl\":\"{{value_json.%s}}\"," // POWER2 "\"pl_off\":\"%s\"," // OFF "\"pl_on\":\"%s\"," // ON -// "\"optimistic\":\"false\"," // false is Hass default when state_topic is set "\"avty_t\":\"%s\"," // tele/dualr2/LWT "\"pl_avail\":\"" D_ONLINE "\"," // Online "\"pl_not_avail\":\"" D_OFFLINE "\""; // Offline const char HASS_DISCOVER_BUTTON_SWITCH[] PROGMEM = "{\"name\":\"%s\"," // dualr2 1 BTN - "\"stat_t\":\"%s\"," // cmnd/dualr2/POWER (implies "\"optimistic\":\"false\",") -// "\"value_template\":\"{{value_json.%s}}\"," // POWER2 - "\"pl_on\":\"%s\"," // TOGGLE -// "\"optimistic\":\"false\"," // false is Hass default when state_topic is set + "\"stat_t\":\"%s\"," // stat/RESULT/ (implies "\"optimistic\":\"false\",") + "\"value_template\":\"{{value_json.%s}}\"," // BUTTON1 + "\"pl_on\":\"%s\"," // ON "\"avty_t\":\"%s\"," // tele/dualr2/LWT "\"pl_avail\":\"" D_ONLINE "\"," // Online "\"pl_not_avail\":\"" D_OFFLINE "\""; // Offline @@ -91,10 +89,6 @@ const char HASS_DISCOVER_SENSOR_TEMP[] PROGMEM = "\"val_tpl\":\"{{value_json['%s'].Temperature}}\"," // "SI7021-14":{"Temperature":null,"Humidity":null} -> {{ value_json['SI7021-14'].Temperature }} "\"dev_cla\":\"temperature\""; // temperature -const char HASS_DISCOVER_DS18X20_MULTI[] PROGMEM = - ",\"json_attributes_topic\":\"%s\"," - "\"json_attributes_template\":\"{{{'Id':value_json['%s'].Id}|tojson}}\""; // Add DS18X20 Id as information field - const char HASS_DISCOVER_SENSOR_HUM[] PROGMEM = ",\"unit_of_meas\":\"%%\"," // % "\"val_tpl\":\"{{value_json['%s'].Humidity}}\"," // "SI7021-14":{"Temperature":null,"Humidity":null} -> {{ value_json['SI7021-14'].Humidity }} @@ -115,10 +109,12 @@ const char HASS_DISCOVER_SENSOR_WATT[] PROGMEM = ",\"unit_of_meas\":\"W\"," // W "\"val_tpl\":\"{{value_json['%s'].%s}}\"," // "ENERGY":{"TotalStartTime":null,"Total":null,"Yesterday":null,"Today":null,"Power":null,"ApparentPower":null,"ReactivePower":null,"Factor":null,"Voltage":null,"Current":null} -> {{ value_json['ENERGY'].POWER }} "\"dev_cla\":\"power\""; + const char HASS_DISCOVER_SENSOR_VOLTAGE[] PROGMEM = ",\"unit_of_meas\":\"V\"," // V "\"val_tpl\":\"{{value_json['%s'].%s}}\"," // "ENERGY":{"TotalStartTime":null,"Total":null,"Yesterday":null,"Today":null,"Power":null,"ApparentPower":null,"ReactivePower":null,"Factor":null,"Voltage":null,"Current":null} -> {{ value_json['ENERGY'].Voltage }} "\"dev_cla\":\"power\""; + const char HASS_DISCOVER_SENSOR_AMPERE[] PROGMEM = ",\"unit_of_meas\":\"A\"," // A "\"val_tpl\":\"{{value_json['%s'].%s}}\"," // "ENERGY":{"TotalStartTime":null,"Total":null,"Yesterday":null,"Today":null,"Power":null,"ApparentPower":null,"ReactivePower":null,"Factor":null,"Voltage":null,"Current":null} -> {{ value_json['ENERGY'].Current }} @@ -127,7 +123,7 @@ const char HASS_DISCOVER_SENSOR_AMPERE[] PROGMEM = //ILLUMINANCE const char HASS_DISCOVER_SENSOR_ILLUMINANCE[] PROGMEM = ",\"unit_of_meas\":\"LX\"," // LX by default - "\"val_tpl\":\"{{value_json['%s'].Illuminance}}\"," // "ANALOG":{"Illuminance":34}} + "\"val_tpl\":\"{{value_json['%s'].Illuminance}}\"," // "ANALOG":{"Illuminance":34}} "\"dev_cla\":\"illuminance\""; // illuminance const char HASS_DISCOVER_SENSOR_ANY[] PROGMEM = @@ -135,8 +131,9 @@ const char HASS_DISCOVER_SENSOR_ANY[] PROGMEM = const char HASS_DISCOVER_SENSOR_HASS_STATUS[] PROGMEM = ",\"json_attributes_topic\":\"%s\"," - "\"unit_of_meas\":\" \"," // " " As unit of measurement to get a value graph in Hass - "\"val_tpl\":\"{{value_json['" D_JSON_RSSI "']}}\""; // "COUNTER":{"C1":0} -> {{ value_json['COUNTER'].C1 }} + "\"unit_of_meas\":\" \"," // " " As unit of measurement to get a value graph in Hass + "\"val_tpl\":\"{{value_json['" D_JSON_RSSI "']}}\"," // "COUNTER":{"C1":0} -> {{ value_json['COUNTER'].C1 }} + "\"ic\":\"mdi:information-outline\""; const char HASS_DISCOVER_DEVICE_INFO[] PROGMEM = ",\"uniq_id\":\"%s\"," @@ -319,20 +316,20 @@ void HAssAnnounceButtonSwitch(uint8_t device, char* topic, uint8_t present, uint char prefix[TOPSZ]; char *state_topic = stemp1; char *availability_topic = stemp2; + char jsoname[8]; - if (device+1 > MAX_FRIENDLYNAMES) { - snprintf_P(name, sizeof(name), PSTR("%s %s %d"), Settings.friendlyname[0], key?"SW":"BTN", device+1); - } else { - snprintf_P(name, sizeof(name), PSTR("%s %s"), Settings.friendlyname[device], key?"SW":"BTN"); - } + snprintf_P(name, sizeof(name), PSTR("%s %s%d"), Settings.friendlyname[0], key?"Switch":"Button", device+1); GetPowerDevice(value_template, device+1, sizeof(value_template), key + Settings.flag.device_index_enable); // Force index for Switch 1, Index on Button1 is controlled by Settings.flag.device_index_enable - GetTopic_P(state_topic, CMND, topic, value_template); // State of button is sent as CMND TOGGLE, state of switch is sent as ON/OFF + //GetTopic_P(state_topic, CMND, topic, value_template); // State of button is sent as CMND TOGGLE, state of switch is sent as ON/OFF + GetTopic_P(state_topic, STAT, mqtt_topic, PSTR(D_RSLT_RESULT)); GetTopic_P(availability_topic, TELE, mqtt_topic, S_LWT); FindPrefix(state_topic, availability_topic, prefix); + Shorten(&state_topic, prefix); Shorten(&availability_topic, prefix); - Response_P(HASS_DISCOVER_BUTTON_SWITCH, name, state_topic, Settings.state_text[toggle?2:1], availability_topic); + snprintf_P(jsoname, sizeof(jsoname), PSTR("%s%d"), key?"SWITCH":"BUTTON", device+1); + Response_P(HASS_DISCOVER_BUTTON_SWITCH, name, state_topic, jsoname, Settings.state_text[toggle?2:1], availability_topic); TryResponseAppend_P(HASS_DISCOVER_DEVICE_INFO_SHORT, unique_id, ESP.getChipId(), WiFi.macAddress().c_str()); if (strlen(prefix) > 0 ) TryResponseAppend_P(HASS_DISCOVER_TOPIC_PREFIX, prefix); if (toggle) TryResponseAppend_P(HASS_DISCOVER_BUTTON_SWITCH_TOGGLE); @@ -350,7 +347,7 @@ void HAssAnnounceSwitches(void) // Send info about buttons char *tmp = Settings.switch_topic; Format(sw_topic, tmp, sizeof(sw_topic)); - if ((strlen(sw_topic) != 0) && strcmp(sw_topic, "0")) { + if (!strcmp_P(sw_topic, "0") || strlen(sw_topic) == 0 ) { for (uint32_t switch_index = 0; switch_index < MAX_SWITCHES; switch_index++) { uint8_t switch_present = 0; uint8_t toggle = 1; @@ -379,7 +376,7 @@ void HAssAnnounceButtons(void) // Send info about buttons char *tmp = Settings.button_topic; Format(key_topic, tmp, sizeof(key_topic)); - if ((strlen(key_topic) != 0) && strcmp(key_topic, "0")) { + if (!strcmp_P(key_topic, "0") || strlen(key_topic) == 0 ) { for (uint32_t button_index = 0; button_index < MAX_KEYS; button_index++) { uint8_t button_present = 0; uint8_t toggle = 1; @@ -404,13 +401,13 @@ void HAssAnnounceButtons(void) } } -void HAssAnnounceSensor(const char* sensorname, const char* subsensortype) +void HAssAnnounceSensor(const char* sensorname, const char* subsensortype) { char stopic[TOPSZ]; char stemp1[TOPSZ]; char stemp2[TOPSZ]; char unique_id[30]; - bool is_sensor = true; + bool is_sensor = true; // Announce sensor, special handling of temperature and humidity sensors mqtt_data[0] = '\0'; // Clear retained message @@ -466,10 +463,10 @@ void HAssAnnounceSensor(const char* sensorname, const char* subsensortype) } else if (!strcmp_P(subsensortype, PSTR(D_JSON_ILLUMINANCE))){ TryResponseAppend_P(HASS_DISCOVER_SENSOR_ILLUMINANCE, sensorname, subsensortype); } else { - if (is_sensor){ - TryResponseAppend_P(PSTR(",\"unit_of_meas\":\" \"")); // " " As unit of measurement to get a value graph (not available for binary sensors) - } - TryResponseAppend_P(HASS_DISCOVER_SENSOR_ANY, sensorname, subsensortype); + if (is_sensor){ + TryResponseAppend_P(PSTR(",\"unit_of_meas\":\" \"")); // " " As unit of measurement to get a value graph (not available for binary sensors) + } + TryResponseAppend_P(HASS_DISCOVER_SENSOR_ANY, sensorname, subsensortype); } TryResponseAppend_P(PSTR("}")); } @@ -611,6 +608,22 @@ void HAssDiscover(void) hass_init_step = 1; // Delayed discovery } +void HAssAnyKey(void) +{ + if (!Settings.flag.hass_discovery) { return; } + + uint32_t key = (XdrvMailbox.payload >> 16) & 0xFF; + uint32_t device = XdrvMailbox.payload & 0xFF; + uint32_t state = (XdrvMailbox.payload >> 8) & 0xFF; + + char scommand[CMDSZ]; + snprintf_P(scommand, sizeof(scommand), PSTR("%s%d"), (key) ? "SWITCH" : "BUTTON", device); + char stopic[TOPSZ]; + GetTopic_P(stopic, STAT, mqtt_topic, (Settings.flag.mqtt_response) ? scommand : S_RSLT_RESULT); + Response_P(S_JSON_COMMAND_SVALUE, scommand, GetStateText(state)); + MqttPublish(stopic); +} + /*********************************************************************************************\ * Interface \*********************************************************************************************/ @@ -621,10 +634,6 @@ bool Xdrv12(uint8_t function) if (Settings.flag.mqtt_enabled) { switch (function) { - case FUNC_MQTT_INIT: - hass_mode = 0; // Discovery only if Settings.flag.hass_discovery is set - hass_init_step = 2; // Delayed discovery - break; case FUNC_EVERY_SECOND: if (hass_init_step) { hass_init_step--; @@ -641,6 +650,13 @@ bool Xdrv12(uint8_t function) } } break; + case FUNC_ANY_KEY: + HAssAnyKey(); + break; + case FUNC_MQTT_INIT: + hass_mode = 0; // Discovery only if Settings.flag.hass_discovery is set + hass_init_step = 2; // Delayed discovery + break; } } return result; diff --git a/sonoff/xdrv_16_tuyamcu.ino b/sonoff/xdrv_16_tuyamcu.ino index 797cdba8f..2cf63c8d0 100644 --- a/sonoff/xdrv_16_tuyamcu.ino +++ b/sonoff/xdrv_16_tuyamcu.ino @@ -276,8 +276,11 @@ bool TuyaSetPower(void) uint8_t rpower = XdrvMailbox.index; int16_t source = XdrvMailbox.payload; + uint8_t dpid = TuyaGetDpId(TUYA_MCU_FUNC_REL1 + active_device - 1); + if (dpid == 0) dpid = TuyaGetDpId(TUYA_MCU_FUNC_REL1_INV + active_device - 1); + if (source != SRC_SWITCH && TuyaSerial) { // ignore to prevent loop from pushing state from faceplate interaction - TuyaSendBool(active_device, bitRead(rpower, active_device-1) ^ bitRead(rel_inverted, active_device-1)); + TuyaSendBool(dpid, bitRead(rpower, active_device-1) ^ bitRead(rel_inverted, active_device-1)); status = true; } return status;