Mahlzeit zusammen,
ich habe hier einen D1 mini welchen ich nutzen möchte um einen Rechner aus der Ferne hoch und wieder runter zu fahren.
Auf einem lokalen Web-Server läuft ein php Script welches den Rechner startet, das funktioniert auch zuverlässig. Auf dem entsprechenden PC läuft beim Startet ein Dienst welcher über http angesprochen wird, der den Rechner runterfährt, dass funktioniert auch zuverlässig.
Am W1 ist ein Taster mit LEDs.
Geplant ist, dass der W1 den Rechner anpingt um zu schauen, ob dieser online oder offline ist.
Wird der Taster betätigt löst dieser einen Interupt aus, dort wird je nachdem ob der Rechner online oder offline ist eine weitere Funktion aufgerufen wird, entweder wird halt das php Script angesprochen um dem Rechner hochzufahren oder der Rechner per http um runterzufahren.
Aus dem normalen loop() funktioniert das generell auch alles.
Sobald ich aber aus der Interrupt Funktion oder aus den anderen Funktionen einen Ping absetze bekomme ich als Ergebnis immer 0 zurück und der http Aufruf gibt mir immer -1 zurück (im normalen loop() bekomme ich mit dem selben Aufruf 200 als http Code zurück)
Ich habe mir in den Funktionen schon die Variablen für die IP Adressen ausgeben lassen weil ich befürchtete die sind dort nicht mehr vorhanden, aber die benötigten Variablen liegen alle in den Programmteilen vor.
Ich verstehe einfach nicht, warum aus dem loop() alles funktioniert und aus dem Funktionen nicht.
Hier mal der Code, wir ihr sehen könnt habe ich mir schon einige Ausgaben für den Serial Monitor mit Zeilennummer reingeschrieben um besser zu sehen, wo er gerade im Code ist und was passieren sollte.
Generell ist der Code gerade etwas verbastelt und nicht Final
//192.168.168.54
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266Ping.h>
HTTPClient sender;
WiFiClient wifiClient;
#define taster 14
#define LedBlau 5
#define LedGruen 2
#define LedRot 4
const IPAddress remote_ip(192, 168, 168, 122);
const IPAddress remote_ipServer(192, 168, 168, 36);
const char* ssid = "****";
const char* password = "*********************";
int tasterstatus=0;
bool rechnerOnline = Ping.ping(remote_ip, 1);
bool serverOnline = Ping.ping(remote_ipServer, 1);
bool tasterPushed = false;
void ICACHE_RAM_ATTR pcSteuern(); //Interrupt bei Tasterbetätigung
void hochfahren();
void runterfahren();
void setup() {
Serial.begin(115200);
pinMode(LedRot, OUTPUT);
pinMode(LedGruen, OUTPUT);
pinMode(LedBlau, OUTPUT);
pinMode(taster, INPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
digitalWrite(LedBlau, HIGH);
delay(500);
digitalWrite(LedBlau, LOW);
delay(500);
}
Serial.println("43 - WIFI Verbunden");
attachInterrupt (digitalPinToInterrupt(taster), pcSteuern, HIGH);
}
void loop(){
Serial.println("49 - LOOP gestartet");
while (WiFi.status() == WL_CONNECTED){
serverOnline = Ping.ping(remote_ipServer, 1);
Serial.print("54 - Server Ping Ergebnis: ");
Serial.println(serverOnline);
Serial.println("56 - ping wird ausgefuehrt");
rechnerOnline = Ping.ping(remote_ip, 1);
Serial.print("58 - PC Ping Ergebins: ");
Serial.println(rechnerOnline);
if (rechnerOnline == true){
Serial.println("61 - Rechner ist online");
digitalWrite(LedRot, HIGH);
digitalWrite(LedBlau, LOW);
digitalWrite(LedGruen, HIGH);
} else {
Serial.println("66 - Rechner ist offline");
digitalWrite(LedRot, LOW);
digitalWrite(LedBlau, LOW);
digitalWrite(LedGruen, HIGH);
}
//delay(1000);
}
while (WiFi.status() != WL_CONNECTED){
Serial.println("74 - NEUVERBINDUNG WiFi");
digitalWrite(LedBlau, HIGH);
digitalWrite(LedGruen, LOW);
digitalWrite(LedRot, LOW);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.println("80 - Verbinde Wifi");
digitalWrite(LedBlau, HIGH);
delay(500);
digitalWrite(LedBlau, LOW);
delay(500);
}
Serial.println("86 - Wifi verbunden");
}
}
void pcSteuern(){
Serial.println("91 - Taster gedrückt");
serverOnline = Ping.ping(remote_ipServer, 1);
Serial.print("93 - Server Ping Ergebnis: ");
Serial.println(serverOnline);
Serial.println("95 - ping wird ausgefuehrt");
bool pcOnline = Ping.ping(remote_ip, 1);
Serial.print("97 - PC Ping Ergebnis: ");
Serial.println(pcOnline);
digitalWrite(LedBlau, HIGH);
digitalWrite(LedGruen, LOW);
digitalWrite(LedRot, LOW);
if (pcOnline == true){
Serial.println("103 - starte runterfahren");
runterfahren();
} else {
Serial.println("106 - starte hochfahren");
hochfahren();
}
}
void hochfahren(){
Serial.println("112 - Rechner START");
sender.begin(wifiClient, "http://192.168.168.36/wol/konfwol.php");
int httpCode = sender.GET();
Serial.print("115 - ");
Serial.println(httpCode);
sender.end();
}
void runterfahren(){
Serial.println("121 - Rechner SHUTDOWN");
sender.begin(wifiClient, "http://192.168.168.122:5001/shutdown");
int httpCode = sender.GET();
Serial.print("124 - ");
Serial.println(httpCode);
sender.end();
}
