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
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
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 ist aber ein Attribut des device global.
Also:
my $lat = AttrNum("global", "latitude", -1);;\
my $lon = AttrNum("global", "longitude", -1);;\