Website-Icon Dein Smart Home Blog

Heizungssteuerung mit MAX! und Raspberry Pi Zentrale - Perfekte Low-Budget Lösung Teil 1

raspberry max titel

raspberry max titel

In diesem Tutorial soll es darum gehen, wie es mit ein bisschen Fleiß und Zeitaufwand recht einfach möglich ist das MAX! Heizungssystem in die Smart Home Zentrale einzubinden. Der Vorteil liegt auf der Hand: Es kann dann mit allen Sensoren und Aktionen, welche bereits mit der (Fibaro) Zentrale funktionieren, verknüpft werden.

Was wir brauchen

Raspbian Image auf dem Raspberry Pi  installieren

Hier noch einmal ein kleines Step-by-Step, wie ihr euch das Raspbian Image installiert. Der einfachste und auch komfortabelste Weg zu einem frisch aufgesetzen System.

  1. Als erstes das Image HERUNTERLADEN - Wir benötigen Raspbian
  2. Win32DiskImager HERUNTERLADEN
  3. SD-Karte einlegen und schauen unter welchem Laufwerksbuchstaben sie erkannt wird
  4. DiskImager starten (als Administrator)
  5. Das Raspbian ImageFile aus der ZIP auswählen, den Laufwerksbuchstaben auswählen (auf den richtigen Buchstaben achten!)
  6. Schreiben (Write) Klicken und warten bis die SD beschrieben ist.

    Win32DiskImager beschreibt die SD-Karte

  7. SD ins Raspberry einlegen und dieses per LAN im Netzwerk verbinden
  8. IP Adresse erfahren (über HDMI oder Router DHCP Log)

    Router zeigt IP des Raspberry Pi

  9. Putty starten und verbinden: (IP: 192.168.XXX.XXX Benutzer:pi Passwort: raspberry) –> das login ist immer dann wieder notwendig, wenn ihr die Verbindung trennt, z.B. bei einem Neustart. Ihr kommt so immer wieder zum Terminal.

Abschließendes Setup & WLAN Installieren

Weiter geht es im Terminal. Dort schließen wir die Installation ab und aktivieren den WLAN-Stick.

Als erstes werdet ihr nach dem verbinden nach dem Login gefragt. Standard nach der Installation ist Benutzer:pi Passwort: raspberry

  1. Superuser Rechte erlangen
    sudo su
  2. Konfiguration öffnen
    raspi-config
  3. Abarbeiten: Erster Punkt, dann 2. (Benutzerdaten merken) -> Finish -> Reboot: Yes (Neustart)
  4. Treiber für Wifi installieren>
    sudo wget https://github.com/lwfinger/rtl8188eu/raw/c83976d1dfb4793893158461430261562b3a5bf0/rtl8188eufw.bin -O /lib/firmware/rtlwifi/rtl8188eufw.bin
  5. Die Konfigurationsdatei öffnen für WLAN-Name und Passwort
    sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
  6. Das Folgende am Ende einfügen (bei Putty mit Rechtsklick einfügen):
    network={
        ssid="ESSID (Name) Hier eintragen"
        psk="WiFi Passwort hier"
    }
  7. So sollte es dann am Ende in etwa aussehen:

    Raspberry Wifi Konfiguration

  8. Speichern mit Strg+X->(y)es->Enter
  9. Neustart mit sudo reboot

Ihr könnt nun wieder wie oben auf dem Router schauen unter welcher IP das Wifi verbunden ist. Das LAN-Kabel kann entfernt werden.

Installation von Pimatic als Hub für MAX! Cube

Das MAX! System an sich ist ein geschlossenes und kann daher nicht via API einfach eingebunden werden. Das wollen wir ändern und genau dafür brauchen wir das Raspberry Pi. Er ist quasi die Softwareschnittstelle zwischen MAX! Cube und der Fibaro Zentrale (oder auch anderer Smart Home Zentrale). Wir können die Heizung dann mit einfachen HTTP-Aufrufen steuern und werden uns einen "Virtual Device" bauen.

  1. Als erstes über SSH auf dem Raspberry Pi anmelden
  2. NodeJS installieren
    wget http://nodejs.org/dist/v0.10.24/node-v0.10.24-linux-arm-pi.tar.gz -P /tmp
    cd /usr/local
    sudo tar xzvf /tmp/node-v0.10.24-linux-arm-pi.tar.gz --strip=1
  3. Es sollte die aktuelle Version von NODE angezeigt werden “v0.10.24”
    /usr/bin/env node --version
  4. Ins Nutzerverzeichnis wechseln
    cd /home/pi
  5. Verzeichnis für Installation erstellen
    mkdir pimatic-app
  6. In das Verzeichnis installieren
    npm install pimatic --prefix pimatic-app --production
  7. In den Installationsordner wechseln
    cd pimatic-app
  8. Standard Konfiguration kopieren
    cp ./node_modules/pimatic/config_default.json ./config.json
  9. Damit wir Pimatic immer über die Konsole starten können und nicht jedes mal in den Installationsordner müssen, machen wir es global:
    In den richtigen Ordner wechseln
    cd /home/pi/pimatic-app/node_modules/pimatic
  10. Und damit systemweit zugänglich machen (dauert etwas länger)
    sudo npm link
  11. Als letztes packen wir die Anwendung noch in den Autostart vom Raspberry Pi, dazu laden wir als erstes ein Startscript, dieses gibt es schon fertig:
    In den Nutzerordner wechseln
     cd /home/pi
  12. Das Script downloaden
    wget https://raw.github.com/pimatic/pimatic/master/install/pimatic-init-d
  13. Das Script in den Autostartordner schieben
    sudo cp pimatic-init-d /etc/init.d/pimatic
  14. Das Script bekommt 1. die richtigen Nutzerrechte und wird 2. in die Autostart-Konfiguration eingefügt.
    sudo chmod +x /etc/init.d/pimatic
    sudo chown root:root /etc/init.d/pimatic
    sudo update-rc.d pimatic defaults
  15. Die Konfigurationsdatei öffnen mit nano /home/pi/pimatic-app/config.json . Dort dann "username": "" und "password": "" ausfüllen (für das Login im Webinterface. Speichern mit Strg-X,(y)es,Enters. Die Stelle in der Datei sollte dann in etwa so aussehen:
      "users": [
        {
          "username": "daniel",
          "password": "hallo",
          "role": "admin"
        }
      ],

Das war es auch schon. Wir können nun per sudo service pimatic start  testen ob alles läuft. Im Terminal sollte ein OK erscheinen und Pimatic wurde gestartet. Nun werden erst einmal viele Module installiert, das dauert. Was gerade passiert kann man verfolgen mit:

tail -f /home/pi/pimatic-app/pimatic-daemon.log

Ihr solltet, wenn installiert ist alles fertig ist, über den Browser und die IP des Raspberry Pi´s zugreifen können: http://ip_des_RPi:8080  (Als Beispiel, bei mir lautet die komplette Adresse “http://192.168.100.109:8080”). Beim ersten Start dauert es erst einmal über 20 Minuten, das geht später schneller.

Via sudo service pimatic stop  wird es wieder beendet. Das sollte immer dann passieren, wenn die Konfiguration bearbeitet wird.

Auf dem Max! Cube

Der MAX! Cube wird erst einmal wie gewohnt eingerichtet. Die Heizregler und Fensterkontakte werden eingebunden und sollten mit dem Cube auch funktionieren. Einen Heiz-Plan sollten wir erst einmal nicht hinterlegen denn wir wollen ja die Steuerung der Fibaro Zentrale überlassen. Ich möchte darauf nicht weiter eingehen, denn der Hersteller dokumentiert das System ausreichend gut. HIER gibt es eine PDF Datei als Leitfaden. Auch in diversen Erfahrungsberichten findet man schöne Anleitungen, wie z.B. HIER.

Pimatic Konfiguration für MAX!

Wenn auf dem MAX! Cube alles schick ist, können wir mit dem Pimatic Gateway weiter machen. Hier müssen wir als erstes das Plugin für die Heizungssteuerung installieren.

  1. Wieder per SSH auf dem Raspberry Pi einloggen
  2. Super-User Rechte erlangen
    sudo su
  3. Pimatic anhalten, falls es läuft
    service pimatic stop
  4. Die config.json Datei öffnen
    nano /home/pi/pimatic-app/config.json
  5. Folgenden Abschnitt bei "plugins": [ hinzufügen. Die IP-Adresse des Cubes anpassen (im Router nach der IP des MAX! Cubes schauen)
    { 
       "plugin": "max",
       "host": "192.168.X.X",
       "port": 62910
    }

    Die Gesamte Config als Beispiel:

    {
      "//": "Please only change this file when pimatic is NOT running, otherwise pimatic will overwrite your changes.",
      "settings": {
        "httpServer": {
          "enabled": true,
          "port": 80
        },
        "database": {
          "deviceAttributeLogging": [
            {
              "deviceId": "*",
              "attributeName": "*",
              "type": "*",
              "interval": "0",
              "expire": "7d"
            },
            {
              "deviceId": "*",
              "attributeName": "*",
              "type": "continuous",
              "interval": "5min",
              "expire": "7d"
            },
            {
              "deviceId": "*",
              "attributeName": "temperature",
              "type": "number",
              "expire": "1y"
            },
            {
              "deviceId": "*",
              "attributeName": "humidity",
              "type": "number",
              "expire": "1y"
            }
          ],
          "messageLogging": [
            {
              "level": "*",
              "tags": [],
              "expire": "7d"
            },
            {
              "level": "debug",
              "tags": [],
              "expire": "0"
            }
          ]
        },
        "authentication": {
          "secret": "lHtGUbmfJuAHUqjsOvXXLgGCT22HvKJbSqWONBxkkf40n0m5huw28HwSokGqK/HNiAnvr4iGn6VKxXd4dC60wg=="
        },
        "httpsServer": {},
        "gui": {}
      },
      "plugins": [
        {
          "plugin": "cron"
        },
        {
          "plugin": "mobile-frontend"
        },
        { 
          "plugin": "max",
          "host": "192.168.100.120",
          "port": 62910
        }
      ],
      "devices": [],
      "rules": [],
      "pages": [
        {
          "id": "favourite",
          "name": "Favourites",
          "devices": []
        }
      ],
      "groups": [],
      "users": [
        {
          "username": "daniel",
          "password": "hallo",
          "role": "admin"
        }
      ],
      "roles": [
        {
          "name": "admin",
          "permissions": {
            "pages": "write",
            "rules": "write",
            "variables": "write",
            "messages": "write",
            "events": "write",
            "devices": "write",
            "groups": "write",
            "plugins": "write",
            "updates": "write",
            "database": "write",
            "config": "write",
            "controlDevices": true,
            "restart": true
          }
        }
      ],
      "variables": []
    }
  6. Speichern mit Strg-X,(y)es,Enter
  7. Pimatic wieder starten (das Terminal aber geöffnet lassen)
    service pimatic start

Im Webinterface können wir nun, nachdem das Plugin installiert wurde, über den Log die Komponenten des Cubes auslesen. Wir benötigen ein paar Daten um entsprechende "Devices" in der Config Datei zu erstellen. Je nach dem, welche Geräte am Cube verbunden sind, kann dieser Abschnitt variieren. Ich gehe hier mal das Beispiel eines Heizkörperthermostats durch.

  1. Im Pimatic Web-Interface oben links auf das Menü, dort dann "Messages" klicken
  2. Oben links den Button drücken und Häkchen bei Debug setzen.
  3. Button oben links-Mitte drücken und pimatic-max einblenden.
  4. Den Informationstext mit dem "debug pimatic-max" Label aus dem Log kopieren und z.B. im Editor speichern (kann etwas dauern).

    Pimatic-Max Log der Komponenten

  5. Im Terminal Pimatic beenden mit
    sudo service pimatic stop
  6. Pimatic Config.json öffnen und bearbeiten.
    sudo nano /home/pi/pimatic-app/config.json
  7. Die Werte aus eurem log anschauen und je nach Komponente entsprechende Felder in der Config anpassen. Das Schema lautet:
    { 
      "id": "bathroomLeft",
      "class": "MaxHeatingThermostat", 
      "name": "Bathroom Radiator left",
      "rfAddress": "12345cf",
      "comfyTemp": 23.0,
      "ecoTemp": 17.5,
    }

    Die rfAdresse muss unbedingt mit eurem Log übereinstimmen. "id" und "name" können angepasst werden. Bei "id" bitte keine Leerzeichen verwenden. Die beiden Temperaturfelder müssen nicht bearbeitet werden. Der Log zeigt ein Beispiel von mir. Ich habe mehrere Geräte am MAX!, markiert ist hier ein Thermostat

    Markiert ist ein Heizkörperthermostat

  8. Der daraus resultierende Eintrag (hier noch einmal in der gesamten Config.json) wäre dann:
    {
      "//": "Please only change this file when pimatic is NOT running, otherwise pimatic will overwrite your changes.",
      "settings": {
        "httpServer": {
          "enabled": true,
          "port": 80
        },
        "database": {
          "deviceAttributeLogging": [
            {
              "deviceId": "*",
              "attributeName": "*",
              "type": "*",
              "interval": "0",
              "expire": "7d"
            },
            {
              "deviceId": "*",
              "attributeName": "*",
              "type": "continuous",
              "interval": "5min",
              "expire": "7d"
            },
            {
              "deviceId": "*",
              "attributeName": "temperature",
              "type": "number",
              "expire": "1y"
            },
            {
              "deviceId": "*",
              "attributeName": "humidity",
              "type": "number",
              "expire": "1y"
            }
          ],
          "messageLogging": [
            {
              "level": "*",
              "tags": [],
              "expire": "7d"
            },
            {
              "level": "debug",
              "tags": [],
              "expire": "0"
            }
          ]
        },
        "authentication": {
          "secret": "lHtGUbmfJuAHUqjsOvXXLgGCT22HvKJbSqWONBxkkf40n0m5huw28HwSokGqK/HNiAnvr4iGn6VKxXd4dC60wg=="
        },
        "httpsServer": {},
        "gui": {}
      },
      "plugins": [
        {
          "plugin": "cron"
        },
        {
          "plugin": "mobile-frontend"
        },
        { 
          "plugin": "max",
          "host": "192.168.100.120",
          "port": 62910
        }
      ],
      "devices": [
      	{ 
      	  "id": "thermostatmarius",
          "class": "MaxHeatingThermostat", 
          "name": "Thermostat Marius",
          "rfAddress": "078316",
          "comfyTemp": 23.0,
          "ecoTemp": 17.5,
    	}
      ],
      "rules": [],
      "pages": [
        {
          "id": "favourite",
          "name": "Favourites",
          "devices": []
        }
      ],
      "groups": [],
      "users": [
        {
          "username": "daniel",
          "password": "hallo",
          "role": "admin"
        }
      ],
      "roles": [
        {
          "name": "admin",
          "permissions": {
            "pages": "write",
            "rules": "write",
            "variables": "write",
            "messages": "write",
            "events": "write",
            "devices": "write",
            "groups": "write",
            "plugins": "write",
            "updates": "write",
            "database": "write",
            "config": "write",
            "controlDevices": true,
            "restart": true
          }
        }
      ],
      "variables": []
    }
  9. Wenn alles fertig ist Speichern mit Strg-X,(y)es,Enter
  10. Das Schema für einen Fensterkontakt ist übrigens folgendes:
    { 
      "id": "window-bathroom",
      "class": "MaxContactSensor", 
      "name": "Bathroom Window",
      "rfAddress": "12345df"
    }

    Der "name" und die "id" können wieder angepasst werden. Die rfAdesse muss mit eurem Log übereinstimmen. Das Vorgehen ist sonst das Gleiche wie oben beschrieben.

  11. Nach dem Speichern Pimatic wieder starten.
    sudo service pimatic start

Die Komponente sollte nun im Webinterface auftauchen. Sollte der Cube nicht erkannt werden kann es auch nötig sein, ihn zwischendurch neu zu starten. Ihr müsst jedes Gerät im Webinterface per "Add Device" zum Bildschirm hinzufügen. Das geht mit dem Zahnrad oben rechts. Mehr Infos zur Handhabung von Pimatic auch in meinem anderen Artikel dazu.

Weboberfläche mit Heizkörpersteuerung

Das war es schon (oder endlich?). Das Thermostat kann nun schon über Pimatic gesteuert werden und somit auch via Smartphone im WLAN. Wir sind hier nur einen kleinen Schritt weiter, denn wir brauchen zumindest die MAX! App nicht mehr und können uns schöne Diagramme zur Nutzung der Heizung im Pimatic ansehen.

Diagramm zur Heizungssteuerung in Pimatic

Wie geht es weiter?

In Teil 2 zeige ich euch, wie per API die Thermostate in die Fibaro Zentrale bzw. in jede andere Smart Home Box als virtuelles Modul einbindet. Mit einem Beispiel-Script gehe ich kurz auf die Funktionsweise ein. Jeder sollte dann in der Lage sein, ein eigenes kleines Heizsystem individuell zu programmieren.

Die mobile Version verlassen