From 7f7afe23b46a9b399213c95076630a685a4c9b56 Mon Sep 17 00:00:00 2001 From: manuel Date: Tue, 12 Jan 2021 11:23:49 +0100 Subject: martin/door: add support for autoupdate + different radio --- martin/door/src/main.cpp | 83 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 78 insertions(+), 5 deletions(-) (limited to 'martin/door/src/main.cpp') diff --git a/martin/door/src/main.cpp b/martin/door/src/main.cpp index 5b1efad..6a6eed3 100644 --- a/martin/door/src/main.cpp +++ b/martin/door/src/main.cpp @@ -2,17 +2,35 @@ #include #include #include +#include #include #include "cc1101.h" #include "hcs200.h" +#include "secrets.h" + +// fw update +// - increment number + build +// - scp .pio/build/$ENV/firmware.bin manuel@mausz.at:public_html/coding/.firmware/martindoor.bin +#define FIRMWARE_VERSION 1 +//#define FIRMWARE_URL "" + +#define _STR(s) #s +#define STR(s) _STR(s) void http_door_open(); void serial_door_open(); +void checkFirmwareUpdate(); ESP8266WebServer http_service(80); + +#define RADIO_CC1101 CC1101 radio(D0 /* GDO0 */, D2 /* GDO2 */, D8 /* SS */); +#ifndef RADIO_CC1101 +#define PIN_RADIO_OUT D2 +#endif + #define PIN_HCS200_ENABLE D3 #define PIN_HCS200_DATA D1 //#define HCS200_TEST @@ -40,6 +58,11 @@ void setup() (void)radio.idle(); } +#ifndef RADIO_CC1101 + pinMode(PIN_RADIO_OUT, OUTPUT); + digitalWrite(PIN_RADIO_OUT, LOW); +#endif + WiFiManager wifiManager; wifiManager.setConfigPortalTimeout(600); Serial.printf_P(PSTR("Setting up WiFi\n")); @@ -51,6 +74,10 @@ void setup() ESP.restart(); } + yield(); + checkFirmwareUpdate(); + yield(); + if (!MDNS.begin("door")) Serial.println("Error setting up MDNS responder!"); MDNS.addService("http", "tcp", 80); @@ -124,6 +151,7 @@ void http_door_open() Serial.print("Got keycode: "); keycode.print(Serial); +#ifdef RADIO_CC1101 if (http_service.hasArg("power")) { static const uint8_t patable_power_n30[8] = { 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; @@ -163,6 +191,7 @@ void http_door_open() http_service.send_P(500, PSTR("text/plain"), PSTR("Unable to enable radio transmit mode")); return; } +#endif if (http_service.hasArg("button1")) keycode.buttons = HCS200_Keycode::BM_S0; @@ -176,7 +205,13 @@ void http_door_open() unsigned long count = constrain(http_service.arg("count").toInt(), 2, 400); for (unsigned int i = 0; i < count; i++) { - keycode.send([&](int value) { radio.setGDO0(value); }); + keycode.send([&](int value) { +#ifdef RADIO_CC1101 + radio.setGDO0(value); +#else + digitalWrite(PIN_RADIO_OUT, value); +#endif + }); yield(); } @@ -205,20 +240,57 @@ void serial_door_open(Print &stream) stream.print("Got keycode: "); keycode.print(stream); +#ifdef RADIO_CC1101 if (!radio.transmit()) { stream.println("Unable to enable radio transmit mode"); return; } +#endif /* send twice */ - keycode.send([&](int value) { radio.setGDO0(value); }); - keycode.send([&](int value) { radio.setGDO0(value); }); + for (unsigned int i = 0; i < 1; i++) { + keycode.send([&](int value) { + #ifdef RADIO_CC1101 + radio.setGDO0(value); + #else + digitalWrite(PIN_RADIO_OUT, value); + #endif + }); + } (void)radio.idle(); stream.println("Sending done"); } +void checkFirmwareUpdate() +{ + BearSSL::WiFiClientSecure update_client; + update_client.setInsecure(); + + ESPhttpUpdate.setLedPin(LED_BUILTIN, HIGH); + ESPhttpUpdate.rebootOnUpdate(true); + t_httpUpdate_return ret = ESPhttpUpdate.update(update_client, FIRMWARE_URL, STR(FIRMWARE_VERSION)); + switch(ret) + { + case HTTP_UPDATE_FAILED: + { + Serial.printf_P(PSTR("HTTP_UPDATE_FAILED Error (%d): %s\n"), + ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str()); + String tmp = String("fwupdate error: ") + ESPhttpUpdate.getLastErrorString(); + } + break; + + case HTTP_UPDATE_NO_UPDATES: + Serial.printf_P(PSTR("HTTP_UPDATE_NO_UPDATES\n")); + break; + + case HTTP_UPDATE_OK: + Serial.printf_P(PSTR("HTTP_UPDATE_OK\n")); + break; + } +} + void loop() { MDNS.update(); @@ -232,8 +304,9 @@ void loop() if (Serial.available() > 0) { - while (Serial.read() >= 0) {} - //serial_door_open(Serial); + String command = Serial.readStringUntil('\n'); + if (command == "door" || command == "door\r") + serial_door_open(Serial); } delay(1); -- cgit v1.2.3