S0 -> Wemos D1 Mini -> HTTP Push Request -> Volkszähler

  • Guten Abend,


    kann mir jemand bei der korrekten Syntax für ein HTTP Push Request vom Wemos D1 mini ESP 8266 zum Volkszähler helfen?

    Ich programmiere mit der Arduino IDE und den dazugehörigen libraries. wie funktioniert speziell der Aufbau des HTTP Push Request mit den zur Verfügung stehenden Libs?


    als "serverName" hab ich

    const char* serverName = "http://192.168.2.150:80/middleware.php/data";


    Ich habe momentan keine Möglich das direkt zu testen. Daher meine Frage ob das so funktioniert?! Oder wie muss der "serverName" und der httpRequestData String aussehen?

  • Ich denke da fehlt noch ein "/" zwischen /data und UUID.json. Asonsten passt das aber.


    (Und natürlich muss statt "UUID" die UUID des Kanals im Code stehen.)

    No Shift - No Service

  • Das hat leider so nicht funktioniert. Im Frontend kommen keine Daten an. An welcher Stelle kann ich denn nachschauen wo was ankommt? Die vzlogger.log loggt ja nur die in der vzlogger.conf eingetragenen Dinge mit, oder?

  • Im Frontend kommen keine Daten an.

    Das Frontend holt die Daten seinerseits auch nur aus der Middleware.


    An welcher Stelle kann ich denn nachschauen wo was ankommt?

    Erste Frage wäre ob du die Quittierung der Middleware hast (HTTP-Code 200 und der Antworttext mit volkszähler-Versionsnummer rund Anzahl der empfnagene Tuple)?


    Bei anderen Datenquellen muss man dann schauen was das Log vom Webserver so hergibt. Z.B. access.log des Apache2. Da sollte der erfolgreiche Zugriff ebenfalls mit Code 200 bestätigt werden.


    Die vzlogger.log loggt ja nur die in der vzlogger.conf eingetragenen Dinge mit, oder?

    Ja, eben das was der vzlogger an Daten verarbeitet. Wenn man die Middleware über andere Datenquellen füttert taucht das in dem Logfile nicht auf.

    No Shift - No Service

  • Vielen Dank für die Tipps. Ich werde morgen weiter ausprobieren.


    Ich denke, ich habe unabhängig davon noch einen Fehler gefunden:

    Der Wemos D1 mini hat einen Software watchdog, der nach ca. 3 sec. rebootet und einen Hardware watchdog, der nach dem Abschalten vom Software watchdog nach ca. 8 sec. rebootet. Diesen kann man nicht abschalten. Wenn ich jetzt per Interrupt auf die Pulse warte und es nicht gerade Hochsommer ist, lässt ein Puls bei einer Anlage mit 600W max. Leistung ("Balkonkraftwerk") und einem Zähler mit 1600 Impulsen pro kWh natürlich auf sich warten. Ich habe auch beobachtet, dass die onboard Led regelmäßig aufblinkt. Ich denke das war der reboot und das Programm kam gar nicht so weit einen HTTP Request zu senden...

  • Moin, ich habs hinbekommen.

    Läuft seit gestern stabil. Allerdings war der "GET" Request der richtige und nicht der "POST" Request.


    Die Pulse werden hier Interrupt gesteuert abgefangen. Für JEDEN Puls wird Millisekunden genau die Leistung berechnet und an die Middleware gesendet.


    Im Frontend ist der Kanal als "El. Energie (Leistungswerte)" mit einer Auflösung von "1" definiert.

    Der S0 Eingang hat Hardwaremäßig einen 4,7k Ohm Widerstand.


    Zu beachten ist, dass in diesem Fall bei maximaler Leistung (Balkonkraftwerk mit 600W, S0 Zähler mit 1600 Impulse / kWh) alle 3700ms ein Puls gesendet wird.


    Hier mein Programm:

  • Schön, dass es nun läuft.

    Kurz 2 Verständnisfragen.

    1. Warum werden die 2 Konstanten (a + b) im Hauptteil deklariert und nicht einmalig zu Beginn?

    2. Gibt es einen speziellen Grund, dass Du selbst die Impulse in Leistung umrechnest und nicht einfach die Impulse verwendest?

  • Danke. Ja, sehr cool.


    Zu deinen Fragen:

    1. Die beiden Konstanten können auch zu Beginn deklariert werden. Da sie nicht verändert werden ist das die stimmiger!

    2. Ich finde es einfach schlüssiger direkt jeden Impuls zu erfassen und mit Hilfe der vergangenen Zeit dann die Leistung in dieser Zeit zu berechnen. Geht aber natürlich auch indem man die Pulse zählt und dann weiter berechnet. Dann muss man sich aber irgendwie auch die Gesamtanzahl der Pulse irgendwo merken...

  • Geht aber natürlich auch indem man die Pulse zählt und dann weiter berechnet. Dann muss man sich aber irgendwie auch die Gesamtanzahl der Pulse irgendwo merken...

    Das würde beides Volkszähler für dich machen...

    No Shift - No Service