Hier mal die "rudimentäre" API-Doku, obgleich ich für mich nun den Weg gegangen bin, die Steuerung der WB über EVCC zu machen.
https://github.com/OpenEMS/openems/blob ... ia_api.pdf
Hardy Barth echarge cpμ2 pro
Moderator: Ulrich
- mdkeil
- Beiträge: 438
- Registriert: So 12. Sep 2021, 20:40
- Hat sich bedankt: 11 Mal
- Danksagung erhalten: 24 Mal
Re: Hardy Barth echarge cpμ2 pro
IBN: 07/2021
Fronius Symo : 13.2kWp S 45° + 3.96 kWp S 15°
Fronius Primo : 2.97 kWp N 15°
Speicher: 14,3 kWh LiFePO4 (EEL) + Seplos BMS @ Victron MP-II 48/5000
Wallbox: 11kW echarge Hardy Barth Cpμ2 Pro
######
Tibber-Invite (100% Öko-Strom + 50€ Bonus)
Fronius Symo : 13.2kWp S 45° + 3.96 kWp S 15°
Fronius Primo : 2.97 kWp N 15°
Speicher: 14,3 kWh LiFePO4 (EEL) + Seplos BMS @ Victron MP-II 48/5000
Wallbox: 11kW echarge Hardy Barth Cpμ2 Pro
######
Tibber-Invite (100% Öko-Strom + 50€ Bonus)
Re: Hardy Barth echarge cpμ2 pro
Hallo,
da ich von Solaranzeige überzeugt bin und aber eine Hardy cpµ2 pro Wallbox habe, mache ich hier weiter. Die Schnittstelle von µ2 pro ist wie Ulrich schon vermutet hat etwas anderes. Deswegen habe ich das Daten einlesen in den hardy_barth_math.php ausgelagert.
Mit dem $aktuelleDaten["StateID"] bin ich immer noch am basteln. Mir ist noch nicht klar wofür das ist.
Die Steuerung muss auch angepasst werden. Danke an mdkeil für die Doku.
In hardy_barth.php ab Zeile 179
Die Befehle für die Wallbox sind:
Set manual mode:
curl -X PUT -d ’{“salia/chargemode“:“manual“}’ http://169.254.12.53/api/secc
Set charging current to 10 A:
curl -X PUT -d '{"grid_current_limit":"10"}' http://169.254.12.53/api/secc
Send heartbeat (< 60 sec interval):
curl -X PUT -d ’{“salia/heartbeat“:“alive“}’ http://169.254.12.53/api/secc
Stop charging:
curl -X PUT -d '{"grid_current_limit":"0"}' http://169.254.12.53/api/secc
nun jetzt meine Frage:
weiß jemand wofür heartbeat ist? Muss man alle 60 sec so ein Befehl an die Wallbox senden dass die aktiv bleib?
Ich vermisse auch den Startbefehl. Ist es mit set charging current xA gemeint?
Gruß
epuran
da ich von Solaranzeige überzeugt bin und aber eine Hardy cpµ2 pro Wallbox habe, mache ich hier weiter. Die Schnittstelle von µ2 pro ist wie Ulrich schon vermutet hat etwas anderes. Deswegen habe ich das Daten einlesen in den hardy_barth_math.php ausgelagert.
Code: Alles auswählen
<?php
/******************************************************************************
// Hie können eigene Berechnungen gemacht werden, wenn das nötig ist.
// Es stehen alle Felder folgender Measurements zur Verfügung:
// Laderegler ==> Measurement 'PV' -> Array $LRVar
// Wechselrichter ==> Measurement 'AC' -> Array $WRVar
// SmartMeter ==> Measurement 'AC' -> Array $MeterVar
// BMS ==> Measurement 'Batterie' -> Array $BMSVar
//
// Die Steuerung benötigt folgende Variablen, die man hier noch beeinflussen
// kann. Bitte hier nur benutzen, wenn man sie auch anders berechnen möchte.
// Ansonsten hier nicht benutzen.
//
//
// $PVLeistung = erzeugte Solarleistung in Watt
// $ACLeistung = erzeugte Wechselstrom Leistung in Watt
// $Bezug = aktuell bezogene Gesamtleistung in Watt
// $Einspeisung = aktuelle Einspeisung in Watt
// $SOC = aktuelle Kapazität in Prozent. 0 - 100%
//
// $aWATTar["Preis_kWh"] = Preis positiv oder negativ
// $aWATTar["Sortierung"] = Sortireung der aktuellen 12 Stunden 1 - 12
// 1 = schlechtester und 12 = bester Preis
//
// Beschreibung dieses Array's ist in dem Dokument Automation.pdf
// $UserKontaktAuswertung["Relais1"]["Kontakt1"] = 0 / 1 0 = OFF / AUS
// $UserKontaktAuswertung["Relais2"]["Kontakt2"] = 0 / 1 1 = ON / EIN
// usw.
******************************************************************************/
// Status:
// A = Ready
// B = Ladung aktiv
// C = Fehler
// D = Fehler
// Kein Strom
if ( $Daten["device"]["modelname"] == "Salia PLCC Slave" ) {
$funktionen->log_schreiben( "------------- bin SALIA slave --------------------- ", "|--", 8 );
$aktuelleDaten["Name"] = $Daten["device"]["modelname"];
$aktuelleDaten["wbsaldoactive"] = 0;
$aktuelleDaten["Wh_Leistung_aktuell"] = (int)$Daten["secc"]["port0"]["metering"]["power"]["active_total"]["actual"];
$aktuelleDaten["Wh_Gesamtleistung"] = (int)$Daten["secc"]["port0"]["metering"]["energy"]["active_total"]["actual"];
$aktuelleDaten["Leistungsfaktor"] = 0;
$aktuelleDaten["Leistung_R"] = (int)$Daten["secc"]["port0"]["metering"]["power"]["active"]["ac"]["l1"]["actual"];
$aktuelleDaten["Strom_R"] = (int)$Daten["secc"]["port0"]["metering"]["current"]["ac"]["l1"]["actual"];
if ( $aktuelleDaten["Strom_R"] <> 0 ){
$aktuelleDaten["Strom_R"] = $aktuelleDaten["Strom_R"]/100;
}
$aktuelleDaten["Spannung_R"] = 230;
$aktuelleDaten["Leistungsfaktor_R"] = 0;
$aktuelleDaten["Leistung_S"] = (int)$Daten["secc"]["port0"]["metering"]["power"]["active"]["ac"]["l2"]["actual"];
$aktuelleDaten["Strom_S"] = (int)$Daten["secc"]["port0"]["metering"]["current"]["ac"]["l2"]["actual"];
if ( $aktuelleDaten["Strom_S"] <> 0 ){
$aktuelleDaten["Strom_S"] = $aktuelleDaten["Strom_S"]/100;
}
$aktuelleDaten["Spannung_S"] = 230;
$aktuelleDaten["Leistungsfaktor_S"] = 0;
$aktuelleDaten["Leistung_T"] = (int)$Daten["secc"]["port0"]["metering"]["power"]["active"]["ac"]["l3"]["actual"];
$aktuelleDaten["Strom_T"] = (int)$Daten["secc"]["port0"]["metering"]["current"]["ac"]["l3"]["actual"];
if ( $aktuelleDaten["Strom_T"] <> 0 ){
$aktuelleDaten["Strom_T"] = $aktuelleDaten["Strom_T"]/100;
}
$aktuelleDaten["Spannung_T"] = 230;
$aktuelleDaten["Leistungsfaktor_T"] = 0;
$aktuelleDaten["Seriennummer"] = $Daten["device"]["serial"];
$aktuelleDaten["Protokoll-Version"] = $Daten["device"]["software_version"];
$aktuelleDaten["Mode"] = $Daten["secc"]["port0"]["charging"];
$aktuelleDaten["LadungAmpere"] = ($aktuelleDaten["Strom_R"] + $aktuelleDaten["Strom_S"] + $aktuelleDaten["Strom_T"]);
$aktuelleDaten["Status"] = $Daten["secc"]["port0"]["ci"]["charge"]["cp"]["status"];
$aktuelleDaten["AmpereVorgabe"] = $Daten["secc"]["port0"]["ci"]["evse"]["basic"]["grid_current_limit"]["actual"];
$aktuelleDaten["MaxAmpere"] = $Daten["secc"]["port0"]["ci"]["evse"]["basic"]["offered_current_limit"];
$aktuelleDaten["Anz_Phasen"] = $Daten["secc"]["port0"]["ci"]["evse"]["basic"]["phase_count"];
$aktuelleDaten["Hersteller"] = $Daten["device"]["modelname"];
$aktuelleDaten["ModeID"] = 0;
$funktionen->log_schreiben( "------------- ist B ------------------ ".$Daten["secc"]["port0"]["ci"]["charge"]["cp"]["status"], "|--", 8 );
if ($Daten["secc"]["port0"]["ci"]["charge"]["cp"]["status"] == "B"){
$aktuelleDaten["StateID"] = 0;
}
elseif ($Daten["secc"]["port0"]["ci"]["charge"]["cp"]["status"] == "C") {
$aktuelleDaten["StateID"] = 3;
}
else {
$aktuelleDaten["StateID"] = $Daten["secc"]["port0"]["plug_lock"]["state"]["actual"];
}
if ($Daten["secc"]["port0"]["ci"]["charge"]["plug"]["status"] == "locked") {
$aktuelleDaten["Connected"] = 1;
}
else {
$aktuelleDaten["Connected"] = 0;
}
$aktuelleDaten["PVMode"] = $Daten["secc"]["port0"]["salia"]["chargemode"];
}
return;
?>
Die Steuerung muss auch angepasst werden. Danke an mdkeil für die Doku.
In hardy_barth.php ab Zeile 179
Code: Alles auswählen
// Auf "manual" Mode umschalten! Damit Befehle entgegemngenommen werden.
// $http_daten = array("URL" => "http://".$WR_IP."/api/v1/pvmode", "Port" => $WR_Port, "Header" => array('Content-Type: application/x-www-form-urlencoded', 'Accept: application/json'), "Data" => "pvmode=manual");
$http_daten = array("URL" => "http://".$WR_IP."/api/secc", "Port" => $WR_Port, "Header" => array('Content-Type: application/x-www-form-urlencoded', 'Accept: application/json'), "Data" => "{\"salia/chargemode\":\"manual\"}");
$Daten = $funktionen->http_read( $http_daten );
$funktionen->log_schreiben( "Wallbox auf PVMode = manual umschalten".$http_daten, " ", 1 );
// Hier wird der Befehl gesendet...
// -----------------------------------------------------
// $Teile[0] , $Teile[1]
if ($Teile[0] == "start") {
// $http_daten = array("URL" => "http://".$WR_IP."/api/v1/chargecontrols/".$WBID."/start", "Port" => $WR_Port, "Header" => array('Content-Type: application/json', 'Accept: application/json', 'Content-length: 0'), "Data" => "");
$http_daten = array("URL" => "http://".$WR_IP."/api/secc", "Port" => $WR_Port, "Header" => array('Content-Type: application/json', 'Accept: application/json'), "Data" => "{\"grid_current_limit\":\"6\"}");
$Daten = $funktionen->http_read( $http_daten );
if (isset($Daten["errors"]["message"])) {
$funktionen->log_schreiben( "Fehler!: ".$Daten["errors"]["message"], " ", 1 );
}
$funktionen->log_schreiben( "Wallbox: Ladung gestartet.", " ", 7 );
}
elseif ($Teile[0] == "stop") {
// $http_daten = array("URL" => "http://".$WR_IP."/api/v1/chargecontrols/".$WBID."/stop", "Port" => $WR_Port, "Header" => array('Content-Type: application/json', 'Accept: application/json', 'Content-length: 0'), "Data" => "");
$http_daten = array("URL" => "http://".$WR_IP."/api/secc", "Port" => $WR_Port, "Header" => array('Content-Type: application/json', 'Accept: application/json'), "Data" => "{\"grid_current_limit\":\"0\"}");
$Daten = $funktionen->http_read( $http_daten );
if (isset($Daten["errors"]["message"])) {
$funktionen->log_schreiben( "Fehler!: ".$Daten["errors"]["message"], " ", 1 );
}
$funktionen->log_schreiben( "Wallbox: Ladung unterbrochen.", " ", 7 );
}
elseif ($Teile[0] == "ampere") {
// $http_daten = array("URL" => "http://".$WR_IP."/api/v1/pvmode/manual/ampere", "Port" => $WR_Port, "Header" => array('Content-Type: application/x-www-form-urlencoded', 'Accept: application/json'), "Data" => "manualmodeamp=".$Teile[1]);
$http_daten = array("URL" => "http://".$WR_IP."/api/secc", "Port" => $WR_Port, "Header" => array('Content-Type: application/json', 'Accept: application/json'), "Data" => "{\"grid_current_limit\":\"".$Teile[1]."\"}");
$Daten = $funktionen->http_read( $http_daten );
$funktionen->log_schreiben( "Wallbox: Stromstärke eingestellt auf ".$Teile[1]." Ampere", " ", 7 );
}
// -----------------------------------------------------
Set manual mode:
curl -X PUT -d ’{“salia/chargemode“:“manual“}’ http://169.254.12.53/api/secc
Set charging current to 10 A:
curl -X PUT -d '{"grid_current_limit":"10"}' http://169.254.12.53/api/secc
Send heartbeat (< 60 sec interval):
curl -X PUT -d ’{“salia/heartbeat“:“alive“}’ http://169.254.12.53/api/secc
Stop charging:
curl -X PUT -d '{"grid_current_limit":"0"}' http://169.254.12.53/api/secc
nun jetzt meine Frage:
weiß jemand wofür heartbeat ist? Muss man alle 60 sec so ein Befehl an die Wallbox senden dass die aktiv bleib?
Ich vermisse auch den Startbefehl. Ist es mit set charging current xA gemeint?
Gruß
epuran
Sungrow SG10.0RT: 9,6kwp
Sungrow SH8.0RT: SBR096
-----------------------
Wallbox Hardy Barth cpμ2 pro
Sungrow SH8.0RT: SBR096
-----------------------
Wallbox Hardy Barth cpμ2 pro