CCU-Check: Tool zum Abfragen der Zählerstände

Das Langzeitarchiv für HomeMatic

Moderator: Co-Administratoren

Antworten
duffy6
Beiträge: 184
Registriert: 14.03.2017, 10:29
Hat sich bedankt: 29 Mal
Danksagung erhalten: 1 Mal

CCU-Check: Tool zum Abfragen der Zählerstände

Beitrag von duffy6 » 29.11.2020, 18:44

Hallo zusammen,

ich habe mir mit meinen mehr als spärlichen Progammierkenntnissen ein Abfrage-Tool für den lokalen Werbserver (bei mir Synology 918+) gebaut um meine Gas, Wasser und Stromzähler abzulesen.
Es hat keinen Anspruch auf Perfektion, aber vielleicht kann es jemand brauchen oder erweitern für eigene Zwecke.

index.php

Code: Alles auswählen

<html>
<head>
<title>CCU-Check</title>
</head>

<body>
<font face="arial,helvetica">


<h1>CCU-Check aus CCU-Historian</h1>

<form action="auslesen.php" method="post">

    <p>	
    <br><b>Datenpunkt-ID: </b><br><br>
	<input type="radio" name="check" value="wasser">Wasser (81)<br>
	<input type="radio" name="check" value="strom">Strom (215)<br>
	<input type="radio" name="check" value="gas">Gas (17)<br>
	<input type="radio" name="check" value="own">eigene Auswahl: <input name="ownid">
	</p>
	
	<p>
	<br>
	<b>Beginn:</b><br>
	<input type="date" name="dateFrom" value="<?php echo date('Y-m-d',strtotime('-24 hours')); ?>" />
	<input type="time" name="timeFrom" value="00:00" />
	</p>
	
	<p>
	<b>Ende:</b><br>  
	<input type="date" name="dateEnd" value="<?php echo date('Y-m-d'); ?>" />
	<input type="time" name="timeEnd" value="<?php echo date('H:i'); ?>" />
	</p>



	
	 
	<p> <br><input type="submit" name="auswahl"></p>







</form>

</font>


</body>


</html>





auslesen.php

Code: Alles auswählen

<html>
<head>
<title>CCU-Check Auswertung</title>
</head>
<body>
<font face="arial,helvetica">

<?php


// Parameter
$ip = "192.168.133.102";
$port = "8091";



// Datapoint Zuweisung Beginn
if($_POST['auswahl'] == true) {
	 if($_POST['check'] == "wasser") {
		 $datapoint ="81";
		 }
	 if($_POST['check'] == "strom") {
		 $datapoint ="215";
		 }
	if($_POST['check'] == "gas") {
		 $datapoint ="17";
		 }
	if($_POST['check'] == "own") {
		 $datapoint = $_POST['ownid'];
		 }	 
	 if($_POST['check'] == "") {
		 echo "<FONT COLOR='#FF0000'><b>Es wurde KEIN Datenpunkt ausgewählt!</b></FONT><br><br><br><br><br>";
		 }
}
// Datapoint Zuweisung Ende

// Variablen Anfang
$datumanfangHUMAN = date('d.m.Y', strtotime($_POST['dateFrom']));
$zeitanfangHUMAN = date('H:i', strtotime($_POST['timeFrom']));
$datumanfang = date('Ymd', strtotime($_POST['dateFrom']));
$zeitanfang  = date('Hi', strtotime($_POST['timeFrom']));
$datumendeHUMAN = date('d.m.Y', strtotime($_POST['dateEnd']));
$zeitendeHUMAN = date('H:i', strtotime($_POST['timeEnd']));
$datumende = date('Ymd', strtotime($_POST['dateEnd']));
$zeitende  = date('Hi', strtotime($_POST['timeEnd']));
// Variablen Ende

// Datum leer (Zeitzonen Problem bei fehlender Zeitangabe)
if($_POST['timeFrom'] == "") {
		$zeitanfangHUMAN = "00:00";
		$zeitanfang  = "0000";
}

if($_POST['timeEnd'] == "") {
		$zeitendeHUMAN = "00:00";
		$zeitende  = "0000";
}

// Time Generierung
$timecodeend = $datumende . $zeitende;
$timecodebegin = $datumanfang . $zeitanfang;


// Überschrift Zeitraum
echo "<b>Ausgabe für den Datenpunkt <FONT COLOR='#FF0000'>".$datapoint ."</FONT> für den Zeitraum " .$datumanfangHUMAN . ", " . $zeitanfangHUMAN . " Uhr bis " .$datumendeHUMAN . ", " . $zeitendeHUMAN ." Uhr: </b>";
echo "<br>";

