Impressum Startseite Grund Installation Grundlagen Hilfreiches Projekte Querschläger Meckerecke

27.03.2015: Wie man die MAX! Heizungssteuerung abfragt und die Werte weiter verwendet mit hilfe von FHEM

Bisher hatte ich immer gedacht: FHEM ? Viel zu kompliziert, oder "brauch ich nicht". Das eine oder andere mag stimmten, wenn man sich damit NICHT beschäftigt ist es durchaus komplizert - ich wollte und will mich damit nicht beschäftigen, ich versuche immer alles mit PHP und Bash zu regeln, das geht auch - vor allem fühle ich mich in der Umgebung wohler - da weiss man was man tut und wo die Fehler zu suchen sind.

Dies mal allerdings, kam ich an die Werte der MAX! Heizungsreglung nicht ran, da das ganze nur mit einem Java Applet und über so ein dubioses Protokoll läuft. Die Steuerung des MAX! Systems ist einerseits toll!, aber leider fehlt einem die API, um evtl das eine abzufragen oder zu Steuern...

Hier setzt FHEM an, es kann das MAX! System (über den MAX! CUBE) einbinden und bieten einen dann eine komfortable möglichkeit damit zu interagieren. Bislang nutze ich nur die möglichkeit die Fenster und Türkontakte, sowie sämtliche Temperaturen abzufragen und mit PHP weiter zu verarbeiten und auch den Batteriezustand der einzelnen Geräte zu überwachen.

OK, was brauchen wir ? Eine funktionierende MAX! Heizungssteuerung und einen MAX! Cube der im Internet hängt (Es soll auch mit einem "CUL" Stick gehen, aber den habe ich nicht). Dann noch eine lauffähige FHEM installation, die man HIER sehr gut erklärt findet. Ich habe also lt. dieser Anleitung folgendes im Terminal eingegeben:

sudo bash

sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get autoremove -y && sudo reboot

sudo apt-get -f install && sudo apt-get -y install perl libdevice-serialport-perl libio-socket-ssl-perl libwww-perl libxml-simple-perl

sudo wget http://fhem.de/fhem-5.6.deb && sudo dpkg -i fhem-5.6.deb

cd /opt && sudo chmod -R a+w fhem && sudo usermod -a -G tty pi && sudo usermod -a -G tty fhem

Das war es schon ! - FHEM sollte dann schon laufen !

Wenn man jetzt die FHEM Weboberfläche so aufruft: http://IP_euresPis:8083 solltet ihr die FHEM Maske bekommen. (Die IP solltet ihr anpassen)

An der Seite drückt ihr auf "Edit files" und dann oben auf "fhem.cfg"

Das ist die Konfiguration von FHEM, dort rein schreibt ihr noch folgende Zeile, wobei ihr die IP durch die IP eures CUBEs ersetzt.

define ml MAXLAN IP_des_MAX!Cubes ondemand

nach Save fhem.cfg dauert es ein Moment und eure ganzen MAX Geräte sollten im Netz gefunden und auf der Hauptseite so richtig schön Kryptisch aufgelistet werden, z.b. MAX_071299, MAX_089491, etc...

Damit kann man dann schon Arbeiten. Ich hatte mir auch mal die mühe gemacht, den Geräten richtige Namen zu geben, aber eine halbe Stunde später wurden diese Aliasse von FHEM schon wieder vergessen - ist auch egal, ich arbeite sowieso nur mit den richtigen Namen.

In der Seitenleiste sollte irgendwann "MAX" auftauchen. Oben sind dann die Logfiles und unten die ganzen Geräte:

Jetzt nehmen wir mal das erste Gerät und rufen es auf, z.b.: MAX_0788d1, also mittels aufruf von "http://192.168.0.24:8083/fhem?detail=MAX_0788d1" bekommen wir sämtliche detailinfos über das Gerät, wie z.b. Seriennummer, Batteriezustand und wenn das gerät eine Temperatur messen kann auch die Temperatur.

Bei Schaltern oder Magnetkontakten können wir auch abfragen ob sie "opened" oder "closed" sind. Ideal für die weitere Verarbeitung.

Da die Max! Heizungssteuerung autark läuft und der MAX! Cube nur ein Gateway zum Internet und FHEM über Internet darauf zugreifen kann können wir also machen was wir wollen;

z.b. Die Aktuelle Temperatur des Wandthermostaten MAX_0788d1 abfragen. Wir lesen die Webseite einfach ein und verarbeiten die Ausgabe je nachdem was wir brauchen:

//IP des FHEM Rechners:
$ip="192.168.0.24:8083";

