{"id":559,"date":"2018-05-28T10:56:23","date_gmt":"2018-05-28T10:56:23","guid":{"rendered":"https:\/\/www.moonsea.de\/?p=559"},"modified":"2022-01-07T13:04:28","modified_gmt":"2022-01-07T13:04:28","slug":"temperatur-uberwachung-cron-scripte-to-mysql","status":"publish","type":"post","link":"https:\/\/www.moonsea.de\/?p=559","title":{"rendered":"Temperatur-\u00dcberwachung \u2013 Cron-Scripte to MySQL"},"content":{"rendered":"<p>N\u00e4chster Schritt: regelm\u00e4ssiges Schreiben der Sensoren-Werte in eine MySQL-Datenbank.<\/p>\n<p>Und wenn ich schon mit einer Datenbank anfange, wird auch die &#8222;sensoren.db&#8220; aus dem vorherigen Post in die Datenbank verschoben.<\/p>\n<p>Schritt 1: Datenbank erstellen: Name &#8218;templog&#8216; <!--more--><\/p>\n<p>2 Tabellen:<\/p>\n<pre class=\"brush: sql; title: Tabelle: Sensoren; notranslate\" title=\"Tabelle: Sensoren\">\nCREATE TABLE `templog`.`Sensoren` (\n`ID` VARCHAR(16) NOT NULL ,\n`Name` VARCHAR(50) NOT NULL ,\n`Temp_Max` INT NOT NULL ,\n`Temp_Min` INT NOT NULL\n) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_german2_ci;\n<\/pre>\n<p>Die Spalten Temp_Max und Temp_Min werden vorl\u00e4ufig nicht gebraucht, for future use&#8230;<\/p>\n<pre class=\"brush: sql; title: Tabelle: logging; notranslate\" title=\"Tabelle: logging\">\nCREATE TABLE `logging` (\n`ID` varchar(16) NOT NULL,\n`Temperatur` int(11) NOT NULL,\n`datetime` datetime NOT NULL\n) ENGINE = InnoDB CHARSET=utf8 COLLATE=utf8_german2_ci;\n<\/pre>\n<p>ggfs. kann man noch Prim\u00e4rschl\u00fcssel und\/oder Indizes anlegen. Das ist aber vorl\u00e4ufig nicht notwendig.<\/p>\n<p>Jetzt geht&#8217;s an das PHP-script, das die Werte in die Datenbank schreibt.<\/p>\n<p>Version1: Sensoren aus Datenbank einlesen<\/p>\n<pre class=\"brush: php; title: tempread.php; notranslate\" title=\"tempread.php\">\n\/\/Alle Fehlermeldungen einschalten\nerror_reporting(E_ALL);\n\n\/\/Definition der Verbindungsdaten\ndefine ( 'MYSQL_HOST','NAME\/ADRESSE-MYSQL-SERVER');\ndefine ( 'MYSQL_BENUTZER', 'USERNAME' );\ndefine ( 'MYSQL_KENNWORT', 'PASSWORD' );\ndefine ( 'MYSQL_DATENBANK', 'templog' );\n\n\/\/Verbindung herstellen\n$link = mysqli_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT, MYSQL_DATENBANK);\nif ( !$link ) \/\/Fehlerbehandlung\n{ die('Verbindung fehlgeschlagen: ' . mysqli_error()); }\nmysqli_set_charset($link, 'utf8');\n\n\/\/Einlesen aller Sensoren\n$sql = &quot;SELECT * FROM Sensoren&quot;;\n$result = mysqli_query( $link, $sql );\nif ( ! $result ) \/\/Fehlerbehandlung\n{ die('Fehler bei Abfrage: ' . mysqli_error()); }\n\n\/\/Durchlaufen aller Sensoren\nwhile ($z = mysqli_fetch_array( $result, MYSQLI_ASSOC))\n{ \/\/Auslesen der Temperatur aus den Sensoren\n$filename=&quot;\/sys\/bus\/w1\/devices\/&quot;.$z&#x5B;'ID'].&quot;\/w1_slave&quot;;\n$lines=file($filename);\n$temp=substr($lines&#x5B;1],strpos($lines&#x5B;1],&quot;t=&quot;)+2,5);\n\/\/echo $z&#x5B;'ID'].&quot;;&quot;.$z&#x5B;'Name'].&quot;;&quot;.$z&#x5B;'Temp_Max'].&quot;;&quot;.$z&#x5B;'Temp_Min'].&quot;;&quot;.($temp\/1000.0).&quot;;&quot;.date(&quot;Y-m-d H:i:s&quot;).&quot;\\n&quot;\n\n\/\/Schreiben der aktuellen Temperatur in die Datenbank\n$sql=&quot;INSERT INTO logging (ID, Temperatur, datetime) Values ('&quot;.$z&#x5B;'ID'].&quot;', '&quot;.$temp.&quot;', '&quot;.date(&quot;Y-m-d H:i:s&quot;).&quot;')&quot;;\n$write_result = mysqli_query( $link, $sql );\nif ( ! $write_result ) \/\/Fehlerbehandlung\n{ die('Fehler bei Abfrage: ' . mysqli_error()); }\n}\nmysqli_free_result( $result );\nmysqli_close($link);\n<\/pre>\n<p>Version2: Sensoren aus Device-Tree einlesen<\/p>\n<pre--><pre class=\"brush: php; title: tempread2.php; notranslate\" title=\"tempread2.php\">\n\/\/Alle Fehlermeldungen einschalten\nerror_reporting(E_ALL); \n\n\/\/Definition der Verbindungsdaten\ndefine ( 'MYSQL_HOST','NAME\/ADRESSE-MYSQL-SERVER');\ndefine ( 'MYSQL_BENUTZER', 'USERNAME' );\ndefine ( 'MYSQL_KENNWORT', 'PASSWORD' );\ndefine ( 'MYSQL_DATENBANK', 'templog' );\n\/\/Verbindung herstellen\n$link = mysqli_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT, MYSQL_DATENBANK);\nif ( !$link ) \/\/Fehlerbehandlung\n{ die('Verbindung fehlgeschlagen: ' . mysqli_error()); } mysqli_set_charset($link, 'utf8'); \n\n\/\/Verzeichnis der Sensoren durchsuchen\n$vz=&quot;\/sys\/bus\/w1\/devices\/&quot;;\n$allfiles=scandir($vz);\nforeach ($allfiles as $ID)\n{\n  if (substr($ID,0,3)==&quot;28-&quot;) \/\/nur Sensoren, die mit 28- beginnen, werden ausgewertet\n  {\n    \/\/Auslesen der Temperatur aus den Sensoren\n    $filename=&quot;\/sys\/bus\/w1\/devices\/&quot;.$ID.&quot;\/w1_slave&quot;;\n    $lines=file($filename);\n    $temp=substr($lines&#x5B;1],strpos($lines&#x5B;1],&quot;t=&quot;)+2,5); \n\n    \/\/Schreiben der aktuellen Temperatur in die Datenbank $\n    sql=&quot;INSERT INTO logging (ID, Temperatur, datetime) Values ('&quot;.$ID.&quot;', '&quot;.$temp.&quot;', '&quot;.date(&quot;Y-m-d H:i:s&quot;).&quot;')&quot;;\n    $write_result = mysqli_query( $link, $sql );\n    if ( ! $write_result ) \/\/Fehlerbehandlung\n    { die('Fehler bei Abfrage: ' . mysqli_error()); }\n  }\n}\nmysqli_close($link); \n<\/pre>\n<p>Und zu guter letzt der Cron-eintrag<\/p>\n<pre><pre class=\"brush: plain; title: Zus\u00e4tzliche Zeile \/etc\/crontab; notranslate\" title=\"Zus\u00e4tzliche Zeile \/etc\/crontab\">\n*\/30 *   * * *   root\tphp \/PFAD\/tempread.php\n<\/pre>\n<p>Auslesen und Schreiben der Werte alle 30 Minuten<\/p>\n<\/pre-->\n","protected":false},"excerpt":{"rendered":"<p>N\u00e4chster Schritt: regelm\u00e4ssiges Schreiben der Sensoren-Werte in eine MySQL-Datenbank. Und wenn ich schon mit einer Datenbank anfange, wird auch die &#8222;sensoren.db&#8220; aus dem vorherigen Post in die Datenbank verschoben. Schritt 1: Datenbank erstellen: Name &#8218;templog&#8216;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,8],"tags":[],"class_list":["post-559","post","type-post","status-publish","format-standard","hentry","category-hardware","category-programmierung"],"_links":{"self":[{"href":"https:\/\/www.moonsea.de\/index.php?rest_route=\/wp\/v2\/posts\/559","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.moonsea.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.moonsea.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.moonsea.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.moonsea.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=559"}],"version-history":[{"count":33,"href":"https:\/\/www.moonsea.de\/index.php?rest_route=\/wp\/v2\/posts\/559\/revisions"}],"predecessor-version":[{"id":624,"href":"https:\/\/www.moonsea.de\/index.php?rest_route=\/wp\/v2\/posts\/559\/revisions\/624"}],"wp:attachment":[{"href":"https:\/\/www.moonsea.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=559"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.moonsea.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=559"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.moonsea.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}