Pitti's Skript-Bibliothek

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

Ich glaube du musst das ___WWX auch weg machen. Bin gerade nicht zu Hause sonst hätte ich nachgeschaut.

Hab nun die API Abfrage direkt ins skript gegeben. jetzt funktionierts.

Danke für die Hilfe!

Habe jetzt gerade nachgeschaut. Der API Key wird so eingetragen:

VG

Hallo @pitti,

danke für Deine tollen Module und Skripte! Musste wieder mal gesagt werden :wink:

Aktuell würde ich mich gern mehr mit Quickcharts beschäftigen, da ja HighCharts scheinbar wegen des hier beschriebene ungelösten Sicherheitsproblems für mich keine Zukunft hat und in der V8 noch nicht alle Charttypen verfügbar sind.

Aktuell fehlen mir die Tooltips bei den Charts, bei Quickcharts scheint das aber in den Demos zu funktionieren. Hättest Du vielleicht einen Tipp für mich?

Danke und schönen restlichen ersten Advent!

1 „Gefällt mir“

Ich nutze QS nur zur Generierung von SVGs. Soweit ich das verstanden habe, geht es wenn Du due JS Variante nutzt und diese dann als iFrame einbindest! Aber wie gesagt, habe da auch keine Erfahrungen!

Gruß HEiko

Das Weihnachtsupdate :christmas_tree:

Wie die Tage hier irgendwo versprochen habe ich mal die Lib auf den neusten Stand gebracht. Ich bin nochmal durch alle Skripte durch und habe versucht die Logik von den Setup-Daten zu trennen, d.h. die personalisierten Daten wie IDs & Tokens in die System.Locals.ips.php auszulagern!!!

Changelog v2.4.20241222

  • NEU: Börsenticker Script
  • NEU: Update Local Script um neue TileVisu Farben und Icon-Mapping
  • NEU: Update SolarEdge Script wegen Auswahl des (Auswertungs-)Zeitraums
  • FIX: Versionsnummern in allen Scripts korrekt nachgezogen

Ein Wort in eigener Sache

Ich möchte kurz erklären, warum ich die Bibliothek ursprünglich eingeführt habe und welche Ziele ich damit verfolgte:

  • Zusammenführung von Basis-Funktionen: Die Idee war, die vielen hilfreichen Basis-Funktionen, die hier im Forum kursieren, zu bündeln (in System.Function.ips.php) und nicht jedes Mal in jedem Skript neu erfinden zu müssen.
  • Zentrale Wartung und Wiederverwendbarkeit: Durch die Nutzung einer zentralen Bibliothek sollte die Wartung erleichtert werden. Fehler müssten nur an einer Stelle behoben werden, und der Fokus könnte auf die eigentliche Logik der Skripte gelegt werden.
  • Nutzung durch andere: Die Basis-Funktionalitäten sollten auch für andere Nutzer verfügbar sein, sodass sie von den Vorteilen profitieren können (in Kombination mit __autoload.php).
  • Trennung von Logik und personalisierten Daten: Mit Hilfe von Locals (System.Local.ips.php) sollte es einfach werden, die Skripte an die individuellen Bedürfnisse anzupassen – Nutzer müssten nur ihre Keys und IDs eintragen, und alles wäre einsatzbereit.

Für mich persönlich hat sich dieses Vorgehen absolut bewährt. Meine gesamte Instanz basiert auf dieser Struktur, und selbst wenn ich neue Ideen oder Skripte aus dem Forum aufgreife, integriere ich diese immer in meine Bibliothek, anstatt sie 1:1 zu übernehmen. Ein gutes Beispiel ist der Börsenticker von @Smudo, der super auf tagesschau.de optimiert wurde. Ich konnte diesen sehr einfach in meine Bibliothek einfügen und an mein System anpassen.

Allerdings muss ich auch selbstkritisch sagen, dass ich dabei wohl zu sehr von meinen eigenen Arbeitsweisen ausgegangen bin. Oft wird der Ansatz der Bibliothek nicht wirklich verstanden und einfach nur Copy&Paste genutzt. Mit der Einführung der Tile-Visu wird das Thema sogar noch komplexer, da es bei den meisten Skripten um HTML-Boxen und deren Darstellung geht.

Wie geht es weiter?
Ich werde weiterhin Skripte, die ich für interessant halte, in meiner Bibliothek auf GitHub veröffentlichen und die Bibliothek auch weiter pflegen. Allerdings werde ich meine Veröffentlichungen hier im Forum reduzieren und mich verstärkt auf die Entwicklung und den Support von Modulen konzentrieren.

Vielen Dank für euer Verständnis und euer Interesse an meinen Projekten! :blush:

LG
Pitti der Liebe

7 „Gefällt mir“