Datenerfassung ortsnetz-auslastung.de

Begonnen von Hadl, 08 Oktober 2026, 00:14:46

Vorheriges Thema - Nächstes Thema

Hadl

Hallo zusammen,
ich hab mich an den Community Projekt https://ortsnetz-auslastung.de/ beteiligt und dort meine gemessenen Spannungen hochgeladen.

Falls jemand von euch das auch machen will, hier mein at dazu:

defmod at_OrtsnetzAuslastung at +*00:05:00 {\
  use HttpUtils;;\
  use JSON::PP ();;\
  my $deviceName = "at_OrtsnetzAuslastung";;\
  # --- Koordinaten --- \
  my $lat  = 12.34;;\
  my $lon  = 45.67;;\
  \
  # --- Zählerwerte --- \
  my $l1_v = ReadingsVal("Fronius_Symo1", "Meter_0_Voltage_AC_Phase_1", -1);;\
  my $l2_v = ReadingsVal("Fronius_Symo1", "Meter_0_Voltage_AC_Phase_2", -1);;\
  my $l3_v = ReadingsVal("Fronius_Symo1", "Meter_0_Voltage_AC_Phase_3", -1);;\
  my $freq = ReadingsVal("Fronius_Symo1", "Meter_0_Frequency_Phase_Average", -1);;\
  my $observed_at = strftime("%Y-%m-%dT%H:%M:%SZ", gmtime());;;;\
  # -------------------------------------------------- \
  \
  my $json = sprintf('{"observed_at":"%s", "latitude":%s,"longitude":%s,"l1_v":%s,"l2_v":%s,"l3_v":%s,"grid_frequency_hz":%s}',\
                       $observed_at,       $lat,         $lon,          $l1_v,    $l2_v,    $l3_v,     $freq);;\
  my $param = {\
    url      => "https://www.ortsnetz-auslastung.de/v1/measurements",\
    timeout  => 10,\
    method   => "POST",\
    header   => "Content-Type: application/json",\
    data     => $json,\
    hash     => $defs{$deviceName},\
    callback => sub($$$) {\
      my ($param, $err, $data) = @_;;\
      my $hash = $param->{hash};;\
\
      if ($err)                     { Log3 $deviceName, 3, "ortsnetz-auslastung.de API Fehler: $err";; return;;}\
      my $response = eval {JSON::PP->new->utf8(0)->decode($data) };;\
      if ($@)                       { Log3 $deviceName, 3, "ortsnetz-auslastung.de API JSON-Decode-Fehler: $@";; return;; }\
      if (ref($response) ne "HASH") { Log3 $deviceName, 3, "ortsnetz-auslastung.de API: JSON-Antwort ist kein Objekt: $data";; return;; }\
\
      readingsBeginUpdate($hash);;\
      readingsBulkUpdate($hash, "accepted",               $response->{accepted})                if defined $response->{accepted};;\
      readingsBulkUpdate($hash, "created",                $response->{created})                 if defined $response->{created};;\
      readingsBulkUpdate($hash, "storage_recommendation", $response->{storage_recommendation})  if defined $response->{storage_recommendation};;\
\
      if (ref($response->{status}) eq "HASH") {\
        for my $key (qw(l1 l2 l3 overall)) {\
          readingsBulkUpdate($hash, "status_$key", $response->{status}{$key})                   if defined $response->{status}{$key};;\
        }\
      }\
      readingsEndUpdate($hash, 1);;\
      Log3 $deviceName, 3, "ortsnetz-auslastung.de API Antwort: $data";;\
    }\
  };;\
  Log3 $deviceName, 3, "ortsnetz-auslastung.de API Anfrage: POST $param->{url} | Body: $json";;\
  HttpUtils_NonblockingGet($param);;\
}

Viele Grüße

Hadl
FHEM: Rpi 5 + SSD / WR: Fronius Symo Gen24 10.0 Plus + BYD HVS 7.7, Fronius Symo Gen24 12.0 SC (60%) PV: (Ost=3.5 West=6.6 Nord=9.9 Ost=4.5) / Homematic BidCoS / Shelly / Viessmann

KölnSolar

#1
Morjen Hadl,
interessant.
Wenn die Daten nicht wirklich aus Italien kommen, Alles OK. Sonst vielleicht lat/lon anonymisieren.
Oder gleich die Daten, bei vielen wohl vorhanden, aus dem Global-device nehmen.
  my $lat  = ReadingsVal("global", "latitude", -1);;\
  my $lon  = ReadingsVal("global", "longitude", -1);;\

Mal sehen, ab wann meine Daten in der Karte auftauchen.

Danke&Grüße
Markus
Edit: und Nobbynews hat mit dem folgenden Post völlig recht. Kaum macht mans richtig, erscheint man auch sofort in der Karte.
RPi5/3/2 Trixie-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-ecovacs(mqtt2)-zigbee2mqtt

Nobbynews

#2
Zitat von: KölnSolar am 08 Oktober 2026, 07:25:30Oder gleich die Daten, bei vielen wohl vorhanden, aus dem Global-device nehmen.
  my $lat  = ReadingsVal("global", "latitude", -1);;\
  my $lon  = ReadingsVal("global", "longitude", -1);;\
Das sind aber Attribute des device global.
Also:
my $lat  = AttrNum("global", "latitude", -1);;\
my $lon  = AttrNum("global", "longitude", -1);;\


KölnSolar

RPi5/3/2 Trixie-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-ecovacs(mqtt2)-zigbee2mqtt

Gisbert

Hallo Hadl,

