[Script] solarprognose.de (Lite version)

Hier gibt es eine „wirklich“ LITE-Version von => [Script] solarprognose.de (Full version)

Um nicht bei den Skripten durcheinander zu kommen habe ich das mal getrennt!

<?php

declare(strict_types=1);

################################################################################
# Script:   Ammount.SolarForcastLite.ips.php
# Version:  1.0.20230304
# Author:   Heiko Wilknitz (@Pitti)
#
# Script zur Abholung und Aufbereitung der prognostizierten Solorproduktion
# von solarprognose.de (Lite-Version).
#
# API
#   https://www.solarprognose.de/web/solarprediction/api/v1
#       ?access-token=ACCESS-TOKEN
#       &project=Hier Ihre Projekt-Website oder Ihre Kontakt-E-Mail
#       &item=ITEM
#       &id=ID
#       &type=hourly|daily
#       &_format=json|xml
#       &algorithm=mosmix|own-v1|clearsky
#       &day=DAY
#       &start_epoch_time=START_EPOCH_TIME&end_epoch_time=END_EPOCH_TIME
#       &start_day=START_DAY&end_day=END_DAY
#       &snomminixml=true # für snom VoIP Telefone
#
# ------------------------------ Installation ----------------------------------
#
# Dieses Skript richtet automatisch alle nötigen Objekte bei manueller
# Ausführung ein. Eine weitere manuelle Ausführung setzt alle benötigten Objekte
# wieder auf den Ausgangszustand.
#
# - Neues Skript erstellen
# - Diesen PHP-Code hineinkopieren
# - Abschnitt 'Konfiguration' den eigenen Gegebenheiten anpassen
# - Skript Abspeichern
# - Skript Ausführen
# - Visualisierung per Link auf entstandene Variablen erstellen
#
# ------------------------------ Changelog -------------------------------------
#
# 04.03.2023 - Initalversion (v1.0)
#
# ------------------------------ Konfiguration ---------------------------------
#
# Global Debug Output Flag
$DEBUG = false;
#
# Solar Prognose API Parameter
$SP_TOKEN = '<api-key>';
$SP_ITEM = 'location';
$SP_PROJECT = '<mail>';
$SP_FORMAT = 'json';
$SP_TYPE = 'daily'; // 'hourly';
$SP_ID = <id>;
$SP_START = 0;
$SP_END = 1;
#
################################################################################
#
# Requires include of the global function script via autoload (__autoload.php)
# or direct in the script (uncomment next line)!
# require_once(IPS_GetKernelDir()."scripts".DIRECTORY_SEPARATOR.'System.Functions.ips.php');
# You can download it from here https://github.com/wilkware/ips-scripts
#
defined('WWX_FUNCTIONS') || die('Global function library not available!');

// EXECUTE
if ($_IPS['SENDER'] == 'Execute') {
    $data = UpdateForecast($SP_TOKEN, $SP_PROJECT, $SP_ITEM, $SP_ID, $SP_TYPE, $SP_FORMAT, $SP_START, $SP_END);
    $vid = CreateVariableByName($_IPS['SELF'], 'Vorhersage Heute', 2, 1, '', '~Electricity');
    if (isset($data['Heute'])) { 
        SetValue($vid, $data['Heute']);
    }
    $vid = CreateVariableByName($_IPS['SELF'], 'Vorhersage Morgen', 2, 2, '', '~Electricity');
    if (isset($data['Morgen'])) { 
        SetValue($vid, $data['Morgen']);
    }
}

#----------------------------------- Functions ---------------------------------

function UpdateForecast($token, $project, $item, $id, $type, $format, $start, $end, $day = null)
{
    $url = "https://www.solarprognose.de/web/solarprediction/api/v1?access-token=$token&project=$project&item=$item&id=$id&type=$type&_format=$format&algorithm=own-v1&start_day=$start&end_day=$end";
    EchoDebug('URL', $url);
    $json = file_get_contents($url);
    EchoDebug('Daten', $json);
    $result = [];
    if ($json !== false) {
        $data = json_decode($json, true);
        foreach ($data['data'] as $key => $value) {
            if (!isset($result['Heute'])) { // Heute
                $result['Heute'] = $value;
            }
            else if (!isset($result['Morgen'])) { // Morgen
                $result['Morgen'] = $value;
            }
        }
    }
    return $result;
}

