mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-26 20:26:32 +00:00
Merge branch 'arendst/development' into development
This commit is contained in:
commit
232b00da3d
@ -1,6 +1,6 @@
|
|||||||
## Sonoff-Tasmota
|
## 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.
|
||||||
|
|
||||||
[](https://github.com/arendst/Sonoff-Tasmota/releases/latest)
|
[](https://github.com/arendst/Sonoff-Tasmota/releases/latest)
|
||||||
[](https://github.com/arendst/Sonoff-Tasmota/releases/latest)
|
[](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)<img src="https://github.com/arendst/arendst.github.io/blob/master/media/sonoff_th.jpg" width="250" align="right" />
|
- [iTead Sonoff SV](https://www.itead.cc/smart-home/sonoff-sv.html)<img src="https://github.com/arendst/arendst.github.io/blob/master/media/sonoff_th.jpg" width="250" align="right" />
|
||||||
- [iTead Sonoff TH10/TH16 with temperature sensor](https://www.itead.cc/smart-home/sonoff-th.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 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](https://www.itead.cc/smart-home/sonoff-4ch.html)
|
||||||
- [iTead Sonoff 4CH Pro](https://www.itead.cc/smart-home/sonoff-4ch-pro.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)
|
- [iTead S20 Smart Socket](https://www.itead.cc/smart-socket.html)
|
||||||
|
@ -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 [](https://travis-ci.org/me-no-dev/ESPAsyncUDP)
|
|
||||||
|
|
||||||
[](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
|
|
@ -1,51 +0,0 @@
|
|||||||
#include <ESP8266WiFi.h>
|
|
||||||
#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);
|
|
||||||
}
|
|
@ -1,52 +0,0 @@
|
|||||||
#include <ESP8266WiFi.h>
|
|
||||||
#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?");
|
|
||||||
}
|
|
@ -1,50 +0,0 @@
|
|||||||
#include <ESP8266WiFi.h>
|
|
||||||
#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?");
|
|
||||||
}
|
|
@ -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)
|
|
||||||
#######################################
|
|
@ -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"
|
|
||||||
}
|
|
@ -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=*
|
|
@ -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<ip_hdr*>(data - UDP_HLEN - IP_HLEN);
|
|
||||||
ip_addr_t daddr;
|
|
||||||
daddr.addr = iphdr->dest.addr;
|
|
||||||
|
|
||||||
udp_hdr* udphdr = reinterpret_cast<udp_hdr*>(((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<AsyncUDP*>(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<uint8_t*>(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());
|
|
||||||
}
|
|
@ -1,130 +0,0 @@
|
|||||||
#ifndef ESPASYNCUDP_H
|
|
||||||
#define ESPASYNCUDP_H
|
|
||||||
|
|
||||||
#include "IPAddress.h"
|
|
||||||
#include "Print.h"
|
|
||||||
#include <functional>
|
|
||||||
#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<void(AsyncUDPPacket& packet)> AuPacketHandlerFunction;
|
|
||||||
typedef std::function<void(void * arg, AsyncUDPPacket& packet)> 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
|
|
@ -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
|
|
||||||
}
|
|
@ -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.
|
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.
|
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 ##
|
## How to use ##
|
||||||
|
|
||||||
The library is under development. API may change multiple times in the future.
|
The library is under development. API may change multiple times in the future.
|
@ -73,7 +73,9 @@ void ESPKNXIP::send(address_t const &receiver, knx_command_type_t ct, uint8_t da
|
|||||||
DEBUG_PRINTLN(F(""));
|
DEBUG_PRINTLN(F(""));
|
||||||
#endif
|
#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)
|
void ESPKNXIP::send_1bit(address_t const &receiver, knx_command_type_t ct, uint8_t bit)
|
@ -96,10 +96,7 @@ void ESPKNXIP::__start()
|
|||||||
server->begin();
|
server->begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
udp.listenMulticast(MULTICAST_IP, MULTICAST_PORT);
|
udp.beginMulticast(WiFi.localIP(), MULTICAST_IP, MULTICAST_PORT);
|
||||||
udp.onPacket([this](AsyncUDPPacket &packet) {
|
|
||||||
DEBUG_PRINTLN("got packet");
|
|
||||||
__loop_knx(packet); });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ESPKNXIP::save_to_eeprom()
|
void ESPKNXIP::save_to_eeprom()
|
||||||
@ -514,6 +511,7 @@ feedback_id_t ESPKNXIP::feedback_register_action(String name, feedback_action_fp
|
|||||||
|
|
||||||
void ESPKNXIP::loop()
|
void ESPKNXIP::loop()
|
||||||
{
|
{
|
||||||
|
__loop_knx();
|
||||||
if (server != nullptr)
|
if (server != nullptr)
|
||||||
{
|
{
|
||||||
__loop_webserver();
|
__loop_webserver();
|
||||||
@ -525,9 +523,9 @@ void ESPKNXIP::__loop_webserver()
|
|||||||
server->handleClient();
|
server->handleClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ESPKNXIP::__loop_knx(AsyncUDPPacket &packet)
|
void ESPKNXIP::__loop_knx()
|
||||||
{
|
{
|
||||||
size_t read = packet.length();
|
int read = udp.parsePacket();
|
||||||
if (!read)
|
if (!read)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -536,11 +534,14 @@ void ESPKNXIP::__loop_knx(AsyncUDPPacket &packet)
|
|||||||
DEBUG_PRINT(F("LEN: "));
|
DEBUG_PRINT(F("LEN: "));
|
||||||
DEBUG_PRINTLN(read);
|
DEBUG_PRINTLN(read);
|
||||||
|
|
||||||
uint8_t *buf = packet.data();
|
uint8_t buf[read];
|
||||||
|
|
||||||
|
udp.read(buf, read);
|
||||||
|
udp.flush();
|
||||||
|
|
||||||
DEBUG_PRINT(F("Got packet:"));
|
DEBUG_PRINT(F("Got packet:"));
|
||||||
#ifdef ESP_KNX_DEBUG
|
#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(F(" 0x"));
|
||||||
DEBUG_PRINT(buf[i], 16);
|
DEBUG_PRINT(buf[i], 16);
|
@ -45,7 +45,7 @@
|
|||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
#include <EEPROM.h>
|
#include <EEPROM.h>
|
||||||
#include <ESP8266WiFi.h>
|
#include <ESP8266WiFi.h>
|
||||||
#include <ESPAsyncUDP.h>
|
#include <WiFiUdp.h>
|
||||||
#include <ESP8266WebServer.h>
|
#include <ESP8266WebServer.h>
|
||||||
|
|
||||||
#include "DPT.h"
|
#include "DPT.h"
|
||||||
@ -509,7 +509,7 @@ class ESPKNXIP {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void __start();
|
void __start();
|
||||||
void __loop_knx(AsyncUDPPacket &packet);
|
void __loop_knx();
|
||||||
|
|
||||||
// Webserver functions
|
// Webserver functions
|
||||||
void __loop_webserver();
|
void __loop_webserver();
|
||||||
@ -544,7 +544,7 @@ class ESPKNXIP {
|
|||||||
|
|
||||||
ESP8266WebServer *server;
|
ESP8266WebServer *server;
|
||||||
address_t physaddr;
|
address_t physaddr;
|
||||||
AsyncUDP udp;
|
WiFiUDP udp;
|
||||||
|
|
||||||
callback_assignment_id_t registered_callback_assignments;
|
callback_assignment_id_t registered_callback_assignments;
|
||||||
callback_assignment_id_t free_callback_assignment_slots;
|
callback_assignment_id_t free_callback_assignment_slots;
|
@ -1,9 +1,9 @@
|
|||||||
name=ESP KNX IP Library
|
name=ESP KNX IP Library
|
||||||
version=0.4
|
version=0.5
|
||||||
author=Nico Weichbrodt <envy>
|
author=Nico Weichbrodt <envy>
|
||||||
maintainer=Nico Weichbrodt <envy>
|
maintainer=Nico Weichbrodt <envy>
|
||||||
sentence=ESP8266 library for KNX/IP communication.
|
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
|
category=Communication
|
||||||
url=https://github.com/envy/esp-knx-ip
|
url=https://github.com/envy/esp-knx-ip
|
||||||
architectures=esp8266
|
architectures=esp8266
|
@ -14,10 +14,12 @@ src_dir = sonoff
|
|||||||
;env_default = sonoff
|
;env_default = sonoff
|
||||||
;env_default = sonoff-minimal
|
;env_default = sonoff-minimal
|
||||||
;env_default = sonoff-xxl
|
;env_default = sonoff-xxl
|
||||||
|
;env_default = sonoff-BG
|
||||||
;env_default = sonoff-CZ
|
;env_default = sonoff-CZ
|
||||||
;env_default = sonoff-DE
|
;env_default = sonoff-DE
|
||||||
;env_default = sonoff-ES
|
;env_default = sonoff-ES
|
||||||
;env_default = sonoff-FR
|
;env_default = sonoff-FR
|
||||||
|
;env_default = sonoff-GR
|
||||||
;env_default = sonoff-HU
|
;env_default = sonoff-HU
|
||||||
;env_default = sonoff-IT
|
;env_default = sonoff-IT
|
||||||
;env_default = sonoff-NL
|
;env_default = sonoff-NL
|
||||||
@ -97,6 +99,20 @@ extra_scripts = pio/strip-floats.py
|
|||||||
; *** Serial Monitor options
|
; *** Serial Monitor options
|
||||||
monitor_baud = 115200
|
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]
|
[env:sonoff-DE]
|
||||||
;platform = espressif8266@1.5.0 ; v2.3.0
|
;platform = espressif8266@1.5.0 ; v2.3.0
|
||||||
;platform = espressif8266@1.6.0 ; v2.4.0
|
;platform = espressif8266@1.6.0 ; v2.4.0
|
||||||
@ -139,6 +155,20 @@ extra_scripts = pio/strip-floats.py
|
|||||||
; *** Serial Monitor options
|
; *** Serial Monitor options
|
||||||
monitor_baud = 115200
|
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]
|
[env:sonoff-HU]
|
||||||
;platform = espressif8266@1.5.0 ; v2.3.0
|
;platform = espressif8266@1.5.0 ; v2.3.0
|
||||||
;platform = espressif8266@1.6.0 ; v2.4.0
|
;platform = espressif8266@1.6.0 ; v2.4.0
|
||||||
|
@ -2,6 +2,12 @@
|
|||||||
* Reinit timers to accomodate random window (#2447)
|
* Reinit timers to accomodate random window (#2447)
|
||||||
* Add random window to timers (#2447)
|
* Add random window to timers (#2447)
|
||||||
* Add optional KNX IP Protocol Support (#2402)
|
* 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
|
* 5.12.0l
|
||||||
* Release rules up to 511 characters
|
* Release rules up to 511 characters
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
#define D_JSON_COUNTER "Counter"
|
#define D_JSON_COUNTER "Counter"
|
||||||
#define D_JSON_CURRENT "Current" // As in Voltage and Current
|
#define D_JSON_CURRENT "Current" // As in Voltage and Current
|
||||||
#define D_JSON_DATA "Data"
|
#define D_JSON_DATA "Data"
|
||||||
|
#define D_JSON_DISTANCE "Distance"
|
||||||
#define D_JSON_DNSSERVER "DNSServer"
|
#define D_JSON_DNSSERVER "DNSServer"
|
||||||
#define D_JSON_DONE "Done"
|
#define D_JSON_DONE "Done"
|
||||||
#define D_JSON_ECO2 "eCO2"
|
#define D_JSON_ECO2 "eCO2"
|
||||||
@ -222,12 +223,10 @@
|
|||||||
#define D_CMND_ALTITUDE "Altitude"
|
#define D_CMND_ALTITUDE "Altitude"
|
||||||
#define D_CMND_LEDPOWER "LedPower"
|
#define D_CMND_LEDPOWER "LedPower"
|
||||||
#define D_CMND_LEDSTATE "LedState"
|
#define D_CMND_LEDSTATE "LedState"
|
||||||
#define D_CMND_CFGDUMP "CfgDump"
|
|
||||||
#define D_CMND_I2CSCAN "I2CScan"
|
#define D_CMND_I2CSCAN "I2CScan"
|
||||||
#define D_CMND_SERIALSEND "SerialSend"
|
#define D_CMND_SERIALSEND "SerialSend"
|
||||||
#define D_CMND_SERIALDELIMITER "SerialDelimiter"
|
#define D_CMND_SERIALDELIMITER "SerialDelimiter"
|
||||||
#define D_CMND_BAUDRATE "Baudrate"
|
#define D_CMND_BAUDRATE "Baudrate"
|
||||||
#define D_CMND_EXCEPTION "Exception"
|
|
||||||
|
|
||||||
// Commands xdrv_00_mqtt.ino
|
// Commands xdrv_00_mqtt.ino
|
||||||
#define D_CMND_MQTTHOST "MqttHost"
|
#define D_CMND_MQTTHOST "MqttHost"
|
||||||
|
505
sonoff/language/bg-BG.h
Normal file
505
sonoff/language/bg-BG.h
Normal file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#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=<username>&password=<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_
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
cs-CZ.h - localization for Czech with diacritics - Czech for Sonoff-Tasmota
|
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
|
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
|
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 StateText to translate ON, OFF, HOLD and TOGGLE.
|
||||||
* Use online command Prefix to translate cmnd, stat and tele.
|
* 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)
|
//#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_AUTO "AUTO"
|
||||||
#define D_BLINK "Blikání"
|
#define D_BLINK "Blikání"
|
||||||
#define D_BLINKOFF "BlikáníVyp"
|
#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_BRIGHTLIGHT "Světlý"
|
||||||
#define D_BUTTON "Tlačítko"
|
#define D_BUTTON "Tlačítko"
|
||||||
#define D_BY "by" // Written by me
|
#define D_BY "by" // Written by me
|
||||||
@ -69,12 +69,13 @@
|
|||||||
#define D_COMMAND "Příkaz"
|
#define D_COMMAND "Příkaz"
|
||||||
#define D_CONNECTED "...připojeno"
|
#define D_CONNECTED "...připojeno"
|
||||||
#define D_COUNT "Počítej"
|
#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_CURRENT "Proud" // As in Voltage and Current
|
||||||
#define D_DATA "Data"
|
#define D_DATA "Data"
|
||||||
#define D_DARKLIGHT "Tmavý"
|
#define D_DARKLIGHT "Tmavý"
|
||||||
#define D_DEBUG "Debug"
|
#define D_DEBUG "Debug"
|
||||||
#define D_DISABLED "Zablokováno"
|
#define D_DISABLED "Zablokováno"
|
||||||
|
#define D_DISTANCE "Distance"
|
||||||
#define D_DNS_SERVER "Server DNS"
|
#define D_DNS_SERVER "Server DNS"
|
||||||
#define D_DONE "Provedeno"
|
#define D_DONE "Provedeno"
|
||||||
#define D_DST_TIME "DST"
|
#define D_DST_TIME "DST"
|
||||||
@ -116,7 +117,7 @@
|
|||||||
#define D_ONLINE "Aktivní"
|
#define D_ONLINE "Aktivní"
|
||||||
#define D_PASSWORD "Heslo"
|
#define D_PASSWORD "Heslo"
|
||||||
#define D_PORT "Port"
|
#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_POWERUSAGE "Příkon"
|
||||||
#define D_PRESSURE "Tlak"
|
#define D_PRESSURE "Tlak"
|
||||||
#define D_PRESSUREATSEALEVEL "Tlak na úrovni hladiny moře"
|
#define D_PRESSUREATSEALEVEL "Tlak na úrovni hladiny moře"
|
||||||
@ -375,24 +376,24 @@
|
|||||||
#define D_TIMER_ACTION "Napájení"
|
#define D_TIMER_ACTION "Napájení"
|
||||||
|
|
||||||
// xdrv_10_knx.ino
|
// xdrv_10_knx.ino
|
||||||
#define D_CONFIGURE_KNX "Configure KNX"
|
#define D_CONFIGURE_KNX "Nastavení KNX"
|
||||||
#define D_KNX_PARAMETERS "KNX Parameters"
|
#define D_KNX_PARAMETERS "KNX parametry"
|
||||||
#define D_KNX_GENERAL_CONFIG "General"
|
#define D_KNX_GENERAL_CONFIG "Obecné"
|
||||||
#define D_KNX_PHYSICAL_ADDRESS "Physical Address"
|
#define D_KNX_PHYSICAL_ADDRESS "Fyzická adresa"
|
||||||
#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
|
#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Musí být jedinečná v síti KNX )"
|
||||||
#define D_KNX_ENABLE "Enable KNX"
|
#define D_KNX_ENABLE "Povol KNX"
|
||||||
#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
|
#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data k odeslání na skupinové adresy"
|
||||||
#define D_ADD "Add"
|
#define D_ADD "Přidej"
|
||||||
#define D_DELETE "Delete"
|
#define D_DELETE "Smaž"
|
||||||
#define D_REPLY "Reply"
|
#define D_REPLY "Odpověď"
|
||||||
#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
|
#define D_KNX_GROUP_ADDRESS_TO_READ "Skupinové adresy pro příjem dat z"
|
||||||
#define D_LOG_KNX "KNX: "
|
#define D_LOG_KNX "KNX: "
|
||||||
#define D_RECEIVED_FROM "Received from"
|
#define D_RECEIVED_FROM "Přijato z"
|
||||||
#define D_KNX_COMMAND_WRITE "Write"
|
#define D_KNX_COMMAND_WRITE "Zapiš"
|
||||||
#define D_KNX_COMMAND_READ "Read"
|
#define D_KNX_COMMAND_READ "Čti"
|
||||||
#define D_KNX_COMMAND_OTHER "Other"
|
#define D_KNX_COMMAND_OTHER "Jiné"
|
||||||
#define D_SENT_TO "sent to"
|
#define D_SENT_TO "pošli"
|
||||||
#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
|
#define D_KNX_WARNING "Skupinová adresa ( 0 / 0 / 0 ) je rezervována a nemůže být použita."
|
||||||
|
|
||||||
// xdrv_03_energy.ino
|
// xdrv_03_energy.ino
|
||||||
#define D_ENERGY_TODAY "Spotřeba Dnes"
|
#define D_ENERGY_TODAY "Spotřeba Dnes"
|
||||||
@ -435,7 +436,7 @@
|
|||||||
#define D_SENSOR_RELAY "Relé" // Suffix "1i"
|
#define D_SENSOR_RELAY "Relé" // Suffix "1i"
|
||||||
#define D_SENSOR_LED "Led" // Suffix "1i"
|
#define D_SENSOR_LED "Led" // Suffix "1i"
|
||||||
#define D_SENSOR_PWM "PWM" // Suffix "1",
|
#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_IRRECV "IRrecv"
|
||||||
#define D_SENSOR_MHZ_RX "MHZ Rx"
|
#define D_SENSOR_MHZ_RX "MHZ Rx"
|
||||||
#define D_SENSOR_MHZ_TX "MHZ Tx"
|
#define D_SENSOR_MHZ_TX "MHZ Tx"
|
||||||
@ -450,9 +451,12 @@
|
|||||||
#define D_SENSOR_SDS0X1 "SDS0X1"
|
#define D_SENSOR_SDS0X1 "SDS0X1"
|
||||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
|
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||||
|
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||||
|
|
||||||
// Units
|
// Units
|
||||||
#define D_UNIT_AMPERE "A"
|
#define D_UNIT_AMPERE "A"
|
||||||
|
#define D_UNIT_CENTIMETER "cm"
|
||||||
#define D_UNIT_HOUR "hod"
|
#define D_UNIT_HOUR "hod"
|
||||||
#define D_UNIT_KILOOHM "kOhm"
|
#define D_UNIT_KILOOHM "kOhm"
|
||||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
#define D_DARKLIGHT "dunkel"
|
#define D_DARKLIGHT "dunkel"
|
||||||
#define D_DEBUG "debug"
|
#define D_DEBUG "debug"
|
||||||
#define D_DISABLED "deaktiviert"
|
#define D_DISABLED "deaktiviert"
|
||||||
|
#define D_DISTANCE "Abstand"
|
||||||
#define D_DNS_SERVER "DNS-Server"
|
#define D_DNS_SERVER "DNS-Server"
|
||||||
#define D_DONE "erledigt"
|
#define D_DONE "erledigt"
|
||||||
#define D_DST_TIME "DST"
|
#define D_DST_TIME "DST"
|
||||||
@ -450,9 +451,12 @@
|
|||||||
#define D_SENSOR_SDS0X1 "SDS0X1"
|
#define D_SENSOR_SDS0X1 "SDS0X1"
|
||||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
|
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||||
|
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||||
|
|
||||||
// Units
|
// Units
|
||||||
#define D_UNIT_AMPERE "A"
|
#define D_UNIT_AMPERE "A"
|
||||||
|
#define D_UNIT_CENTIMETER "cm"
|
||||||
#define D_UNIT_HOUR "h"
|
#define D_UNIT_HOUR "h"
|
||||||
#define D_UNIT_KILOOHM "kOhm"
|
#define D_UNIT_KILOOHM "kOhm"
|
||||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||||
|
505
sonoff/language/el-GR.h
Normal file
505
sonoff/language/el-GR.h
Normal file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#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_
|
@ -75,6 +75,7 @@
|
|||||||
#define D_DARKLIGHT "Dark"
|
#define D_DARKLIGHT "Dark"
|
||||||
#define D_DEBUG "Debug"
|
#define D_DEBUG "Debug"
|
||||||
#define D_DISABLED "Disabled"
|
#define D_DISABLED "Disabled"
|
||||||
|
#define D_DISTANCE "Distance"
|
||||||
#define D_DNS_SERVER "DNS Server"
|
#define D_DNS_SERVER "DNS Server"
|
||||||
#define D_DONE "Done"
|
#define D_DONE "Done"
|
||||||
#define D_DST_TIME "DST"
|
#define D_DST_TIME "DST"
|
||||||
@ -450,9 +451,12 @@
|
|||||||
#define D_SENSOR_SDS0X1 "SDS0X1"
|
#define D_SENSOR_SDS0X1 "SDS0X1"
|
||||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
|
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||||
|
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||||
|
|
||||||
// Units
|
// Units
|
||||||
#define D_UNIT_AMPERE "A"
|
#define D_UNIT_AMPERE "A"
|
||||||
|
#define D_UNIT_CENTIMETER "cm"
|
||||||
#define D_UNIT_HOUR "Hr"
|
#define D_UNIT_HOUR "Hr"
|
||||||
#define D_UNIT_KILOOHM "kOhm"
|
#define D_UNIT_KILOOHM "kOhm"
|
||||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
* Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
|
* Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
|
||||||
* Use online command Prefix to translate cmnd, stat and tele.
|
* 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)
|
#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_DARKLIGHT "Oscura"
|
||||||
#define D_DEBUG "Debug"
|
#define D_DEBUG "Debug"
|
||||||
#define D_DISABLED "Deshabilitado"
|
#define D_DISABLED "Deshabilitado"
|
||||||
|
#define D_DISTANCE "Distancia"
|
||||||
#define D_DNS_SERVER "DNS Server"
|
#define D_DNS_SERVER "DNS Server"
|
||||||
#define D_DONE "Listo"
|
#define D_DONE "Listo"
|
||||||
#define D_DST_TIME "DST"
|
#define D_DST_TIME "DST"
|
||||||
@ -375,24 +376,24 @@
|
|||||||
#define D_TIMER_ACTION "Estado"
|
#define D_TIMER_ACTION "Estado"
|
||||||
|
|
||||||
// xdrv_10_knx.ino
|
// xdrv_10_knx.ino
|
||||||
#define D_CONFIGURE_KNX "Configure KNX"
|
#define D_CONFIGURE_KNX "Configuración de KNX"
|
||||||
#define D_KNX_PARAMETERS "KNX Parameters"
|
#define D_KNX_PARAMETERS "Parámetros de KNX"
|
||||||
#define D_KNX_GENERAL_CONFIG "General"
|
#define D_KNX_GENERAL_CONFIG "General"
|
||||||
#define D_KNX_PHYSICAL_ADDRESS "Physical Address"
|
#define D_KNX_PHYSICAL_ADDRESS "Dirección Física"
|
||||||
#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
|
#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Debe ser única en la red KNX )"
|
||||||
#define D_KNX_ENABLE "Enable KNX"
|
#define D_KNX_ENABLE "Habilitar KNX"
|
||||||
#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
|
#define D_KNX_GROUP_ADDRESS_TO_WRITE "Datos a Enviar a las Direcciones de Grupo"
|
||||||
#define D_ADD "Add"
|
#define D_ADD "Agregar"
|
||||||
#define D_DELETE "Delete"
|
#define D_DELETE "Eliminar"
|
||||||
#define D_REPLY "Reply"
|
#define D_REPLY "Responder"
|
||||||
#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
|
#define D_KNX_GROUP_ADDRESS_TO_READ "Direcciones de Grupo para Recibir Datos"
|
||||||
#define D_LOG_KNX "KNX: "
|
#define D_LOG_KNX "KNX: "
|
||||||
#define D_RECEIVED_FROM "Received from"
|
#define D_RECEIVED_FROM "Recibido desde"
|
||||||
#define D_KNX_COMMAND_WRITE "Write"
|
#define D_KNX_COMMAND_WRITE "Escribir"
|
||||||
#define D_KNX_COMMAND_READ "Read"
|
#define D_KNX_COMMAND_READ "Leer"
|
||||||
#define D_KNX_COMMAND_OTHER "Other"
|
#define D_KNX_COMMAND_OTHER "Otro"
|
||||||
#define D_SENT_TO "sent to"
|
#define D_SENT_TO "enviada a"
|
||||||
#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
|
#define D_KNX_WARNING "La dirección de grupo ( 0 / 0 / 0 ) está reservada y no puede ser utilizada."
|
||||||
|
|
||||||
// xdrv_03_energy.ino
|
// xdrv_03_energy.ino
|
||||||
#define D_ENERGY_TODAY "Energía Hoy"
|
#define D_ENERGY_TODAY "Energía Hoy"
|
||||||
@ -450,9 +451,12 @@
|
|||||||
#define D_SENSOR_SDS0X1 "SDS0X1"
|
#define D_SENSOR_SDS0X1 "SDS0X1"
|
||||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
|
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||||
|
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||||
|
|
||||||
// Units
|
// Units
|
||||||
#define D_UNIT_AMPERE "A"
|
#define D_UNIT_AMPERE "A"
|
||||||
|
#define D_UNIT_CENTIMETER "cm"
|
||||||
#define D_UNIT_HOUR "Hr"
|
#define D_UNIT_HOUR "Hr"
|
||||||
#define D_UNIT_KILOOHM "kOhm"
|
#define D_UNIT_KILOOHM "kOhm"
|
||||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
* Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
|
* Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
|
||||||
* Use online command Prefix to translate cmnd, stat and tele.
|
* 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)
|
#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_DARKLIGHT "Sombre"
|
||||||
#define D_DEBUG "Debug"
|
#define D_DEBUG "Debug"
|
||||||
#define D_DISABLED "Désactivé"
|
#define D_DISABLED "Désactivé"
|
||||||
|
#define D_DISTANCE "Distance"
|
||||||
#define D_DNS_SERVER "Serveur DNS"
|
#define D_DNS_SERVER "Serveur DNS"
|
||||||
#define D_DONE "Fait"
|
#define D_DONE "Fait"
|
||||||
#define D_DST_TIME "DST"
|
#define D_DST_TIME "DST"
|
||||||
@ -133,14 +134,14 @@
|
|||||||
#define D_SAVE "Enregistrer"
|
#define D_SAVE "Enregistrer"
|
||||||
#define D_SENSOR "Capteur"
|
#define D_SENSOR "Capteur"
|
||||||
#define D_SSID "SSID"
|
#define D_SSID "SSID"
|
||||||
#define D_START "Départ"
|
#define D_START "Lancer" // "Lancer la mise à jour"
|
||||||
#define D_STD_TIME "STD"
|
#define D_STD_TIME "STD"
|
||||||
#define D_STOP "Stop"
|
#define D_STOP "Stop"
|
||||||
#define D_SUBNET_MASK "Masque sous-réseau"
|
#define D_SUBNET_MASK "Masque sous-réseau"
|
||||||
#define D_SUBSCRIBE_TO "Souscrire à"
|
#define D_SUBSCRIBE_TO "Souscrire à"
|
||||||
#define D_SUCCESSFUL "Réussi"
|
#define D_SUCCESSFUL "Réussi"
|
||||||
#define D_SUNRISE "Jour" // "Lever du soleil" <- maybe too long?
|
#define D_SUNRISE "Lever du jour"
|
||||||
#define D_SUNSET "Nuit" // "Coucher du soleil" <- maybe too long?
|
#define D_SUNSET "Tombée de la nuit"
|
||||||
#define D_TEMPERATURE "Température"
|
#define D_TEMPERATURE "Température"
|
||||||
#define D_TO "à"
|
#define D_TO "à"
|
||||||
#define D_TOGGLE "Inverser"
|
#define D_TOGGLE "Inverser"
|
||||||
@ -148,7 +149,7 @@
|
|||||||
#define D_TRANSMIT "Transmettre"
|
#define D_TRANSMIT "Transmettre"
|
||||||
#define D_TRUE "Vrai"
|
#define D_TRUE "Vrai"
|
||||||
#define D_TVOC "TVOC"
|
#define D_TVOC "TVOC"
|
||||||
#define D_UPGRADE "mise à jour"
|
#define D_UPGRADE "la mise à jour" // "Lancer la mise à jour"
|
||||||
#define D_UPLOAD "Upload" // Not better in french
|
#define D_UPLOAD "Upload" // Not better in french
|
||||||
#define D_UPTIME "Durée d'activité"
|
#define D_UPTIME "Durée d'activité"
|
||||||
#define D_USER "Utilisateur"
|
#define D_USER "Utilisateur"
|
||||||
@ -214,24 +215,24 @@
|
|||||||
#define D_BUTTON_TOGGLE "on/off"
|
#define D_BUTTON_TOGGLE "on/off"
|
||||||
#define D_CONFIGURATION "Configuration"
|
#define D_CONFIGURATION "Configuration"
|
||||||
#define D_INFORMATION "Information"
|
#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_CONSOLE "Console"
|
||||||
#define D_CONFIRM_RESTART "Confirmer redémarrage"
|
#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_WIFI "Configuration WiFi"
|
||||||
#define D_CONFIGURE_MQTT "Configuration MQTT"
|
#define D_CONFIGURE_MQTT "Configuration MQTT"
|
||||||
#define D_CONFIGURE_DOMOTICZ "Configuration Domoticz"
|
#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_CONFIGURE_OTHER "Autre configuration"
|
||||||
#define D_CONFIRM_RESET_CONFIGURATION "Confirmer réinitialisation configuration"
|
#define D_CONFIRM_RESET_CONFIGURATION "Confirmer réinitialisation configuration"
|
||||||
#define D_RESET_CONFIGURATION "Réinitialisation Configuration"
|
#define D_RESET_CONFIGURATION "Configuration par défaut"
|
||||||
#define D_BACKUP_CONFIGURATION "Sauvegarde Configuration"
|
#define D_BACKUP_CONFIGURATION "Sauvegarde de la config."
|
||||||
#define D_RESTORE_CONFIGURATION "Restauration Configuration"
|
#define D_RESTORE_CONFIGURATION "Restauration de la config."
|
||||||
#define D_MAIN_MENU "Menu principal"
|
#define D_MAIN_MENU "Menu principal"
|
||||||
|
|
||||||
#define D_MODULE_PARAMETERS "Paramètres module"
|
#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_GPIO "GPIO"
|
||||||
#define D_SERIAL_IN "Serial In"
|
#define D_SERIAL_IN "Serial In"
|
||||||
#define D_SERIAL_OUT "Serial Out"
|
#define D_SERIAL_OUT "Serial Out"
|
||||||
@ -241,8 +242,8 @@
|
|||||||
#define D_SCAN_DONE "Scan terminé"
|
#define D_SCAN_DONE "Scan terminé"
|
||||||
#define D_NO_NETWORKS_FOUND "Aucun réseau trouvé"
|
#define D_NO_NETWORKS_FOUND "Aucun réseau trouvé"
|
||||||
#define D_REFRESH_TO_SCAN_AGAIN "Rafraîchir pour scanner à nouveau"
|
#define D_REFRESH_TO_SCAN_AGAIN "Rafraîchir pour scanner à nouveau"
|
||||||
#define D_DUPLICATE_ACCESSPOINT "AccessPoint dupliqué"
|
#define D_DUPLICATE_ACCESSPOINT "Point d'Accès dupliqué"
|
||||||
#define D_SKIPPING_LOW_QUALITY "Passe car mauvaise qualité"
|
#define D_SKIPPING_LOW_QUALITY "Évité car de mauvaise qualité"
|
||||||
#define D_RSSI "RSSI"
|
#define D_RSSI "RSSI"
|
||||||
#define D_WEP "WEP"
|
#define D_WEP "WEP"
|
||||||
#define D_WPA_PSK "WPA PSK"
|
#define D_WPA_PSK "WPA PSK"
|
||||||
@ -256,13 +257,13 @@
|
|||||||
#define D_CLIENT "Client"
|
#define D_CLIENT "Client"
|
||||||
#define D_FULL_TOPIC "topic complet"
|
#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_SERIAL_LOG_LEVEL "Niveau de journalisation série"
|
||||||
#define D_WEB_LOG_LEVEL "Niveau de journalisation web"
|
#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_MORE_DEBUG "Plus de debug"
|
||||||
#define D_SYSLOG_HOST "Hôte syslog"
|
#define D_SYSLOG_HOST "Hôte Syslog"
|
||||||
#define D_SYSLOG_PORT "Port syslog"
|
#define D_SYSLOG_PORT "Port Syslog"
|
||||||
#define D_TELEMETRY_PERIOD "Période télémétrie"
|
#define D_TELEMETRY_PERIOD "Période télémétrie"
|
||||||
|
|
||||||
#define D_OTHER_PARAMETERS "Autres paramètres"
|
#define D_OTHER_PARAMETERS "Autres paramètres"
|
||||||
@ -274,11 +275,11 @@
|
|||||||
#define D_SINGLE_DEVICE "module unique"
|
#define D_SINGLE_DEVICE "module unique"
|
||||||
#define D_MULTI_DEVICE "multi module"
|
#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_SAVED "Configuration enregistrée"
|
||||||
#define D_CONFIGURATION_RESET "Configuration réinitialisé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_BUILD_DATE_AND_TIME "Date & Heure de build"
|
||||||
#define D_CORE_AND_SDK_VERSION "Version Core/SDK"
|
#define D_CORE_AND_SDK_VERSION "Version Core/SDK"
|
||||||
#define D_FLASH_WRITE_COUNT "Compteur écriture flash"
|
#define D_FLASH_WRITE_COUNT "Compteur écriture flash"
|
||||||
@ -306,21 +307,21 @@
|
|||||||
#define D_UPLOAD_DONE "Téléchargement terminé"
|
#define D_UPLOAD_DONE "Téléchargement terminé"
|
||||||
#define D_UPLOAD_ERR_1 "Aucun fichier sélectionné"
|
#define D_UPLOAD_ERR_1 "Aucun fichier sélectionné"
|
||||||
#define D_UPLOAD_ERR_2 "Espace insuffisant"
|
#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_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_5 "Erreur de comparaison du buffer de téléchargement"
|
||||||
#define D_UPLOAD_ERR_6 "Téléchargement échoué. Activation logging 3"
|
#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_7 "Téléchargement annulé"
|
||||||
#define D_UPLOAD_ERR_8 "Fichier invalide"
|
#define D_UPLOAD_ERR_8 "Fichier invalide"
|
||||||
#define D_UPLOAD_ERR_9 "Fichier trop grand"
|
#define D_UPLOAD_ERR_9 "Fichier trop grand"
|
||||||
#define D_UPLOAD_ERROR_CODE "Code d'erreur téléchargement"
|
#define D_UPLOAD_ERROR_CODE "Code d'erreur téléchargement"
|
||||||
|
|
||||||
#define D_ENTER_COMMAND "Saisir commande"
|
#define D_ENTER_COMMAND "Saisir une commande"
|
||||||
#define D_ENABLE_WEBLOG_FOR_RESPONSE "Activer weblog 2 si response attendue"
|
#define D_ENABLE_WEBLOG_FOR_RESPONSE "Activer Weblog 2 si une réponse est attendue"
|
||||||
#define D_NEED_USER_AND_PASSWORD "Nécessite utilisateur=<username>&password=<password>"
|
#define D_NEED_USER_AND_PASSWORD "Nécessite utilisateur=<username>&password=<password>"
|
||||||
|
|
||||||
// xdrv_00_mqtt.ino
|
// 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_TLS_CONNECT_FAILED_TO "Échec de connexion TLS à"
|
||||||
#define D_RETRY_IN "Nouvelle tentative dans"
|
#define D_RETRY_IN "Nouvelle tentative dans"
|
||||||
#define D_VERIFIED "Vérifié par empreinte "
|
#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_NOT_IMPLEMENTED "API Hue non implémentée"
|
||||||
#define D_HUE_API "Hue API"
|
#define D_HUE_API "Hue API"
|
||||||
#define D_HUE_POST_ARGS "Hue POST args"
|
#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
|
// xdrv_05_domoticz.ino
|
||||||
#define D_DOMOTICZ_PARAMETERS "Paramètres Domoticz"
|
#define D_DOMOTICZ_PARAMETERS "Paramètres Domoticz"
|
||||||
@ -365,7 +366,7 @@
|
|||||||
#define D_DOMOTICZ_UPDATE_TIMER "Durée de rafraichissement"
|
#define D_DOMOTICZ_UPDATE_TIMER "Durée de rafraichissement"
|
||||||
|
|
||||||
// xdrv_09_timers.ino
|
// 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_PARAMETERS "Paramètres Timer"
|
||||||
#define D_TIMER_ARM "Armer"
|
#define D_TIMER_ARM "Armer"
|
||||||
#define D_TIMER_TIME "Temps"
|
#define D_TIMER_TIME "Temps"
|
||||||
@ -375,24 +376,24 @@
|
|||||||
#define D_TIMER_ACTION "Action"
|
#define D_TIMER_ACTION "Action"
|
||||||
|
|
||||||
// xdrv_10_knx.ino
|
// xdrv_10_knx.ino
|
||||||
#define D_CONFIGURE_KNX "Configure KNX"
|
#define D_CONFIGURE_KNX "Configuration de KNX"
|
||||||
#define D_KNX_PARAMETERS "KNX Parameters"
|
#define D_KNX_PARAMETERS "Paramètres KNX"
|
||||||
#define D_KNX_GENERAL_CONFIG "General"
|
#define D_KNX_GENERAL_CONFIG "Général"
|
||||||
#define D_KNX_PHYSICAL_ADDRESS "Physical Address"
|
#define D_KNX_PHYSICAL_ADDRESS "Adresse individuelle" // Backbone/Line/Device -> Zone/Ligne/Participant
|
||||||
#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
|
#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Doit être unique sur le réseau KNX)"
|
||||||
#define D_KNX_ENABLE "Enable KNX"
|
#define D_KNX_ENABLE "Activer KNX"
|
||||||
#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
|
#define D_KNX_GROUP_ADDRESS_TO_WRITE "Données à envoyer aux Adresses de Groupe"
|
||||||
#define D_ADD "Add"
|
#define D_ADD "Ajoûter"
|
||||||
#define D_DELETE "Delete"
|
#define D_DELETE "Supprimer"
|
||||||
#define D_REPLY "Reply"
|
#define D_REPLY "Répondre"
|
||||||
#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
|
#define D_KNX_GROUP_ADDRESS_TO_READ "Données à recevoir des Adresses de Groupe"
|
||||||
#define D_LOG_KNX "KNX: "
|
#define D_LOG_KNX "KNX: "
|
||||||
#define D_RECEIVED_FROM "Received from"
|
#define D_RECEIVED_FROM "Reçu de"
|
||||||
#define D_KNX_COMMAND_WRITE "Write"
|
#define D_KNX_COMMAND_WRITE "Écrire"
|
||||||
#define D_KNX_COMMAND_READ "Read"
|
#define D_KNX_COMMAND_READ "Lire"
|
||||||
#define D_KNX_COMMAND_OTHER "Other"
|
#define D_KNX_COMMAND_OTHER "Autre"
|
||||||
#define D_SENT_TO "sent to"
|
#define D_SENT_TO "envoyé à"
|
||||||
#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
|
#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
|
// xsns_03_energy.ino
|
||||||
#define D_ENERGY_TODAY "Énergie aujourd'hui"
|
#define D_ENERGY_TODAY "Énergie aujourd'hui"
|
||||||
@ -412,7 +413,7 @@
|
|||||||
#define D_CHECKSUM_FAILURE "Erreur checksum"
|
#define D_CHECKSUM_FAILURE "Erreur checksum"
|
||||||
|
|
||||||
// xsns_07_sht1x.ino
|
// 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"
|
#define D_SHT1X_FOUND "SHT1X found"
|
||||||
|
|
||||||
// xsns_18_pms5003.ino
|
// xsns_18_pms5003.ino
|
||||||
@ -450,16 +451,19 @@
|
|||||||
#define D_SENSOR_SDS0X1 "SDS0X1"
|
#define D_SENSOR_SDS0X1 "SDS0X1"
|
||||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
|
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||||
|
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||||
|
|
||||||
// Units
|
// Units
|
||||||
#define D_UNIT_AMPERE "A"
|
#define D_UNIT_AMPERE "A"
|
||||||
|
#define D_UNIT_CENTIMETER "cm"
|
||||||
#define D_UNIT_HOUR "h"
|
#define D_UNIT_HOUR "h"
|
||||||
#define D_UNIT_KILOOHM "kOhm"
|
#define D_UNIT_KILOOHM "kΩ"
|
||||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||||
#define D_UNIT_LUX "lx"
|
#define D_UNIT_LUX "lx"
|
||||||
#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
|
#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3"
|
||||||
#define D_UNIT_MICROMETER "um"
|
#define D_UNIT_MICROMETER "µm"
|
||||||
#define D_UNIT_MICROSECOND "us"
|
#define D_UNIT_MICROSECOND "µs"
|
||||||
#define D_UNIT_MILLIAMPERE "mA"
|
#define D_UNIT_MILLIAMPERE "mA"
|
||||||
#define D_UNIT_MILLISECOND "ms"
|
#define D_UNIT_MILLISECOND "ms"
|
||||||
#define D_UNIT_MINUTE "Min"
|
#define D_UNIT_MINUTE "Min"
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
#define D_DARKLIGHT "Min. fényerő"
|
#define D_DARKLIGHT "Min. fényerő"
|
||||||
#define D_DEBUG "Debug"
|
#define D_DEBUG "Debug"
|
||||||
#define D_DISABLED "Letiltva"
|
#define D_DISABLED "Letiltva"
|
||||||
|
#define D_DISTANCE "Distance"
|
||||||
#define D_DNS_SERVER "DNS Szerver"
|
#define D_DNS_SERVER "DNS Szerver"
|
||||||
#define D_DONE "Kész"
|
#define D_DONE "Kész"
|
||||||
#define D_DST_TIME "DST"
|
#define D_DST_TIME "DST"
|
||||||
@ -450,9 +451,12 @@
|
|||||||
#define D_SENSOR_SDS0X1 "SDS0X1"
|
#define D_SENSOR_SDS0X1 "SDS0X1"
|
||||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
|
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||||
|
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||||
|
|
||||||
// Units
|
// Units
|
||||||
#define D_UNIT_AMPERE "A"
|
#define D_UNIT_AMPERE "A"
|
||||||
|
#define D_UNIT_CENTIMETER "cm"
|
||||||
#define D_UNIT_HOUR "ó"
|
#define D_UNIT_HOUR "ó"
|
||||||
#define D_UNIT_KILOOHM "kOhm"
|
#define D_UNIT_KILOOHM "kOhm"
|
||||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
#define D_DARKLIGHT "Scuro"
|
#define D_DARKLIGHT "Scuro"
|
||||||
#define D_DEBUG "Debug"
|
#define D_DEBUG "Debug"
|
||||||
#define D_DISABLED "Disabilitato"
|
#define D_DISABLED "Disabilitato"
|
||||||
|
#define D_DISTANCE "Distance"
|
||||||
#define D_DNS_SERVER "DNS Server"
|
#define D_DNS_SERVER "DNS Server"
|
||||||
#define D_DONE "Fatto"
|
#define D_DONE "Fatto"
|
||||||
#define D_DST_TIME "DST"
|
#define D_DST_TIME "DST"
|
||||||
@ -450,9 +451,12 @@
|
|||||||
#define D_SENSOR_SDS0X1 "SDS0X1"
|
#define D_SENSOR_SDS0X1 "SDS0X1"
|
||||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
|
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||||
|
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||||
|
|
||||||
// Units
|
// Units
|
||||||
#define D_UNIT_AMPERE "A"
|
#define D_UNIT_AMPERE "A"
|
||||||
|
#define D_UNIT_CENTIMETER "cm"
|
||||||
#define D_UNIT_HOUR "Hr"
|
#define D_UNIT_HOUR "Hr"
|
||||||
#define D_UNIT_KILOOHM "kOhm"
|
#define D_UNIT_KILOOHM "kOhm"
|
||||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
#define D_DARKLIGHT "Donker"
|
#define D_DARKLIGHT "Donker"
|
||||||
#define D_DEBUG "Debug"
|
#define D_DEBUG "Debug"
|
||||||
#define D_DISABLED "Uitgeschakeld"
|
#define D_DISABLED "Uitgeschakeld"
|
||||||
|
#define D_DISTANCE "Afstand"
|
||||||
#define D_DNS_SERVER "DNS Server"
|
#define D_DNS_SERVER "DNS Server"
|
||||||
#define D_DONE "Klaar"
|
#define D_DONE "Klaar"
|
||||||
#define D_DST_TIME "ZT"
|
#define D_DST_TIME "ZT"
|
||||||
@ -450,9 +451,12 @@
|
|||||||
#define D_SENSOR_SDS0X1 "SDS0X1"
|
#define D_SENSOR_SDS0X1 "SDS0X1"
|
||||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
|
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||||
|
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||||
|
|
||||||
// Units
|
// Units
|
||||||
#define D_UNIT_AMPERE "A"
|
#define D_UNIT_AMPERE "A"
|
||||||
|
#define D_UNIT_CENTIMETER "cm"
|
||||||
#define D_UNIT_HOUR "h"
|
#define D_UNIT_HOUR "h"
|
||||||
#define D_UNIT_KILOOHM "kOhm"
|
#define D_UNIT_KILOOHM "kOhm"
|
||||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
#define D_DARKLIGHT "Ciemny"
|
#define D_DARKLIGHT "Ciemny"
|
||||||
#define D_DEBUG "Debug"
|
#define D_DEBUG "Debug"
|
||||||
#define D_DISABLED "Zablokowany"
|
#define D_DISABLED "Zablokowany"
|
||||||
|
#define D_DISTANCE "Distance"
|
||||||
#define D_DNS_SERVER "Server DNS"
|
#define D_DNS_SERVER "Server DNS"
|
||||||
#define D_DONE "Wykonane"
|
#define D_DONE "Wykonane"
|
||||||
#define D_DST_TIME "DST"
|
#define D_DST_TIME "DST"
|
||||||
@ -450,9 +451,12 @@
|
|||||||
#define D_SENSOR_SDS0X1 "SDS0X1"
|
#define D_SENSOR_SDS0X1 "SDS0X1"
|
||||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
|
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||||
|
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||||
|
|
||||||
// Units
|
// Units
|
||||||
#define D_UNIT_AMPERE "A"
|
#define D_UNIT_AMPERE "A"
|
||||||
|
#define D_UNIT_CENTIMETER "cm"
|
||||||
#define D_UNIT_HOUR "Godz"
|
#define D_UNIT_HOUR "Godz"
|
||||||
#define D_UNIT_KILOOHM "kOhm"
|
#define D_UNIT_KILOOHM "kOhm"
|
||||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
#define D_DARKLIGHT "Luz Escura"
|
#define D_DARKLIGHT "Luz Escura"
|
||||||
#define D_DEBUG "Depurar"
|
#define D_DEBUG "Depurar"
|
||||||
#define D_DISABLED "Disabilitado"
|
#define D_DISABLED "Disabilitado"
|
||||||
|
#define D_DISTANCE "Distance"
|
||||||
#define D_DNS_SERVER "Servidor DNS"
|
#define D_DNS_SERVER "Servidor DNS"
|
||||||
#define D_DONE "Concluído"
|
#define D_DONE "Concluído"
|
||||||
#define D_DST_TIME "DST"
|
#define D_DST_TIME "DST"
|
||||||
@ -450,9 +451,12 @@
|
|||||||
#define D_SENSOR_SDS0X1 "SDS0X1"
|
#define D_SENSOR_SDS0X1 "SDS0X1"
|
||||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
|
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||||
|
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||||
|
|
||||||
// Units
|
// Units
|
||||||
#define D_UNIT_AMPERE "A"
|
#define D_UNIT_AMPERE "A"
|
||||||
|
#define D_UNIT_CENTIMETER "cm"
|
||||||
#define D_UNIT_HOUR "Hr"
|
#define D_UNIT_HOUR "Hr"
|
||||||
#define D_UNIT_KILOOHM "kOhm"
|
#define D_UNIT_KILOOHM "kOhm"
|
||||||
#define D_UNIT_KILOWATTHOUR "kWh"
|
#define D_UNIT_KILOWATTHOUR "kWh"
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
#define D_DARKLIGHT "Темный"
|
#define D_DARKLIGHT "Темный"
|
||||||
#define D_DEBUG "Отладка"
|
#define D_DEBUG "Отладка"
|
||||||
#define D_DISABLED "Блокирован"
|
#define D_DISABLED "Блокирован"
|
||||||
|
#define D_DISTANCE "Distance"
|
||||||
#define D_DNS_SERVER "DNS Сервер"
|
#define D_DNS_SERVER "DNS Сервер"
|
||||||
#define D_DONE "Выполнено"
|
#define D_DONE "Выполнено"
|
||||||
#define D_DST_TIME "DST"
|
#define D_DST_TIME "DST"
|
||||||
@ -450,9 +451,12 @@
|
|||||||
#define D_SENSOR_SDS0X1 "SDS0X1"
|
#define D_SENSOR_SDS0X1 "SDS0X1"
|
||||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
|
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||||
|
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||||
|
|
||||||
// Units
|
// Units
|
||||||
#define D_UNIT_AMPERE "А"
|
#define D_UNIT_AMPERE "А"
|
||||||
|
#define D_UNIT_CENTIMETER "cm"
|
||||||
#define D_UNIT_HOUR "Ч"
|
#define D_UNIT_HOUR "Ч"
|
||||||
#define D_UNIT_KILOOHM "кОм"
|
#define D_UNIT_KILOOHM "кОм"
|
||||||
#define D_UNIT_KILOWATTHOUR "кВт"
|
#define D_UNIT_KILOWATTHOUR "кВт"
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
#define D_DARKLIGHT "Dark"
|
#define D_DARKLIGHT "Dark"
|
||||||
#define D_DEBUG "调试"
|
#define D_DEBUG "调试"
|
||||||
#define D_DISABLED "禁用"
|
#define D_DISABLED "禁用"
|
||||||
|
#define D_DISTANCE "Distance"
|
||||||
#define D_DNS_SERVER "DNS服务器"
|
#define D_DNS_SERVER "DNS服务器"
|
||||||
#define D_DONE "完成"
|
#define D_DONE "完成"
|
||||||
#define D_DST_TIME "DST"
|
#define D_DST_TIME "DST"
|
||||||
@ -450,9 +451,12 @@
|
|||||||
#define D_SENSOR_SDS0X1 "SDS0X1"
|
#define D_SENSOR_SDS0X1 "SDS0X1"
|
||||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
|
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||||
|
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||||
|
|
||||||
// Units
|
// Units
|
||||||
#define D_UNIT_AMPERE "安"
|
#define D_UNIT_AMPERE "安"
|
||||||
|
#define D_UNIT_CENTIMETER "cm"
|
||||||
#define D_UNIT_HOUR "时"
|
#define D_UNIT_HOUR "时"
|
||||||
#define D_UNIT_KILOOHM "千欧"
|
#define D_UNIT_KILOOHM "千欧"
|
||||||
#define D_UNIT_KILOWATTHOUR "千瓦时"
|
#define D_UNIT_KILOWATTHOUR "千瓦时"
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
#define D_DARKLIGHT "Dark"
|
#define D_DARKLIGHT "Dark"
|
||||||
#define D_DEBUG "除錯"
|
#define D_DEBUG "除錯"
|
||||||
#define D_DISABLED "停用"
|
#define D_DISABLED "停用"
|
||||||
|
#define D_DISTANCE "Distance"
|
||||||
#define D_DNS_SERVER "DNS伺服器"
|
#define D_DNS_SERVER "DNS伺服器"
|
||||||
#define D_DONE "完成"
|
#define D_DONE "完成"
|
||||||
#define D_DST_TIME "DST"
|
#define D_DST_TIME "DST"
|
||||||
@ -450,9 +451,12 @@
|
|||||||
#define D_SENSOR_SDS0X1 "SDS0X1"
|
#define D_SENSOR_SDS0X1 "SDS0X1"
|
||||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
|
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||||
|
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||||
|
|
||||||
// Units
|
// Units
|
||||||
#define D_UNIT_AMPERE "安"
|
#define D_UNIT_AMPERE "安"
|
||||||
|
#define D_UNIT_CENTIMETER "cm"
|
||||||
#define D_UNIT_HOUR "時"
|
#define D_UNIT_HOUR "時"
|
||||||
#define D_UNIT_KILOOHM "千歐"
|
#define D_UNIT_KILOOHM "千歐"
|
||||||
#define D_UNIT_KILOWATTHOUR "千瓦時"
|
#define D_UNIT_KILOWATTHOUR "千瓦時"
|
||||||
|
@ -119,41 +119,6 @@ boolean RtcSettingsValid()
|
|||||||
return (RTC_MEM_VALID == RtcSettings.valid);
|
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
|
* Config - Flash
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
@ -374,57 +339,6 @@ void SettingsSdkErase()
|
|||||||
delay(1000);
|
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()
|
void SettingsDefault()
|
||||||
|
@ -84,7 +84,7 @@ enum TasmotaCommands {
|
|||||||
CMND_LOGHOST, CMND_LOGPORT, CMND_IPADDRESS, CMND_NTPSERVER, CMND_AP, CMND_SSID, CMND_PASSWORD, CMND_HOSTNAME,
|
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_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_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 =
|
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_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 "|"
|
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_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_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_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
|
D_CMND_I2CSCAN "|" D_CMND_SERIALSEND "|" D_CMND_BAUDRATE "|" D_CMND_SERIALDELIMITER;
|
||||||
#ifdef DEBUG_THEO
|
|
||||||
"|" D_CMND_EXCEPTION
|
|
||||||
#endif
|
|
||||||
;
|
|
||||||
|
|
||||||
const char kOptionOff[] PROGMEM = "OFF|" D_OFF "|" D_FALSE "|" D_STOP "|" D_CELSIUS ;
|
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 ;
|
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);
|
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
|
#ifdef USE_I2C
|
||||||
else if ((CMND_I2CSCAN == command_code) && i2c_flg) {
|
else if ((CMND_I2CSCAN == command_code) && i2c_flg) {
|
||||||
I2cScan(mqtt_data, sizeof(mqtt_data));
|
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)) {
|
else if (XdrvCommand(grpflg, type, index, dataBuf, data_len, payload, payload16)) {
|
||||||
// Serviced
|
// 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 {
|
else {
|
||||||
type = NULL;
|
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()) {
|
if (CseSerialInput()) {
|
||||||
serial_in_byte_counter = 0;
|
serial_in_byte_counter = 0;
|
||||||
Serial.flush();
|
Serial.flush();
|
||||||
|
@ -86,8 +86,6 @@ void KNX_CB_Action(message_t const &msg, void *arg);
|
|||||||
#define USE_DS18B20 // Default DS18B20 sensor needs no external library
|
#define USE_DS18B20 // Default DS18B20 sensor needs no external library
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#define DEBUG_THEO // Add debug code
|
|
||||||
|
|
||||||
#ifdef BE_MINIMAL // ========================== Configure sonoff-minimal.bin =====================
|
#ifdef BE_MINIMAL // ========================== Configure sonoff-minimal.bin =====================
|
||||||
#ifdef USE_MQTT_TLS
|
#ifdef USE_MQTT_TLS
|
||||||
#undef USE_MQTT_TLS // Disable TLS support won't work as the MQTTHost is not set
|
#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
|
#ifdef USE_SUNRISE
|
||||||
#undef USE_SUNRISE // Disable support for Sunrise and sunset tools
|
#undef USE_SUNRISE // Disable support for Sunrise and sunset tools
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USE_KNX
|
||||||
|
#undef USE_KNX // Disable KNX IP Protocol Support
|
||||||
|
#endif
|
||||||
#ifdef USE_PZEM004T
|
#ifdef USE_PZEM004T
|
||||||
#undef USE_PZEM004T // Disable PZEM004T energy sensor
|
#undef USE_PZEM004T // Disable PZEM004T energy sensor
|
||||||
#endif
|
#endif
|
||||||
|
@ -91,6 +91,8 @@ enum UserSelectablePins {
|
|||||||
GPIO_SDS0X1, // Nova Fitness SDS011 Serial interface
|
GPIO_SDS0X1, // Nova Fitness SDS011 Serial interface
|
||||||
GPIO_SBR_TX, // Serial Bridge Serial interface
|
GPIO_SBR_TX, // Serial Bridge Serial interface
|
||||||
GPIO_SBR_RX, // 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 };
|
GPIO_SENSOR_END };
|
||||||
|
|
||||||
// Programmer selectable GPIO functionality offset by user selectable GPIOs
|
// 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_SAIR_TX "|" D_SENSOR_SAIR_RX "|"
|
||||||
D_SENSOR_SPI_CS "|" D_SENSOR_SPI_DC "|" D_SENSOR_BACKLIGHT "|"
|
D_SENSOR_SPI_CS "|" D_SENSOR_SPI_DC "|" D_SENSOR_BACKLIGHT "|"
|
||||||
D_SENSOR_PMS5003 "|" D_SENSOR_SDS0X1 "|"
|
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,
|
ARILUX_LC06,
|
||||||
SONOFF_S31,
|
SONOFF_S31,
|
||||||
ZENGGE_ZF_WF017,
|
ZENGGE_ZF_WF017,
|
||||||
|
SONOFF_POW_R2,
|
||||||
MAXMODULE };
|
MAXMODULE };
|
||||||
|
|
||||||
/********************************************************************************************/
|
/********************************************************************************************/
|
||||||
@ -205,6 +209,7 @@ const uint8_t kNiceList[MAXMODULE] PROGMEM = {
|
|||||||
SONOFF_DUAL,
|
SONOFF_DUAL,
|
||||||
SONOFF_DUAL_R2,
|
SONOFF_DUAL_R2,
|
||||||
SONOFF_POW,
|
SONOFF_POW,
|
||||||
|
SONOFF_POW_R2,
|
||||||
SONOFF_S31,
|
SONOFF_S31,
|
||||||
SONOFF_4CH,
|
SONOFF_4CH,
|
||||||
SONOFF_4CHPRO,
|
SONOFF_4CHPRO,
|
||||||
@ -318,7 +323,7 @@ const mytmplt kModules[MAXMODULE] PROGMEM = {
|
|||||||
GPIO_USER, // GPIO14 Optional sensor
|
GPIO_USER, // GPIO14 Optional sensor
|
||||||
0, 0, 0
|
0, 0, 0
|
||||||
},
|
},
|
||||||
{ "Sonoff Pow", // Sonoff Pow (ESP8266)
|
{ "Sonoff Pow", // Sonoff Pow (ESP8266 - HLW8012)
|
||||||
GPIO_KEY1, // GPIO00 Button
|
GPIO_KEY1, // GPIO00 Button
|
||||||
0, 0, 0, 0,
|
0, 0, 0, 0,
|
||||||
GPIO_HLW_SEL, // GPIO05 HLW8012 Sel output
|
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_REL1, // GPIO12 Red Led and Relay (0 = Off, 1 = On)
|
||||||
GPIO_HLW_CF1, // GPIO13 HLW8012 CF1 voltage / current
|
GPIO_HLW_CF1, // GPIO13 HLW8012 CF1 voltage / current
|
||||||
GPIO_HLW_CF, // GPIO14 HLW8012 CF power
|
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
|
0, 0
|
||||||
},
|
},
|
||||||
{ "Sonoff 4CH", // Sonoff 4CH (ESP8285)
|
{ "Sonoff 4CH", // Sonoff 4CH (ESP8285)
|
||||||
@ -494,7 +499,7 @@ const mytmplt kModules[MAXMODULE] PROGMEM = {
|
|||||||
GPIO_ADC0 // ADC0 A0 Analog input
|
GPIO_ADC0 // ADC0 A0 Analog input
|
||||||
},
|
},
|
||||||
{ "H801", // Lixada H801 Wifi (ESP8266)
|
{ "H801", // Lixada H801 Wifi (ESP8266)
|
||||||
GPIO_KEY1, // GPIO00 E-FW Button
|
GPIO_USER, // GPIO00 E-FW Button
|
||||||
GPIO_LED1, // GPIO01 Green LED
|
GPIO_LED1, // GPIO01 Green LED
|
||||||
GPIO_TXD, // GPIO02 RX - Pin next to TX on the PCB
|
GPIO_TXD, // GPIO02 RX - Pin next to TX on the PCB
|
||||||
GPIO_RXD, // GPIO03 TX - Pin next to GND 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
|
GPIO_USER, // GPIO15 RGBW LED White
|
||||||
0, 0
|
0, 0
|
||||||
},
|
},
|
||||||
{ "Sonoff S31", // Sonoff S31 (ESP8266)
|
{ "Sonoff S31", // Sonoff S31 (ESP8266 - CSE7766)
|
||||||
GPIO_KEY1, // GPIO00 Button
|
GPIO_KEY1, // GPIO00 Button
|
||||||
0, // GPIO01 Serial RXD 4800 baud 8E1 CSE7766 energy sensor
|
0, // GPIO01 Serial RXD 4800 baud 8E1 CSE7766 energy sensor
|
||||||
0,
|
0,
|
||||||
@ -804,6 +809,17 @@ const mytmplt kModules[MAXMODULE] PROGMEM = {
|
|||||||
GPIO_PWM1, // GPIO13 RGB LED Red
|
GPIO_PWM1, // GPIO13 RGB LED Red
|
||||||
GPIO_PWM3, // GPIO14 RGB LED Blue
|
GPIO_PWM3, // GPIO14 RGB LED Blue
|
||||||
0, 0, 0
|
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
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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
|
* Miscellaneous
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
@ -298,6 +232,19 @@ char* UpperCase_P(char* dest, const char* source)
|
|||||||
return dest;
|
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)
|
boolean ParseIp(uint32_t* addr, const char* str)
|
||||||
{
|
{
|
||||||
uint8_t *part = (uint8_t*)addr;
|
uint8_t *part = (uint8_t*)addr;
|
||||||
|
@ -165,8 +165,10 @@
|
|||||||
|
|
||||||
// -- Localization --------------------------------
|
// -- Localization --------------------------------
|
||||||
// If non selected the default en-GB will be used
|
// 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 cs-CZ // Czech in Czech
|
||||||
//#define MY_LANGUAGE de-DE // German in Germany
|
//#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 en-GB // English in Great Britain. Enabled by Default
|
||||||
//#define MY_LANGUAGE es-AR // Spanish in Argentina
|
//#define MY_LANGUAGE es-AR // Spanish in Argentina
|
||||||
//#define MY_LANGUAGE fr-FR // French in France
|
//#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_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!!
|
* Select all sensors - overrides above undefines!!
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
@ -396,9 +396,7 @@ void StartWebserver(int type, IPAddress ipweb)
|
|||||||
my_hostname, (mdns_begun) ? ".local" : "", ipweb.toString().c_str());
|
my_hostname, (mdns_begun) ? ".local" : "", ipweb.toString().c_str());
|
||||||
AddLog(LOG_LEVEL_INFO);
|
AddLog(LOG_LEVEL_INFO);
|
||||||
}
|
}
|
||||||
if (type) {
|
if (type) { webserver_state = type; }
|
||||||
webserver_state = type;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void StopWebserver()
|
void StopWebserver()
|
||||||
@ -435,12 +433,8 @@ void WifiManagerBegin()
|
|||||||
|
|
||||||
void PollDnsWebserver()
|
void PollDnsWebserver()
|
||||||
{
|
{
|
||||||
if (DnsServer) {
|
if (DnsServer) { DnsServer->processNextRequest(); }
|
||||||
DnsServer->processNextRequest();
|
if (WebServer) { WebServer->handleClient(); }
|
||||||
}
|
|
||||||
if (WebServer) {
|
|
||||||
WebServer->handleClient();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************************************/
|
/*********************************************************************************************/
|
||||||
@ -495,9 +489,7 @@ void HandleRoot()
|
|||||||
{
|
{
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_MAIN_MENU);
|
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_MAIN_MENU);
|
||||||
|
|
||||||
if (CaptivePortal()) { // If captive portal redirect instead of displaying the page.
|
if (CaptivePortal()) { return; } // If captive portal redirect instead of displaying the page.
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (HTTP_MANAGER == webserver_state) {
|
if (HTTP_MANAGER == webserver_state) {
|
||||||
if ((Settings.web_password[0] != 0) && !(WebServer->hasArg("USER1")) && !(WebServer->hasArg("PASS1"))) {
|
if ((Settings.web_password[0] != 0) && !(WebServer->hasArg("USER1")) && !(WebServer->hasArg("PASS1"))) {
|
||||||
@ -549,9 +541,7 @@ void HandleRoot()
|
|||||||
page += F("<tr>");
|
page += F("<tr>");
|
||||||
byte idx = 0;
|
byte idx = 0;
|
||||||
for (byte i = 0; i < 4; i++) {
|
for (byte i = 0; i < 4; i++) {
|
||||||
if (idx > 0) {
|
if (idx > 0) { page += F("</tr><tr>"); }
|
||||||
page += F("</tr><tr>");
|
|
||||||
}
|
|
||||||
for (byte j = 0; j < 4; j++) {
|
for (byte j = 0; j < 4; j++) {
|
||||||
idx++;
|
idx++;
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("<td style='width:25%'><button onclick='la(\"?k=%d\");'>%d</button></td>"), idx, idx);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("<td style='width:25%'><button onclick='la(\"?k=%d\");'>%d</button></td>"), idx, idx);
|
||||||
@ -620,17 +610,13 @@ void HandleAjaxStatusRefresh()
|
|||||||
boolean HttpUser()
|
boolean HttpUser()
|
||||||
{
|
{
|
||||||
boolean status = (HTTP_USER == webserver_state);
|
boolean status = (HTTP_USER == webserver_state);
|
||||||
if (status) {
|
if (status) { HandleRoot(); }
|
||||||
HandleRoot();
|
|
||||||
}
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandleConfiguration()
|
void HandleConfiguration()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURATION);
|
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURATION);
|
||||||
|
|
||||||
String page = FPSTR(HTTP_HEAD);
|
String page = FPSTR(HTTP_HEAD);
|
||||||
@ -638,10 +624,10 @@ void HandleConfiguration()
|
|||||||
page += FPSTR(HTTP_HEAD_STYLE);
|
page += FPSTR(HTTP_HEAD_STYLE);
|
||||||
page += FPSTR(HTTP_BTN_MENU_MODULE);
|
page += FPSTR(HTTP_BTN_MENU_MODULE);
|
||||||
#if defined(USE_TIMERS) && defined(USE_TIMERS_WEB)
|
#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
|
#endif // USE_TIMERS and USE_TIMERS_WEB
|
||||||
page += FPSTR(HTTP_BTN_MENU_WIFI);
|
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_MENU4);
|
||||||
page += FPSTR(HTTP_BTN_MAIN);
|
page += FPSTR(HTTP_BTN_MAIN);
|
||||||
ShowPage(page);
|
ShowPage(page);
|
||||||
@ -651,26 +637,20 @@ boolean GetUsedInModule(byte val, uint8_t *arr)
|
|||||||
{
|
{
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
|
||||||
if (!val) {
|
if (!val) { return false; } // None
|
||||||
return false; // None
|
|
||||||
}
|
|
||||||
#ifndef USE_I2C
|
#ifndef USE_I2C
|
||||||
if (GPIO_I2C_SCL == val) {
|
if (GPIO_I2C_SCL == val) { return true; }
|
||||||
return true;
|
if (GPIO_I2C_SDA == val) { return true; }
|
||||||
}
|
#endif
|
||||||
if (GPIO_I2C_SDA == val) {
|
#ifndef USE_SR04
|
||||||
return true;
|
if (GPIO_SR04_TRIG == val) { return true; }
|
||||||
}
|
if (GPIO_SR04_ECHO == val) { return true; }
|
||||||
#endif
|
#endif
|
||||||
#ifndef USE_WS2812
|
#ifndef USE_WS2812
|
||||||
if (GPIO_WS2812 == val) {
|
if (GPIO_WS2812 == val) { return true; }
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
#ifndef USE_IR_REMOTE
|
#ifndef USE_IR_REMOTE
|
||||||
if (GPIO_IRSEND == val) {
|
if (GPIO_IRSEND == val) { return true; }
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
if ((val >= GPIO_REL1) && (val < GPIO_REL1 + MAX_RELAYS)) {
|
if ((val >= GPIO_REL1) && (val < GPIO_REL1 + MAX_RELAYS)) {
|
||||||
offset = (GPIO_REL1_INV - GPIO_REL1);
|
offset = (GPIO_REL1_INV - GPIO_REL1);
|
||||||
@ -693,21 +673,15 @@ boolean GetUsedInModule(byte val, uint8_t *arr)
|
|||||||
offset = -(GPIO_PWM1_INV - GPIO_PWM1);
|
offset = -(GPIO_PWM1_INV - GPIO_PWM1);
|
||||||
}
|
}
|
||||||
for (byte i = 0; i < MAX_GPIO_PIN; i++) {
|
for (byte i = 0; i < MAX_GPIO_PIN; i++) {
|
||||||
if (arr[i] == val) {
|
if (arr[i] == val) { return true; }
|
||||||
return true;
|
if (arr[i] == val + offset) { return true; }
|
||||||
}
|
|
||||||
if (arr[i] == val + offset) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandleModuleConfiguration()
|
void HandleModuleConfiguration()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
char stemp[20];
|
char stemp[20];
|
||||||
uint8_t midx;
|
uint8_t midx;
|
||||||
|
|
||||||
@ -777,9 +751,7 @@ void HandleWifiConfiguration()
|
|||||||
|
|
||||||
void HandleWifi(boolean scan)
|
void HandleWifi(boolean scan)
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_WIFI);
|
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_WIFI);
|
||||||
|
|
||||||
@ -818,15 +790,13 @@ void HandleWifi(boolean scan)
|
|||||||
if (remove_duplicate_access_points) {
|
if (remove_duplicate_access_points) {
|
||||||
String cssid;
|
String cssid;
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
if (-1 == indices[i]) {
|
if (-1 == indices[i]) { continue; }
|
||||||
continue;
|
|
||||||
}
|
|
||||||
cssid = WiFi.SSID(indices[i]);
|
cssid = WiFi.SSID(indices[i]);
|
||||||
for (int j = i + 1; j < n; j++) {
|
for (int j = i + 1; j < n; j++) {
|
||||||
if (cssid == WiFi.SSID(indices[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());
|
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);
|
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
|
//display networks in page
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
if (-1 == indices[i]) {
|
if (-1 == indices[i]) { continue; } // skip dups
|
||||||
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]));
|
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);
|
AddLog(LOG_LEVEL_DEBUG);
|
||||||
int quality = WifiGetRssiAsQuality(WiFi.RSSI(indices[i]));
|
int quality = WifiGetRssiAsQuality(WiFi.RSSI(indices[i]));
|
||||||
@ -878,9 +846,7 @@ void HandleWifi(boolean scan)
|
|||||||
|
|
||||||
void HandleMqttConfiguration()
|
void HandleMqttConfiguration()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_MQTT);
|
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_MQTT);
|
||||||
|
|
||||||
String page = FPSTR(HTTP_HEAD);
|
String page = FPSTR(HTTP_HEAD);
|
||||||
@ -903,9 +869,7 @@ void HandleMqttConfiguration()
|
|||||||
|
|
||||||
void HandleLoggingConfiguration()
|
void HandleLoggingConfiguration()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_LOGGING);
|
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_LOGGING);
|
||||||
|
|
||||||
String page = FPSTR(HTTP_HEAD);
|
String page = FPSTR(HTTP_HEAD);
|
||||||
@ -952,9 +916,7 @@ void HandleLoggingConfiguration()
|
|||||||
|
|
||||||
void HandleOtherConfiguration()
|
void HandleOtherConfiguration()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_OTHER);
|
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_OTHER);
|
||||||
char stemp[40];
|
char stemp[40];
|
||||||
|
|
||||||
@ -990,9 +952,7 @@ void HandleOtherConfiguration()
|
|||||||
|
|
||||||
void HandleBackupConfiguration()
|
void HandleBackupConfiguration()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_BACKUP_CONFIGURATION));
|
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_BACKUP_CONFIGURATION));
|
||||||
|
|
||||||
uint8_t buffer[sizeof(Settings)];
|
uint8_t buffer[sizeof(Settings)];
|
||||||
@ -1001,7 +961,8 @@ void HandleBackupConfiguration()
|
|||||||
WebServer->setContentLength(sizeof(buffer));
|
WebServer->setContentLength(sizeof(buffer));
|
||||||
|
|
||||||
char attachment[100];
|
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->sendHeader(F("Content-Disposition"), attachment);
|
||||||
WebServer->send(200, FPSTR(HDR_CTYPE_STREAM), "");
|
WebServer->send(200, FPSTR(HDR_CTYPE_STREAM), "");
|
||||||
memcpy(buffer, &Settings, sizeof(buffer));
|
memcpy(buffer, &Settings, sizeof(buffer));
|
||||||
@ -1017,9 +978,7 @@ void HandleBackupConfiguration()
|
|||||||
|
|
||||||
void HandleSaveSettings()
|
void HandleSaveSettings()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
char stemp[TOPSZ];
|
char stemp[TOPSZ];
|
||||||
char stemp2[TOPSZ];
|
char stemp2[TOPSZ];
|
||||||
@ -1185,9 +1144,7 @@ void HandleSaveSettings()
|
|||||||
|
|
||||||
void HandleResetConfiguration()
|
void HandleResetConfiguration()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
char svalue[33];
|
char svalue[33];
|
||||||
|
|
||||||
@ -1207,9 +1164,7 @@ void HandleResetConfiguration()
|
|||||||
|
|
||||||
void HandleRestoreConfiguration()
|
void HandleRestoreConfiguration()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_RESTORE_CONFIGURATION);
|
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_RESTORE_CONFIGURATION);
|
||||||
|
|
||||||
String page = FPSTR(HTTP_HEAD);
|
String page = FPSTR(HTTP_HEAD);
|
||||||
@ -1227,9 +1182,7 @@ void HandleRestoreConfiguration()
|
|||||||
|
|
||||||
void HandleUpgradeFirmware()
|
void HandleUpgradeFirmware()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_FIRMWARE_UPGRADE);
|
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_FIRMWARE_UPGRADE);
|
||||||
|
|
||||||
String page = FPSTR(HTTP_HEAD);
|
String page = FPSTR(HTTP_HEAD);
|
||||||
@ -1248,9 +1201,7 @@ void HandleUpgradeFirmware()
|
|||||||
|
|
||||||
void HandleUpgradeFirmwareStart()
|
void HandleUpgradeFirmwareStart()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
char svalue[100];
|
char svalue[100];
|
||||||
|
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_UPGRADE_STARTED));
|
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_UPGRADE_STARTED));
|
||||||
@ -1277,9 +1228,7 @@ void HandleUpgradeFirmwareStart()
|
|||||||
|
|
||||||
void HandleUploadDone()
|
void HandleUploadDone()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_UPLOAD_DONE));
|
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_UPLOAD_DONE));
|
||||||
|
|
||||||
char error[100];
|
char error[100];
|
||||||
@ -1326,13 +1275,9 @@ void HandleUploadLoop()
|
|||||||
// Based on ESP8266HTTPUpdateServer.cpp uses ESP8266WebServer Parsing.cpp and Cores Updater.cpp (Update)
|
// Based on ESP8266HTTPUpdateServer.cpp uses ESP8266WebServer Parsing.cpp and Cores Updater.cpp (Update)
|
||||||
boolean _serialoutput = (LOG_LEVEL_DEBUG <= seriallog_level);
|
boolean _serialoutput = (LOG_LEVEL_DEBUG <= seriallog_level);
|
||||||
|
|
||||||
if (HTTP_USER == webserver_state) {
|
if (HTTP_USER == webserver_state) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (upload_error) {
|
if (upload_error) {
|
||||||
if (!upload_file_type) {
|
if (!upload_file_type) { Update.end(); }
|
||||||
Update.end();
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1407,9 +1352,7 @@ void HandleUploadLoop()
|
|||||||
if (_serialoutput) {
|
if (_serialoutput) {
|
||||||
Serial.printf(".");
|
Serial.printf(".");
|
||||||
upload_progress_dot_count++;
|
upload_progress_dot_count++;
|
||||||
if (!(upload_progress_dot_count % 80)) {
|
if (!(upload_progress_dot_count % 80)) { Serial.println(); }
|
||||||
Serial.println();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if(!upload_error && (UPLOAD_FILE_END == upload.status)) {
|
} else if(!upload_error && (UPLOAD_FILE_END == upload.status)) {
|
||||||
@ -1418,9 +1361,7 @@ void HandleUploadLoop()
|
|||||||
}
|
}
|
||||||
if (!upload_file_type) {
|
if (!upload_file_type) {
|
||||||
if (!Update.end(true)) { // true to set the size to the current progress
|
if (!Update.end(true)) { // true to set the size to the current progress
|
||||||
if (_serialoutput) {
|
if (_serialoutput) { Update.printError(Serial); }
|
||||||
Update.printError(Serial);
|
|
||||||
}
|
|
||||||
upload_error = 6;
|
upload_error = 6;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1433,9 +1374,7 @@ void HandleUploadLoop()
|
|||||||
restart_flag = 0;
|
restart_flag = 0;
|
||||||
MqttRetryCounter(0);
|
MqttRetryCounter(0);
|
||||||
upload_error = 7;
|
upload_error = 7;
|
||||||
if (!upload_file_type) {
|
if (!upload_file_type) { Update.end(); }
|
||||||
Update.end();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
delay(0);
|
delay(0);
|
||||||
}
|
}
|
||||||
@ -1450,9 +1389,7 @@ void HandlePreflightRequest()
|
|||||||
|
|
||||||
void HandleHttpCommand()
|
void HandleHttpCommand()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
char svalue[INPUT_BUFFER_SIZE]; // big to serve Backlog
|
char svalue[INPUT_BUFFER_SIZE]; // big to serve Backlog
|
||||||
|
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_COMMAND));
|
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_COMMAND));
|
||||||
@ -1472,12 +1409,7 @@ void HandleHttpCommand()
|
|||||||
if (valid) {
|
if (valid) {
|
||||||
byte curridx = web_log_index;
|
byte curridx = web_log_index;
|
||||||
WebGetArg("cmnd", svalue, sizeof(svalue));
|
WebGetArg("cmnd", svalue, sizeof(svalue));
|
||||||
if (strlen(svalue)) {
|
if (strlen(svalue)) { ExecuteCommand(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 (web_log_index != curridx) {
|
if (web_log_index != curridx) {
|
||||||
byte counter = curridx;
|
byte counter = curridx;
|
||||||
@ -1490,9 +1422,7 @@ void HandleHttpCommand()
|
|||||||
// [14:49:36 MQTT: stat/wemos5/RESULT = {"POWER":"OFF"}] > [{"POWER":"OFF"}]
|
// [14:49:36 MQTT: stat/wemos5/RESULT = {"POWER":"OFF"}] > [{"POWER":"OFF"}]
|
||||||
char* JSON = (char*)memchr(tmp, '{', len);
|
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 (JSON) { // Is it a JSON message (and not only [15:26:08 MQT: stat/wemos5/POWER = O])
|
||||||
if (message.length() > 1) {
|
if (message.length() > 1) { message += F(","); }
|
||||||
message += F(",");
|
|
||||||
}
|
|
||||||
size_t JSONlen = len - (JSON - tmp);
|
size_t JSONlen = len - (JSON - tmp);
|
||||||
strlcpy(mqtt_data, JSON +1, JSONlen -2);
|
strlcpy(mqtt_data, JSON +1, JSONlen -2);
|
||||||
message += mqtt_data;
|
message += mqtt_data;
|
||||||
@ -1514,10 +1444,7 @@ void HandleHttpCommand()
|
|||||||
|
|
||||||
void HandleConsole()
|
void HandleConsole()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONSOLE);
|
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONSOLE);
|
||||||
|
|
||||||
String page = FPSTR(HTTP_HEAD);
|
String page = FPSTR(HTTP_HEAD);
|
||||||
@ -1532,9 +1459,7 @@ void HandleConsole()
|
|||||||
|
|
||||||
void HandleAjaxConsoleRefresh()
|
void HandleAjaxConsoleRefresh()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
char svalue[INPUT_BUFFER_SIZE]; // big to serve Backlog
|
char svalue[INPUT_BUFFER_SIZE]; // big to serve Backlog
|
||||||
byte cflg = 1;
|
byte cflg = 1;
|
||||||
byte counter = 0; // Initial start, should never be 0 again
|
byte counter = 0; // Initial start, should never be 0 again
|
||||||
@ -1543,16 +1468,11 @@ void HandleAjaxConsoleRefresh()
|
|||||||
if (strlen(svalue)) {
|
if (strlen(svalue)) {
|
||||||
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_COMMAND "%s"), svalue);
|
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_COMMAND "%s"), svalue);
|
||||||
AddLog(LOG_LEVEL_INFO);
|
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);
|
ExecuteCommand(svalue);
|
||||||
// syslog_level = syslog_now;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WebGetArg("c2", svalue, sizeof(svalue));
|
WebGetArg("c2", svalue, sizeof(svalue));
|
||||||
if (strlen(svalue)) {
|
if (strlen(svalue)) { counter = atoi(svalue); }
|
||||||
counter = atoi(svalue);
|
|
||||||
}
|
|
||||||
|
|
||||||
byte last_reset_web_log_flag = reset_web_log_flag;
|
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
|
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;
|
message += mqtt_data;
|
||||||
}
|
}
|
||||||
counter++;
|
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);
|
} while (counter != web_log_index);
|
||||||
// XML encoding to fix blank console log in concert with javascript decodeURIComponent
|
// 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
|
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()
|
void HandleInformation()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_INFORMATION);
|
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_INFORMATION);
|
||||||
|
|
||||||
char stopic[TOPSZ];
|
char stopic[TOPSZ];
|
||||||
@ -1711,9 +1629,7 @@ void HandleInformation()
|
|||||||
|
|
||||||
void HandleRestart()
|
void HandleRestart()
|
||||||
{
|
{
|
||||||
if (HttpUser()) {
|
if (HttpUser()) { return; }
|
||||||
return;
|
|
||||||
}
|
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_RESTART);
|
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_RESTART);
|
||||||
|
|
||||||
String page = FPSTR(HTTP_HEAD);
|
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());
|
// snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_HTTP "Not fount (%s)"), WebServer->uri().c_str());
|
||||||
// AddLog(LOG_LEVEL_DEBUG);
|
// AddLog(LOG_LEVEL_DEBUG);
|
||||||
|
|
||||||
if (CaptivePortal()) { // If captive portal redirect instead of displaying the error page.
|
if (CaptivePortal()) { return; } // If captive portal redirect instead of displaying the error page.
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef USE_EMULATION
|
#ifdef USE_EMULATION
|
||||||
String path = WebServer->uri();
|
String path = WebServer->uri();
|
||||||
@ -1777,9 +1691,7 @@ boolean ValidIpAddress(String str)
|
|||||||
{
|
{
|
||||||
for (uint16_t i = 0; i < str.length(); i++) {
|
for (uint16_t i = 0; i < str.length(); i++) {
|
||||||
int c = str.charAt(i);
|
int c = str.charAt(i);
|
||||||
if (c != '.' && (c < '0' || c > '9')) {
|
if (c != '.' && (c < '0' || c > '9')) { return false; }
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -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
|
* Based on datasheet from http://www.chipsea.com/UploadFiles/2017/08/11144342F01B5662.pdf
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
@ -1015,9 +1015,9 @@ boolean EnergyCommand()
|
|||||||
void EnergyDrvInit()
|
void EnergyDrvInit()
|
||||||
{
|
{
|
||||||
energy_flg = ENERGY_NONE;
|
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;
|
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;
|
baudrate = 4800;
|
||||||
serial_config = SERIAL_8E1;
|
serial_config = SERIAL_8E1;
|
||||||
energy_flg = ENERGY_CSE7766;
|
energy_flg = ENERGY_CSE7766;
|
||||||
|
@ -491,17 +491,17 @@ const char HTTP_TIMER_SCRIPT[] PROGMEM =
|
|||||||
"m=qs('input[name=\"rd\"]:checked').value;" // Get mode
|
"m=qs('input[name=\"rd\"]:checked').value;" // Get mode
|
||||||
"p=pt[ct]&0x7FF;" // Get time
|
"p=pt[ct]&0x7FF;" // Get time
|
||||||
"if(m==0){" // Time is set
|
"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=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
|
"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
|
"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
|
"q=Math.floor(p/60);" // Parse hours
|
||||||
"if(q>=12){q-=12;qs('#dr').selectedIndex=1;}" // Negative offset
|
"if(q>=12){q-=12;qs('#dr').selectedIndex=1;}" // Negative offset
|
||||||
"else{qs('#dr').selectedIndex=0;}"
|
"else{qs('#dr').selectedIndex=0;}"
|
||||||
"if(q<10){q='0'+q;}qs('#ho').value=q;" // Set offset hours
|
"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
|
"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
|
"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
|
"s|=l&0x7FF;" // Save offset instead of time
|
||||||
"}"
|
"}"
|
||||||
#endif
|
#endif
|
||||||
"s|=((qs('#mw').selectedIndex)&0x0F)<<11;" // Get window minutes
|
"s|=((qs('#mw').selectedIndex)&0x0F)<<11;" // Get window minutes
|
||||||
"pt[ct]=s;"
|
"pt[ct]=s;"
|
||||||
"eb('t0').value=pt.join();" // Save parameters from array to hidden area
|
"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
|
"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+=\"<button type='button' class='tl' onclick='ot(\"+i+\",this)'\"+b+\">\"+(i+1)+\"</button>\"}"
|
"s='';for(i=0;i<" STR(MAX_TIMERS) ";i++){b='';if(0==i){b=\" id='dP'\";}s+=\"<button type='button' class='tl' onclick='ot(\"+i+\",this)'\"+b+\">\"+(i+1)+\"</button>\"}"
|
||||||
"eb('bt').innerHTML=s;" // Create tabs
|
"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
|
"o=qs('#dr');ce('+',o);ce('-',o);" // Create offset direction select options
|
||||||
#endif
|
#endif
|
||||||
"o=qs('#ho');for(i=0;i<=23;i++){ce((i<10)?('0'+i):i,o);}" // Create hours select options
|
"o=qs('#ho');for(i=0;i<=23;i++){ce((i<10)?('0'+i):i,o);}" // Create hours select options
|
||||||
|
@ -22,8 +22,7 @@
|
|||||||
* KNX support
|
* KNX support
|
||||||
*
|
*
|
||||||
* Using libraries:
|
* Using libraries:
|
||||||
* ESP KNX IP library (async-udp branch) (https://github.com/envy/esp-knx-ip/tree/async-udp)
|
* ESP KNX IP library (https://github.com/envy/esp-knx-ip)
|
||||||
* ESPAsyncUDP library (https://github.com/me-no-dev/ESPAsyncUDP)
|
|
||||||
|
|
||||||
Constants in sonoff.h
|
Constants in sonoff.h
|
||||||
-----------------------
|
-----------------------
|
||||||
@ -870,8 +869,6 @@ boolean Xdrv11(byte function)
|
|||||||
break;
|
break;
|
||||||
case FUNC_LOOP:
|
case FUNC_LOOP:
|
||||||
knx.loop(); // Process knx events
|
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;
|
break;
|
||||||
// case FUNC_COMMAND:
|
// case FUNC_COMMAND:
|
||||||
// result = KNXCommand();
|
// result = KNXCommand();
|
||||||
|
173
sonoff/xsns_22_sr04.ino
Normal file
173
sonoff/xsns_22_sr04.ino
Normal file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#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} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||||
|
#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
|
Loading…
x
Reference in New Issue
Block a user