Archiv

Artikel Tagged ‘Hausautomatisierung’

IP-Symcon Script – Wetterstation für wetterpool.de

11. Januar 2012 Keine Kommentare

Dieses Script überträgt die von IP-Symcon ermittelten Wetterdaten an die Community von wetterpool.de.

<?php
// Zugangs-/Accountinformationen zur API von wetterpool.de
$wpuser    = 'USERID';
$wppass    = 'PASSWORT';
$wphost    = 'www.wetterpool.de';
$wpport    = '80';
$wptimeout = '30';
$wpurl     = '/import/wswin_directpost.php';

// Eigene Werte aufbereiten:
$tempmaxmin = maxmin_val("TMAXMIN", GetValue(57080 /*[Garten\Klima\TEMPERATURE]*/));

// Variablen auf Basis der API von wetterpool.de
// http://www.wetterpool.de/tab_plugin.php
// Der String "- -" definiert, dass dieses Plugin für diesen Parameter keinen
// Wert bereitstellt (UNBEDINGT immer genau definieren welche Werte vorhanden sind!).
$tcur = preg_replace("/\./", ",", sprintf("%+.2f", GetValue(57080 /*[Garten\Klima\TEMPERATURE]*/)));    // Aktuelle Temperatur, 2m Höhe, Grad Celsius, Dezimalzahl x1 = (+/-)x,yz
$tmin = preg_replace("/\./", ",", sprintf("%+.2f", $tempmaxmin[0]));		 // Minimaltemperatur des Tages, 2m Höhe, Grad Celsius, Dezimalzahl x1 = (+/-)x,yz
$tmax = preg_replace("/\./", ",", sprintf("%+.2f", $tempmaxmin[1]));		 // Maximaltemperatur des Tages, 2m Höhe, Grad Celsius, Dezimalzahl x1 = (+/-)x,yz
$t5min = "- -";	// Minimaltemperatur des Tages, 5cm Höhe, Grad Celsius, Dezimalzahl x1 = (+/-)x,yz
$tcm30 = "- -";   // Temperaturänderung letzte 30 Minuten, 2m Höhe, Grad Celsius, Dezimalzahl x1 = (+/-)x,yz
$tch1 = "- -";    // Temperaturänderung letzte 60 Minuten, 2m Höhe, Grad Celsius, Dezimalzahl x1 = (+/-)x,yz
$tdm1 = "- -";    // Temperaturabweichung des Monats vom 30-jährigen Mittel, Grad Celsius, Dezimalzahl x1 = (+/-)x,yz
$rhcur = GetValue(32760 /*[Garten\Klima\HUMIDITY]*/);   // Aktuelle relative Luftfeuchte, 2m Höhe, Prozent, Ganzzahl 0<=x1<=100
$rrh1 = "- -";    // Regenmenge letzte 60 Minuten (1h), Millimeter, Dezimalzahl x1 = (+)x,yz
$rrh2 = "- -";    // Regenmenge letzte 120 Minuten (2h), Millimeter, Dezimalzahl x1 = (+)x,yz
$rrh6 = "- -";    // Regenmenge letzte 360 Minuten (6h), Millimeter, Dezimalzahl x1 = (+)x,yz
$rrh12 = "- -";   // Regenmenge letzte 720 Minuten (12h), Millimeter, Dezimalzahl x1 = (+)x,yz
$rrh24 = "- -";   // Regenmenge letzte 1440 Minuten (24h), Millimeter, Dezimalzahl x1 = (+)x,yz
$rrd1 = "- -";    // Regenmenge aktueller Tag (0 Uhr bis x Uhr), Millimeter, Dezimalzahl x1 = (+)x,yz
$rrm1 = "- -";    // Regenmenge aktueller Monat, Millimeter, Dezimalzahl x1 = (+)x,yz
$rry1 = "- -";    // Regenmenge aktuelles Jahr, Millimeter, Dezimalzahl x1 = (+)x,yz
$rrdm1 = "- -";   // Regenmengenabweichung aktueller Monat vom 30-jährigen Mittel, Prozent, Ganzzahl x1>=0
$sund1 = "- -";   // Sonnenscheindauer aktueller Tag (0 Uhr bis x Uhr), Stunde, Ganzzahl 0<=x1<=24
$sunh1 = "- -";   // Sonnenscheindauer letzte 60 Minuten, Minute, Ganzzahl 0<=x1<=60
$wcur = "- -";    // Aktuelle Windgeschwindigkeit, 10m Höhe, Kilometer pro Stunde, Dezimalzahl x1 = (+)x,yz
$wdir = "- -";    // Aktuelle Windrichtung, 10m Höhe, Grad, Dezimalzahl 0<=x1<=360
$wcura = "- -";   // 10minütiger Durchschnitt - Windgeschwindigkeit, 10m Höhe, Kilometer pro Stunde, Dezimalzahl x1 = (+)x,yz
$wdira = "- -";   // 10minütiger Durchschnitt - Windrichtung, 10m Höhe, Grad, Dezimalzahl 0<=x1<=360
$wmx = "- -";     // Maximale Windgeschwindigkeit (Böe) aktueller Tag (0 Uhr bis x Uhr), Kilometer pro Stunde, Dezimalzahl x1 = (+)x,yz
$pcur = "- -";    // Aktueller Luftdruck (mit Höhenkorrektur!), HectoPascal, Dezimalzahl x1 = (+)x,yz
$pch1 = "- -";    // Luftdruckänderung letzte 60 Minuten (1h), HectoPascal, Dezimalzahl x1 = (+/-)x,yz
$pch3 = "- -";    // Luftdruckänderung letzte 180 Minuten (3h), HectoPascal, Dezimalzahl x1 = (+/-)x,yz
$clcnb = "- -";   // Bedeckungsgrad Achtel, Ganzzahl 0<=x1<=8
$hgtnn = "2";     // Stationshöhe über Normalnull, Meter, Ganzzahl
$daoni = "- -";   // Tag oder Nacht, Wert wird als Wort geschrieben, x1 = {day,night}
$snhgt = "- -";   // Gemessene Schneehöhe, Centimeter, Ganzzahl
$snhtd = "- -";   // Datum der gemessenen Schneehöhe, Stunden/Minuten Tag/Monat/Jahr, x1 = hh:mm dd.mm.YYYY
$snl = "- -";     // Berechnete Schneefallgrenze, Meter, Ganzzahl
$lxcur = "- -";   // Aktueller Helligkeitswert, kLux, Dezimalzahl x1 = (+)x,yz
$lxmax = "- -";   // Maximaler Helligkeitswert des Tages, kLux, Dezimalzahl x1 = (+)x,yz
$time = date("H:i");    // Zeit, Stunden/Minuten, x1 = hh:mm
$date = date("d.m.Y");  // Datum, Tag/Monat/Jahr, x1 = dd.mm.YYYY
$plgnv = "1.0";			// Plugin-Version, Versionszahl x1 = x.yz

