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; }