################################################################################

Ciao Heiko

1 „Gefällt mir“

Na du bist ja wirklich „Pitti der Liebe …“ :wink:

Werde ich nachher mal ausprobieren.
Welche der Funktionen aus dem extra Script brauche ich denn noch, ist das nur die „CreateVariableByName“ oder brauche ich da noch etwas?

Danke u. viele Grüße,
Doc

Bin ich wirklich :innocent:

Sollte reichen denke ich.

Gruß Heiko

Super funktioniert.

Funktion „EchoDebug“ musste auch noch mit rein.

Aktuell ist ja die Abfrage > 2 Tage noch kostenlos bei Solarprognose.
Ist das ein großer Aufwand noch 2 weitere Tage mit abzufragen?

Danke u. viele Grüße,
Doc

Kannste auch löschen!

Sollte recht easy sein - bekommste vielleicht selber hin - einfach nach Schema F wie ich es gemacht habe!

Hallo Heiko,
kannst Du bitte mal die Schritte beschreiben, um ‚WWX_FUNCTIONS‘ zu installieren. Mein Versuch z.B. über die Modulverwaltung GitHub - Wilkware/ips-scripts: IPS script library einzubinden scheiterte mit folgender Fehlermeldung:
grafik
Viele Grüße,
Oliver

Mein kleine Skript-Bibo ist KEIN Modul!

Hmm, das hatte ich eigentlich in meinem Blogartikel alles geschrieben.

Grob gesagt sind es folgende Schrritte:

  1. Ein neues (leeres) Skript mit dem Namen System.Functions.ips.php in der Konsole anlegen
  2. den Inhalt aus meinem Skript von Github reinkopieren und speichern
  3. das „neue“ Script entweder …
    3.1 in der __autoload.php einbinden
    3.2 oder via require once im solarscript reinziehen

Das war es schon.

Gruß Heiko

Hallo Heiko,
ich habe versucht das wie beschrieben umzusetzen, scheitere aber daran, dass das von mir neu erstellte Skript mit Namen System.Functions.ips.php nicht gefunden werden kann.
Ich hatte mir eine eigene Kategorie erstellt und da dann das Skript reingepackt. Ich kann schon verstehen, dass so der Pfad nicht passt, weiß aber nicht wo ich (und wie?) ich das Skript wo anders ablegen sollte.
Sorry, aber ich bin doch eher ein Anwender und würde mich um Hilfe umso mehr freuen. :wink:
Schöne Grüße
Stephan

Hi Stephan,

das tolle an IPS ist, egal wo Du ein Script erstelltst im Baum - es landet im physischen Ordner scripts.
Also wo Du das Skript erzeugst spielt keine Rolle. Wichtig ist aber die Benamung - es muss genau System.Functions.ips.php heißen (keine Leerzeichen und auch sonst nix).

Wie heißt den die genaue Fehlermeldung? Poste mal die Ausgabe hier zum nachvollziehen! Denke dann finden wir schnell den Fehler!

Gruß HEiko

Wow, das ging schnell, Danke.
Also den Skriptnamen habe ich per copy & paste übernommen. „System.Functions.ips.php“
Die Fehlermeldung bezieht sich auf genau die Zeile in der das Skript aufgerufen wird, also wo ich die Auskommentierung (#) entfernt habe:

Warning: require_once(C:\ProgramData\Symcon\scripts\System.Functions.ips.php): Failed to open stream: No such file or directory in C:\ProgramData\Symcon\scripts\53453.ips.php on line 63

Fatal error: Uncaught Error: Failed opening required ‚C:\ProgramData\Symcon\scripts\System.Functions.ips.php‘ (include_path=‚.;C:\ProgramData\Symcon\scripts‘) in C:\ProgramData\Symcon\scripts\53453.ips.php:63
Stack trace:
#0 {main}
thrown in C:\ProgramData\Symcon\scripts\53453.ips.php on line 63

:slight_smile: :slight_smile: :slight_smile: Bist Du sicher das wir vom gleichen reden!!!

image

Das Script muss nicht im Baum so heißen, sondern der File-Name!!

1.) Öffne das Script in der Konsole

