1 changed files with 108 additions and 0 deletions
@ -0,0 +1,108 @@ |
|||||
|
#include <ESP8266WiFi.h> |
||||
|
#include <ESP8266HTTPClient.h> |
||||
|
#include <WiFiClientSecure.h> // Include for secure connections |
||||
|
|
||||
|
// Replace with your network credentials
|
||||
|
const char* ssid = "SSIDHERE"; |
||||
|
const char* password = "PASSWORDHERE"; |
||||
|
|
||||
|
// Replace with your ntfy server URL
|
||||
|
const String ntfyServerUrl = "https://ntfy.sh/TOPIC"; |
||||
|
|
||||
|
// GPIO pin connected to optocoupler output
|
||||
|
const int powerStatusPin = 5; // GPIO5 is D1
|
||||
|
|
||||
|
const int ledPin = 2; // GPIO2 is the blue onboard LED
|
||||
|
|
||||
|
// Variable to store the previous state of the power status
|
||||
|
bool previousPowerStatus = false; // Assume power is off initially
|
||||
|
|
||||
|
WiFiClientSecure wifiClient; // Create a WiFiClientSecure object
|
||||
|
|
||||
|
void setup() { |
||||
|
// Start serial communication
|
||||
|
Serial.begin(115200); |
||||
|
|
||||
|
// Initialize the GPIO pin as an input with pull-up
|
||||
|
pinMode(powerStatusPin, INPUT_PULLUP); |
||||
|
|
||||
|
// Initialize the LED pin as an output
|
||||
|
pinMode(ledPin, OUTPUT); |
||||
|
|
||||
|
// Connect to Wi-Fi - The last 'true' indicates hidden SSID
|
||||
|
WiFi.begin(ssid, password, 0, NULL, true); |
||||
|
|
||||
|
// Connect to Wi-Fi, using non-hidden SSID
|
||||
|
// WiFi.begin(ssid, password);
|
||||
|
Serial.print("Connecting to Wi-Fi"); |
||||
|
|
||||
|
while (WiFi.status() != WL_CONNECTED) { |
||||
|
delay(500); |
||||
|
Serial.print("."); |
||||
|
} |
||||
|
|
||||
|
Serial.println(); |
||||
|
Serial.println("Connected to Wi-Fi"); |
||||
|
Serial.print("IP address: "); |
||||
|
Serial.println(WiFi.localIP()); |
||||
|
} |
||||
|
|
||||
|
void loop() { |
||||
|
// Blink the blue LED every second
|
||||
|
digitalWrite(ledPin, LOW); // Turn the LED on (LED is active low)
|
||||
|
delay(500); // Wait for half a second
|
||||
|
digitalWrite(ledPin, HIGH); // Turn the LED off
|
||||
|
delay(500); // Wait for half a second
|
||||
|
|
||||
|
// Read the current power status
|
||||
|
bool currentPowerStatus = digitalRead(powerStatusPin); |
||||
|
|
||||
|
// If power status has changed
|
||||
|
if (currentPowerStatus != previousPowerStatus) { |
||||
|
if (currentPowerStatus == LOW) { // Assume LOW means power is on
|
||||
|
// Power restored
|
||||
|
Serial.println("Power Restored."); |
||||
|
sendNotification("Power is on! Control MDF is back on mains power."); |
||||
|
} else { |
||||
|
// Power outage detected
|
||||
|
Serial.println("Power Outage Detected!"); |
||||
|
sendNotification("Power is off! Control MDF is on battery power."); |
||||
|
} |
||||
|
|
||||
|
// Update the previous power status
|
||||
|
previousPowerStatus = currentPowerStatus; |
||||
|
} |
||||
|
|
||||
|
// Add a small delay to prevent rapid state changes
|
||||
|
delay(1000); |
||||
|
} |
||||
|
|
||||
|
// Function to send a notification to ntfy
|
||||
|
void sendNotification(String message) { |
||||
|
if (WiFi.status() == WL_CONNECTED) { // Check Wi-Fi connection
|
||||
|
HTTPClient http; |
||||
|
|
||||
|
// Allow the use of insecure connections if needed (for testing)
|
||||
|
wifiClient.setInsecure(); // Use this for testing; in production, use valid certificates
|
||||
|
|
||||
|
// Prepare HTTP POST request with WiFiClientSecure
|
||||
|
http.begin(wifiClient, ntfyServerUrl); // Pass the WiFiClientSecure object
|
||||
|
http.addHeader("Content-Type", "text/plain"); |
||||
|
|
||||
|
// Print the message being sent for debugging
|
||||
|
Serial.print("Sending notification: "); |
||||
|
Serial.println(message); |
||||
|
|
||||
|
// Send the message
|
||||
|
int httpResponseCode = http.POST(message); |
||||
|
|
||||
|
// Print response code for debugging
|
||||
|
Serial.print("HTTP Response code: "); |
||||
|
Serial.println(httpResponseCode); |
||||
|
|
||||
|
// Close the connection
|
||||
|
http.end(); |
||||
|
} else { |
||||
|
Serial.println("Wi-Fi Disconnected. Cannot send notification."); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue