<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Optolink &#8211; bubuxblog</title>
	<atom:link href="https://www.bubuxblog.de/tag/optolink/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bubuxblog.de</link>
	<description></description>
	<lastBuildDate>Fri, 08 Mar 2019 17:01:49 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Viessmann Heizung auslesen</title>
		<link>https://www.bubuxblog.de/viessmann-heizung-auslesen/</link>
					<comments>https://www.bubuxblog.de/viessmann-heizung-auslesen/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Sun, 27 Apr 2014 08:29:06 +0000</pubDate>
				<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[Heizung]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Optolink]]></category>
		<category><![CDATA[Raspberry PI]]></category>
		<category><![CDATA[RaspberryPI]]></category>
		<category><![CDATA[Viessmann]]></category>
		<category><![CDATA[Vitotronic]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=423</guid>

					<description><![CDATA[Wir haben eine Viessmann Vitodens 200-W Gastherme inkl. Solaranlage die über eine Vitotronic verfügt. Die Vitotronic hat eine optische Schnittstelle (Optolink) über die z.B. ein Heizungsmonteur verschiedene Parameter der Anlage auslesen und auch setzen kann. Dafür benötigt man normalerweise den entsprechenden Lesekopf und eine passende Software der Fa. Viessmann. Auf https://github.com/openv/openv/ gibt es aber auch [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Wir haben eine Viessmann Vitodens 200-W Gastherme inkl. Solaranlage die über eine Vitotronic verfügt. Die Vitotronic hat eine optische Schnittstelle (Optolink) über die z.B. ein Heizungsmonteur verschiedene Parameter der Anlage auslesen und auch setzen kann.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/04/vitotronic.jpg"><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-434" src="http://blog.bubux.de/wp-content/uploads/2014/04/vitotronic.jpg" alt="vitotronic" width="570" height="250" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/04/vitotronic.jpg 570w, https://www.bubuxblog.de/wp-content/uploads/2014/04/vitotronic-300x131.jpg 300w" sizes="(max-width: 570px) 100vw, 570px" /></a></p>
<p>Dafür benötigt man normalerweise den entsprechenden Lesekopf und eine passende Software der Fa. Viessmann.</p>
<p>Auf <a href="https://github.com/openv/openv/" target="_blank" rel="noopener noreferrer">https://github.com/openv/openv/</a> gibt es aber auch eine andere Lösung! Die Jungs dort haben viel Arbeit in die &#8222;Entschlüsselung&#8220; des Viessmann-Protokolls gelegt und verschiedene Anwendungen zur einfachen Kommunikation mit der Heizung entwickelt.</p>
<p><span style="color: #3366ff;">An dieser Stelle nochmal meinen Dank an dieses hervorragende Forum!</span></p>
<p>Unter den verschiedenen Bauanleitungen für die Leseköpfe habe ich mich für die <a href="https://github.com/openv/openv/wiki/Bauanleitung-USB" target="_blank" rel="noopener noreferrer">USB-Variante</a> entschieden. Mein Raspi hat ja noch einen USB-Anschluss frei und kann neben der <a title="Raspberry Pi – eHZ auslesen" href="http://blog.bubux.de/?p=89">Stromzählung</a> und der <a title="Raspberry PI – Heimautomatisierung mit COC, Homematic &amp; FHEM" href="http://blog.bubux.de/?p=153">Homematic-Steuerung</a> auch noch die Heizung auslesen. Nicht das ihm langweilig wird&#8230;</p>
<p>Das Platinchen muss über die V-Ausfräsung hinter der Klappe befestigt werden. Das habe ich dann &#8222;professionell&#8220; mit einem Papp-V und Tape erledigt. Hält!!</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/04/platine_frei.jpg"><img decoding="async" class="alignnone size-large wp-image-437" src="http://blog.bubux.de/wp-content/uploads/2014/04/platine_frei-1024x768.jpg" alt="platine_frei" width="604" height="453" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/04/platine_frei-1024x768.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2014/04/platine_frei-300x225.jpg 300w" sizes="(max-width: 604px) 100vw, 604px" /></a></p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/04/platine_tape.jpg"><img decoding="async" class="alignnone size-large wp-image-438" src="http://blog.bubux.de/wp-content/uploads/2014/04/platine_tape-1024x768.jpg" alt="platine_tape" width="604" height="453" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/04/platine_tape-1024x768.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2014/04/platine_tape-300x225.jpg 300w" sizes="(max-width: 604px) 100vw, 604px" /></a></p>
<p><span style="color: #0000ff;">Ich nutze den</span> <a href="https://github.com/openv/openv/" target="_blank" rel="noopener noreferrer">vcontrold</a> <span style="color: #0000ff;">und da</span> <a href="https://github.com/openv/openv/wiki/vcontrold-mit-Raspberry-Pi" target="_blank" rel="noopener noreferrer">hier </a><span style="color: #0000ff;">eine perfekte Anleitung zur Installation dieser Komponente auf dem Raspberry PI beschrieben ist, will ich auf die Installation und Konfiguration des Daemons auch nicht näher eingehen.</span></p>
<p>Der Daemon bietet eine Schnittstelle die z.B. mittels Telnet abgefragt werden kann. Ich nutze die Template-Möglichkeit (wird z.B. <a href="https://github.com/openv/openv/wiki/cygwin" target="_blank" rel="noopener noreferrer">hier </a>erklärt) um mehrere Heizungswerte auszulesen und die gelieferten Werte weiter verarbeiten zu können. Dazu wird bei mir folgendes Script (<em>update.sh)</em> alle 6 Minuten per Cron aufgerufen:</p>
<pre class="">if [ !$(pgrep vclient) ]
then vclient -h localhost:3001 -f /opt/vcontrold/vc-commands.txt -t /opt/vcontrold/update.tmpl -x /opt/vcontrold/update.sh
fi</pre>
<p>Der Eintrag in der Crontab sieht dann folgendermaßen aus:</p>
<pre class="">*/6 * * * * sudo /opt/vcontrold/update.sh</pre>
<p>Die Datei <em>vc-commands.txt</em> enthält eine Liste alle Werte die ausgelesen werden sollen. Diese Werte müssen auch in der &#8222;<a href="https://github.com/openv/openv/wiki/Vorschlag__Vito-Masterdateien" target="_blank" rel="noopener noreferrer">vito.xml</a>&#8220; definiert sein.</p>
<pre>getTempA
getTempWWist
getTempKist
getTempKol
getTempSpu
getBrennerStarts
getBrennerStunden1
getSolarStunden
getSolarLeistung
getPumpeStatusSolar
...</pre>
<p>In der Datei <em>update.tmpl </em>werden die zurück gelieferten Werte in Variablen geschrieben und können dann beliebig weiter verarbeitet werden (z.B. eine Prüfung ob ein Wert zurück gegeben wurde).</p>
<pre class="">if&nbsp; [ "x$E1" != x ]; then
     echo -n `date`&nbsp; &gt;&gt;/tmp/vc-err.txt
     echo "es ist ein Fehler aufgetreten: $C1:$E1" &gt;&gt;/tmp/vc-err.txt
     exit 1;
fi
if&nbsp; [ "x$E2" != x ]; then
     echo -n `date`&nbsp; &gt;&gt;/tmp/vc-err.txt
     echo "es ist ein Fehler aufgetreten: $C2:$E2" &gt;&gt;/tmp/vc-err.txt
     exit 1;
fi
...</pre>
<p>Auf der openv-Webseite wird oft eine <a href="http://openv.wikispaces.com/Datenauswertung+mit+RRDB" target="_blank" rel="noopener noreferrer">rrdb</a>&nbsp;zur Auswertung der Daten genutzt. Da ich mich mit einer rrdb nicht wirklich gut auskenne, schreibe ich die Daten lieber in eine MySQL-Datenbank.</p>
<h3>Tabellenstruktur</h3>
<p>Hierfür habe ich folgende Tabellen in der MySQL-Datenbank angelegt:</p>
<p>Tabellenstruktur für Tabelle <strong>brenner</strong></p>
<pre>CREATE TABLE IF NOT EXISTS `brenner` (
 `timestamp` datetime NOT NULL,
 `brennerstarts` float NOT NULL,
 `brennerstunden` float NOT NULL,
 `brennerstatus` int(11) NOT NULL,
 KEY `timestamp` (`timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;</pre>
<p>Tabellenstruktur für Tabelle <strong>solar</strong></p>
<pre>CREATE TABLE IF NOT EXISTS `solar` (
 `timestamp` datetime NOT NULL,
 `solarstunden` float NOT NULL,
 `solarleistung` float NOT NULL,
 `solarpumpe` int(11) NOT NULL,
 KEY `timestamp` (`timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
</pre>
<p>Tabellenstruktur für Tabelle&nbsp;<strong>temperaturen</strong></p>
<pre>CREATE TABLE IF NOT EXISTS `temperaturen` (
 `timestamp` datetime NOT NULL,
&nbsp; `aussentemperatur` float NOT NULL,
&nbsp; `warmwasser` float NOT NULL,
&nbsp; `speicher_unten` float NOT NULL,
&nbsp; `kollektor` float NOT NULL,
&nbsp; `vorlaufsolltemperaturM2` float NOT NULL,
&nbsp; KEY `timestamp` (`timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;</pre>
<p>Tabellenstruktur für Tabelle <strong>snapshot</strong></p>
<pre>CREATE TABLE IF NOT EXISTS `snapshot` (
 `timestamp` datetime NOT NULL,
 `brennerstatus` float NOT NULL,
 `brennerstarts` float NOT NULL,
 `brennerstunden` float NOT NULL,
 `solarstunden` float NOT NULL,
 `solarleistung` float NOT NULL,
 `aussentemperatur` float NOT NULL,
 `warmwasser` float NOT NULL,
 `speicher_unten` float NOT NULL,
 `kollektor` float NOT NULL,
 `kesseltemperatur` float NOT NULL,
 `vorlauftemperaturM2` float NOT NULL,
 `vorlaufsolltemperaturM2` float NOT NULL,
 `raumsolltemperaturM1` float NOT NULL,
 `raumsolltemperaturM2` float NOT NULL,
 `raumsolltemperaturredM1` float NOT NULL,
 `raumsolltemperaturredM2` float NOT NULL,
 `warmwassersoll` float NOT NULL,
 `kesseltemperatursoll` float NOT NULL,
 `pumpestatusM1` float NOT NULL,
 `pumpestatusSP` float NOT NULL,
 `pumpestatussolar` float NOT NULL,
 `statusstoerung` varchar(100) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL,
 `systemzeit` varchar(100) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL,
 `error0` varchar(500) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL,
 `BetriebArt` varchar(20) NOT NULL,
 `BetriebArtM2` varchar(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;</pre>
<p>Die snapshot-Tabelle soll keine Historie enthalten, sondern immer nur eine Zeile mit den alle zwei Minuten ausgelesen Werten. Das hat sich nach ein paar Monaten Betrieb als sinnvoll erwiesen, da der Raspberry doch ganz schön ackern muss um aus einer Tabelle mit &gt; 150.000 Zeilen (und wachsend) die aktuellen Werte auf der Webseite anzuzeigen.</p>
<h3>Werte in Datenbank speichern</h3>
<p>In oben beschriebene Datei <em>update.tmpl</em> werden dann die Werte genutzt, um sie in der MySQL-Datenbank zu speichen. Dazu nutze ich den Aufruf des Kommandozeilentools &#8222;mysql&#8220; welches bei der Installation der Datenbank enthalten ist.</p>
<p>Hier die drei Aufrufe mit INSERT-Statements für die Temperatur-, die Solar und die Brennerdaten. In $1, $2 , $3, &#8230; stehen die Werte gemäß der Reihenfolge der <em>vc-commands.txt</em>.</p>
<pre>mysql --user= --password=  -e "INSERT INTO temperaturen (timestamp,aussentemperatur,warmwasser,kollektor,speicher_unten,vorlaufsolltemperaturM2) values (CURRENT_TIMESTAMP,$1,$2,$4,$5,$13);"</pre>
<pre>mysql --user= --password=  -e "INSERT INTO solar (timestamp,solarstunden,solarleistung) values (CURRENT_TIMESTAMP,$9,$10);"
</pre>
<pre>mysql --user= --password=  -e "INSERT INTO brenner (timestamp,brennerstarts,brennerstunden,brennerstatus) values (CURRENT_TIMESTAMP,$6,$7,IFNULL('$19',0));"
</pre>
<p>Für die Snapshot-Tabelle nutze ich ein <em>Update</em>-Statement da diese Tabelle immer nur eine Zeile enthalten soll.</p>
<pre>mysql --user= --password=  -e "UPDATE snapshot SET timestamp=CURRENT_TIMESTAMP,aussentemperatur=$1,warmwasser=$2,kollektor=$4,speicher_unten=$5,solarstunden=$9,solarleistung=$10,brennerstarts=$6,brennerstunden=$7,kesseltemperatur=$12,vorlauftemperaturM2=$13,vorlaufsolltemperaturM2=$14,raumsolltemperaturM1=$15,raumsolltemperaturM2=$16,raumsolltemperaturredM1=$17,raumsolltemperaturredM2=$18,brennerstatus=IFNULL('$19',0),warmwassersoll=$20,kesseltemperatursoll=$21,pumpestatusM1='$22',pumpestatussp='$23',pumpestatussolar='$24',statusstoerung='$R25',systemzeit='',error0='$R27',BetriebArt='$R29',BetriebArtM2='$R30';"
</pre>
<p>Wenn der Cron eingerichtet ist, sollte die Datenbank alle 6 Minuten mit den ausgelesenen Werten gefüllt werden.</p>
<h3>Anzeige der Daten</h3>
<p>Die Anzeige der Daten erfolgt mittels Webseite und PHP-Script. Auf einer Übersichtsseite lese ich die Snapshot-Tabelle aus. Das geht Dank der Snapshot-Tabelle auch recht schnell.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/04/temp_uebersicht.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-426" src="http://blog.bubux.de/wp-content/uploads/2014/04/temp_uebersicht.jpg" alt="temp_uebersicht" width="956" height="665" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/04/temp_uebersicht.jpg 956w, https://www.bubuxblog.de/wp-content/uploads/2014/04/temp_uebersicht-300x208.jpg 300w" sizes="auto, (max-width: 956px) 100vw, 956px" /></a></p>
<p>Auf einer weiteren Seite werden zusätzliche Werte aus der Snapshot-Tabelle angezeigt.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/04/temp_details.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-425" src="http://blog.bubux.de/wp-content/uploads/2014/04/temp_details.jpg" alt="temp_details" width="957" height="665" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/04/temp_details.jpg 957w, https://www.bubuxblog.de/wp-content/uploads/2014/04/temp_details-300x208.jpg 300w" sizes="auto, (max-width: 957px) 100vw, 957px" /></a></p>
<p>Weil die Erstellung des Graphen nicht auf der Snapshot-Tabelle basiert, dauerte die Anzeige dieser Seite auch immer recht lange. Daher wird die PNG-Grafik für den Graph nun viertelstündlich per Script erstellt und nur noch das fertige Bild in der Webseite angezeigt.</p>
<p>Hier der Crontab-Eintrag für das Script zur Erstellung der Grafik:</p>
<pre>*/15 * * * * sudo php /var/www/heizung/update_graph.php &amp;&gt; /dev/null</pre>
<p>und das Script selber. Zur Erstellung des Graphen nutze ich <a href="http://www.pchart.net/" target="_blank" rel="noopener noreferrer">pChart</a>.</p>
<p>[cclN_php]<br><!--?
include("class/pData.class.php");
include("class/pDraw.class.php");
include("class/pImage.class.php");

$mysqlhost="";
$mysqluser="";
$mysqlpwd="";
$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die ("Verbindungsversuch fehlgeschlagen");
$mysqldb="";
mysql_select_db($mysqldb,$connection) or die("Konnte die Datenbank nicht waehlen.");

$zeit_tmp="";
$sql = "SELECT aussentemperatur,warmwasser,speicher_unten,kollektor,vorlaufsolltemperaturM2,hour(timestamp) FROM temperaturen WHERE DATE_ADD(timestamp, INTERVAL 72 HOUR) -->= NOW()&#8220;;<br>$query = mysql_query($sql) or die(&#8222;Anfrage nicht 1 erfolgreich&#8220;);<br>while ($wert = mysql_fetch_array($query)) {<br>$aussentemperatur[]=$wert[0];<br>$warmwasser[]=$wert[1];<br>$speicher_unten[]=$wert[2];<br>$kollektor[]=$wert[3];<br>$vorlauf[]=$wert[4];<br>if ($zeit_tmp==$wert[5])<br>{ $zeit_tmp=NULL; }<br>else<br>{ $zeit_tmp=$wert[5]; }<br>$zeit[]=$zeit_tmp;<br>}<br>mysql_close($connection);</p>
<p>$MyData = new pData();<br>$MyData-&gt;addPoints($aussentemperatur,&#8220;TempA&#8220;);<br>$MyData-&gt;addPoints($warmwasser,&#8220;TempW&#8220;);<br>$MyData-&gt;addPoints($speicher_unten,&#8220;TempS&#8220;);<br>$MyData-&gt;addPoints($kollektor,&#8220;TempK&#8220;);<br>$MyData-&gt;addPoints($vorlauf,&#8220;TempV&#8220;);<br>$MyData-&gt;addPoints($zeit,&#8220;Labels&#8220;);</p>
<p>$MyData-&gt;setSerieWeight(&#8222;TempA&#8220;,5);<br>$MyData-&gt;setSerieWeight(&#8222;TempS&#8220;,5);<br>$MyData-&gt;setSerieWeight(&#8222;TempW&#8220;,5);<br>$MyData-&gt;setSerieWeight(&#8222;TempK&#8220;,5);<br>$MyData-&gt;setSerieWeight(&#8222;TempV&#8220;,5);</p>
<p>$MyData-&gt;setSerieOnAxis (&#8222;TempA&#8220;, 0);<br>$MyData-&gt;setSerieOnAxis (&#8222;TempS&#8220;, 0);<br>$MyData-&gt;setSerieOnAxis (&#8222;TempK&#8220;, 0);<br>$MyData-&gt;setSerieOnAxis (&#8222;TempW&#8220;, 0);<br>$MyData-&gt;setSerieOnAxis (&#8222;TempK&#8220;, 0);<br>$MyData-&gt;setAxisName(0,&#8220;Temperatur&#8220;);</p>
<p>$MyData-&gt;setSerieDescription(&#8222;Labels&#8220;,&#8220;Uhrzeit&#8220;);<br>$MyData-&gt;setSerieDescription(&#8222;TempA&#8220;,&#8220;Aussentemperatur&#8220;);<br>$MyData-&gt;setSerieDescription(&#8222;TempS&#8220;,&#8220;Speicher&#8220;);<br>$MyData-&gt;setSerieDescription(&#8222;TempW&#8220;,&#8220;Warmwasser&#8220;);<br>$MyData-&gt;setSerieDescription(&#8222;TempK&#8220;,&#8220;Kollektor&#8220;);<br>$MyData-&gt;setSerieDescription(&#8222;TempV&#8220;,&#8220;Vorlauf&#8220;);<br>$MyData-&gt;setAbscissa(&#8222;Labels&#8220;);</p>
<p>$serieSettings = array(&#8222;R&#8220;=&gt;0,&#8220;G&#8220;=&gt;0,&#8220;B&#8220;=&gt;200);<br>$MyData-&gt;setPalette(&#8222;TempA&#8220;,$serieSettings);<br>$serieSettings = array(&#8222;R&#8220;=&gt;200,&#8220;G&#8220;=&gt;0,&#8220;B&#8220;=&gt;0);<br>$MyData-&gt;setPalette(&#8222;TempS&#8220;,$serieSettings);<br>$serieSettings = array(&#8222;R&#8220;=&gt;0,&#8220;G&#8220;=&gt;200,&#8220;B&#8220;=&gt;0);<br>$MyData-&gt;setPalette(&#8222;TempW&#8220;,$serieSettings);<br>$serieSettings = array(&#8222;R&#8220;=&gt;0,&#8220;G&#8220;=&gt;100,&#8220;B&#8220;=&gt;100);<br>$MyData-&gt;setPalette(&#8222;TempK&#8220;,$serieSettings);<br>$serieSettings = array(&#8222;R&#8220;=&gt;100,&#8220;G&#8220;=&gt;100,&#8220;B&#8220;=&gt;100);<br>$MyData-&gt;setPalette(&#8222;TempV&#8220;,$serieSettings);</p>
<p>$myPicture = new pImage(1205,330,$MyData);<br>$myPicture-&gt;Antialias = FALSE;<br>$myPicture-&gt;drawRectangle(0,0,1204,329,array(&#8222;R&#8220;=&gt;111,&#8220;G&#8220;=&gt;143,&#8220;B&#8220;=&gt;204));<br>$myPicture-&gt;setFontProperties(array(&#8222;FontName&#8220;=&gt;&#8220;/var/www/heizung/fonts/verdana.ttf&#8220;,&#8220;FontSize&#8220;=&gt;11));<br>$myPicture-&gt;drawText(200,35,&#8220;Temperaturen der letzten 3 Tage&#8220;,array(&#8222;FontSize&#8220;=&gt;12,&#8220;Align&#8220;=&gt;TEXT_ALIGN_BOTTOMMIDDLE));<br>$myPicture-&gt;setFontProperties(array(&#8222;FontName&#8220;=&gt;&#8220;/var/www/heizung/fonts/verdana.ttf&#8220;,&#8220;FontSize&#8220;=&gt;7));<br>$myPicture-&gt;setGraphArea(50,40,1155,300);<br>$labelSkip = floor(count($zeit)/48);<br>$scaleSettings = array(&#8222;XMargin&#8220;=&gt;10,&#8220;YMargin&#8220;=&gt;10,&#8220;Floating&#8220;=&gt;TRUE,&#8220;GridR&#8220;=&gt;180,&#8220;GridG&#8220;=&gt;180,&#8220;GridB&#8220;=&gt;180,&#8220;DrawSubTicks&#8220;=&gt;FALSE,&#8220;CycleBackground&#8220;=&gt;TRUE,&#8220;ScaleSpacing&#8220;=&gt;10,&#8220;LabelSkip&#8220;=&gt;$labelSkip,&#8220;DrawYLines&#8220;=&gt;array(0));<br>$myPicture-&gt;drawScale($scaleSettings);<br>$myPicture-&gt;drawLegend(600,20,array(&#8222;Style&#8220;=&gt;LEGEND_NOBORDER,&#8220;Mode&#8220;=&gt;LEGEND_HORIZONTAL));<br>$myPicture-&gt;Antialias = FALSE;<br>$myPicture-&gt;setShadow(TRUE,array(&#8222;X&#8220;=&gt;1,&#8220;Y&#8220;=&gt;1,&#8220;R&#8220;=&gt;0,&#8220;G&#8220;=&gt;0,&#8220;B&#8220;=&gt;0,&#8220;Alpha&#8220;=&gt;10));<br>$myPicture-&gt;drawLineChart(array(&#8222;DisplayValues&#8220;=&gt;FALSE,&#8220;DisplayColor&#8220;=&gt;DISPLAY_AUTO));<br>$myPicture-&gt;Render(&#8222;/var/www/heizung/tmp/temperaturen.png&#8220;);<br>?&gt;<br>[/cclN_php]</p>
<p>Hier noch eine Übersichtsseite verschiedener Durchschnittswerte. Diese werden direkt mit Aufruf der Seite generiert was entsprechend lange dauert. Diese Seite schaue ich aber nicht so oft an&#8230;</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/04/temp_details2.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-427" src="http://blog.bubux.de/wp-content/uploads/2014/04/temp_details2.jpg" alt="temp_details2" width="957" height="668" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/04/temp_details2.jpg 957w, https://www.bubuxblog.de/wp-content/uploads/2014/04/temp_details2-300x209.jpg 300w" sizes="auto, (max-width: 957px) 100vw, 957px" /></a></p>
<p>Viel Spaß mit dem Auslesen der Viessmann-Heizung!<br>Chris</p>


<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/viessmann-heizung-auslesen/feed/</wfw:commentRss>
			<slash:comments>70</slash:comments>
		
		
			</item>
	</channel>
</rss>
