Pitti's Skript-Bibliothek

Die Überschrift klingt wahrscheinlich größer als alles nachher ist :loveips:

Aber nochmal kurz einen Schritt zurück.
Über den Jahreswechsel habe ich mal wieder ein Script geschrieben, welches aus frei verfügbaren EPG Daten ein schönes TV-Guide ins Webfront zaubert. Jedenfalls fanden das ein paar Jungs im Chat - da hatte ich einfach mal um Feedback gefragt :innocent:

Natürlich kam auch schnell die Frage ob ich das Skript veröffentliche - natürlich würde ich das machen … aber!

Ich habe mich vor einiger Zeit entschieden keine lauffähigen „AllInOne“-Scripte mehr zu programmieren. Sondern immer wiederkehrende Funktionen die das Scripten erleichtern in ein separates Script auszulagern.

Warum? Das habe ich in einen kurzen Blog-Artikel (Meine erste Skript-Bibliothek - Wilkware) versucht zu beschreiben. Sozusagen als Vorbereitung auf die nachfolgende Veröffentlichung/Beschreibung des TV-Guide Scriptes und aller weiteren!

Die Bibo umfasst sehr viele Funktionen die man auch hier im Forum findet - in der einen oder anderen Form - und ist jetzt keine große Erfindung von mir … habe es meistens für mich ‚synchronisiert‘ und aufeinander abgestimmt und Kleinigkeiten aus der Modulentwicklung einfließen lassen! Also Dankeschön an ALLE die dazu beigetragen haben :slight_smile:

Also, habt Euch wohl
Heiko (@pitti)

3 „Gefällt mir“

Hi Pitti. Vielen Dank für die Arbeit die du hier für uns machst :+1:

Könnte man da auch wenn du mal Zeit hast das Skript für die grafische Sonnenstandsberechnung (via googlemaps) irgendwie da reinpacken.
ich weiß das es noch nicht fertig ist :smiling_face:

1 „Gefällt mir“

Danke Dir!

Grundsätzlich ja, aber leider funktioniert das Rendern der Seite auch bei mir nicht mehr :frowning:
Ich habe vorhin auch nochmal versucht das wieder zum laufen zu bringen, aber die Seite ist einfach der Horror (Coockies, Werbung ohne Ende, Layer, Frames, unendlich viel Javascript …).
Habe es auch noch mit einem anderen Tool (wkhtmltoimage) versucht - leider ohne Erfolg :frowning:

Sorry, aber ohne weitere Ideen komme ich da nicht weiter!

Gruß Heiko

1 „Gefällt mir“

Meine Bibliothek hat wieder Zuwachs bekommen. Diesmal geht es um die Integrierung des Dienstes quickchart.io

Ich habe dazu auch mal auf die Schnelle ein Blog-Artikel geschrieben - dort steht alles genau (versucht :slight_smile: ) drin.

Gruß Heiko

2 „Gefällt mir“

[UPDATE] Version 1.4.20230315

  • NEU: Locals Skript für personalisierte Daten hinzugefügt
  • NEU: Solarprognose Skripte für solarprognose.de und solcast.com
  • NEU: Einige neue globale Funktionen hinzugefügt
  • FIX: CreateProfileInteger in Functions korrigiert

Bei den globalen Funktionen sind folgende hinzugekommen:

  • RegisterArchive - Variablelogging ins Archive aktivieren
  • UnregisterArchive - Variablelogging wieder deaktivieren
  • UnregisterProfil - Variableprofil löschen wenn nicht mehr benutzt (Idee von @Nall-chan)
  • ExtractGuid - Funktion zum Erhalten der GUID von Modulen und Aktionen; macht das Schreiben von Skripten unabhängig von der lokalen Installation (basiert auf Idee von @sokkederheld)
  • CreateEventByNameFromTo - Erzeugt eine wiedeholendes Event für einen Zeitraum von/bis

LÖSUNG FÜR PERSONALISIERTE DATEN

