Gumo zusammen,
Ich suche hier bei Euch nochmal Rat... vielleicht hat jemand eine kluge Idee
Ich habe eine selbst programmierte Wärmepumpensteuerung, die, je nach Stromerzeugung der PV-Anlage und Ladestand des Akkus meinen EV per Wärmepumpe hochtreibt.
Im Prinzip funktioniert es so, dass ich am Hausanschlusspunkt erfasse, wieviel Strom das Haus verlässt. Nach Zeitraum x> und Erzeugung y schaltet mir der Arduino die EigenbauWP ein und bei Einspeisung x< wieder aus.
Parallel logge ich im 5 Minutentakt (per NAS) alle relevanten Messwerte (hat mit Arduino nichts zu tun)
Ich hatte bisher die Leistung zum Einschalten der WP so ermittelt, dass ich den Durchschnitt der letzten 20 Minuten von dem NAS gezogen habe (per php-Aufruf mit dem Arduino. Das funktioniert hinreichend gut - hatte den Haken, dass wenn das NAS mal nicht antwortet, die WP nicht schaltet.
Diese Code macht was er sollte
Da ich mit dem NAS, auch per php und einem Multicastbefehl, die Daten direkt vom SMA EM ziehe, musste es ja auch mit dem Arduino gehen.
Nach Sucherei und Tüftelei liefert mir dieser Code das gewünschte Ergebnis:
Der Code wird etwas alle 5 Minuten aufgerufen
EinspeisungWert ist das was ich aus beiden Scripts rausbekomme
Die auskommentierten Dinge sind nur zum test drinne
Auch dieses Script funktioniert, WENN es mal eine Verbindung aufgebaut bekommt - das dauert zuweilen recht lange. Wenn die Verbindung einmal aufgerufen werden konnte läuft es zuverlässig - bis zum Tag X.
Dann bekommt das Ding keine Verbindung aufgebaut
Der Arduino läuft aber weiter (Das liegt am Abbruch bei 10 misslungenen Versuchen)
Hat jemand hier eine kluge Idee, woran sowas liegen könnte ?
Starte ich den Arduino neu (resettaste) funktioniert das ganze nach einer Weile wieder ganz normal
Oder ein anderes Script, wo ich per UDP Multicast empfangen kann
Viele Grüsse
Carsten
Ich suche hier bei Euch nochmal Rat... vielleicht hat jemand eine kluge Idee
Ich habe eine selbst programmierte Wärmepumpensteuerung, die, je nach Stromerzeugung der PV-Anlage und Ladestand des Akkus meinen EV per Wärmepumpe hochtreibt.
Im Prinzip funktioniert es so, dass ich am Hausanschlusspunkt erfasse, wieviel Strom das Haus verlässt. Nach Zeitraum x> und Erzeugung y schaltet mir der Arduino die EigenbauWP ein und bei Einspeisung x< wieder aus.
Parallel logge ich im 5 Minutentakt (per NAS) alle relevanten Messwerte (hat mit Arduino nichts zu tun)
Ich hatte bisher die Leistung zum Einschalten der WP so ermittelt, dass ich den Durchschnitt der letzten 20 Minuten von dem NAS gezogen habe (per php-Aufruf mit dem Arduino. Das funktioniert hinreichend gut - hatte den Haken, dass wenn das NAS mal nicht antwortet, die WP nicht schaltet.
Diese Code macht was er sollte
PHP-Code:
void PHPWertlesen() { //HTTPS Verbindung aufbauen
WiFiClientSecure client;
client.setInsecure();
HTTPClient https;
https.begin(client, "https://192.168.2XXXXXXXXEinspeisungWerte.php");
int httpCode = https.GET();
String EinspeisungWertlesen = https.getString(); //Lese was die Webadresse liefert und schreibe in Variable
EinspeisungWert = EinspeisungWertlesen.toInt(); // konvertiere String zu int
https.end(); //Close connection
}
Nach Sucherei und Tüftelei liefert mir dieser Code das gewünschte Ergebnis:
Der Code wird etwas alle 5 Minuten aufgerufen
PHP-Code:
void MulticastLesen(){
Udp.beginMulticast(ip, multicastIP, multicastPort);
byte packetBuffer[BUFFER_SIZE]; // buffers for receiving data
int packetSize = 0; // The real size of the packet
int count = 0; // Counter for the errors while recive a packet
float energyValue = 0; // Temporary
// try to recive packet from Udp max. 10 times
// and wait 200 millisec. between
while ((packetSize <= 0) && (count < 15)) {
count++;
packetSize = Udp.parsePacket();
delay(175);
#ifdef DEBUG
Serial.print("*");
#endif
}
Serial.println("");
// There is an packet
if (packetSize) {
// read the packet into packetBuffer
if (packetSize > BUFFER_SIZE) {
Udp.read(packetBuffer, BUFFER_SIZE);
} else {
Udp.read(packetBuffer, packetSize);
}
Udp.endPacket();
#ifdef DEBUG
Serial.println("");
//Serial.print("Empfangene Paketgrösse ");
#endif
// // Read "PowerIn" from SMA-Telegram
energyValue = 0;
for (count = 0; count < LEN_170; count++) {
energyValue = (energyValue * 256) + packetBuffer[(POS_170 + count)];
}
energyValue = energyValue/10;
Serial.print("Bezug: ");
Serial.println(energyValue);
BezugMulticast = energyValue;
// Read "PowerOut" from SMA-Telegram
energyValue = 0;
for (count = 0; count < LEN_180; count++) {
energyValue = (energyValue * 256) + packetBuffer[(POS_180 + count)];
}
energyValue = energyValue/10;
Serial.print("Einspeisung: ");
Serial.println(energyValue);
EinspeisungWert = round (energyValue); // runde und konvertiere String zu int
// Serial.println(EinspeisungWert);
}
}
Die auskommentierten Dinge sind nur zum test drinne
Auch dieses Script funktioniert, WENN es mal eine Verbindung aufgebaut bekommt - das dauert zuweilen recht lange. Wenn die Verbindung einmal aufgerufen werden konnte läuft es zuverlässig - bis zum Tag X.
Dann bekommt das Ding keine Verbindung aufgebaut
Der Arduino läuft aber weiter (Das liegt am Abbruch bei 10 misslungenen Versuchen)
Hat jemand hier eine kluge Idee, woran sowas liegen könnte ?
Starte ich den Arduino neu (resettaste) funktioniert das ganze nach einer Weile wieder ganz normal
Oder ein anderes Script, wo ich per UDP Multicast empfangen kann
Viele Grüsse
Carsten