/***************************************************************************
* Übermittlung der aufbereiteten Daten an die API.
*
* Rückgabewert:
*  TRUE  Alle Daten wurden erfolgreich angenommen und verarbeitet.
*  FALSE Es ist ein Fehler aufgetreten. Dieser wird zeitgleich IPS-Log
*        geschrieben.
***************************************************************************/

function apirequest($wphost, $wpport,$wptimeout, $wpurl, $wpdata)
{
	// Ausführen des GET-Requests.
	$result    = false;
	$resultmsg = "";
	$fp = fsockopen($wphost, $wpport, $errno, $errstr, $wptimeout);
	if($fp)
	{
		$request = "GET ". $wpurl ."?data=$wpdata HTTP/1.1\r\n";
		$request.= "Host: ". $wphost ."\r\n";
		$request.= "Connection: Close\r\n\r\n";

		// Auswerten der Antwort.
		$data = "";
		fwrite($fp, $request);
		while (!feof($fp))
		{
			$data .= fgets($fp, 128);
		}
		fclose($fp);

		// Überprüfen ob die gemeldeten Werte korrekt verarbeitet wurden.
		$resultmsg = $data;
		if ( preg_match("/ok/i", $data) )
			$result = true;
	}

	if ( $result == false )
	{
  		IPS_LogMessage("WETTERPOOL.DE", "Meldung fehlgeschlagen!\n$resultmsg");
		return false;
	} else
	{
		return true;
	}
}

