{"id":156,"date":"2013-09-22T16:41:28","date_gmt":"2013-09-22T15:41:28","guid":{"rendered":"http:\/\/www.kraftonline.org\/?page_id=156"},"modified":"2016-02-11T14:15:03","modified_gmt":"2016-02-11T13:15:03","slug":"version-2-ab-2013","status":"publish","type":"page","link":"http:\/\/www.kraftonline.org\/?page_id=156","title":{"rendered":"Poolsteuerung &#8211; Version 2 &#8211; seit 2013 (mit Raspberry PI)"},"content":{"rendered":"<p style=\"text-align: center;\">&#8212; letzte \u00dcberarbeitung der Programmscripte im Februar 2016 &#8212;<br \/>\nAnpassung der Log Dateien und \u00dcberspielung der Live Daten auf diese Webseite (Aktualisierung alle 10 Minuten)<\/p>\n<p style=\"text-align: center;\">Nach dem die Version 1 mit der C-Control im Sommer 2013 einem Blitzschlag zum Opfer gefallen war, musste also was neues her.<br \/>\nDie neue L\u00f6sung wurde auf Basis des RASPBERRY PI verwirklicht. Am grunds\u00e4tzlichen Aufbau der Pooltechnik hat sich dabei nichts ge\u00e4ndert und ist <a href=\"http:\/\/www.kraftonline.org\/?page_id=131\">hier <\/a>dokumentiert.<br \/>\nEine \u00c4nderung an der Technik gab es dann aber doch, und das ist die Position des Sensors f\u00fcr die Wassertemperatur. Dieser befindet sich jetzt wirklich im Pool, da der lange Kabelweg den Digitalen Sensoren nichts mehr ausmacht. Zudem gibt es die 1-Wire Sensoren extra f\u00fcr solche Anwendungen. Auch nach fast drei Jahren <strong>im<\/strong> Wasser arbeitet der Sensor immer noch einwandfrei.<\/p>\n<h4 style=\"padding-left: 30px;\">Die\u00a0aktuellen &#8222;live&#8220; Daten meiner Steuerung sind hier zu finden: <a title=\"Poolstatus Kraft\" href=\"http:\/\/www.kraftonline.org\/?page_id=479\" target=\"_blank\">Poolstatus Kraft<\/a><\/h4>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: left;\"><strong>WARNUNG:<\/strong><br \/>\nDer Nachbau dieser Steuerung ist nicht ganz so einfach wie die Steuerung mit der C-Control und sollte daher nur von Fachlich versierten Personen durchgef\u00fchrt werden. Kenntnisse in Linux und leichte Programmierkenntnisse sind in jedem Fall n\u00f6tig. Im Gegensatz zu meiner alten Steuerung mit der C-Control ist hier doch einiges mehr an Fachwissen gefragt. Daher ist jeder f\u00fcr sein tun selbst Verantwortlich!<\/p>\n<h3 style=\"text-align: center;\">\u00a0Beschreibung<\/h3>\n<p>Nun, der Umbau auf den Raspberry PI war zun\u00e4chst nur als schnelle Notl\u00f6sung gedacht. Doch mit der Zeit erwies diese Entscheidung sich als gar nicht so verkehrt und der &#8222;Hunger&#8220; nach mehr wurde immer gr\u00f6\u00dfer.<br \/>\nDer Raspberry PI ist ein Einplatinencomputer der f\u00fcr diese Aufgabe eigentlich v\u00f6llig \u00fcberdimensioniert ist. Aber ich konnte damit diverse Tr\u00e4ume umsetzten, die ich schon mit der C-Control hatte. So z.B. die Anbindung an mein Heimnetz und damit die Darstellung von Live Daten auf meiner Homepage. Auch eine Protokollierung der Daten ist jetzt Problemlos m\u00f6glich.<br \/>\nPreislich ist der Raspberry PI sogar noch g\u00fcnstiger wie die C-Control, daher war diese \u201e\u00dcberdimensionierung\u201c gar nicht so schlimm. Zudem verbraucht er auch noch weniger Strom.<\/p>\n<p>Im wesentlichen besteht die Steuerung aus drei Bestandteilen:<\/p>\n<ul>\n<li>Zwei Temperaturf\u00fchlern DS18B20 f\u00fcr den 1-Wire Bus. Der Dallas 1-Wire Bus ist im Raspberry Pi Projekt sauber umgesetzt und wird dort auch gut dokumentiert.<\/li>\n<li>Eine Schaltstufe mit zwei Relais zur Steuerung der Pumpe und dem Solarventil. Dabei ist es egal ob man fertige Platinen oder ein kompletten Eigenbau verwendet. Bei mir handelt es sich um die umgebauten \u00dcberreste der C-Control. Auch solche F\u00e4lle werden in diversen Projekten gut dokumentiert. Ich w\u00e4hlte zum Anschluss der Relaisstufe die GPIO Ausg\u00e4nge 22 (Solar) und 23 (Pumpe).<\/li>\n<li>Die Software zur Steuerung. In meinem Fall ist das ein einfaches Shell Script welches als Cron Job alle 10 Minuten aufgerufen wird.<\/li>\n<\/ul>\n<p>Aber ich musste in der Basisversion auch erst mal einige Einschr\u00e4nkungen gegen\u00fcber der C-Control hinnehmen. So hatte ich kein Bedienpult und auch keine lokale Anzeige mehr zur Verf\u00fcgung. Das habe ich erst mal so hingenommen, und erst sp\u00e4ter aber \u00fcber eine Einbindung der Anzeige in einen lokalen Webserver \u00fcbernommen. Genauso habe ich dann auch das Bedienpult abgebildet.<\/p>\n<p>In 2014 ist noch ein dritter Temperatursensor dazu gekommen, der die Lufttemperatur misst.<br \/>\nDie Darstellung der Temperaturen auf einer lokalen Webseite \u00fcbernimmt zwar auch der Raspberry PI mit seinem Script.<del datetime=\"2016-02-11T12:06:25+00:00\"> F\u00fcr die Datenprotokollierung verwende ich die Software \u201eFHEM\u201c. Das hat also mit meiner Steuerung nichts weiter zu tun.<br \/>\nDer Grund f\u00fcr die Trennung dieser Aufgaben war einfach die Umsetzung des 1-Wire Interfaces in \u201eFHEM\u201c und deren Bedienung. Weiterhin ist damit auch ganz einfach eine grafische Auswertung m\u00f6glich.<\/del><br \/>\n<strong>UPDATE Feb. 2016: Die Erstellung \u00fcber FHEM habe ich wieder deaktivert, da es Leute gibt die ihre Finger nicht von fremden Systemen lassen k\u00f6nnen. Grunds\u00e4tzlich hat man also mehrmals versucht meinen FHEM zu hacken und somit komplett zu zerst\u00f6ren.<\/strong><br \/>\nAlso habe ich mich entschlossen den Server vom Netz zu nehmen und die Darstellung \u00fcber diese Webseite zu erzeugen. Dazu verwende ich jetzt &#8222;Gnuplot&#8220; in meinem Script und lade die hieraus erzeugten Grafiken als Bilder auf meine Webseite.<br \/>\nDamit hat sich auch das Script grunds\u00e4tzlich ge\u00e4ndert. Weiter unten dazu mehr.<\/p>\n<p>Ben\u00f6tigt wird also erst mal ein Raspberry PI mit einer entsprechenden Betriebssoftware. Ich verwende Raspian ( <a href=\"http:\/\/www.raspbian.org\/\">http:\/\/www.raspbian.org<\/a> ). Treiber f\u00fcr 1-Wire bringt es Serienm\u00e4\u00dfig mit, es muss nur aktiviert werden.<br \/>\nAlles wichtige zu dem Bau der Hard- und Software findet sich im Netz. Meine erste Anlaufstelle war <a href=\"https:\/\/www.raspiprojekt.de\/\">https:\/\/www.raspiprojekt.de<\/a> . Unter \u201eAnleitungen -&gt; Hardware\u201c ist eigentlich alles zu finden was zum Zusammenbau der Steuerung n\u00f6tig ist.<br \/>\nAls zus\u00e4tzliche Software zur Steuerung der GPIO Schnittstellen verwende ich \u201ewiringpi\u201c. Damit k\u00f6nnen die Aus- und Eing\u00e4nge \u00fcber Shell, Python oder \u201eC\u201c Scripte gesteuert werden.<\/p>\n<p>Damit ist der Raspberry PI komplett ausgestattet.<br \/>\nMein Shell Script sieht so aus, und ist auf dem Raspberry PI unter &#8222;\/usr\/sbin&#8220; abgelegt:<\/p>\n<blockquote><p><span style=\"font-family: 'Courier New', Courier, monospace;\">#!\/bin\/sh <\/span><br \/>\n#!\/bin\/sh<\/p>\n<p># Definition von Variablen<br \/>\nStartzeit=11<br \/>\nTempdiff=50<br \/>\nMaxtemp=280<\/p>\n<p># Einlesen der Temperaturen von den Sensoren<br \/>\n# &#8212; 00080139c5f8 -&gt; im Pool<br \/>\n# &#8212; 000801392e7e -&gt; am Dach<br \/>\n# &#8212; 0008013921df -&gt; f\u00fcr Luft<\/p>\n<p>T_Wasser=$(echo &#8222;scale=0; $(grep &#8218;t=&#8216; \/sys\/bus\/w1\/devices\/w1_bus_master1\/10-00080139c5f8\/w1_slave | awk -F &#8218;t=&#8216; &#8218;{print $2}&#8216;) \/ 100&#8220; | bc -l)<br \/>\nT_Dach=$(echo &#8222;scale=0; $(grep &#8218;t=&#8216; \/sys\/bus\/w1\/devices\/w1_bus_master1\/10-000801392e7e\/w1_slave | awk -F &#8218;t=&#8216; &#8218;{print $2}&#8216;) \/ 100&#8220; | bc -l)<br \/>\nT_Luft=$(echo &#8222;scale=0; $(grep &#8218;t=&#8216; \/sys\/bus\/w1\/devices\/w1_bus_master1\/10-0008013921df\/w1_slave | awk -F &#8218;t=&#8216; &#8218;{print $2}&#8216;) \/ 100&#8220; | bc -l)<\/p>\n<p># Ausgabe der gemessenen Temperaturen<br \/>\n# Bei Start der Scripts mit &#8222;\/usr\/sbin\/pool_stg&#8220; wird die Ausgabe in eine Log Datei geschrieben.<br \/>\n# Dabei gibt es pro Monat eine Log Datei.<br \/>\n# Diese Log Datei wird dann per Guplot zur Grafik ausgewertet.<\/p>\n<p># Solar + Pumpenschaltung<br \/>\n# Pumpe 0 = &#8222;aus&#8220;, 1 = &#8222;an&#8220;<br \/>\n# Solar 0 = &#8222;an&#8220; (Ventil geschlossen) , 1 = &#8222;aus&#8220; (Ventil offen)<br \/>\n# Solarventil ist stromlos geschlossen<br \/>\n# S_Manuell f\u00fcr Manuellen Betrieb<\/p>\n<p>S_Manuell=$(\/usr\/local\/bin\/gpio -g read 24)<\/p>\n<p>if [ &#8222;$S_Manuell&#8220; -eq &#8222;0&#8220; ];<br \/>\nthen<\/p>\n<p style=\"padding-left: 30px;\">if [ &#8222;$T_Wasser&#8220; -le &#8222;$(echo &#8222;scale=0; $T_Dach &#8211; $Tempdiff&#8220; | bc)&#8220; ];<br \/>\nthen<\/p>\n<p style=\"padding-left: 60px;\"># Pumpe + Solar an wenn Dachtemperatur ausreichend hoch<br \/>\n\/usr\/local\/bin\/gpio -g write 23 1<br \/>\nS_Pumpe=1<br \/>\n# Temperaturbegrenzung<\/p>\n<p style=\"padding-left: 90px;\">if [ &#8222;$T_Wasser&#8220; -le &#8222;$Maxtemp&#8220; ];<br \/>\nthen<\/p>\n<p style=\"padding-left: 120px;\">\/usr\/local\/bin\/gpio -g write 22 0<br \/>\nS_Solar=0.99<br \/>\n# Solar an<\/p>\n<p style=\"padding-left: 90px;\">else<\/p>\n<p style=\"padding-left: 120px;\">\/usr\/local\/bin\/gpio -g write 22 1<br \/>\nS_Solar=0.01<br \/>\n# Solar aus wegen \u00dcbertemperatur<\/p>\n<p style=\"padding-left: 90px;\">fi<\/p>\n<p style=\"padding-left: 30px;\"># Pumpe an &#8212; Solar an<br \/>\nelse<\/p>\n<p style=\"padding-left: 60px;\">if [ &#8222;$Startzeit&#8220; -le &#8222;$(date +%H)&#8220; -a &#8222;$(date +%H)&#8220; -le &#8222;$(echo &#8222;scale=0; ($Startzeit + ($T_Wasser \/ 35))&#8220; | bc)&#8220; ]<br \/>\nthen<\/p>\n<p style=\"padding-left: 90px;\"># Pumpe an, wenn Startzeit gekommen und Endzeit noch nicht erreicht<br \/>\n\/usr\/local\/bin\/gpio -g write 23 1<br \/>\n\/usr\/local\/bin\/gpio -g write 22 1<br \/>\nS_Pumpe=1<br \/>\nS_Solar=0.01<br \/>\n# Pumpe an &#8212; Solar aus<\/p>\n<p style=\"padding-left: 60px;\">else<\/p>\n<p style=\"padding-left: 90px;\"># Alles aus<br \/>\n\/usr\/local\/bin\/gpio -g write 23 0<br \/>\n\/usr\/local\/bin\/gpio -g write 22 0<br \/>\nS_Pumpe=0<br \/>\nS_Solar=0.01<br \/>\n# Pumpe aus &#8212; Solar aus &#8211; Magnet aus!<\/p>\n<p style=\"padding-left: 60px;\">fi<\/p>\n<p style=\"padding-left: 30px;\">fi<\/p>\n<p>else<\/p>\n<p style=\"padding-left: 30px;\">S_Pumpe=0.5<br \/>\nS_Solar=0.51<\/p>\n<p>fi<\/p>\n<p># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br \/>\n# Log Datei erzeugen<br \/>\n#<br \/>\n# Datum und Zeitstempel , Wasser Temp, Dach Temp, Luft Temp , Status Pumpe , Status Solar<br \/>\n# Zweite Zeile dient als Temp Datei f\u00fcr Web Darstellung<br \/>\n# &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<\/p>\n<p>echo $(date +&#8220;%Y-%m-%d_%H:%M:%S&#8220;) &#8220; , &#8220; $(echo &#8222;scale=1; $T_Wasser \/ 10&#8243; | bc) &#8220; , &#8220; $(echo &#8222;scale=1; $T_Dach \/ 10&#8243; | bc) &#8220; , &#8220; $(echo &#8222;scale=1; $T_Luft \/ 10&#8243; | bc) &#8220; , &#8220; $S_Pumpe &#8220; , &#8220; $S_Solar &gt;&gt; \/var\/log\/pool\/pool_stg-$(date +&#8220;%Y-%m&#8220;).log<br \/>\necho $(date +&#8220;%d.%m.%Y , %H:%M&#8220;) &#8220; , &#8220; $(echo &#8222;scale=1; $T_Wasser \/ 10&#8243; | bc) &#8220; , &#8220; $(echo &#8222;scale=1; $T_Dach \/ 10&#8243; | bc) &#8220; , &#8220; $(echo &#8222;scale=1; $T_Luft \/ 10&#8243; | bc) &#8220; , &#8220; $S_Pumpe &#8220; , &#8220; $S_Solar &gt; \/var\/log\/pool\/tmp.log<\/p>\n<p>&nbsp;<\/p><\/blockquote>\n<p><span style=\"font-family: Arial, sans-serif;\">Das Script muss nat\u00fcrlich an die Seriennummern der verwendeten 1W Sensoren angepasst werden.<\/span><\/p>\n<p><span style=\"font-family: Arial, sans-serif;\">Wird das Script aus der Kommandozeile ausgef\u00fchrt, dann gibt es den passenden Status in die Log Datei &#8222;\/var\/log\/pool_stg-$(date +&#8220;%Y-%m&#8220;).log&#8220; aus.<br \/>\nBei mir gibt es noch eine Sektion f\u00fcr die Darstellung auf einer Webseite. Diese habe ich weiter unten dargestellt.<\/span><br \/>\n<span style=\"font-family: Arial, sans-serif;\">Das Script stellt sowohl eine Temperaturdifferenzschaltung, als auch eine Zeitschaltung dar. Die Pumpe l\u00e4uft also auch ohne Sonne an.<br \/>\nAllerdings erst ab &#8222;Startzeit&#8220; (bei mir also 11:00 Uhr) und dann so lange wie es f\u00fcr die anliegende Wassertemperatur n\u00f6tig ist.<br \/>\nVersteckt ist das ganze in der inneren If Anweisung:<\/span><\/p>\n<blockquote><p><span style=\"font-family: 'Courier New', Courier, monospace;\">if [ &#8222;$Startzeit&#8220; -le &#8222;$(date +%H)&#8220; -a &#8222;$(date +%H)&#8220; -le &#8222;$(echo &#8222;scale=0; ($Startzeit + ($T_Wasser \/ 35))&#8220; | bc)&#8220; ] <\/span><\/p><\/blockquote>\n<p>Das ist die Zeitsteuerung mit der Abh\u00e4ngigkeit von der Wassertemperatur.<br \/>\nBei sehr warmen Wasser l\u00e4uft also auch die Pumpe l\u00e4nger. Das hat zum Vorteil das die im Skimmer platzierte Multi Chlor Tablette entsprechend l\u00e4nger im flie\u00dfenden Wasser liegt und so mehr Chlor dosiert wird. Damit erspare ich mir l\u00e4stiges nachdosieren bei warmen Wetter.<br \/>\nDie Formel daf\u00fcr ist einfach l\u00e4ngere Erfahrung mit meinem Pool und stammt schon aus der C-Control Zeit (dort ist es die gleiche Formel). Diese Zeiten kann nat\u00fcrlich f\u00fcr andere Poolanlagen anders sein.<br \/>\nIst aber die Dachtemperatur 5\u00b0C h\u00f6her wie die Wassertemperatur, dann l\u00e4uft die Pumpe ebenfalls an.<br \/>\nDas steuert die \u00e4ussere If Anweisung:<\/p>\n<blockquote><p><span style=\"font-family: 'Courier New', Courier, monospace;\">if [ &#8222;$T_Wasser&#8220; -le &#8222;$(echo &#8222;scale=0; $T_Dach &#8211; $Tempdiff&#8220; | bc)&#8220; ]; ).<\/span><\/p><\/blockquote>\n<p>Bei 28\u00b0C ist aber Schluss mit Solar, da sonst &#8222;\u00dcberhitzung&#8220; des Pools droht. Bei \u00fcber 30\u00b0C wirkt herk\u00f6mmliche Chlor Chemie nicht mehr so gut. Daher begrenze ich die Temperatur.<\/p>\n<blockquote><p><span style=\"font-family: 'Courier New', Courier, monospace;\">if [ &#8222;$T_Wasser&#8220; -le &#8222;$Maxtemp&#8220; ];<\/span><\/p><\/blockquote>\n<p><span style=\"font-family: Arial, sans-serif;\">Auch wenn das Script irgendwie einfach aussieht, so enth\u00e4lt es eigentlich alle wichtigen Parameter (Zeitsteuerung, Temperaturdifferenz und einfache Chlordosierung).<\/span><\/p>\n<p>Damit sind die wesentlichen Funktionen der Steuerung abgedeckt. Bei mir habe ich allerdings noch einige weitere Features verwirklicht, so z.B. die Darstellung der aktuellen Werte auf einer Webseite. Weiterhin die Steuerung \u00fcber eine Webseite im lokalen Netz. Als Anzeige kann ich jedes Smartphone oder Tablet nutzen.<\/p>\n<p>Im Diagramm sehen die Steruerungsaufzeichnungen wie folgt aus:<br \/>\nLinks der Plot ohne Sonne, rechts mit Sonne<\/p>\n<p><a href=\"http:\/\/www.kraftonline.org\/wordpress\/wp-content\/uploads\/Plot_ohne_Sonne.jpg\" rel=\"lightbox[156]\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-398\" src=\"http:\/\/www.kraftonline.org\/wordpress\/wp-content\/uploads\/Plot_ohne_Sonne-300x180.jpg\" alt=\"Plot ohne Sonne\" width=\"300\" height=\"180\" srcset=\"http:\/\/www.kraftonline.org\/wordpress\/wp-content\/uploads\/Plot_ohne_Sonne-300x180.jpg 300w, http:\/\/www.kraftonline.org\/wordpress\/wp-content\/uploads\/Plot_ohne_Sonne-150x90.jpg 150w, http:\/\/www.kraftonline.org\/wordpress\/wp-content\/uploads\/Plot_ohne_Sonne-400x240.jpg 400w, http:\/\/www.kraftonline.org\/wordpress\/wp-content\/uploads\/Plot_ohne_Sonne.jpg 919w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><a href=\"http:\/\/www.kraftonline.org\/wordpress\/wp-content\/uploads\/Plot_mit_Sonne.jpg\" rel=\"lightbox[156]\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-399\" src=\"http:\/\/www.kraftonline.org\/wordpress\/wp-content\/uploads\/Plot_mit_Sonne-300x180.jpg\" alt=\"Plot mit Sonne\" width=\"300\" height=\"180\" srcset=\"http:\/\/www.kraftonline.org\/wordpress\/wp-content\/uploads\/Plot_mit_Sonne-300x180.jpg 300w, http:\/\/www.kraftonline.org\/wordpress\/wp-content\/uploads\/Plot_mit_Sonne-150x90.jpg 150w, http:\/\/www.kraftonline.org\/wordpress\/wp-content\/uploads\/Plot_mit_Sonne-400x240.jpg 400w, http:\/\/www.kraftonline.org\/wordpress\/wp-content\/uploads\/Plot_mit_Sonne.jpg 919w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\nDiese Plots wurde mit FHEM und dessen Plot Funktion erzeugt. Seit Feb. 2016 werden diese Plots \u00fcber Gnuplot erstellt.<\/p>\n<p>Die Erstellung der Webseite wird seit Feb. 2016 nicht mehr im Pool Script vorgenommen.  <a href=\"http:\/\/www.kraftonline.org\/?page_id=479\" title=\"Poolstatus Kraft\" target=\"_blank\">Die Webseite ist hier zu finden<\/a><\/p>\n<p>Daf\u00fcr werden die Grafiken jetzt im Script erzeugt und das wird so realisiert:<\/p>\n<blockquote><p># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p># Grafik erzeugen<br \/>\n# &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p># &#8212;&#8211; Tagesplot &#8212;-<br \/>\ngnuplot -persist &lt;&lt;PLOT<br \/>\nreset<br \/>\nset title &#8218;Poolstatus $(date +&#8220;%d.%m.%Y&#8220;)&#8216;<br \/>\nset timefmt &#8222;%Y-%m-%d_%H:%M:%S&#8220;<br \/>\nset xdata time<br \/>\nset ytics<br \/>\nset y2tics<br \/>\nset grid y2tics<br \/>\nset ylabel &#8222;Status Ausgang&#8220;<br \/>\nset y2label &#8222;Temperatur in \u00b0C&#8220;<br \/>\nset yrange [0:3]<br \/>\nset border 10<br \/>\nset datafile separator &#8222;,&#8220;<br \/>\nset format x &#8222;%H:00&#8220;<br \/>\nset xrange [&#8222;$(date +&#8220;%Y-%m-%d_00:01:00&#8243;)&#8220;:&#8220;$(date +&#8220;%Y-%m-%d_23:59:00&#8243;)&#8220;]<br \/>\nset terminal png size 850,300 enhanced font &#8218;Arial,8&#8216;<br \/>\nset output &#8218;\/var\/www\/plots\/tag-$(date +&#8220;%Y-%m-%d&#8220;).png&#8216;<br \/>\nplot &#8222;\/var\/log\/pool\/pool_stg-$(date +&#8220;%Y-%m&#8220;).log&#8220; using 1:2 axes x1y2 title &#8218;Wasser&#8216; with lines,\\<br \/>\n&#8222;\/var\/log\/pool\/pool_stg-$(date +&#8220;%Y-%m&#8220;).log&#8220; using 1:3 axes x1y2 title &#8218;Dach&#8216; with lines,\\<br \/>\n&#8222;\/var\/log\/pool\/pool_stg-$(date +&#8220;%Y-%m&#8220;).log&#8220; using 1:4 axes x1y2 title &#8218;Luft&#8216; with lines,\\<br \/>\n&#8222;\/var\/log\/pool\/pool_stg-$(date +&#8220;%Y-%m&#8220;).log&#8220; using 1:5 axes x1y1 title &#8218;Pumpe&#8216; with lines,\\<br \/>\n&#8222;\/var\/log\/pool\/pool_stg-$(date +&#8220;%Y-%m&#8220;).log&#8220; using 1:6 axes x1y1 title &#8218;Solar&#8216; with lines<br \/>\nquit<br \/>\nPLOT<\/p>\n<p># &#8212;- Monatsplot &#8212;-<br \/>\ngnuplot -persist &lt;&lt;PLOT<br \/>\nreset<br \/>\nset title &#8218;Poolstatus $(date +&#8220;%m.%Y&#8220;)&#8216;<br \/>\nset timefmt &#8222;%Y-%m-%d_%H:%M:%S&#8220;<br \/>\nset xdata time<br \/>\nset ytics<br \/>\nset y2tics<br \/>\nset grid y2tics<br \/>\nset ylabel &#8222;Temperatur in \u00b0C&#8220;<br \/>\nset y2label &#8222;Temperatur in \u00b0C&#8220;<br \/>\nset border 10<br \/>\nset datafile separator &#8222;,&#8220;<br \/>\nset format x &#8222;%d&#8220;<br \/>\nset xrange [&#8222;$(date +&#8220;%Y-%m-01_00:01:00&#8243;)&#8220;:&#8220;$(date +&#8220;%Y-%m-31_23:59:00&#8243;)&#8220;]<br \/>\nset terminal png size 850,300 enhanced font &#8218;Arial,8&#8216;<br \/>\nset output &#8218;\/var\/www\/plots\/monat-$(date +&#8220;%Y-%m&#8220;).png&#8216;<br \/>\nplot &#8222;\/var\/log\/pool\/pool_stg-$(date +&#8220;%Y-%m&#8220;).log&#8220; using 1:2 axes x1y2 title &#8218;Wasser&#8216; with lines,\\<br \/>\n&#8222;\/var\/log\/pool\/pool_stg-$(date +&#8220;%Y-%m&#8220;).log&#8220; using 1:3 axes x1y2 title &#8218;Dach&#8216; with lines,\\<br \/>\n&#8222;\/var\/log\/pool\/pool_stg-$(date +&#8220;%Y-%m&#8220;).log&#8220; using 1:4 axes x1y2 title &#8218;Luft&#8216; with lines<br \/>\nquit<br \/>\nPLOT<\/p>\n<p><span style=\"font-family: 'Courier New', Courier, monospace;\">\u00a0<\/span><\/p>\n<p>&nbsp;<\/p><\/blockquote>\n<p>Diese aktuellen Grafiken und Temperaturdaten werden dann per FTP upload auf meinen Webserver hochgeladen. Auch das \u00fcbernimmt dieses Script. Den Code dazu habe ich um die privaten Daten gek\u00fcrzt.<\/p>\n<blockquote><p># &#8212; upload zur Website &#8212;<br \/>\n# Kopieren der Daten in den Uploadordner<br \/>\ncp \/var\/log\/pool\/tmp.log \/var\/www\/pool\/tmp.log<br \/>\ncp \/var\/www\/plots\/tag-$(date +&#8220;%Y-%m-%d&#8220;).png \/var\/www\/pool\/tag.png<br \/>\ncp \/var\/www\/plots\/monat-$(date +&#8220;%Y-%m&#8220;).png \/var\/www\/pool\/monat.png<\/p>\n<p>cd \/var\/www\/pool<\/p>\n<p>HOST='[ftpserver]&#8216;<br \/>\nUSER='[username]&#8216;<br \/>\nPASSWD='[supergeheimes passwort]&#8216;<br \/>\nFILE1=&#8217;tmp.log&#8216;<br \/>\nFILE2=&#8217;tag.png&#8216;<br \/>\nFILE3=&#8217;monat.png&#8216;<\/p>\n<p>ftp -n $HOST <<END_SCRIPT\nquote USER $USER\nquote PASS $PASSWD\ncd Poolbau\nput $FILE1\nput $FILE2\nput $FILE3\nquit\nEND_SCRIPT\nexit 0\n\ncd \/\n<span style=\"font-family: 'Courier New', Courier, monospace;\">\u00a0<\/span><\/p>\n<p>&nbsp;<\/p><\/blockquote>\n<p><!--more--><\/p>\n","protected":false},"excerpt":{"rendered":"<p style=\"text-align: center;\">&#8212; letzte \u00dcberarbeitung der Programmscripte im Februar 2016 &#8212; Anpassung der Log Dateien und \u00dcberspielung der Live Daten auf diese Webseite (Aktualisierung alle 10 Minuten)<\/p>\n<p style=\"text-align: center;\">Nach dem die Version 1 mit der C-Control im Sommer 2013 einem Blitzschlag zum Opfer gefallen war, musste also was neues her. Die neue L\u00f6sung wurde [&#8230;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":75,"menu_order":51,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"http:\/\/www.kraftonline.org\/index.php?rest_route=\/wp\/v2\/pages\/156"}],"collection":[{"href":"http:\/\/www.kraftonline.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/www.kraftonline.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/www.kraftonline.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.kraftonline.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=156"}],"version-history":[{"count":82,"href":"http:\/\/www.kraftonline.org\/index.php?rest_route=\/wp\/v2\/pages\/156\/revisions"}],"predecessor-version":[{"id":501,"href":"http:\/\/www.kraftonline.org\/index.php?rest_route=\/wp\/v2\/pages\/156\/revisions\/501"}],"up":[{"embeddable":true,"href":"http:\/\/www.kraftonline.org\/index.php?rest_route=\/wp\/v2\/pages\/75"}],"wp:attachment":[{"href":"http:\/\/www.kraftonline.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}