Abfrage Solarprognose

Danke -aber Du hast ja super vorgearbeitet :loveips:

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 :slight_smile: 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