2.) Wähle oben SCRIPTVERWALTUNG

3.) dann Umbenennen

4.) dann den Namen reinschreiben …

Speichern!

Gruß HEiko

AAAAAHHHH!!!
Ja, dass muss einem ja gesagt werden. :wink:
Sorry…

→ Hat funktioniert, herzlichen Dank!

Ggf. befasse ich mich die Tage auch mit der „Full version“…
Dafür müsste ich nach meinem Verständnis aber diverse Skripte und „Visual Studio Editor mit installierter FTP-Sync Erweiterung“ installieren.
Das klingt nach viel Aufwand und viel potentiellen Stolpersteinen. :frowning:

2 Fragen hätte ich noch:

1.) Wenn ich den Berechnungs-Algorithmus auf der Website ändere, wird das auch beim nächsten Update berücksichtigt?
UPDATE: Ich habe die Einstellung auf der Website gefunden. Hat sich also erledigt.
https://www.solarprognose.de/web/de-de/setting/settings/solar

2.) Wie kann ich von daily auf hourly umstellen?
Wenn ich den Wert in der Konfiguration ändere kommt folgende Fehlermeldung:
Warning: Cannot auto-convert value for parameter VariableValue (Type does not match) in C:\ProgramData\Symcon\scripts\4646464.php on line 73
Warning: Cannot auto-convert value for parameter VariableValue (Type does not match) in C:\ProgramData\Symcon\scripts\4646464.php on line 77

Die Variablen einfach zu löschen habe ich mich noch nicht getraut.

Die Antwort bzw. Struktur des JSONSs ist zwischen daily und hourly unterschiedlich!

Siehe hier => API - Application Program Interface Description - Solarprognose

Musst Du halt entsprechend anpassen!

Lies bitte nochmal alles richtig! Man benötigt kein VSE, FTP usw. für die full version! Es ist natürlich ein wenig mehr (Konfigurations-)Arbeit in IPS!

Gruß Heiko

Hallo Heiko,

jetzt muss ich mich doch noch einmal an Dich wenden.

1.) Unter Anmelden - Solarprognose kann ich zwar die Einstellung auf „mosmix“ abändern und speichern, in IPS kommen aber immer die nach dem „own-v1“-Algorithmus berechneten Werte an. Ist das so oder mache ich hier etwas falsch?

2.) Ist es denn richtig, dass nur dann aktualisierte Werte abgerufen werden wenn ich das Installationsskript ausführe bzw. mit einem zyklischen Ereignis automatisch aufrufe?
Das wäre für mich OK, ich dachte nur, dass das nach der Installation irgendwo im Hintergrund automatisch getriggert wird und möchte sicherstellen, dass bei mir alles richtig läuft.

Vielen Dank vorab und schöne Grüße
Stephan

Ich bin mir nicht 100% sicher, aber ich habe das glaube auch mal ausprobiert und keinen Effekt bemerkt!

Ja korrekt, in der LightVersion war das mit absicht so vorgesehen und gewünscht!
Also ja, Du musst selber ein zyklisches Ereignis anlegen!

Meine rein persönliche Meinung ist nicht sehr gut hinsichtlich solarprognose.de, d.h. ich bin komplett zu solcast.com gewechselt. Die Daten waren einfach zu ungenau bei mir!

Gruß Heiko

Moin pitti, hättest du einen Abfrage-Script für solcast.com für mich ?
Gruß Gerd

Das Forum hat eine Suche :wink: => [Script] solcast.com

Gruß Heiko

1 „Gefällt mir“

oh je sry, auf die Idee bin durch deine letzte Antwort gar nicht gekommen. :hot_face:

1 „Gefällt mir“