Restoring Backup
This commit is contained in:
228
main.ino
Normal file
228
main.ino
Normal file
@@ -0,0 +1,228 @@
|
|||||||
|
//------------DEFINITIONS------------
|
||||||
|
// Libaries
|
||||||
|
#ifdef ESP32
|
||||||
|
#include <WiFi.h>
|
||||||
|
#else
|
||||||
|
#include <ESP8266WiFi.h>
|
||||||
|
#endif
|
||||||
|
#include <WiFiClientSecure.h>
|
||||||
|
#include <UniversalTelegramBot.h> // Universal Telegram Bot Library written by Brian Lough: https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
|
// Replace with your network credentials
|
||||||
|
//const char* ssid = "S10";
|
||||||
|
//const char* password = "aUjK67$2";
|
||||||
|
const char* ssid = "SchneckenAufPasta";
|
||||||
|
const char* password = "hf8CnyjPwrhc";
|
||||||
|
|
||||||
|
|
||||||
|
// Initialize Telegram BOT
|
||||||
|
#define BOTtoken "5094918649:AAFPjufh6NMhPtwWeMwRAZMygFaDyMoRfXk" // your Bot Token (Get from Botfather)
|
||||||
|
#ifdef ESP8266
|
||||||
|
X509List cert(TELEGRAM_CERTIFICATE_ROOT);
|
||||||
|
#endif
|
||||||
|
WiFiClientSecure client;
|
||||||
|
UniversalTelegramBot bot(BOTtoken, client);
|
||||||
|
|
||||||
|
|
||||||
|
// Variables
|
||||||
|
const int powerPin = D1;
|
||||||
|
const int powerStateReadPin = A0;
|
||||||
|
bool powerState = HIGH; //LOW = of
|
||||||
|
int t1, t2, t3, t4, t5, avg;
|
||||||
|
uint8_t newMACAddress[] = {0x32, 0xAE, 0xA4, 0x07, 0x0D, 0x66};
|
||||||
|
|
||||||
|
|
||||||
|
// Tweaks & Settings
|
||||||
|
int botRequestDelay = 5000;
|
||||||
|
const int powerStateThreshhold = 470; //min 0=0V, max 1023=3.3V, 470=1.5V
|
||||||
|
const int maxCycles = 40; //c.a. 1.5s per cycle
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//------------FUNCTIONS------------
|
||||||
|
// Check current power-state
|
||||||
|
void checkPowerState() {
|
||||||
|
// Do multiple measurements to catch blinking led
|
||||||
|
t1 = analogRead(powerStateReadPin);
|
||||||
|
//delay(120);
|
||||||
|
t2 = analogRead(powerStateReadPin);
|
||||||
|
//delay(150);
|
||||||
|
t3 = analogRead(powerStateReadPin);
|
||||||
|
//delay(180);
|
||||||
|
t4 = analogRead(powerStateReadPin);
|
||||||
|
//delay(50);
|
||||||
|
t5 = analogRead(powerStateReadPin);
|
||||||
|
avg = (t1+t2+t3+t4+t5)/5;
|
||||||
|
|
||||||
|
// Interprete Result
|
||||||
|
if (avg > powerStateThreshhold) {
|
||||||
|
powerState = HIGH;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
powerState = LOW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Switch power state
|
||||||
|
void switchPowerState(bool desiredPowerState) {
|
||||||
|
// Simulate press of power-button
|
||||||
|
digitalWrite(powerPin, LOW);
|
||||||
|
delay(200);
|
||||||
|
digitalWrite(powerPin, HIGH);
|
||||||
|
|
||||||
|
// Give the server time to boot
|
||||||
|
// My server does a double or tripple boot sometimes, so in this case, i wait for 2min
|
||||||
|
delay(60000);
|
||||||
|
|
||||||
|
// Check PowerState
|
||||||
|
int i = 0;
|
||||||
|
Serial.print("Waiting for power change");
|
||||||
|
while (powerState != desiredPowerState)
|
||||||
|
{
|
||||||
|
checkPowerState();
|
||||||
|
i = i+1;
|
||||||
|
delay(1000);
|
||||||
|
Serial.print(".");
|
||||||
|
if (i == 36); //6min
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Serial.println("[OK]");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle new messages
|
||||||
|
void handleNewMessages(int numNewMessages) {
|
||||||
|
Serial.println("handleNewMessages");
|
||||||
|
Serial.println(String(numNewMessages));
|
||||||
|
|
||||||
|
// Fetch Message details
|
||||||
|
for (int i=0; i<numNewMessages; i++) {
|
||||||
|
// Chat id of the requester
|
||||||
|
String chat_id = String(bot.messages[i].chat_id);
|
||||||
|
|
||||||
|
// Print the received message
|
||||||
|
String text = bot.messages[i].text;
|
||||||
|
Serial.println(text);
|
||||||
|
|
||||||
|
// Handling Start/Help
|
||||||
|
String from_name = bot.messages[i].from_name;
|
||||||
|
if (text == "/start" || text == "/help") {
|
||||||
|
String welcome = "Welcome, " + from_name + ".\n";
|
||||||
|
welcome += "Use the following commands to control your outputs.\n\n";
|
||||||
|
welcome += "/state to request current server state \n";
|
||||||
|
welcome += "/on to boot server \n";
|
||||||
|
welcome += "/off to shutdown server \n";
|
||||||
|
bot.sendMessage(chat_id, welcome, "");
|
||||||
|
}
|
||||||
|
// Handling turn-on
|
||||||
|
else if (text == "/on" and powerState == LOW) {
|
||||||
|
bot.sendMessage(chat_id, "Booting Server..." "");
|
||||||
|
switchPowerState(HIGH);
|
||||||
|
if (powerState = HIGH) {
|
||||||
|
bot.sendMessage(chat_id, "Bootup succeded" "");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bot.sendMessage(chat_id, "[WARNING]: Bootup failed" "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Handling turn-off
|
||||||
|
else if (text == "/off" and powerState == HIGH) {
|
||||||
|
bot.sendMessage(chat_id, "Shutting down Server..." "");
|
||||||
|
switchPowerState(LOW);
|
||||||
|
if (powerState = LOW) {
|
||||||
|
bot.sendMessage(chat_id, "Shutdown succeded" "");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bot.sendMessage(chat_id, "[WARNING]: Shutdown failed" "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Handling unnessassary turn-on
|
||||||
|
else if (text == "/on" and powerState == HIGH) {
|
||||||
|
bot.sendMessage(chat_id, "Server is already online" "");
|
||||||
|
}
|
||||||
|
// Handling unnessassary turn-off
|
||||||
|
else if (text == "/off" and powerState == LOW) {
|
||||||
|
bot.sendMessage(chat_id, "Server is already offline" "");
|
||||||
|
}
|
||||||
|
// Waiting for change in power-state
|
||||||
|
else if (text == "/state") {
|
||||||
|
checkPowerState();
|
||||||
|
if (powerState == HIGH) {
|
||||||
|
bot.sendMessage(chat_id, "Server is online" "");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bot.sendMessage(chat_id, "Server is offline" "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//------------SETUP------------
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(9600);
|
||||||
|
|
||||||
|
// Telegram Certification
|
||||||
|
#ifdef ESP8266
|
||||||
|
configTime(0, 0, "pool.ntp.org"); // get UTC time via NTP
|
||||||
|
client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// GPIO-Initialisation
|
||||||
|
pinMode(powerPin, OUTPUT);
|
||||||
|
pinMode(LED_BUILTIN, OUTPUT);
|
||||||
|
digitalWrite(powerPin, powerState);
|
||||||
|
|
||||||
|
// Changing Mac-Address
|
||||||
|
WiFi.mode(WIFI_STA);
|
||||||
|
WiFi.begin(ssid, password);
|
||||||
|
Serial.print("Old MacAdress: ");
|
||||||
|
Serial.println(WiFi.macAddress());
|
||||||
|
wifi_set_macaddr(0, &newMACAddress[0]);
|
||||||
|
Serial.print("New MacAdress: ");
|
||||||
|
Serial.println(WiFi.macAddress());
|
||||||
|
|
||||||
|
// Connect to WiFi
|
||||||
|
#ifdef ESP32
|
||||||
|
client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Add root certificate for api.telegram.org
|
||||||
|
#endif
|
||||||
|
while (WiFi.status() != WL_CONNECTED) {
|
||||||
|
delay(1000);
|
||||||
|
Serial.println("Connecting to WiFi..");
|
||||||
|
}
|
||||||
|
Serial.println(WiFi.localIP());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//------------LOOP------------
|
||||||
|
void loop() {
|
||||||
|
// Checking power-state
|
||||||
|
checkPowerState();
|
||||||
|
|
||||||
|
// Signal Activity
|
||||||
|
digitalWrite(LED_BUILTIN, LOW);
|
||||||
|
|
||||||
|
// Handling Messages
|
||||||
|
Serial.println("Checking for messages...");
|
||||||
|
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
|
||||||
|
while(numNewMessages) {
|
||||||
|
Serial.println("got response");
|
||||||
|
handleNewMessages(numNewMessages);
|
||||||
|
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Signal Activity
|
||||||
|
digitalWrite(LED_BUILTIN, HIGH);
|
||||||
|
|
||||||
|
// Delay
|
||||||
|
delay(botRequestDelay);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user