Danke -aber Du hast ja super vorgearbeitet
Das mit den Säulen hat tatsächlich etwas gedauert bis ich es so hatte wie ich wollte.
Was mache ich:
- da man nur 20 API Calls hat rufe ich nur die stündlichen Werte ab
- das mache ich per Event in einem täglichen Zeitfenster von 5 bis 21 Uhr (vielleicht im Sommer nachschärfen)
- den Tageswert bekommt man ja durch aufsummieren oder über den letzten Stundenwert eines Tages
- habe mir einen Mitternachtstimer gestellt der 15 Sekunden im neuen Tag die Werte auf 0 zurücksetzt
Im Bild kannste den UpdateDaily (15sek nach Mitternacht) und den UpdateHourly (aller 15 sek nach voller Stunde) sehen
Hier der Timer-Code
// TIMER EVENT
else if($_IPS['SENDER'] == "TimerEvent") {
$event = IPS_GetName($_IPS['EVENT']);
if($event == 'UpdateDaily') {
// Midnight reset to 0
$vid = CreateVariableByName($_IPS['SELF'], 'Tagesprognose', 2);
SetValue($vid, 0);
$vid = CreateVariableByName($_IPS['SELF'], 'Stundenprognose', 2);
SetValue($vid, 0);
} elseif($event == 'UpdateHourly') {
// from 05:00 to 21:00
$data = UpdateForecast($SP_TOKEN, $SP_PROJECT, $SP_ITEM, $SP_ID, $SP_HOURLY, $SP_FORMAT, $SP_START, $SP_END);
// aktuellen Werte abgleichen wenn notwendig
$vid = CreateVariableByName($_IPS['SELF'], 'Tagesprognose', 2);
$ad = GetValue($vid);
if($ad != $data['Tageswert']) {
SetValue($vid, $data['Tageswert']);
}
$vid = CreateVariableByName($_IPS['SELF'], 'Stundenprognose', 2);
SetValue($vid, $data['Stundenwert']);
// SVG Chart
$vid = CreateVariableByName($_IPS['SELF'], 'Aktuelle Leistung', 3);
$svg = DrawChart($data['Stundenwert']);
SetValue($vid, $svg);
// HTML Table
$html = BuildHtml($data);
$vid = CreateVariableByName($_IPS['SELF'], 'Vorhersage', 3);
SetValue($vid, $html);
}
}
Die „Aktuelle Leistung“ mache ich über GitHub - typpo/quickchart-php: PHP client for QuickChart chart API. Einfach den Inhalt 1 zu 1 in ein Script packen und ferig!
Das Ergebnis lass ich mir als SVG in eine Stringvariable schreiben mit ~HTMLBox Profil
<?php
$ID = 12345; // Stringvariable
// Quickchart Script file
require_once(IPS_GetKernelDir()."scripts".DIRECTORY_SEPARATOR.'System.QuickChart.ips.php');
$chart = new QuickChart(array(
'width' => 110,
'height' => 60,
'format' => 'svg'
));
$chart->setConfig("{
type: 'gauge',
data: {
datasets: [
{
data: [2500, 5000, 7500],
value: 3930,
minValue: 0,
backgroundColor: ['red', 'orange', 'green'],
borderWidth: 1,
},
],
},
options: {
legend: {
display: false,
},
title: {
display: false,
text: 'Aktuelle Leistung',
position: 'bottom',
},
needle: {
radiusPercentage: 0,
widthPercentage: 2,
lengthPercentage: 40,
color: '#c0c0c0',
},
valueLabel: {
fontSize: 8,
backgroundColor: 'transparent',
color: '#fff',
formatter: function (value, context) {
return value.toLocaleString('de-DE') + ' kWh';
},
bottomMarginPercentage: 10,
},
plugins: {
datalabels: {
display: 'auto',
formatter: function (value, context) {
return context.chart.data.labels[context.dataIndex/100];
},
color: '#fff',
font: {
weight: 'bold',
size: 6,
}
},
},
},
}");
SetValueString($ID, $chart->toBinary()) ;
Das wars eigentlich schon!
Melde Dich bei Fragen!
Heiko