//FHEM MAX Cube Abfrage Thermostat
$id="0788d1";
$url="http://".$ip."/fhem?detail=MAX_".$id;$inhalt=shell_exec("curl -L -A BrowserV1.0 ".$url);
$string="MAX_".$id.'-temperature">';$pos=strpos($inhalt,$string); $poslen=strlen($string);
if ($pos!==false) {
$needle=substr($inhalt,$pos,$poslen+4);$needle=str_replace($string,"",$needle);
$T_SZ=trim($needle);
} else { $T_SZ="N.A.";}

In der Variable "$T_SZ" findet sich nach dem Aufruf die aktuelle Zimmertemperatur. Ich musste das "einladen" der Webseite leider mit "shell_exec" und "curl" realisieren, da "getFileContents" und "implode" hier versagten - aber Curl geht auch.

So kann man z.b. auch die Fensterkontakte abfragen (Super Funk Melder !, der Akku hält ca 2 Jahre!) und die Dinger sind sehr zuverlässig - aber auch etwas Träge, da die Zeitversetzt erst bei FHEM auftauchen (30 Sek).

//FHEM MAX Cube Kontakt Tuer
$id="04ed86"; //
$url="http://".$ip."/fhem?detail=MAX_".$id;$inhalt=shell_exec("curl -L -A BrowserV1.0 ".$url);
$string="MAX_".$id.'-state">';$pos=strpos($inhalt,$string); $poslen=strlen($string);
if ($pos!==false) {
$needle=substr($inhalt,$pos,$poslen+6);$needle=str_replace($string,"",$needle);
$K_WZ_Tuer=trim($needle);
} else { $K_WZ_Tuer="N.A.";}


$string="MAX_".$id.'-battery">';$pos=strpos($inhalt,$string); $poslen=strlen($string);
if ($pos!==false) {
$needle=substr($inhalt,$pos,$poslen+2);$needle=str_replace($string,"",$needle);
$akku=trim($needle);if ($akku!=="ok") {

echo "Akku bitte Tauschen";
}
}

In der Variablen "$K_WZ_Tuer" findet sich dann entweder "opened", "closed" oder "N.A." Das "N.A." sollte nur kommen wenn FHEM nicht läuft oder das Gerät nicht erreichbar ist - ansonsten bekommt man immer einen der beiden Zustände.

Wenn wir sowieso schon den Inhalt der Webseite in einer Variablen haben kann man auch gleich weitere Sachen abfragen, z.b. den Batterie zustand der Melder, das passiert hier im unteren Abschnitt. In der Variablen $akku sollte man ein "ok" haben, sonst ist irgendwas mit dem Akku.

Ich habe es so eingerichtet das der Akkustand überall gleich mitkontrolliert wird und wenn einer einen Fehler meldet sofort eine Email mit dem Hinweis welches Gerät es ist an mich raus geht - so braucht man nicht extra die Webmaske von MAX! aufrufen um heraus zu finden welcher Akku wohl dem nächst Schlapp macht.

Man kann per Webaufruf jederzeit die gewünschte Temperatur einstellen:

http://192.168.0.24:8083/fhem?cmd=set MAX_079d66 desiredTemperature 5

stellt den Wandthermostat MAX_079d66 auf eine Manuelle Temperatur von 5 Grad.

Man kann auch folgende Werte übermitteln:

Automatikmodus, 24 Grad bis zur nächsten Änderung:

http://192.168.0.24:8083/fhem?cmd=set MAX_079d66 desiredTemperature auto 24

Heizung in dem Raum AUS Stellen:

http://192.168.0.24:8083/fhem?cmd=set MAX_079d66 desiredTemperature off

Temperatur auf Eco im Auto modus setzen

http://192.168.0.24:8083/fhem?cmd=set MAX_079d66 desiredTemperature auto eco

Temperatur auf Comfort im Auto modus setzen

http://192.168.0.24:8083/fhem?cmd=set MAX_079d66 desiredTemperature auto comfort

Lässt den Thermostat alle Heizkörper im defeniertem Raum für 300 Sekunden maximal anheizen, geht danach in den Auto modus

http://192.168.0.24:8083/fhem?cmd=set MAX_079d66 desiredTemperature boost

Man darf aber nicht vergessen das die mit dem Wandthermostaten verknüpften Heizkörperregler auch eine Zeit brauchen (bis zu 2 Minuten), bevor der Befehl vom Thermostat weiter gegeben wird.

Alternativ kann man auch die Heizkörperstellregler direkt ansteuern - dann geht es schneller.

Impressum Startseite Grund Installation Grundlagen Hilfreiches Projekte Querschläger Meckerecke