Mennekes Amtron Wallbox API auslesen

Die Mennekes Amtron Wallboxen mit Netzwerkanschluss sind in vielen Bereichen sehr verbreitet. Man sieht sie einzeln oder zu mehreren im privaten und gewerblichen Umfeld.

Kleinere Installationen sind meist nicht über ein zentrales Management oder eine Lastverwaltung zusammengeschaltet.

Die Boxen sind je nach Modell zudem mit verschiedenen Weboberflächen und APIs ausgestattet. Hierüber lassen sich die aktuellen Daten auslesen und auch z.B. über SmartHome Lösungen wie HomeAssistant oder iobroker einbinden.

In diesem Artikel habe ich einmal die Informationen der APIs der folgenden beiden Modelle zusammengestellt. Es sind REST- oder JSON-APIs vorhanden.

Amtron Xtra/Premium
mit Firmware Version 1.13
(„HCC3 SW Version“)

Amtron Professional
mit Firmware Version 5.22.3
(„Anwendungsversion“)

Optisch unterscheiden sich beide Modelle wenig bis gar nicht – die Weboberfläche und Software sind jedoch verschieden. Ebenso die API und Art der Daten und des Zugriffs.

Die jeweils aktuellste Firmware kann hier bezogen werden: https://www.mennekes.de/emobility/services/software-updates/

Mennekes Amtron Professional

Die Mennekes Amtron Professional benötigt dabei mindestens Firmware Version 5.13 ab der die REST-Schnittstelle verfügbar ist. Diese befindet sich dann im Webinterface unter „System“:

Zugriff erfolgt per HTTP auf die folgende URL:

http://IPADRESSE/rest/full_state

Die Daten werden als mit Doppelpunkt getrennte Wertpaare pro Zeile zurückgegeben.

conn_state:vehicle_charging_type2
auth_state:authorized_for_charging
auth_uid:XXXXXXXXXXXX
time_since_charging_start:7293
meter_wh:11558
power_w:10717
transaction_wh:2183
cp_id:xxxxxxxxxxx
ocpp_state:occupied
type2_state:c
type2_proximity:cable_attached
sig_current:16
schuko_state:idle
backend_conn_state:pending
free_charging:off
slave_state:
ocpp_meter_cfg:modbus_meter_nzr
ocpp_meter_serial:xxxxxxxxx
current_a:15.60,15.64,15.68
energy_man_current:16
ambient_temp:+18.00
firmware_ver:5.22.3-13380
cc_serial_n:xxxxxxx
con_cycles_schuko:0
con_cycles_type2:1191
max_current:32
rcmb_state:okay
rcmb_max_values: 0.6, 0.0
rcmb_current_values: 0.0, 0.0
cable_attached:on
schuko_cfg:disable
rcd_state:disable
mcb_type2_state:disable
mcb_schuko_state:disable
cp_vendor:MENNEKES
errors:no_errors
cp_model:CC612_2S0R
display_text:

Eine Beschreibung der einzelnen Parameter findet sich hier: https://office.elinc.de/dokumentation#rest_protokoll_parameternamen

Mennekes Amtron Xtra/Premium

Die Mennekes Amtron Xtra/Premium sollte dabei Firmware Version 1.13 haben. Sie lässt sich nicht „offiziell“ aktivieren, kann aber wie folgt genutzt werden.

Zugriff erfolgt per HTTP auf die folgende URL:

http://IPADRESSE:25000/MHCP/1.1/ChargeData?Pin=INSTALLATIONS-PIN

Benötigt wird die IP-Adresse der Box und die Installations-PIN (PIN3) aus dem Datenblatt der Box.

Die Rückgabe erfolgt im JSON-Format.

Damit überhaupt eine Rückgabe erfolgt muss es explizit ein HTTP GET-Request mit dem HTTP-Header „Accept: application/json“ für den Aufruf sein.

 
{
    "ChgState": "Idle",
    "Tariff": "T1",
    "Price": 280,
    "Uid": "XXXXXXXXXX",
    "ChgDuration": 5416,
    "ChgNrg": 4298,
    "NrgDemand": 5000,
    "Solar": 0,
    "EmTime": 1440,
    "RemTime": 1440,
    "ActPwr": 0,
    "ActCurr": 6,
    "MaxCurrT1": 6,
    "BeginH_T1": 4,
    "BeginM_T1": 30,
    "PriceT1": 280,
    "MaxCurrT2": 6,
    "BeginH_T2": 22,
    "BeginM_T2": 0,
    "PriceT2": 200,
    "RemoteCurr": 6,
    "SolarPrice": 0,
    "ExcessNrg": false,
    "TMaxCurrT1": 6,
    "TBeginH_T1": 4,
    "TBeginM_T1": 30,
    "TPriceT1": 280,
    "TMaxCurrT2": 6,
    "TBeginH_T2": 22,
    "TBeginM_T2": 0,
    "TPriceT2": 200,
    "TRemoteCurr": 6,
    "TSolarPrice": 0,
    "TExcessNrg": true,
    "HCCP": "A11"
}

