SMA Wechselrichter / Daten der Photovoltaik Anlage und einer BYD Batterie auslesen
SMA Wechselrichter / Daten der Photovoltaik Anlage und einer BYD Batterie auslesen
Ich wollte für eine DAKboard Integration auf meinem eigenen Raspberry Pi Dashboard gern die Daten der Photovoltaikanlage anzeigen. Ich habe einen Sunny Home Manager 2.0, einen Sunny Boy Storage 2.5 und einen Sunny Tripower 7000TL-20. Das ganze wird dann noch durch eine BYD Batterie ergänzt.
Die Grundidee war nun, via Webrequest an den JSON Stream zu kommen.
Ich mache es kurz - es ist/war ein Desaster. Die Daten sind zwar irgendwie über die Homepage abgreifbar (https://www.sunnyportal.com/homemanager), jedoch benötigt man dafür einen Login, und dieser ist leider nur via Web-Form Login machbar. Streckenweise hat es funktioniert, dann wieder stundenlang gar nicht. Manchmal habe ich JSON Werte nur mit null gefüllt zurück bekommen. Ich habe das basteln in diese Richtung dann nach 2 Tagen aufgegeben.
Nun mache ich es anders. Über die öffentlich freigegebene Seite der Anlage bekommt man Daten ohne Anmeldung. Hier findet sich zwar deutlich weniger an Informationen, für meine Zwecke reicht es aber. Diese Seite erreicht ihr über die Struktur: https://www.sunnyportal.com/Templates/PublicPage.aspx?page=EURE-EINDEUTIGE-ID. Diese URL könnt Ihr in der Anlagenübersicht unten (Konfiguration - Anlagenübersicht) abrufen.
Diese Seite könnt Ihr ohne Anmeldung z.B. mittels PHP auslesen.
Hier mein PHP Script:
<?php
$url = "https://www.sunnyportal.com/Templates/PublicPage.aspx?page=EURE-EINDEUTIGE-ID";
// Sunnyportal PV Daten
$trimmed = file($url, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$pv = strip_tags($trimmed[158]); //PV Energie heute
$pvEinheit = strip_tags($trimmed[159]);
$co2 = strip_tags($trimmed[175]); // CO2 Vermeidung heute
$co2Einheit = strip_tags($trimmed[176]);
echo '{"pv_today": "'.$pv.$pvEinheit.'","co2_today": "'.$co2.$co2Einheit.'"}';
$trimmed = file($url, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$pv = strip_tags($trimmed[158]); //PV Energie heute
$pvEinheit = strip_tags($trimmed[159]);
$co2 = strip_tags($trimmed[175]); // CO2 Vermeidung heute
$co2Einheit = strip_tags($trimmed[176]);
echo '{"pv_today": "'.$pv.$pvEinheit.'","co2_today": "'.$co2.$co2Einheit.'"}';
?>
Ich erzeuge mir hier also selbst ein JSON mit den 2 Werten Tageserzeugung in kWh und CO2 Vermeidung in kg.
Jetzt fehlte mir nur noch der Ladestand meiner BYD Batterie. Diese Daten besorge ich mir auf ganz ähnliche Weise. Die BYD Webseite mit den Statuswerten ist nur im internen Netz erreichbar, daher macht der Raspberry das direkt selbst:
<?php
$username = 'user';
$password = 'xxxxxxx';
$url = "http://192.168.178.86/asp/Home.asp";
$context = stream_context_create(array(
'http' => array(
'header' => "Authorization: Basic " . base64_encode("$username:$password")
)
));
$trimmed = file($url, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES, $context);
$power = substr($trimmed[89],49,3); //Batterieladestand in %
$power = round($power, 2);
echo '{"batterypower": "'.$power.'"}';
?>
Hier könnte man auch noch weitere Werte auslesen - für mich reicht aber der Ladestand.
So das wars,
vielleicht hilft es ja dem ein oder anderen.
PS: Falls es interessiert. Das Dashboard selbst ist ein ausgebautes Notebookdisplay in einem Bilderrahmen mit Raspberry Pi:
Kommentare
Kommentar veröffentlichen