So installiere ich EOS von Andreas Schmitz 🛠️🚀

IM EINSATZ?

Dann schau dir UNSEREN LOXKURS an und profitiere von unserem Wissen!

Eine gefühlte Ewigkeit ist es her, dass Andreas, Leo und ich versucht haben EOS bei mir zum Laufen zu bekommen. In der Zwischenzeit ist viel passiert und nun möchte ich nach acht langen Monaten wieder einmal den Versuch unternehmen das nun komplett erweiterte Energie-Optimierungs-System produktiv in meinem Zuhause einzusetzen.

Den aktuellen Umsetzungsstand inkl. aller Dateien zum Download findet ihr in nachfolgendem Blogpost bzw. Video.

YouTube

Mit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von YouTube.
Mehr erfahren

Video laden

YouTube-Direktlink

Links/Code aus dem Video

Andreas Schmitz – Jörg installiert mein EnergieOptimierungsSystem 🤓

EOS auf Github (externer Link)

EOS Wiki (externer Link)

Download: EOS.config.json (193 Downloads )

Download: EOS NodeRed Flows v1 (107 Downloads )

Debian Image:
https://debian-cd.repulsive.eu/12.11.0/amd64/iso-cd/debian-12.11.0-amd64-netinst.iso

ssh jay@192.168.3.236
ssh-keygen -R 192.168.3.236

Im Proxmox-Termial mit dem root-User:

apt install sudo
usermod -aG sudo jay

Wieder im „normalen“ Terminal mit dem jay-User:

sudo apt update && sudo apt upgrade -y
sudo apt install -y git python3 python3-venv python3-pip
cd ~
git clone https://github.com/Akkudoktor-EOS/EOS.git
cd EOS
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
pip install -e .
mkdir -p config
source .venv/bin/activate
python /home/jay/EOS/src/akkudoktoreos/server/eos.py --host 0.0.0.0 --port 8503

http://192.168.3.236:8503/docs

http://192.168.3.236:8503/v1/config

http://192.168.3.236:8504

sudo tee /etc/systemd/system/eos.service > /dev/null << 'EOF'
[Unit]
Description=EOS Energy Optimization Server
After=network.target

[Service]
Type=simple
User=jay
WorkingDirectory=/home/jay/EOS
Environment=EOS_DIR=/home/jay/EOS/config
ExecStart=/home/jay/EOS/.venv/bin/python /home/jay/EOS/src/akkudoktoreos/server/eos.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable eos.service
sudo systemctl start eos.service
systemctl status eos.service
sudo apt install -y build-essential curl
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
sudo systemctl enable nodered.service

http://192.168.3.236:1880

EOS UPDATE DURCHFÜHREN:
cd ~/EOS
git fetch
git status -uno
sudo systemctl stop eos.service
git pull origin main
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
pip install -e .
sudo systemctl start eos.service

https://akkudoktor-eos.readthedocs.io/en/latest/akkudoktoreos/configuration.html#full-example-config

nano /home/jay/EOS/config/EOS.config.json

Installation unter Docker

UPDATE VOM 28.05.2025:

Aufgrund der hohen Nachfrage in den YT-Kommentaren nachfolgend alle relevanten Installationsschritt, um EOS und NodeRED unter Docker zum Laufen zu bringen. Bisher nicht von mir getestet, hinterlasst gerne einen Kommentar, sofern es klemmt…

# 1. Auf dem Ziel-Linux-System per ssh anmelden
ssh user@dein-server

# 2. System updaten
sudo apt update && sudo apt upgrade -y

# 3. Basis-Tools installieren
sudo apt install -y \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg \
  lsb-release

# 4. Docker-GPG-Key und Debian-Repo einrichten
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) \
  signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/debian \
  bookworm stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 5. Docker Engine, CLI, Containerd und Compose-Plugin installieren
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 6. Deinen Nutzer zur Docker-Gruppe hinzufügen und Gruppe neu laden
sudo usermod -aG docker $USER
newgrp docker

# 7. Arbeitsverzeichnis für EOS und Node-RED anlegen
mkdir -p ~/eos_nodered/eos-config ~/eos_nodered/nodered_data
cd ~/eos_nodered

# 8. Rechte für Node-RED-Datenverzeichnis setzen
#    Node-RED im Container läuft als UID 1000
sudo chown -R 1000:1000 ./nodered_data
sudo chmod -R 755   ./nodered_data

