Ankündigung

Einklappen
Keine Ankündigung bisher.

Arduino ESP8266, Multicast lesen aus SMA EnergyMeter ist nicht stabil

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Arduino ESP8266, Multicast lesen aus SMA EnergyMeter ist nicht stabil

    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

    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
    }​ 
    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

    PHP-Code:
    void MulticastLesen(){
    Udp.beginMulticast(ipmulticastIPmulticastPort);
    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(packetBufferBUFFER_SIZE);
    } else {
    Udp.read(packetBufferpacketSize);
    }
    Udp.endPacket();
    #ifdef DEBUG
    Serial.println("");
    //Serial.print("Empfangene Paketgrösse ");

    #endif

    // // Read "PowerIn" from SMA-Telegram
    energyValue 0;
    for (
    count 0count LEN_170count++) {
    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 0count LEN_180count++) {
    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);
    }

    }
    ​ 
    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
    Zuletzt geändert von Carstene; 23.03.2024, 09:56.
Lädt...
X