From 4b0d9e4a215f1cb0e9709f4b8a22414e40d79e1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Fri, 24 Mar 2017 09:12:37 +0100 Subject: [PATCH] Prepare configuration for version 2.0 --- code/espurna/config/arduino.h | 2 + code/espurna/config/prototypes.h | 2 + code/espurna/espurna.ino | 3 + code/espurna/hardware.ino | 259 +++++++++++++++++++++++++++++++ code/espurna/settings.ino | 26 ++++ 5 files changed, 292 insertions(+) create mode 100644 code/espurna/hardware.ino diff --git a/code/espurna/config/arduino.h b/code/espurna/config/arduino.h index b625a51e..698e5c1f 100644 --- a/code/espurna/config/arduino.h +++ b/code/espurna/config/arduino.h @@ -32,6 +32,8 @@ //#define SONOFF_SV //#define SONOFF_POW //#define SONOFF_DUAL +//#define ITEAD_1CH_INCHING +//#define ITEAD_MOTOR //#define SONOFF_4CH //#define ESP_RELAY_BOARD //#define ECOPLUG diff --git a/code/espurna/config/prototypes.h b/code/espurna/config/prototypes.h index c9947441..ee3ff007 100644 --- a/code/espurna/config/prototypes.h +++ b/code/espurna/config/prototypes.h @@ -11,6 +11,8 @@ void apiRegister(const char * url, const char * key, apiGetCallbackFunction getF void mqttRegister(void (*callback)(unsigned int, const char *, const char *)); String mqttSubtopic(char * topic); template bool setSetting(const String& key, T value); +template bool setSetting(const String& key, unsigned int index, T value); template String getSetting(const String& key, T defaultValue); +template String getSetting(const String& key, unsigned int index, T defaultValue); template void domoticzSend(const char * key, T value); template void domoticzSend(const char * key, T nvalue, const char * svalue); diff --git a/code/espurna/espurna.ino b/code/espurna/espurna.ino index a23308e8..60c7c444 100644 --- a/code/espurna/espurna.ino +++ b/code/espurna/espurna.ino @@ -197,6 +197,9 @@ void setup() { powerMonitorSetup(); #endif + // Prepare configuration for version 2.0 + hwUpwardsCompatibility(); + } void loop() { diff --git a/code/espurna/hardware.ino b/code/espurna/hardware.ino new file mode 100644 index 00000000..88da989a --- /dev/null +++ b/code/espurna/hardware.ino @@ -0,0 +1,259 @@ +/* + +HARDWARE MODULE + +Copyright (C) 2016-2017 by Xose PĂ©rez + +*/ + +/* + +The goal of this file is to store board configuration values in EEPROM so +the migration to future version 2 will be straigh forward. + +*/ + + +#define RELAY_PROVIDER_RELAY 0 +#define RELAY_PROVIDER_DUAL 1 +#define RELAY_PROVIDER_LIGHT 2 + +#define LIGHT_PROVIDER_NONE 0 +#define LIGHT_PROVIDER_WS2812 1 +#define LIGHT_PROVIDER_RGB 2 +#define LIGHT_PROVIDER_RGBW 3 +#define LIGHT_PROVIDER_MY9192 4 + +void hwUpwardsCompatibility() { + + unsigned int board = getSetting("board", 0).toInt(); + if (board > 0) return; + + #if NODEMCUV2 + setSetting("board", 2); + setSetting("ledGPIO", 1, 2); + setSetting("ledLogic", 1, 1); + setSetting("btnGPIO", 1, 0); + setSetting("btnRelay", 1, 1); + setSetting("relayGPIO", 1, 12); + setSetting("relayLogic", 1, 0); + #endif + + #if D1_RELAYSHIELD + setSetting("board", 3); + setSetting("ledGPIO", 1, 2); + setSetting("ledLogic", 1, 1); + setSetting("relayGPIO", 1, 5); + setSetting("relayLogic", 1, 0); + #endif + + #if SONOFF + setSetting("board", 4); + setSetting("ledGPIO", 1, 13); + setSetting("ledLogic", 1, 1); + setSetting("btnGPIO", 1, 0); + setSetting("btnRelay", 1, 1); + setSetting("relayGPIO", 1, 12); + setSetting("relayLogic", 1, 0); + #endif + + #if SONOFF_TH + setSetting("board", 5); + setSetting("ledGPIO", 1, 13); + setSetting("ledLogic", 1, 1); + setSetting("btnGPIO", 1, 0); + setSetting("btnRelay", 1, 1); + setSetting("relayGPIO", 1, 12); + setSetting("relayLogic", 1, 0); + #endif + + #if SONOFF_SV + setSetting("board", 6); + setSetting("ledGPIO", 1, 13); + setSetting("ledLogic", 1, 1); + setSetting("btnGPIO", 1, 0); + setSetting("btnRelay", 1, 1); + setSetting("relayGPIO", 1, 12); + setSetting("relayLogic", 1, 0); + #endif + + #if SONOFF_TOUCH + setSetting("board", 7); + setSetting("ledGPIO", 1, 13); + setSetting("ledLogic", 1, 1); + setSetting("btnGPIO", 1, 0); + setSetting("btnRelay", 1, 1); + setSetting("relayGPIO", 1, 12); + setSetting("relayLogic", 1, 0); + #endif + + #if SONOFF_POW + setSetting("board", 8); + setSetting("ledGPIO", 1, 15); + setSetting("ledLogic", 1, 1); + setSetting("btnGPIO", 1, 0); + setSetting("btnRelay", 1, 1); + setSetting("relayGPIO", 1, 12); + setSetting("relayLogic", 1, 0); + #endif + + #if SONOFF_DUAL + setSetting("board", 9); + setSetting("ledGPIO", 1, 13); + setSetting("ledLogic", 1, 1); + setSetting("btnRelay", 3, 1); + setSetting("relayProvider", RELAY_PROVIDER_DUAL); + #endif + + #if ITEAD_1CH_INCHING + setSetting("board", 10); + setSetting("ledGPIO", 1, 13); + setSetting("ledLogic", 1, 1); + setSetting("btnGPIO", 1, 0); + setSetting("btnRelay", 1, 1); + setSetting("relayGPIO", 1, 12); + setSetting("relayLogic", 1, 0); + #endif + + #if SONOFF_4CH + setSetting("board", 11); + setSetting("ledGPIO", 1, 13); + setSetting("ledLogic", 1, 1); + setSetting("btnGPIO", 1, 0); + setSetting("btnGPIO", 2, 9); + setSetting("btnGPIO", 3, 10); + setSetting("btnGPIO", 4, 14); + setSetting("btnRelay", 1, 2); + setSetting("btnRelay", 2, 3); + setSetting("btnRelay", 3, 4); + setSetting("btnRelay", 4, 0); + setSetting("relayGPIO", 1, 12); + setSetting("relayGPIO", 2, 5); + setSetting("relayGPIO", 3, 4); + setSetting("relayGPIO", 4, 15); + setSetting("relayLogic", 1, 0); + setSetting("relayLogic", 2, 0); + setSetting("relayLogic", 3, 0); + setSetting("relayLogic", 4, 0); + #endif + + #if SLAMPHER + setSetting("board", 12); + setSetting("ledGPIO", 1, 13); + setSetting("ledLogic", 1, 1); + setSetting("btnGPIO", 1, 0); + setSetting("btnRelay", 1, 1); + setSetting("relayGPIO", 1, 12); + setSetting("relayLogic", 1, 0); + #endif + + #if S20 + setSetting("board", 13); + setSetting("ledGPIO", 1, 13); + setSetting("ledLogic", 1, 1); + setSetting("btnGPIO", 1, 0); + setSetting("btnRelay", 1, 1); + setSetting("relayGPIO", 1, 12); + setSetting("relayLogic", 1, 0); + #endif + + #if ESP_RELAY_BOARD + setSetting("board", 14); + setSetting("ledGPIO", 1, 16); + setSetting("ledLogic", 1, 0); + setSetting("btnGPIO", 1, 0); + setSetting("btnGPIO", 2, 2); + setSetting("btnRelay", 1, 1); + setSetting("btnRelay", 2, 2); + setSetting("relayGPIO", 1, 12); + setSetting("relayGPIO", 2, 13); + setSetting("relayLogic", 1, 0); + setSetting("relayLogic", 2, 0); + #endif + + #if ECOPLUG + setSetting("board", 15); + setSetting("ledGPIO", 1, 2); + setSetting("ledLogic", 1, 0); + setSetting("btnGPIO", 1, 13); + setSetting("btnRelay", 1, 1); + setSetting("relayGPIO", 1, 15); + setSetting("relayLogic", 1, 0); + #endif + + #if WIFI_RELAY_NC + setSetting("board", 16); + setSetting("btnGPIO", 1, 12); + setSetting("btnGPIO", 2, 13); + setSetting("btnRelay", 1, 1); + setSetting("btnRelay", 2, 2); + setSetting("relayGPIO", 1, 2); + setSetting("relayGPIO", 2, 14); + setSetting("relayLogic", 1, 1); + setSetting("relayLogic", 2, 1); + #endif + + #if WIFI_RELAY_NO + setSetting("board", 17); + setSetting("btnGPIO", 1, 12); + setSetting("btnGPIO", 2, 13); + setSetting("btnRelay", 1, 1); + setSetting("btnRelay", 2, 2); + setSetting("relayGPIO", 1, 2); + setSetting("relayGPIO", 2, 14); + setSetting("relayLogic", 1, 0); + setSetting("relayLogic", 2, 0); + #endif + + #if MQTT_RELAY + setSetting("board", 18); + setSetting("ledGPIO", 1, 16); + setSetting("ledLogic", 1, 1); + setSetting("btnGPIO", 1, 0); + setSetting("btnRelay", 1, 1); + setSetting("relayGPIO", 1, 12); + setSetting("relayLogic", 1, 0); + #endif + + #if WIFI_RELAYS_BOARD_KIT + setSetting("board", 19); + setSetting("relayGPIO", 1, 0); + setSetting("relayLogic", 1, 1); + setSetting("relayGPIO", 2, 2); + setSetting("relayLogic", 2, 1); + #endif + + #if AI_LIGHT + setSetting("board", 20); + setSetting("relayProvider", RELAY_PROVIDER_LIGHT); + setSetting("lightProvider", LIGHT_PROVIDER_MY9192); + setSetting("myDIGPIO", 13); + setSetting("myDCKIGPIO", 15); + #endif + + #if LED_CONTROLLER + setSetting("board", 21); + setSetting("relayProvider", RELAY_PROVIDER_LIGHT); + setSetting("lightProvider", LIGHT_PROVIDER_RGB); + setSetting("ledGPIO", 1, 2); + setSetting("ledLogic", 1, 1); + setSetting("redGPIO", 14); + setSetting("greenGPIO", 5); + setSetting("blueGPIO", 12); + setSetting("whiteGPIO", 13); + setSetting("lightLogic", 1); + #endif + + #if ITEAD_MOTOR + setSetting("board", 22); + setSetting("ledGPIO", 1, 13); + setSetting("ledLogic", 1, 1); + setSetting("btnGPIO", 1, 0); + setSetting("btnRelay", 1, 1); + setSetting("relayGPIO", 1, 12); + setSetting("relayLogic", 1, 0); + #endif + + saveSettings(); + +} diff --git a/code/espurna/settings.ino b/code/espurna/settings.ino index f10f9666..f58fc0ac 100644 --- a/code/espurna/settings.ino +++ b/code/espurna/settings.ino @@ -172,12 +172,22 @@ void settingsLoop() { embedis.process(); } +void moveSetting(const char * from, const char * to) { + String value = getSetting(from); + if (value.length() > 0) setSetting(to, value); + delSetting(from); +} + template String getSetting(const String& key, T defaultValue) { String value; if (!Embedis::get(key, value)) value = String(defaultValue); return value; } +template String getSetting(const String& key, unsigned int index, T defaultValue) { + return getSetting(key + String(index), defaultValue); +} + String getSetting(const String& key) { return getSetting(key, ""); } @@ -186,10 +196,26 @@ template bool setSetting(const String& key, T value) { return Embedis::set(key, String(value)); } +template bool setSetting(const String& key, unsigned int index, T value) { + return setSetting(key + String(index), value); +} + bool delSetting(const String& key) { return Embedis::del(key); } +bool delSetting(const String& key, unsigned int index) { + return delSetting(key + String(index)); +} + +bool hasSetting(const String& key) { + return getSetting(key).length() != 0; +} + +bool hasSetting(const String& key, unsigned int index) { + return getSetting(key, index, "").length() != 0; +} + void saveSettings() { DEBUG_MSG_P(PSTR("[SETTINGS] Saving\n")); #if not AUTO_SAVE