# 9. docker-compose.yml erzeugen
cat > docker-compose.yml << 'EOF'
version: "3.9"
services:
  eos:
    image: akkudoktor/eos:latest
    container_name: eos
    restart: unless-stopped
    ports:
      - "8503:8503"
      - "8504:8504"
    volumes:
      - ./eos-config:/opt/eos/config
    environment:
      - EOS_DIR=/opt/eos/config

  node-red:
    image: nodered/node-red:latest
    container_name: nodered
    restart: unless-stopped
    ports:
      - "1880:1880"
    volumes:
      - ./nodered_data:/data
EOF

# 10. Container starten
docker compose up -d

# 11. Docker beim Boot aktivieren
sudo systemctl enable docker

# 12. Kontrolle: laufende Container und Port-Mapping prüfen
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

Fertig. Bei Fragen einfach die Kommentarfunktion nutzen…

UPDATE ENDE

15 Kommentare
  1. Möchtest du nicht noch eine kurze Zusammenfassung dazu schreiben? Ich habe Loxone und würde gerne wissen, was jetzt genau der Vorteil von EOS ist. Und eine Visualisierung dazu gibt es ja auch nicht…

    1. Gerade auch schon auf YT geschrieben auf fast die selbe Frage:

      EOS basiert auf einem Optimierungsalgorithmus, der ALLE relevanten In- und Outputs gleichzeitig beachtet. Und das unter Berücksichtigung ALLER bereitgestellter Prognosedaten (PV, Wetter, Börsenpreise) und ALLER steuerbaren Devices (E-Auto, Batteriespeicher, Wärmepumpe, whatever).

      Loxone hingegeben „optimiert“ bspw. einzelne Komponenten, sieht aber nicht das „große Ganze“. Beispiel: Der Spotpreisoptimierer sagt dir bspw, welche 5 Stunden im Vorschauhorizont am günstigsten sind. Daraus kann man dann evtl. ableiten, dass es in diesen Stunden am günstigsten ist das E-Auto zu laden – sofern man einen flexiblen Strompreis (ala Tibber) hat. Aber ob jetzt 2, 3, 4 oder 5 Stunden notwendig sind, um das E-Auto zu laden (abhängig von aktuellen SoC), sagt dir Loxone nicht. Und inwiefern es jetzt sinnvoll ist den Batteriespeicher mit günstigem Netzstrom zu laden in den Niedrigpreisstunden unter Berücksichtigung der PV-Prognose der nächsten Tage, kann dir Loxone auch nicht beantworten. Oder evtl. schon, wenn man selbst Logik dazubaut. Aber das „übergreifend“ zu sehen in Kombination E-Auto, Batteriespeicher und dann evtl. noch Wärmepumpe und prognoseseitig mit Temperatur, erwartbarem PV-Ertrag etc. – puh, ich wüsste nicht, wie man das in Loxone umsetzen sollte…

      Hoffe damit ist es etwas klarer geworden.

      Viele Grüße
      Jörg

      PS: Und ja, eine Visualisierung fehlt (noch) bei EOS. Wer die aktuell braucht, muss sich selbst was „stricken“…

  2. Hallo Jörg,

    Vielen Dank für das super tolle Video.

    Ich nutze EOS seit ca. 6 Monaten und bin mit der Steuerung sehr zufrieden. Insbesondere in der dunklen Jahreszeit hat sich das Steuern des Akkus in Verbindung mit einem dynamischen Stromtarif gelohnt.
    EOS ist in meinen Augen geeignet für den größeren Rahmen, also der Steuerung im Stundentakt.
    Für die Ansteuerung eines PV-Heizstabs, der ausgeschaltet werden soll, wenn eine Wolke vorbeizieht, ist es meiner Meinung nach nicht geeignet.

    Da ich selbst ein Multiplus von Victron im Einsatz habe, nutze ich Node-Red auf dem Venus-Pi direkt.

    Gefüttert wird EOS mit den Prognosedaten vom VRM-Portal. Vor allem die Gesamtlastprognose, die PV-Prognose und die zukünftige Strompreise sind notwendig. In deinem Video hattest du für die zukünftige Gesamtlast noch keine Werte. Diese brauchst du jedoch zwingend um sinnvolle Ergebnisse zu erhalten.
    EOS kann hierbei mit dem Standartlastprofil und dem Jahresverbrauch aushelfen.

    Mit dem Output vom EOS steuere ich die Lade- und Entladeleistung des Multiplus. Für das Netzseitige Aufladen stelle ich einen Timer mit Ziel-SOC, so wie es DSS von Victron es auch tun würde. Mit der Steuerung der Einspeiseleisung habe ich mich nicht beschäftigt.

    Bei mir genügt es die Werte einmal je Stunde von EOS optimieren zu lassen.
    Die ersten Lösungen zeigen noch größere Unterschiede, danach ändern sich die Lösungen entsprechend der Inputdaten nur minimal.

    Bei Interesse lasse ich Dir gern meinen Flow zukommen.

    Gruß
    Torsten

    1. Hi Torsten,
      vielen lieben Dank für deinen Input! 😍
      Den NodeRED-Flow gerne per Mail schicken an: joerg@meintechblog.de

      Ich schreib dich auch einfach mal direkt per Mail an, evtl. hast du ja Bock mir das mal alles in ner Teams-Session noch genauer zu zeigen. Hab zig unbeantwortete Fragen aktuell, bei denen du mir vermutlich „instant“ weiterhelfen könntest.

      Viele Grüße und bis bald
      Jörg

    2. Hallo Martin
      Ich denke so eine Konstellation mit Victron Nodered haben hier viele und wären an dem flow interessiert. Ich habe hier auch zB den solcast flow den Jörg benutzt. Vielleicht mal in einem deep dive mit Jörg vorstellen?
      VG
      Ulf

  3. Hallo Jörg,
    vielen Dank für das Video. Leider hilft es nicht bei meinem Problem.
    Gibt es ein Forum in dem dieses Programm behandelt wird? Im Akkudokterforum bekomme ich keine Antworten.
    Ich installiere EOS auf meinem Laptop mit Linux Mint 21.1.
    Ab dem Befehl „source ~/.venv/bin/activate“ kommen Fehler.

    „source ~/.venv/bin/activate“ – Datei oder Verzeichnis nicht gefunden

    „python3.12 /home/martin/EOS/src/akkudoktoreos/server/eos.py“ – „Traceback (most recent call last):
    File „/home/martin/EOS/src/akkudoktoreos/server/eos.py“, line 56, in
    config_eos = get_config()
    ^^^^^^^^^^^^
    File „/home/martin/EOS/src/akkudoktoreos/config/config.py“, line 525, in get_config
    return ConfigEOS()
    ^^^^^^^^^^^
    File „/home/martin/EOS/src/akkudoktoreos/config/config.py“, line 375, in __init__
    self._setup(self, *args, **kwargs)
    File „/home/martin/EOS/src/akkudoktoreos/config/config.py“, line 382, in _setup
    SettingsEOSDefaults.__init__(self, *args, **kwargs)
    File „/home/martin/EOS/.venv/lib/python3.12/site-packages/pydantic_settings/main.py“, line 176, in __init__
    super().__init__(
    File „/home/martin/EOS/.venv/lib/python3.12/site-packages/pydantic/main.py“, line 253, in __init__
    validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    pydantic_core._pydantic_core.ValidationError: 111 validation errors for ConfigEOS
    config_file_path
    Extra inputs are not permitted [type=extra_forbidden, input_value=None, input_type=NoneType]
    For further information visit https://errors.pydantic.dev/2.11/v/extra_forbidden“

    So geht es dann noch weiter.
    Ich hatte das Programm vor einiger Zeit schon einmal auf diesem Rechner mit Erfolg installiert, vielleicht beißt sich da was.

    Grüße Matrin
    „martindienert“ im Akkudoktorforum

    1. Hi Martin,
      versuchs mal hiermit:

      Virtuelles Environment (venv) anlegen und aktivieren

      cd /home/martin/EOS
      python3.12 -m venv .venv
      .venv/bin/pip install -r requirements.txt
      .venv/bin/pip install -e .
      source .venv/bin/activate # oder: . .venv/bin/activate
      python src/akkudoktoreos/server/eos.py

      Pydantic ValidationError („extra_forbidden“) beheben

      .env bereinigen/umbenennen: In /home/martin/EOS/.env die Zeile mit config_file_path löschen oder Datei in .env.disabled umbenennen

      Umgebungsvariable entfernen: unset config_file_path

      Eigenes Config-Verzeichnis verwenden:

      export EOS_DIR=/home/martin/EOS/config
      mkdir -p „$EOS_DIR“
      cp default.config.json „$EOS_DIR/EOS.config.json“

      Viele Grüße und Erfolg
      Jörg

  4. Danke für deine Hilfe. Es war die fehlende Umgebungsvariable „EOS_DIR“.
    Ich finde keine default.config.json und habe erst einmal die Full example Config genommen.
    Nun funktioniert es erst einmal. 🙂

    1. Perfekt. Ja eine default.config.json gibt es wohl nicht mehr. Da ist die Dokumentation u.U. noch nicht aktualisiert…

  5. Hi Jörg
    Wie bekommst du die Solcarst Daten in die DB ? Benutze auch Loxone, iobroker und home assistant. Danke für deine Unterstützung. Lg aus AT

    1. Hi Daniel!

      Ich nutze die NodeRED-Flows, die hier bereitgestellt werden: https://discourse.nodered.org/t/power-forecasts-and-data-tuning-for-solar-installations-node-red-solcast-api-influxdb-grafana/28037/2

      Damit kann man nicht nur die Solcast-Daten in eine InfluxDB schaufeln, sodern auch die eigenen PV-Ertragsdaten zurückspielen an Solcast – zwecks Tuning der Vorhersage. Funktioniert schon seit 2+ Jahren einwandfrei bei mir…

      Viele Grüße und Erfolg bei der Umsetzung
      Jörg

  6. Hallo Jörg, ich hatte ebenfalls den Fehler bei „source ~/.venv/bin/activate“
    geholfen hat bei mir
    source .venv/bin/activate

    Grüße
    Markus

  7. Hallo Jörg,
    EOS läuft jetzt bei mir. 🙂 Nun möchte ich die Config-Datei aufzubauen.
    Über die GUI habe ich versucht Längen- und Breitengrad anzupassen. Die sehe ich nun unter http://192.168.1.5:8503/v1/config zwar, aber ich kann nicht mehr auf die GUI unter IP:8504 zugreifen.
    Unter http://192.168.1.5:8503/v1/config gibt es den Parameter „config_file_path“ auf die EOS.config.json. Allerdings ist diese Datei bis auf { } leer.
    Weißt Du wo ich die Config-Daten, die Du am Ende des Videos vorstellst pflegen muss?
    Danke und Grüße Markus

    1. Hi Markus,
      die Config-Datei ist standardmäßig leer. Ich hab sie hier hingepackt: /home/jay/EOS/config/EOS.config.json

      Hab auch eben länger mit Andreas gequatscht. Bei den Inputs gibts wohl noch Baustellen, sodass derzeitig nicht alles funktioniert. Werde kommende Woche ein Update liefern mit meinen Erkenntnissen, sodass es hoffentlich wieder ein paar Schritte weitergeht…

      Viele Grüße
      Jörg

      PS: Bis dahin am besten die „Basics“ vorbeireiten. Also dass der Dienst läuft und die Config (egal wie sie dann ausschauen wird am Ende) gezogen wird. 🙏

  8. Moin Jörg,
    ich melde Vollzug 🙂 hab die Länge und Breite in die leere Config kopiert. Nach dem Reboot sind nur noch diese Werte über Port 8503 vorhanden.
    > die Config wird also gezogen.

    Spannend wird jetzt, wie ich die Werte aus meinem Home Assistant auslese und im EOS nutze. Schön wäre es jeden Wert als NodeRed-Wert (wie nennt man die da?) zu haben, um damit arbeiten zu können.

    Dann gilt es rauszufinden wie jedes Gerät mit welchen Parametern gesteuert werden kann. Evcc hat hier z.B. schon viele Möglichkeiten, eine Sammlung je Gerät habe ich noch nicht gefunden. Die Hersteller bieten eine Modbus Doku, für Laien wie mich ist das ohne Einarbeitung leider nicht schnell und einfach verständlich.
    Auch wie man aus EOS/NodeRed dann in den Modbus schreibt ist noch ein Buch mit 7 Siegeln.
    Wenn ich Erkenntnisse habe, teile ich diese gerne. Vielleicht hast Du da schon Input?

    Letzter Schritt wäre eine erste Regelung im Sinne eines Dirigenten im Orchester der jedem Gerät seinen Einsatz gibt. Wenn-dann Regeln per NodeRed, die jeweils die zu nutzende Leistung vorgeben.
    Eine Herausforderung dürfte es werden, die aktuell vom Haus benötigte Leistung abzurufen.

    Soviel zu meinem „Baustellen“ 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte dir auch gefallen