Update ESPilight library to 0.16.0
tfa protocol kerui protocol
This commit is contained in:
1 parent
f0305236db
commit
ef431f6409
58 files changed
+836
-434
No files matched your search
@@ -7,7 +7,7 @@
|
||||
"type": "git",
|
||||
"url": "https://github.com/puuu/ESPiLight.git"
|
||||
},
|
||||
"version": "0.15.0",
|
||||
"version": "0.16.0",
|
||||
"license": "GPL-3.0",
|
||||
"frameworks": "arduino",
|
||||
"platforms":
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name=ESPiLight
|
||||
version=0.15.0
|
||||
version=0.16.0
|
||||
author=Puuu
|
||||
maintainer=Puuu <puuu@users.noreply.github.com>
|
||||
sentence=pilight 433.92 MHz protocols library for Arduino
|
||||
|
||||
@@ -68,6 +68,63 @@ static protocols_t *get_used_protocols() {
|
||||
return used_protocols;
|
||||
}
|
||||
|
||||
static protocols_t *find_protocol_node(const char *name) {
|
||||
protocols_t *pnode = get_protocols();
|
||||
while (pnode != nullptr) {
|
||||
if (strcmp(name, pnode->listener->id) == 0) {
|
||||
return pnode;
|
||||
}
|
||||
pnode = pnode->next;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static protocol_t *find_protocol(const char *name) {
|
||||
protocols_t *pnode = find_protocol_node(name);
|
||||
if (pnode != nullptr) {
|
||||
return pnode->listener;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static int create_pulse_train(uint16_t *pulses, protocol_t *protocol,
|
||||
const String &content) {
|
||||
Debug("piLightCreatePulseTrain: ");
|
||||
|
||||
if (!json_validate(content.c_str())) {
|
||||
Debug("invalid json: ");
|
||||
DebugLn(content);
|
||||
return ESPiLight::ERROR_INVALID_JSON;
|
||||
}
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wtype-limits"
|
||||
if ((protocol != nullptr) && (protocol->createCode != nullptr) &&
|
||||
(protocol->maxrawlen <= MAXPULSESTREAMLENGTH)) {
|
||||
#pragma GCC diagnostic pop
|
||||
Debug("protocol: ");
|
||||
Debug(protocol->id);
|
||||
|
||||
protocol->rawlen = 0;
|
||||
protocol->raw = pulses;
|
||||
JsonNode *message = json_decode(content.c_str());
|
||||
int return_value = protocol->createCode(message);
|
||||
json_delete(message);
|
||||
// delete message created by createCode()
|
||||
json_delete(protocol->message);
|
||||
protocol->message = nullptr;
|
||||
|
||||
if (return_value == EXIT_SUCCESS) {
|
||||
DebugLn(" create Code succeded.");
|
||||
return protocol->rawlen;
|
||||
} else {
|
||||
DebugLn(" create Code failed.");
|
||||
return ESPiLight::ERROR_INVALID_PILIGHT_MSG;
|
||||
}
|
||||
}
|
||||
return ESPiLight::ERROR_UNAVAILABLE_PROTOCOL;
|
||||
}
|
||||
|
||||
void ESPiLight::initReceiver(byte inputPin) {
|
||||
int16_t interrupt = digitalPinToInterrupt(inputPin);
|
||||
if (_interrupt == interrupt) {
|
||||
@@ -228,7 +285,8 @@ int ESPiLight::send(const String &protocol, const String &json,
|
||||
int length = 0;
|
||||
uint16_t pulses[MAXPULSESTREAMLENGTH];
|
||||
|
||||
length = createPulseTrain(pulses, protocol, json);
|
||||
protocol_t *protocol_listener = find_protocol(protocol.c_str());
|
||||
length = create_pulse_train(pulses, protocol_listener, json);
|
||||
if (length > 0) {
|
||||
/*
|
||||
DebugLn();
|
||||
@@ -240,6 +298,9 @@ int ESPiLight::send(const String &protocol, const String &json,
|
||||
Debug(content);
|
||||
DebugLn(")");
|
||||
*/
|
||||
if (repeats == 0) {
|
||||
repeats = protocol_listener->txrpt;
|
||||
}
|
||||
sendPulseTrain(pulses, (unsigned)length, repeats);
|
||||
}
|
||||
return length;
|
||||
@@ -247,49 +308,8 @@ int ESPiLight::send(const String &protocol, const String &json,
|
||||
|
||||
int ESPiLight::createPulseTrain(uint16_t *pulses, const String &protocol_id,
|
||||
const String &content) {
|
||||
protocol_t *protocol = nullptr;
|
||||
protocols_t *pnode = get_used_protocols();
|
||||
JsonNode *message;
|
||||
|
||||
Debug("piLightCreatePulseTrain: ");
|
||||
|
||||
if (!json_validate(content.c_str())) {
|
||||
Debug("invalid json: ");
|
||||
DebugLn(content);
|
||||
return ERROR_INVALID_JSON;
|
||||
}
|
||||
|
||||
while (pnode != nullptr) {
|
||||
protocol = pnode->listener;
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wtype-limits"
|
||||
if ((protocol->createCode != nullptr) && (protocol_id == protocol->id) &&
|
||||
(protocol->maxrawlen <= MAXPULSESTREAMLENGTH)) {
|
||||
#pragma GCC diagnostic pop
|
||||
Debug("protocol: ");
|
||||
Debug(protocol->id);
|
||||
|
||||
protocol->rawlen = 0;
|
||||
protocol->raw = pulses;
|
||||
message = json_decode(content.c_str());
|
||||
int return_value = protocol->createCode(message);
|
||||
json_delete(message);
|
||||
// delete message created by createCode()
|
||||
json_delete(protocol->message);
|
||||
protocol->message = nullptr;
|
||||
|
||||
if (return_value == EXIT_SUCCESS) {
|
||||
DebugLn(" create Code succeded.");
|
||||
return protocol->rawlen;
|
||||
} else {
|
||||
DebugLn(" create Code failed.");
|
||||
return ERROR_INVALID_PILIGHT_MSG;
|
||||
}
|
||||
}
|
||||
pnode = pnode->next;
|
||||
}
|
||||
return ERROR_UNAVAILABLE_PROTOCOL;
|
||||
protocol_t *protocol = find_protocol(protocol_id.c_str());
|
||||
return create_pulse_train(pulses, protocol, content);
|
||||
}
|
||||
|
||||
size_t ESPiLight::parsePulseTrain(uint16_t *pulses, uint8_t length) {
|
||||
@@ -359,9 +379,9 @@ static void fire_callback(protocol_t *protocol, ESPiLightCallBack callback) {
|
||||
status = FIRST;
|
||||
json_free(protocol->old_content);
|
||||
protocol->old_content = content;
|
||||
} else if (protocol->repeats < 100) {
|
||||
} else if (!(protocol->repeats & 0x80)) {
|
||||
if (strcmp(content, protocol->old_content) == 0) {
|
||||
protocol->repeats += 100;
|
||||
protocol->repeats |= 0x80;
|
||||
status = VALID;
|
||||
} else {
|
||||
status = INVALID;
|
||||
@@ -378,7 +398,7 @@ static void fire_callback(protocol_t *protocol, ESPiLightCallBack callback) {
|
||||
deviceId = String(stmp);
|
||||
};
|
||||
(callback)(String(protocol->id), String(protocol->old_content), status,
|
||||
protocol->repeats, deviceId);
|
||||
protocol->repeats & 0x7F, deviceId);
|
||||
}
|
||||
|
||||
String ESPiLight::pulseTrainToString(const uint16_t *codes, size_t length) {
|
||||
@@ -473,17 +493,6 @@ int ESPiLight::stringToPulseTrain(const String &data, uint16_t *codes,
|
||||
return length;
|
||||
}
|
||||
|
||||
static protocols_t *find_proto(const char *name) {
|
||||
protocols_t *pnode = get_protocols();
|
||||
while (pnode != nullptr) {
|
||||
if (strcmp(name, pnode->listener->id) == 0) {
|
||||
return pnode;
|
||||
}
|
||||
pnode = pnode->next;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void ESPiLight::limitProtocols(const String &protos) {
|
||||
if (!json_validate(protos.c_str())) {
|
||||
DebugLn("Protocol limit argument is not a valid json message!");
|
||||
@@ -517,7 +526,7 @@ void ESPiLight::limitProtocols(const String &protos) {
|
||||
continue;
|
||||
}
|
||||
|
||||
protocols_t *templ = find_proto(curr->string_);
|
||||
protocols_t *templ = find_protocol_node(curr->string_);
|
||||
if (templ == nullptr) {
|
||||
Debug("Protocol not found: ");
|
||||
DebugLn(curr->string_);
|
||||
|
||||
@@ -62,8 +62,9 @@ class ESPiLight {
|
||||
|
||||
/**
|
||||
* Transmit Pilight json message
|
||||
* repeats of 0 means repeats as defined in protocol.
|
||||
*/
|
||||
int send(const String &protocol, const String &json, size_t repeats = 10);
|
||||
int send(const String &protocol, const String &json, size_t repeats = 0);
|
||||
|
||||
/**
|
||||
* Parse pulse train and fire callback
|
||||
|
||||
@@ -184,19 +184,19 @@ void alectoWS1700Init(void) {
|
||||
alecto_ws1700->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
alecto_ws1700->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&alecto_ws1700->options, 't', "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&alecto_ws1700->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&alecto_ws1700->options, 'h', "humidity", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&alecto_ws1700->options, 'b', "battery", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[01]$");
|
||||
options_add(&alecto_ws1700->options, "t", "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&alecto_ws1700->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&alecto_ws1700->options, "h", "humidity", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&alecto_ws1700->options, "b", "battery", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[01]$");
|
||||
|
||||
// options_add(&alecto_ws1700->options, 0, "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_ws1700->options, 0, "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&alecto_ws1700->options, 0, "humidity-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&alecto_ws1700->options, 0, "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_ws1700->options, 0, "humidity-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_ws1700->options, 0, "show-humidity", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&alecto_ws1700->options, 0, "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&alecto_ws1700->options, 0, "show-battery", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
// options_add(&alecto_ws1700->options, "0", "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_ws1700->options, "0", "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&alecto_ws1700->options, "0", "humidity-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&alecto_ws1700->options, "0", "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_ws1700->options, "0", "humidity-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_ws1700->options, "0", "show-humidity", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&alecto_ws1700->options, "0", "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&alecto_ws1700->options, "0", "show-battery", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
|
||||
alecto_ws1700->parseCode=&parseCode;
|
||||
alecto_ws1700->checkValues=&checkValues;
|
||||
|
||||
@@ -165,13 +165,13 @@ void alectoWSD17Init(void) {
|
||||
alecto_wsd17->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
alecto_wsd17->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&alecto_wsd17->options, 't', "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&alecto_wsd17->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&alecto_wsd17->options, "t", "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&alecto_wsd17->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
|
||||
// options_add(&alecto_wsd17->options, 0, "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_wsd17->options, 0, "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_wsd17->options, 0, "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&alecto_wsd17->options, 0, "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
// options_add(&alecto_wsd17->options, "0", "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_wsd17->options, "0", "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_wsd17->options, "0", "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&alecto_wsd17->options, "0", "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
|
||||
alecto_wsd17->parseCode=&parseCode;
|
||||
alecto_wsd17->checkValues=&checkValues;
|
||||
|
||||
@@ -83,7 +83,7 @@ static void parseCode(void) {
|
||||
}
|
||||
}
|
||||
|
||||
n8=binToDec(binary, 32, 36);
|
||||
n8=binToDec(binary, 32, 35);
|
||||
n7=binToDec(binary, 28, 31);
|
||||
n6=binToDec(binary, 24, 27);
|
||||
n5=binToDec(binary, 20, 23);
|
||||
@@ -139,7 +139,7 @@ static void parseCode(void) {
|
||||
type = 0x5;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
alecto_wx500->message = json_mkobject();
|
||||
switch(type) {
|
||||
case 1:
|
||||
@@ -147,7 +147,7 @@ static void parseCode(void) {
|
||||
temperature = (double)(binToSigned(binary, 12, 23)) / 10.0;
|
||||
humidity = (binToDec(binary, 28, 31) * 10) + binToDec(binary, 24,27);
|
||||
battery = !binary[8];
|
||||
|
||||
|
||||
temperature += temp_offset;
|
||||
humidity += humi_offset;
|
||||
|
||||
@@ -275,26 +275,26 @@ void alectoWX500Init(void) {
|
||||
alecto_wx500->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
alecto_wx500->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&alecto_wx500->options, 't', "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&alecto_wx500->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&alecto_wx500->options, 'b', "battery", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&alecto_wx500->options, 'h', "humidity", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&alecto_wx500->options, 'w', "windavg", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&alecto_wx500->options, 'd', "winddir", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&alecto_wx500->options, 'g', "windgust", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
//options_add(&alecto_wx500->options, 'r', "rain", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&alecto_wx500->options, "t", "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&alecto_wx500->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&alecto_wx500->options, "b", "battery", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&alecto_wx500->options, "h", "humidity", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&alecto_wx500->options, "w", "windavg", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&alecto_wx500->options, "d", "winddir", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&alecto_wx500->options, "g", "windgust", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
//options_add(&alecto_wx500->options, "r", "rain", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
|
||||
// options_add(&alecto_wx500->options, 0, "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_wx500->options, 0, "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_wx500->options, 0, "humidity-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_wx500->options, 0, "wind-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_wx500->options, 0, "humidity-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&alecto_wx500->options, 0, "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&alecto_wx500->options, 0, "show-humidity", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&alecto_wx500->options, 0, "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&alecto_wx500->options, 0, "show-battery", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&alecto_wx500->options, 0, "show-wind", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
//options_add(&alecto_wx500->options, 0, "show-rain", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
// options_add(&alecto_wx500->options, "0", "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_wx500->options, "0", "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_wx500->options, "0", "humidity-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_wx500->options, "0", "wind-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&alecto_wx500->options, "0", "humidity-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&alecto_wx500->options, "0", "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&alecto_wx500->options, "0", "show-humidity", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&alecto_wx500->options, "0", "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&alecto_wx500->options, "0", "show-battery", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&alecto_wx500->options, "0", "show-wind", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
//options_add(&alecto_wx500->options, "0", "show-rain", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
alecto_wx500->parseCode=&parseCode;
|
||||
alecto_wx500->checkValues=&checkValues;
|
||||
|
||||
@@ -107,12 +107,12 @@ void arctechContactInit(void) {
|
||||
arctech_contact->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
arctech_contact->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&arctech_contact->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_contact->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,7}|[1-5][0-9]{7}|6([0-6][0-9]{6}|7(0[0-9]{5}|10([0-7][0-9]{3}|8([0-7][0-9]{2}|8([0-5][0-9]|6[0-3]))))))$");
|
||||
options_add(&arctech_contact->options, 't', "opened", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_contact->options, 'f', "closed", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_contact->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_contact->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,7}|[1-5][0-9]{7}|6([0-6][0-9]{6}|7(0[0-9]{5}|10([0-7][0-9]{3}|8([0-7][0-9]{2}|8([0-5][0-9]|6[0-3]))))))$");
|
||||
options_add(&arctech_contact->options, "t", "opened", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_contact->options, "f", "closed", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
options_add(&arctech_contact->options, 'a', "all", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_contact->options, "a", "all", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
arctech_contact->parseCode=&parseCode;
|
||||
arctech_contact->validate=&validate;
|
||||
|
||||
@@ -36,10 +36,11 @@
|
||||
#define MIN_PULSE_LENGTH 250
|
||||
#define MAX_PULSE_LENGTH 320
|
||||
#define AVG_PULSE_LENGTH 300
|
||||
#define RAW_LENGTH 148
|
||||
#define MAX_RAW_LENGTH 148
|
||||
#define MIN_RAW_LENGTH 132
|
||||
|
||||
static int validate(void) {
|
||||
if(arctech_dimmer->rawlen == RAW_LENGTH) {
|
||||
if(arctech_dimmer->rawlen == MAX_RAW_LENGTH || arctech_dimmer->rawlen == MIN_RAW_LENGTH) {
|
||||
if(arctech_dimmer->raw[arctech_dimmer->rawlen-1] >= (MIN_PULSE_LENGTH*PULSE_DIV) &&
|
||||
arctech_dimmer->raw[arctech_dimmer->rawlen-1] <= (MAX_PULSE_LENGTH*PULSE_DIV) &&
|
||||
arctech_dimmer->raw[1] >= AVG_PULSE_LENGTH*(PULSE_MULTIPLIER*2)) {
|
||||
@@ -60,9 +61,9 @@ static void createMessage(int id, int unit, int state, int all, int dimlevel, in
|
||||
json_append_member(arctech_dimmer->message, "unit", json_mknumber(unit, 0));
|
||||
}
|
||||
|
||||
if(dimlevel == 0) {
|
||||
/*if(dimlevel == 0) {
|
||||
state = 0;
|
||||
} else if(dimlevel > 0) {
|
||||
} else */if(dimlevel >= 0) {
|
||||
state = 1;
|
||||
json_append_member(arctech_dimmer->message, "dimlevel", json_mknumber(dimlevel, 0));
|
||||
}
|
||||
@@ -81,9 +82,9 @@ static void createMessage(int id, int unit, int state, int all, int dimlevel, in
|
||||
}
|
||||
|
||||
static void parseCode(void) {
|
||||
int binary[RAW_LENGTH/4], x = 0, i = 0;
|
||||
int binary[MAX_RAW_LENGTH/4], x = 0, i = 0;
|
||||
|
||||
if(arctech_dimmer->rawlen>RAW_LENGTH) {
|
||||
if(arctech_dimmer->rawlen>MAX_RAW_LENGTH) {
|
||||
logprintf(LOG_ERR, "arctech_dimmer: parsecode - invalid parameter passed %d", arctech_dimmer->rawlen);
|
||||
return;
|
||||
}
|
||||
@@ -96,7 +97,10 @@ static void parseCode(void) {
|
||||
}
|
||||
}
|
||||
|
||||
int dimlevel = binToDecRev(binary, 32, 35);
|
||||
int dimlevel = -1;
|
||||
if(arctech_dimmer->rawlen == MAX_RAW_LENGTH) {
|
||||
dimlevel = binToDecRev(binary, 32, 35);
|
||||
}
|
||||
int unit = binToDecRev(binary, 28, 31);
|
||||
int state = binary[27];
|
||||
int all = binary[26];
|
||||
@@ -196,7 +200,7 @@ static void createDimlevel(int dimlevel) {
|
||||
}
|
||||
|
||||
static void createFooter(void) {
|
||||
arctech_dimmer->raw[147]=(PULSE_DIV*AVG_PULSE_LENGTH);
|
||||
arctech_dimmer->raw[arctech_dimmer->rawlen-1]=(PULSE_DIV*AVG_PULSE_LENGTH);
|
||||
}
|
||||
|
||||
static int checkValues(struct JsonNode *code) {
|
||||
@@ -292,9 +296,11 @@ static int createCode(struct JsonNode *code) {
|
||||
createUnit(unit);
|
||||
if(dimlevel > -1) {
|
||||
createDimlevel(dimlevel);
|
||||
arctech_dimmer->rawlen = MAX_RAW_LENGTH;
|
||||
} else {
|
||||
arctech_dimmer->rawlen = MIN_RAW_LENGTH;
|
||||
}
|
||||
createFooter();
|
||||
arctech_dimmer->rawlen = RAW_LENGTH;
|
||||
}
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
@@ -318,23 +324,23 @@ void arctechDimmerInit(void) {
|
||||
arctech_dimmer->devtype = DIMMER;
|
||||
arctech_dimmer->hwtype = RF433;
|
||||
arctech_dimmer->txrpt = NORMAL_REPEATS;
|
||||
arctech_dimmer->minrawlen = RAW_LENGTH;
|
||||
arctech_dimmer->maxrawlen = RAW_LENGTH;
|
||||
arctech_dimmer->minrawlen = MIN_RAW_LENGTH;
|
||||
arctech_dimmer->maxrawlen = MAX_RAW_LENGTH;
|
||||
arctech_dimmer->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
arctech_dimmer->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&arctech_dimmer->options, 'd', "dimlevel", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_dimmer->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_dimmer->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,7}|[1-5][0-9]{7}|6([0-6][0-9]{6}|7(0[0-9]{5}|10([0-7][0-9]{3}|8([0-7][0-9]{2}|8([0-5][0-9]|6[0-3]))))))$");
|
||||
options_add(&arctech_dimmer->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_dimmer->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_dimmer->options, 'a', "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&arctech_dimmer->options, 'l', "learn", OPTION_NO_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&arctech_dimmer->options, "d", "dimlevel", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_dimmer->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_dimmer->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,7}|[1-5][0-9]{7}|6([0-6][0-9]{6}|7(0[0-9]{5}|10([0-7][0-9]{3}|8([0-7][0-9]{2}|8([0-5][0-9]|6[0-3]))))))$");
|
||||
options_add(&arctech_dimmer->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_dimmer->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_dimmer->options, "a", "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&arctech_dimmer->options, "l", "learn", OPTION_NO_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
|
||||
options_add(&arctech_dimmer->options, 0, "dimlevel-minimum", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_dimmer->options, 0, "dimlevel-maximum", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)15, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_dimmer->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_dimmer->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_dimmer->options, "0", "dimlevel-minimum", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_dimmer->options, "0", "dimlevel-maximum", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)15, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_dimmer->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_dimmer->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
arctech_dimmer->parseCode=&parseCode;
|
||||
arctech_dimmer->createCode=&createCode;
|
||||
@@ -346,7 +352,7 @@ void arctechDimmerInit(void) {
|
||||
#if defined(MODULE) && !defined(_WIN32)
|
||||
void compatibility(struct module_t *module) {
|
||||
module->name = "arctech_dimmer";
|
||||
module->version = "3.4";
|
||||
module->version = "3.5";
|
||||
module->reqversion = "6.0";
|
||||
module->reqcommit = "84";
|
||||
}
|
||||
|
||||
@@ -102,10 +102,10 @@ void arctechDuskInit(void) {
|
||||
arctech_dusk->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
arctech_dusk->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&arctech_dusk->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_dusk->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,7}|[1-5][0-9]{7}|6([0-6][0-9]{6}|7(0[0-9]{5}|10([0-7][0-9]{3}|8([0-7][0-9]{2}|8([0-5][0-9]|6[0-3]))))))$");
|
||||
options_add(&arctech_dusk->options, 't', "dusk", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_dusk->options, 'f', "dawn", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_dusk->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_dusk->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,7}|[1-5][0-9]{7}|6([0-6][0-9]{6}|7(0[0-9]{5}|10([0-7][0-9]{3}|8([0-7][0-9]{2}|8([0-5][0-9]|6[0-3]))))))$");
|
||||
options_add(&arctech_dusk->options, "t", "dusk", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_dusk->options, "f", "dawn", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
arctech_dusk->parseCode=&parseCode;
|
||||
arctech_dusk->validate=&validate;
|
||||
|
||||
@@ -102,10 +102,10 @@ void arctechMotionInit(void) {
|
||||
arctech_motion->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
arctech_motion->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&arctech_motion->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_motion->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,7}|[1-5][0-9]{7}|6([0-6][0-9]{6}|7(0[0-9]{5}|10([0-7][0-9]{3}|8([0-7][0-9]{2}|8([0-5][0-9]|6[0-3]))))))$");
|
||||
options_add(&arctech_motion->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_motion->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_motion->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_motion->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,7}|[1-5][0-9]{7}|6([0-6][0-9]{6}|7(0[0-9]{5}|10([0-7][0-9]{3}|8([0-7][0-9]{2}|8([0-5][0-9]|6[0-3]))))))$");
|
||||
options_add(&arctech_motion->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_motion->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
arctech_motion->parseCode=&parseCode;
|
||||
arctech_motion->validate=&validate;
|
||||
|
||||
@@ -247,15 +247,15 @@ void arctechScreenInit(void) {
|
||||
arctech_screen->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
arctech_screen->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&arctech_screen->options, 't', "up", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_screen->options, 'f', "down", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_screen->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_screen->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,7}|[1-5][0-9]{7}|6([0-6][0-9]{6}|7(0[0-9]{5}|10([0-7][0-9]{3}|8([0-7][0-9]{2}|8([0-5][0-9]|6[0-3]))))))$");
|
||||
options_add(&arctech_screen->options, 'a', "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&arctech_screen->options, 'l', "learn", OPTION_NO_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&arctech_screen->options, "t", "up", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_screen->options, "f", "down", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_screen->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_screen->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,7}|[1-5][0-9]{7}|6([0-6][0-9]{6}|7(0[0-9]{5}|10([0-7][0-9]{3}|8([0-7][0-9]{2}|8([0-5][0-9]|6[0-3]))))))$");
|
||||
options_add(&arctech_screen->options, "a", "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&arctech_screen->options, "l", "learn", OPTION_NO_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
|
||||
options_add(&arctech_screen->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_screen->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_screen->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_screen->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
arctech_screen->parseCode=&parseCode;
|
||||
arctech_screen->createCode=&createCode;
|
||||
|
||||
@@ -204,13 +204,13 @@ void arctechScreenOldInit(void) {
|
||||
arctech_screen_old->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
arctech_screen_old->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&arctech_screen_old->options, 't', "up", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_screen_old->options, 'f', "down", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_screen_old->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_screen_old->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&arctech_screen_old->options, "t", "up", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_screen_old->options, "f", "down", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_screen_old->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_screen_old->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
|
||||
options_add(&arctech_screen_old->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_screen_old->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_screen_old->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_screen_old->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
arctech_screen_old->parseCode=&parseCode;
|
||||
arctech_screen_old->createCode=&createCode;
|
||||
|
||||
@@ -251,15 +251,15 @@ void arctechSwitchInit(void) {
|
||||
arctech_switch->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
arctech_switch->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&arctech_switch->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_switch->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_switch->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_switch->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,7}|[1-5][0-9]{7}|6([0-6][0-9]{6}|7(0[0-9]{5}|10([0-7][0-9]{3}|8([0-7][0-9]{2}|8([0-5][0-9]|6[0-3]))))))$");
|
||||
options_add(&arctech_switch->options, 'a', "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&arctech_switch->options, 'l', "learn", OPTION_NO_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&arctech_switch->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_switch->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_switch->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_switch->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,7}|[1-5][0-9]{7}|6([0-6][0-9]{6}|7(0[0-9]{5}|10([0-7][0-9]{3}|8([0-7][0-9]{2}|8([0-5][0-9]|6[0-3]))))))$");
|
||||
options_add(&arctech_switch->options, "a", "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&arctech_switch->options, "l", "learn", OPTION_NO_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
|
||||
options_add(&arctech_switch->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_switch->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_switch->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_switch->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
arctech_switch->parseCode=&parseCode;
|
||||
arctech_switch->createCode=&createCode;
|
||||
|
||||
@@ -227,13 +227,13 @@ void arctechSwitchOldInit(void) {
|
||||
arctech_switch_old->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
arctech_switch_old->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&arctech_switch_old->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_switch_old->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_switch_old->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_switch_old->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&arctech_switch_old->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_switch_old->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&arctech_switch_old->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[1][0-5])$");
|
||||
options_add(&arctech_switch_old->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
|
||||
options_add(&arctech_switch_old->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_switch_old->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_switch_old->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&arctech_switch_old->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
arctech_switch_old->parseCode=&parseCode;
|
||||
arctech_switch_old->createCode=&createCode;
|
||||
|
||||
@@ -173,16 +173,16 @@ void auriolInit(void) {
|
||||
auriol->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
auriol->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&auriol->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&auriol->options, 'c', "channel", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[1-3]");
|
||||
options_add(&auriol->options, 't', "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&auriol->options, 'b', "battery", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[01]$");
|
||||
options_add(&auriol->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&auriol->options, "c", "channel", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[1-3]");
|
||||
options_add(&auriol->options, "t", "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&auriol->options, "b", "battery", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[01]$");
|
||||
|
||||
// options_add(&auriol->options, 0, "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&auriol->options, 0, "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&auriol->options, 0, "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&auriol->options, 0, "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&auriol->options, 0, "show-battery", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&auriol->options, "0", "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&auriol->options, "0", "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&auriol->options, "0", "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&auriol->options, "0", "show-battery", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
|
||||
auriol->parseCode=&parseCode;
|
||||
auriol->checkValues=&checkValues;
|
||||
|
||||
@@ -228,14 +228,14 @@ void beamishSwitchInit(void) {
|
||||
beamish_switch->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
beamish_switch->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&beamish_switch->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&beamish_switch->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&beamish_switch->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([1-4])$");
|
||||
options_add(&beamish_switch->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$");
|
||||
options_add(&beamish_switch->options, 'a', "all", OPTION_NO_VALUE, 0, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&beamish_switch->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&beamish_switch->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&beamish_switch->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([1-4])$");
|
||||
options_add(&beamish_switch->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$");
|
||||
options_add(&beamish_switch->options, "a", "all", OPTION_NO_VALUE, 0, JSON_NUMBER, NULL, NULL);
|
||||
|
||||
options_add(&beamish_switch->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&beamish_switch->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&beamish_switch->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&beamish_switch->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
beamish_switch->parseCode=&parseCode;
|
||||
beamish_switch->createCode=&createCode;
|
||||
|
||||
@@ -238,13 +238,13 @@ void clarusSwitchInit(void) {
|
||||
clarus_switch->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
clarus_switch->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&clarus_switch->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&clarus_switch->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&clarus_switch->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]|[1-5][0-9]|6[0-3])$");
|
||||
options_add(&clarus_switch->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_STRING, NULL, "^[ABCDEF](3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&clarus_switch->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&clarus_switch->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&clarus_switch->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]|[1-5][0-9]|6[0-3])$");
|
||||
options_add(&clarus_switch->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_STRING, NULL, "^[ABCDEF](3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
|
||||
options_add(&clarus_switch->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&clarus_switch->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&clarus_switch->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&clarus_switch->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
clarus_switch->parseCode=&parseCode;
|
||||
clarus_switch->createCode=&createCode;
|
||||
|
||||
@@ -219,14 +219,14 @@ void cleverwattsInit(void) {
|
||||
cleverwatts->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
cleverwatts->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&cleverwatts->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&cleverwatts->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&cleverwatts->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-3])$");
|
||||
options_add(&cleverwatts->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,6}|10([0-3][0-9]{4}|4([0-7][0-9]{3}|8([0-4][0-9]{2}|5([0-6][0-9]|7[0-5])))))$");
|
||||
options_add(&cleverwatts->options, 'a', "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&cleverwatts->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&cleverwatts->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&cleverwatts->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-3])$");
|
||||
options_add(&cleverwatts->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,6}|10([0-3][0-9]{4}|4([0-7][0-9]{3}|8([0-4][0-9]{2}|5([0-6][0-9]|7[0-5])))))$");
|
||||
options_add(&cleverwatts->options, "a", "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
|
||||
options_add(&cleverwatts->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&cleverwatts->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&cleverwatts->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&cleverwatts->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
cleverwatts->parseCode=&parseCode;
|
||||
cleverwatts->createCode=&createCode;
|
||||
|
||||
@@ -98,9 +98,9 @@ void conradRSLContactInit(void) {
|
||||
conrad_rsl_contact->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
conrad_rsl_contact->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&conrad_rsl_contact->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(([0-9]|([1-9][0-9])|([1-9][0-9]{2})|([1-9][0-9]{3})|([1-9][0-9]{4})|([1-9][0-9]{5})|([1-9][0-9]{6})|((6710886[0-3])|(671088[0-5][0-9])|(67108[0-7][0-9]{2})|(6710[0-7][0-9]{3})|(671[0--1][0-9]{4})|(670[0-9]{5})|(6[0-6][0-9]{6})|(0[0-5][0-9]{7}))))$");
|
||||
options_add(&conrad_rsl_contact->options, 't', "opened", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&conrad_rsl_contact->options, 'f', "closed", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&conrad_rsl_contact->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(([0-9]|([1-9][0-9])|([1-9][0-9]{2})|([1-9][0-9]{3})|([1-9][0-9]{4})|([1-9][0-9]{5})|([1-9][0-9]{6})|((6710886[0-3])|(671088[0-5][0-9])|(67108[0-7][0-9]{2})|(6710[0-7][0-9]{3})|(671[0--1][0-9]{4})|(670[0-9]{5})|(6[0-6][0-9]{6})|(0[0-5][0-9]{7}))))$");
|
||||
options_add(&conrad_rsl_contact->options, "t", "opened", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&conrad_rsl_contact->options, "f", "closed", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
conrad_rsl_contact->parseCode=&parseCode;
|
||||
conrad_rsl_contact->validate=&validate;
|
||||
|
||||
@@ -286,15 +286,15 @@ void conradRSLSwitchInit(void) {
|
||||
conrad_rsl_switch->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
conrad_rsl_switch->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&conrad_rsl_switch->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^[1-4]$");
|
||||
options_add(&conrad_rsl_switch->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^[1-4]$");
|
||||
options_add(&conrad_rsl_switch->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&conrad_rsl_switch->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&conrad_rsl_switch->options, 'a', "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&conrad_rsl_switch->options, 'l', "learn", OPTION_NO_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&conrad_rsl_switch->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^[1-4]$");
|
||||
options_add(&conrad_rsl_switch->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^[1-4]$");
|
||||
options_add(&conrad_rsl_switch->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&conrad_rsl_switch->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&conrad_rsl_switch->options, "a", "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&conrad_rsl_switch->options, "l", "learn", OPTION_NO_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
|
||||
options_add(&conrad_rsl_switch->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&conrad_rsl_switch->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&conrad_rsl_switch->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&conrad_rsl_switch->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
conrad_rsl_switch->parseCode=&parseCode;
|
||||
conrad_rsl_switch->createCode=&createCode;
|
||||
|
||||
@@ -224,13 +224,13 @@ void daycomInit(void) {
|
||||
daycom->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
daycom->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&daycom->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&daycom->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&daycom->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-7])$");
|
||||
options_add(&daycom->options, 's', "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,4}|1[0-6][0-9]{3})$");
|
||||
options_add(&daycom->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^[0-6]?[0-9]$");
|
||||
options_add(&daycom->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&daycom->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&daycom->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-7])$");
|
||||
options_add(&daycom->options, "s", "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,4}|1[0-6][0-9]{3})$");
|
||||
options_add(&daycom->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^[0-6]?[0-9]$");
|
||||
|
||||
options_add(&daycom->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&daycom->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
daycom->parseCode=&parseCode;
|
||||
daycom->createCode=&createCode;
|
||||
|
||||
@@ -193,12 +193,12 @@ void ehomeInit(void) {
|
||||
ehome->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
ehome->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&ehome->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-4])$");
|
||||
options_add(&ehome->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&ehome->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&ehome->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-4])$");
|
||||
options_add(&ehome->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&ehome->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
options_add(&ehome->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&ehome->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&ehome->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&ehome->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
ehome->parseCode=&parseCode;
|
||||
ehome->createCode=&createCode;
|
||||
|
||||
@@ -337,14 +337,14 @@ void elro300SwitchInit(void) {
|
||||
elro_300_switch->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
elro_300_switch->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&elro_300_switch->options, 's', "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,9}|[1-3][0-9]{9}|4([01][0-9]{8}|2([0-8][0-9]{7}|9([0-3][0-9]{6}|4([0-8][0-9]{5}|9([0-5][0-9]{4}|6([0-6][0-9]{3}|7([01][0-9]{2}|2([0-8][0-9]|9[0-4])))))))))$");
|
||||
options_add(&elro_300_switch->options, 'u', "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^[0-9]{1,2}$");
|
||||
options_add(&elro_300_switch->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&elro_300_switch->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&elro_300_switch->options, 'a', "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&elro_300_switch->options, "s", "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,9}|[1-3][0-9]{9}|4([01][0-9]{8}|2([0-8][0-9]{7}|9([0-3][0-9]{6}|4([0-8][0-9]{5}|9([0-5][0-9]{4}|6([0-6][0-9]{3}|7([01][0-9]{2}|2([0-8][0-9]|9[0-4])))))))))$");
|
||||
options_add(&elro_300_switch->options, "u", "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^[0-9]{1,2}$");
|
||||
options_add(&elro_300_switch->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&elro_300_switch->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&elro_300_switch->options, "a", "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
|
||||
options_add(&elro_300_switch->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&elro_300_switch->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&elro_300_switch->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&elro_300_switch->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
|
||||
elro_300_switch->parseCode=&parseCode;
|
||||
|
||||
@@ -205,13 +205,13 @@ void elro400SwitchInit(void) {
|
||||
elro_400_switch->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
elro_400_switch->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&elro_400_switch->options, 's', "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&elro_400_switch->options, 'u', "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&elro_400_switch->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&elro_400_switch->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&elro_400_switch->options, "s", "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&elro_400_switch->options, "u", "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&elro_400_switch->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&elro_400_switch->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
options_add(&elro_400_switch->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&elro_400_switch->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&elro_400_switch->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&elro_400_switch->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
elro_400_switch->parseCode=&parseCode;
|
||||
elro_400_switch->createCode=&createCode;
|
||||
|
||||
@@ -95,10 +95,10 @@ void elro800ContactInit(void) {
|
||||
elro_800_contact->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
elro_800_contact->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&elro_800_contact->options, 's', "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&elro_800_contact->options, 'u', "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&elro_800_contact->options, 't', "opened", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&elro_800_contact->options, 'f', "closed", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&elro_800_contact->options, "s", "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&elro_800_contact->options, "u", "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&elro_800_contact->options, "t", "opened", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&elro_800_contact->options, "f", "closed", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
elro_800_contact->parseCode=&parseCode;
|
||||
elro_800_contact->validate=&validate;
|
||||
|
||||
@@ -241,13 +241,13 @@ void elro800SwitchInit(void) {
|
||||
elro_800_switch->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
elro_800_switch->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&elro_800_switch->options, 's', "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^102[0-3]|10[01][0-9]|[0-9]{1,3}$");
|
||||
options_add(&elro_800_switch->options, 'u', "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&elro_800_switch->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&elro_800_switch->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&elro_800_switch->options, "s", "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^102[0-3]|10[01][0-9]|[0-9]{1,3}$");
|
||||
options_add(&elro_800_switch->options, "u", "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&elro_800_switch->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&elro_800_switch->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
options_add(&elro_800_switch->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&elro_800_switch->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&elro_800_switch->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&elro_800_switch->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
elro_800_switch->parseCode=&parseCode;
|
||||
elro_800_switch->createCode=&createCode;
|
||||
|
||||
@@ -338,15 +338,15 @@ void eurodomestSwitchInit(void) {
|
||||
eurodomest_switch->maxgaplen = MAX_LONG_PULSE_LENGTH;
|
||||
eurodomest_switch->mingaplen = MIN_LONG_PULSE_LENGTH;
|
||||
|
||||
options_add(&eurodomest_switch->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&eurodomest_switch->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&eurodomest_switch->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([1-4])$");
|
||||
options_add(&eurodomest_switch->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[0-9]{2}|[0-9]{3}|[0-9]{4}|[0-9]{5}|[0-9]{6}|[0-9]{7})$");
|
||||
options_add(&eurodomest_switch->options, 'a', "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&eurodomest_switch->options, 'l', "learn", OPTION_NO_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&eurodomest_switch->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&eurodomest_switch->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&eurodomest_switch->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([1-4])$");
|
||||
options_add(&eurodomest_switch->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1}|[0-9]{2}|[0-9]{3}|[0-9]{4}|[0-9]{5}|[0-9]{6}|[0-9]{7})$");
|
||||
options_add(&eurodomest_switch->options, "a", "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&eurodomest_switch->options, "l", "learn", OPTION_NO_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
|
||||
options_add(&eurodomest_switch->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]$");
|
||||
options_add(&eurodomest_switch->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]$");
|
||||
options_add(&eurodomest_switch->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]$");
|
||||
options_add(&eurodomest_switch->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]$");
|
||||
|
||||
eurodomest_switch->parseCode = &parseCode;
|
||||
eurodomest_switch->createCode = &createCode;
|
||||
|
||||
@@ -93,9 +93,9 @@ void ev1527Init(void) {
|
||||
ev1527->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
ev1527->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&ev1527->options, 'u', "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(104857[0-5]|10485[0-6][0-9]|1048[0-4][0-9][0-9]|104[0-7][0-9]{3}|10[0-3][0-9]{4}|0?[0-9]{1,6})$");
|
||||
options_add(&ev1527->options, 't', "opened", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&ev1527->options, 'f', "closed", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&ev1527->options, "u", "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(104857[0-5]|10485[0-6][0-9]|1048[0-4][0-9][0-9]|104[0-7][0-9]{3}|10[0-3][0-9]{4}|0?[0-9]{1,6})$");
|
||||
options_add(&ev1527->options, "t", "opened", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&ev1527->options, "f", "closed", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
ev1527->parseCode=&parseCode;
|
||||
ev1527->validate=&validate;
|
||||
|
||||
@@ -210,12 +210,12 @@ void heitechInit(void) {
|
||||
heitech->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
heitech->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&heitech->options, 's', "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&heitech->options, 'u', "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&heitech->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&heitech->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&heitech->options, "s", "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&heitech->options, "u", "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&heitech->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&heitech->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
options_add(&heitech->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&heitech->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
heitech->parseCode=&parseCode;
|
||||
heitech->createCode=&createCode;
|
||||
|
||||
@@ -222,13 +222,13 @@ void impulsInit(void) {
|
||||
impuls->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
impuls->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&impuls->options, 's', "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&impuls->options, 'u', "programcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&impuls->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&impuls->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&impuls->options, "s", "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&impuls->options, "u", "programcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&impuls->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&impuls->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
options_add(&impuls->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&impuls->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&impuls->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&impuls->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
impuls->parseCode=&parseCode;
|
||||
impuls->createCode=&createCode;
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
/*
|
||||
Copyright (C) 2017 - 2019 by CurlyMo, Meloen, zeltom, mwka
|
||||
|
||||
This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "../../core/pilight.h"
|
||||
#include "../../core/common.h"
|
||||
#include "../../core/dso.h"
|
||||
#include "../../core/log.h"
|
||||
#include "../protocol.h"
|
||||
#include "../../core/binary.h"
|
||||
#include "../../core/gc.h"
|
||||
#include "kerui_d026.h"
|
||||
|
||||
|
||||
#define PULSE_MULTIPLIER 3
|
||||
#define MIN_PULSE_LENGTH 260
|
||||
#define MAX_PULSE_LENGTH 310
|
||||
#define AVG_PULSE_LENGTH 280
|
||||
#define RAW_LENGTH 50
|
||||
|
||||
static int validate(void) {
|
||||
if(kerui_D026->rawlen == RAW_LENGTH) {
|
||||
if(kerui_D026->raw[kerui_D026->rawlen-1] >= (MIN_PULSE_LENGTH*PULSE_DIV) &&
|
||||
kerui_D026->raw[kerui_D026->rawlen-1] <= (MAX_PULSE_LENGTH*PULSE_DIV)) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void createMessage(int unitcode, int state, int state2, int state3, int state4) {
|
||||
kerui_D026->message = json_mkobject();
|
||||
json_append_member(kerui_D026->message, "unitcode", json_mknumber(unitcode, 0));
|
||||
|
||||
if(state4 == 0) {
|
||||
json_append_member(kerui_D026->message, "state", json_mkstring("opened"));
|
||||
}
|
||||
else if(state == 0) {
|
||||
json_append_member(kerui_D026->message, "state", json_mkstring("closed"));
|
||||
}
|
||||
else if(state2 == 0) {
|
||||
json_append_member(kerui_D026->message, "state", json_mkstring("tamper"));
|
||||
}
|
||||
else if(state3 == 0) {
|
||||
json_append_member(kerui_D026->message, "state", json_mkstring("not used"));
|
||||
}
|
||||
else{
|
||||
json_append_member(kerui_D026->message, "battery", json_mkstring("low"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void parseCode(void) {
|
||||
int binary[RAW_LENGTH/2], x = 0, i = 0;
|
||||
|
||||
for(x=0;x<kerui_D026->rawlen-2;x+=2) {
|
||||
if(kerui_D026->raw[x] > (int)((double)AVG_PULSE_LENGTH*((double)PULSE_MULTIPLIER/2))) {
|
||||
binary[i++] = 1;
|
||||
} else {
|
||||
binary[i++] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
int unitcode = binToDec(binary, 0, 19);
|
||||
int state = binary[20];
|
||||
int state2 = binary[21];
|
||||
int state3 = binary[22];
|
||||
int state4 = binary[23];
|
||||
createMessage(unitcode, state, state2, state3, state4);
|
||||
}
|
||||
|
||||
#if !defined(MODULE) && !defined(_WIN32)
|
||||
__attribute__((weak))
|
||||
#endif
|
||||
void keruiD026Init(void) {
|
||||
|
||||
protocol_register(&kerui_D026);
|
||||
protocol_set_id(kerui_D026, "kerui_D026");
|
||||
protocol_device_add(kerui_D026, "kerui_D026", "KERUI D026 Door sensor");
|
||||
kerui_D026->devtype = CONTACT;
|
||||
kerui_D026->hwtype = RF433;
|
||||
kerui_D026->minrawlen = RAW_LENGTH;
|
||||
kerui_D026->maxrawlen = RAW_LENGTH;
|
||||
kerui_D026->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
kerui_D026->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&kerui_D026->options, "u", "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&kerui_D026->options, "t", "opened", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&kerui_D026->options, "f", "closed", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&kerui_D026->options, "a", "tamper", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
kerui_D026->parseCode=&parseCode;
|
||||
kerui_D026->validate=&validate;
|
||||
}
|
||||
|
||||
#if defined(MODULE) && !defined(_WIN32)
|
||||
void compatibility(struct module_t *module) {
|
||||
module->name = "kerui_D026";
|
||||
module->version = "2.0";
|
||||
module->reqversion = "6.0";
|
||||
module->reqcommit = "84";
|
||||
}
|
||||
|
||||
void init(void) {
|
||||
keruiD026Init();
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
Copyright (C) 2017 - 2019 by CurlyMo, Meloen, zeltom, mwka
|
||||
|
||||
This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
#ifndef _PROTOCOL_KERUI_D026_H_
|
||||
#define _PROTOCOL_KERUI_D026_H_
|
||||
|
||||
#include "../protocol.h"
|
||||
|
||||
struct protocol_t *kerui_D026;
|
||||
void keruiD026Init(void);
|
||||
|
||||
#endif
|
||||
@@ -215,13 +215,13 @@ void logilinkSwitchInit(void) {
|
||||
logilink_switch->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
logilink_switch->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&logilink_switch->options, 's', "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&logilink_switch->options, 'u', "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^[0-7]$");
|
||||
options_add(&logilink_switch->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&logilink_switch->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&logilink_switch->options, "s", "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&logilink_switch->options, "u", "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^[0-7]$");
|
||||
options_add(&logilink_switch->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&logilink_switch->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
options_add(&logilink_switch->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&logilink_switch->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&logilink_switch->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&logilink_switch->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
logilink_switch->parseCode=&parseCode;
|
||||
logilink_switch->createCode=&createCode;
|
||||
|
||||
@@ -206,13 +206,13 @@ void mumbiInit(void) {
|
||||
mumbi->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
mumbi->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&mumbi->options, 's', "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&mumbi->options, 'u', "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&mumbi->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&mumbi->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&mumbi->options, "s", "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&mumbi->options, "u", "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&mumbi->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&mumbi->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
options_add(&mumbi->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&mumbi->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&mumbi->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&mumbi->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
mumbi->parseCode=&parseCode;
|
||||
mumbi->createCode=&createCode;
|
||||
|
||||
@@ -213,17 +213,17 @@ void ninjablocksWeatherInit(void) {
|
||||
ninjablocks_weather->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
// sync-id[4]; Homecode[4], Channel Code[2], Sync[3], Humidity[7], Temperature[15], Footer [1]
|
||||
options_add(&ninjablocks_weather->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]|1[0-5])$");
|
||||
options_add(&ninjablocks_weather->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-3])$");
|
||||
options_add(&ninjablocks_weather->options, 't', "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,5}$");
|
||||
options_add(&ninjablocks_weather->options, 'h', "humidity", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,5}$");
|
||||
options_add(&ninjablocks_weather->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]|1[0-5])$");
|
||||
options_add(&ninjablocks_weather->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-3])$");
|
||||
options_add(&ninjablocks_weather->options, "t", "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,5}$");
|
||||
options_add(&ninjablocks_weather->options, "h", "humidity", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,5}$");
|
||||
|
||||
// options_add(&ninjablocks_weather->options, 0, "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&ninjablocks_weather->options, 0, "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&ninjablocks_weather->options, 0, "humidity-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&ninjablocks_weather->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&ninjablocks_weather->options, 0, "show-humidity", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&ninjablocks_weather->options, 0, "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
// options_add(&ninjablocks_weather->options, "0", "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&ninjablocks_weather->options, "0", "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&ninjablocks_weather->options, "0", "humidity-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&ninjablocks_weather->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&ninjablocks_weather->options, "0", "show-humidity", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&ninjablocks_weather->options, "0", "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
|
||||
ninjablocks_weather->parseCode=&parseCode;
|
||||
ninjablocks_weather->checkValues=&checkValues;
|
||||
|
||||
@@ -202,13 +202,13 @@ void pollinInit(void) {
|
||||
pollin->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
pollin->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&pollin->options, 's', "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&pollin->options, 'u', "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&pollin->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&pollin->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&pollin->options, "s", "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&pollin->options, "u", "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&pollin->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&pollin->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
options_add(&pollin->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&pollin->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&pollin->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&pollin->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
pollin->parseCode=&parseCode;
|
||||
pollin->createCode=&createCode;
|
||||
|
||||
@@ -104,10 +104,10 @@ int codetab[16][40] = {
|
||||
* If a code is unknown 0 is substituted, f.e. for group-id 0 no codes are known, so all 40 values are 0
|
||||
*/
|
||||
/* code 0 */
|
||||
{ 0xBB42,0x4301,0x00F9,0x8EBA, 0xE4C3,0x1924,0x6CDB,0x9D57,
|
||||
0x00F9,0x4301,0x00F9,0x8EBA, 0x9D57,0xE4C3,0x6CDB,0x1924,
|
||||
0x8EBA,0x00F9,0x4301,0xBB42, 0x1924,0xE4C3,0x6CDB,0x9D57,
|
||||
0xE4C3,0x1924,0x9D57,0x6CDB, 0x8EBA,0xBB42,0x4301,0x00F9,
|
||||
{ 0xBB42,0x4301,0x00F9,0x8EBA, 0xE4C3,0x1924,0x6CDB,0x9D57,
|
||||
0x00F9,0x4301,0x00F9,0x8EBA, 0x9D57,0xE4C3,0x6CDB,0x1924,
|
||||
0x8EBA,0x00F9,0x4301,0xBB42, 0x1924,0xE4C3,0x6CDB,0x9D57,
|
||||
0xE4C3,0x1924,0x9D57,0x6CDB, 0x8EBA,0xBB42,0x4301,0x00F9,
|
||||
0xE4C3,0x1924,0x9D57,0x6CDB, 0x4301,0x00F9,0x8EBA,0xBB42 },
|
||||
/* code 1 */
|
||||
{ 0x616A,0xCF71,0x7AE2,0xB639, 0xF59B,0xE923,0x14C4,0x32A7,
|
||||
@@ -401,16 +401,16 @@ void quiggGT1000Init(void) {
|
||||
quigg_gt1000->maxgaplen = (int)PROG_SPACE*1.1;
|
||||
quigg_gt1000->mingaplen = (int)PROG_SPACE*0.9;
|
||||
|
||||
options_add(&quigg_gt1000->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_gt1000->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_gt1000->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-5])$");
|
||||
options_add(&quigg_gt1000->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(1[0-6]|[0-9])$");
|
||||
options_add(&quigg_gt1000->options, 'a', "all", OPTION_NO_VALUE, DEVICES_SETTING, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&quigg_gt1000->options, 's', "super", OPTION_NO_VALUE, DEVICES_SETTING, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&quigg_gt1000->options, 'n', "num", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, NULL, "^([0-3])$");
|
||||
options_add(&quigg_gt1000->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_gt1000->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_gt1000->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-5])$");
|
||||
options_add(&quigg_gt1000->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(1[0-6]|[0-9])$");
|
||||
options_add(&quigg_gt1000->options, "a", "all", OPTION_NO_VALUE, DEVICES_SETTING, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&quigg_gt1000->options, "s", "super", OPTION_NO_VALUE, DEVICES_SETTING, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&quigg_gt1000->options, "n", "num", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, NULL, "^([0-3])$");
|
||||
|
||||
options_add(&quigg_gt1000->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&quigg_gt1000->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&quigg_gt1000->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&quigg_gt1000->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
quigg_gt1000->printHelp = &printHelp;
|
||||
quigg_gt1000->createCode = &createCode;
|
||||
|
||||
@@ -270,15 +270,15 @@ void quiggGT7000Init(void) {
|
||||
quigg_gt7000->maxgaplen = (int)(PULSE_QUIGG_FOOTER*0.9);
|
||||
quigg_gt7000->mingaplen = (int)(PULSE_QUIGG_FOOTER*1.1);
|
||||
|
||||
options_add(&quigg_gt7000->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_gt7000->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_gt7000->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-3])$");
|
||||
options_add(&quigg_gt7000->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-3][0-9][0-9][0-9]|40[0-8][0-9]|409[0-5])$");
|
||||
options_add(&quigg_gt7000->options, 'a', "all", OPTION_NO_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&quigg_gt7000->options, 'l', "learn", OPTION_HAS_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&quigg_gt7000->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_gt7000->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_gt7000->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-3])$");
|
||||
options_add(&quigg_gt7000->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-3][0-9][0-9][0-9]|40[0-8][0-9]|409[0-5])$");
|
||||
options_add(&quigg_gt7000->options, "a", "all", OPTION_NO_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&quigg_gt7000->options, "l", "learn", OPTION_HAS_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
|
||||
options_add(&quigg_gt7000->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&quigg_gt7000->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&quigg_gt7000->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&quigg_gt7000->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
quigg_gt7000->parseCode=&parseCode;
|
||||
quigg_gt7000->createCode=&createCode;
|
||||
|
||||
@@ -97,7 +97,7 @@ char gt9000_unit_offon_map2[16][2][4] = {{{1,2,9,10},{3,4,7,11}}, //unit 0
|
||||
{{-1,-1,-1,-1},{-1,-1,-1,-1}},
|
||||
{{-1,-1,-1,-1},{-1,-1,-1,-1}},
|
||||
{{-1,-1,-1,-1},{-1,-1,-1,-1}}};
|
||||
|
||||
|
||||
int gt9000_hash[16] = { 0x0, 0x9, 0xF, 0x4, 0xA, 0xD, 0x5, 0xB,
|
||||
0x3, 0x2, 0x1, 0x7, 0xE, 0x6, 0xC, 0x8 };
|
||||
int gt9000_hash2[16] = { 0x0, 0x9, 0x5, 0xF, 0x3, 0x6, 0xC, 0x7,
|
||||
@@ -106,7 +106,7 @@ int gt9000_hash2[16] = { 0x0, 0x9, 0x5, 0xF, 0x3, 0x6, 0xC, 0x7,
|
||||
static int isSyscodeType1(int syscodetype) {
|
||||
if(syscodetype & 0x13)
|
||||
return 1;
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -148,12 +148,12 @@ static void createMessage(int *binary, int systemcode, int state, int unit) {
|
||||
|
||||
static int decodePayload(int payload, int index, int syscodetype) {
|
||||
int ret = -1;
|
||||
|
||||
|
||||
if(isSyscodeType1(syscodetype))
|
||||
ret = payload^gt9000_hash[index];
|
||||
else
|
||||
ret = payload^gt9000_hash2[index];
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@ static void parseCode(void) {
|
||||
if(statecode == gt9000_unit_offon_map2[unit][1][i]) {
|
||||
state = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
createMessage(binary, systemcode, state, unit);
|
||||
@@ -265,7 +265,7 @@ static void initAllCodes(int systemcode, int allcodes[16]) {
|
||||
int i = 0, syscodetype = 0;
|
||||
int systemcode1enc = 0, systemcode2enc = 0, systemcode3enc = 0, systemcode4enc = 0, systemcode5enc = 0;
|
||||
int systemcode1dec = 0, systemcode3dec = 0, systemcode4dec = 0, systemcode5dec = 0;
|
||||
|
||||
|
||||
syscodetype = (systemcode >> 16) & 0xF;
|
||||
systemcode1dec = (systemcode >> 16) & 0xF;
|
||||
//systemcode2dec is always 0, therefore it is not needed
|
||||
@@ -273,10 +273,10 @@ static void initAllCodes(int systemcode, int allcodes[16]) {
|
||||
systemcode3dec = (systemcode >> 8) & 0xF;
|
||||
systemcode4dec = (systemcode >> 4) & 0xF;
|
||||
systemcode5dec = systemcode & 0xF;
|
||||
|
||||
|
||||
//first 4 bits are not encrypted
|
||||
systemcode1enc = systemcode1dec;
|
||||
|
||||
|
||||
//encrypt systemcode
|
||||
for(i=0;i<16;i++) {
|
||||
systemcode2enc = i;
|
||||
@@ -328,14 +328,14 @@ static int createCode(JsonNode *code) {
|
||||
statecode = gt9000_unit_offon_map[unit][state][1];
|
||||
else
|
||||
statecode = gt9000_unit_offon_map2[unit][state][1];
|
||||
|
||||
|
||||
if(statecode==-1) {
|
||||
logprintf(LOG_ERR, "quigg_gt9000: unit %d not supported, try 0-15.", unit);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
int encrypteddata = allcodes[statecode];
|
||||
|
||||
|
||||
clearCode();
|
||||
createEncryptedData(encrypteddata);
|
||||
createUnit(unit);
|
||||
@@ -376,10 +376,10 @@ void quiggGT9000Init(void) {
|
||||
quigg_gt9000->maxgaplen = (int)(PULSE_QUIGG_FOOTER2*1.1);
|
||||
quigg_gt9000->mingaplen = (int)(PULSE_QUIGG_FOOTER2*0.9);
|
||||
|
||||
options_add(&quigg_gt9000->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_gt9000->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_gt9000->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&quigg_gt9000->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&quigg_gt9000->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_gt9000->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_gt9000->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&quigg_gt9000->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, NULL);
|
||||
|
||||
quigg_gt9000->parseCode=&parseCode;
|
||||
quigg_gt9000->createCode=&createCode;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (C) 2015 CurlyMoo & dominikkarall
|
||||
Copyright (C) 2015 CurlyMoo & dominikkarall
|
||||
|
||||
This file is part of pilight.
|
||||
|
||||
|
||||
@@ -287,15 +287,15 @@ void quiggScreenInit(void) {
|
||||
quigg_screen->maxgaplen = (int)(PULSE_QUIGG_SCREEN_FOOTER*0.9);
|
||||
quigg_screen->mingaplen = (int)(PULSE_QUIGG_SCREEN_FOOTER*1.1);
|
||||
|
||||
options_add(&quigg_screen->options, 't', "up", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_screen->options, 'f', "down", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_screen->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-3])$");
|
||||
options_add(&quigg_screen->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-3][0-9][0-9][0-9]|40[0-8][0-9]|409[0-5])$");
|
||||
options_add(&quigg_screen->options, 'a', "all", OPTION_NO_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&quigg_screen->options, 'l', "learn", OPTION_HAS_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&quigg_screen->options, "t", "up", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_screen->options, "f", "down", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&quigg_screen->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-3])$");
|
||||
options_add(&quigg_screen->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-3][0-9][0-9][0-9]|40[0-8][0-9]|409[0-5])$");
|
||||
options_add(&quigg_screen->options, "a", "all", OPTION_NO_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&quigg_screen->options, "l", "learn", OPTION_HAS_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
|
||||
options_add(&quigg_screen->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&quigg_screen->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&quigg_screen->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&quigg_screen->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
quigg_screen->parseCode=&parseCode;
|
||||
quigg_screen->createCode=&createCode;
|
||||
|
||||
@@ -225,14 +225,14 @@ void rc101Init(void) {
|
||||
rc101->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
rc101->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&rc101->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-4])$");
|
||||
options_add(&rc101->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-4])$");
|
||||
options_add(&rc101->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&rc101->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&rc101->options, 'a', "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
options_add(&rc101->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-4])$");
|
||||
options_add(&rc101->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-4])$");
|
||||
options_add(&rc101->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&rc101->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&rc101->options, "a", "all", OPTION_OPT_VALUE, DEVICES_OPTIONAL, JSON_NUMBER, NULL, NULL);
|
||||
|
||||
options_add(&rc101->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&rc101->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&rc101->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&rc101->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
rc101->parseCode=&parseCode;
|
||||
rc101->createCode=&createCode;
|
||||
|
||||
@@ -81,29 +81,29 @@ static void parseCode(void) {
|
||||
//Check if there is a valid systemcode
|
||||
if((binary[0]+binary[1]+binary[2]+binary[3]) > 1)
|
||||
return;
|
||||
|
||||
|
||||
//Get systemcode: 1000=>1, 0100=>2, 0010=>3, 0001=>4
|
||||
int systemcode = 0;
|
||||
for(i=0;i<4;i++) {
|
||||
if(binary[i] == 1)
|
||||
systemcode = i+1;
|
||||
}
|
||||
|
||||
|
||||
//Check if there is a valid programcode
|
||||
if((binary[4]+binary[5]+binary[6]+binary[7]) > 1)
|
||||
return;
|
||||
|
||||
|
||||
//Get programcode: 1000=>1, 0100=>2, 0010=>3, 0001=>4
|
||||
int programcode = 0;
|
||||
for(i=4;i<8;i++) {
|
||||
if(binary[i] == 1)
|
||||
programcode = i-3;
|
||||
}
|
||||
|
||||
|
||||
//Check if a system and programcode was found
|
||||
if(systemcode == 0 || programcode == 0)
|
||||
return;
|
||||
|
||||
|
||||
// There seems to be no check and binary[10] is always a low
|
||||
int state = binary[11]^1;
|
||||
|
||||
@@ -214,13 +214,13 @@ void rsl366Init(void) {
|
||||
rsl366->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
rsl366->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&rsl366->options, 's', "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([1234]{1})$");
|
||||
options_add(&rsl366->options, 'u', "programcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([1234]{1})$");
|
||||
options_add(&rsl366->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&rsl366->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&rsl366->options, "s", "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([1234]{1})$");
|
||||
options_add(&rsl366->options, "u", "programcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([1234]{1})$");
|
||||
options_add(&rsl366->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&rsl366->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
options_add(&rsl366->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&rsl366->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&rsl366->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&rsl366->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
rsl366->parseCode=&parseCode;
|
||||
rsl366->createCode=&createCode;
|
||||
|
||||
@@ -95,10 +95,10 @@ void sc2262Init(void) {
|
||||
sc2262->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
sc2262->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&sc2262->options, 's', "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&sc2262->options, 'u', "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&sc2262->options, 't', "opened", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&sc2262->options, 'f', "closed", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&sc2262->options, "s", "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&sc2262->options, "u", "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&sc2262->options, "t", "opened", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&sc2262->options, "f", "closed", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
sc2262->parseCode=&parseCode;
|
||||
sc2262->validate=&validate;
|
||||
|
||||
@@ -89,8 +89,8 @@ void secudoSmokeInit(void) {
|
||||
secudo_smoke->minrawlen = 26;
|
||||
secudo_smoke->maxrawlen = 26;
|
||||
|
||||
options_add(&secudo_smoke->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^[0-9]{1-4}$");
|
||||
options_add(&secudo_smoke->options, 't', "alarm", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&secudo_smoke->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^[0-9]{1-4}$");
|
||||
options_add(&secudo_smoke->options, "t", "alarm", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
secudo_smoke->parseCode=&parseCode;
|
||||
secudo_smoke->validate=&validate;
|
||||
|
||||
@@ -181,12 +181,12 @@ void selectremoteInit(void) {
|
||||
selectremote->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
selectremote->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&selectremote->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^[0-7]$");
|
||||
options_add(&selectremote->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&selectremote->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&selectremote->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^[0-7]$");
|
||||
options_add(&selectremote->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&selectremote->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
options_add(&selectremote->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&selectremote->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&selectremote->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&selectremote->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
selectremote->parseCode=&parseCode;
|
||||
selectremote->createCode=&createCode;
|
||||
|
||||
@@ -207,13 +207,13 @@ void silvercrestInit(void) {
|
||||
silvercrest->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
silvercrest->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&silvercrest->options, 's', "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&silvercrest->options, 'u', "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&silvercrest->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&silvercrest->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&silvercrest->options, "s", "systemcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&silvercrest->options, "u", "unitcode", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^(3[012]?|[012][0-9]|[0-9]{1})$");
|
||||
options_add(&silvercrest->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&silvercrest->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
|
||||
options_add(&silvercrest->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&silvercrest->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&silvercrest->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&silvercrest->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
silvercrest->parseCode=&parseCode;
|
||||
silvercrest->createCode=&createCode;
|
||||
|
||||
@@ -191,18 +191,18 @@ void tcmInit(void) {
|
||||
tcm->minrawlen = RAW_LENGTH;
|
||||
tcm->maxrawlen = RAW_LENGTH;
|
||||
|
||||
options_add(&tcm->options, 't', "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&tcm->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&tcm->options, 'h', "humidity", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&tcm->options, 'b', "battery", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[01]$");
|
||||
options_add(&tcm->options, "t", "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&tcm->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&tcm->options, "h", "humidity", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&tcm->options, "b", "battery", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[01]$");
|
||||
|
||||
options_add(&tcm->options, 0, "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&tcm->options, 0, "humidity-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&tcm->options, 0, "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&tcm->options, 0, "humidity-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&tcm->options, 0, "show-humidity", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&tcm->options, 0, "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&tcm->options, 0, "show-battery", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&tcm->options, "0", "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&tcm->options, "0", "humidity-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&tcm->options, "0", "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&tcm->options, "0", "humidity-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&tcm->options, "0", "show-humidity", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&tcm->options, "0", "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&tcm->options, "0", "show-battery", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
|
||||
tcm->parseCode=&parseCode;
|
||||
tcm->checkValues=&checkValues;
|
||||
|
||||
@@ -208,13 +208,13 @@ void techlicoSwitchInit(void) {
|
||||
techlico_switch->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
techlico_switch->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&techlico_switch->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&techlico_switch->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&techlico_switch->options, 'u', "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([1-4])$");
|
||||
options_add(&techlico_switch->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$");
|
||||
options_add(&techlico_switch->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&techlico_switch->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&techlico_switch->options, "u", "unit", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([1-4])$");
|
||||
options_add(&techlico_switch->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$");
|
||||
|
||||
options_add(&techlico_switch->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&techlico_switch->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&techlico_switch->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&techlico_switch->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
techlico_switch->parseCode=&parseCode;
|
||||
techlico_switch->createCode=&createCode;
|
||||
|
||||
@@ -177,19 +177,19 @@ void teknihallInit(void) {
|
||||
teknihall->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
teknihall->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&teknihall->options, 't', "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&teknihall->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&teknihall->options, 'h', "humidity", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&teknihall->options, 'b', "battery", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[01]$");
|
||||
options_add(&teknihall->options, "t", "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&teknihall->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&teknihall->options, "h", "humidity", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&teknihall->options, "b", "battery", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[01]$");
|
||||
|
||||
// options_add(&teknihall->options, 0, "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&teknihall->options, 0, "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&teknihall->options, 0, "humidity-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&teknihall->options, 0, "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&teknihall->options, 0, "humidity-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&teknihall->options, 0, "show-humidity", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&teknihall->options, 0, "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&teknihall->options, 0, "show-battery", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
// options_add(&teknihall->options, "0", "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&teknihall->options, "0", "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&teknihall->options, "0", "humidity-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&teknihall->options, "0", "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&teknihall->options, "0", "humidity-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&teknihall->options, "0", "show-humidity", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&teknihall->options, "0", "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&teknihall->options, "0", "show-battery", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
|
||||
teknihall->parseCode=&parseCode;
|
||||
teknihall->checkValues=&checkValues;
|
||||
|
||||
@@ -254,20 +254,20 @@ void tfaInit(void) {
|
||||
tfa->minrawlen = MIN_RAW_LENGTH;
|
||||
tfa->maxrawlen = MAX_RAW_LENGTH;
|
||||
|
||||
options_add(&tfa->options, 't', "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&tfa->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&tfa->options, 'c', "channel", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&tfa->options, 'h', "humidity", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&tfa->options, 'b', "battery", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[01]$");
|
||||
options_add(&tfa->options, "t", "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&tfa->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&tfa->options, "c", "channel", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&tfa->options, "h", "humidity", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&tfa->options, "b", "battery", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[01]$");
|
||||
|
||||
// options_add(&tfa->options, 0, "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&tfa->options, 0, "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&tfa->options, 0, "humidity-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&tfa->options, 0, "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&tfa->options, 0, "humidity-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&tfa->options, 0, "show-humidity", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&tfa->options, 0, "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&tfa->options, 0, "show-battery", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
// options_add(&tfa->options, "0", "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&tfa->options, "0", "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&tfa->options, "0", "humidity-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&tfa->options, "0", "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&tfa->options, "0", "humidity-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)2, "[0-9]");
|
||||
options_add(&tfa->options, "0", "show-humidity", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&tfa->options, "0", "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&tfa->options, "0", "show-battery", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
|
||||
tfa->parseCode=&parseCode;
|
||||
tfa->checkValues=&checkValues;
|
||||
|
||||
@@ -0,0 +1,239 @@
|
||||
/*
|
||||
Copyright (C) 2014, 2018 CurlyMo & DonBernos & Michael Behrisch
|
||||
|
||||
This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "../../core/pilight.h"
|
||||
#include "../../core/common.h"
|
||||
#include "../../core/dso.h"
|
||||
#include "../../core/log.h"
|
||||
#include "../protocol.h"
|
||||
#include "../../core/binary.h"
|
||||
#include "../../core/gc.h"
|
||||
#include "tfa2017.h"
|
||||
|
||||
#define MIN_PULSE_LENGTH 250
|
||||
#define AVG_PULSE 750
|
||||
#define MIN_RAW_LENGTH 200
|
||||
#define MAX_RAW_LENGTH 400
|
||||
#define MESSAGE_LENGTH 48
|
||||
|
||||
typedef struct settings_t {
|
||||
double id;
|
||||
double temp;
|
||||
double humi;
|
||||
struct settings_t *next;
|
||||
} settings_t;
|
||||
|
||||
static struct settings_t *settings = NULL;
|
||||
|
||||
static int validate(void) {
|
||||
if(tfa2017->rawlen >= MIN_RAW_LENGTH && tfa2017->rawlen <= MAX_RAW_LENGTH) {
|
||||
if(tfa2017->raw[tfa2017->rawlen-1] >= (MIN_PULSE_LENGTH*PULSE_DIV)) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void parseCode(void) {
|
||||
int i = 0, x = 0, short_pulse = 0, prev = 0, long_pulse = 0;
|
||||
int s = 0, start[3], m = 0, binary[MAX_RAW_LENGTH];
|
||||
int msg[MESSAGE_LENGTH], channel = 0;
|
||||
double humidity = 0.0, temperature = 0.0;
|
||||
|
||||
if(tfa2017->rawlen > MAX_RAW_LENGTH) {
|
||||
logprintf(LOG_ERR, "tfa2017: parsecode - invalid parameter passed %d", tfa2017->rawlen);
|
||||
return;
|
||||
}
|
||||
for(x=0;x<tfa2017->rawlen;x++) {
|
||||
if(tfa2017->raw[x] > AVG_PULSE) {
|
||||
binary[i++] = 0;
|
||||
if(short_pulse>0) {
|
||||
prev = short_pulse;
|
||||
short_pulse = 0;
|
||||
}
|
||||
long_pulse++;
|
||||
} else {
|
||||
short_pulse++;
|
||||
if(short_pulse%2 == 0) {
|
||||
binary[i++] = 1;
|
||||
}
|
||||
long_pulse = 0;
|
||||
}
|
||||
if(long_pulse == 4 && (prev == 20 || (x > 7 && prev == x-1))) {
|
||||
if (s==0 || i > start[s-1]+MESSAGE_LENGTH) {
|
||||
start[s++] = i-2;
|
||||
prev = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
// The protocol sends the message three times in a row.
|
||||
// If we find two identical ones, we consider it valid.
|
||||
if(s < 2) {
|
||||
return;
|
||||
}
|
||||
if(i > start[1]+MESSAGE_LENGTH && memcmp(&binary[start[0]], &binary[start[1]], MESSAGE_LENGTH) == 0) {
|
||||
m=start[0];
|
||||
} else if(s > 2 && i > start[2]+MESSAGE_LENGTH &&
|
||||
(memcmp(&binary[start[0]], &binary[start[2]], MESSAGE_LENGTH) == 0 ||
|
||||
memcmp(&binary[start[1]], &binary[start[2]], MESSAGE_LENGTH) == 0)) {
|
||||
m=start[2];
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
// decode manchester
|
||||
prev = 1;
|
||||
for(x=0;x<MESSAGE_LENGTH;x++) {
|
||||
if(binary[x+m] == 0) {
|
||||
prev = !prev;
|
||||
}
|
||||
msg[x] = prev;
|
||||
}
|
||||
// According to http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf
|
||||
// the first byte is a fixed id (0x45), the second is a rolling code which changes on
|
||||
// battery replacement (both are not used here).
|
||||
// Of the next four bits the first is unused, the next three encode the channel.
|
||||
channel = binToDecRev(msg, 17, 19)+1;
|
||||
// The next twelve bits encode the temperature T
|
||||
// in tenth of degree Fahrenheit with an offset of 40.
|
||||
// The following is a simplification of F=T/10-40 and C=(F-32)*5/9.
|
||||
temperature = (double)binToDecRev(msg, 20, 31)/18.-40.;
|
||||
// The next byte has the relative humidity in percent.
|
||||
humidity = (double)binToDecRev(msg, 32, 39);
|
||||
// The last byte contains a checksum which is not used here.
|
||||
|
||||
struct settings_t *tmp = settings;
|
||||
while(tmp) {
|
||||
if(fabs(tmp->id-channel) < EPSILON){
|
||||
temperature += tmp->temp;
|
||||
humidity += tmp->humi;
|
||||
break;
|
||||
}
|
||||
tmp = tmp->next;
|
||||
}
|
||||
if(humidity < 0 || humidity > 100) {
|
||||
return;
|
||||
}
|
||||
|
||||
tfa2017->message = json_mkobject();
|
||||
json_append_member(tfa2017->message, "id", json_mknumber(channel, 0));
|
||||
json_append_member(tfa2017->message, "temperature", json_mknumber(temperature, 2));
|
||||
json_append_member(tfa2017->message, "humidity", json_mknumber(humidity, 2));
|
||||
}
|
||||
|
||||
static int checkValues(struct JsonNode *jvalues) {
|
||||
struct JsonNode *jid = NULL;
|
||||
|
||||
if((jid = json_find_member(jvalues, "id"))) {
|
||||
struct settings_t *snode = NULL;
|
||||
struct JsonNode *jchild = NULL;
|
||||
struct JsonNode *jchild1 = NULL;
|
||||
double id = -1;
|
||||
int match = 0;
|
||||
|
||||
jchild = json_first_child(jid);
|
||||
while(jchild) {
|
||||
jchild1 = json_first_child(jchild);
|
||||
while(jchild1) {
|
||||
if(strcmp(jchild1->key, "id") == 0) {
|
||||
id = jchild1->number_;
|
||||
}
|
||||
jchild1 = jchild1->next;
|
||||
}
|
||||
jchild = jchild->next;
|
||||
}
|
||||
|
||||
struct settings_t *tmp = settings;
|
||||
while(tmp) {
|
||||
if(fabs(tmp->id-id) < EPSILON) {
|
||||
match = 1;
|
||||
break;
|
||||
}
|
||||
tmp = tmp->next;
|
||||
}
|
||||
|
||||
if(match == 0) {
|
||||
if((snode = MALLOC(sizeof(struct settings_t))) == NULL) {
|
||||
fprintf(stderr, "out of memory\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
snode->id = id;
|
||||
snode->temp = 0;
|
||||
snode->humi = 0;
|
||||
|
||||
json_find_number(jvalues, "temperature-offset", &snode->temp);
|
||||
json_find_number(jvalues, "humidity-offset", &snode->humi);
|
||||
|
||||
snode->next = settings;
|
||||
settings = snode;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void gc(void) {
|
||||
struct settings_t *tmp = NULL;
|
||||
while(settings) {
|
||||
tmp = settings;
|
||||
settings = settings->next;
|
||||
FREE(tmp);
|
||||
}
|
||||
if(settings != NULL) {
|
||||
FREE(settings);
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(MODULE) && !defined(_WIN32)
|
||||
__attribute__((weak))
|
||||
#endif
|
||||
void tfa2017Init(void) {
|
||||
protocol_register(&tfa2017);
|
||||
protocol_set_id(tfa2017, "tfa2017");
|
||||
protocol_device_add(tfa2017, "tfa2017", "TFA 30.X Temp Hum Sensor Revision 09/2017");
|
||||
tfa2017->devtype = WEATHER;
|
||||
tfa2017->hwtype = RF433;
|
||||
tfa2017->minrawlen = MIN_RAW_LENGTH;
|
||||
tfa2017->maxrawlen = MAX_RAW_LENGTH;
|
||||
tfa2017->maxgaplen = AVG_PULSE*PULSE_DIV;
|
||||
tfa2017->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&tfa2017->options, "t", "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&tfa2017->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&tfa2017->options, "h", "humidity", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
|
||||
// options_add(&tfa2017->options, "0", "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&tfa2017->options, "0", "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&tfa2017->options, "0", "humidity-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&tfa2017->options, "0", "humidity-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&tfa2017->options, "0", "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&tfa2017->options, "0", "show-humidity", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&tfa2017->options, "0", "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
|
||||
tfa2017->parseCode=&parseCode;
|
||||
tfa2017->checkValues=&checkValues;
|
||||
tfa2017->validate=&validate;
|
||||
tfa2017->gc=&gc;
|
||||
}
|
||||
|
||||
#ifdef MODULAR
|
||||
void compatibility(const char **version, const char **commit) {
|
||||
module->name = "tfa2017";
|
||||
module->version = "1.0";
|
||||
module->reqversion = "6.0";
|
||||
module->reqcommit = "84";
|
||||
}
|
||||
|
||||
void init(void) {
|
||||
tfa2017Init();
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
Copyright (C) 2014, 2018 CurlyMo & DonBernos & Michael Behrisch
|
||||
|
||||
This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
#ifndef _PROTOCOL_TFA2017_H_
|
||||
#define _PROTOCOL_TFA2017_H_
|
||||
|
||||
#include "../protocol.h"
|
||||
|
||||
struct protocol_t *tfa2017;
|
||||
void tfa2017Init(void);
|
||||
|
||||
#endif
|
||||
@@ -240,17 +240,17 @@ void tfa30Init(void) {
|
||||
tfa30->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
tfa30->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&tfa30->options, 't', "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&tfa30->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&tfa30->options, 'h', "humidity", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&tfa30->options, "t", "temperature", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
options_add(&tfa30->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_NUMBER, NULL, "[0-9]");
|
||||
options_add(&tfa30->options, "h", "humidity", OPTION_HAS_VALUE, DEVICES_VALUE, JSON_NUMBER, NULL, "^[0-9]{1,3}$");
|
||||
|
||||
// options_add(&tfa30->options, 0, "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&tfa30->options, 0, "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&tfa30->options, 0, "humidity-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&tfa30->options, 0, "humidity-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&tfa30->options, 0, "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&tfa30->options, 0, "show-humidity", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&tfa30->options, 0, "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
// options_add(&tfa30->options, "0", "decimals", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&tfa30->options, "0", "temperature-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&tfa30->options, "0", "humidity-decimals", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "[0-9]");
|
||||
options_add(&tfa30->options, "0", "humidity-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&tfa30->options, "0", "temperature-offset", OPTION_HAS_VALUE, DEVICES_SETTING, JSON_NUMBER, (void *)0, "[0-9]");
|
||||
options_add(&tfa30->options, "0", "show-humidity", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
options_add(&tfa30->options, "0", "show-temperature", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)1, "^[10]{1}$");
|
||||
|
||||
|
||||
tfa30->parseCode=&parseCode;
|
||||
|
||||
@@ -230,12 +230,12 @@ void x10Init(void) {
|
||||
x10->maxgaplen = MAX_PULSE_LENGTH*PULSE_DIV;
|
||||
x10->mingaplen = MIN_PULSE_LENGTH*PULSE_DIV;
|
||||
|
||||
options_add(&x10->options, 't', "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&x10->options, 'f', "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&x10->options, 'i', "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_STRING, NULL, "^[ABCDEFGHIJKLMNOP]([1][0-6]{1}|[1-9]{1})$");
|
||||
options_add(&x10->options, "t", "on", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&x10->options, "f", "off", OPTION_NO_VALUE, DEVICES_STATE, JSON_STRING, NULL, NULL);
|
||||
options_add(&x10->options, "i", "id", OPTION_HAS_VALUE, DEVICES_ID, JSON_STRING, NULL, "^[ABCDEFGHIJKLMNOP]([1][0-6]{1}|[1-9]{1})$");
|
||||
|
||||
options_add(&x10->options, 0, "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&x10->options, 0, "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&x10->options, "0", "readonly", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
options_add(&x10->options, "0", "confirm", OPTION_HAS_VALUE, GUI_SETTING, JSON_NUMBER, (void *)0, "^[10]{1}$");
|
||||
|
||||
x10->parseCode=&parseCode;
|
||||
x10->createCode=&createCode;
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
#include "433.92/ev1527.h"
|
||||
#include "433.92/heitech.h"
|
||||
#include "433.92/impuls.h"
|
||||
#include "433.92/livolo_switch.h"
|
||||
#include "433.92/kerui_d026.h"
|
||||
#include "433.92/logilink_switch.h"
|
||||
#include "433.92/mumbi.h"
|
||||
#include "433.92/ninjablocks_weather.h"
|
||||
@@ -35,9 +35,6 @@
|
||||
#include "433.92/quigg_gt9000.h"
|
||||
#include "433.92/quigg_screen.h"
|
||||
#include "433.92/rc101.h"
|
||||
#include "433.92/rev_v1.h"
|
||||
#include "433.92/rev_v2.h"
|
||||
#include "433.92/rev_v3.h"
|
||||
#include "433.92/rsl366.h"
|
||||
#include "433.92/sc2262.h"
|
||||
#include "433.92/secudo_smoke.h"
|
||||
@@ -47,5 +44,6 @@
|
||||
#include "433.92/techlico_switch.h"
|
||||
#include "433.92/teknihall.h"
|
||||
#include "433.92/tfa.h"
|
||||
#include "433.92/tfa2017.h"
|
||||
#include "433.92/tfa30.h"
|
||||
#include "433.92/x10.h"
|
||||
@@ -25,7 +25,7 @@ eurodomestSwitchInit();
|
||||
ev1527Init();
|
||||
heitechInit();
|
||||
impulsInit();
|
||||
livoloSwitchInit();
|
||||
keruiD026Init();
|
||||
logilinkSwitchInit();
|
||||
mumbiInit();
|
||||
ninjablocksWeatherInit();
|
||||
@@ -35,9 +35,6 @@ quiggGT7000Init();
|
||||
quiggGT9000Init();
|
||||
quiggScreenInit();
|
||||
rc101Init();
|
||||
rev1Init();
|
||||
rev2Init();
|
||||
rev3Init();
|
||||
rsl366Init();
|
||||
sc2262Init();
|
||||
secudoSmokeInit();
|
||||
@@ -47,5 +44,6 @@ tcmInit();
|
||||
techlicoSwitchInit();
|
||||
teknihallInit();
|
||||
tfaInit();
|
||||
tfa2017Init();
|
||||
tfa30Init();
|
||||
x10Init();
|
||||
Reference in new issue
Block a user