From c7f2bb87028576e5ac47db34311e39161344c809 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Mon, 13 Mar 2017 16:16:40 +0000 Subject: [PATCH] Remote DC power control with a WeMos D1 mini --- remote_power.fzz | Bin 0 -> 81274 bytes remote_power.ino | 339 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 339 insertions(+) create mode 100644 remote_power.fzz create mode 100644 remote_power.ino diff --git a/remote_power.fzz b/remote_power.fzz new file mode 100644 index 0000000000000000000000000000000000000000..4b0871a2044155b1d35b81865b699f79f61612bc GIT binary patch literal 81274 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%0A|V-JP~ksp=_m3PEpznR4P74 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 literal 0 HcmV?d00001 diff --git a/remote_power.ino b/remote_power.ino new file mode 100644 index 0000000..04a4039 --- /dev/null +++ b/remote_power.ino @@ -0,0 +1,339 @@ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// prototytpes +String getDate(time_t when); +String getTime(time_t when); + +// The MOSFET that switches the appliance +#define MOSFET D1 + +#define MANAGER_AP "RemotePower" +#define CONFIG_PORT 80 +#define NTP_SERVER "1.uk.pool.ntp.org" + +#define DEVICE_ON HIGH +#define DEVICE_OFF LOW +#define DEFAULT_DELAY 10000 // 10 seconds + + +#define www_username "admin" +#define www_password "wibble" + +ESP8266WebServer server(CONFIG_PORT); + +unsigned long trigtime = 0; +unsigned long trighold = 0; + +// track the status of our output pin +bool mosfet_status = false; + +const unsigned int localPort = 2390; +IPAddress ntpServerIP; + +const int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes of the message + +byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets + +WiFiUDP udp; + +unsigned long ntp_lastset = 0; +unsigned long ntp_lasttry = 0; + + + +void output_set(bool on) +{ + digitalWrite(MOSFET, on?DEVICE_ON:DEVICE_OFF); + mosfet_status = on; +} + +/* compose and send an NTP time request packet */ +void ntp_send() +{ + if (ntpServerIP == INADDR_NONE) { + if (WiFi.hostByName(NTP_SERVER, ntpServerIP) == 1) { + if (ntpServerIP == IPAddress(1,0,0,0)) { + Serial.println("DNS lookup failed for " NTP_SERVER " try again later."); + ntpServerIP = INADDR_NONE; + return; + } + Serial.print("Got NTP server " NTP_SERVER " address "); + Serial.println(ntpServerIP); + } else { + Serial.println("DNS lookup of " NTP_SERVER " failed."); + return; + } + } + + ntp_lasttry = millis(); + memset(packetBuffer, 0, NTP_PACKET_SIZE); + // Initialize values needed to form NTP request + // (see URL above for details on the packets) + packetBuffer[0] = 0b11100011; // LI, Version, Mode + packetBuffer[1] = 0; // Stratum, or type of clock + packetBuffer[2] = 6; // Polling Interval + packetBuffer[3] = 0xEC; // Peer Clock Precision + // 8 bytes of zero for Root Delay & Root Dispersion + packetBuffer[12] = 49; + packetBuffer[13] = 0x4E; + packetBuffer[14] = 49; + packetBuffer[15] = 52; + + // all NTP fields have been given values, now + // you can send a packet requesting a timestamp: + udp.beginPacket(ntpServerIP, 123); //NTP requests are to port 123 + udp.write(packetBuffer, NTP_PACKET_SIZE); + udp.endPacket(); + + Serial.println("Sending NTP request"); +} + +/* request a time update from NTP and parse the result */ +time_t ntp_fetch() +{ + while (udp.parsePacket() > 0); // discard old udp packets + ntp_send(); + + uint32_t beginWait = millis(); + + while (millis() - beginWait < 2500) { + int size = udp.parsePacket(); + if (size >= NTP_PACKET_SIZE) { + udp.read(packetBuffer, NTP_PACKET_SIZE); + + // this is NTP time (seconds since Jan 1 1900): + unsigned long secsSince1900 = packetBuffer[40] << 24 | packetBuffer[41] << 16 | packetBuffer[42] << 8 | packetBuffer[43]; + const unsigned long seventyYears = 2208988800UL; + time_t unixtime = secsSince1900 - seventyYears; + + ntp_lastset = millis(); + Serial.print("NTP update unixtime="); + Serial.println(unixtime); + return unixtime; + } + } + Serial.println("No NTP response"); + return 0; +} + + +String one_button_form(String target, String action, String blurb) +{ + String out = ""; + out += "
"; + out += ""; + out += ""; + out += "
\n"; + + return out; +} + + +/* HTTP page request for / */ +void handleRoot() +{ + char mtime[16]; + int sec = millis() / 1000; + int mi = sec / 60; + int hr = mi / 60; + int day = hr / 24; + + snprintf(mtime, 16, "%dd %02d:%02d:%02d", day, hr % 24, mi % 60, sec % 60); + + if (server.hasArg("action")) { + String action = server.arg("action"); + + if (action == "on") { + output_set(DEVICE_ON); + trigtime = 0; + } else + if (action == "off") { + output_set(DEVICE_OFF); + trigtime = 0; + } else + if (action == "toggle") { + output_set(!mosfet_status); + trigtime = 0; + } else + if (action == "pulse") { + if (server.hasArg("dur")) { + trighold = server.arg("dur").toInt(); + } else { + trighold = 0; + } + if (trighold == 0) trighold = DEFAULT_DELAY; + trigtime = millis(); + output_set(DEVICE_OFF); + } + } + + String out = "\ + \ + Remote Power\ + \ + \ + \ +