Immer wieder hat man beim programmieren und veröffentlichen von Skripten das Problem mit privaten bzw. geheimen Daten (API-KEYs, Mailadressen, Passwörter, IDs usw.). Meistens geht es ganz schnell und die Daten sind im Forum. Da ich aber nichts am Script ändern will (auch keine Kleinigkeiten) habe ich schon länger über einen Weg nachgedacht.

Ich habe das jetzt ähnlich den globalen Funktionen gelöst. Es gibt jetzt ein System.Locals.ips.php Skript welches ich auch in die __autoload.php reinziehe und dort alle meine Einstellungen über ein ARRAY-define setze.

define('__WWX', [
    'MY_APIKEY' => 'xyz-xyz-xyz',
    // weitere Einträge
    // ....
]);

Im Skript kann man dann einfach per …

$api-key = __WWX['MY_APIKEY'];

… drauf zugreifen. Da ich ein Liebhaber der 3-Buchstaben-Abkürzung bin :slight_smile: ist es bei mir WWX (WilkWareEXtension). Das kann aber jeder ändern und halten wie ein Dachdecker :slight_smile:

Ob das der Weißheit letzter Schluss ist, keine Ahnung - ich mach das jetzt mal so :slight_smile:
Also nicht wundern wenn ihr in meinen Skripten so ein Konstrukt seht :loveips:

Das schöne ist, wenn man das nicht mag - einfach wie früher durch seinen eigenen Wert direkt ersetzen und alles läuft!

Gruß Heiko

2 „Gefällt mir“

[UPDATE] Version 1.5.20231005

  • NEU: SolarEdge Monitoring Skript
  • NEU: Globale Get-Funktionen hinzugefügt
  • FIX: Test auf bereits Angelegte Objekte in Create-Funktionen korrigiert bzw. vereinheitlicht

Die neuen Get-Funktionen machen den Code etwas übersichtlicher beim späteren Zugriff auf die nach der Installation angelegten Variablen, Skripte usw. das wurde ja dann bisher auch mit den Create-Funktionen gemacht. Macht den Code etwas besser lesbarer und verständlicher!

Gruß Heiko

[UPDATE] Version 1.6.20231019

  • NEU: Medien Skript

Da sich der user-Ordner langsam aber sicher verabschiedet, stelle ich schon mal nach und nach alles auf IPS-Medienobjekte um. Das neue Script hilft via Webhook (/hook/medien) diese dann in HTMLBox’en auszuspielen!

Gruß Heiko

[UPDATE] Version 1.7.20231020

  • NEU: Dashboard Skript (Meldungsanzeige im WebFront / Tile Visu)

Da die neu 7.0 Tile Visu immer mehr an Beliebtheit gewinnt, habe ich schnell mal mein altes Meldungsskript um eine entsprechende Anzeigen-Varinte ergänzt. Gleichzeitig mal unter Versionskontrolle gestellt - weiß selber nach so langer Zeit nicht mehr warum und wie es gewachsen ist :slight_smile:

Gruß Heiko

[UPDATE] Version 1.8.20231106

  • NEU: PirateWeather Skript (Wetterdaten vom Nachfolger von Dark Sky)
  • FIX: Style Checks für SolarEdge jetzt korrekt

@firewire hatte mich nach meiner Darstellung der Wetterdaten gefragt. Das Skript ist aber über die Jahre immer wieder „gewachsen“ und war so nicht zum weitergeben. Hab das jetzt mal genutzt um etwas aufzuräumen. Ist vielleicht nicht meine beste Arbeit, aber funktional :smiley:
Mehr dazu in einem separaten Post.

Gruß Heiko

[UPDATE] Version 1.9.20231107

  • FIX: Veraltete System-Calls im Meldungsskript (System.Dashboard.ips.php)

Gruß Heiko

[UPDATE] Version 2.0.20231117

  • NEU: PHP Style Check Action eingeführt
  • NEU: Unterstützung der Themes (hell/dunkel) für Tile Visu (PirateWeather & Dashboard)
  • NEU: Erweiterung für PirateWeather Skript um Vorhersage und Klimadaten
  • FIX: Icondarstellung im Dashboard Skript funktioniert jetzt korrekt