Eine Beschreibung der einzelnen Parameter findet sich hier: https://github.com/orlopau/amtron/blob/master/docs/api/ChargeData/get.md

Beispiel PHP-Code zum Abruf

Um die Daten einer oder mehrere Boxen abzurufen und z.B. als im Webfrontend grafisch darzustellen (wie im ersten Screenshot) oder anderweitig als Quelle für SmartHome, etc. bereitzustellen kann die folgende PHP-Funktion genutzt werden.

Anpassung entsprechend der Anforderungen natürlich ggf. erforderlich. – Lediglich als einfaches PoC / Beispiel:

function getMennekesWallboxData($IP, $TYPE, $PIN=null) {

$WallboxCurl = curl_init();
curl_setopt($WallboxCurl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($WallboxCurl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($WallboxCurl, CURLOPT_VERBOSE, 0);
curl_setopt($WallboxCurl, CURLOPT_HTTPHEADER, array('Accept: application/json'));
curl_setopt($WallboxCurl, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($WallboxCurl, CURLOPT_TIMEOUT, 5);

if($TYPE == "A") { // Mennekes Amtron Xtra/Premium
//
// Doku: https://github.com/orlopau/amtron/blob/master/docs/api/ChargeData/get.md
//
curl_setopt($WallboxCurl, CURLOPT_URL, "http://" . $IP . ":25000/MHCP/1.1/ChargeData?Pin=" . $PIN);
curl_setopt($WallboxCurl, CURLOPT_CUSTOMREQUEST, 'GET');
$WallboxResult = json_decode(curl_exec($WallboxCurl), true);

$WallboxResult['CUSTOM_ChipID'] = $WallboxResult['Uid'];
$WallboxResult['CUSTOM_Geschwindigkeit'] = round($WallboxResult['ActPwr']/1000,1);
$WallboxResult['CUSTOM_Lademenge'] = round($WallboxResult['ChgNrg']/1000,1);
$WallboxResult['CUSTOM_Ladezeit'] = round($WallboxResult['ChgDuration']/60,0);

switch($WallboxResult['ChgState']) {
case "Idle":
$WallboxResult['CUSTOM_Status'] = "frei";
break;
case "Charging":
$WallboxResult['CUSTOM_Status'] = "lädt";
break;
case "Paused":
case "StandbyConnect":
case "StandbyAuthorize":
case "Terminated":
$WallboxResult['CUSTOM_Status'] = "inaktiv";
break;
}

} elseif($TYPE == "B") { // Mennekes Amtron Professional
//
// Doku: https://office.elinc.de/dokumentation#rest_protokoll_parameternamen
//
curl_setopt($WallboxCurl, CURLOPT_URL, "http://" . $IP . "/rest/full_state");
$WallboxResult = strtoarr(curl_exec($WallboxCurl));

$WallboxResult['CUSTOM_ChipID'] = $WallboxResult['auth_uid'];
$WallboxResult['CUSTOM_Geschwindigkeit'] = round($WallboxResult['power_w']/1000,1);
$WallboxResult['CUSTOM_Lademenge'] = round($WallboxResult['transaction_wh']/1000,1);
$WallboxResult['CUSTOM_Ladezeit'] = round($WallboxResult['time_since_charging_start']/60,0);

switch($WallboxResult['conn_state']) {
case "no_vehicle_connected":
$WallboxResult['CUSTOM_Status'] = "frei";
break;
case "vehicle_charging_schuko":
case "vehicle_charging_type2":
$WallboxResult['CUSTOM_Status'] = "lädt";
break;
case "vehicle_connected_schuko":
case "vehicle_connected_type2":
case "vehicle_connector_error":
$WallboxResult['CUSTOM_Status'] = "inaktiv";
break;
}

}

curl_close($WallboxCurl);

return $WallboxResult;
}

function strtoarr($str) {
$wbarray = array();
foreach(explode("\n", $str) as $line) {
$wbarray[explode(":", $line)[0]] = explode(":", $line)[1];
}
return $wbarray;
}