Zählerstände auslesen
Um Monatswerte des Stromzählers zum Vergleich zu dokumentieren, ist es sinnvoll an jedem 1sten des Monats den absoluten Zählerwert zu notieren.
Der Code ist auch nicht mit aktuellen PHP-Versionen kompatibel.
Um den absoluten Stromzähler Wert auszulesen, muss man die Datenbank abfragen. Damit das komfortabel über einen Web Browser gemacht werden kann, hier ein PHP Script (Version 5.6!) dafür. Nach dem Aufruf im Web Browser erscheint eine Ausgabe, siehe Bild rechts. Ohne Auswahl von Monat und Jahr wird der Zähler Wert zum 1sten des aktuellen Monats angezeigt. Durch Auswahl von Monat und Jahr und anklicken des Knopfes submit wird der entsprechende Wert angezeigt.
Zum eigenen Gebrauch müssen noch die Datenbank Variablen angepasst werden: $username, $password, $db_server, $channel_id.
Der File muss auf dem Web Server in den Volkszaehler Pfad im Ordner htdocs gespeichert werden.
Web Adresse im lokalen Netzwerk: <IP-Adresse>/summary.php
<?php // program "summary.php", 2022-01-29 Oliver Schwaneberg, based on program "vz_read_strom.php", 2014-05-09 RudolfReuter?> <h3>Zählerstände auslesen</h3> <?php if (isset($_GET['year'])) { $year = $_GET['year']; } else { //echo "actual date \n"; $year = date("Y"); } ?> <?php setlocale(LC_MONETARY, 'de_DE'); $months = array(1 => "Januar", 2 => "Februar", 3 => "März", 4 => "April", 5 => "Mai", 6 => "Juni", 7 => "Juli", 8 => "August", 9 => "September", 10 => "Oktober", 11 => "November", 12 => "Dezember"); $start_year = 2016; $current_year = date("Y"); // Generating Year list to the current data echo '<form id="user_form" action="summary.php" method="get">'; echo '<fieldset>'; echo '<select name="year">'; for ($i = $start_year; $i <= $current_year; $i++) { echo '<option value="' . $i . '">' . $i . '</option>'; } echo '</select>'; echo '<input type="submit" name="submit" value="submit">'; echo '</fieldset>'; echo '</form>'; $username="pi"; $password="raspberry"; $db_server="localhost"; $channel_id_electric="6"; $channel_id_heat="11"; try { $conn = new PDO("mysql:host=" . $db_server . ";dbname=volkszaehler", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo "Error: " . $e->getMessage(); } echo "<h3>" . $year . "</h3><br>"; echo "<table>"; echo "<tr><th>Datum</th><th>Stromzählerstand</th><th>Wärmezählerstand</th></tr>"; foreach ($months as $month => $month_name) { $last_day = date("t", mktime(0, 0, 0, $month, 1, $year)); $str_from = "$year-$month-$last_day 0:00:00"; $date1 = new DateTime($str_from); $time_from = $date1->getTimestamp() * 1000; $str_to = "$year-$month-$last_day 23:59:59"; $date2 = new DateTime($str_to); $time_to = $date2->getTimestamp() * 1000; $str_sql_electric = "SELECT value FROM data WHERE channel_id=$channel_id_electric AND timestamp BETWEEN $time_from AND $time_to"; $str_sql_heat = "SELECT value FROM data WHERE channel_id=$channel_id_heat AND timestamp BETWEEN $time_from AND $time_to"; $sql_res = $conn->prepare($str_sql_electric); $sql_res->execute(); $rows_electric = $sql_res->fetchAll(); $sql_res = $conn->prepare($str_sql_heat); $sql_res->execute(); $rows_heat = $sql_res->fetchAll(); echo "<tr><td>" . $last_day . ". " . $month_name . "</td><td>" . number_format(end($rows_electric)["value"]/1000, 0, ',', '.') . "</td><td>" . number_format(end($rows_heat)["value"]/1000, 0, ',', '.') . "</td></tr>"; } echo "</table>"; ?>
Frühere Version mit Web Adresse im lokalen Netzwerk: <IP-Adresse>/vz_read_strom.php
<?php // program "vz_read_strom.php", 2014-05-09 RudolfReuter // Version Zaehler EMH eHZ ?> <h3>Stromzaehler auslesen</h3> <?php if (isset($_GET['month']) && isset($_GET['year'])) { $month = $_GET['month']; $year = $_GET['year']; } else { $month = date("m"); //echo "actual date \n"; $year = date("Y"); } ?> <form id="user_form" action="vz_read_strom.php" method="get"> <fieldset> <select name="month"> <option value="01">Januar</option> <option value="02">Februar</option> <option value="03">Maerz</option> <option value="04">April</option> <option value="05">Mai</option> <option value="06">Juni</option> <option value="07">Juli</option> <option value="08">August</option> <option value="09">September</option> <option value="10">Oktober</option> <option value="11">November</option> <option value="12">Dezember</option> </select> <select name="year"> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> <option value="2017">2017</option> <option value="2018">2018</option> <option value="2019">2019</option> <option value="2020">2020</option> <option value="2021">2021</option> <option value="2022">2022</option> <option value="2023">2023</option> </select> <input type="submit" name="submit" value="submit"> </fieldset> </form> <?php $str_from = "$year-$month-01 08:00:00"; $date1 = new DateTime($str_from); //echo $date1->format('Y-m-d H:i:s') . "\n"; $time_from = $date1->getTimestamp() * 1000; //echo $time_from . "\n"; $str_to = "$year-$month-01 08:15:00"; $date2 = new DateTime($str_to); $time_to = $date2->getTimestamp() * 1000; //echo $time_to . "\n"; $username="root"; $password="raspberry"; $channel_id="11"; $str_sql = "SELECT value FROM data WHERE channel_id=$channel_id AND timestamp BETWEEN $time_from AND $time_to LIMIT 0, 1"; //echo $str_sql . "\n"; $db = mysql_connect('localhost', $username, $password); if (!$db) { die('Verbindung schlug fehl: ' . mysql_error()); } $db_vz = mysql_select_db('volkszaehler', $db); $sql_res = mysql_query($str_sql); $row = mysql_fetch_assoc($sql_res); echo ($row["value"]/1000) . " KWh, "; echo "$year-$month-01 08:00 \n"; ?>