Gruß Heiko

Auf vielfachen Wunsch hier noch einmal eine kleine Anleitung zur Nutzung der Skript-Bibliothek!

(Kurz)Anleitung zur Nutzung von (einzelnen) Skripten aus meiner Bibliothek

Wie immer gibt es mehrere Wege nach Rom um die Scripte zu nutzen. Diese Anleitung beschreibt wie ich es selber nutze und zeigt aber auch hier und da Möglichkeiten es anders zu machen.

Vorbereitung

Und schon geht es los - man kann sich die Skripte auf 3 verschiede Wege aus dem github-Repository holen:

  1. man erstellt ein Clone bei sich lokal des Repositories: git clone https://github.com/wilkware/ips-scripts/
    Vorteil man kann bei neuen Versionen schnell diese per git checkout holen
  2. man lädt sich alles per ZIP-Download von github runter (siehe Screen)
  3. keines der ersten beiden Varianten - man macht später Copy&Paste direkt von den Dateien in github

image

1. System-Funktionen & Local-Variablen

Warum es die Bibo gibt habe ich ja lang und breit in meinem Blog und auch hier im Forum geschrieben - primär um Code nicht immer doppelt zu pflegen!

Darum ist das Script System.Functions.ips.php die zentrale Datei.
Da jeder jetzt aber seine eigenen API-Keys, Settings usw. haben möchte - gibt es die Datei System.Locals.ips.php.

Hier die Schritte zum Erstellen dieser Dateien:

  1. In der IPS-Console ein neues Skript erstellen (z.B. Name = ‚Functions‘)
  2. dann Skript öffnen und oben über Scriptverwaltung ‚Umbennen‘ auswählen
  3. Skript in System.Functions.ips.php umbenennen
  4. Inhalt aus meiner Datei (siehe oben - Variante 1-3) in das Skript kopieren
  5. Speichern und verlassen
  6. In der IPS-Console wieder ein neues Skript erstellen (z.B. Name = ‚Locale‘)
  7. dann Skript öffnen und oben über Scriptverwaltung ‚Umbennen‘ auswählen
  8. Skript in System.Locals.ips.php umbenennen
  9. Inhalt aus meiner Datei (siehe oben - Variante 1-3) in das Skript kopieren
  10. Speichern und verlassen

Sollte dann so aussehen …

2. Autoload erstellen bzw. bearbeiten

Damit der Inhalt der gerade angelegten Skripte immer und überall verfügbar ist, müssen diese in der Autoload-Datei (__autoload.php) hinterlegt werden.

  1. per Putty (linux) oder Explorer (Windows) in das IPS-Verzeichnis /scripts wechseln
  2. wenn dort die Datei __autload.php schon existiert - perfekt - ansonsten diese anlegen
  3. den Inhalt aus meiner __autoload.php in diese hineinkopieren oder ergänzen

Wichtig sind auf jedenfall diese 2 Zeilen …

require_once IPS_GetKernelDir() . '/scripts/System.Locals.ips.php';
require_once IPS_GetKernelDir() . '/scripts/System.Functions.ips.php';

Jetzt wird vielleicht auch klar warum man die SKripte vom Namen her umbenennen sollte bzw. muss!

3. Nutzung der enthaltenen Skripte

Mit den vorherigen Schritten hat man die Grundlage gelegt alle weitern Skripte in der Bibo zu nutzen. Vom Schema (Arbeitsschritten) ist das immer identisch.

  1. Anlegen eines neuen Skriptes in der IPS-Console
  2. Inhalt aus meiner Datei reinkopieren
  3. Konfigurative Anpassungen im Header der Datei vornehmen
  4. Abspeichen
  5. Wenn nötig - das Skript Locals öffnen und Keys und Infos hinterlegen, z.B. API-Key für Wetterdaten-Zugriff - und abspeichern
  6. das zuvor neu angelegte Skript einmal aus der Console heraus ausführen (Execute)
  7. dadurch erzeugt Variablen unterhalb des Skripts in die Visu ziehen
  8. Fertig