// Erstellung Query-Zeile Minimum
$query = "http://".$ip .":".$port."/query/text.gy?dp=".$datapoint."&b=".$timecodebegin."&e=".$timecodeend."&ag=min";
$minimum = round(file_get_contents($query), 3);
// echo "<br>URL: " . $query;
// $mittelwert = file_get_contents('http://192.168.133.102:8091/query/text.gy?dp=35&b=-24h&ag=min');

// Erstellung Query-Zeile Maximum
$query = "http://".$ip .":".$port."/query/text.gy?dp=".$datapoint."&b=".$timecodebegin."&e=".$timecodeend."&ag=max";
$maximum = round(file_get_contents($query), 3);

// Erstellung Query-Zeile Differenz
$query = "http://".$ip .":".$port."/query/text.gy?dp=".$datapoint."&b=".$timecodebegin."&e=".$timecodeend."&ag=diff";
$diff = round(file_get_contents($query), 3);

// Erstellung Query-Zeile Durchschnitt
$query = "http://".$ip .":".$port."/query/text.gy?dp=".$datapoint."&b=".$timecodebegin."&e=".$timecodeend."&ag=avg";
$avg = round(file_get_contents($query), 3);

// Wieder Zeitzonen ANpassung bei fehlender ANgabe Uhrzeit
if($_POST['timeFrom'] == "") {
	$zeitanfanggas = "00:00:00";
} else {
	$zeitanfanggas = date('H:i:s', strtotime($_POST['timeFrom']));
}
if($_POST['timeEnd'] == "") {
	$zeitendegas = "00:00:00";
} else {
	$zeitendegas = date('H:i:s', strtotime($_POST['timeEnd']));
}

$gasanfang =  strtotime(date('Ymd', strtotime($_POST['dateFrom'])) ." " . $zeitanfanggas);
$gasende = strtotime(date('Ymd', strtotime($_POST['dateEnd'])) ." " . $zeitendegas);

echo "<br>";




$zeitdiff= ($gasende - $gasanfang)/3600 . " hours";

echo "Zeitdifferenz: " . $zeitdiff;
$verbrauchgas=$avg/100*15*$zeitdiff;


// Grafik-Link generieren
$img = "http://".$ip .":".$port."/query/trend.gy?i=".$datapoint."&b=".$timecodebegin."&e=".$timecodeend."&w=1280&h=480";
// echo $img; // Testweise den Link für die Grafik ausgeben


// echo "<br>Minimum: " . $minimum;
// echo "<br>Maximum: " . $maximum;
// echo "<br>Differenz: " . $diff;
// echo "<br>Durchschnitt: " . $avg;
?>

<!-- PHP Ende -->

<br>
<br>

<!-- Ergebnisse ausgeben -->

<table border="1" >
<table border width=15% height=200>
  <tr>
    <td>
       Minimum:
    </td>
    <td>
      <?php echo $minimum; ?> 
    </td>
  </tr>
  
  <tr>
    <td>
       Maximum:
    </td>
    <td>
      <?php echo $maximum; ?>  
    </td>
  </tr>

<tr>
    <td>
       Mittelwert:
    </td>
    <td>
      <?php echo $avg; ?>
    </td>
  </tr>

  <tr>
    <td>
       Differenz:
    </td>
    <td>
      <?php echo $diff; ?>
    </td>
  </tr>
 
 <tr>
    <td>
       Verbrauch (nur Gas):<br>in kWh
    </td>
    <td>
      <?php 
	  if($datapoint == "17") {
		echo $verbrauchgas; 
		} else {
		echo "--"; 
		}
	  ?>
    </td>
  </tr>
 
</table>
</table>

<br>
<br>
<!-- Grafik ausgeben -->
<img src= "<?php echo $img; ?>">

</body>
</html>
Viel Spaß damit!
eingabe.JPG
auswertung.JPG
Viele Grüße
duffy6
——-
Raspberrymatic auf einem Raspi 3B, Funkmodul HM-MOD-RPI-PCB

Mathias
Beiträge: 1791
Registriert: 03.11.2010, 10:25
System: CCU
Wohnort: Aachen
Hat sich bedankt: 58 Mal
Danksagung erhalten: 259 Mal
Kontaktdaten:

Re: CCU-Check: Tool zum Abfragen der Zählerstände

Beitrag von Mathias » 29.11.2020, 21:50

Schönes Beispiel für die Verwendung der Text-API (für Minimum, Maximum, usw.) und der Trend-Grafik-API für die Darstellung.

Antworten

Zurück zu „CCU-Historian“