From 78401ace13fe96be2c90b89703bb9d181b7b5c8c Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Fri, 2 Jun 2017 13:56:06 +0200 Subject: [PATCH] import --- .gitignore | 9 + README.md | 34 +++ arduino/sonoffentrance/sonoffentrance.cpp | 209 ++++++++++++++++++ .../sonoffentrance/sonoffentrance.example.h | 49 ++++ arduino/sonoffentrance/sonoffentrance.ino | 0 logo.jpg | Bin 0 -> 65749 bytes platformio.example.in | 22 ++ 7 files changed, 323 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 arduino/sonoffentrance/sonoffentrance.cpp create mode 100644 arduino/sonoffentrance/sonoffentrance.example.h create mode 100644 arduino/sonoffentrance/sonoffentrance.ino create mode 100644 logo.jpg create mode 100644 platformio.example.in diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..42e177d --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.vscode/* +arduino/sonoffentrance/sonoffentrance.h +.travis.yml +lib/* +.pioenvs +.piolibdeps +.clang_complete +.gcc-flags.json +platformio.ini diff --git a/README.md b/README.md new file mode 100644 index 0000000..87db7d8 --- /dev/null +++ b/README.md @@ -0,0 +1,34 @@ +Introduction +============ +Switch sonoff pour controler la lumière du salon (stupid LEDs). +Fonctionnement simple : situé après l'interrupteur, il permet d'éteindre la lumière du salon si celle-ci est allumée, ou de l'allumer si celle-ci a été éteinte par le sonoff. +Si l'interrupteur est utilisé pour éteindre la lumière, il ne permet pas de la rallumer. + +L'état dans HA n'est pas forcé et dans le code (void setupSonOff() au moment du setup()) on mets l'état du relay à HIGH, c'est à dire que la lumière s'allume dès que le sonoff est alimenté. + +Matériel +======== +[Sonoff Switch (ou Basic)](https://www.itead.cc/smart-home/sonoff-wifi-wireless-switch.html?acc=70efdf2ec9b086079795c442636b55fb) +Un TTL-Serial USB + +Source +====== +Firmware : [KmanOz/Sonoff-HomeAssistant](https://github.com/KmanOz/Sonoff-HomeAssistant) +Particulièrement cette [version](https://github.com/KmanOz/Sonoff-HomeAssistant/tree/master/arduino/ESPsonoff-v1.01pOTA). +p car on s'en fout d'avoir un dht22 (version t). + +TODO : lui utilise la lib [Imroy/pubsubclient](https://github.com/Imroy/pubsubclient) qui permet : +I use the lmroy version of this excellent mqtt library, mainly because it supports QOS1 and keepalive settings right from within the sketch. No other modifications to library files are necessary to achieve a rock solid connection to your mqtt broker. +À voir si nécessaire ou non. + +Ordre des PINs +============== +![pinout](https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2016/11/sonoff_gpio-r.jpg?w=750) +[source](https://randomnerdtutorials.com/how-to-flash-a-custom-firmware-to-sonoff/) +``` + | VIN (3.3v) | + | RX | +OUT | TX | IN + | GND | + | GPIO14 | +``` diff --git a/arduino/sonoffentrance/sonoffentrance.cpp b/arduino/sonoffentrance/sonoffentrance.cpp new file mode 100644 index 0000000..43c2dae --- /dev/null +++ b/arduino/sonoffentrance/sonoffentrance.cpp @@ -0,0 +1,209 @@ +// Bouton +#include + +// Wifi +#include + +// MQTT +#include + +// OTA +#include +#include +#include + +// RemoteDebug +#include + +#include "sonoffentrance.h" + +void setup() { + Serial.begin(SERIAL_SPEED); + Serial.println("\nresetting"); + + setupSonOff(); + + // WIFI + setupWifi(); + + // OTA + setupOTA(); + + // RemoteDebug + Debug.begin(REMDEB_CLIENT); + + // MQTT + client.setServer(MQTT_SERVER, MQTT_PORT); + client.setCallback(callbackMQTT); + testConnectMQTT(); +} + +void setupSonOff() { + pinMode(LED_PIN, OUTPUT); + pinMode(RELAY_PIN, OUTPUT); + pinMode(BUTTON_PIN, INPUT); + relayState = true; + btn_timer.attach(0.05, button); +} + +// OTA +void setupOTA() +{ + ArduinoOTA.setHostname(OTA_CLIENT); // on donne une petit nom a notre module + ArduinoOTA.setPassword(OTA_PASSWORD); + ArduinoOTA.onStart([]() { + Debug.println("OTA Starting"); + Serial.println("OTA Starting"); + blinkLED(LED_PIN, 400, 2); + digitalWrite(LED_PIN, HIGH); + }); + ArduinoOTA.onEnd([]() { + Debug.println("\nOTA End"); + Serial.println("\nOTA End"); + }); + ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { + Debug.printf("OTA Progress: %u%%\r", (progress / (total / 100))); + Serial.printf("OTA Progress: %u%%\r", (progress / (total / 100))); + digitalWrite(LED_PIN, LOW); + delay(5); + digitalWrite(LED_PIN, HIGH); + }); + ArduinoOTA.onError([](ota_error_t error) { + Serial.printf("OTA Error[%u]: ", error); + Debug.printf("OTA Error[%u]: ", error); + blinkLED(LED_PIN, 40, 2); + if (error == OTA_AUTH_ERROR) { + Serial.println("Auth Failed"); + Debug.println("Auth Failed"); + } else if (error == OTA_BEGIN_ERROR) { + Serial.println("Begin Failed"); + Debug.println("Begin Failed"); + } else if (error == OTA_CONNECT_ERROR) { + Serial.println("Connect Failed"); + Debug.println("Connect Failed"); + } else if (error == OTA_RECEIVE_ERROR) { + Serial.println("Receive Failed"); + Debug.println("Receive Failed"); + } else if (error == OTA_END_ERROR) { + Serial.println("End Failed"); + Debug.println("End Failed"); + } + }); + ArduinoOTA.begin(); +} + +// WIFI +void setupWifi() +{ + Serial.print("Connexion a "); + Serial.print(WIFI_SSID); + WiFi.mode(WIFI_STA); + WiFi.begin(WIFI_SSID, WIFI_PASSWORD); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.println(" OK"); + Serial.print("IP : "); + Serial.println(WiFi.localIP()); +} + +// MQTT +void testConnectMQTT() +{ + while (!client.connected()) { + Debug.print("Connexion au serveur MQTT... "); + if (client.connect("ESP8266Client", MQTT_USER, MQTT_PASS)) { + Debug.print("OK\nSend Current State"); + mqttSendState(); + + Debug.print("OK\nSubscribe"); + client.subscribe(MQTT_COMMAND); + + Debug.println(" OK"); + } else { + Debug.print("KO, erreur : "); + Debug.print(client.state()); + Debug.println(", on attend 5 secondes avant de recommencer"); + delay(5000); + } + } +} + +// Déclenche les actions à la réception d'un message +void callbackMQTT(char* topic, byte* payload, unsigned int length) +{ + String stopic = String(topic); + + unsigned int i = 0; + for(i = 0; i < length; i++) { + message_buff[i] = payload[i]; + } + message_buff[i] = '\0'; + String msgString = String(message_buff); + + Debug.print("Received [" + stopic + "] : "); + Debug.println(msgString); + + if (stopic == MQTT_COMMAND) { + if (msgString == "ON") { + relayState = true; + } else if (msgString == "OFF") { + relayState = false; + } else if (msgString == "reset"){ + ESP.restart(); + } + mqttSendState(); + } +} + +void mqttSendState() +{ + client.publish(MQTT_STATE, (relayState) ? "ON": "OFF", true); +} + +void loop() { + // OTA + ArduinoOTA.handle(); + + // RemoteDebug + Debug.handle(); + + // MQTT + testConnectMQTT(); + client.loop(); + + if (relayState) { + digitalWrite(LED_PIN, LOW); + digitalWrite(RELAY_PIN, HIGH); + } else { + digitalWrite(LED_PIN, HIGH); + digitalWrite(RELAY_PIN, LOW); + } +} + +void blinkLED(int pin, int duration, int n) { + for(int i = 0; i < n; i++) { + digitalWrite(LED_PIN, HIGH); + delay(duration); + digitalWrite(LED_PIN, LOW); + delay(duration); + } +} + +void button() { + if (!digitalRead(BUTTON_PIN)) { + count++; + } + else { + if (count > 1 && count <= 40) { + digitalWrite(LED_PIN, !digitalRead(LED_PIN)); + digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN)); + } + else if (count > 40) { + ESP.restart(); + } + count = 0; + } +} diff --git a/arduino/sonoffentrance/sonoffentrance.example.h b/arduino/sonoffentrance/sonoffentrance.example.h new file mode 100644 index 0000000..bb3c5df --- /dev/null +++ b/arduino/sonoffentrance/sonoffentrance.example.h @@ -0,0 +1,49 @@ +#define SERIAL_SPEED 115200 + +// OTA +#define OTA_PASSWORD "XXX" +#define OTA_CLIENT "sonoff_living" + +// DebugRemote +#define REMDEB_CLIENT "sonoff_living" +RemoteDebug Debug; + +// WIFI +#define WIFI_SSID "XXX" +#define WIFI_PASSWORD "XXX" + +WiFiClient espClient; + +#define BUTTON 0 +#define RELAY 12 +#define LED 13 + +// MQTT +#define MQTT_SERVER "XXX" +#define MQTT_PORT 1883 +#define MQTT_USER "XXX" +#define MQTT_PASS "XXX" + +#define MQTT_CLIENT "sonoff_living" +#define MQTT_COMMAND "sonoff_living/switch" +#define MQTT_STATE "sonoff_living/status" + +char message_buff[100]; +PubSubClient client(espClient); + +// Bouton +Ticker btn_timer; +unsigned long count = 0; + +bool relayState; + +void setup(); +void loop(); +void blinkLED(int pin, int duration, int n); +void button(); +void setupOTA(); +void setupWifi(); +void testConnectMQTT(); +void callbackMQTT(char* topic, byte* payload, unsigned int length); +void setupSonOff(); +void mqttSendState(); diff --git a/arduino/sonoffentrance/sonoffentrance.ino b/arduino/sonoffentrance/sonoffentrance.ino new file mode 100644 index 0000000..e69de29 diff --git a/logo.jpg b/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d46d52ae8533ff83940958460d13335573ef0ede GIT binary patch literal 65749 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 literal 0 HcmV?d00001 diff --git a/platformio.example.in b/platformio.example.in new file mode 100644 index 0000000..9c556df --- /dev/null +++ b/platformio.example.in @@ -0,0 +1,22 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; http://docs.platformio.org/page/projectconf.html + +[env:sonoff] +platform=espressif8266 +; source: http://www.instructables.com/id/Use-Homie-Firmware-to-Drive-Sonoff-Switch-Module-E/ +; https://github.com/arendst/Sonoff-MQTT-OTA-Arduino/issues/231 +board=esp01_1m +framework=arduino +upload_port= +upload_flags=--auth="" + +[platformio] +src_dir=arduino/sonoffentrance +lib_dir=~/Arduino/libraries