/***************************************************************************
* Funktion um Werte zu speichern und Durchschnittswerte zu berechnen.
* Werte werden in 24 Stunden vorgehalten.
*
* Parameter:
*  $varname   Name der Variablen, in der die Werte gespeichert werden.
*  $val       Der zu speichernde Wert
*  $avg_min   Anzahl der Minuten, aus den ein Durchschnitt errechnet wird.
*             NULL um keinen Durchschnitt zu berechnen.
* Rückgabe:
*  Durchschnittswert oder TRUE falls keine Berechnung gewünscht wurde.
***************************************************************************/
function average_val($varname, $val, $avg_min)
{
   $varid = @IPS_GetVariableIDByName($varname, $GLOBALS["IPS_SELF"]);

	// Falls der Wertespeicher nicht vorhanden ist, muss dieser angelegt werden.
	if ( $varid == 0 )
	{
	   $varid = IPS_CreateVariable(3);
	   IPS_SetName($varid, $varname);
	   IPS_SetParent($varid, $GLOBALS["IPS_SELF"]);
	}

	// Löschen von Daten die älter als 24 Stunden sind.
	$value = "";
	if ( GetValue($varid) != "" )
	{
		$hist_data = preg_split("/\|/", GetValue($varid));
		foreach ( $hist_data as $item )
		{
		   list($vtime, $vdata) = preg_split("/;/", $item);
		   if ( (time()-86400) > $vtime )
				continue;

			if ( $value != "" )
		   	$value .= "|";
			$value .= "$vtime;$vdata";
		}
	}

	// Aktuellen Wert der Wertetabelle hinzufügen.
	if ( $value != "" )
   	$value .= "|";
	$value .= time() .";". $val;
	SetValue($varid, $value);

	// Den Durchschnittswert der letzten Minuten ($avg_min) berechnen.
	if ( $avg_min != NULL )
	{
		$hist_data = preg_split("/\|/", GetValue($varid));

	   $result = 0;
	   $dcount = 0;
		foreach ( $hist_data as $item )
		{
         list($vtime, $vdata) = preg_split("/;/", $item);
         if ( time()-(180*60) > $vtime )
            $continue;

			$dcount++;
			$result = $result+$vdata;
		}
		return sprintf("%+.2f", $result/$dcount);
	}
	return true;
}

/***************************************************************************
* Funktion um MAX und MIN Werte des Tages zu erhalten und zu speichern.
*
* Parameter:
*  $varname   Name der Variablen, in der die Werte gespeichert werden.
*  $val       Der zu speichernde Wert (falls nicht gesetzt, wird nur MIN und MAX
*             zurückgegeben.
*  $avg_min   Anzahl der Minuten, aus den ein Durchschnitt errechnet wird.
*             NULL um keinen Durchschnitt zu berechnen.
* Rückgabe:
*  Array mit MIN(0) und MAX(1) Wert.
***************************************************************************/
function maxmin_val($varname, $val)
{
	$result = array(0);
   $varid = @IPS_GetVariableIDByName($varname, $GLOBALS["IPS_SELF"]);

	// Falls der Wertespeicher nicht vorhanden ist, muss dieser angelegt werden.
	if ( $varid == 0 )
	{
	   $varid = IPS_CreateVariable(3);
	   IPS_SetName($varid, $varname);
	   IPS_SetParent($varid, $GLOBALS["IPS_SELF"]);
	}

	// Zurücksetzen des Wertespeichers, falls die letzten Daten von "gestern" sind.
   if ( GetValue($varid) != "" )
	{
		list($vdate, $vmin, $vmax) = preg_split("/;/", GetValue($varid));
	   $date = date("Ymd");

	   if ( $date != $vdate )
	   {
			if ( $val != NULL )
				SetValue($varid, date("Ymd") .";". $val .";". $val);
	   } else
	   {
			if ( $val != NULL )
			{
				// Falls der gemeldete Wert kleiner als MIN ist.
				if ( $val < $vmin )
				   $vmin = $val;
				// Falls der gemeldete Wert größer als MAX ist.
				if ( $val > $vmax )
				   $vmax = $val;
	         SetValue($varid, $vdate .";". $vmin .";". $vmax);
			}

			$result[0] = sprintf("%+.2f", $vmin);
			$result[1] = sprintf("%+.2f", $vmax);
			return $result;
	   }
	} else
	{
		// Wert setzen falls gefordert.
		if ( $val != NULL )
			SetValue($varid, date("Ymd") .";". $val .";". $val);

		$result[0] = sprintf("%+.2f", $val);
		$result[1] = sprintf("%+.2f", $val);
		return $result;
	}
	return TRUE;
}