Remote Power

\ +

Uptime: " + (String)mtime + "

\n"; + + if (timeStatus() == timeSet) { + time_t when = now(); + out += "

Time now: " + getDate(when) + " " + getTime(when) + "

\n"; + } + + FSInfo fs_info; + if (SPIFFS.info(fs_info)) { + out += "

Onboard Flash disk: - Size:"+String(fs_info.totalBytes)+" Used:"+String(fs_info.usedBytes)+"

\n"; + } + + out += "

Powered device is "; + out += mosfet_status?"ON":"OFF"; + out += "("; + out += digitalRead(MOSFET) == HIGH?"HIGH":"LOW"; + out += ")"; + + if (!mosfet_status && trigtime != 0) { + out += " and is due to turn back ON in "; + out += (trigtime + trighold - millis() )/ 1000; + out += " seconds."; + } + + out += "

\n"; + + out += "
    \n"; + out += "
  • Reset Configuration\n"; + out += "
  • " + one_button_form("/", "on", "Turn Device ON"); + out += "
  • " + one_button_form("/", "off", "Turn Device OFF"); + out += "
  • " + one_button_form("/", "toggle", "Toggle Device Status"); + out += "
  • " + one_button_form("/", "pulse", (String)"Turn Device OFF for " + (int)(DEFAULT_DELAY/1000) + (String)" seconds"); + + + out += "
\n"; + out += "\n\n"; + + server.send( 200, "text/html", out); +} + +void handleNotFound() { + String out = "File Not found\n\n"; + server.send(404, "text/plain", out); +} + +// User wants to reset config +void handleReset() { + if (!server.authenticate(www_username, www_password)) + return server.requestAuthentication(); + + server.send(200, "text/plain", "Rebooting to config manager...\n\n"); + + WiFiManager wfm; + wfm.resetSettings(); + WiFi.disconnect(); + ESP.reset(); + delay(5000); +} + +void returnOK() { + server.send(200, "text/plain", ""); +} + +String getTime(time_t when) +{ + String ans; + int h = hour(when); + int m = minute(when); + int s = second(when); + + if (h<10) ans += "0"; + ans += String(h) + ":"; + if (m<10) ans += "0"; + ans += String(m) + ":"; + if (s<10) ans += "0"; + ans += String(s); + + return ans; +} + +String getDate(time_t when) +{ + String ans; + + ans += String(year(when)) + "-" + String(month(when)) + "-" + String(day(when)); + return ans; +} + + +void setup() { + // some serial, for debug + Serial.begin(115200); + + // The lock mechanism + pinMode(MOSFET, OUTPUT); + output_set(DEVICE_ON); + + Serial.println("Remote Power switcher"); + Serial.println("Test WiFi and enter manager mode."); + + WiFiManager wfm; + // Only wait in config mode for 3 minutes max + wfm.setConfigPortalTimeout(180); + // Try to connect to the old Ap for this long + wfm.setConnectTimeout(60); + // okay, lets try and connect... + wfm.autoConnect(MANAGER_AP); + + Serial.println("Entering normal operation mode."); + + // we have config and are running normally, setup web server + server.on( "/", handleRoot ); + server.on( "/reset", handleReset ); + server.onNotFound( handleNotFound ); + server.begin(); + + // advertise we exist via MDNS + if (!MDNS.begin("remotepower")) { + Serial.println("Error setting up MDNS responder."); + } else { + MDNS.addService("http", "tcp", 80); + } + + // enable internal flash + SPIFFS.begin(); + + Serial.println("Requesting time from network"); + udp.begin(localPort); + setSyncProvider(ntp_fetch); + + Serial.println("Remote power switch. Ready"); +} + +void loop() { + // put your main code here, to run repeatedly: + server.handleClient(); + + // a timed off state in progress + if (trigtime != 0) { + if (trigtime + trighold < millis()) { + trigtime = 0; + output_set(DEVICE_ON); + } + } + + // has ntp failed. do we need to try again? + if (ntp_lastset == 0 && ntp_lasttry + 300000 < millis()) { + Serial.println("Ask Time service to try again"); + setSyncProvider(ntp_fetch); + } + +} -- 1.8.3.1