Hallo,
ich benutze hier:
$Id: 70_SolarEdgeAPI.pm 22510 2020-08-01 10:19:18Z
und habe Problem mit dem Readníngs-Wert overview-energyDay.
Die SolarEdgeAPI gibt aus:
overview-energyDay 2627 2026-03-17 09:16:22
Der Wert kommt vermutlich durch Aufsummierung:
foreach my $meterData (@{$meter -> {'values'}})
{
my $value = $meterData->{'value'};
if (defined $value)
{
$meterCum = $meterCum + $value;
$meterRecent15Min = $value;
}
}
wenn, zur gleichen Zeit, eine Abfrage zu /timeFrameEnergy manuell starte, bekomme ich:
timeFrameEnergy
energy 388.207
unit "Wh"
measuredBy ""
startLifetimeEnergy
date "2026-03-17"
energy 1721176.098
unit "Wh"
endLifetimeEnergy
date "2026-03-17"
energy 1721564.305
unit "Wh"
overview-energyDay müsste also 388.207 sein
Die Abfrage über timeFrame soll lt. API-Spec:
URL: /site/{siteId}/timeFrameEnergy
Example URL: https://monitoringapi.solaredge.com/site/1/timeFrameEnergy?startDate=2013-05-01&endDate=2013-05-
06&api_key=L4QLVQ1LOKCQX2193VSEICXW61NP6B1O
@pizmus
kannst du so eine Abfrage in das Modul einpflegen?
Und, wenn das nicht Zuviel ist, vielleicht auf Abfrage zu:
Site Environmental Benefits
Description: Returns all environmental benefits based on site energy production: CO2 emissions saved, equivalent trees planted,
and light bulbs powered for a day.
URL: /site/{siteId}/envBenefits
Example: https://monitoringapi.solaredge.com/site/2/envBenefits?systemUnits=Imperial&api_key
=L4QLVQ1LOKCQX2193VSEICXW61NP6B1O
Method: GET
Accepted format: JSON
Mit besten Grüßen
Martin
[EDIT]
API vom 03/2026 (https://knowledge-center.solaredge.com/sites/kc/files/se_monitoring_api.pdf)
[/EDIT]
Es ist vermutlich besser, wenn ich den Patch direkt hier poste:
# --- Attr-Handler: enableEnvBenefitsReadings ergänzen ---
if (($attrName eq "enableStatusReadings") or
($attrName eq "enableAggregatesReadings") or
($attrName eq "enableOverviewReadings") or
($attrName eq "enableStorageReadings") or
($attrName eq "enableDailyDetailsReadings") or
($attrName eq "enableDailyStorageReadings") or
($attrName eq "enableDailyOverviewReadings") or
($attrName eq "enableDailyAggregatesReadings") or
($attrName eq "enableEnvBenefitsReadings")) # <-- neu
{
if($cmd eq "set")
{
if (not (($attrVal eq "0") || ($attrVal eq "1")))
{
my $message = "illegal value for $attrName";
Log3 $name, 3, "SolarEdgeAPI ($name) - ".$message;
return $message;
}
else
{
InternalTimer(gettimeofday() + 5, 'SolarEdgeAPI_RestartHttpRequestTimers', $hash);
}
}
}
# --- Get-Liste erweitern ---
my $list = 'status:noArg aggregates:noArg overview:noArg dailyOverview:noArg storage:noArg dailyDetails:noArg dailyStorage:noArg dailyAggregates:noArg timeFrameEnergy:noArg envBenefits:noArg numberOfRequests:noArg';
# jetzt werden beide als gültige Get-Befehle erkannt
# --- SolarEdgeAPI_SendHttpRequest: envBenefits auswerten ---
elsif($path eq 'envBenefits')
{
# Prüfen, ob envBenefits-Reading aktiviert ist
return unless(AttrVal($name, "enableEnvBenefitsReadings", 0));
if(defined($decoded->{envBenefits}))
{
my $eb = $decoded->{envBenefits};
readingsBulkUpdate($hash, 1, (
'envBenefits-co2', $eb->{co2} // "-",
'envBenefits-gasEmissionSaved', $eb->{gasEmissionSaved} // "-",
'envBenefits-treesPlanted', $eb->{treesPlanted} // "-",
'envBenefits-lightBulbs', $eb->{lightBulbs} // "-"
));
}
}
# --- SolarEdgeAPI_SendHttpRequest: timeFrameEnergy-energyToday ---
elsif($path eq 'timeFrameEnergy')
{
# Prüfen, ob timeFrameEnergy-Reading aktiviert ist
return unless(AttrVal($name, "enableTimeFrameEnergyReadings", 0));
if(defined($decoded->{energyToday}))
{
readingsSingleUpdate($hash, 'timeFrameEnergy-energyToday', $decoded->{energyToday}, 1);
}
}
Es wäre schon, wenn es jemand verifizieren könnte.
Mit besten Grüßen
Martin