// Daten für das Senden vorbereiten und in das korrekte Format bringen.
$wpdata = "$wpuser;";
$wpdata .= md5($wppass) .";;";
$wpdata .= "(TCUR_ $tcur);";
$wpdata .= "(TMIN_ $tmin);";
$wpdata .= "(TMAX_ $tmax);";
$wpdata .= "(T5MIN $t5min);";
$wpdata .= "(TCM30 $tcm30);";
$wpdata .= "(TCH1_ $tch1);";
$wpdata .= "(TDM1_ $tdm1);";
$wpdata .= "(RHCUR $rhcur);";
$wpdata .= "(RRH1_ $rrh1);";
$wpdata .= "(RRH2_ $rrh2);";
$wpdata .= "(RRH6_ $rrh6);";
$wpdata .= "(RRH12 $rrh12);";
$wpdata .= "(RRH24 $rrh24);";
$wpdata .= "(RRD1_ $rrd1);";
$wpdata .= "(RRM1_ $rrm1);";
$wpdata .= "(RRY1_ $rry1);";
$wpdata .= "(RRDM1 $rrdm1);";
$wpdata .= "(SUND1 $sund1);";
$wpdata .= "(SUNH1 $sunh1);";
$wpdata .= "(WCUR_ $wcur);";
$wpdata .= "(WDIR_ $wdir);";
$wpdata .= "(WCURA $wcura);";
$wpdata .= "(WDIRA $wdira);";
$wpdata .= "(WMX__ $wmx);";
$wpdata .= "(PCUR_ $pcur);";
$wpdata .= "(PCH1_ $pch1);";
$wpdata .= "(PCH3_ $pch3);";
$wpdata .= "(CLCNB $clcnb);";
$wpdata .= "(HGTNN $hgtnn);";
$wpdata .= "(DAONI $daoni);";
$wpdata .= "(SNHGT $snhgt);";
$wpdata .= "(SNHTD $snhtd);";
$wpdata .= "(SNL__ $snl);";
$wpdata .= "(LXCUR $lxcur);";
$wpdata .= "(LXMAX $lxmax);";
$wpdata .= "(TIME_ $time);";
$wpdata .= "(DATE_ $date);";
$wpdata .= "(PLGNV $plgnv)";

$wpdata = urlencode($wpdata);

// DEBUG-Ausgabe des Rohdaten-String.
//echo "http://". $wphost . $wpurl . "?data=". $wpdata ."\n";

// Daten senden.
if ( apirequest($wphost, $wpport, $wptimeout, $wpurl, $wpdata) )
{
	IPS_LogMessage("WETTERPOOL.DE", "Meldung erfolgreich!");
}
?>

IP-Symcon Script – Wetterstation für wetter.com

1. November 2011 Keine Kommentare

Mit folgendem Script können die Daten der eigenen Hausautomatisierungs-Sensoren an die Community von wetter.com gemeldet werden. Dort sind die Werte dem jeweiligen Standort zugeordnet und somit für andere Benutzer ersichtlich und werden für erweiterte Wetter-Prognosen der Region herangezogen.

Um die Werte automatisiert zu melden, sollte ein Timer von 15 Minuten erstellt werden.

<?php
// Zugangs-/Accountinformationen zur API von wetter.com
// Die Variable $test auf "no" setzen, um das Script scharf zu schalten.
$test       = "no";
$wdcuser    = '[login]';
$wdcpass    = '[passwort]';
$wdchost    = 'www.wetterarchiv.de';
$wdcport    = '80';
$wdctimeout = '30';
$wdcurl     = '/interface/http/input.php';

