VoltStorage SMART

Welche Geräte sollen noch implementiert werden?
Was sollte man ändern / verbessern / ergänzen an der Solaranzeige? Hier kann Jeder seine Ideen einbringen.
Außerdem steht hier, woran gerade gerbeitet wird.

Moderator: Ulrich

Forumsregeln
Wenn neue Geräte implementiert werden sollen ist die Protokollbeschreibung der Schnittstelle vom Hersteller Voraussetzung.

Bitte nur konkrete Ideen hier eintragen und in jedem Beitrag bitte nur eine Erweiterung / Änderung, damit das Ganze noch überschaubar bleibt. Ein ganzes Sammelsorium von Ideen in einem Thread ist zu unübersichtlich. Nicht alles kann und wird auch verwirklicht werden.
Antworten
gregors
Beiträge: 3
Registriert: Mi 3. Jun 2020, 14:28

VoltStorage SMART

Beitrag von gregors »

Hallo allerseits,

Es wäre schön, wenn auch das VoltStorage SMART Batteriesystem implementiert werden könnte. Der Hersteller hat die Spezifikationen der REST-API unter https://api-reference.voltstorage.com/ offengelegt. Für mich (als Laien :| ) sieht es so als, als wäre diese API ähnlich, wie bereits implementiertes. Möglicherweise ist der Aufwand dann nicht so groß. Da über diese API neben dem Ladezustand, Temperaturen, etc. auch Leistungsdaten der PV-Anlage, sowie des aktuellen Eigenstromverbrauchs ausgelesen werden, wäre die Implementierung für mich besonders spannend.

Vielen Dank schon mal für Rückmeldungen.

Beste Grüße,

Gregor.

gregors
Beiträge: 3
Registriert: Mi 3. Jun 2020, 14:28

Re: VoltStorage SMART

Beitrag von gregors »

Hallo allerseits,

ich habe mich mal an der Implementierung des Voltstorage SMART-Systems versucht und es scheint soweit zu funktionieren. Ich habe keine nennenswerten PHP-Kenntnisse, weswegen der untenstehende Code möglicherweise die Augen schädigt. :lol:

Ich habe das nicht als eigenen Regler umgesetzt, sondern in die entsprechende Regler_math.php hineingepackt. Das erschien mir erstmal einfacher umzusetzen (wie gesagt - keine nennenswerte PHP-Erfahrung). Nachdem also der entsprechende PV-Regler via Skript ausgelesen wird, wird ja dann nach der "*_math.php" gesucht und diese ggf. ausgeführt. Hier muss also beiliegender Code rein, damit die Werte der Voltstorage SMART ausgelesen und in die influx-db geschrieben werden.

Ich hoffe, es hilft eventuellen Besitzern weiter ...

Viele Grüße,

Gregor

Code: Alles auswählen

#!/usr/bin/php
<?php
/*************************************************************
//                                       
//  Die Funktion callAPI wurde von
//  
//  https://weichie.com/blog/curl-api-calls-with-php/
//  
//  uebernommen.
//  Der Rest ist Trial and Error 
//
*************************************************************/

function callAPI($method, $url, $data){
   $curl = curl_init();
   switch ($method){
      case "POST":
         curl_setopt($curl, CURLOPT_POST, 1);
         if ($data)
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
         break;
      case "PUT":
         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
         if ($data)
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);			 					
         break;
      default:
         if ($data)
            $url = sprintf("%s?%s", $url, http_build_query($data));
   }
   // OPTIONS:
   curl_setopt($curl, CURLOPT_URL, $url);
   curl_setopt($curl, CURLOPT_HTTPHEADER, array(
      'APIKEY: 111111111111111111111',
      'Content-Type: application/json',
   ));
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
   // EXECUTE:
   $result = curl_exec($curl);
   if(!$result){die("Connection Failure");}
   curl_close($curl);
   return $result;
}

// hier folgend jetzt die Anmeldedaten der VoltStorage-App angeben. Die "validity" kann bleiben und gibt an, wie lange die Anmeldung aktiv bleibt (hier 50 Sekunden)
// Das Passwort steht hier im "Plain-Text". Das kann man sicherlich noch verbessern ... Wer will ... ;-)

$daten["email"] = "captain.picard@enterprise.starfleet";
$daten["password"] = "BeamMeUpScotty";
$daten["validity"] = "50";

// Hier wird das Login-token geholt, da die anderen Abfragen nur nach Authentifizierzung gehen

$make_call = callAPI('POST', 'https://api.voltstorage.com/rest/login/password', json_encode($daten));
$token = json_decode($make_call, true);  

// Jetzt wird die 'id' des VoltStorage-Systems geholt (hier des Ersten). Bei einem kaskadierten
// System mehrerer VoltStorage-Boxen muss das hier natuerlich angepasst werden
// Die id kann auch handisch gesetzt werden, da sie in der Voltstorage-App zu finden ist.

$get_product = callAPI('GET', 'https://api.voltstorage.com/rest/products', $token);
$response = json_decode($get_product, true);
$id = $response[0]['id'];

// Jetzt werden die aktuellen Daten ausgelesen ...

$current = callAPI('GET', 'https://api.voltstorage.com/rest/products/'.$id.'/data/latest', $token);

$response = json_decode($current, true);

// ... und verschiedenen Variablen zugeordnet

$Ladungszustand = $response["stateOfCharge"];
$PVLeistung = $response["photovoltaicPower"];
$Eigenverbrauch = $response["householdConsumption"];
$Netzbezug = $response["gridPower"];
$Ladeleistung = $response["powerElectronicsPower"];

// Ladungszustand und Ladeleistung werden umgerechnet und etwas gerundet
// Die Ladeleistung wird dabei noch invertiert, da VoltStorage hier eigentlich die "Entladeleistung" angibt.

$Ladungszustand = round($Ladungszustand*100, 2, PHP_ROUND_HALF_UP); // In Prozent umrechnen und runden
$Ladeleistung = round($Ladeleistung*-1,2,PHP_ROUND_HALF_UP);

// und zusaetzlich in influx abgespeichert (in der Measurement "VoltStorage"

$aktuelleDaten["ZusatzQuery"] = "VoltStorage  Ladezustand=".$Ladungszustand;
$aktuelleDaten["ZusatzQuery"] .=",Eigenverbrauch=".$Eigenverbrauch;
$aktuelleDaten["ZusatzQuery"] .=",Netzbezug=".$Netzbezug;
$aktuelleDaten["ZusatzQuery"] .=",Ladeleistung=".$Ladeleistung;
$aktuelleDaten["ZusatzQuery"] .=",GesamtPVLeistung=".$PVLeistung;
$aktuelleDaten["ZusatzQuery"] .= "   ".$aktuelleDaten["zentralerTimestamp"];

?>

Antworten