diff --git a/README.md b/README.md index 7d95d9370..f7c00a1dd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ## Sonoff-Tasmota -Alternative firmware for _ESP8266 based devices_ like [iTead](https://www.itead.cc/) _**Sonoff**_ with **web**, **timers**, 'Over The Air' (**OTA**) firmware updates and **sensors support**, allowing control under **Serial**, **HTTP** and **MQTT**, so as to be used on **Smart Home Systems**. Written for Arduino IDE and PlatformIO. +Alternative firmware for _ESP8266 based devices_ like [iTead](https://www.itead.cc/) _**Sonoff**_ with **web**, **timers**, 'Over The Air' (**OTA**) firmware updates and **sensors support**, allowing control under **Serial**, **HTTP**, **MQTT** and **KNX**, so as to be used on **Smart Home Systems**. Written for Arduino IDE and PlatformIO. [![GitHub version](https://img.shields.io/github/release/arendst/Sonoff-Tasmota.svg)](https://github.com/arendst/Sonoff-Tasmota/releases/latest) [![GitHub download](https://img.shields.io/github/downloads/arendst/Sonoff-Tasmota/total.svg)](https://github.com/arendst/Sonoff-Tasmota/releases/latest) @@ -44,7 +44,8 @@ The following devices are supported: - [iTead Sonoff SV](https://www.itead.cc/smart-home/sonoff-sv.html) - [iTead Sonoff TH10/TH16 with temperature sensor](https://www.itead.cc/smart-home/sonoff-th.html) - [iTead Sonoff Dual (R2)](https://www.itead.cc/smart-home/sonoff-dual.html) -- [iTead Sonoff Pow](https://www.itead.cc/smart-home/sonoff-pow.html) +- [iTead Sonoff Pow with Energy Monitoring](https://www.itead.cc/smart-home/sonoff-pow.html) +- [iTead Sonoff Pow R2 with Energy Monitoring](https://www.itead.cc/sonoff-pow-r2.html) - [iTead Sonoff 4CH](https://www.itead.cc/smart-home/sonoff-4ch.html) - [iTead Sonoff 4CH Pro](https://www.itead.cc/smart-home/sonoff-4ch-pro.html) - [iTead S20 Smart Socket](https://www.itead.cc/smart-socket.html) @@ -81,4 +82,4 @@ You can contribute to Sonoff-Tasmota by ### License -This program is licensed under GPL-3.0 \ No newline at end of file +This program is licensed under GPL-3.0 diff --git a/lib/ESPAsyncUDP-0.21/README.md b/lib/ESPAsyncUDP-0.21/README.md deleted file mode 100644 index 6568fa372..000000000 --- a/lib/ESPAsyncUDP-0.21/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# ESPAsyncUDP -_Library patched with the [PR #21](https://github.com/me-no-dev/ESPAsyncUDP/pull/21)_ - -Async UDP Library for ESP8266 Arduino [![Build Status](https://travis-ci.org/me-no-dev/ESPAsyncUDP.svg?branch=master)](https://travis-ci.org/me-no-dev/ESPAsyncUDP) - -[![Join the chat at https://gitter.im/me-no-dev/ESPAsyncWebServer](https://badges.gitter.im/me-no-dev/ESPAsyncWebServer.svg)](https://gitter.im/me-no-dev/ESPAsyncWebServer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -This is a fully asynchronous UDP library, aimed at enabling trouble-free, multi-connection network environment for Espressif's ESP8266 MCUs. - -The library is easy to use and includes support for Unicast, Broadcast and Multicast environments - -Latest GIT version of ESP8266 Arduino might be required for this library to work diff --git a/lib/ESPAsyncUDP-0.21/examples/AsyncUDPClient/AsyncUDPClient.ino b/lib/ESPAsyncUDP-0.21/examples/AsyncUDPClient/AsyncUDPClient.ino deleted file mode 100644 index cf528fe12..000000000 --- a/lib/ESPAsyncUDP-0.21/examples/AsyncUDPClient/AsyncUDPClient.ino +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include "ESPAsyncUDP.h" - -const char * ssid = "***********"; -const char * password = "***********"; - -AsyncUDP udp; - -void setup() -{ - Serial.begin(115200); - WiFi.mode(WIFI_STA); - WiFi.begin(ssid, password); - if (WiFi.waitForConnectResult() != WL_CONNECTED) { - Serial.println("WiFi Failed"); - while(1) { - delay(1000); - } - } - if(udp.connect(IPAddress(192,168,1,100), 1234)) { - Serial.println("UDP connected"); - udp.onPacket([](AsyncUDPPacket packet) { - Serial.print("UDP Packet Type: "); - Serial.print(packet.isBroadcast()?"Broadcast":packet.isMulticast()?"Multicast":"Unicast"); - Serial.print(", From: "); - Serial.print(packet.remoteIP()); - Serial.print(":"); - Serial.print(packet.remotePort()); - Serial.print(", To: "); - Serial.print(packet.localIP()); - Serial.print(":"); - Serial.print(packet.localPort()); - Serial.print(", Length: "); - Serial.print(packet.length()); - Serial.print(", Data: "); - Serial.write(packet.data(), packet.length()); - Serial.println(); - //reply to the client - packet.printf("Got %u bytes of data", packet.length()); - }); - //Send unicast - udp.print("Hello Server!"); - } -} - -void loop() -{ - delay(1000); - //Send broadcast on port 1234 - udp.broadcastTo("Anyone here?", 1234); -} diff --git a/lib/ESPAsyncUDP-0.21/examples/AsyncUDPMulticastServer/AsyncUDPMulticastServer.ino b/lib/ESPAsyncUDP-0.21/examples/AsyncUDPMulticastServer/AsyncUDPMulticastServer.ino deleted file mode 100644 index bb3e69c9b..000000000 --- a/lib/ESPAsyncUDP-0.21/examples/AsyncUDPMulticastServer/AsyncUDPMulticastServer.ino +++ /dev/null @@ -1,52 +0,0 @@ -#include -#include "ESPAsyncUDP.h" - -const char * ssid = "***********"; -const char * password = "***********"; - -AsyncUDP udp; - -void setup() -{ - Serial.begin(115200); - WiFi.mode(WIFI_STA); - WiFi.begin(ssid, password); - if (WiFi.waitForConnectResult() != WL_CONNECTED) { - Serial.println("WiFi Failed"); - while(1) { - delay(1000); - } - } - if(udp.listenMulticast(IPAddress(239,1,2,3), 1234)) { - Serial.print("UDP Listening on IP: "); - Serial.println(WiFi.localIP()); - udp.onPacket([](AsyncUDPPacket packet) { - Serial.print("UDP Packet Type: "); - Serial.print(packet.isBroadcast()?"Broadcast":packet.isMulticast()?"Multicast":"Unicast"); - Serial.print(", From: "); - Serial.print(packet.remoteIP()); - Serial.print(":"); - Serial.print(packet.remotePort()); - Serial.print(", To: "); - Serial.print(packet.localIP()); - Serial.print(":"); - Serial.print(packet.localPort()); - Serial.print(", Length: "); - Serial.print(packet.length()); - Serial.print(", Data: "); - Serial.write(packet.data(), packet.length()); - Serial.println(); - //reply to the client - packet.printf("Got %u bytes of data", packet.length()); - }); - //Send multicast - udp.print("Hello!"); - } -} - -void loop() -{ - delay(1000); - //Send multicast - udp.print("Anyone here?"); -} diff --git a/lib/ESPAsyncUDP-0.21/examples/AsyncUDPServer/AsyncUDPServer.ino b/lib/ESPAsyncUDP-0.21/examples/AsyncUDPServer/AsyncUDPServer.ino deleted file mode 100644 index fc12a7fc3..000000000 --- a/lib/ESPAsyncUDP-0.21/examples/AsyncUDPServer/AsyncUDPServer.ino +++ /dev/null @@ -1,50 +0,0 @@ -#include -#include "ESPAsyncUDP.h" - -const char * ssid = "***********"; -const char * password = "***********"; - -AsyncUDP udp; - -void setup() -{ - Serial.begin(115200); - WiFi.mode(WIFI_STA); - WiFi.begin(ssid, password); - if (WiFi.waitForConnectResult() != WL_CONNECTED) { - Serial.println("WiFi Failed"); - while(1) { - delay(1000); - } - } - if(udp.listen(1234)) { - Serial.print("UDP Listening on IP: "); - Serial.println(WiFi.localIP()); - udp.onPacket([](AsyncUDPPacket packet) { - Serial.print("UDP Packet Type: "); - Serial.print(packet.isBroadcast()?"Broadcast":packet.isMulticast()?"Multicast":"Unicast"); - Serial.print(", From: "); - Serial.print(packet.remoteIP()); - Serial.print(":"); - Serial.print(packet.remotePort()); - Serial.print(", To: "); - Serial.print(packet.localIP()); - Serial.print(":"); - Serial.print(packet.localPort()); - Serial.print(", Length: "); - Serial.print(packet.length()); - Serial.print(", Data: "); - Serial.write(packet.data(), packet.length()); - Serial.println(); - //reply to the client - packet.printf("Got %u bytes of data", packet.length()); - }); - } -} - -void loop() -{ - delay(1000); - //Send broadcast - udp.broadcast("Anyone here?"); -} diff --git a/lib/ESPAsyncUDP-0.21/keywords.txt b/lib/ESPAsyncUDP-0.21/keywords.txt deleted file mode 100644 index 67c0b97a7..000000000 --- a/lib/ESPAsyncUDP-0.21/keywords.txt +++ /dev/null @@ -1,33 +0,0 @@ -####################################### -# Syntax Coloring Map For Ultrasound -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -AsyncUDP KEYWORD1 -AsyncUDPPacket KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### - -connect KEYWORD2 -connected KEYWORD2 -listen KEYWORD2 -listenMulticast KEYWORD2 -close KEYWORD2 -write KEYWORD2 -broadcast KEYWORD2 -onPacket KEYWORD2 -data KEYWORD2 -length KEYWORD2 -localIP KEYWORD2 -localPort KEYWORD2 -remoteIP KEYWORD2 -remotePort KEYWORD2 - -####################################### -# Constants (LITERAL1) -####################################### diff --git a/lib/ESPAsyncUDP-0.21/library.json b/lib/ESPAsyncUDP-0.21/library.json deleted file mode 100644 index fe300b6e6..000000000 --- a/lib/ESPAsyncUDP-0.21/library.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name":"ESPAsyncUDP", - "description":"Asynchronous UDP Library for ESP8266", - "keywords":"async,udp,server,client,multicast,broadcast", - "authors": - { - "name": "Hristo Gochkov", - "maintainer": true - }, - "repository": - { - "type": "git", - "url": "https://github.com/me-no-dev/ESPAsyncUDP.git" - }, - "frameworks": "arduino", - "platforms":"espressif" -} diff --git a/lib/ESPAsyncUDP-0.21/library.properties b/lib/ESPAsyncUDP-0.21/library.properties deleted file mode 100644 index 1aa6ef1ad..000000000 --- a/lib/ESPAsyncUDP-0.21/library.properties +++ /dev/null @@ -1,9 +0,0 @@ -name=ESP Async UDP -version=1.0.0 -author=Me-No-Dev -maintainer=Me-No-Dev -sentence=Async UDP Library for ESP8266 -paragraph=Async UDP Library for ESP8266 -category=Other -url=https://github.com/me-no-dev/ESPAsyncUDP -architectures=* diff --git a/lib/ESPAsyncUDP-0.21/src/AsyncUDP.cpp b/lib/ESPAsyncUDP-0.21/src/AsyncUDP.cpp deleted file mode 100644 index 6d2423819..000000000 --- a/lib/ESPAsyncUDP-0.21/src/AsyncUDP.cpp +++ /dev/null @@ -1,425 +0,0 @@ -#include "Arduino.h" -#include "ESPAsyncUDP.h" - -extern "C" { -#include "user_interface.h" -#include "lwip/opt.h" -#include "lwip/inet.h" -#include "lwip/udp.h" -#include "lwip/igmp.h" -} - -AsyncUDPMessage::AsyncUDPMessage(size_t size) -{ - _index = 0; - if(size > 1460) { - size = 1460; - } - _size = size; - _buffer = (uint8_t *)malloc(size); -} - -AsyncUDPMessage::~AsyncUDPMessage() -{ - if(_buffer) { - free(_buffer); - } -} - -size_t AsyncUDPMessage::write(const uint8_t *data, size_t len) -{ - if(_buffer == NULL) { - return 0; - } - size_t s = space(); - if(len > s) { - len = s; - } - memcpy(_buffer + _index, data, len); - _index += len; - return len; -} - -size_t AsyncUDPMessage::write(uint8_t data) -{ - return write(&data, 1); -} - -size_t AsyncUDPMessage::space() -{ - if(_buffer == NULL) { - return 0; - } - return _size - _index; -} - -uint8_t * AsyncUDPMessage::data() -{ - return _buffer; -} - -size_t AsyncUDPMessage::length() -{ - return _index; -} - -void AsyncUDPMessage::flush() -{ - _index = 0; -} - - -AsyncUDPPacket::AsyncUDPPacket(AsyncUDP *udp, ip_addr_t *localIp, uint16_t localPort, ip_addr_t *remoteIp, uint16_t remotePort, uint8_t *data, size_t len) -{ - _udp = udp; - _localIp = localIp; - _localPort = localPort; - _remoteIp = remoteIp; - _remotePort = remotePort; - _data = data; - _len = len; -} - -AsyncUDPPacket::~AsyncUDPPacket() -{ - -} - -uint8_t * AsyncUDPPacket::data() -{ - return _data; -} - -size_t AsyncUDPPacket::length() -{ - return _len; -} - -IPAddress AsyncUDPPacket::localIP() -{ - return IPAddress(_localIp->addr); -} - -uint16_t AsyncUDPPacket::localPort() -{ - return _localPort; -} - -IPAddress AsyncUDPPacket::remoteIP() -{ - return IPAddress(_remoteIp->addr); -} - -uint16_t AsyncUDPPacket::remotePort() -{ - return _remotePort; -} - -bool AsyncUDPPacket::isBroadcast() -{ - return _localIp->addr == 0xFFFFFFFF || _localIp->addr == (uint32_t)(0); -} - -bool AsyncUDPPacket::isMulticast() -{ - return ip_addr_ismulticast(_localIp); -} - -size_t AsyncUDPPacket::write(const uint8_t *data, size_t len) -{ - return _udp->writeTo(data, len, _remoteIp, _remotePort); -} - -size_t AsyncUDPPacket::write(uint8_t data) -{ - return write(&data, 1); -} - -size_t AsyncUDPPacket::send(AsyncUDPMessage &message) -{ - return write(message.data(), message.length()); -} - - - -AsyncUDP::AsyncUDP() -{ - _pcb = NULL; - _connected = false; - _handler = NULL; -} - -AsyncUDP::~AsyncUDP() -{ - close(); -} - -AsyncUDP::operator bool() -{ - return _connected; -} - -bool AsyncUDP::connected() -{ - return _connected; -} - -void AsyncUDP::onPacket(AuPacketHandlerFunctionWithArg cb, void * arg) -{ - onPacket(std::bind(cb, arg, std::placeholders::_1)); -} - -void AsyncUDP::onPacket(AuPacketHandlerFunction cb) -{ - _handler = cb; -} - -void AsyncUDP::_recv(udp_pcb *upcb, pbuf *pb, ip_addr_t *addr, uint16_t port) -{ - (void)upcb; // its unused, avoid warning - while(pb != NULL) { - if(_handler) { - uint8_t * data = (uint8_t*)((pb)->payload); - size_t len = pb->len; - - ip_hdr* iphdr = reinterpret_cast(data - UDP_HLEN - IP_HLEN); - ip_addr_t daddr; - daddr.addr = iphdr->dest.addr; - - udp_hdr* udphdr = reinterpret_cast(((uint8_t*)((pb)->payload)) - UDP_HLEN); - uint16_t dport = ntohs(udphdr->dest); - - AsyncUDPPacket packet(this, &daddr, dport, addr, port, data, len); - _handler(packet); - } - - pbuf * this_pb = pb; - pb = pb->next; - this_pb->next = NULL; - pbuf_free(this_pb); - } -} - -#if LWIP_VERSION_MAJOR == 1 -void AsyncUDP::_s_recv(void *arg, udp_pcb *upcb, pbuf *p, ip_addr_t *addr, uint16_t port) -#else -void AsyncUDP::_s_recv(void *arg, udp_pcb *upcb, pbuf *p, const ip_addr_t *addr, uint16_t port) -#endif -{ - reinterpret_cast(arg)->_recv(upcb, p, (ip_addr_t *)addr, port); -} - -bool AsyncUDP::listen(ip_addr_t *addr, uint16_t port) -{ - close(); - _pcb = udp_new(); - if(_pcb == NULL) { - return false; - } - err_t err = udp_bind(_pcb, addr, port); - if(err != ERR_OK) { - close(); - return false; - } - udp_recv(_pcb, &_s_recv, (void *) this); - _connected = true; - return true; -} - -bool AsyncUDP::listenMulticast(ip_addr_t *addr, uint16_t port, uint8_t ttl) -{ - close(); - if(!ip_addr_ismulticast(addr)) { - return false; - } - ip_addr_t multicast_if_addr; - struct ip_info ifIpInfo; - int mode = wifi_get_opmode(); - if(mode & STATION_MODE) { - wifi_get_ip_info(STATION_IF, &ifIpInfo); - multicast_if_addr.addr = ifIpInfo.ip.addr; - } else if (mode & SOFTAP_MODE) { - wifi_get_ip_info(SOFTAP_IF, &ifIpInfo); - multicast_if_addr.addr = ifIpInfo.ip.addr; - } else { - return false; - } - if (igmp_joingroup(&multicast_if_addr, addr)!= ERR_OK) { - return false; - } - if(!listen(IPADDR_ANY, port)) { - return false; - } -#if LWIP_VERSION_MAJOR == 1 - udp_set_multicast_netif_addr(_pcb, multicast_if_addr); -#else - udp_set_multicast_netif_addr(_pcb, &multicast_if_addr); -#endif - udp_set_multicast_ttl(_pcb, ttl); - ip_addr_copy(_pcb->remote_ip, *addr); - _pcb->remote_port = port; - return true; -} - -bool AsyncUDP::connect(ip_addr_t *addr, uint16_t port) -{ - close(); - _pcb = udp_new(); - if(_pcb == NULL) { - return false; - } - err_t err = udp_connect(_pcb, addr, port); - if(err != ERR_OK) { - close(); - return false; - } - udp_recv(_pcb, &_s_recv, (void *) this); - _connected = true; - return true; -} - -void AsyncUDP::close() -{ - if(_pcb != NULL) { - if(_connected) { - udp_disconnect(_pcb); - } - udp_remove(_pcb); - _connected = false; - _pcb = NULL; - } -} - -size_t AsyncUDP::writeTo(const uint8_t *data, size_t len, ip_addr_t *addr, uint16_t port) -{ - if(!_pcb && !connect(addr, port)) { - return 0; - } - if(len > 1460) { - len = 1460; - } - pbuf* pbt = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM); - if(pbt != NULL) { - uint8_t* dst = reinterpret_cast(pbt->payload); - memcpy(dst, data, len); - err_t err = udp_sendto(_pcb, pbt, addr, port); - pbuf_free(pbt); - if(err < ERR_OK) { - return 0; - } - return len; - } - return 0; -} - -bool AsyncUDP::listen(const IPAddress addr, uint16_t port) -{ - ip_addr_t laddr; - laddr.addr = addr; - return listen(&laddr, port); -} - -bool AsyncUDP::listen(uint16_t port) -{ - return listen(IPAddress((uint32_t)INADDR_ANY), port); -} - -bool AsyncUDP::listenMulticast(const IPAddress addr, uint16_t port, uint8_t ttl) -{ - ip_addr_t laddr; - laddr.addr = addr; - return listenMulticast(&laddr, port, ttl); -} - -bool AsyncUDP::connect(const IPAddress addr, uint16_t port) -{ - ip_addr_t daddr; - daddr.addr = addr; - return connect(&daddr, port); -} - -size_t AsyncUDP::writeTo(const uint8_t *data, size_t len, const IPAddress addr, uint16_t port) -{ - ip_addr_t daddr; - daddr.addr = addr; - return writeTo(data, len, &daddr, port); -} - -size_t AsyncUDP::write(const uint8_t *data, size_t len) -{ - if(_pcb) - { - return writeTo(data, len, &(_pcb->remote_ip), _pcb->remote_port); - } -} - -size_t AsyncUDP::write(uint8_t data) -{ - return write(&data, 1); -} - -size_t AsyncUDP::broadcastTo(uint8_t *data, size_t len, uint16_t port) -{ - ip_addr_t daddr; - daddr.addr = 0xFFFFFFFF; - return writeTo(data, len, &daddr, port); -} - -size_t AsyncUDP::broadcastTo(const char * data, uint16_t port) -{ - return broadcastTo((uint8_t *)data, strlen(data), port); -} - -size_t AsyncUDP::broadcast(uint8_t *data, size_t len) -{ - if(_pcb->local_port != 0) { - return broadcastTo(data, len, _pcb->local_port); - } - return 0; -} - -size_t AsyncUDP::broadcast(const char * data) -{ - return broadcast((uint8_t *)data, strlen(data)); -} - - -size_t AsyncUDP::sendTo(AsyncUDPMessage &message, ip_addr_t *addr, uint16_t port) -{ - if(!message) { - return 0; - } - return writeTo(message.data(), message.length(), addr, port); -} - -size_t AsyncUDP::sendTo(AsyncUDPMessage &message, const IPAddress addr, uint16_t port) -{ - if(!message) { - return 0; - } - return writeTo(message.data(), message.length(), addr, port); -} - -size_t AsyncUDP::send(AsyncUDPMessage &message) -{ - if((!message) || (!_pcb)) { - return 0; - } - return writeTo(message.data(), message.length(), &(_pcb->remote_ip), _pcb->remote_port); -} - -size_t AsyncUDP::broadcastTo(AsyncUDPMessage &message, uint16_t port) -{ - if(!message) { - return 0; - } - return broadcastTo(message.data(), message.length(), port); -} - -size_t AsyncUDP::broadcast(AsyncUDPMessage &message) -{ - if(!message) { - return 0; - } - return broadcast(message.data(), message.length()); -} diff --git a/lib/ESPAsyncUDP-0.21/src/ESPAsyncUDP.h b/lib/ESPAsyncUDP-0.21/src/ESPAsyncUDP.h deleted file mode 100644 index 8e5a70b21..000000000 --- a/lib/ESPAsyncUDP-0.21/src/ESPAsyncUDP.h +++ /dev/null @@ -1,130 +0,0 @@ -#ifndef ESPASYNCUDP_H -#define ESPASYNCUDP_H - -#include "IPAddress.h" -#include "Print.h" -#include -#include "lwip/init.h" - -class AsyncUDP; -class AsyncUDPPacket; -class AsyncUDPMessage; -struct udp_pcb; -struct pbuf; -#if LWIP_VERSION_MAJOR == 1 -struct ip_addr; -typedef struct ip_addr ip_addr_t; -#else -struct ip4_addr; -typedef struct ip4_addr ip_addr_t; -#endif - -class AsyncUDPMessage : public Print -{ -protected: - uint8_t *_buffer; - size_t _index; - size_t _size; -public: - AsyncUDPMessage(size_t size=1460); - virtual ~AsyncUDPMessage(); - size_t write(const uint8_t *data, size_t len); - size_t write(uint8_t data); - size_t space(); - uint8_t * data(); - size_t length(); - void flush(); - operator bool() - { - return _buffer != NULL; - } -}; - -class AsyncUDPPacket : public Print -{ -protected: - AsyncUDP *_udp; - ip_addr_t *_localIp; - uint16_t _localPort; - ip_addr_t *_remoteIp; - uint16_t _remotePort; - uint8_t *_data; - size_t _len; -public: - AsyncUDPPacket(AsyncUDP *udp, ip_addr_t *localIp, uint16_t localPort, ip_addr_t *remoteIp, uint16_t remotePort, uint8_t *data, size_t len); - virtual ~AsyncUDPPacket(); - - uint8_t * data(); - size_t length(); - bool isBroadcast(); - bool isMulticast(); - - IPAddress localIP(); - uint16_t localPort(); - IPAddress remoteIP(); - uint16_t remotePort(); - - size_t send(AsyncUDPMessage &message); - - size_t write(const uint8_t *data, size_t len); - size_t write(uint8_t data); -}; - -typedef std::function AuPacketHandlerFunction; -typedef std::function AuPacketHandlerFunctionWithArg; - -class AsyncUDP : public Print -{ -protected: - udp_pcb *_pcb; - bool _connected; - AuPacketHandlerFunction _handler; - - void _recv(udp_pcb *upcb, pbuf *pb, ip_addr_t *addr, uint16_t port); -#if LWIP_VERSION_MAJOR == 1 - static void _s_recv(void *arg, udp_pcb *upcb, pbuf *p, ip_addr_t *addr, uint16_t port); -#else - static void _s_recv(void *arg, udp_pcb *upcb, pbuf *p, const ip_addr_t *addr, uint16_t port); -#endif - -public: - AsyncUDP(); - virtual ~AsyncUDP(); - - void onPacket(AuPacketHandlerFunctionWithArg cb, void * arg=NULL); - void onPacket(AuPacketHandlerFunction cb); - - bool listen(ip_addr_t *addr, uint16_t port); - bool listen(const IPAddress addr, uint16_t port); - bool listen(uint16_t port); - - bool listenMulticast(ip_addr_t *addr, uint16_t port, uint8_t ttl=1); - bool listenMulticast(const IPAddress addr, uint16_t port, uint8_t ttl=1); - - bool connect(ip_addr_t *addr, uint16_t port); - bool connect(const IPAddress addr, uint16_t port); - - void close(); - - size_t writeTo(const uint8_t *data, size_t len, ip_addr_t *addr, uint16_t port); - size_t writeTo(const uint8_t *data, size_t len, const IPAddress addr, uint16_t port); - size_t write(const uint8_t *data, size_t len); - size_t write(uint8_t data); - - size_t broadcastTo(uint8_t *data, size_t len, uint16_t port); - size_t broadcastTo(const char * data, uint16_t port); - size_t broadcast(uint8_t *data, size_t len); - size_t broadcast(const char * data); - - size_t sendTo(AsyncUDPMessage &message, ip_addr_t *addr, uint16_t port); - size_t sendTo(AsyncUDPMessage &message, const IPAddress addr, uint16_t port); - size_t send(AsyncUDPMessage &message); - - size_t broadcastTo(AsyncUDPMessage &message, uint16_t port); - size_t broadcast(AsyncUDPMessage &message); - - bool connected(); - operator bool(); -}; - -#endif diff --git a/lib/ESPAsyncUDP-0.21/travis/common.sh b/lib/ESPAsyncUDP-0.21/travis/common.sh deleted file mode 100644 index 57bede343..000000000 --- a/lib/ESPAsyncUDP-0.21/travis/common.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -function build_sketches() -{ - local arduino=$1 - local srcpath=$2 - local platform=$3 - local sketches=$(find $srcpath -name *.ino) - for sketch in $sketches; do - local sketchdir=$(dirname $sketch) - if [[ -f "$sketchdir/.$platform.skip" ]]; then - echo -e "\n\n ------------ Skipping $sketch ------------ \n\n"; - continue - fi - echo -e "\n\n ------------ Building $sketch ------------ \n\n"; - $arduino --verify $sketch; - local result=$? - if [ $result -ne 0 ]; then - echo "Build failed ($1)" - return $result - fi - done -} diff --git a/lib/esp-knx-ip-async-udp-0.4.0.15/DPT.h b/lib/esp-knx-ip-0.5.0/DPT.h similarity index 100% rename from lib/esp-knx-ip-async-udp-0.4.0.15/DPT.h rename to lib/esp-knx-ip-0.5.0/DPT.h diff --git a/lib/esp-knx-ip-async-udp-0.4.0.15/LICENSE b/lib/esp-knx-ip-0.5.0/LICENSE similarity index 100% rename from lib/esp-knx-ip-async-udp-0.4.0.15/LICENSE rename to lib/esp-knx-ip-0.5.0/LICENSE diff --git a/lib/esp-knx-ip-async-udp-0.4.0.15/README.md b/lib/esp-knx-ip-0.5.0/README.md similarity index 77% rename from lib/esp-knx-ip-async-udp-0.4.0.15/README.md rename to lib/esp-knx-ip-0.5.0/README.md index b18b50d6b..a93c09192 100644 --- a/lib/esp-knx-ip-async-udp-0.4.0.15/README.md +++ b/lib/esp-knx-ip-0.5.0/README.md @@ -3,19 +3,6 @@ This is a library for the ESP8266 to enable KNXnet/IP communication. It uses UDP multicast on 224.0.23.12:3671. It is intended to be used with the Arduino platform for the ESP8266. -## Prerequisities / Dependencies ## - -* You need version 2.4.0 of the esp8266 board libraries. - * I only tested with lwip v1.4. v2 might work, you need to test yourself. -* You need the [ESPAsyncUDP](https://github.com/me-no-dev/ESPAsyncUDP) library. -* You need a KNXnet/IP **router**. A gateway will **not** work. Alternatively use [knxd](https://github.com/knxd/knxd). - -## Caveats ## - -Receiving packets should work immediately. - -Sending sometimes only works after a substantial amount of time (max 5 minutes in my experiments). In my case, this was fixed by disabling IGMP snooping on the switch(es). - ## How to use ## The library is under development. API may change multiple times in the future. @@ -104,4 +91,4 @@ Simply visit the IP of your ESP with a webbrowser. You can configure the followi * Which group address should trigger which callback * Which group address are to be used by the program (e.g. for status replies) -The configuration is dynamically generated from the code. \ No newline at end of file +The configuration is dynamically generated from the code. diff --git a/lib/esp-knx-ip-async-udp-0.4.0.15/esp-knx-ip-config.cpp b/lib/esp-knx-ip-0.5.0/esp-knx-ip-config.cpp similarity index 100% rename from lib/esp-knx-ip-async-udp-0.4.0.15/esp-knx-ip-config.cpp rename to lib/esp-knx-ip-0.5.0/esp-knx-ip-config.cpp diff --git a/lib/esp-knx-ip-async-udp-0.4.0.15/esp-knx-ip-conversion.cpp b/lib/esp-knx-ip-0.5.0/esp-knx-ip-conversion.cpp similarity index 100% rename from lib/esp-knx-ip-async-udp-0.4.0.15/esp-knx-ip-conversion.cpp rename to lib/esp-knx-ip-0.5.0/esp-knx-ip-conversion.cpp diff --git a/lib/esp-knx-ip-async-udp-0.4.0.15/esp-knx-ip-send.cpp b/lib/esp-knx-ip-0.5.0/esp-knx-ip-send.cpp similarity index 98% rename from lib/esp-knx-ip-async-udp-0.4.0.15/esp-knx-ip-send.cpp rename to lib/esp-knx-ip-0.5.0/esp-knx-ip-send.cpp index 1244fc50a..72459f922 100644 --- a/lib/esp-knx-ip-async-udp-0.4.0.15/esp-knx-ip-send.cpp +++ b/lib/esp-knx-ip-0.5.0/esp-knx-ip-send.cpp @@ -73,7 +73,9 @@ void ESPKNXIP::send(address_t const &receiver, knx_command_type_t ct, uint8_t da DEBUG_PRINTLN(F("")); #endif - udp.writeTo(buf, len, MULTICAST_IP, MULTICAST_PORT); + udp.beginPacketMulticast(MULTICAST_IP, MULTICAST_PORT, WiFi.localIP()); + udp.write(buf, len); + udp.endPacket(); } void ESPKNXIP::send_1bit(address_t const &receiver, knx_command_type_t ct, uint8_t bit) diff --git a/lib/esp-knx-ip-async-udp-0.4.0.15/esp-knx-ip-webserver.cpp b/lib/esp-knx-ip-0.5.0/esp-knx-ip-webserver.cpp similarity index 100% rename from lib/esp-knx-ip-async-udp-0.4.0.15/esp-knx-ip-webserver.cpp rename to lib/esp-knx-ip-0.5.0/esp-knx-ip-webserver.cpp diff --git a/lib/esp-knx-ip-async-udp-0.4.0.15/esp-knx-ip.cpp b/lib/esp-knx-ip-0.5.0/esp-knx-ip.cpp similarity index 98% rename from lib/esp-knx-ip-async-udp-0.4.0.15/esp-knx-ip.cpp rename to lib/esp-knx-ip-0.5.0/esp-knx-ip.cpp index 35b9c5014..b572333b9 100644 --- a/lib/esp-knx-ip-async-udp-0.4.0.15/esp-knx-ip.cpp +++ b/lib/esp-knx-ip-0.5.0/esp-knx-ip.cpp @@ -96,10 +96,7 @@ void ESPKNXIP::__start() server->begin(); } - udp.listenMulticast(MULTICAST_IP, MULTICAST_PORT); - udp.onPacket([this](AsyncUDPPacket &packet) { - DEBUG_PRINTLN("got packet"); - __loop_knx(packet); }); + udp.beginMulticast(WiFi.localIP(), MULTICAST_IP, MULTICAST_PORT); } void ESPKNXIP::save_to_eeprom() @@ -514,6 +511,7 @@ feedback_id_t ESPKNXIP::feedback_register_action(String name, feedback_action_fp void ESPKNXIP::loop() { + __loop_knx(); if (server != nullptr) { __loop_webserver(); @@ -525,9 +523,9 @@ void ESPKNXIP::__loop_webserver() server->handleClient(); } -void ESPKNXIP::__loop_knx(AsyncUDPPacket &packet) +void ESPKNXIP::__loop_knx() { - size_t read = packet.length(); + int read = udp.parsePacket(); if (!read) { return; @@ -536,11 +534,14 @@ void ESPKNXIP::__loop_knx(AsyncUDPPacket &packet) DEBUG_PRINT(F("LEN: ")); DEBUG_PRINTLN(read); - uint8_t *buf = packet.data(); + uint8_t buf[read]; + + udp.read(buf, read); + udp.flush(); DEBUG_PRINT(F("Got packet:")); #ifdef ESP_KNX_DEBUG - for (size_t i = 0; i < read; ++i) + for (int i = 0; i < read; ++i) { DEBUG_PRINT(F(" 0x")); DEBUG_PRINT(buf[i], 16); diff --git a/lib/esp-knx-ip-async-udp-0.4.0.15/esp-knx-ip.h b/lib/esp-knx-ip-0.5.0/esp-knx-ip.h similarity index 99% rename from lib/esp-knx-ip-async-udp-0.4.0.15/esp-knx-ip.h rename to lib/esp-knx-ip-0.5.0/esp-knx-ip.h index 86e02c5e8..538264b3e 100644 --- a/lib/esp-knx-ip-async-udp-0.4.0.15/esp-knx-ip.h +++ b/lib/esp-knx-ip-0.5.0/esp-knx-ip.h @@ -45,7 +45,7 @@ #include "Arduino.h" #include #include -#include +#include #include #include "DPT.h" @@ -509,7 +509,7 @@ class ESPKNXIP { private: void __start(); - void __loop_knx(AsyncUDPPacket &packet); + void __loop_knx(); // Webserver functions void __loop_webserver(); @@ -544,7 +544,7 @@ class ESPKNXIP { ESP8266WebServer *server; address_t physaddr; - AsyncUDP udp; + WiFiUDP udp; callback_assignment_id_t registered_callback_assignments; callback_assignment_id_t free_callback_assignment_slots; diff --git a/lib/esp-knx-ip-async-udp-0.4.0.15/examples/environment-sensor/environment-sensor.ino b/lib/esp-knx-ip-0.5.0/examples/environment-sensor/environment-sensor.ino similarity index 100% rename from lib/esp-knx-ip-async-udp-0.4.0.15/examples/environment-sensor/environment-sensor.ino rename to lib/esp-knx-ip-0.5.0/examples/environment-sensor/environment-sensor.ino diff --git a/lib/esp-knx-ip-async-udp-0.4.0.15/examples/sonoff/sonoff.ino b/lib/esp-knx-ip-0.5.0/examples/sonoff/sonoff.ino similarity index 100% rename from lib/esp-knx-ip-async-udp-0.4.0.15/examples/sonoff/sonoff.ino rename to lib/esp-knx-ip-0.5.0/examples/sonoff/sonoff.ino diff --git a/lib/esp-knx-ip-async-udp-0.4.0.15/examples/static-config/static-config.ino b/lib/esp-knx-ip-0.5.0/examples/static-config/static-config.ino similarity index 100% rename from lib/esp-knx-ip-async-udp-0.4.0.15/examples/static-config/static-config.ino rename to lib/esp-knx-ip-0.5.0/examples/static-config/static-config.ino diff --git a/lib/esp-knx-ip-async-udp-0.4.0.15/keywords.txt b/lib/esp-knx-ip-0.5.0/keywords.txt similarity index 100% rename from lib/esp-knx-ip-async-udp-0.4.0.15/keywords.txt rename to lib/esp-knx-ip-0.5.0/keywords.txt diff --git a/lib/esp-knx-ip-async-udp-0.4.0.15/library.properties b/lib/esp-knx-ip-0.5.0/library.properties similarity index 60% rename from lib/esp-knx-ip-async-udp-0.4.0.15/library.properties rename to lib/esp-knx-ip-0.5.0/library.properties index ff2607bdc..57cad993c 100644 --- a/lib/esp-knx-ip-async-udp-0.4.0.15/library.properties +++ b/lib/esp-knx-ip-0.5.0/library.properties @@ -1,10 +1,10 @@ name=ESP KNX IP Library -version=0.4 +version=0.5 author=Nico Weichbrodt maintainer=Nico Weichbrodt sentence=ESP8266 library for KNX/IP communication. -paragraph=Build your own IoT devices with KNX/IP connectivity! This library depends on the ESPAsyncUDP library. +paragraph=Build your own IoT devices with KNX/IP connectivity! category=Communication url=https://github.com/envy/esp-knx-ip architectures=esp8266 -includes=esp-knx-ip.h \ No newline at end of file +includes=esp-knx-ip.h diff --git a/platformio.ini b/platformio.ini index 87991ad88..c3d38b9a2 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,10 +14,12 @@ src_dir = sonoff ;env_default = sonoff ;env_default = sonoff-minimal ;env_default = sonoff-xxl +;env_default = sonoff-BG ;env_default = sonoff-CZ ;env_default = sonoff-DE ;env_default = sonoff-ES ;env_default = sonoff-FR +;env_default = sonoff-GR ;env_default = sonoff-HU ;env_default = sonoff-IT ;env_default = sonoff-NL @@ -97,6 +99,20 @@ extra_scripts = pio/strip-floats.py ; *** Serial Monitor options monitor_baud = 115200 +[env:sonoff-BG] +;platform = espressif8266@1.5.0 ; v2.3.0 +;platform = espressif8266@1.6.0 ; v2.4.0 +platform = espressif8266 +framework = arduino +board = esp01_1m +board_flash_mode = dout +build_flags = -Wl,-Tesp8266.flash.1m0.ld -DMY_LANGUAGE=bg-BG +;build_flags = -Wl,-Tesp8266.flash.1m0.ld -DMY_LANGUAGE=bg-BG -DUSE_CONFIG_OVERRIDE +extra_scripts = pio/strip-floats.py + +; *** Serial Monitor options +monitor_baud = 115200 + [env:sonoff-DE] ;platform = espressif8266@1.5.0 ; v2.3.0 ;platform = espressif8266@1.6.0 ; v2.4.0 @@ -139,6 +155,20 @@ extra_scripts = pio/strip-floats.py ; *** Serial Monitor options monitor_baud = 115200 +[env:sonoff-GR] +;platform = espressif8266@1.5.0 ; v2.3.0 +;platform = espressif8266@1.6.0 ; v2.4.0 +platform = espressif8266 +framework = arduino +board = esp01_1m +board_flash_mode = dout +build_flags = -Wl,-Tesp8266.flash.1m0.ld -DMY_LANGUAGE=el-GR +;build_flags = -Wl,-Tesp8266.flash.1m0.ld -DMY_LANGUAGE=el-GR -DUSE_CONFIG_OVERRIDE +extra_scripts = pio/strip-floats.py + +; *** Serial Monitor options +monitor_baud = 115200 + [env:sonoff-HU] ;platform = espressif8266@1.5.0 ; v2.3.0 ;platform = espressif8266@1.6.0 ; v2.4.0 diff --git a/sonoff/_releasenotes.ino b/sonoff/_releasenotes.ino index ea8d97155..1c2269538 100644 --- a/sonoff/_releasenotes.ino +++ b/sonoff/_releasenotes.ino @@ -2,6 +2,12 @@ * Reinit timers to accomodate random window (#2447) * Add random window to timers (#2447) * Add optional KNX IP Protocol Support (#2402) + * Add Greek language file (#2491) + * Add Bulgarian language file + * Add support for sensor HC-SR04 ultrasonic (#113, #1964, #2444) + * Add support for Sonoff Pow R2 (#2340) + * Fix compile error when using ESP/Arduino library v2.3.0 by reverting KNX async UDP library to default UDP library (#2488, #2492, #2493) + * Fix configuration filename truncation when it contains spaces (#2484, #2490) * * 5.12.0l * Release rules up to 511 characters diff --git a/sonoff/i18n.h b/sonoff/i18n.h index bee43f02d..fc6a43db4 100644 --- a/sonoff/i18n.h +++ b/sonoff/i18n.h @@ -46,6 +46,7 @@ #define D_JSON_COUNTER "Counter" #define D_JSON_CURRENT "Current" // As in Voltage and Current #define D_JSON_DATA "Data" +#define D_JSON_DISTANCE "Distance" #define D_JSON_DNSSERVER "DNSServer" #define D_JSON_DONE "Done" #define D_JSON_ECO2 "eCO2" @@ -222,12 +223,10 @@ #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_SERIALSEND "SerialSend" #define D_CMND_SERIALDELIMITER "SerialDelimiter" #define D_CMND_BAUDRATE "Baudrate" -#define D_CMND_EXCEPTION "Exception" // Commands xdrv_00_mqtt.ino #define D_CMND_MQTTHOST "MqttHost" diff --git a/sonoff/language/bg-BG.h b/sonoff/language/bg-BG.h new file mode 100644 index 000000000..29391e192 --- /dev/null +++ b/sonoff/language/bg-BG.h @@ -0,0 +1,505 @@ +/* + bg-BG.h - localization for Bulgaria - Bulgarian for Sonoff-Tasmota + + Copyright (C) 2018 Theo Arends + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef _LANGUAGE_BG_BG_H_ +#define _LANGUAGE_BG_BG_H_ + +/*************************** ATTENTION *******************************\ + * + * Due to memory constraints only UTF-8 is supported. + * To save code space keep text as short as possible. + * Time and Date provided by SDK can not be localized (yet). + * Use online command StateText to translate ON, OFF, HOLD and TOGGLE. + * Use online command Prefix to translate cmnd, stat and tele. + * + * Updated until v5.12.0l +\*********************************************************************/ + +//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English) + +// HTML (ISO 639-1) Language Code +#define D_HTML_LANGUAGE "bg" + +// "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 "НедПонВтрСрдЧетПетСъб" +#define D_MONTH3LIST "ЯнуФевМарАпрМайЮниЮлиАвгСепОктНоеДек" + +// Non JSON decimal separator +#define D_DECIMAL_SEPARATOR "," + +// Common +#define D_ADMIN "Admin" +#define D_AIR_QUALITY "Качество на въздуха" +#define D_AP "Точка за достъп" // Access Point +#define D_AS "като" +#define D_AUTO "АВТОМАТИЧНО" +#define D_BLINK "Мигане вкл." +#define D_BLINKOFF "Мигане изкл." +#define D_BOOT_COUNT "Брой на стартиранията" +#define D_BRIGHTLIGHT "Яркост" +#define D_BUTTON "Бутон" +#define D_BY "от" // Written by me +#define D_BYTES "Байт" +#define D_CELSIUS "Целзий" +#define D_CO2 "Въглероден диоксид" +#define D_CODE "код" // Button code +#define D_COLDLIGHT "Хладна" +#define D_COMMAND "Команда" +#define D_CONNECTED "Свързан" +#define D_COUNT "Брой" +#define D_COUNTER "Брояч" +#define D_CURRENT "Ток" // As in Voltage and Current +#define D_DATA "Данни" +#define D_DARKLIGHT "Тъмна" +#define D_DEBUG "Дебъгване" +#define D_DISABLED "Деактивиран" +#define D_DISTANCE "Distance" +#define D_DNS_SERVER "DNS Сървър" +#define D_DONE "Изпълнено" +#define D_DST_TIME "DST" +#define D_ECO2 "eCO2" +#define D_EMULATION "Емулация" +#define D_ENABLED "Активиран" +#define D_ERASE "Изтриване" +#define D_ERROR "Грешка" +#define D_FAHRENHEIT "Фаренхайт" +#define D_FAILED "Неуспешно" +#define D_FALLBACK "Обратна връзка" +#define D_FALLBACK_TOPIC "Топик на обратната връзка" +#define D_FALSE "Невярно" +#define D_FILE "Файл" +#define D_FREE_MEMORY "Свободна памет" +#define D_GAS "Газ" +#define D_GATEWAY "Шлюз" +#define D_GROUP "Група" +#define D_HOST "Хост" +#define D_HOSTNAME "Име на хоста" +#define D_HUMIDITY "Влажност" +#define D_ILLUMINANCE "Осветеност" +#define D_IMMEDIATE "моментален" // Button immediate +#define D_INDEX "Индекс" +#define D_INFO "Информация" +#define D_INITIALIZED "Инициализирано" +#define D_IP_ADDRESS "IP адрес" +#define D_LIGHT "Светлина" +#define D_LWT "LWT" +#define D_MODULE "Модул" +#define D_MQTT "MQTT" +#define D_MULTI_PRESS "многократно натискане" +#define D_NOISE "Шум" +#define D_NONE "Няма" +#define D_OFF "Изкл." +#define D_OFFLINE "Офлайн" +#define D_OK "Ок" +#define D_ON "Вкл." +#define D_ONLINE "Онлайн" +#define D_PASSWORD "Парола" +#define D_PORT "Порт" +#define D_POWER_FACTOR "Фактор на мощността" +#define D_POWERUSAGE "Мощност" +#define D_PRESSURE "Налягане" +#define D_PRESSUREATSEALEVEL "Налягане на морското ниво" +#define D_PROGRAM_FLASH_SIZE "Размер на флаш паметта за програми" +#define D_PROGRAM_SIZE "Размер на програмата" +#define D_PROJECT "Проект" +#define D_RECEIVED "Получено" +#define D_RESTART "Рестарт" +#define D_RESTARTING "Рестартиране" +#define D_RESTART_REASON "Причина за рестарта" +#define D_RESTORE "възстановяване" +#define D_RETAINED "запазено" +#define D_RULE "Правило" +#define D_SAVE "Запис" +#define D_SENSOR "Датчик" +#define D_SSID "SSId" +#define D_START "Старт" +#define D_STD_TIME "STD" +#define D_STOP "Стоп" +#define D_SUBNET_MASK "Маска на подмрежата" +#define D_SUBSCRIBE_TO "Записване за" +#define D_SUCCESSFUL "Успешно" +#define D_SUNRISE "Изгрев" +#define D_SUNSET "Залез" +#define D_TEMPERATURE "Температура" +#define D_TO "към" +#define D_TOGGLE "Превключване" +#define D_TOPIC "Топик" +#define D_TRANSMIT "Предаване" +#define D_TRUE "Вярно" +#define D_TVOC "TVOC" +#define D_UPGRADE "Обновяване" +#define D_UPLOAD "Зареждане" +#define D_UPTIME "Време от стартирането" +#define D_USER "Потребител" +#define D_UTC_TIME "UTC" +#define D_UV_LEVEL "Ниво на ултравиолетово излъчване" +#define D_VERSION "Версия" +#define D_VOLTAGE "Напрежение" +#define D_WARMLIGHT "Топла" +#define D_WEB_SERVER "Уеб сървър" + +// sonoff.ino +#define D_WARNING_MINIMAL_VERSION "ПРЕДУПРЕЖДЕНИЕ Тази версия не поддържа постоянни настройки" +#define D_LEVEL_10 "ниво 1-0" +#define D_LEVEL_01 "ниво 0-1" +#define D_SERIAL_LOGGING_DISABLED "Серийния логинг изключен" +#define D_SYSLOG_LOGGING_REENABLED "Системния логинг активиран" + +#define D_SET_BAUDRATE_TO "Задаване скорост на предаване (Baudrate)" +#define D_RECEIVED_TOPIC "Получен топик" +#define D_DATA_SIZE "Размер на данните" +#define D_ANALOG_INPUT "Аналогов вход" + +// support.ino +#define D_OSWATCH "osWatch" +#define D_BLOCKED_LOOP "Блокиран цикъл" +#define D_WPS_FAILED_WITH_STATUS "WPS конфигурацията е НЕУСПЕШНА със статус" +#define D_ACTIVE_FOR_3_MINUTES "активно в течение на 3 минути" +#define D_FAILED_TO_START "неуспешно стартиране" +#define D_PATCH_ISSUE_2186 "Проблем с патч 2186" +#define D_CONNECTING_TO_AP "Свързване към точка за достъп" +#define D_IN_MODE "в режим" +#define D_CONNECT_FAILED_NO_IP_ADDRESS "Грешка при свързването, не е получен IP адрес" +#define D_CONNECT_FAILED_AP_NOT_REACHED "Грешка при свързването, точката за достъп е недостижима" +#define D_CONNECT_FAILED_WRONG_PASSWORD "Грешка при свързването, грешна парола към точката за достъп" +#define D_CONNECT_FAILED_AP_TIMEOUT "Грешка при свързването, превишено време за изчакване" +#define D_ATTEMPTING_CONNECTION "Опитва свързване..." +#define D_CHECKING_CONNECTION "Проверка на свързването..." +#define D_QUERY_DONE "Запитването е изпълнено. Намерена е услуга MQTT" +#define D_MQTT_SERVICE_FOUND "MQTT услуга е намерена на" +#define D_FOUND_AT "намерена в" +#define D_SYSLOG_HOST_NOT_FOUND "Хостът на системния лог не е намерен" + +// settings.ino +#define D_SAVED_TO_FLASH_AT "Запазено в флаш паметта на" +#define D_LOADED_FROM_FLASH_AT "Заредено от флаш паметта от" +#define D_USE_DEFAULTS "Използване на параметри по подразбиране" +#define D_ERASED_SECTOR "Изтрит сектор" + +// webserver.ino +#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Фърмуеър MINIMAL - моля надградете го" +#define D_WEBSERVER_ACTIVE_ON "Уеб сървърът е активен на" +#define D_WITH_IP_ADDRESS "с IP адрес" +#define D_WEBSERVER_STOPPED "Уеб сървърът е спрян" +#define D_FILE_NOT_FOUND "Файлът не е намерен" +#define D_REDIRECTED "Пренасочено към адаптивния портал" +#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi мениджърът настройва точка за достъп и запомня станцията" +#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi мениджърът настрои точката за достъп" +#define D_TRYING_TO_CONNECT "Опит за свързване на устройството към мрежата" + +#define D_RESTART_IN "Рестарт след" +#define D_SECONDS "секунди" +#define D_DEVICE_WILL_RESTART "Устройството ще се рестартира след няколко секунди" +#define D_BUTTON_TOGGLE "Превключване" +#define D_CONFIGURATION "Конфигурация" +#define D_INFORMATION "Информация" +#define D_FIRMWARE_UPGRADE "Обновяване на фърмуеъра" +#define D_CONSOLE "Конзола" +#define D_CONFIRM_RESTART "Подтвърдете рестартирането" + +#define D_CONFIGURE_MODULE "Конфигурация на модула" +#define D_CONFIGURE_WIFI "Конфигурация на WiFi" +#define D_CONFIGURE_MQTT "Конфигурация на MQTT" +#define D_CONFIGURE_DOMOTICZ "Конфигурация на Domoticz" +#define D_CONFIGURE_LOGGING "Конфигурация на логинга" +#define D_CONFIGURE_OTHER "Конфигурация на други" +#define D_CONFIRM_RESET_CONFIGURATION "Потвърдете ресетирането" +#define D_RESET_CONFIGURATION "Ресетиране на конфигурацията" +#define D_BACKUP_CONFIGURATION "Запазване на конфигурацията" +#define D_RESTORE_CONFIGURATION "Възстановяване на конфигурацията" +#define D_MAIN_MENU "Основно Меню" + +#define D_MODULE_PARAMETERS "Параметри на модула" +#define D_MODULE_TYPE "Тип на модула" +#define D_GPIO "GPIO" +#define D_SERIAL_IN "Сериен вход" +#define D_SERIAL_OUT "Сериен изход" + +#define D_WIFI_PARAMETERS "Параметры на Wifi" +#define D_SCAN_FOR_WIFI_NETWORKS "Сканиране за безжични мрежи Wifi" +#define D_SCAN_DONE "Сканированието е завършено" +#define D_NO_NETWORKS_FOUND "Не са намерени мрежи" +#define D_REFRESH_TO_SCAN_AGAIN "Обновяване за повторно сканиране" +#define D_DUPLICATE_ACCESSPOINT "Дублиране на точката за достъп (AP)" +#define D_SKIPPING_LOW_QUALITY "Пропускане поради лошо качество" +#define D_RSSI "RSSI" +#define D_WEP "WEP" +#define D_WPA_PSK "WPA PSK" +#define D_WPA2_PSK "WPA2 PSK" +#define D_AP1_SSID "AP1 SSId" +#define D_AP1_PASSWORD "AP1 Парола" +#define D_AP2_SSID "AP2 SSId" +#define D_AP2_PASSWORD "AP2 Парола" + +#define D_MQTT_PARAMETERS "Параметри на MQTT" +#define D_CLIENT "Клиент" +#define D_FULL_TOPIC "Пълен топик" + +#define D_LOGGING_PARAMETERS "Параметри на логинга" +#define D_SERIAL_LOG_LEVEL "Степен на серийния лог" +#define D_WEB_LOG_LEVEL "Степен на Уеб лога" +#define D_SYS_LOG_LEVEL "Степен на системния лог" +#define D_MORE_DEBUG "Още дебъгване" +#define D_SYSLOG_HOST "Хост на системния лог" +#define D_SYSLOG_PORT "Порт на системния лог" +#define D_TELEMETRY_PERIOD "Период на телеметрия" + +#define D_OTHER_PARAMETERS "Други параметри" +#define D_WEB_ADMIN_PASSWORD "Парола на уеб администратора" +#define D_MQTT_ENABLE "активиране на MQTT" +#define D_FRIENDLY_NAME "приятелско име" +#define D_BELKIN_WEMO "Belkin WeMo" +#define D_HUE_BRIDGE "Hue Bridge" +#define D_SINGLE_DEVICE "единично" +#define D_MULTI_DEVICE "мулти" + +#define D_SAVE_CONFIGURATION "Запазване на конфигурацията" +#define D_CONFIGURATION_SAVED "Конфигурацията е запазена" +#define D_CONFIGURATION_RESET "Конфигурацията е изчистена" + +#define D_PROGRAM_VERSION "Версия на програмата" +#define D_BUILD_DATE_AND_TIME "Дата & Час на компилацията" +#define D_CORE_AND_SDK_VERSION "Версия на Core/SDK" +#define D_FLASH_WRITE_COUNT "Брой на записите във Flash" +#define D_MAC_ADDRESS "MAC адрес" +#define D_MQTT_HOST "MQTT хост" +#define D_MQTT_PORT "MQTT порт" +#define D_MQTT_CLIENT "MQTT ID на клиент" +#define D_MQTT_USER "MQTT потребител" +#define D_MQTT_TOPIC "MQTT топик" +#define D_MQTT_GROUP_TOPIC "MQTT групов топик" +#define D_MQTT_FULL_TOPIC "MQTT пълен топик" +#define D_MDNS_DISCOVERY "mDNS откриване" +#define D_MDNS_ADVERTISE "mDNS транслация" +#define D_ESP_CHIP_ID "ID на чипа ESP" +#define D_FLASH_CHIP_ID "ID на чипа на флаш паметта" +#define D_FLASH_CHIP_SIZE "Размер на флаш паметта" +#define D_FREE_PROGRAM_SPACE "Свободно пространство за програми" + +#define D_UPGRADE_BY_WEBSERVER "Обновяване чрез уеб сървър" +#define D_OTA_URL "OTA Url" +#define D_START_UPGRADE "Започване на обновяване" +#define D_UPGRADE_BY_FILE_UPLOAD "Обновяване чрез зареждане на файл" +#define D_UPLOAD_STARTED "Зареждането започна" +#define D_UPGRADE_STARTED "Обновяването започна" +#define D_UPLOAD_DONE "Зареждането завърши" +#define D_UPLOAD_ERR_1 "Не е избран файл" +#define D_UPLOAD_ERR_2 "Недостатъчно свободно място" +#define D_UPLOAD_ERR_3 "Magic байтът не е 0xE9" +#define D_UPLOAD_ERR_4 "Размерът на програмата е по-голям от реалния размер на флаш паметта" +#define D_UPLOAD_ERR_5 "Грешка при зареждането в буфера" +#define D_UPLOAD_ERR_6 "Грешка пр зареждането. Включено е ниво 3 на лога" +#define D_UPLOAD_ERR_7 "Зареждането е прекъснато" +#define D_UPLOAD_ERR_8 "Файлът е невалиден" +#define D_UPLOAD_ERR_9 "Файлът е прекалено голям" +#define D_UPLOAD_ERROR_CODE "Код на грешка при зареждането" + +#define D_ENTER_COMMAND "Въвеждане на команда" +#define D_ENABLE_WEBLOG_FOR_RESPONSE "Включете ниво 2 на лога, ако очаквате отговор" +#define D_NEED_USER_AND_PASSWORD "Очаква user=&password=" + +// xdrv_00_mqtt.ino +#define D_FINGERPRINT "Проверка на TLS отпечатък..." +#define D_TLS_CONNECT_FAILED_TO "Неуспешно TLS свързване към" +#define D_RETRY_IN "Повторно след" +#define D_VERIFIED "Проверен отпечтък" +#define D_INSECURE "Нешифрована връзка, недействителен отпечатък" +#define D_CONNECT_FAILED_TO "Грешка при свързването към" + +// xdrv_wemohue.ino +#define D_MULTICAST_DISABLED "Multicast е изключен" +#define D_MULTICAST_REJOINED "Multicast е повторно съединен" +#define D_MULTICAST_JOIN_FAILED "Multicast грешка при присъединяването" +#define D_FAILED_TO_SEND_RESPONSE "Не се получи изпращането на отговор" + +#define D_WEMO "WeMo" +#define D_WEMO_BASIC_EVENT "WeMo главно събитие" +#define D_WEMO_EVENT_SERVICE "WeMo услуга за събитията" +#define D_WEMO_META_SERVICE "WeMo мета-услуга" +#define D_WEMO_SETUP "WeMo настройка" +#define D_RESPONSE_SENT "Отговорът е изпратен" + +#define D_HUE "Hue" +#define D_HUE_BRIDGE_SETUP "Hue мост настройка" +#define D_HUE_API_NOT_IMPLEMENTED "Hue API не е внедрено" +#define D_HUE_API "Hue API" +#define D_HUE_POST_ARGS "Hue POST аргументи" +#define D_3_RESPONSE_PACKETS_SENT "Изпратени са 3 пакета за отговор" + +// xdrv_05_domoticz.ino +#define D_DOMOTICZ_PARAMETERS "Domoticz параметри" +#define D_DOMOTICZ_IDX "Idx" +#define D_DOMOTICZ_KEY_IDX "Key idx" +#define D_DOMOTICZ_SWITCH_IDX "Switch idx" +#define D_DOMOTICZ_SENSOR_IDX "Sensor idx" + #define D_DOMOTICZ_TEMP "Temp" + #define D_DOMOTICZ_TEMP_HUM "Temp,Hum" + #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro" + #define D_DOMOTICZ_POWER_ENERGY "Power,Energy" + #define D_DOMOTICZ_ILLUMINANCE "Illuminance" + #define D_DOMOTICZ_COUNT "Count/PM1" + #define D_DOMOTICZ_VOLTAGE "Voltage/PM2,5" + #define D_DOMOTICZ_CURRENT "Current/PM10" + #define D_DOMOTICZ_AIRQUALITY "AirQuality" +#define D_DOMOTICZ_UPDATE_TIMER "Update timer" + +// xdrv_09_timers.ino +#define D_CONFIGURE_TIMER "Конфигуриране на таймер" +#define D_TIMER_PARAMETERS "Параметри на таймера" +#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" + +// 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_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." + +// xdrv_03_energy.ino +#define D_ENERGY_TODAY "Използвана енергия днес" +#define D_ENERGY_YESTERDAY "Използвана енергия вчера" +#define D_ENERGY_TOTAL "Използвана енергия общо" + +// xsns_05_ds18b20.ino +#define D_SENSOR_BUSY "Датчикът DS18x20 е зает" +#define D_SENSOR_CRC_ERROR "Датчик DS18x20 - грешка CRC" +#define D_SENSORS_FOUND "Намерен е датчик DS18x20" + +// xsns_06_dht.ino +#define D_TIMEOUT_WAITING_FOR "Изтекло време за очакване на" +#define D_START_SIGNAL_LOW "стартов сигнал нисък" +#define D_START_SIGNAL_HIGH "стартов сигнал висок" +#define D_PULSE "импулс" +#define D_CHECKSUM_FAILURE "Грешка в контролната сума" + +// xsns_07_sht1x.ino +#define D_SENSOR_DID_NOT_ACK_COMMAND "Датчикът не прие команда ACK" +#define D_SHT1X_FOUND "Намерен е SHT1X" + +// xsns_18_pms5003.ino +#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter +#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter +#define D_PARTICALS_BEYOND "Particals" + +// sonoff_template.h +#define D_SENSOR_NONE "няма" +#define D_SENSOR_DHT11 "DHT11" +#define D_SENSOR_AM2301 "AM2301" +#define D_SENSOR_SI7021 "SI7021" +#define D_SENSOR_DS18X20 "DS18x20" +#define D_SENSOR_I2C_SCL "I2C SCL" +#define D_SENSOR_I2C_SDA "I2C SDA" +#define D_SENSOR_WS2812 "WS2812" +#define D_SENSOR_IRSEND "IRsend" +#define D_SENSOR_SWITCH "Ключ" // Suffix "1" +#define D_SENSOR_BUTTON "Бутон" // Suffix "1" +#define D_SENSOR_RELAY "Реле" // Suffix "1i" +#define D_SENSOR_LED "Led" // Suffix "1i" +#define D_SENSOR_PWM "PWM" // Suffix "1" +#define D_SENSOR_COUNTER "Брояч" // Suffix "1" +#define D_SENSOR_IRRECV "IRrecv" +#define D_SENSOR_MHZ_RX "MHZ Rx" +#define D_SENSOR_MHZ_TX "MHZ Tx" +#define D_SENSOR_PZEM_RX "PZEM Rx" +#define D_SENSOR_PZEM_TX "PZEM Tx" +#define D_SENSOR_SAIR_RX "SAir Rx" +#define D_SENSOR_SAIR_TX "SAir Tx" +#define D_SENSOR_SPI_CS "SPI CS" +#define D_SENSOR_SPI_DC "SPI DC" +#define D_SENSOR_BACKLIGHT "BkLight" +#define D_SENSOR_PMS5003 "PMS5003" +#define D_SENSOR_SDS0X1 "SDS0X1" +#define D_SENSOR_SBR_RX "SerBr Rx" +#define D_SENSOR_SBR_TX "SerBr Tx" +#define D_SENSOR_SR04_TRIG "SR04 Tri" +#define D_SENSOR_SR04_ECHO "SR04 Ech" + +// Units +#define D_UNIT_AMPERE "А" +#define D_UNIT_CENTIMETER "cm" +#define D_UNIT_HOUR "Ч" +#define D_UNIT_KILOOHM "кОм" +#define D_UNIT_KILOWATTHOUR "кВт" +#define D_UNIT_LUX "лукс" +#define D_UNIT_MICROGRAM_PER_CUBIC_METER "микрограм/м3" +#define D_UNIT_MICROMETER "микрметър" +#define D_UNIT_MICROSECOND "микросек." +#define D_UNIT_MILLIAMPERE "мА" +#define D_UNIT_MILLISECOND "милисек." +#define D_UNIT_MINUTE "мин." +#define D_UNIT_PARTS_PER_BILLION "ppb" +#define D_UNIT_PARTS_PER_DECILITER "ppd" +#define D_UNIT_PARTS_PER_MILLION "ppm" +#define D_UNIT_PRESSURE "Хектопаскал" +#define D_UNIT_SECOND "сек." +#define D_UNIT_SECTORS "сектори" +#define D_UNIT_VOLT "В" +#define D_UNIT_WATT "Вт" +#define D_UNIT_WATTHOUR "Вт/Час" + +// Log message prefix +#define D_LOG_APPLICATION "APP: " // Application +#define D_LOG_BRIDGE "BRG: " // Bridge +#define D_LOG_CONFIG "CFG: " // Settings +#define D_LOG_COMMAND "CMD: " // Command +#define D_LOG_DEBUG "DBG: " // Debug +#define D_LOG_DHT "DHT: " // DHT sensor +#define D_LOG_DOMOTICZ "DOM: " // Domoticz +#define D_LOG_DSB "DSB: " // DS18xB20 sensor +#define D_LOG_HTTP "HTP: " // HTTP webserver +#define D_LOG_I2C "I2C: " // I2C +#define D_LOG_IRR "IRR: " // Infra Red Received +#define D_LOG_LOG "LOG: " // Logging +#define D_LOG_MODULE "MOD: " // Module +#define D_LOG_MDNS "DNS: " // mDNS +#define D_LOG_MQTT "MQT: " // MQTT +#define D_LOG_OTHER "OTH: " // Other +#define D_LOG_RESULT "RSL: " // Result +#define D_LOG_RFR "RFR: " // RF Received +#define D_LOG_SERIAL "SER: " // Serial +#define D_LOG_SHT1 "SHT: " // SHT1x sensor +#define D_LOG_UPLOAD "UPL: " // Upload +#define D_LOG_UPNP "UPP: " // UPnP +#define D_LOG_WIFI "WIF: " // Wifi + +#endif // _LANGUAGE_BG_BG_H_ diff --git a/sonoff/language/cs-CZ.h b/sonoff/language/cs-CZ.h index e5ad4bee3..fa641216d 100644 --- a/sonoff/language/cs-CZ.h +++ b/sonoff/language/cs-CZ.h @@ -1,7 +1,7 @@ /* cs-CZ.h - localization for Czech with diacritics - Czech for Sonoff-Tasmota - Copyright (C) 2018 Theo Arends (translated by vs) + Copyright (C) 2018 Vladimír Synekl 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 @@ -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 v5.12.0k + * Updated until v5.12.0m \*********************************************************************/ //#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English) @@ -57,7 +57,7 @@ #define D_AUTO "AUTO" #define D_BLINK "Blikání" #define D_BLINKOFF "BlikáníVyp" -#define D_BOOT_COUNT "Počitadlo spuštění" +#define D_BOOT_COUNT "Počítadlo spuštění" #define D_BRIGHTLIGHT "Světlý" #define D_BUTTON "Tlačítko" #define D_BY "by" // Written by me @@ -69,12 +69,13 @@ #define D_COMMAND "Příkaz" #define D_CONNECTED "...připojeno" #define D_COUNT "Počítej" -#define D_COUNTER "Počitadlo" +#define D_COUNTER "Počítadlo" #define D_CURRENT "Proud" // As in Voltage and Current #define D_DATA "Data" #define D_DARKLIGHT "Tmavý" #define D_DEBUG "Debug" #define D_DISABLED "Zablokováno" +#define D_DISTANCE "Distance" #define D_DNS_SERVER "Server DNS" #define D_DONE "Provedeno" #define D_DST_TIME "DST" @@ -116,7 +117,7 @@ #define D_ONLINE "Aktivní" #define D_PASSWORD "Heslo" #define D_PORT "Port" -#define D_POWER_FACTOR "Součinitel příkonu" +#define D_POWER_FACTOR "Účiník" #define D_POWERUSAGE "Příkon" #define D_PRESSURE "Tlak" #define D_PRESSUREATSEALEVEL "Tlak na úrovni hladiny moře" @@ -375,24 +376,24 @@ #define D_TIMER_ACTION "Napájení" // 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 "Nastavení KNX" +#define D_KNX_PARAMETERS "KNX parametry" +#define D_KNX_GENERAL_CONFIG "Obecné" +#define D_KNX_PHYSICAL_ADDRESS "Fyzická adresa" +#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Musí být jedinečná v síti KNX )" +#define D_KNX_ENABLE "Povol KNX" +#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data k odeslání na skupinové adresy" +#define D_ADD "Přidej" +#define D_DELETE "Smaž" +#define D_REPLY "Odpověď" +#define D_KNX_GROUP_ADDRESS_TO_READ "Skupinové adresy pro příjem dat z" #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_RECEIVED_FROM "Přijato z" +#define D_KNX_COMMAND_WRITE "Zapiš" +#define D_KNX_COMMAND_READ "Čti" +#define D_KNX_COMMAND_OTHER "Jiné" +#define D_SENT_TO "pošli" +#define D_KNX_WARNING "Skupinová adresa ( 0 / 0 / 0 ) je rezervována a nemůže být použita." // xdrv_03_energy.ino #define D_ENERGY_TODAY "Spotřeba Dnes" @@ -435,7 +436,7 @@ #define D_SENSOR_RELAY "Relé" // Suffix "1i" #define D_SENSOR_LED "Led" // Suffix "1i" #define D_SENSOR_PWM "PWM" // Suffix "1", -#define D_SENSOR_COUNTER "Počitadlo" // Suffix "1" +#define D_SENSOR_COUNTER "Počítadlo" // Suffix "1" #define D_SENSOR_IRRECV "IRrecv" #define D_SENSOR_MHZ_RX "MHZ Rx" #define D_SENSOR_MHZ_TX "MHZ Tx" @@ -450,9 +451,12 @@ #define D_SENSOR_SDS0X1 "SDS0X1" #define D_SENSOR_SBR_RX "SerBr Rx" #define D_SENSOR_SBR_TX "SerBr Tx" +#define D_SENSOR_SR04_TRIG "SR04 Tri" +#define D_SENSOR_SR04_ECHO "SR04 Ech" // Units #define D_UNIT_AMPERE "A" +#define D_UNIT_CENTIMETER "cm" #define D_UNIT_HOUR "hod" #define D_UNIT_KILOOHM "kOhm" #define D_UNIT_KILOWATTHOUR "kWh" diff --git a/sonoff/language/de-DE.h b/sonoff/language/de-DE.h index 2617e8e1b..b2ade5e2b 100644 --- a/sonoff/language/de-DE.h +++ b/sonoff/language/de-DE.h @@ -75,6 +75,7 @@ #define D_DARKLIGHT "dunkel" #define D_DEBUG "debug" #define D_DISABLED "deaktiviert" +#define D_DISTANCE "Abstand" #define D_DNS_SERVER "DNS-Server" #define D_DONE "erledigt" #define D_DST_TIME "DST" @@ -450,9 +451,12 @@ #define D_SENSOR_SDS0X1 "SDS0X1" #define D_SENSOR_SBR_RX "SerBr Rx" #define D_SENSOR_SBR_TX "SerBr Tx" +#define D_SENSOR_SR04_TRIG "SR04 Tri" +#define D_SENSOR_SR04_ECHO "SR04 Ech" // Units #define D_UNIT_AMPERE "A" +#define D_UNIT_CENTIMETER "cm" #define D_UNIT_HOUR "h" #define D_UNIT_KILOOHM "kOhm" #define D_UNIT_KILOWATTHOUR "kWh" diff --git a/sonoff/language/el-GR.h b/sonoff/language/el-GR.h new file mode 100644 index 000000000..7eff7094a --- /dev/null +++ b/sonoff/language/el-GR.h @@ -0,0 +1,505 @@ +/* + el-GR.h - localization for Greek - Greece for Sonoff-Tasmota + + Copyright (C) 2018 Harry Kandiloros + + 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 . +*/ + +#ifndef _LANGUAGE_EL_GR_H_ +#define _LANGUAGE_EL_GR_H_ + +/*************************** ATTENTION *******************************\ + * + * Due to memory constraints only UTF-8 is supported. + * To save code space keep text as short as possible. + * Time and Date provided by SDK can not be localized (yet). + * Use online command StateText to translate ON, OFF, HOLD and TOGGLE. + * Use online command Prefix to translate cmnd, stat and tele. + * + * Updated until v5.12.0m +\*********************************************************************/ + +//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English) + +// HTML (ISO 639-1) Language Code +#define D_HTML_LANGUAGE "el" + +// "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 "ΚυρΔευΤριΤετΠεμΠαρΣαβ" +#define D_MONTH3LIST "ΙανΦεβΜαρΑπρΜαϊΙονΙολΑυγΣεπΟκτΝοεΔεκ" + +// Non JSON decimal separator +#define D_DECIMAL_SEPARATOR "," + +// Common +#define D_ADMIN "Admin" +#define D_AIR_QUALITY "Ποιότητα Αέρα" +#define D_AP "AP" // Access Point +#define D_AS "as" +#define D_AUTO "ΑΥΤΟΜΑΤΟ" +#define D_BLINK "Αναβοσβήνει" +#define D_BLINKOFF "Δεν αναβοσβήνει" +#define D_BOOT_COUNT "Αριθμός εκκινήσεων" +#define D_BRIGHTLIGHT "Λαμπερό" +#define D_BUTTON "Κουμπί" +#define D_BY "από" // Written by me +#define D_BYTES "Bytes" +#define D_CELSIUS "Κελσίου" +#define D_CO2 "Διοξείδιο του άνθρακα" +#define D_CODE "κώδικας" // Button code +#define D_COLDLIGHT "Ψυχρός" +#define D_COMMAND "Εντολή" +#define D_CONNECTED "Συνδεδεμένο" +#define D_COUNT "Μέτρημα" +#define D_COUNTER "Μετρητής" +#define D_CURRENT "Τάση ρεύματος" // As in Voltage and Current +#define D_DATA "Δεδομένα" +#define D_DARKLIGHT "Σκούρο" +#define D_DEBUG "Debug" +#define D_DISABLED "Απενεργοποιημένο" +#define D_DISTANCE "Distance" +#define D_DNS_SERVER "Διακομιστής DNS" +#define D_DONE "Εγινε" +#define D_DST_TIME "DST" +#define D_ECO2 "eCO2" +#define D_EMULATION "Emulation" +#define D_ENABLED "Ενεργό" +#define D_ERASE "Σβήσιμο" +#define D_ERROR "Σφάλμα" +#define D_FAHRENHEIT "Φαρενάιτ" +#define D_FAILED "Αποτυχία" +#define D_FALLBACK "Εφεδρικό" +#define D_FALLBACK_TOPIC "Εφεδρικό θέμα" +#define D_FALSE "Λάθος" +#define D_FILE "Αρχείο" +#define D_FREE_MEMORY "Ελεύθερη Μνήμη" +#define D_GAS "Γκάζι" +#define D_GATEWAY "Πύλη" +#define D_GROUP "Ομάδα" +#define D_HOST "Host" +#define D_HOSTNAME "Hostname" +#define D_HUMIDITY "Υγρασία" +#define D_ILLUMINANCE "Illuminance" +#define D_IMMEDIATE "Φωτεινότητα" // Button immediate +#define D_INDEX "Κατάλογος" +#define D_INFO "Πληροφορίες" +#define D_INITIALIZED "Αρχικό" +#define D_IP_ADDRESS "IP Address" +#define D_LIGHT "Light" +#define D_LWT "LWT" +#define D_MODULE "Module" +#define D_MQTT "MQTT" +#define D_MULTI_PRESS "πολλαπλή πίεση" +#define D_NOISE "θόρυβος" +#define D_NONE "Κανένα" +#define D_OFF "Κλειστό" +#define D_OFFLINE "Offline" +#define D_OK "Ok" +#define D_ON "Ανοιχτό" +#define D_ONLINE "Online" +#define D_PASSWORD "ΚωδικόςPassword" +#define D_PORT "Πόρτα" +#define D_POWER_FACTOR "Παράγοντας ισχύος" +#define D_POWERUSAGE "Ισχύης" +#define D_PRESSURE "Πίεση" +#define D_PRESSUREATSEALEVEL "Πίεση στην επιφάνεια της Θάλασσας" +#define D_PROGRAM_FLASH_SIZE "Μέγεθος Προγράμματος Flash" +#define D_PROGRAM_SIZE "Μέγεθος Προγράμματος" +#define D_PROJECT "Έργο" +#define D_RECEIVED "Λήψη" +#define D_RESTART "Επανεκκίνηση" +#define D_RESTARTING "Επανεκκίνηση" +#define D_RESTART_REASON "Λόγος Επανεκκίνησης" +#define D_RESTORE "επαναφορά" +#define D_RETAINED "διατηρούνται" +#define D_RULE "Κανόνας" +#define D_SAVE "Αποθήκευση" +#define D_SENSOR "Σένσορας" +#define D_SSID "SSId" +#define D_START "Έναρξη" +#define D_STD_TIME "STD" +#define D_STOP "Στοπ" +#define D_SUBNET_MASK "Μάσκα υποδικτύου" +#define D_SUBSCRIBE_TO "Εγγραφή στο" +#define D_SUCCESSFUL "Επιτυχής" +#define D_SUNRISE "Σούρουπο" +#define D_SUNSET "Ηλιοβασίλεμα" +#define D_TEMPERATURE "Θερμοκρασία" +#define D_TO "στο" +#define D_TOGGLE "Εναλλαγή" +#define D_TOPIC "Θέμα" +#define D_TRANSMIT "Μετάδοση" +#define D_TRUE "Σωστό" +#define D_TVOC "TVOC" +#define D_UPGRADE "αναβάθμιση" +#define D_UPLOAD "Ανέβασμα" +#define D_UPTIME "Uptime" +#define D_USER "Χρήστης" +#define D_UTC_TIME "UTC" +#define D_UV_LEVEL "Επίπεδο UV" +#define D_VERSION "Έκδοση" +#define D_VOLTAGE "Τάση" +#define D_WARMLIGHT "Ζεστό" +#define D_WEB_SERVER "Web διακομιστής" + +// sonoff.ino +#define D_WARNING_MINIMAL_VERSION "ΠΡΟΕΙΔΟΠΟΙΗΣΗ Αυτή η έκδοση δεν αποθηκεύει τις ρυθμίσεις" +#define D_LEVEL_10 "επίπεδο 1-0" +#define D_LEVEL_01 "επίπεδο 0-1" +#define D_SERIAL_LOGGING_DISABLED "Η σειριακής καταγραφή απενεργοποιήθηκε" +#define D_SYSLOG_LOGGING_REENABLED "Η καταγραφή Syslog είναι ενεργοποιημένη" + +#define D_SET_BAUDRATE_TO "Ρύθμιση Baudrate σε" +#define D_RECEIVED_TOPIC "Λήψη θεμάτων" +#define D_DATA_SIZE "Μέγεθος δεδομένων" +#define D_ANALOG_INPUT "Αναλογικό" + +// support.ino +#define D_OSWATCH "osWatch" +#define D_BLOCKED_LOOP "Blocked Loop" +#define D_WPS_FAILED_WITH_STATUS "WPSconfig FAILED with status" +#define D_ACTIVE_FOR_3_MINUTES "active for 3 minutes" +#define D_FAILED_TO_START "failed to start" +#define D_PATCH_ISSUE_2186 "Patch issue 2186" +#define D_CONNECTING_TO_AP "Connecting to AP" +#define D_IN_MODE "in mode" +#define D_CONNECT_FAILED_NO_IP_ADDRESS "Connect failed as no IP address received" +#define D_CONNECT_FAILED_AP_NOT_REACHED "Connect failed as AP cannot be reached" +#define D_CONNECT_FAILED_WRONG_PASSWORD "Connect failed with AP incorrect password" +#define D_CONNECT_FAILED_AP_TIMEOUT "Connect failed with AP timeout" +#define D_ATTEMPTING_CONNECTION "Attempting connection..." +#define D_CHECKING_CONNECTION "Checking connection..." +#define D_QUERY_DONE "Query done. MQTT services found" +#define D_MQTT_SERVICE_FOUND "MQTT service found on" +#define D_FOUND_AT "found at" +#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host not found" + +// settings.ino +#define D_SAVED_TO_FLASH_AT "Εγινε flash στην θέση" +#define D_LOADED_FROM_FLASH_AT "Φορτώθηκε από την flash στην θέση" +#define D_USE_DEFAULTS "Χρήση προεπιλογών" +#define D_ERASED_SECTOR "Διαγραμμένος τομέας" + +// webserver.ino +#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware - παρακαλώ αναβαθμήστε" +#define D_WEBSERVER_ACTIVE_ON "Web διακομιστής ενεργός" +#define D_WITH_IP_ADDRESS "με διεύθυνση IP" +#define D_WEBSERVER_STOPPED "Web διακομιστής σταμάτησε" +#define D_FILE_NOT_FOUND "Το αρχείο δεν βρέθηκε" +#define D_REDIRECTED "Ανακατεύθυνση σε captive portal" +#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station" +#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager set AccessPoint" +#define D_TRYING_TO_CONNECT "Προσπάθεια σύνδεσης της συσκευής στο δίκτυο" + +#define D_RESTART_IN "Επανεκκίνηση σε" +#define D_SECONDS "δευτερόλεπτα" +#define D_DEVICE_WILL_RESTART "Η συσκευή θα ξεκινήσει ξανά σε λίγα δευτερόλεπτα" +#define D_BUTTON_TOGGLE "Εναλλαγή" +#define D_CONFIGURATION "Ρύθμιση" +#define D_INFORMATION "Πληροφορίες" +#define D_FIRMWARE_UPGRADE "Αναβάθμιση Firmware" +#define D_CONSOLE "Κονσόλα" +#define D_CONFIRM_RESTART "Επιβεβαίωση Επανεκκίνησης" + +#define D_CONFIGURE_MODULE "Ρύθμιση Module" +#define D_CONFIGURE_WIFI "Ρύθμιση WiFi" +#define D_CONFIGURE_MQTT "Ρύθμιση MQTT" +#define D_CONFIGURE_DOMOTICZ "Ρύθμιση Domoticz" +#define D_CONFIGURE_LOGGING "Ρύθμιση καταγραφής" +#define D_CONFIGURE_OTHER "Άλλες Ρυθμίσεις" +#define D_CONFIRM_RESET_CONFIGURATION "Confirm Reset Configuration" +#define D_RESET_CONFIGURATION "Επαναφορά Ρυθμίσεων" +#define D_BACKUP_CONFIGURATION "Αντίγραφα Ασφαλείας Ρυθμίσεων" +#define D_RESTORE_CONFIGURATION "Επαναφορά Ρυθμίσεων" +#define D_MAIN_MENU "Κεντρικό Μενού" + +#define D_MODULE_PARAMETERS "Παράμετροι Module" +#define D_MODULE_TYPE "Είδος Module" +#define D_GPIO "GPIO" +#define D_SERIAL_IN "Serial In" +#define D_SERIAL_OUT "Serial Out" + +#define D_WIFI_PARAMETERS "Παράμετροι Wifi" +#define D_SCAN_FOR_WIFI_NETWORKS "Σάρωση για δίκτυα wifi" +#define D_SCAN_DONE "Ολοκλήρωση σάρωσης" +#define D_NO_NETWORKS_FOUND "Δεν βρέθηκαν δίκτυα" +#define D_REFRESH_TO_SCAN_AGAIN "Ανανέωση για επανάληψη σάρωσης" +#define D_DUPLICATE_ACCESSPOINT "Duplicate AccessPoint" +#define D_SKIPPING_LOW_QUALITY "Παράλειψη λόγω χαμηλού σήματος" +#define D_RSSI "RSSI" +#define D_WEP "WEP" +#define D_WPA_PSK "WPA PSK" +#define D_WPA2_PSK "WPA2 PSK" +#define D_AP1_SSID "AP1 SSId" +#define D_AP1_PASSWORD "AP1 Κωδικός" +#define D_AP2_SSID "AP2 SSId" +#define D_AP2_PASSWORD "AP2 Κωδικός" + +#define D_MQTT_PARAMETERS "MQTT Παράμετροι" +#define D_CLIENT "Πελάτης" +#define D_FULL_TOPIC "Full Topic" + +#define D_LOGGING_PARAMETERS "Παράμετροι καταγραφής" +#define D_SERIAL_LOG_LEVEL "Επίπεδο καταγραφής Serial" +#define D_WEB_LOG_LEVEL "Επίπεδο καταγραφής Web" +#define D_SYS_LOG_LEVEL "Επίπεδο καταγραφής Syslog" +#define D_MORE_DEBUG "Επιπλέον debug" +#define D_SYSLOG_HOST "Υπολογιστής Syslog" +#define D_SYSLOG_PORT "Πόρτα Syslog" +#define D_TELEMETRY_PERIOD "Χρόνος τηλεμετρίας" + +#define D_OTHER_PARAMETERS "Άλλες Παράμετροι" +#define D_WEB_ADMIN_PASSWORD "Web Admin Κωδικός" +#define D_MQTT_ENABLE "MQTT Ενεργό" +#define D_FRIENDLY_NAME "Φιλικό Όνομα" +#define D_BELKIN_WEMO "Belkin WeMo" +#define D_HUE_BRIDGE "Hue Bridge" +#define D_SINGLE_DEVICE "μονή συσκευή" +#define D_MULTI_DEVICE "πολλαπλή συσκευή" + +#define D_SAVE_CONFIGURATION "Αποθήκευση Ρυθμίσεων" +#define D_CONFIGURATION_SAVED "Οι ρυθμίσεις αποθηκεύτηκαν" +#define D_CONFIGURATION_RESET "Επαναφορά ρυθμίσεων" + +#define D_PROGRAM_VERSION "Εκδοση προγράμματος" +#define D_BUILD_DATE_AND_TIME "Ημερομηνία και Ώρα Build" +#define D_CORE_AND_SDK_VERSION "Core/SDK Version" +#define D_FLASH_WRITE_COUNT "Μετρητής εγγραφών Flash" +#define D_MAC_ADDRESS "MAC Address" +#define D_MQTT_HOST "MQTT Host" +#define D_MQTT_PORT "MQTT Port" +#define D_MQTT_CLIENT "MQTT Client" +#define D_MQTT_USER "MQTT User" +#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 Discovery" +#define D_MDNS_ADVERTISE "mDNS Advertise" +#define D_ESP_CHIP_ID "ESP Chip Id" +#define D_FLASH_CHIP_ID "Flash Chip Id" +#define D_FLASH_CHIP_SIZE "Μέγεθος Flash" +#define D_FREE_PROGRAM_SPACE "Ελεύθερος Χώρος Προγράμματος" + +#define D_UPGRADE_BY_WEBSERVER "αναβάθμιση από τον διακομιστή web" +#define D_OTA_URL "OTA Url" +#define D_START_UPGRADE "Εκκίνηση αναβάθμισης" +#define D_UPGRADE_BY_FILE_UPLOAD "Αναβάθμιση με ανέβασμα αρχείου" +#define D_UPLOAD_STARTED "Το ανέβασμα ξεκίνησε" +#define D_UPGRADE_STARTED "Η αναβάθμιση ξεκίνησε" +#define D_UPLOAD_DONE "Το ανέβασμα ολοκληρώθηκε" +#define D_UPLOAD_ERR_1 "Δεν έχει επιλεγεί αρχείο" +#define D_UPLOAD_ERR_2 "Δεν υπάρχει αρκετός χώρος" +#define D_UPLOAD_ERR_3 "Magic byte δεν είναι 0xE9" +#define D_UPLOAD_ERR_4 "Το μέγεθος του προγράμματος flash είναι μεγαλύτερο από το πραγματικό μέγεθος του flash" +#define D_UPLOAD_ERR_5 "Upload buffer miscompare" +#define D_UPLOAD_ERR_6 "Το ανέβασμα απέτυχε. Επιλέξτε επίπεδο καταγραφής 3" +#define D_UPLOAD_ERR_7 "Το ανεβάσμα διακόπηκε" +#define D_UPLOAD_ERR_8 "Μη έγκυρο αρχείο" +#define D_UPLOAD_ERR_9 "Το αρχείο είναι πολύ μεγάλο" +#define D_UPLOAD_ERROR_CODE "Κωδικός λάθους ανεβάσματος" + +#define D_ENTER_COMMAND "Εισαγωγή εντολής" +#define D_ENABLE_WEBLOG_FOR_RESPONSE "Ενεργοποιήστε το weblog 2 αν περιμένετε απάντηση" +#define D_NEED_USER_AND_PASSWORD "Χρειάζεστε user=<όνομα χρήστη>&password=<κωδικό χρήστη>" + +// xdrv_00_mqtt.ino +#define D_FINGERPRINT "Επαλήθευση TLS fingerprint..." +#define D_TLS_CONNECT_FAILED_TO "Αποτυχία TLS σύνδεσης" +#define D_RETRY_IN "Επανάληψη σε" +#define D_VERIFIED "Επαλήθευση με Fingerprint" +#define D_INSECURE "Μη ασφαλής σύνδεση λόγο ακατάλληλου Fingerprint" +#define D_CONNECT_FAILED_TO "Αποτυχία σύνδεσης στο" + +// xdrv_wemohue.ino +#define D_MULTICAST_DISABLED "Multicast απενεργοποιημένο" +#define D_MULTICAST_REJOINED "Multicast επανασύνδεση" +#define D_MULTICAST_JOIN_FAILED "Αποτυχία σύνδεσης Multicast" +#define D_FAILED_TO_SEND_RESPONSE "Αποτυχία αποστολής απάντησης" + +#define D_WEMO "WeMo" +#define D_WEMO_BASIC_EVENT "WeMo βασικό event" +#define D_WEMO_EVENT_SERVICE "WeMo υπηρεσία event" +#define D_WEMO_META_SERVICE "WeMo υπηρεσία meta" +#define D_WEMO_SETUP "WeMo ρυθμίσεις" +#define D_RESPONSE_SENT "Αποστολή απάντησης" + +#define D_HUE "Hue" +#define D_HUE_BRIDGE_SETUP "Hue ρυθμίσεις" +#define D_HUE_API_NOT_IMPLEMENTED "Hue API δεν έχει υλοποιηθεί" +#define D_HUE_API "Hue API" +#define D_HUE_POST_ARGS "Hue POST args" +#define D_3_RESPONSE_PACKETS_SENT "3πλο πακέτο απάντησεης στάλθηκε" + +// xdrv_05_domoticz.ino +#define D_DOMOTICZ_PARAMETERS "Domoticz παράμετροι" +#define D_DOMOTICZ_IDX "Idx" +#define D_DOMOTICZ_KEY_IDX "Key idx" +#define D_DOMOTICZ_SWITCH_IDX "Switch idx" +#define D_DOMOTICZ_SENSOR_IDX "Sensor idx" + #define D_DOMOTICZ_TEMP "Temp" + #define D_DOMOTICZ_TEMP_HUM "Temp,Hum" + #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro" + #define D_DOMOTICZ_POWER_ENERGY "Power,Energy" + #define D_DOMOTICZ_ILLUMINANCE "Illuminance" + #define D_DOMOTICZ_COUNT "Count/PM1" + #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5" + #define D_DOMOTICZ_CURRENT "Current/PM10" + #define D_DOMOTICZ_AIRQUALITY "Ποιότητα Αέρα" +#define D_DOMOTICZ_UPDATE_TIMER "Ενημέρωση" + +// xdrv_09_timers.ino +#define D_CONFIGURE_TIMER "Ρυθμίσεις Χρόνου" +#define D_TIMER_PARAMETERS "Χρονικοί παράμετροι" +#define D_TIMER_ARM "Arm" +#define D_TIMER_TIME "Ωρα" +#define D_TIMER_DAYS "Μέρες" +#define D_TIMER_REPEAT "Επανάληψη" +#define D_TIMER_OUTPUT "Αποτέλεσμα" +#define D_TIMER_ACTION "Εντολή" + +// xdrv_10_knx.ino +#define D_CONFIGURE_KNX "Ρυθμίσεις KNX" +#define D_KNX_PARAMETERS "KNX Παράμετροι" +#define D_KNX_GENERAL_CONFIG "Γενικά" +#define D_KNX_PHYSICAL_ADDRESS "Διεύθυνση Μνήμης" +#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Πρέπει να είναι μοναδική στο KNX δίκτυο )" +#define D_KNX_ENABLE "Ενεργοποιημένο KNX" +#define D_KNX_GROUP_ADDRESS_TO_WRITE "Αποστολή δεδομένων σε Ομάδα Διευθύνσεων" +#define D_ADD "Προσθήκη" +#define D_DELETE "Διαγραφή" +#define D_REPLY "Επανάληψη" +#define D_KNX_GROUP_ADDRESS_TO_READ "Ομάδα Διευθύνσεων που θα λάβει τα Δεδομένα" +#define D_LOG_KNX "KNX: " +#define D_RECEIVED_FROM "Στάλθηκε από" +#define D_KNX_COMMAND_WRITE "Εγγραφή" +#define D_KNX_COMMAND_READ "Ανάγνωση" +#define D_KNX_COMMAND_OTHER "Αλλο" +#define D_SENT_TO "αποστολή σε" +#define D_KNX_WARNING "Η Ομάδα Διευθύνσεων ( 0 / 0 / 0 ) είναι δεσμευμένη και δεν μπορεί να χρησιμοποιηθεί." + +// xdrv_03_energy.ino +#define D_ENERGY_TODAY "Energy Σήμερα" +#define D_ENERGY_YESTERDAY "Energy Χτες" +#define D_ENERGY_TOTAL "Energy Συνολικά" + +// xsns_05_ds18b20.ino +#define D_SENSOR_BUSY "Απασχολημένος Σένσορας" +#define D_SENSOR_CRC_ERROR "CRC λάθος σένσορα" +#define D_SENSORS_FOUND "Βρέθηκε σένσορας" + +// xsns_06_dht.ino +#define D_TIMEOUT_WAITING_FOR "Timeout περιμένετε για" +#define D_START_SIGNAL_LOW "εκκίνηση με χαμηλό σήμα" +#define D_START_SIGNAL_HIGH "εκκίνηση με υψηλό σήμα" +#define D_PULSE "παλμός" +#define D_CHECKSUM_FAILURE "Αποτυχία Checksum" + +// xsns_07_sht1x.ino +#define D_SENSOR_DID_NOT_ACK_COMMAND "Ο σένσορας δεν έλαβε την εντολή ACK" +#define D_SHT1X_FOUND "Βρέθηκε SHT1X" + +// xsns_18_pms5003.ino +#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter +#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter +#define D_PARTICALS_BEYOND "Particals" + +// sonoff_template.h +#define D_SENSOR_NONE "Κανένας" +#define D_SENSOR_DHT11 "DHT11" +#define D_SENSOR_AM2301 "AM2301" +#define D_SENSOR_SI7021 "SI7021" +#define D_SENSOR_DS18X20 "DS18x20" +#define D_SENSOR_I2C_SCL "I2C SCL" +#define D_SENSOR_I2C_SDA "I2C SDA" +#define D_SENSOR_WS2812 "WS2812" +#define D_SENSOR_IRSEND "IRsend" +#define D_SENSOR_SWITCH "Διακόπτης" // Suffix "1" +#define D_SENSOR_BUTTON "Κουμπί" // Suffix "1" +#define D_SENSOR_RELAY "Ρελέ" // Suffix "1i" +#define D_SENSOR_LED "Led" // Suffix "1i" +#define D_SENSOR_PWM "PWM" // Suffix "1" +#define D_SENSOR_COUNTER "Μετρητής" // Suffix "1" +#define D_SENSOR_IRRECV "IRrecv" +#define D_SENSOR_MHZ_RX "MHZ Rx" +#define D_SENSOR_MHZ_TX "MHZ Tx" +#define D_SENSOR_PZEM_RX "PZEM Rx" +#define D_SENSOR_PZEM_TX "PZEM Tx" +#define D_SENSOR_SAIR_RX "SAir Rx" +#define D_SENSOR_SAIR_TX "SAir Tx" +#define D_SENSOR_SPI_CS "SPI CS" +#define D_SENSOR_SPI_DC "SPI DC" +#define D_SENSOR_BACKLIGHT "BkLight" +#define D_SENSOR_PMS5003 "PMS5003" +#define D_SENSOR_SDS0X1 "SDS0X1" +#define D_SENSOR_SBR_RX "SerBr Rx" +#define D_SENSOR_SBR_TX "SerBr Tx" +#define D_SENSOR_SR04_TRIG "SR04 Tri" +#define D_SENSOR_SR04_ECHO "SR04 Ech" + +// Units +#define D_UNIT_AMPERE "A" +#define D_UNIT_CENTIMETER "cm" +#define D_UNIT_HOUR "Hr" +#define D_UNIT_KILOOHM "kOhm" +#define D_UNIT_KILOWATTHOUR "kWh" +#define D_UNIT_LUX "lx" +#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3" +#define D_UNIT_MICROMETER "um" +#define D_UNIT_MICROSECOND "us" +#define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLISECOND "ms" +#define D_UNIT_MINUTE "Min" +#define D_UNIT_PARTS_PER_BILLION "ppb" +#define D_UNIT_PARTS_PER_DECILITER "ppd" +#define D_UNIT_PARTS_PER_MILLION "ppm" +#define D_UNIT_PRESSURE "hPa" +#define D_UNIT_SECOND "sec" +#define D_UNIT_SECTORS "sectors" +#define D_UNIT_VOLT "V" +#define D_UNIT_WATT "W" +#define D_UNIT_WATTHOUR "Wh" + +// Log message prefix +#define D_LOG_APPLICATION "APP: " // Application +#define D_LOG_BRIDGE "BRG: " // Bridge +#define D_LOG_CONFIG "CFG: " // Settings +#define D_LOG_COMMAND "CMD: " // Command +#define D_LOG_DEBUG "DBG: " // Debug +#define D_LOG_DHT "DHT: " // DHT sensor +#define D_LOG_DOMOTICZ "DOM: " // Domoticz +#define D_LOG_DSB "DSB: " // DS18xB20 sensor +#define D_LOG_HTTP "HTP: " // HTTP webserver +#define D_LOG_I2C "I2C: " // I2C +#define D_LOG_IRR "IRR: " // Infra Red Received +#define D_LOG_LOG "LOG: " // Logging +#define D_LOG_MODULE "MOD: " // Module +#define D_LOG_MDNS "DNS: " // mDNS +#define D_LOG_MQTT "MQT: " // MQTT +#define D_LOG_OTHER "OTH: " // Other +#define D_LOG_RESULT "RSL: " // Result +#define D_LOG_RFR "RFR: " // RF Received +#define D_LOG_SERIAL "SER: " // Serial +#define D_LOG_SHT1 "SHT: " // SHT1x sensor +#define D_LOG_UPLOAD "UPL: " // Upload +#define D_LOG_UPNP "UPP: " // UPnP +#define D_LOG_WIFI "WIF: " // Wifi + +#endif // _LANGUAGE_EN_GB_H_ diff --git a/sonoff/language/en-GB.h b/sonoff/language/en-GB.h index 7c7c9568f..a57d18fd9 100644 --- a/sonoff/language/en-GB.h +++ b/sonoff/language/en-GB.h @@ -75,6 +75,7 @@ #define D_DARKLIGHT "Dark" #define D_DEBUG "Debug" #define D_DISABLED "Disabled" +#define D_DISTANCE "Distance" #define D_DNS_SERVER "DNS Server" #define D_DONE "Done" #define D_DST_TIME "DST" @@ -450,9 +451,12 @@ #define D_SENSOR_SDS0X1 "SDS0X1" #define D_SENSOR_SBR_RX "SerBr Rx" #define D_SENSOR_SBR_TX "SerBr Tx" +#define D_SENSOR_SR04_TRIG "SR04 Tri" +#define D_SENSOR_SR04_ECHO "SR04 Ech" // Units #define D_UNIT_AMPERE "A" +#define D_UNIT_CENTIMETER "cm" #define D_UNIT_HOUR "Hr" #define D_UNIT_KILOOHM "kOhm" #define D_UNIT_KILOWATTHOUR "kWh" diff --git a/sonoff/language/es-AR.h b/sonoff/language/es-AR.h index 4a4e6c9ec..ded21e8e7 100644 --- a/sonoff/language/es-AR.h +++ b/sonoff/language/es-AR.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 v5.12.0k + * Updated until v5.12.0m \*********************************************************************/ #define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English) @@ -75,6 +75,7 @@ #define D_DARKLIGHT "Oscura" #define D_DEBUG "Debug" #define D_DISABLED "Deshabilitado" +#define D_DISTANCE "Distancia" #define D_DNS_SERVER "DNS Server" #define D_DONE "Listo" #define D_DST_TIME "DST" @@ -375,24 +376,24 @@ #define D_TIMER_ACTION "Estado" // xdrv_10_knx.ino -#define D_CONFIGURE_KNX "Configure KNX" -#define D_KNX_PARAMETERS "KNX Parameters" +#define D_CONFIGURE_KNX "Configuración de KNX" +#define D_KNX_PARAMETERS "Parámetros de KNX" #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_KNX_PHYSICAL_ADDRESS "Dirección Física" +#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Debe ser única en la red KNX )" +#define D_KNX_ENABLE "Habilitar KNX" +#define D_KNX_GROUP_ADDRESS_TO_WRITE "Datos a Enviar a las Direcciones de Grupo" +#define D_ADD "Agregar" +#define D_DELETE "Eliminar" +#define D_REPLY "Responder" +#define D_KNX_GROUP_ADDRESS_TO_READ "Direcciones de Grupo para Recibir Datos" #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_RECEIVED_FROM "Recibido desde" +#define D_KNX_COMMAND_WRITE "Escribir" +#define D_KNX_COMMAND_READ "Leer" +#define D_KNX_COMMAND_OTHER "Otro" +#define D_SENT_TO "enviada a" +#define D_KNX_WARNING "La dirección de grupo ( 0 / 0 / 0 ) está reservada y no puede ser utilizada." // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energía Hoy" @@ -450,9 +451,12 @@ #define D_SENSOR_SDS0X1 "SDS0X1" #define D_SENSOR_SBR_RX "SerBr Rx" #define D_SENSOR_SBR_TX "SerBr Tx" +#define D_SENSOR_SR04_TRIG "SR04 Tri" +#define D_SENSOR_SR04_ECHO "SR04 Ech" // Units #define D_UNIT_AMPERE "A" +#define D_UNIT_CENTIMETER "cm" #define D_UNIT_HOUR "Hr" #define D_UNIT_KILOOHM "kOhm" #define D_UNIT_KILOWATTHOUR "kWh" diff --git a/sonoff/language/fr-FR.h b/sonoff/language/fr-FR.h index 26c0fe784..a9211dab1 100644 --- a/sonoff/language/fr-FR.h +++ b/sonoff/language/fr-FR.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 v5.12.0l + * Updated until v5.12.0m \*********************************************************************/ #define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English) @@ -75,6 +75,7 @@ #define D_DARKLIGHT "Sombre" #define D_DEBUG "Debug" #define D_DISABLED "Désactivé" +#define D_DISTANCE "Distance" #define D_DNS_SERVER "Serveur DNS" #define D_DONE "Fait" #define D_DST_TIME "DST" @@ -133,14 +134,14 @@ #define D_SAVE "Enregistrer" #define D_SENSOR "Capteur" #define D_SSID "SSID" -#define D_START "Départ" +#define D_START "Lancer" // "Lancer la mise à jour" #define D_STD_TIME "STD" #define D_STOP "Stop" #define D_SUBNET_MASK "Masque sous-réseau" #define D_SUBSCRIBE_TO "Souscrire à" #define D_SUCCESSFUL "Réussi" -#define D_SUNRISE "Jour" // "Lever du soleil" <- maybe too long? -#define D_SUNSET "Nuit" // "Coucher du soleil" <- maybe too long? +#define D_SUNRISE "Lever du jour" +#define D_SUNSET "Tombée de la nuit" #define D_TEMPERATURE "Température" #define D_TO "à" #define D_TOGGLE "Inverser" @@ -148,8 +149,8 @@ #define D_TRANSMIT "Transmettre" #define D_TRUE "Vrai" #define D_TVOC "TVOC" -#define D_UPGRADE "mise à jour" -#define D_UPLOAD "Upload" // Not better in french +#define D_UPGRADE "la mise à jour" // "Lancer la mise à jour" +#define D_UPLOAD "Upload" // Not better in french #define D_UPTIME "Durée d'activité" #define D_USER "Utilisateur" #define D_UTC_TIME "UTC" @@ -214,24 +215,24 @@ #define D_BUTTON_TOGGLE "on/off" #define D_CONFIGURATION "Configuration" #define D_INFORMATION "Information" -#define D_FIRMWARE_UPGRADE "Mise à jour Firmware" +#define D_FIRMWARE_UPGRADE "Mise à jour du Firmware" #define D_CONSOLE "Console" #define D_CONFIRM_RESTART "Confirmer redémarrage" -#define D_CONFIGURE_MODULE "Configuration Module" +#define D_CONFIGURE_MODULE "Configuration du Module" #define D_CONFIGURE_WIFI "Configuration WiFi" #define D_CONFIGURE_MQTT "Configuration MQTT" #define D_CONFIGURE_DOMOTICZ "Configuration Domoticz" -#define D_CONFIGURE_LOGGING "Configuration Logging" +#define D_CONFIGURE_LOGGING "Configuration du journal" #define D_CONFIGURE_OTHER "Autre configuration" #define D_CONFIRM_RESET_CONFIGURATION "Confirmer réinitialisation configuration" -#define D_RESET_CONFIGURATION "Réinitialisation Configuration" -#define D_BACKUP_CONFIGURATION "Sauvegarde Configuration" -#define D_RESTORE_CONFIGURATION "Restauration Configuration" +#define D_RESET_CONFIGURATION "Configuration par défaut" +#define D_BACKUP_CONFIGURATION "Sauvegarde de la config." +#define D_RESTORE_CONFIGURATION "Restauration de la config." #define D_MAIN_MENU "Menu principal" #define D_MODULE_PARAMETERS "Paramètres module" -#define D_MODULE_TYPE "Type module" +#define D_MODULE_TYPE "Type de module" #define D_GPIO "GPIO" #define D_SERIAL_IN "Serial In" #define D_SERIAL_OUT "Serial Out" @@ -241,8 +242,8 @@ #define D_SCAN_DONE "Scan terminé" #define D_NO_NETWORKS_FOUND "Aucun réseau trouvé" #define D_REFRESH_TO_SCAN_AGAIN "Rafraîchir pour scanner à nouveau" -#define D_DUPLICATE_ACCESSPOINT "AccessPoint dupliqué" -#define D_SKIPPING_LOW_QUALITY "Passe car mauvaise qualité" +#define D_DUPLICATE_ACCESSPOINT "Point d'Accès dupliqué" +#define D_SKIPPING_LOW_QUALITY "Évité car de mauvaise qualité" #define D_RSSI "RSSI" #define D_WEP "WEP" #define D_WPA_PSK "WPA PSK" @@ -256,13 +257,13 @@ #define D_CLIENT "Client" #define D_FULL_TOPIC "topic complet" -#define D_LOGGING_PARAMETERS "Paramètres journalisation" +#define D_LOGGING_PARAMETERS "Paramètres du journal" #define D_SERIAL_LOG_LEVEL "Niveau de journalisation série" #define D_WEB_LOG_LEVEL "Niveau de journalisation web" -#define D_SYS_LOG_LEVEL "Niveau syslog" +#define D_SYS_LOG_LEVEL "Niveau Syslog" #define D_MORE_DEBUG "Plus de debug" -#define D_SYSLOG_HOST "Hôte syslog" -#define D_SYSLOG_PORT "Port syslog" +#define D_SYSLOG_HOST "Hôte Syslog" +#define D_SYSLOG_PORT "Port Syslog" #define D_TELEMETRY_PERIOD "Période télémétrie" #define D_OTHER_PARAMETERS "Autres paramètres" @@ -274,11 +275,11 @@ #define D_SINGLE_DEVICE "module unique" #define D_MULTI_DEVICE "multi module" -#define D_SAVE_CONFIGURATION "Enregistrer configuration" +#define D_SAVE_CONFIGURATION "Enregistrer la configuration" #define D_CONFIGURATION_SAVED "Configuration enregistrée" #define D_CONFIGURATION_RESET "Configuration réinitialisée" -#define D_PROGRAM_VERSION "Version Programme" +#define D_PROGRAM_VERSION "Version du programme" #define D_BUILD_DATE_AND_TIME "Date & Heure de build" #define D_CORE_AND_SDK_VERSION "Version Core/SDK" #define D_FLASH_WRITE_COUNT "Compteur écriture flash" @@ -306,21 +307,21 @@ #define D_UPLOAD_DONE "Téléchargement terminé" #define D_UPLOAD_ERR_1 "Aucun fichier sélectionné" #define D_UPLOAD_ERR_2 "Espace insuffisant" -#define D_UPLOAD_ERR_3 "Magic byte n'est pas 0xE9" +#define D_UPLOAD_ERR_3 "L'octet magique n'est pas 0xE9" #define D_UPLOAD_ERR_4 "La taille du programme à flasher est plus grande que la taille réelle de la mémoire flash" -#define D_UPLOAD_ERR_5 "Erreur comparaison buffer de téléchargement" -#define D_UPLOAD_ERR_6 "Téléchargement échoué. Activation logging 3" +#define D_UPLOAD_ERR_5 "Erreur de comparaison du buffer de téléchargement" +#define D_UPLOAD_ERR_6 "Téléchargement échoué. Activer Weblog 3" #define D_UPLOAD_ERR_7 "Téléchargement annulé" #define D_UPLOAD_ERR_8 "Fichier invalide" #define D_UPLOAD_ERR_9 "Fichier trop grand" #define D_UPLOAD_ERROR_CODE "Code d'erreur téléchargement" -#define D_ENTER_COMMAND "Saisir commande" -#define D_ENABLE_WEBLOG_FOR_RESPONSE "Activer weblog 2 si response attendue" +#define D_ENTER_COMMAND "Saisir une commande" +#define D_ENABLE_WEBLOG_FOR_RESPONSE "Activer Weblog 2 si une réponse est attendue" #define D_NEED_USER_AND_PASSWORD "Nécessite utilisateur=&password=" // xdrv_00_mqtt.ino -#define D_FINGERPRINT "Vérification empreinte TLS ..." +#define D_FINGERPRINT "Vérification d'empreinte TLS ..." #define D_TLS_CONNECT_FAILED_TO "Échec de connexion TLS à" #define D_RETRY_IN "Nouvelle tentative dans" #define D_VERIFIED "Vérifié par empreinte " @@ -345,7 +346,7 @@ #define D_HUE_API_NOT_IMPLEMENTED "API Hue non implémentée" #define D_HUE_API "Hue API" #define D_HUE_POST_ARGS "Hue POST args" -#define D_3_RESPONSE_PACKETS_SENT "3 paquets response envoyés" +#define D_3_RESPONSE_PACKETS_SENT "3 paquets de réponse envoyés" // xdrv_05_domoticz.ino #define D_DOMOTICZ_PARAMETERS "Paramètres Domoticz" @@ -365,7 +366,7 @@ #define D_DOMOTICZ_UPDATE_TIMER "Durée de rafraichissement" // xdrv_09_timers.ino -#define D_CONFIGURE_TIMER "Configuration Timer" +#define D_CONFIGURE_TIMER "Configuration des Timers" #define D_TIMER_PARAMETERS "Paramètres Timer" #define D_TIMER_ARM "Armer" #define D_TIMER_TIME "Temps" @@ -375,24 +376,24 @@ #define D_TIMER_ACTION "Action" // 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 "Configuration de KNX" +#define D_KNX_PARAMETERS "Paramètres KNX" +#define D_KNX_GENERAL_CONFIG "Général" +#define D_KNX_PHYSICAL_ADDRESS "Adresse individuelle" // Backbone/Line/Device -> Zone/Ligne/Participant +#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Doit être unique sur le réseau KNX)" +#define D_KNX_ENABLE "Activer KNX" +#define D_KNX_GROUP_ADDRESS_TO_WRITE "Données à envoyer aux Adresses de Groupe" +#define D_ADD "Ajoûter" +#define D_DELETE "Supprimer" +#define D_REPLY "Répondre" +#define D_KNX_GROUP_ADDRESS_TO_READ "Données à recevoir des Adresses de Groupe" #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_RECEIVED_FROM "Reçu de" +#define D_KNX_COMMAND_WRITE "Écrire" +#define D_KNX_COMMAND_READ "Lire" +#define D_KNX_COMMAND_OTHER "Autre" +#define D_SENT_TO "envoyé à" +#define D_KNX_WARNING "L'Adresse de Groupe ( 0 / 0 / 0 ) est réservée et ne peut être utilisée." // xsns_03_energy.ino #define D_ENERGY_TODAY "Énergie aujourd'hui" @@ -412,7 +413,7 @@ #define D_CHECKSUM_FAILURE "Erreur checksum" // xsns_07_sht1x.ino -#define D_SENSOR_DID_NOT_ACK_COMMAND "Le capteur n'a pas ACK la commande" +#define D_SENSOR_DID_NOT_ACK_COMMAND "Le capteur n'a pas acquitté la commande" #define D_SHT1X_FOUND "SHT1X found" // xsns_18_pms5003.ino @@ -450,16 +451,19 @@ #define D_SENSOR_SDS0X1 "SDS0X1" #define D_SENSOR_SBR_RX "SerBr Rx" #define D_SENSOR_SBR_TX "SerBr Tx" +#define D_SENSOR_SR04_TRIG "SR04 Tri" +#define D_SENSOR_SR04_ECHO "SR04 Ech" // Units #define D_UNIT_AMPERE "A" +#define D_UNIT_CENTIMETER "cm" #define D_UNIT_HOUR "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_MILLISECOND "ms" #define D_UNIT_MINUTE "Min" diff --git a/sonoff/language/hu-HU.h b/sonoff/language/hu-HU.h index 80c568688..51d9e146f 100644 --- a/sonoff/language/hu-HU.h +++ b/sonoff/language/hu-HU.h @@ -75,6 +75,7 @@ #define D_DARKLIGHT "Min. fényerő" #define D_DEBUG "Debug" #define D_DISABLED "Letiltva" +#define D_DISTANCE "Distance" #define D_DNS_SERVER "DNS Szerver" #define D_DONE "Kész" #define D_DST_TIME "DST" @@ -450,9 +451,12 @@ #define D_SENSOR_SDS0X1 "SDS0X1" #define D_SENSOR_SBR_RX "SerBr Rx" #define D_SENSOR_SBR_TX "SerBr Tx" +#define D_SENSOR_SR04_TRIG "SR04 Tri" +#define D_SENSOR_SR04_ECHO "SR04 Ech" // Units #define D_UNIT_AMPERE "A" +#define D_UNIT_CENTIMETER "cm" #define D_UNIT_HOUR "ó" #define D_UNIT_KILOOHM "kOhm" #define D_UNIT_KILOWATTHOUR "kWh" diff --git a/sonoff/language/it-IT.h b/sonoff/language/it-IT.h index b273222e6..7bd6b65b5 100644 --- a/sonoff/language/it-IT.h +++ b/sonoff/language/it-IT.h @@ -75,6 +75,7 @@ #define D_DARKLIGHT "Scuro" #define D_DEBUG "Debug" #define D_DISABLED "Disabilitato" +#define D_DISTANCE "Distance" #define D_DNS_SERVER "DNS Server" #define D_DONE "Fatto" #define D_DST_TIME "DST" @@ -450,9 +451,12 @@ #define D_SENSOR_SDS0X1 "SDS0X1" #define D_SENSOR_SBR_RX "SerBr Rx" #define D_SENSOR_SBR_TX "SerBr Tx" +#define D_SENSOR_SR04_TRIG "SR04 Tri" +#define D_SENSOR_SR04_ECHO "SR04 Ech" // Units #define D_UNIT_AMPERE "A" +#define D_UNIT_CENTIMETER "cm" #define D_UNIT_HOUR "Hr" #define D_UNIT_KILOOHM "kOhm" #define D_UNIT_KILOWATTHOUR "kWh" diff --git a/sonoff/language/nl-NL.h b/sonoff/language/nl-NL.h index 776bca8e9..5d3bcb959 100644 --- a/sonoff/language/nl-NL.h +++ b/sonoff/language/nl-NL.h @@ -75,6 +75,7 @@ #define D_DARKLIGHT "Donker" #define D_DEBUG "Debug" #define D_DISABLED "Uitgeschakeld" +#define D_DISTANCE "Afstand" #define D_DNS_SERVER "DNS Server" #define D_DONE "Klaar" #define D_DST_TIME "ZT" @@ -450,9 +451,12 @@ #define D_SENSOR_SDS0X1 "SDS0X1" #define D_SENSOR_SBR_RX "SerBr Rx" #define D_SENSOR_SBR_TX "SerBr Tx" +#define D_SENSOR_SR04_TRIG "SR04 Tri" +#define D_SENSOR_SR04_ECHO "SR04 Ech" // Units #define D_UNIT_AMPERE "A" +#define D_UNIT_CENTIMETER "cm" #define D_UNIT_HOUR "h" #define D_UNIT_KILOOHM "kOhm" #define D_UNIT_KILOWATTHOUR "kWh" diff --git a/sonoff/language/pl-PL.h b/sonoff/language/pl-PL.h index 09715f1e0..19a27ebeb 100644 --- a/sonoff/language/pl-PL.h +++ b/sonoff/language/pl-PL.h @@ -75,6 +75,7 @@ #define D_DARKLIGHT "Ciemny" #define D_DEBUG "Debug" #define D_DISABLED "Zablokowany" +#define D_DISTANCE "Distance" #define D_DNS_SERVER "Server DNS" #define D_DONE "Wykonane" #define D_DST_TIME "DST" @@ -450,9 +451,12 @@ #define D_SENSOR_SDS0X1 "SDS0X1" #define D_SENSOR_SBR_RX "SerBr Rx" #define D_SENSOR_SBR_TX "SerBr Tx" +#define D_SENSOR_SR04_TRIG "SR04 Tri" +#define D_SENSOR_SR04_ECHO "SR04 Ech" // Units #define D_UNIT_AMPERE "A" +#define D_UNIT_CENTIMETER "cm" #define D_UNIT_HOUR "Godz" #define D_UNIT_KILOOHM "kOhm" #define D_UNIT_KILOWATTHOUR "kWh" diff --git a/sonoff/language/pt-PT.h b/sonoff/language/pt-PT.h index 01293ed18..55ccf37a6 100644 --- a/sonoff/language/pt-PT.h +++ b/sonoff/language/pt-PT.h @@ -75,6 +75,7 @@ #define D_DARKLIGHT "Luz Escura" #define D_DEBUG "Depurar" #define D_DISABLED "Disabilitado" +#define D_DISTANCE "Distance" #define D_DNS_SERVER "Servidor DNS" #define D_DONE "Concluído" #define D_DST_TIME "DST" @@ -450,9 +451,12 @@ #define D_SENSOR_SDS0X1 "SDS0X1" #define D_SENSOR_SBR_RX "SerBr Rx" #define D_SENSOR_SBR_TX "SerBr Tx" +#define D_SENSOR_SR04_TRIG "SR04 Tri" +#define D_SENSOR_SR04_ECHO "SR04 Ech" // Units #define D_UNIT_AMPERE "A" +#define D_UNIT_CENTIMETER "cm" #define D_UNIT_HOUR "Hr" #define D_UNIT_KILOOHM "kOhm" #define D_UNIT_KILOWATTHOUR "kWh" diff --git a/sonoff/language/ru-RU.h b/sonoff/language/ru-RU.h index c5ecf5e69..96ad631ab 100644 --- a/sonoff/language/ru-RU.h +++ b/sonoff/language/ru-RU.h @@ -75,6 +75,7 @@ #define D_DARKLIGHT "Темный" #define D_DEBUG "Отладка" #define D_DISABLED "Блокирован" +#define D_DISTANCE "Distance" #define D_DNS_SERVER "DNS Сервер" #define D_DONE "Выполнено" #define D_DST_TIME "DST" @@ -450,9 +451,12 @@ #define D_SENSOR_SDS0X1 "SDS0X1" #define D_SENSOR_SBR_RX "SerBr Rx" #define D_SENSOR_SBR_TX "SerBr Tx" +#define D_SENSOR_SR04_TRIG "SR04 Tri" +#define D_SENSOR_SR04_ECHO "SR04 Ech" // Units #define D_UNIT_AMPERE "А" +#define D_UNIT_CENTIMETER "cm" #define D_UNIT_HOUR "Ч" #define D_UNIT_KILOOHM "кОм" #define D_UNIT_KILOWATTHOUR "кВт" diff --git a/sonoff/language/zh-CN.h b/sonoff/language/zh-CN.h index ad52fef54..b90ab7b1d 100644 --- a/sonoff/language/zh-CN.h +++ b/sonoff/language/zh-CN.h @@ -75,6 +75,7 @@ #define D_DARKLIGHT "Dark" #define D_DEBUG "调试" #define D_DISABLED "禁用" +#define D_DISTANCE "Distance" #define D_DNS_SERVER "DNS服务器" #define D_DONE "完成" #define D_DST_TIME "DST" @@ -450,9 +451,12 @@ #define D_SENSOR_SDS0X1 "SDS0X1" #define D_SENSOR_SBR_RX "SerBr Rx" #define D_SENSOR_SBR_TX "SerBr Tx" +#define D_SENSOR_SR04_TRIG "SR04 Tri" +#define D_SENSOR_SR04_ECHO "SR04 Ech" // Units #define D_UNIT_AMPERE "安" +#define D_UNIT_CENTIMETER "cm" #define D_UNIT_HOUR "时" #define D_UNIT_KILOOHM "千欧" #define D_UNIT_KILOWATTHOUR "千瓦时" diff --git a/sonoff/language/zh-TW.h b/sonoff/language/zh-TW.h index 927032310..b13f0ba04 100644 --- a/sonoff/language/zh-TW.h +++ b/sonoff/language/zh-TW.h @@ -75,6 +75,7 @@ #define D_DARKLIGHT "Dark" #define D_DEBUG "除錯" #define D_DISABLED "停用" +#define D_DISTANCE "Distance" #define D_DNS_SERVER "DNS伺服器" #define D_DONE "完成" #define D_DST_TIME "DST" @@ -450,9 +451,12 @@ #define D_SENSOR_SDS0X1 "SDS0X1" #define D_SENSOR_SBR_RX "SerBr Rx" #define D_SENSOR_SBR_TX "SerBr Tx" +#define D_SENSOR_SR04_TRIG "SR04 Tri" +#define D_SENSOR_SR04_ECHO "SR04 Ech" // Units #define D_UNIT_AMPERE "安" +#define D_UNIT_CENTIMETER "cm" #define D_UNIT_HOUR "時" #define D_UNIT_KILOOHM "千歐" #define D_UNIT_KILOWATTHOUR "千瓦時" diff --git a/sonoff/settings.ino b/sonoff/settings.ino index 9419548c8..579862457 100644 --- a/sonoff/settings.ino +++ b/sonoff/settings.ino @@ -119,41 +119,6 @@ boolean RtcSettingsValid() return (RTC_MEM_VALID == RtcSettings.valid); } -#ifdef DEBUG_THEO -void RtcSettingsDump() -{ - #define CFG_COLS 16 - - uint16_t idx; - uint16_t maxrow; - uint16_t row; - uint16_t col; - - uint8_t *buffer = (uint8_t *) &RtcSettings; - maxrow = ((sizeof(RTCMEM)+CFG_COLS)/CFG_COLS); - - for (row = 0; row < maxrow; row++) { - idx = row * CFG_COLS; - snprintf_P(log_data, sizeof(log_data), PSTR("%03X:"), idx); - for (col = 0; col < CFG_COLS; col++) { - if (!(col%4)) { - snprintf_P(log_data, sizeof(log_data), PSTR("%s "), log_data); - } - snprintf_P(log_data, sizeof(log_data), PSTR("%s %02X"), log_data, buffer[idx + col]); - } - snprintf_P(log_data, sizeof(log_data), PSTR("%s |"), log_data); - for (col = 0; col < CFG_COLS; col++) { -// if (!(col%4)) { -// snprintf_P(log_data, sizeof(log_data), PSTR("%s "), log_data); -// } - snprintf_P(log_data, sizeof(log_data), PSTR("%s%c"), log_data, ((buffer[idx + col] > 0x20) && (buffer[idx + col] < 0x7F)) ? (char)buffer[idx + col] : ' '); - } - snprintf_P(log_data, sizeof(log_data), PSTR("%s|"), log_data); - AddLog(LOG_LEVEL_INFO); - } -} -#endif // DEBUG_THEO - /*********************************************************************************************\ * Config - Flash \*********************************************************************************************/ @@ -374,57 +339,6 @@ void SettingsSdkErase() delay(1000); } -void SettingsDump(char* parms) -{ - #define CFG_COLS 16 - - uint16_t idx; - uint16_t maxrow; - uint16_t row; - uint16_t col; - char *p; - - uint8_t *buffer = (uint8_t *) &Settings; - maxrow = ((sizeof(SYSCFG)+CFG_COLS)/CFG_COLS); - - uint16_t srow = strtol(parms, &p, 16) / CFG_COLS; - uint16_t mrow = strtol(p, &p, 10); - -// snprintf_P(log_data, sizeof(log_data), PSTR("Cnfg: Parms %s, Start row %d, rows %d"), parms, srow, mrow); -// AddLog(LOG_LEVEL_DEBUG); - - if (0 == mrow) { // Default only 8 lines - mrow = 8; - } - if (srow > maxrow) { - srow = maxrow - mrow; - } - if (mrow < (maxrow - srow)) { - maxrow = srow + mrow; - } - - for (row = srow; row < maxrow; row++) { - idx = row * CFG_COLS; - snprintf_P(log_data, sizeof(log_data), PSTR("%03X:"), idx); - for (col = 0; col < CFG_COLS; col++) { - if (!(col%4)) { - snprintf_P(log_data, sizeof(log_data), PSTR("%s "), log_data); - } - snprintf_P(log_data, sizeof(log_data), PSTR("%s %02X"), log_data, buffer[idx + col]); - } - snprintf_P(log_data, sizeof(log_data), PSTR("%s |"), log_data); - for (col = 0; col < CFG_COLS; col++) { -// if (!(col%4)) { -// snprintf_P(log_data, sizeof(log_data), PSTR("%s "), log_data); -// } - snprintf_P(log_data, sizeof(log_data), PSTR("%s%c"), log_data, ((buffer[idx + col] > 0x20) && (buffer[idx + col] < 0x7F)) ? (char)buffer[idx + col] : ' '); - } - snprintf_P(log_data, sizeof(log_data), PSTR("%s|"), log_data); - AddLog(LOG_LEVEL_INFO); - delay(1); - } -} - /********************************************************************************************/ void SettingsDefault() diff --git a/sonoff/sonoff.ino b/sonoff/sonoff.ino index f937cc517..00850b891 100644 --- a/sonoff/sonoff.ino +++ b/sonoff/sonoff.ino @@ -84,7 +84,7 @@ enum TasmotaCommands { CMND_LOGHOST, CMND_LOGPORT, CMND_IPADDRESS, CMND_NTPSERVER, CMND_AP, CMND_SSID, CMND_PASSWORD, CMND_HOSTNAME, CMND_WIFICONFIG, CMND_FRIENDLYNAME, CMND_SWITCHMODE, CMND_WEBSERVER, CMND_WEBPASSWORD, CMND_WEBLOG, CMND_EMULATION, CMND_TELEPERIOD, CMND_RESTART, CMND_RESET, CMND_TIMEZONE, CMND_ALTITUDE, CMND_LEDPOWER, CMND_LEDSTATE, - CMND_CFGDUMP, CMND_I2CSCAN, CMND_SERIALSEND, CMND_BAUDRATE, CMND_SERIALDELIMITER, CMND_EXCEPTION }; + CMND_I2CSCAN, CMND_SERIALSEND, CMND_BAUDRATE, CMND_SERIALDELIMITER }; const char kTasmotaCommands[] PROGMEM = D_CMND_BACKLOG "|" D_CMND_DELAY "|" D_CMND_POWER "|" D_CMND_STATUS "|" D_CMND_STATE "|" D_CMND_POWERONSTATE "|" D_CMND_PULSETIME "|" D_CMND_BLINKTIME "|" D_CMND_BLINKCOUNT "|" D_CMND_SENSOR "|" D_CMND_SAVEDATA "|" D_CMND_SETOPTION "|" D_CMND_TEMPERATURE_RESOLUTION "|" D_CMND_HUMIDITY_RESOLUTION "|" @@ -94,11 +94,7 @@ const char kTasmotaCommands[] PROGMEM = D_CMND_LOGHOST "|" D_CMND_LOGPORT "|" D_CMND_IPADDRESS "|" D_CMND_NTPSERVER "|" D_CMND_AP "|" D_CMND_SSID "|" D_CMND_PASSWORD "|" D_CMND_HOSTNAME "|" D_CMND_WIFICONFIG "|" D_CMND_FRIENDLYNAME "|" D_CMND_SWITCHMODE "|" D_CMND_WEBSERVER "|" D_CMND_WEBPASSWORD "|" D_CMND_WEBLOG "|" D_CMND_EMULATION "|" D_CMND_TELEPERIOD "|" D_CMND_RESTART "|" D_CMND_RESET "|" D_CMND_TIMEZONE "|" D_CMND_ALTITUDE "|" D_CMND_LEDPOWER "|" D_CMND_LEDSTATE "|" - D_CMND_CFGDUMP "|" D_CMND_I2CSCAN "|" D_CMND_SERIALSEND "|" D_CMND_BAUDRATE "|" D_CMND_SERIALDELIMITER -#ifdef DEBUG_THEO - "|" D_CMND_EXCEPTION -#endif - ; + D_CMND_I2CSCAN "|" D_CMND_SERIALSEND "|" D_CMND_BAUDRATE "|" D_CMND_SERIALDELIMITER; const char kOptionOff[] PROGMEM = "OFF|" D_OFF "|" D_FALSE "|" D_STOP "|" D_CELSIUS ; const char kOptionOn[] PROGMEM = "ON|" D_ON "|" D_TRUE "|" D_START "|" D_FAHRENHEIT "|" D_USER ; @@ -1068,10 +1064,6 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len) } snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_NVALUE, command, Settings.ledstate); } - else if (CMND_CFGDUMP == command_code) { - SettingsDump(dataBuf); - snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_SVALUE, command, D_JSON_DONE); - } #ifdef USE_I2C else if ((CMND_I2CSCAN == command_code) && i2c_flg) { I2cScan(mqtt_data, sizeof(mqtt_data)); @@ -1080,12 +1072,6 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len) else if (XdrvCommand(grpflg, type, index, dataBuf, data_len, payload, payload16)) { // Serviced } -#ifdef DEBUG_THEO - else if (CMND_EXCEPTION == command_code) { - if (data_len > 0) ExceptionTest(payload); - snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_SVALUE, command, D_JSON_DONE); - } -#endif // DEBUG_THEO else { type = NULL; } @@ -2055,9 +2041,9 @@ void SerialInput() } /*-------------------------------------------------------------------------------------------*\ - * Sonoff S31 4800 baud serial interface + * Sonoff S31 and Sonoff Pow R2 4800 baud serial interface \*-------------------------------------------------------------------------------------------*/ - if (SONOFF_S31 == Settings.module) { + if ((SONOFF_S31 == Settings.module) || (SONOFF_POW_R2 == Settings.module)) { if (CseSerialInput()) { serial_in_byte_counter = 0; Serial.flush(); diff --git a/sonoff/sonoff_post.h b/sonoff/sonoff_post.h index d488f4ea4..47a752c72 100644 --- a/sonoff/sonoff_post.h +++ b/sonoff/sonoff_post.h @@ -86,8 +86,6 @@ void KNX_CB_Action(message_t const &msg, void *arg); #define USE_DS18B20 // Default DS18B20 sensor needs no external library #endif -//#define DEBUG_THEO // Add debug code - #ifdef BE_MINIMAL // ========================== Configure sonoff-minimal.bin ===================== #ifdef USE_MQTT_TLS #undef USE_MQTT_TLS // Disable TLS support won't work as the MQTTHost is not set @@ -113,6 +111,9 @@ void KNX_CB_Action(message_t const &msg, void *arg); #ifdef USE_SUNRISE #undef USE_SUNRISE // Disable support for Sunrise and sunset tools #endif +#ifdef USE_KNX +#undef USE_KNX // Disable KNX IP Protocol Support +#endif #ifdef USE_PZEM004T #undef USE_PZEM004T // Disable PZEM004T energy sensor #endif diff --git a/sonoff/sonoff_template.h b/sonoff/sonoff_template.h index cbb197abb..b3f95152f 100644 --- a/sonoff/sonoff_template.h +++ b/sonoff/sonoff_template.h @@ -91,6 +91,8 @@ enum UserSelectablePins { GPIO_SDS0X1, // Nova Fitness SDS011 Serial interface GPIO_SBR_TX, // Serial Bridge Serial interface GPIO_SBR_RX, // Serial Bridge Serial interface + GPIO_SR04_TRIG, // SR04 Trigger pin + GPIO_SR04_ECHO, // SR04 Echo pin GPIO_SENSOR_END }; // Programmer selectable GPIO functionality offset by user selectable GPIOs @@ -133,7 +135,8 @@ const char kSensorNames[] PROGMEM = D_SENSOR_SAIR_TX "|" D_SENSOR_SAIR_RX "|" D_SENSOR_SPI_CS "|" D_SENSOR_SPI_DC "|" D_SENSOR_BACKLIGHT "|" D_SENSOR_PMS5003 "|" D_SENSOR_SDS0X1 "|" - D_SENSOR_SBR_TX "|" D_SENSOR_SBR_RX; + D_SENSOR_SBR_TX "|" D_SENSOR_SBR_RX "|" + D_SENSOR_SR04_TRIG "|" D_SENSOR_SR04_ECHO; /********************************************************************************************/ @@ -181,6 +184,7 @@ enum SupportedModules { ARILUX_LC06, SONOFF_S31, ZENGGE_ZF_WF017, + SONOFF_POW_R2, MAXMODULE }; /********************************************************************************************/ @@ -205,6 +209,7 @@ const uint8_t kNiceList[MAXMODULE] PROGMEM = { SONOFF_DUAL, SONOFF_DUAL_R2, SONOFF_POW, + SONOFF_POW_R2, SONOFF_S31, SONOFF_4CH, SONOFF_4CHPRO, @@ -318,7 +323,7 @@ const mytmplt kModules[MAXMODULE] PROGMEM = { GPIO_USER, // GPIO14 Optional sensor 0, 0, 0 }, - { "Sonoff Pow", // Sonoff Pow (ESP8266) + { "Sonoff Pow", // Sonoff Pow (ESP8266 - HLW8012) GPIO_KEY1, // GPIO00 Button 0, 0, 0, 0, GPIO_HLW_SEL, // GPIO05 HLW8012 Sel output @@ -326,7 +331,7 @@ const mytmplt kModules[MAXMODULE] PROGMEM = { GPIO_REL1, // GPIO12 Red Led and Relay (0 = Off, 1 = On) GPIO_HLW_CF1, // GPIO13 HLW8012 CF1 voltage / current GPIO_HLW_CF, // GPIO14 HLW8012 CF power - GPIO_LED1, // GPIO15 Green Led (0 = On, 1 = Off) + GPIO_LED1, // GPIO15 Blue Led (0 = On, 1 = Off) 0, 0 }, { "Sonoff 4CH", // Sonoff 4CH (ESP8285) @@ -494,7 +499,7 @@ const mytmplt kModules[MAXMODULE] PROGMEM = { GPIO_ADC0 // ADC0 A0 Analog input }, { "H801", // Lixada H801 Wifi (ESP8266) - GPIO_KEY1, // GPIO00 E-FW Button + GPIO_USER, // GPIO00 E-FW Button GPIO_LED1, // GPIO01 Green LED GPIO_TXD, // GPIO02 RX - Pin next to TX on the PCB GPIO_RXD, // GPIO03 TX - Pin next to GND on the PCB @@ -781,7 +786,7 @@ const mytmplt kModules[MAXMODULE] PROGMEM = { GPIO_USER, // GPIO15 RGBW LED White 0, 0 }, - { "Sonoff S31", // Sonoff S31 (ESP8266) + { "Sonoff S31", // Sonoff S31 (ESP8266 - CSE7766) GPIO_KEY1, // GPIO00 Button 0, // GPIO01 Serial RXD 4800 baud 8E1 CSE7766 energy sensor 0, @@ -804,6 +809,17 @@ const mytmplt kModules[MAXMODULE] PROGMEM = { GPIO_PWM1, // GPIO13 RGB LED Red GPIO_PWM3, // GPIO14 RGB LED Blue 0, 0, 0 + }, + { "Sonoff Pow R2", // Sonoff Pow R2 (ESP8285 - CSE7766) + GPIO_KEY1, // GPIO00 Button + 0, // GPIO01 Serial RXD 4800 baud 8E1 CSE7766 energy sensor + 0, + 0, // GPIO03 Serial TXD + 0, 0, + 0, 0, 0, 0, 0, 0, // Flash connection + GPIO_REL1, // GPIO12 Red Led and Relay (0 = Off, 1 = On) + GPIO_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) + 0, 0, 0, 0 } }; diff --git a/sonoff/support.ino b/sonoff/support.ino index 4d1e51516..34d271644 100644 --- a/sonoff/support.ino +++ b/sonoff/support.ino @@ -78,72 +78,6 @@ String GetResetReason() } } -#ifdef DEBUG_THEO -void ExceptionTest(byte type) -{ -/* -Exception (28): -epc1=0x4000bf64 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000007 depc=0x00000000 - -ctx: cont -sp: 3fff1f30 end: 3fff2840 offset: 01a0 - ->>>stack>>> -3fff20d0: 202c3573 756f7247 2c302070 646e4920 -3fff20e0: 40236a6e 7954202c 45206570 00454358 -3fff20f0: 00000010 00000007 00000000 3fff2180 -3fff2100: 3fff2190 40107bfc 3fff3e4c 3fff22c0 -3fff2110: 40261934 000000f0 3fff22c0 401004d8 -3fff2120: 40238fcf 00000050 3fff2100 4021fc10 -3fff2130: 3fff32bc 4021680c 3ffeade1 4021ff7d -3fff2140: 3fff2190 3fff2180 0000000c 7fffffff -3fff2150: 00000019 00000000 00000000 3fff21c0 -3fff2160: 3fff23f3 3ffe8e08 00000000 4021ffb4 -3fff2170: 3fff2190 3fff2180 0000000c 40201118 -3fff2180: 3fff21c0 0000003c 3ffef840 00000007 -3fff2190: 00000000 00000000 00000000 40201128 -3fff21a0: 3fff23f3 000000f1 3fff23ec 4020fafb -3fff21b0: 3fff23f3 3fff21c0 3fff21d0 3fff23f6 -3fff21c0: 00000000 3fff23fb 4022321b 00000000 - -Exception 28: LoadProhibited: A load referenced a page mapped with an attribute that does not permit loads -Decoding 14 results -0x40236a6e: ets_vsnprintf at ?? line ? -0x40107bfc: vsnprintf at C:\Data2\Arduino\arduino-1.8.1-esp-2.3.0\portable\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/libc_replacements.c line 387 -0x40261934: bignum_exptmod at ?? line ? -0x401004d8: malloc at C:\Data2\Arduino\arduino-1.8.1-esp-2.3.0\portable\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\umm_malloc/umm_malloc.c line 1664 -0x40238fcf: wifi_station_get_connect_status at ?? line ? -0x4021fc10: operator new[](unsigned int) at C:\Data2\Arduino\arduino-1.8.1-esp-2.3.0\portable\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/abi.cpp line 57 -0x4021680c: ESP8266WiFiSTAClass::status() at C:\Data2\Arduino\arduino-1.8.1-esp-2.3.0\portable\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/ESP8266WiFiSTA.cpp line 569 -0x4021ff7d: vsnprintf_P(char*, unsigned int, char const*, __va_list_tag) at C:\Data2\Arduino\arduino-1.8.1-esp-2.3.0\portable\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/pgmspace.cpp line 146 -0x4021ffb4: snprintf_P(char*, unsigned int, char const*, ...) at C:\Data2\Arduino\arduino-1.8.1-esp-2.3.0\portable\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/pgmspace.cpp line 146 -0x40201118: atol at C:\Data2\Arduino\arduino-1.8.1-esp-2.3.0\portable\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/core_esp8266_noniso.c line 45 -0x40201128: atoi at C:\Data2\Arduino\arduino-1.8.1-esp-2.3.0\portable\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/core_esp8266_noniso.c line 45 -0x4020fafb: MqttDataHandler(char*, unsigned char*, unsigned int) at R:\Arduino\Work-ESP8266\Theo\sonoff\sonoff-4\sonoff/sonoff.ino line 679 (discriminator 1) -0x4022321b: pp_attach at ?? line ? - -00:00:08 MQTT: tele/sonoff/INFO3 = {"Started":"Fatal exception:28 flag:2 (EXCEPTION) epc1:0x4000bf64 epc2:0x00000000 epc3:0x00000000 excvaddr:0x00000007 depc:0x00000000"} -*/ - if (1 == type) { - char svalue[10]; - snprintf_P(svalue, sizeof(svalue), PSTR("%s"), 7); // Exception 28 as number in string (7 in excvaddr) - } -/* -14:50:52 osWatch: FreeRam 25896, rssi 68, last_run 0 -14:51:02 osWatch: FreeRam 25896, rssi 58, last_run 0 -14:51:03 CMND: exception 2 -14:51:12 osWatch: FreeRam 25360, rssi 60, last_run 8771 -14:51:22 osWatch: FreeRam 25360, rssi 62, last_run 18771 -14:51:32 osWatch: FreeRam 25360, rssi 62, last_run 28771 -14:51:42 osWatch: FreeRam 25360, rssi 62, last_run 38771 -14:51:42 osWatch: Warning, loop blocked. Restart now -*/ - if (2 == type) { - while(1) delay(1000); // this will trigger the os watch - } -} -#endif // DEBUG_THEO - /*********************************************************************************************\ * Miscellaneous \*********************************************************************************************/ @@ -298,6 +232,19 @@ char* UpperCase_P(char* dest, const char* source) return dest; } +char* NoAlNumToUnderscore(char* dest, const char* source) +{ + char* write = dest; + const char* read = source; + char ch = '.'; + + while (ch != '\0') { + ch = *read++; + *write++ = (isalnum(ch) || ('\0' == ch)) ? ch : '_'; + } + return dest; +} + boolean ParseIp(uint32_t* addr, const char* str) { uint8_t *part = (uint8_t*)addr; diff --git a/sonoff/user_config.h b/sonoff/user_config.h index 884ba8376..05950abd0 100644 --- a/sonoff/user_config.h +++ b/sonoff/user_config.h @@ -165,8 +165,10 @@ // -- Localization -------------------------------- // If non selected the default en-GB will be used +//#define MY_LANGUAGE bg-BG // Bulgarian in Bulgaria //#define MY_LANGUAGE cs-CZ // Czech in Czech //#define MY_LANGUAGE de-DE // German in Germany +//#define MY_LANGUAGE el-GR // Greek in Greece //#define MY_LANGUAGE en-GB // English in Great Britain. Enabled by Default //#define MY_LANGUAGE es-AR // Spanish in Argentina //#define MY_LANGUAGE fr-FR // French in France @@ -284,6 +286,8 @@ #define USE_ARILUX_RF // Add support for Arilux RF remote controller (+0k8 code, 252 iram (non 2.3.0)) +#define USE_SR04 // Add support for HC-SR04 ultrasonic devices (+1k code) + /*********************************************************************************************\ * Select all sensors - overrides above undefines!! \*********************************************************************************************/ diff --git a/sonoff/webserver.ino b/sonoff/webserver.ino index 38198826e..1dc3eda52 100644 --- a/sonoff/webserver.ino +++ b/sonoff/webserver.ino @@ -396,9 +396,7 @@ void StartWebserver(int type, IPAddress ipweb) my_hostname, (mdns_begun) ? ".local" : "", ipweb.toString().c_str()); AddLog(LOG_LEVEL_INFO); } - if (type) { - webserver_state = type; - } + if (type) { webserver_state = type; } } void StopWebserver() @@ -435,12 +433,8 @@ void WifiManagerBegin() void PollDnsWebserver() { - if (DnsServer) { - DnsServer->processNextRequest(); - } - if (WebServer) { - WebServer->handleClient(); - } + if (DnsServer) { DnsServer->processNextRequest(); } + if (WebServer) { WebServer->handleClient(); } } /*********************************************************************************************/ @@ -495,9 +489,7 @@ void HandleRoot() { AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_MAIN_MENU); - if (CaptivePortal()) { // If captive portal redirect instead of displaying the page. - return; - } + if (CaptivePortal()) { return; } // If captive portal redirect instead of displaying the page. if (HTTP_MANAGER == webserver_state) { if ((Settings.web_password[0] != 0) && !(WebServer->hasArg("USER1")) && !(WebServer->hasArg("PASS1"))) { @@ -549,9 +541,7 @@ void HandleRoot() page += F(""); byte idx = 0; for (byte i = 0; i < 4; i++) { - if (idx > 0) { - page += F(""); - } + if (idx > 0) { page += F(""); } for (byte j = 0; j < 4; j++) { idx++; snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR(""), idx, idx); @@ -620,17 +610,13 @@ void HandleAjaxStatusRefresh() boolean HttpUser() { boolean status = (HTTP_USER == webserver_state); - if (status) { - HandleRoot(); - } + if (status) { HandleRoot(); } return status; } void HandleConfiguration() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURATION); String page = FPSTR(HTTP_HEAD); @@ -638,10 +624,10 @@ void HandleConfiguration() page += FPSTR(HTTP_HEAD_STYLE); page += FPSTR(HTTP_BTN_MENU_MODULE); #if defined(USE_TIMERS) && defined(USE_TIMERS_WEB) - if (devices_present) page += FPSTR(HTTP_BTN_MENU_TIMER); + if (devices_present) { page += FPSTR(HTTP_BTN_MENU_TIMER); } #endif // USE_TIMERS and USE_TIMERS_WEB page += FPSTR(HTTP_BTN_MENU_WIFI); - if (Settings.flag.mqtt_enabled) page += FPSTR(HTTP_BTN_MENU_MQTT); + if (Settings.flag.mqtt_enabled) { page += FPSTR(HTTP_BTN_MENU_MQTT); } page += FPSTR(HTTP_BTN_MENU4); page += FPSTR(HTTP_BTN_MAIN); ShowPage(page); @@ -651,26 +637,20 @@ boolean GetUsedInModule(byte val, uint8_t *arr) { int offset = 0; - if (!val) { - return false; // None - } + if (!val) { return false; } // None #ifndef USE_I2C - if (GPIO_I2C_SCL == val) { - return true; - } - if (GPIO_I2C_SDA == val) { - return true; - } + if (GPIO_I2C_SCL == val) { return true; } + if (GPIO_I2C_SDA == val) { return true; } +#endif +#ifndef USE_SR04 + if (GPIO_SR04_TRIG == val) { return true; } + if (GPIO_SR04_ECHO == val) { return true; } #endif #ifndef USE_WS2812 - if (GPIO_WS2812 == val) { - return true; - } + if (GPIO_WS2812 == val) { return true; } #endif #ifndef USE_IR_REMOTE - if (GPIO_IRSEND == val) { - return true; - } + if (GPIO_IRSEND == val) { return true; } #endif if ((val >= GPIO_REL1) && (val < GPIO_REL1 + MAX_RELAYS)) { offset = (GPIO_REL1_INV - GPIO_REL1); @@ -693,21 +673,15 @@ boolean GetUsedInModule(byte val, uint8_t *arr) offset = -(GPIO_PWM1_INV - GPIO_PWM1); } for (byte i = 0; i < MAX_GPIO_PIN; i++) { - if (arr[i] == val) { - return true; - } - if (arr[i] == val + offset) { - return true; - } + if (arr[i] == val) { return true; } + if (arr[i] == val + offset) { return true; } } return false; } void HandleModuleConfiguration() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } char stemp[20]; uint8_t midx; @@ -777,9 +751,7 @@ void HandleWifiConfiguration() void HandleWifi(boolean scan) { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_WIFI); @@ -818,15 +790,13 @@ void HandleWifi(boolean scan) if (remove_duplicate_access_points) { String cssid; for (int i = 0; i < n; i++) { - if (-1 == indices[i]) { - continue; - } + if (-1 == indices[i]) { continue; } cssid = WiFi.SSID(indices[i]); for (int j = i + 1; j < n; j++) { if (cssid == WiFi.SSID(indices[j])) { snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_WIFI D_DUPLICATE_ACCESSPOINT " %s"), WiFi.SSID(indices[j]).c_str()); AddLog(LOG_LEVEL_DEBUG); - indices[j] = -1; // set dup aps to index -1 + indices[j] = -1; // set dup aps to index -1 } } } @@ -834,9 +804,7 @@ void HandleWifi(boolean scan) //display networks in page for (int i = 0; i < n; i++) { - if (-1 == indices[i]) { - continue; // skip dups - } + if (-1 == indices[i]) { continue; } // skip dups snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_WIFI D_SSID " %s, " D_RSSI " %d"), WiFi.SSID(indices[i]).c_str(), WiFi.RSSI(indices[i])); AddLog(LOG_LEVEL_DEBUG); int quality = WifiGetRssiAsQuality(WiFi.RSSI(indices[i])); @@ -878,9 +846,7 @@ void HandleWifi(boolean scan) void HandleMqttConfiguration() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_MQTT); String page = FPSTR(HTTP_HEAD); @@ -903,9 +869,7 @@ void HandleMqttConfiguration() void HandleLoggingConfiguration() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_LOGGING); String page = FPSTR(HTTP_HEAD); @@ -952,9 +916,7 @@ void HandleLoggingConfiguration() void HandleOtherConfiguration() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_OTHER); char stemp[40]; @@ -990,9 +952,7 @@ void HandleOtherConfiguration() void HandleBackupConfiguration() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_BACKUP_CONFIGURATION)); uint8_t buffer[sizeof(Settings)]; @@ -1001,7 +961,8 @@ void HandleBackupConfiguration() WebServer->setContentLength(sizeof(buffer)); char attachment[100]; - snprintf_P(attachment, sizeof(attachment), PSTR("attachment; filename=Config_%s_%s.dmp"), Settings.friendlyname[0], my_version); + char friendlyname[sizeof(Settings.friendlyname[0])]; + snprintf_P(attachment, sizeof(attachment), PSTR("attachment; filename=Config_%s_%s.dmp"), NoAlNumToUnderscore(friendlyname, Settings.friendlyname[0]), my_version); WebServer->sendHeader(F("Content-Disposition"), attachment); WebServer->send(200, FPSTR(HDR_CTYPE_STREAM), ""); memcpy(buffer, &Settings, sizeof(buffer)); @@ -1017,9 +978,7 @@ void HandleBackupConfiguration() void HandleSaveSettings() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } char stemp[TOPSZ]; char stemp2[TOPSZ]; @@ -1185,9 +1144,7 @@ void HandleSaveSettings() void HandleResetConfiguration() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } char svalue[33]; @@ -1207,9 +1164,7 @@ void HandleResetConfiguration() void HandleRestoreConfiguration() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_RESTORE_CONFIGURATION); String page = FPSTR(HTTP_HEAD); @@ -1227,9 +1182,7 @@ void HandleRestoreConfiguration() void HandleUpgradeFirmware() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_FIRMWARE_UPGRADE); String page = FPSTR(HTTP_HEAD); @@ -1248,9 +1201,7 @@ void HandleUpgradeFirmware() void HandleUpgradeFirmwareStart() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } char svalue[100]; AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_UPGRADE_STARTED)); @@ -1277,9 +1228,7 @@ void HandleUpgradeFirmwareStart() void HandleUploadDone() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_UPLOAD_DONE)); char error[100]; @@ -1326,13 +1275,9 @@ void HandleUploadLoop() // Based on ESP8266HTTPUpdateServer.cpp uses ESP8266WebServer Parsing.cpp and Cores Updater.cpp (Update) boolean _serialoutput = (LOG_LEVEL_DEBUG <= seriallog_level); - if (HTTP_USER == webserver_state) { - return; - } + if (HTTP_USER == webserver_state) { return; } if (upload_error) { - if (!upload_file_type) { - Update.end(); - } + if (!upload_file_type) { Update.end(); } return; } @@ -1407,9 +1352,7 @@ void HandleUploadLoop() if (_serialoutput) { Serial.printf("."); upload_progress_dot_count++; - if (!(upload_progress_dot_count % 80)) { - Serial.println(); - } + if (!(upload_progress_dot_count % 80)) { Serial.println(); } } } } else if(!upload_error && (UPLOAD_FILE_END == upload.status)) { @@ -1418,9 +1361,7 @@ void HandleUploadLoop() } if (!upload_file_type) { if (!Update.end(true)) { // true to set the size to the current progress - if (_serialoutput) { - Update.printError(Serial); - } + if (_serialoutput) { Update.printError(Serial); } upload_error = 6; return; } @@ -1433,9 +1374,7 @@ void HandleUploadLoop() restart_flag = 0; MqttRetryCounter(0); upload_error = 7; - if (!upload_file_type) { - Update.end(); - } + if (!upload_file_type) { Update.end(); } } delay(0); } @@ -1450,9 +1389,7 @@ void HandlePreflightRequest() void HandleHttpCommand() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } char svalue[INPUT_BUFFER_SIZE]; // big to serve Backlog AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_COMMAND)); @@ -1472,12 +1409,7 @@ void HandleHttpCommand() if (valid) { byte curridx = web_log_index; WebGetArg("cmnd", svalue, sizeof(svalue)); - if (strlen(svalue)) { -// byte syslog_now = syslog_level; -// syslog_level = 0; // Disable UDP syslog to not trigger hardware WDT - Seems to work fine since 5.7.1d (global logging) - ExecuteCommand(svalue); -// syslog_level = syslog_now; - } + if (strlen(svalue)) { ExecuteCommand(svalue); } if (web_log_index != curridx) { byte counter = curridx; @@ -1490,9 +1422,7 @@ void HandleHttpCommand() // [14:49:36 MQTT: stat/wemos5/RESULT = {"POWER":"OFF"}] > [{"POWER":"OFF"}] char* JSON = (char*)memchr(tmp, '{', len); if (JSON) { // Is it a JSON message (and not only [15:26:08 MQT: stat/wemos5/POWER = O]) - if (message.length() > 1) { - message += F(","); - } + if (message.length() > 1) { message += F(","); } size_t JSONlen = len - (JSON - tmp); strlcpy(mqtt_data, JSON +1, JSONlen -2); message += mqtt_data; @@ -1514,10 +1444,7 @@ void HandleHttpCommand() void HandleConsole() { - if (HttpUser()) { - return; - } - + if (HttpUser()) { return; } AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONSOLE); String page = FPSTR(HTTP_HEAD); @@ -1532,9 +1459,7 @@ void HandleConsole() void HandleAjaxConsoleRefresh() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } char svalue[INPUT_BUFFER_SIZE]; // big to serve Backlog byte cflg = 1; byte counter = 0; // Initial start, should never be 0 again @@ -1543,16 +1468,11 @@ void HandleAjaxConsoleRefresh() if (strlen(svalue)) { snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_COMMAND "%s"), svalue); AddLog(LOG_LEVEL_INFO); -// byte syslog_now = syslog_level; -// syslog_level = 0; // Disable UDP syslog to not trigger hardware WDT - Seems to work fine since 5.7.1d (global logging) ExecuteCommand(svalue); -// syslog_level = syslog_now; } WebGetArg("c2", svalue, sizeof(svalue)); - if (strlen(svalue)) { - counter = atoi(svalue); - } + if (strlen(svalue)) { counter = atoi(svalue); } byte last_reset_web_log_flag = reset_web_log_flag; String message = F("}9"); // Cannot load mqtt_data here as <> will be encoded by replacements below @@ -1579,7 +1499,7 @@ void HandleAjaxConsoleRefresh() message += mqtt_data; } counter++; - if (!counter) counter++; // Skip 0 as it is not allowed + if (!counter) { counter++; } // Skip 0 as it is not allowed } while (counter != web_log_index); // XML encoding to fix blank console log in concert with javascript decodeURIComponent message.replace(F("%"), F("%25")); // Needs to be done first as otherwise the % in %26 will also be converted @@ -1595,9 +1515,7 @@ void HandleAjaxConsoleRefresh() void HandleInformation() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_INFORMATION); char stopic[TOPSZ]; @@ -1711,9 +1629,7 @@ void HandleInformation() void HandleRestart() { - if (HttpUser()) { - return; - } + if (HttpUser()) { return; } AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_RESTART); String page = FPSTR(HTTP_HEAD); @@ -1737,9 +1653,7 @@ void HandleNotFound() // snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_HTTP "Not fount (%s)"), WebServer->uri().c_str()); // AddLog(LOG_LEVEL_DEBUG); - if (CaptivePortal()) { // If captive portal redirect instead of displaying the error page. - return; - } + if (CaptivePortal()) { return; } // If captive portal redirect instead of displaying the error page. #ifdef USE_EMULATION String path = WebServer->uri(); @@ -1777,9 +1691,7 @@ boolean ValidIpAddress(String str) { for (uint16_t i = 0; i < str.length(); i++) { int c = str.charAt(i); - if (c != '.' && (c < '0' || c > '9')) { - return false; - } + if (c != '.' && (c < '0' || c > '9')) { return false; } } return true; } diff --git a/sonoff/xdrv_03_energy.ino b/sonoff/xdrv_03_energy.ino index a1052a077..fc70751bf 100644 --- a/sonoff/xdrv_03_energy.ino +++ b/sonoff/xdrv_03_energy.ino @@ -252,7 +252,7 @@ void HlwInit() } /*********************************************************************************************\ - * CSE7766 - Energy (Sonoff S31) + * CSE7766 - Energy (Sonoff S31 and Sonoff Pow R2) * * Based on datasheet from http://www.chipsea.com/UploadFiles/2017/08/11144342F01B5662.pdf \*********************************************************************************************/ @@ -1015,9 +1015,9 @@ boolean EnergyCommand() void EnergyDrvInit() { energy_flg = ENERGY_NONE; - if ((pin[GPIO_HLW_SEL] < 99) && (pin[GPIO_HLW_CF1] < 99) && (pin[GPIO_HLW_CF] < 99)) { // Sonoff Pow + if ((pin[GPIO_HLW_SEL] < 99) && (pin[GPIO_HLW_CF1] < 99) && (pin[GPIO_HLW_CF] < 99)) { // Sonoff Pow or any HLW8012 based device energy_flg = ENERGY_HLW8012; - } else if (SONOFF_S31 == Settings.module) { // Sonoff S31 + } else if ((SONOFF_S31 == Settings.module) || (SONOFF_POW_R2 == Settings.module)) { // Sonoff S31 or Sonoff Pow R2 baudrate = 4800; serial_config = SERIAL_8E1; energy_flg = ENERGY_CSE7766; diff --git a/sonoff/xdrv_09_timers.ino b/sonoff/xdrv_09_timers.ino index 65dfd0136..82884ab4e 100644 --- a/sonoff/xdrv_09_timers.ino +++ b/sonoff/xdrv_09_timers.ino @@ -491,17 +491,17 @@ const char HTTP_TIMER_SCRIPT[] PROGMEM = "m=qs('input[name=\"rd\"]:checked').value;" // Get mode "p=pt[ct]&0x7FF;" // Get time "if(m==0){" // Time is set + "so(0);" // Hide offset span and allow Hour 00..23 "q=Math.floor(p/60);if(q<10){q='0'+q;}qs('#ho').value=q;" // Set hours "q=p%60;if(q<10){q='0'+q;}qs('#mi').value=q;" // Set minutes - "so(0);" // Schedule time, hide offset span "}" "if((m==1)||(m==2)){" // Sunrise or sunset is set + "so(1);" // Show offset span and allow Hour 00..11 "q=Math.floor(p/60);" // Parse hours "if(q>=12){q-=12;qs('#dr').selectedIndex=1;}" // Negative offset "else{qs('#dr').selectedIndex=0;}" "if(q<10){q='0'+q;}qs('#ho').value=q;" // Set offset hours "q=p%60;if(q<10){q='0'+q;}qs('#mi').value=q;" // Set offset minutes - "so(1);" // Show offset span "}" "}" "function so(b){" // Hide or show offset items @@ -536,7 +536,7 @@ const char HTTP_TIMER_SCRIPT[] PROGMEM = "s|=l&0x7FF;" // Save offset instead of time "}" #endif - "s|=((qs('#mw').selectedIndex)&0x0F)<<11;" // Get window minutes + "s|=((qs('#mw').selectedIndex)&0x0F)<<11;" // Get window minutes "pt[ct]=s;" "eb('t0').value=pt.join();" // Save parameters from array to hidden area "}" @@ -568,7 +568,7 @@ const char HTTP_TIMER_SCRIPT[] PROGMEM = "pt=eb('t0').value.split(',').map(Number);" // Get parameters from hidden area to array "s='';for(i=0;i<" STR(MAX_TIMERS) ";i++){b='';if(0==i){b=\" id='dP'\";}s+=\"\"}" "eb('bt').innerHTML=s;" // Create tabs -#ifdef USE_SUNRISE // NEW: Create offset options (+/- up to 11h, 59m) +#ifdef USE_SUNRISE "o=qs('#dr');ce('+',o);ce('-',o);" // Create offset direction select options #endif "o=qs('#ho');for(i=0;i<=23;i++){ce((i<10)?('0'+i):i,o);}" // Create hours select options diff --git a/sonoff/xdrv_11_knx.ino b/sonoff/xdrv_11_knx.ino index 734c22c54..76fc1cf0c 100644 --- a/sonoff/xdrv_11_knx.ino +++ b/sonoff/xdrv_11_knx.ino @@ -22,8 +22,7 @@ * KNX support * * Using libraries: - * ESP KNX IP library (async-udp branch) (https://github.com/envy/esp-knx-ip/tree/async-udp) - * ESPAsyncUDP library (https://github.com/me-no-dev/ESPAsyncUDP) + * ESP KNX IP library (https://github.com/envy/esp-knx-ip) Constants in sonoff.h ----------------------- @@ -870,8 +869,6 @@ boolean Xdrv11(byte function) break; case FUNC_LOOP: knx.loop(); // Process knx events - // It is not used by the actual config of asyncUDP branch of ESP-KNX-IP Library, - // but is left here for compatibility with upcoming features of ESP-KNX-IP Library break; // case FUNC_COMMAND: // result = KNXCommand(); diff --git a/sonoff/xsns_22_sr04.ino b/sonoff/xsns_22_sr04.ino new file mode 100644 index 000000000..5a3a7dc87 --- /dev/null +++ b/sonoff/xsns_22_sr04.ino @@ -0,0 +1,173 @@ +/* + xsns_22_sr04.ino - SR04 ultrasonic sensor support for Sonoff-Tasmota + + Copyright (C) 2018 Nuno Ferreira and Theo Arends + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifdef USE_SR04 +/*********************************************************************************************\ + * HC-SR04, HC-SR04+, JSN-SR04T - Ultrasonic distance sensor + * + * Code for SR04 family of ultrasonic distance sensors + * References: + * - https://www.dfrobot.com/wiki/index.php/Weather-proof_Ultrasonic_Sensor_SKU_:_SEN0207 +\*********************************************************************************************/ +#define max(a,b) ((a)>(b)?(a):(b)) + +uint8_t sr04_echo_pin = 0; +uint8_t sr04_trig_pin = 0; + +/*********************************************************************************************\ + * Embedded stripped and tuned NewPing library from Tim Eckel - teckel@leethost.com + * https://bitbucket.org/teckel12/arduino-new-ping +\*********************************************************************************************/ +#define US_ROUNDTRIP_CM 58 // Microseconds (uS) it takes sound to travel round-trip 1cm (2cm total), uses integer to save compiled code space. Default: 58 +#define US_ROUNDTRIP_IN 148 // Microseconds (uS) it takes sound to travel round-trip 1 inch (2 inches total), uses integer to save compiled code space. Default: 148 +#define PING_MEDIAN_DELAY 29000 +#define MAX_SENSOR_DISTANCE 500 +#define PING_OVERHEAD 5 + +// Conversion from uS to distance (round result to nearest cm or inch). +#define EchoConvert(echoTime, conversionFactor) (max(((unsigned int)echoTime + conversionFactor / 2) / conversionFactor, (echoTime ? 1 : 0))) + +/********************************************************************************************/ + +void Sr04Init() +{ + sr04_echo_pin = pin[GPIO_SR04_ECHO]; + sr04_trig_pin = pin[GPIO_SR04_TRIG]; + pinMode(sr04_trig_pin, OUTPUT); + pinMode(sr04_echo_pin, INPUT_PULLUP); +} + +boolean Sr04Read(uint16_t *distance) +{ + uint16_t duration = 0; + + *distance = 0; + + /* Send ping and get delay */ + duration = Sr04GetSamples(9, 250); + + /* Calculate the distance (in cm) based on the speed of sound. */ + *distance = EchoConvert(duration, US_ROUNDTRIP_CM); + + return 1; +} + +uint16_t Sr04Ping(uint16_t max_cm_distance) +{ + uint16_t duration = 0; + uint16_t maxEchoTime, maxTime; + + maxEchoTime = min(max_cm_distance + 1, (uint16_t) MAX_SENSOR_DISTANCE + 1) * US_ROUNDTRIP_CM; + + /* The following trigPin/echoPin cycle is used to determine the + distance of the nearest object by bouncing soundwaves off of it. */ + digitalWrite(sr04_trig_pin, LOW); + delayMicroseconds(2); + digitalWrite(sr04_trig_pin, HIGH); + delayMicroseconds(10); + digitalWrite(sr04_trig_pin, LOW); + + /* Wait for the echo */ + duration = pulseIn(sr04_echo_pin, HIGH, 26000) - PING_OVERHEAD; + + return (duration > maxEchoTime) ? 0 : duration; +} + +uint16_t Sr04GetSamples(uint8_t it, uint16_t max_cm_distance) { + uint16_t uS[it]; + uint16_t last; + uint8_t j; + uint8_t i = 0; + uint16_t t; + uS[0] = 0; + + while (i < it) { + t = micros(); + last = Sr04Ping(max_cm_distance); + + if (last != 0) { + if (i > 0) { + for (j = i; j > 0 && uS[j - 1] < last; j--) { + uS[j] = uS[j - 1]; + } + } else { + j = 0; + } + uS[j] = last; + i++; + } else { + it--; + } + if (i < it && micros() - t < PING_MEDIAN_DELAY) { + delay((PING_MEDIAN_DELAY + t - micros()) / 1000); + } + } + + return (uS[1]); // Return the ping distance from the 2nd highest reading +} + +#ifdef USE_WEBSERVER +const char HTTP_SNS_DISTANCE[] PROGMEM = + "%s{s}SR04 " D_DISTANCE "{m}%d" D_UNIT_CENTIMETER "{e}"; // {s} = , {m} = , {e} = +#endif // USE_WEBSERVER + +void Sr04Show(boolean json) +{ + uint16_t distance; + + if (Sr04Read(&distance)) { // Check if read failed + if(json) { + snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"SR04\":{\"" D_JSON_DISTANCE "\":%d}"), mqtt_data, distance); +#ifdef USE_WEBSERVER + } else { + snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_DISTANCE, mqtt_data, distance); +#endif // USE_WEBSERVER + } + } +} + +/*********************************************************************************************\ + * Interface +\*********************************************************************************************/ + +#define XSNS_22 + +boolean Xsns22(byte function) +{ + boolean result = false; + + if ((pin[GPIO_SR04_ECHO] < 99) && (pin[GPIO_SR04_TRIG] < 99)) { + switch (function) { + case FUNC_INIT: + Sr04Init(); + break; + case FUNC_JSON_APPEND: + Sr04Show(1); + break; +#ifdef USE_WEBSERVER + case FUNC_WEB_APPEND: + Sr04Show(0); + break; +#endif // USE_WEBSERVER + } + } + return result; +} + +#endif // USE_SR04