// Variablen auf Basis der API von wetter.com
// http://www.wetter.com/community/wetternetzwerk/admin/api/
$bedeckung = "";
$wolkenhoehe = "";
$ch_wert = "";
$cm_wert = "";
$cl_wert = "";
$sichtweite = "";
$feuchtigkeit = GetValue(32760 /*[Garten\Klima\HUMIDITY]*/);
$temperatur = GetValue(57080 /*[Garten\Klima\TEMPERATURE]*/);
$windrichtung = "";
$windstaerke = "";
$luftdruck = "";
$aenderung = "";
$aenderung_zeit = "";
$aenderungsart = "";
$niederschlagsmenge = "";
$niederschlagsmenge_zeit = "";
$niederschlagsart = "";
$schneehoehe = "";
$neuschnee = "";
$neuschnee_zeit = "";

function apirequest($wdcuser, $wdcpass, $wdchost, $wdcport,	$wdctimeout, $wdcurl)
{
	// Ausführen des GET-Requests.
	$result    = false;
	$resultmsg = "";
	$fp = fsockopen($wdchost, $wdcport, $errno, $errstr, $wdctimeout);
	if($fp)
	{
		$request = "GET ".$wdcurl." HTTP/1.1\r\n";
		$request.= "Host: ".$wdchost."\r\n";
		$request.= "Connection: Close\r\n\r\n";

		// Auswerten der wetter.com Antwort.
		$data = "";
		fwrite($fp, $request);
		while (!feof($fp))
		{
			$data .= fgets($fp, 128);
		}
		fclose($fp);

		// Überprüfen ob die gemeldeten Werte korrekt verarbeitet wurden.
		$resultmsg = $data;
		if ( preg_match("/status=success/i", $data) )
			$result = true;
	}
	else
	{
		$resultmsg = $errstr;
	}

	if ( $result == false )
	{
  		IPS_LogMessage("WETTER.COM", "Meldung fehlgeschlagen!\n$resultmsg");
		return false;
	} else
	{
	   return true;
	}
}

// Aktuelles Datum mit Uhrzeit
$wdcdate = date("YmdHi");

// Erstellen des API-Requests
$wdcurl .= "?benutzername=$wdcuser&passwort=$wdcpass&datum=$wdcdate";

if ( $bedeckung != "" )
	$wdcurl .= "&bedeckung=$bedeckung";
if ( $wolkenhoehe != "" )
	$wdcurl .= "&wolkenhoehe=$wolkenhoehe";
if ( $ch_wert != "" )
	$wdcurl .= "&ch_wert=$ch_wert";
if ( $cm_wert != "" )
	$wdcurl .= "&cm_wert=$cm_wert";
if ( $cl_wert != "" )
	$wdcurl .= "&cl_wert=$cl_wert";
if ( $sichtweite != "" )
	$wdcurl .= "&sichtweite=$sichtweite";
if ( $feuchtigkeit != "" )
	$wdcurl .= "&feuchtigkeit=$feuchtigkeit";
if ( $temperatur != "" )
	$wdcurl .= "&temperatur=$temperatur";
if ( $windrichtung != "" )
	$wdcurl .= "&windrichtung=$windrichtung";
if ( $windstaerke != "" )
	$wdcurl .= "&windstaerke=$windstaerke";
else
	$wdcurl .= "&windstaerke=0";
if ( $luftdruck != "" )
	$wdcurl .= "&luftdruck=$luftdruck";
if ( $aenderung != "" )
	$wdcurl .= "&aenderung=$aenderung";
if ( $aenderung_zeit != "" )
	$wdcurl .= "&aenderung_zeit=$aenderung_zeit";
if ( $aenderungsart != "" )
	$wdcurl .= "&aenderungsart=$aenderungsart";
if ( $niederschlagsmenge != "" )
	$wdcurl .= "&niederschlagsmenge=$niederschlagsmenge";
if ( $niederschlagsmenge_zeit != "" )
	$wdcurl .= "&niederschlagsmenge_zeit=$niederschlagsmenge_zeit";
if ( $niederschlagsart != "" )
	$wdcurl .= "&niederschlagsart=$niederschlagsart";
if ( $schneehoehe != "" )
	$wdcurl .= "&schneehoehe=$schneehoehe";
if ( $neuschnee != "" )
	$wdcurl .= "&neuschnee=$neuschnee";
if ( $neuschnee_zeit != "" )
	$wdcurl .= "&neuschnee_zeit=$neuschnee_zeit";
