Wallboxen werden ja momentan wurden gefördert und da sowieso früher oder später der Kauf eines Elektroautos (BEV) ansteht, hatte ich mir mal so eine unter's Carport schrauben lassen.

Die Wallbox muss als Förderbedingung eine "intelligente Steuerung" haben, wofür wohl eine API ausreicht.
Wie sieht diese bei der Wallbe Eco 2.0s aus?

Die Wallbox kann via TCP per Modbus gesteuert und abgefragt werden. Da ist allerdings ersteinmal schwer ran zu kommen, da DHCP standardmäßig deaktiviert ist und sie eine selbst vergebene IP hat.

Auf einer Seite lese ich die Info "Die Firma Wallbe bietet nur Servicepartnern den Zugriff auf das Webinterface und auf die Einstellungen via Modbus. Privatkunden ist dieser Weg ausdrücklich versperrt. Solltet ihr die folgenden Einstellungen verwenden und/oder ändern, verliert ihr gegebenenfalls die Garantie."
...was etwas seltsam ist, wenn man sie ja intelligent steuern können soll...hmmm...

Das Arbeiten an elektrischen Anlagen darf nur von entsprechendem Fachpersonal ausgeführt werden.
Das Arbeiten mit Strom ist lebensgefährlich!

Netzwerk

Pfeift man auf diesen Passus, heißt es ersteinmal, den Computer mit einem Netzwerkkabel direkt anzustöpseln, ihm manuell eine IP im 192.168.0.x-Netz und der Teilnetzmaske 255.255.255.0 zuzuweisen und dann im Browser die IP 192.168.0.5 aufzurufen. Passwort ist wallbe7213

Unter "Network" nun DHCP aktivieren und mit "Submit" speichern.
Ggf. muss die Box ersteinmal neu gestartet werden.

Nun die Wallbox mit dem Router statt dem Computer verbinden.
Und bevor man den Deckel wieder schließt, den DIP-Schalter Nummer 10 auf "ON" schalten – nur dann kann man auch per Modbus die Ladefreigabe schalten.

PHP-Skript

Ich greife hierbei auf die phpmodbus-Library zurück, wobei hier nur das in phpmodbus-master enthaltene Unter-Verzeichnis Phpmodbus benötigt wird.
Dieses Verzeichnis ins selbe Verzeichnis folgende Test-Datei legen:

wallbe.php
<?php

require_once 'Phpmodbus/ModbusMaster.php';

$modbus = new ModbusMaster("192.168.178.99", "TCP"); // Hier die korrekte IP-Adresse eintragen

try {
       
        // Modul-ID ist immer 255
       
        //
        // Abfragen
        //
       
        // Status abfragen: Register 100
        // A    Ladestation frei / Kein Ladekabel angeschlossen
        // B    Ladestation belegt / Ladekabel angeschlossen
        // C+D  Ladestation belegt / Autorisierung erfolgt/Fahrzeug la&#776;dt
        // E/F  Sto&#776;rung / Sto&#776;rungSammelfehler Error Codes (Status F nur bei online Stationen oder Ansteuerung u&#776;ber einen Eingang)
        $status = $modbus->readMultipleRegisters(255, 100, 1);
        echo("Status " . chr($status[1]));
       
        // Fehlercodes: Register 107
        // 1. Kabelabweisung 13A und 20A
        // 2. Kabelabweisung 13 A
        // 3. Ungu&#776;ltiger PP-Wert
        // 4. Ungu&#776;ltiger CP-Wert
        // 5. Status F wegen fehlender Verfu&#776;gbarkeit der Ladestation
        // 6. Verriegelungsfehler
        // 7. Entriegelungsfehler
        // 8. LD ist wa&#776;hrend Verriegelung abgefallen
        // 9. U&#776;berstromabschaltung
        // 10. Kommunikationsproblem mit Energiemeter
        // 11. Status D, Fahrzeug abgewiesen
        // 12. Schu&#776;tzfehler erkannt
        // 13. Fahrzeugseitig keine Diode im Control Pilot Kreis
        // 14. Reserved
        // 15. DC Fehlerstrom detektiert
        // 16. Master-Slave Kommunikationsfehler
        if (chr($status[1]) == "E" || chr($status[1]) == "F") {
                $recData = $modbus->readMultipleRegisters(255, 107, 1);
                echo "</br>Fehler:</br>";
                var_dump($recData);
                }

        // Ladestatus abfragen: Register 400
        $recData = $modbus->readCoils(255, 400, 1);
        echo "</br>Ladestatus:</br>";
        var_dump($recData);

        // Ladedauer abfragen (in Sekunden): Register 102
        $recData = $modbus->readMultipleRegisters(255, 102, 1);
        echo "</br>Ladedauer:</br>";
        var_dump($recData);
       
        // Ladestrom abfragen  (160 => 16 A): Register 528
        $recData = $modbus->readMultipleRegisters(255, 528, 1);
        echo "</br>Ladestrom:</br>";
        var_dump($recData);
       
        // Aktueller (tatsächlicher) Ladestrom abfragen  (160 => 16 A): Register 300
        $recData = $modbus->readMultipleRegisters(255, 300, 1);
        echo "</br>Aktueller Ladestrom:</br>";
        var_dump($recData);

        //
        // Senden
        //
       
        // Laden an/aus schalten: Register 400
        $modbus->writeMultipleCoils(255, 400, array(true)); // an
        $modbus->writeMultipleCoils(255, 400, array(false)); // aus
       
        // Ladestrom ändern/begrenzen: Register 528
        $modbus->writeMultipleRegister(255, 528, array(160), array("INT"));  // Auf max. 16A setzen

} catch (Exception $e) {
    // Print error information if any
    echo $modbus;
    echo $e;
    exit;
    }

Mangels eines eigenen BEV konnte ich meine Skripte hier noch nicht weiterspinnen. Immerhin konnte ich erfolgreich Daten abgreifen und ändern, als das BEV eines Freundes an der Station hing.

Weitere Hilfsquellen

Die meisten Infos, wie man die Wallbox ins Netzwerk bekommt (mit der Info, dass DHCP nicht standardmäßig eingeschaltet ist) und eine Übersicht aller vorhandenen Modbus-Register habe ich im Loxwiki gefunden.

Sehr interessant ist die herunterladbare wallbe Modbus TCP Dokumentation am Ende des Artikels.