anscheinend kann man auch die PV-Prognose hochladen (Forecast-Ertrag x.xx kWh/kWp/Tag).
Wie kan man das denn machen?

Viele Grüße Gisbert
Proxmox | UniFi | RHASSPY | DEYE | JK-BMS | ESPHome | Panasonic Heishamon | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Rauchmelder FA21/22RF

KölnSolar

Hab Dich schon in der Karte gesehen.  8)

Vermutlich

die Variablen in kWp, kWh
my $capacity= ReadingsVal("yourdevice", "capacity", -1);;\
my $forecast= ReadingsVal("yourdevice", "forecast", -1);;\
und
my $json = sprintf('{"observed_at":"%s", "latitude":%s,"longitude":%s,"l1_v":%s,"l2_v":%s,"l3_v":%s,"grid_frequency_hz":%s}',\
                       $observed_at,       $lat,         $lon,          $l1_v,    $l2_v,    $l3_v,     $freq);;\
in

my $json = sprintf('{"observed_at":"%s", "latitude":%s,"longitude":%s,"l1_v":%s,"l2_v":%s,"l3_v":%s,"grid_frequency_hz":%s,"plant_capacity_kwp":%s,"pv_forecast_kwh":%s}',\
                       $observed_at,       $lat,         $lon,          $l1_v,    $l2_v,    $l3_v,     $freq,    $capacity,     $forecast);;\
ändern.
Im Log gucken, was zurückgemeldet wird, dann kann man ggfs. readings für die Rückmeldung angeben.
Grüße nach L.
Markus
RPi5/3/2 Trixie-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-ecovacs(mqtt2)-zigbee2mqtt

KölnSolar

Und für en bisschen Eigenwerbung bei deren Statistikern schreiben wir noch leicht verändert  my $json = sprintf('{"observed_at":"%s", "latitude":%s,"longitude":%s,"l1_v":%s,"l2_v":%s,"l3_v":%s,"grid_frequency_hz":%s,"smartmeter_model":"FHEM"}',
                       $observed_at,       $lat,         $lon,          $l1_v,    $l2_v,    $l3_v,     $freq);
bzw.
my $json = sprintf('{"observed_at":"%s", "latitude":%s,"longitude":%s,"l1_v":%s,"l2_v":%s,"l3_v":%s,"grid_frequency_hz":%s,"plant_capacity_kwp":%s,"pv_forecast_kwh":%s,"smartmeter_model":"FHEM"}',
                       $observed_at,       $lat,         $lon,          $l1_v,    $l2_v,    $l3_v,     $freq,    $capacity,     $forecast);

Markus
RPi5/3/2 Trixie-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-ecovacs(mqtt2)-zigbee2mqtt

softwear

Requestfelder sind dem Github zu entnehmen: https://github.com/thomaslehmann1234/datenerfassung-ortsnetz-auslastung/blob/master/API.md

Danke für den Hinweis auf das Projekt. Ich habe mich auch direkt beteiligt, da hier bereits eine Meldung an die Westnetz durch mich erfolgte, da die Überspannung den Wechselrichter mehrfach zur Abschaltung nötigte.

Beste Grüße
Peter

Gisbert

Zitat von: KölnSolar am 10 Oktober 2026, 06:26:17Hab Dich schon in der Karte gesehen.  8)

Vermutlich

die Variablen in kWp, kWh
my $capacity= ReadingsVal("yourdevice", "capacity", -1);;\
my $forecast= ReadingsVal("yourdevice", "forecast", -1);;\
und
my $json = sprintf('{"observed_at":"%s", "latitude":%s,"longitude":%s,"l1_v":%s,"l2_v":%s,"l3_v":%s,"grid_frequency_hz":%s}',\
                      $observed_at,      $lat,        $lon,          $l1_v,    $l2_v,    $l3_v,    $freq);;\
in

my $json = sprintf('{"observed_at":"%s", "latitude":%s,"longitude":%s,"l1_v":%s,"l2_v":%s,"l3_v":%s,"grid_frequency_hz":%s,"plant_capacity_kwp":%s,"pv_forecast_kwh":%s}',\
                      $observed_at,      $lat,        $lon,          $l1_v,    $l2_v,    $l3_v,    $freq,    $capacity,    $forecast);;\
ändern.
Im Log gucken, was zurückgemeldet wird, dann kann man ggfs. readings für die Rückmeldung angeben.
Grüße nach L.
Markus


Hallo Markus,

log sieht gut aus - scheint damit funktioniert zu haben. Da ich in meinen Fhem-Devices die Gesamtleistung nicht als kWp habe, habe ich in die Definition die installierte Leistung als Zahl reingeschrieben - hat funktioniert.

Die Werbung in eigener Sache habe ich auch eingebaut, aber die erscheint offenbar nicht auf der Webseite.

Viele Grüße Gisbert
Proxmox | UniFi | RHASSPY | DEYE | JK-BMS | ESPHome | Panasonic Heishamon | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Rauchmelder FA21/22RF

KölnSolar

Prima, Deinen geänderten Eintrag gesehen. Diskutiere gerade in deren Forum, den Forecast visibler zu machen.
RPi5/3/2 Trixie-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-ecovacs(mqtt2)-zigbee2mqtt

Maista

Hallo zusammen,

ich bin nun auch mit dabei.
Ich habe das Sub in ein myUtils ausgelagert.

Die Netzfrequenz musste ich allerdings von einer HM-Steckdose borgen.
Meine Shelly 3EM soll keine Netzfrequenz per MQTT ausgeben können.
Alternativ gibt es noch ein HM-800 per Ahoy.

Gruss Gerd