if ( $test == "yes" )
   $wdcurl .= "&test=true";

if ( apirequest($wdcuser, $wdcpass, $wdchost, $wdcport, $wdctimeout, $wdcurl) )
{
	   IPS_LogMessage("WETTER.COM", "Meldung: ".
			$temperatur ."°C, ".
			$feuchtigkeit ."% Luftfeuchtigkeit.");
}
?>

Hausautomatisierung mit IP-Symcon unter Linux

18. August 2011 Keine Kommentare

Schon seit einiger Zeit nutze ich die Software IP-Symcon um alle Komponenten meiner Hausautomatisierung zusammenzufassen und zentral zu verwalten. Die Basis ist bisher das System Homematic von eQ-3 geblieben.

IP-Symcon ist als komplett autarkes Smarthome-System anzusehen. Es werden lediglich Schnittstellen bzw. Module zu anderen Lösungen bereitgestellt auf die via API-Calls zugegriffen werden kann.

Leider benötigt die Installation bzw. der Betrieb der Software ein Windows-Betriebssystem als Basis. Mit Wine ist jedoch eine Anwendung auf einer Linux-Plattform möglich.

Mit folgender Anleitung zeige ich die Installation/den Betrieb der Software unter Debian mit Wine in der Version 1.0.1-3.1. Dieses Release wird bei Debian 6.0 mitgeliefert. Daher ist keine eigene Kompilierung einer Wine-Version notwendig.

  • Installieren von Wine und Xvfb als root User.
    apt-get install wine xvfb
  • Die IP-Symcon zukünftig unter User-Rechten laufen soll, werden folgende Schritte als User ausgeführt.
  • Starten von winecfg um eine Standardkonfiguration anzulegen.
  • Herunterladen von Winetricks (zusätzliche Libs/Programme für die Wine-Installation).
    wget http://wiki.winehq.org/winetricks
  • Installation einiger Winetricks-Addons:
    ./winetricks msxml3
    ./winetricks gecko
    ./winetricks corefonts
    

    Entsprechende Pakete werden nun heruntergeladen und installiert.

  • Nun wird ins Zielverzeichnis der IP-Symcon-Installation das Setup heruntergeladen.
    wget http://www.ipsymcon.de/live2/update.php?action=dllive -O ips_live.exe
  • Zum Starten der IP-Symcon-Installation sollte, wenn die Installation via SSH geschieht, lokal ein X-Server laufen und in der aktuellen SSH-Session ein X-Forwarding aktiv sein.
  • Das Setup wird über die heruntergeladene Datei ips_live.exe gestartet:
    wine ips_live.exe

    Nach der Installation den Haken zum automatischen Start deaktivieren.

  • Wichtig ist nun das Einspielen der Lizenz in die IP-Symcon Software:
    wine ips_tray.exe /activate email@domain license.txt

    Die Datei license.txt muß im aktuellen Verzeichnis liegen.

  • Folgendes Script startet eine IP-Symcon Instanz. In meinem Fall liegt IP-Symcon im Verzeichnis /opt/IP-Symcon.
    #!/bin/bash
    rm -rf /opt/IP-Symcon/logs/*
    
    echo "Starting IP-Symcon..."
    Xvfb -ac :5 2>/dev/null 1>/dev/null &
    export DISPLAY=:5
    /usr/bin/wine /opt/IP-Symcon/ips.exe 1>/dev/null 2>&1 &
    echo "Done!"
    

    Ein entsprechendes Script zum Stoppen sieht wie folgt aus:

    #!/bin/bash
    
    echo "Stopping IP-Symcon..."
    pkill ips.exe
    pkill wineconsole.exe
    pkill winedevice.exe
    pkill wineboot.exe
    pkill services.exe
    pkill wineserver
    pkill explorer.exe
    pkill -9 Xvfb
    echo "Done!"
    

    Xvfb wird benötigt um Wine einen laufenden X-Server zu bieten. Eine Interaktion via lokaler GUI ist jedoch nicht nötigt.

Hinweis:
Der Zugriff auf die Weboberfläche von IP-Symcon ist bei einer Unix-Installation ausschließlich über https möglich!

Die intelligente Warmwasser Zirkulationspumpe

25. August 2009 Keine Kommentare

Ein weiteres Projekt, welches ich mit der Homematic Haussteuerung realisiert habe, ist der Aufbau einer intelligenten Warmwasser Zirkulationspumpen-Steuerung.

Ich habe im Haus eine Vaillant Gas-Brennwerttherme verbaut. Da diese an eine Solaranlage mit Warmwasseraufbereitung und Heizungsunterstützung gekoppelt ist, kommt der Solarsystemregler auroMATIC 620/2 zum Einsatz. Nun ist mir beim studieren der Anleitung aufgefallen, dass diese bereits rudimentär eine intelligente Steuerung der Warmwasser Zirkulationspumpe auf Zeitbasis unterstützt, und somit die entsprechende Verkabelung vorhanden ist.

Man sieht deutlich die Verknüpfung des Schaltaktors mit dem auroMATIC Regler

Der weitere Schritt liegt nun eigentlich sehr nahe. Ich habe die Zirkulationspumpe von der Steuerung abgeklemmt und an einen Unterputz Schaltaktor des Homematic Systems angeschlossen. Desweiteren habe ich im Haus in jedem Zimmer, wo Warmwasser “gezogen” werden kann, den Innen-Bewegungsmelder von Homematic installiert. Sobald eine Bewegung erkannt wird, sendet der Bewegungsmelder eine Nachricht an die Homematic Zentrale, die wiederum die Warmwasser Zirkulationspumpe bei einschaltet. Damit ist schon ein wichtiger Meilenstein erreicht. Die Zirkulationspumpe läuft nur noch, wenn sich wirklich jemand in einem Raum mit Warmwasseranschluß befindet.

Das ganze kann jedoch noch optimiert werden. Nachdem die Zirkulationspumpe eine Zeit lange gelaufen ist, befindet sich ausreichend Warmwasser in der Z-Leitung und eigentlich müsste die Pumpe mehrere Minuten nicht mehr laufen. Im obigen Aufbau wird diese jedoch bei jeder Bewegung eingeschaltet. Hier kommt nun eine entsprechende Logik zum Einsatz.

Die Meldung eines Bewegungsmelders wird mit einem Programm auf der Zentrale gekoppelt welches:

  • die Pumpe für 5 Minuten einschaltet (und danach wieder deaktiviert)
  • eine Sperre für 45 Minuten definiert, in der die Pumpe nicht laufen soll

Das kann ganz einfach mit den Verzögerungsfunktionen der Homematic-Steuerung im Programmablauf realisiert werden. Es wird lediglich eine Systemvariable benötigt, die die Sperre global anzeigt.

Die Verknüpfung ist im Ablauf dann ganz einfach: Sobald die Variable Sperre WWZP auf TRUE steht, wird die Pumpe nicht eingeschaltet. Nach 45 Minuten wird die Variable automatisch vom System durch eine Verzögerungsfunktion auf FALSE gesetzt, und die Pumpe wird bei der nächsten BEWEGUNG ERKANNT Meldung eingeschaltet.

Die Werte von 5 Minuten Laufzeit und 45 Minuten Sperre sollten pro Haushalt überprüft werden, da man nicht pauschal sagen kann, wie lange das Warmwasser benötigt, um die Z-Leitung zu füllen (je nach Leitungslänge). Auch kann nicht pauschal definiert werden wie lange das Warmwasser wirklich “warm” in der Z-Leitung verbleibt. Das hängt von der Isolierung und der Gebäudedämmung ab. Mit den obigen Werten fahre ich in unserem KFW60 Haus sehr gut.

In meinem Fall habe ich 3 Bewegungsmelder über ein Programm mit dem Aktor verknüpft

Fazit:
Mit dieser Realisierung über das Homematic-System lässt sich über ein oder mehrer Jahre wirklich viel Geld sparen. Zirkulationspumpen und Z-Leitungen sind eine feine Sache. Jedoch sollte die Steuerung dahinter ein wenig intelligent sein um nicht sinnlose Laufzeiten zu haben und Energie zu verschwenden.

Siehe dazu auch: http://de.wikipedia.org/wiki/Zirkulationspumpe

Homematic Tür- und Fensterkontakt

12. Juli 2009 Keine Kommentare

Es hat ein weiterer sinnvoller Sensor der Homematic Haussteuerung Einzug gehalten. Der Tür- und Fensterkontakt Funk-Sensor ist vielseitig einsetzbar. Sei es zur Einbruchsüberwachung, für die Statusmeldung über offene Fenster/Türen oder als Sicherheit, daß der automatische Rolladenverschluß keine Person versehentlich ausschließt.

Herleitung:
Ich habe einen Programmablauf erstellt, der alle Rolläden zur Uhrzeit des Sonnenuntergangs automatisch herunterfährt. Nun kann es jedoch vorkommen, daß die Terrassentür offen steht, und eine Person sich außerhalb des Gebäudes befindet. Ein automatischer Verschluß des Rolladens wäre in diesem Fall nicht gewünscht. Nun habe ich den genannten Tür- und Fensterkontakt mit der Rolladensteuerung so kombiniert, daß vor dem Runterfahren der Jalousie der Status des Kontaktes überprüft wird. Sollte dieser “offen” melden, dann wird das Herunterfahren in diesem Moment für dieses Fenster verhindert. Das versehentliche “ausschließen” wird somit verhindert.

Der Tür- und Fensterkontakt wird am festen Rahmen und am beweglichen Teil des Fensters angebracht

Der Status einer Tür bzw. eines Fenster ist im Webinterface der Homematic CCU leicht erkennbar

Zentrale Steuerung der Jalousien

11. Juli 2009 Keine Kommentare

Das erste Großprojekt mit der Homematic Funkbus-Lösung war die Einbindung der Rolladensteuerung. Gut, daß wir in der Hausbauphase tiefe Unterputzdosen verbaut haben. Somit war der nachträgliche Einbau der Funkaktoren ein Kinderspiel.

Die am Aktor angeschlossenen Taster schalten autark von der Homematic Basisstation. Daher ist eine manuelle und automatische Steuerung der Rolläden kein Problem.

Zu sehen ist die Unterputzdose mit dem hinzugefügten Aktor und dem herausgenommenen Taster

Die Steuerungs- und Statusoptionen der Rolläden werden im Webinterface sehr übersichtlich angezeigt

Hausautomation – Die Basis (Homematic CCU)

11. Juli 2009 Keine Kommentare

Schon sehr lange Zeit spiele ich mit dem Gedanken, viele Prozesse im Haus zu automatisieren. Daher habe ich mir ans Herz gefasst und das Projekt “Hausautomation” ins Leben gerufen.

Von Moeller, Merten und Co über EnOcean bis hin zur Homematic stehen viele Lösungen zum Thema Automatisierung parat.

Ich hatte ein paar Anforderungen, die vom System schon von Grund auf erfüllt werden sollten:

  • Die Lösung sollte eine Basisstation mitbringen, damit ich auf den einsatz eines zusätzlichen Servers verzichten kann.
  • Das System muß auf einem Funkbus basieren. Optional sollte auch eine Verdrahtung möglich sein.
  • Verschlüsselt und ausfallsicher sollte die Protokollschicht des Busses in jedem Fall sein.
  • Die Aktoren und Sensoren müssen sich in einem bezahlbaren Bereich bewegen.
  • Eine bestehende Elektroinstallation muß durch die Komponenten des Systems einfach und schnell erweitert werden können.

Nach vielen Überlegungen und reichlichem hin und her ist die Entscheidung auf die Homematic von ELV gefallen. Alle oben genannten Anforderungen werden erfüllt, und auch das Bauchgefühl, welches zusätzlich sehr wichtig ist, stimmt.

Nach dem öffnen des Kartons begrüßte mich, in diesem Fall, eine weiße Homematic CCU Basisstation.

Natürlich konnte ich es kaum erwarten meine Finger an die Software der Station zu bekommen. Daher war es auch kein Wunder, daß die Basis im Handumdrehen in Betrieb genommen wurde. Alle Einstellungen können wirklich sehr komfortabel im Webinterface vorgenommen werden.

Homematic CCU - Systemsteuerung

Nachdem meine Grundkonfiguration stand, habe ich sicherheitshalber noch letzte Blicke in die Anleitung geworfen, ob nicht eventuell sicherheitsrelevante Einstellungen vergessen wurden. Das war nicht der Fall, und somit kann nun die Installation von Aktoren und Sensoren im Haus beginnen.