Manchmal muss man dann noch warten bis die erzeugten Timer das 1.Mal feuern um dann echte Daten zu sehen!

HINWEIS

Da die grundlegenden Funktionen aus der Datei Systems.Functions.ips.php auch viele andere "Programmierer! hier so benennen bzw. in ihren Scripten verwenden kann es zu Fehlern führen, da eine Funktion mit gleichen Namen nicht doppelt deklariert werden darf.

Darauf gibt es 2 Antworten bzw. Lösungsmöglichkeiten:

  1. Man nutzt trotzdem meine Funktionen - schwerer und aufwendiger Weg, aber dafür hat man ein „sauberes“ System - soll heißen - man verwendet immer die gleiche Variante! Heißt aber auch man muss vielleicht anderen Code umschreiben bzw. anpassen. Also man sollte dann wissen was man tut und sich selber zu helfen wissen :wink:

  2. man löscht wieder die eine Zeile aus der __autoload.php und nutzt die Skripte nur bei meinen Erweiterungen (require_once IPS_GetKernelDir() . ‚/scripts/System.Functions.ips.php‘;). Das ist relativ einfach, weil ich das schon in meinen Skripten vorgesehen habe.
    Im Header jeder Datei befinden sich folgende Kommentarzeilen:

# 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

Dort muss man dann nur die 3 Zeile einkommentieren!

# 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
#

Ich hoffe das hilft jetzt ALLEN!

Gruß Heiko

6 „Gefällt mir“

Hy Pitti, klasse erklärung. jetzt istz mir ein Licht aufgegangen!

1 „Gefällt mir“

Es gibt das Update v2.3.20240909

  • NEU: Update Wetterscript (bessere Unterstützung für Fehler, TileVisu und openHASP)

2-3 Worte mehr zum Wetterskript: :smiley:

  • Abruf auf CURL umgebaut (hoffentlich besseres Fehlerverhalten)
  • weitere Fixes für TileVisu (Temperatur jetzt vorn, alten ICONS entfernt, Fixes für iOS)
  • Unterstützung für openHASP Mini Display (siehe anderen Thread)

Gruß Heiko

3 „Gefällt mir“

@Pitti,
kurze Frage: WO (raspberry pi pfad)muss man deine „Hilfsskripte“ speichern, wenn man es mit require_once und nicht in die autoload speichert?

require_once IPS_GetKernelDir() . 'scripts' . DIRECTORY_SEPARATOR . 'System.QuickChart.ips.php';
require_once IPS_GetKernelDir() . 'scripts' . DIRECTORY_SEPARATOR . 'System.Functions.ips.php';
require_once IPS_GetKernelDir() . 'scripts' . DIRECTORY_SEPARATOR . 'System.Locals.ips.php';

Danke und lg

Habs zufällig gefunden:

<var/lib/symcon/scripts>

Ein

print IPS_GetKernelDir() . 'scripts' . DIRECTORY_SEPARATOR . 'System.QuickChart.ips.php';

hätte es auch angezeigt.

1 „Gefällt mir“

Hallo Heiko,
ich habe ein Problem mit dem Wetter Script.

Beim Abfragen der API, die ich in den Locals abgelegt habe.

define('__WWX', [
    'MY_APIKEY' => 'abcdefghijusw.',

und dann so über das skript abrufe:

# Globale Variable __WWX als Array via define() in __autoload definiert!!!
$API = __WWX['MY_APIKEY'];   // # API-Token (Key)

bekomme ich die Meldung :

Warning: Undefined array key „MY_APIKEY“ in /mnt/data/symcon/scripts/35979.ips.php on line 11

Gruß,
Stefan

Haste die Locals auch in der Autoload drin?

Hab die Skripte von dir übernommen.

require_once IPS_GetKernelDir() . '/scripts/System.Locals.ips.php';
require_once IPS_GetKernelDir() . '/scripts/System.Functions.ips.php';


alles sauber im DAteisystem abgelegt.

image

nur das hab ich abgeändert im skript: