Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. ticaki

    NEWS

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    T
    • Profile
    • Following 1
    • Followers 7
    • Topics 23
    • Posts 3997
    • Best 826
    • Groups 4

    ticaki

    @ticaki

    Developer

    1051
    Reputation
    289
    Profile views
    3997
    Posts
    7
    Followers
    1
    Following
    Joined Last Online

    ticaki Follow
    Developer Pro Starter Most Active

    Best posts made by ticaki

    • [Script] DWD/UWZ/NINA Warnungen als Push/Sprachnachrichten

      Deprecated

      Wird zum Adapter weiterentwickelt und es finden keine Verbesserungen oder Fehlerbehebungen mehr statt. Abgesehen von kritischen.

      https://forum.iobroker.net/topic/68595/test-adapter-weather-warnings

      Das Script:


      Script auf Github

      DWD-UWZ-NINA-Pushwarnungen-iobroker

      Vorbemerkung

      Diese Anleitung ist schon seit längerem nicht überarbeitet worden, daher nicht ganz aktuell.
      Das Skript mit dem anhang beta, wird zur dieser Zeit (08/2023) überarbeitet, da gibt es immer wieder unkommentierte Änderungen. Die Konfiguration wird in diesem ebenfalls immer mal wieder angepasst, so das ein einfaches Copy&Paste nicht ausreicht. Könnt ihr gerne testen, aber es ist expliziert eher ALPHA als beta.

      Support

      Supportthread: Iobroker Forum

      Scriptbeschreibung

      Mit diesem Script kannst du Warnungen des Deutschen Wetterdienstes, der Unwetterzentrale, der Zentralanstalt für Meteorologie und Geodynamik(Österreich) oder von Nina (Notfallinformationssystem der BRD) als Text oder Sprachausgabe über verschiedene Wege ausgeben. Dieses geschieht entweder automatisch nach dem Eintreffen oder nach Betätigen eines Schalters.
      Für DWD, Zamg und UWZ gibt es Datenpunkte um bei bestimmten Gefahren selbst gesteuerte Aktionen auszuführen. Letzteres nutze ich z.B. um bei Sturm/Regen und offenen Fenstern auf diese hinzuweisen.

      Unterstützt:

      • Telegram, Pushover, Home24-Mediaplayer, SayIt, Alexa, Datenpunkt, eMail oder Whatsapp
      • Standalone Datenabruf für DWD, NINA, UWZ und Zamg
      • Wetterwarnung
      • Wetterentwarnung

      Funktionen:

      • Filter die Warnungen nach doppelt, Gefahr(level) und Höhe
      • Umschalten über iobroker zwischen DWD/UWZ/NINA
      • Automatischer Versand und/oder manueller Nachrichtenversand (in Lang- oder Kurzform)
      • Zeitschaltuhr für Sprachausgabe
      • Datenpunkte mit der Startzeit, Endzeit, Type, Schlagzeile, Beschreibung, Farbe für Level(bgcolor) und höchstem Warnlevel dieses Typs
      • Datenpunkthauptpfade sind konfigurierbar incl. 0_userdata
      • Konfigurationsprüfung soweit möglich
      • Automodus und einzelne Pushdienste über iobroker schaltbar, sowohl für Automodus als auch Manuell
      • Optimierte Sprachausgabe

      Kleinkram:

      • Sprachausgabe: Sturmdetails werden ausgefiltert oder korrekt ausgesprochen (konfigurierbar)
      • Sprachausgabe: Pause zwischen dem Absenden der einzelnen Warnungen an die Wiedergabeeinheit konfigurierbar.
      • Manuelle Sprachnachrichten können die Zeitschaltuhr missachten. (konfigurierbar)
      • Multi-User/Device bei fast allen Pushdiensten verfügbar (außer Datenpunkt & pushover & whatsapp)
      • Autorestart bei Datenpunkterstellung
      • Alexa und SayIt mit Lautstärkeeinstellung. Alexagruppen unterstützen keine Lautstärke trotzdem konfigurieren.
      • Zusätzliche Hervorhebung konfigurierbar über attentionWarningLevel (im Betreff/Ansage)
      • Filter für Nina-sender
      • Namesbezeichner für Nina verfügbar, diese werden benötigt, falls in der Warnung Ort genannt wird, das auszugeben und damit die Bedeutung der Warnung hervorzuheben.

      Dank an:

      • Mic für die createUserStates() Funktionen
      • CruziX der diese eingebaut hat.
      • crunchip, sigi234, Latzi fürs Testen und Ideen
      • die ursprünglichen Authoren s.o. (im Skript)

      Bedeutung der Farben:

      • 0 - Grün
      • 1 - Dunkelgrün (wobei tails entfernt)
      • 2 - Gelb Wetterwarnungen (Stufe 2)
      • 3 - Orange Warnungen vor markantem Wetter (Stufe 3)
      • 4 - Rot Unwetterwarnungen (Stufe 4).
      • 5 - Violett Warnungen vor extremem Unwetter (DWD -> Weltuntergang nach aktueller Erfahrung und Nina -> höchste Stufe

      Vorbemerkung zur Konfigurationen

      Update: Das Skript wird in Zukunft keine externen Adapter mehr benötigen oder unterstützen.
      Das Skript und die Dokumentation wurden zu erst nur für externe Adapter geschrieben, daher beziehen sich vieles auf die Zusammenarbeit mit diesen. Wenn ihr den integrierten Datenabruf verwenden wollt, findet ihr unter Objekten im Unterverzeichnis

      0_userdata.0.wetterwarnung1.config.basiskonfiguration.warnzelle
      

      Die Warnzellen die verwendet werden. Ihr könnt dort Warnzellen hinzufügen und entfernen. Im Unterschied zu allen anderen Datenpunkten die sich über die Objekte verändern lassen, überschreiben die Änderungen dort jedoch nicht die Einstellungen im Skript. Wenn das Skript gestartet wird, werden alle im Skript definierten Warnzellen dort eingetragen, anschließend werden alle dort eingetragenen Warnzellen vom Skript eingelesen und verwendet. Folglich könnt ihr keine Warnzellen löschen die im Skript definiert sind. Folgenden Variablen werden für die Definition von Warnzellen verwendet.

      Update: Das wird alles über Datenpunkte erledigt

      Konfiguration in ioBroker/Objekte unter mainStatePath.config

      1. DWD/UWZ/NINA auf true stellen um den jeweiligen Modus zu aktiveren.
      2. Mode ist aus Kompatibilitätsgründen drin und kann als Zeichenkette UWZ usw enthalten.
      3. Punkte unter .auto aktiveren oder deaktivieren den automatischen Versand von Warnmeldungen.
      • .on schaltet den kompletten automatischen Versand an/aus.
      • die Restlichen schalten für einen bestimmten Modus eine bestimmte Art an oder aus.
      1. Punkte unter manuell schalten für das manuelle Auslösen in einem bestimmten Modus die Möglichkeit an oder aus. (z.B. UWZ über alexa aber NINA nicht).

      Vorbereitung bei der Verwendung von NINA bei Verwendung des externen Adapters

      • mindestens v0.0.22
      • in der Adapterkonfiguration diesen Punkt aktivieren: Json der Warnung in den State rawJson speichern (erhöhter Speicherbedarf)

      Konfiguration bei Verwendung des Skript internen Datenabrufs für DWD, ZAMG, UWZ, NINA (keine anderen Adapter nötig)

      • für UWZ konfiguriert regionName. [['UWZ + DE + PLZ','Mein Ort']]
      var regionName          = [['','']];// var regionName = ['UWZDE13245', 'Entenhausen']
      

      -die Warncelle ist die Zahl in der linken Spalte: https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv?__blob=publicationFile&v=3

      // Standalone Datenquelle
      // entnehme ZAHL aus CSV
      /* nur Gemeinde/Landkreis/Großstädte werden verwendet: https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv?__blob=publicationFile&v=3 */
      var dwdWarncellId = ''; // Deaktivieren mit '' einzel: '2334535354' mehrere: ['23423424','23423423']
      
      • Bei Zamg einfach die Koordinaten eingeben (müssen in Österreich liegen)
      // Koordinaten [{laengen:13.05501,breiten:47.80949}];.
      var zamgCoordinates = []; // [] ist deaktiviert
      var uZAMGMitMeteoinformationen = true; // gibt die Wetterinformationen mit der Beschreibung aus: z.B Eine Kaltfront und ein Italientief sorgen im Warnzeitraum...
      
      • Für Nina ebenfalls die Koordinaten eingeben (müssen in Deutschland liegen)
      // für Nina gebt die Koordinaten für euren Ort ein.
      ninaCoordinates = [] //   ninaCoordinates = [{breiten:51.2277, laengen:6.7735, text:'dadrüben'}, {breiten:53.0511000, laengen:8.6309100, text:'Delmenhorst'}];
      
      

      Konfigurationsparameter NACH dem ersten Start

      • DWD/UWZ/NINA muß gesetzt werden, ist alles deaktiviert.
      • Anschließend die Einstellungen unter 0_userdata.0.wetterwarnung.config.auto und 0_userdata.0.wetterwarnung.config.manuell kontrollieren. Mit diesen könnt ihr einstellen das z.B DWD über Alexa und Email ausgegeben wird, Nina hingegen nur über Email
      • Nach dem ersten Start werden Datenpunkte erstellt, die in Zukunft zur Konfiguration genutzt werden und die Werte im Skript überschreiben. Diese findet ihr unter config

      Konfigurationsparameter Script

      Konfigurationsparameter vor dem ersten Start

      1. Der Datenpfad zu allen von diesem Script erstellten Datenpunkten.
      var mainStatePath = 'javascript.0.wetterwarnung_test.';
      // oder
      var mainStatePath = '0_userdata.0.wetterwarnung.';
      
      1. Aktiveren der Ausgabemöglichkeiten. Es muß mindestens 1 Punkt aktiviert sein.
        Zu den jeweiligen Optionen muß der entsprechende Adapter installiert werden und eventuell im folgenden noch weitere Konfigurationen vorgenommen werden.
      //uPushdienst+= TELEGRAM;          
      //uPushdienst+= PUSHOVER;          
      //uPushdienst+= EMAIL;             
      //uPushdienst+= SAYIT;             
      //uPushdienst+= HOMETWO;  // kein Adapter nötig        
      //uPushdienst+= ALEXA;             
      //uPushdienst+= STATE;    // kein Adapter nötig         
      //uPushdienst+= IOGO;              
      

      Um einen Punkt zu aktiveren entferne die //
      z.B.

      uPushdienst+= TELEGRAM;
      

      Konfigurationsparameter Allgemein

      • Stellt uLogAusgabe auf 0 wenn alles so läuft wie ihr euch das vorstellt.
      var uLogAusgabe=        2; // auf 0 gibt es überhaupt keine Ausgabe beim normalen Betrieb.
      
      • Mit Hilfe dieser Variablen bestimmt ihr ob Email, Textnachrichten oder Sprachnachrichten voreingestellt ohne Beschreibung (false) und/oder Anweisungen (false) versand werden.
      var uSpracheMitBeschreibung         = true; // gilt für alle Sprachnachrichten
      var uSpracheMitAnweisungen          = true; // uSpracheMitBeschreibung muß evenfalls true sein um Anweisungen zu erhalten
      var uHtmlMitBeschreibung            = true; // gilt für Email
      var uHtmlMitAnweisungen             = true; // uHtmlMitBeschreibung muß evenfalls true sein um Anweisungen zu erhalten
      var uTextMitBeschreibung            = true; // gilt nicht für Email, aber für alle anderen Textnachrichten
      var uTextMitAnweisungen             = true; // uTextMitBeschreibung muß evenfalls true sein um Anweisungen zu erhalten
      
      uTextHtmlMitOhneAlles               = false // diese beiden Optionen überschreiben alle oben getroffenen Einstellungen
      var uSpracheMitOhneAlles            = true;
      
      • MitOhneAlles folgendes Muster: Warnung vor Typ, für Region, Stufe: Farbe, Tag Tageszeit
      • Beispiel: Warnung vor Sturm für Köln, Stufe: gelb, heute abend

      Sprachausgabe weitere Einstellungen

      • Wenn die Sprachausgabe manuell ausgelöst wird, kann die Sprachausgabewarteschlage gelöscht (true) oder die abgerufenen Nachrichten angehangen werden (false).
      var uManuellClickClearSpeakMessageList = true;
      
      • Die Sprachausgabe kann die Details zur Windgeschwindigkeit ausblenden (false) oder aussprechen (true)
      var windForceDetailsSpeak   = false;
      

      Zeitschaltuhr für Sprachausgabe

      • Ab wieviel Uhr darf die Sprachausgabe verwendet werden (Mo-Fr)
      var startTimeSpeak =        '6:45';
      
      • Ab wieviel Uhr darf die Sprachausgabe am Wochenende verwendet werden (Sa-So)
      var startTimeSpeakWeekend = '9:00';
      
      • Wann endet die Sprachausgabeabends
      var endTimeSpeak =          '22:30';
      
      • Das manuelle Auslösen der Sprachausgabe berücksichtigt die Zeitschaltuhr (false) es ignoriert sie (true)
      var forcedSpeak             = true;
      

      Filtermöglichkeiten für Warnungen

      1. minlevel hiermit bestimmt man ab welchem Level Warnungen von diesem Skript berücksichtigt werden. Dieser Wert sollte nicht höher als 3 eingestellt sein.
      const minlevel                      =    1
      
      1. attentionWarningLevel Warnungen gleich/über diesem Wert werden extra hervorgehoben. Die Überschriften zeigen auf Gefahr hin. Pushover-Nachrichten werden mit höherer Prioritätversand. Alle internen nicht einstellbaren Filter/ Filter die im 2. Konfigurationsabschnitt stehen übergehen diese Warnung.
      const attentionWarningLevel         =    4
      
      1. Warnungen von DWD und UWZ kommen gelegentlich mit einer von/bis Höhenangabe.
      • Tragt bitte hier die Höhe des tiefesten Punktes in eurem Gebiet ein, den ihr in eurem täglichen Leben aufsucht. In meiner Region kommen Meldungen eher selten mit dem "bis" Eintrag.
      const minhoehe                      =    0
      
      • Hier den höchsten Punkt. Dieser wird mit dem "von" Eintrag verglichen. Ich nehme die Höhe meines Ortes 350m +/- 100m
      const maxhoehe                      =    5000
      

      Konfigurationsparameter für Pushmöglichkeiten

      • optionale Punkte brauchen nicht angepasst zu werden, wenn die Möglichkeit oben aktiviert wurde.
      • nicht optionale Punkte müssen angepasst/überprüft werden, wenn die Möglichkeit oben aktiviert wurde.

      Einstellungen zu Telegram: (optional)

      • Stelle hier Optional bestimmte Nutzer oder ChatID ein. Einzelnutzer ['Hans']; Multinutzer ['Hans', 'Gretel']; Nutzer vom Adapter übernehmen [];
      • Die Instanz nur anpassen, wenn deine davon abweicht. Das gilt für jede Instanzeinstellung
      var telegramUser        = [''];
      var telegramChatId      = [''];
      var telegramInstanz     = 'telegram.0';
      

      eMail: (optional)

      • Stelle hier Optional 1 Emailadresse ein, von der versendet wird, und mehrere Emailadressen die empfangen sollen.
      var senderEmailID       =   [""];// 1 Eintrag erlaubt [] oder ["email1"]
      var empfaengerEmailID   =   [""];// Mehrere Empfänger möglich. [] oder ["email1"] oder ["email1","email2"]
      var emailInstanz        =   'email.0';
      

      Pushover: (optional)

      • DeviceName, hier könnt ihr eines der angemeldeten Gerät bestimmen, das die Nachrichten erhalten soll. Ist kein Gerät bestimmt bekommen alle die Nachricht.
      • uPushoverSound bietet euch die Möglichkeit einen eigenen Sound für die Nachricht auszuwählen. Was ihr dort eintragen könnt findet ihr dort: https://pushover.net/api#sounds
      var uPushoverDeviceName     = '';
      var uPushoverSound          = '';  
      var pushoverInstanz         = 'pushover.0';
      

      ioGo (optional)

      • ioGoUser: Tragt keinen, einen, oder mehrere "ID des Gerätes" ein.
      var ioGoUser = [''];
      

      Home24:

      • Das ist ungetestet, benutzt besser SayIt. Eingabe IP-Adresse incl. Port für Home24-Mediaplayer mehrere möglich
      var idMediaplayer       = ["192.168.178.x:Port"]; // (muß einen sinnvollen Wert beinhalten, wenn aktiviert)
      

      SayIt

      • idSayIt muß korrekt ausgefüllt sein, mit dem Datenpfad zum .text Datenpunkt, mehrere möglich.
      • sayItVolumen muß die gleiche Anzahl an Einträgen haben wie idSayIt 0-100
      var idSayIt             = ["sayit.0.tts.text"]; // (muß einen sinnvollen Wert beinhalten, wenn aktiviert)
      var sayItVolumen        = [30]; // gleiche Anzahl wie idSayIt
      

      Alexa

      • idAlexaSerial beinhaltet die Seriennummer deines Echos/deiner Echos. var idAlexaSerial =['G090RV32984110Y', 'G090RV32984110Y'];
      • alexaVolumen 0-100 die gleiche Anzahl wie idAlexaSerial z.B. [30,30];
      var idAlexaSerial       = [''];
      var alexaVolumen        = [30];
      var alexaInstanz        = 'alexa2.0';
      

      Konfigurationsparameter zu den Modi DWD, UWZ, NINA

      1. Einstellungen zur Unwetterzentrale/UWZ:
        Hier gibts du die UWZ RegionID an. Also z.B. UWZDE12345 und den Namen deines Ortes z.B. Entenhausen.
      var regionName          = [['UWZDE12345','Entenhausen']];
      
      1. Einstellungen zu Nina
      • Hier stellt bitte euren Ort und euren Landkreis ohne (Kreis, Landkreis, etc) ein. Warnungen von Nina kommen mit Aufgelisteten Orten, das Skript sucht dort drin nach euren Bezeichnern und gibt den gefundenen in der Warnung mit aus.
      var uGemeinde = '';
      
      ## Support
      - Findet ihr: https://forum.iobroker.net/topic/30616/script-dwd-uwz-nina-warnungen-als-push-sprachnachrichten/216
      
      [s=DWD/UWZ/NINA Script überarbeitet von ticaki]
      [Script auf Github](https://github.com/ticaki/DWD-UWZ-NINA-Pushwarnungen-iobroker)
      [/s]
      posted in JavaScript
      T
      ticaki
    • RE: Test Adapter Weather-Warnings

      Hallo, fange wieder an aktiv zu werden(bin mit dem Gesundungsprozess so weit durch), wird zwar noch etwas dauern bis ich wieder drin bin aber gehe dann auf github gemeldete Probleme an.

      @RoddiEF
      da fehlt ein Teil der Fehlermeldung

      posted in Tester
      T
      ticaki
    • Betatest Bright Sky v0.3.x
      Aktuelle Test Version v0.6.x
      Veröffentlichungsdatum 02.10.2025
      Github Link https://github.com/ticaki/ioBroker.brightsky

      Ein weiterer Wetteradapter - mit danke an @Armilar der mir laufend Apis um die Ohren haut und dann sagt: 'Wäre zwar schön, aber brauchst da keinen Adapter für schreiben' 👀

      Die Wetterdaten dieses Adapters kommen vom DWD - die Current sind meist sehr präsize - Stündliche Vorhersagen sind vom Standort abhängig und Täglichvorhersagen werden vom Adapter aus den stündlichen berechnet.

      Currently und hourly sind von der API. Daily wird vom Adapter aus den Werten von hourly berechnet.

      Sollte bis auf Kleinigkeiten fertig sein. (das hätte ich wohl besser nicht geschrieben 🙂 )

      Bitte von Github installieren.

      Für weitere Infos siehe Armilars ausschweifenden Beitrag 😛

      posted in Tester
      T
      ticaki
    • RE: Betatest NSPanel-lovelace-ui v0.4.x

      Update Rollladen TFT 4.9.3

      Gibt nun eine Adminoption um zu bestimmen, ob eine Position von 0 bedeutet das der Rollladen zu 0% offen (komplett eingefahren) oder zu 0% geschlossen (komplett ausgefahren) ist.

      posted in Tester
      T
      ticaki
    • RE: Test Adapter pirate-weather 0.5.x

      Ich sehe diesen Adapter, soweit keiner mehr eine/-n Vorschlag/Idee hat als

      Feature Complete

      an

      posted in Tester
      T
      ticaki
    • RE: Betatest NSPanel-lovelace-ui v0.4.x

      Hab mal all die Änderungen mit einer v0.3.0 gewürdigt

      Noch nicht genannte Verbesserung

      • Code in manchen Funktionen neu geschrieben - kommt mir jetzt flüssig vor

      Bitte oben im Forum schauen was sich sonst so alles geändert und verbessert hat.

      EDIT

      • Alexa fertig drin - nach dem release von 0.3.0 🙂
        • Icons unten umsortiert und repeat hinzugefügt, da ist aber noch ein Bug im alexa2

      EDIT2
      mediaPlayer unterstützt auch nutzer erstellte Icons, wie bei den anderen cards hinzufügen im Skript.

      posted in Tester
      T
      ticaki
    • RE: Betatest NSPanel-lovelace-ui v0.4.x

      @TT-Tom @Armilar

      Anleitung: Verwendung von Templates in NSPanel PageItems

      Einleitung

      Templates bieten eine einfache Möglichkeit, häufig verwendete Anzeige- und Steuerungselemente in PageItems zu integrieren.
      Ein Template wird als Objekt im items-Array einer Seite eingebunden und stellt automatisch die passende Visualisierung und Logik bereit.

      Verwendung

      Ein Template wird über das Attribut native.template definiert.
      Über dpInit wird die Datenpunkt-ID angegeben, an die das Template gebunden ist.

      Beispiel für eine Uhr (digitale Anzeige):

      { native: { template: 'text.clock', dpInit: '' } },
      

      Beispiel für Batterieanzeige (niedriger Batteriestand, mit indicator.lowbat-Role):

      { native: { template: 'text.battery.low', dpInit: 'hm-rpc.1.0000DYXSDSDEF71111B7.0.LOW_BAT' } },
      

      Navigationserweiterung

      Alle Templates unterstützen zusätzlich die Attribute navigate und targetpage. Damit kann beim Auslösen eine andere Seite geöffnet werden.
      Falls notwendig, muss type: 'button' ergänzt werden.

      {
        navigate: true,
        targetpage: 'zielseite',
        native: { template: 'text.battery.low', dpInit: '', type: 'button' },
      },
      

      Beispiele

      Grid mit Template

      Templates können in cardGrid-Seiten genutzt werden:

      const subgrid1: PageType = {
        uniqueName: 'media2',
        heading: 'Grid 1',
        items: [
          { native: { template: 'text.battery.low', dpInit: '0_userdata.0' } },
        ],
        type: 'cardGrid',
        home: 'hidden',
        parent: 'cardGrid1',
        hiddenByTrigger: false,
      };
      

      Einschränkungen

      • Templates stehen in cardMedia-Seiten nicht zur Verfügung.
        Benutzerdefinierte PageItems können jedoch weiterhin genutzt werden.
        Bei cardMedia ist der Suchpfad für Datenpunkte fest vorgegeben und nicht veränderbar.

      • Bei Rollen muss die Schreibweise exakt stimmen (z. B. indicator.lowbat).

      Verfügbare Templates

      Die folgende Übersicht zeigt gängige Templates und ihre Einsatzbereiche:

      Template Beschreibung
      text.clock Digitale Uhr
      text.battery.low Batterieanzeige (niedrig)
      text.battery Batterieanzeige allgemein
      text.window.isOpen Fenster offen
      text.window.isClose Fenster geschlossen
      text.temperature Temperaturanzeige
      text.door.isOpen Tür offen
      text.gate.isOpen Tor offen
      text.motion Bewegungserkennung
      text.info Infotext
      text.warning Warnanzeige
      text.wlan WLAN-Status
      text.shutter.navigation Rollladensteuerung (Navigation)
      text.lock Schlosszustand
      text.isOnline Online-/Offline-Status

      Zusätzlich existieren Templates für spezielle Anwendungsfälle (z. B. text.sainlogic.windarrow, text.custom.windarrow, text.hmip.windcombo).

      Es gibt noch weitere Templates, die je nach Anwendungsfall genutzt werden können.
      Die Benennung orientiert sich am vorgesehenen Einsatzgebiet (z. B. button, light, shutter).

      Eine vollständige Übersicht kann bei Bedarf bereitgestellt werden.

      Erweiterte Anpassungen (für Experten)

      Templates können vollständig angepasst werden – etwa Farbe, Icon oder auch die zugehörigen Datenpunkte.
      Dies sollte jedoch nur von erfahrenen Anwendern und nach Rücksprache erfolgen, da solche Änderungen leicht zu Fehlern führen können.

      Ein Beispiel: Änderung der Farbe der Uhr (text.clock) :

      // Beispiel 1: Feste Farbe (const)
      native: {
          template: 'text.clock',
          dpInit: '',
          data: {
              icon: {
                  true: {
                      color: { type: 'const', constVal: Red },
                  },
              },
          },
      },
      
      // Beispiel 2: Dynamische Farbe aus einem State (RGB JSON-String)
      native: {
          template: 'text.battery.low',
          dpInit: 'hm-rpc.1.Battery-Device.0.LOW_BAT',
          data: {
              icon: {
                  true: {
                      color: { type: 'state', dp: '0_userdata.0.visuals.batteryColorRGB' },
                  },
              },
          },
      },
      
      // Beispiel 3: Dynamische Farbe per Trigger (RGB JSON-String)
      native: {
          template: 'text.battery.low',
          dpInit: 'hm-rpc.1.Battery-Device.0.LOW_BAT',
          data: {
              icon: {
                  true: {
                      color: { type: 'triggered', dp: '0_userdata.0.visuals.triggeredBatteryColor' },
                  },
              },
          },
      },
      

      Wichtige Hinweise zum Schluss

      1. Für den Block native existieren keine Typdefinitionen im Konfigurationsskript.
        Der Grund: Hier wird direkt die adapterinterne Konfiguration berührt, die aufwendig ist und sich teilweise noch ändern kann.

      2. Alle beschriebenen Möglichkeiten funktionieren grundsätzlich.
        Es kann jedoch vorkommen, dass bestimmte Optionen noch nicht im Konfigurationsskript eingebaut sind.
        Das Hinzufügen ist meist in wenigen Minuten erledigt – bitte einfach Bescheid sagen, wenn etwas fehlt oder nicht wie erwartet funktioniert.

      posted in Tester
      T
      ticaki
    • RE: Betatest NSPanel-lovelace-ui v0.4.x

      Noch kurze dazu:
      Ich hab die überwiegend für mich gemacht - und halt ein paar abwandlungen wie isOpen oder isClose - was hilft ein template für offene Fenster wenn es nur einen Datenpunkt gibt der true wird wenn es zu ist 🙂

      Da kann man für shelly, zigbee, zigbee2mqtt usw. weitere templates hinzufügen, so das man nur noch das gerät angibt und dann wird daraus ne steckdose, ein rolladen, ne lampe usw ohne Aliase anlegen zu müssen.

      Das mache ich aber nur auf Anfrage - keine Lust 100 Templates zu schreiben, die keiner braucht 🤣

      posted in Tester
      T
      ticaki
    • RE: SONOFF NSPanel mit Lovelace UI

      Update - v4.3.3.30

      image.png

      • Überarbeitung der Types
      • Verbesserung der Variablenprüfung
      • Bessere Fehleranzeige in der Konfiguration

      Änderungen am Konfigurationsteil

      Um die Vorzüge der verbesserten Types zu nutzen sind folgende Änderungen nötig. Diese sind kein muss, sondern ein kann. Es werden nachdem Einfügen der folgenden Codeänderungen auf jeden Fall Fehler in eurer Konfiguration erscheinen, die ihr dann bitte behebt.

      alt
      export const config = <Config> {

      neu
      export const config: Config = {

      Der zweite Teil umfasst mehr Punkte und begrifft jede definierte Page.
      PageChart | PageEntities | PageGrid | PageGrid2 | PageThermo | PageMedia | PageUnlock | PageQR | PageAlarm | PagePower

      Diese alle ersetzen wie im gezeigten Beispiel:
      let Abfallpage = <PageEntities>

      Neu
      let Abfallpage: PageType =

      Wenn aktuelle Version ab v4.3.3.10, dann unteren Teil des NSPanelTs.ts ab:

      // ________________ DE: Ab hier keine Konfiguration mehr _______________

      austauschen

      https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/NsPanelTs.ts

      Wenn aktuelle Version bis v4.3.3.9, dann Updateaneitung befolgen:
      https://github.com/joBr99/nspanel-lovelace-ui/wiki/NSPanel-Starthilfe-FAQ#hilfe-bei-update--upgrade

      VG
      @Armilar, @TT-Tom, @Kuckuckmann & @ticaki 😊

      posted in Hardware
      T
      ticaki
    • Test Adapter Plex v1.1.x
      Aktuelle Test Version 1.1.x
      Veröffentlichungsdatum 10.12.24
      Github Link https://github.com/iobroker-community-adapters/ioBroker.plex

      Translation status

      Über Tester der aktuellen Version würde ich mich sehr freuen.

      Änderungen v 1.1.0:

      • bei Update auf diese Version bitte alles incl. plex im Objektdatenbaum löschen und dann Adapter neustarten
      • Player(Abspielgerät)aktualisierung hin zugefügt. (benötigt Webhook).
      • States unter _playing.x._Controls
        • _Controls.playback.playLast um Start für letztes Medium zu starten nach dem Playerverbindung verloren hat wurde
        • _Controls.playback.playKey starten von eigenen Keys (key#viewoffset)
        • _Controls alle States zeigen den aktuellen Werte des Players an, soweit sinnvoll und verfügbar
        • _Controls.timeline.refreshDetails schaltet die Option, Playeraktualisierung per Player grundsätzlich an oder aus. Gestartet wird es immer durch das Empfangen einer Webhooknachricht.
        • States unter _Controls werden niemals gelöscht oder genullt.
      • States unter _playing.x.Player
        • states die direkt auf der Ebene Player.details liegen können sich im Verhalten ändern. Das ist ein Dump der internen Daten, die teilweise wieder geladen werden beim Plex-Adapter restart.
        • .details. beinhalten den aktuellen Status des Players nach Priorität, wenn z.B. Photos mit Musik abgespielt werden (video, music dann photo) (Prorität ist ungetestet)
        • states unter Player.details.[music, photo, video] beinhalten die Daten die vom Player kommen und werden niemals gelöscht oder genullt.
      • Unter Metadata findet ihr einen Ordner Music darunter finden sich der link zur Liedtextdatei, Plaintext und dem Codec.
        • Löschen/nullen von States, betrifft die Aufräumfunktion
          • states unter _Controls oder Player werden nicht Aufgeräumt
          • Alle anderen States unter _playing werden bei einem Webhookeingang und wenn sie seit 30 Minuten nicht intern aktualisiert wurden genullt.
      • Übersetzung: Alle States sollte jetzt Übersetzungen in den üblichen Sprachen haben - fehlerhafte Übersetzungen bitte melden... oder dämliche 🙂
      • und gewiss viele Kleinigkeiten die ich vergessen habe

      Bekannte Fehler:

      • Übersetzung (de) des neuen Adminkonfigurationspunkt ist echt mies

      Feedback zu folgenden Fragen erwünscht:

      • Fehlt noch etwas um den Adapter "vis-ready" zu bekommen?

      Noch offene Punkte:

      posted in Tester
      T
      ticaki

    Latest posts made by ticaki

    • RE: Betatest NSPanel-lovelace-ui v0.4.x

      Global Pages und Global Link

      Übersicht

      Das Feature Global Pages ermöglicht es, Seitenkonfigurationen zentral zu definieren und in mehreren Panel-Skripten wiederzuverwenden. Dies ist besonders nützlich, wenn Sie mehrere NSPanels haben und möchten, dass diese die gleichen Seiten verwenden, aber mit jeweils unterschiedlicher Navigation oder Anordnung.

      Die Funktion besteht aus zwei Hauptkomponenten:

      • Global Script: Definiert wiederverwendbare Seiten zentral
      • Local Script: Referenziert Seiten aus dem Global Script mittels globalLink

      Konzept und Vorteile

      Was sind Global Pages?

      Global Pages sind Seitendefinitionen, die in einem separaten Global Script gespeichert werden. Diese Seiten können dann von mehreren Local Scripts (Panel-spezifische Konfigurationen) referenziert werden.

      Vorteile

      • Zentrale Wartung: Änderungen an einer Seite werden nur einmal im Global Script vorgenommen und automatisch auf alle Panels übertragen
      • Konsistenz: Alle Panels verwenden die gleichen Seitendefinitionen
      • Flexibilität: Jedes Panel kann die globalen Seiten in unterschiedlicher Reihenfolge und mit unterschiedlicher Navigation verwenden
      • Überschreibbarkeit: Bestimmte Eigenschaften wie heading können im Local Script überschrieben werden
      • Reduzierte Redundanz: Keine Notwendigkeit, die gleichen Seiten mehrfach zu definieren

      Global Script einrichten

      1. Global Script verwenden

      Der Adapter erstellt bei der Installation automatisch ein Global Script (globalPageConfig.ts). Dieses Script enthält bereits alle notwendigen Strukturen und muss nur mit Ihren Seitendefinitionen gefüllt werden.

      Hinweis: Das Script wird im JavaScript-Adapter-Ordner gespeichert und ist sofort einsatzbereit. Sie müssen es nur bearbeiten und ausführen.

      Grundstruktur

      Die Konfiguration im Global Script hat folgende Struktur:

      const globalPagesConfig: ScriptConfig.globalPagesConfig = {
          type: 'globalConfig', // Pflichtfeld
          
          // Alle globalen Seiten
          subPages: [
              // Hier kommen die Seitendefinitionen
          ],
          
          // Optional: Gemeinsame Navigation
          navigation?: NavigationItemConfig[],
          
          // Optional: Native Page Items
          nativePageItems?: any[],
          
          // Optional: Maximale Anzahl der Navigationsanpassungen bei Deep Linking (Standard: 3)
          maxNavigationAdjustRuns?: number
      };
      

      Wichtige Eigenschaften

      • type: 'globalConfig' - Pflichtfeld: Kennzeichnet dies als Global Config
      • subPages - Array mit allen globalen Seitendefinitionen
      • navigation - Optional: Gemeinsame Navigationskonfiguration
      • nativePageItems - Optional: Gemeinsame native Page Items
      • maxNavigationAdjustRuns - Optional: Maximale Anzahl der Iterationen für Deep Linking bei uniqueName-Überschreibung (Standard: 3)

      2. Globale Seiten definieren

      Jede Seite im Global Script muss einen eindeutigen uniqueName haben. Dies ist der Schlüssel, über den die Seite später referenziert wird.

      Beispiel: Einfache Grid-Seite

      const wohnzimmer: ScriptConfig.PageGrid = {
          type: 'cardGrid',
          uniqueName: 'wohnzimmer', // Wichtig: eindeutiger Name!
          heading: 'Wohnzimmer',
          prev: 'main',
          next: 'kueche',
          items: [
              { id: 'alias.0.Wohnzimmer.Licht.Hauptlicht' },
              { id: 'alias.0.Wohnzimmer.Steckdose.TV' },
              { id: 'alias.0.Wohnzimmer.Blind.Rollo1' },
              // ... weitere Items
          ]
      };
      

      Beispiel: Media-Seite

      const mediaPlayer: ScriptConfig.PageMedia = {
          type: 'cardMedia',
          uniqueName: 'media_wohnzimmer',
          heading: 'Sonos Wohnzimmer',
          prev: 'wohnzimmer',
          next: 'main',
          media: {
              id: 'sonos.0.Wohnzimmer',
              speakerList: ['Wohnzimmer', 'Küche', 'Schlafzimmer'],
              playList: ['Favoriten', 'Radio'],
              volumePresets: ['Leise?20', 'Normal?50', 'Laut?80'],
              minValue: 0,
              maxValue: 100
          },
          items: []
      };
      

      Beispiel: Thermostat-Seite

      const heizung: ScriptConfig.PageThermo = {
          type: 'cardThermo',
          uniqueName: 'heizung_wohnzimmer',
          heading: 'Heizung Wohnzimmer',
          prev: 'media_wohnzimmer',
          next: 'main',
          items: [
              {
                  id: 'alias.0.Wohnzimmer.Thermostat',
                  minValue: 160, // 16.0°C
                  maxValue: 240, // 24.0°C
                  stepValue: 5    // 0.5°C Schritte
              }
          ]
      };
      

      3. Global Config zusammenstellen

      Alle definierten Seiten werden im subPages Array zusammengefasst:

      const globalPagesConfig: ScriptConfig.globalPagesConfig = {
          type: 'globalConfig',
          subPages: [
              wohnzimmer,
              mediaPlayer,
              heizung,
              kueche,
              schlafzimmer,
              // ... weitere Seiten
          ]
      };
      

      4. Script ausführen

      Nach der Konfiguration der Seiten müssen Sie das Global Script ausführen. Die Übertragung der Konfiguration an den Adapter erfolgt automatisch - der dafür notwendige Code ist bereits im Script enthalten und muss nicht manuell erstellt werden.

      Wichtig: Das Global Script muss nach jeder Änderung erneut ausgeführt werden, um die Konfiguration zu aktualisieren.

      Local Script konfigurieren

      1. Local Script verwenden

      Der Adapter erstellt bei der Installation automatisch ein Local Script für jedes Panel. Der Scriptname basiert auf dem Panelnamen, den Sie bei der Einrichtung gewählt haben. Dieses Script muss nur mit Ihren panelspezifischen Konfigurationen gefüllt werden.

      2. Seiten mit globalLink referenzieren

      Im Local Script (Panel-spezifische Konfiguration) werden globale Seiten über globalLink eingebunden.

      Minimale Referenz

      Die einfachste Form ist, nur den globalLink anzugeben:

      const wohnzimmerPage: PageType = {
          globalLink: 'wohnzimmer' // Referenziert die Seite mit uniqueName 'wohnzimmer'
      };
      

      Dies übernimmt alle Eigenschaften der globalen Seite, einschließlich Navigation (prev, next, etc.).

      Mit optionalem Heading

      Sie können die Überschrift überschreiben:

      const wohnzimmerPage: PageType = {
          heading: 'Wohnbereich', // Überschreibt das Heading aus dem Global Script
          globalLink: 'wohnzimmer'
      };
      

      Mit optionalem uniqueName (Deep Linking)

      Sie können auch einen eigenen uniqueName vergeben. In diesem Fall erstellt der Adapter automatisch Kopien aller referenzierten Seiten und passt die Navigation an, sodass eine isolierte Seitenhierarchie entsteht:

      const wohnzimmerPage: PageType = {
          uniqueName: 'wz_panel1', // Eigener uniqueName für dieses Panel
          heading: 'Wohnbereich',
          globalLink: 'wohnzimmer'
      };
      

      Deep Linking: Wenn Sie einen eigenen uniqueName angeben, der sich vom uniqueName der globalen Seite unterscheidet, wird die globale Seite mit diesem neuen Namen kopiert. Zusätzlich werden alle Seiten, auf die diese Seite verweist (über next, prev, home, parent oder navigate-Items), ebenfalls kopiert und umbenannt. Dies ermöglicht es, dieselbe globale Seite mehrfach mit unterschiedlichen Namen und isolierten Navigationspfaden zu verwenden.

      Beispiel: Wenn die globale Seite wohnzimmer auf kueche verweist und Sie uniqueName: 'wz_panel1' setzen, wird auch kueche kopiert (z.B. als wz_panel1_kueche_copy_nav_12345), und die Navigation wird automatisch angepasst.

      2. Navigation in Pages

      Wenn eine globale Seite in pages (Hauptseiten) verwendet wird, wird die Navigation der globalen Seite berücksichtigt, um fehlende referenzierte Seiten automatisch hinzuzufügen. Danach werden die Navigationsparameter (prev, next, home, parent) der eingefügten Seiten entfernt, und die Seiten werden in die zirkuläre Navigation der Hauptseiten eingebunden.

      Automatisches Hinzufügen von Seiten: Wenn eine globale Seite next oder prev auf eine andere globale Seite verweist, die noch nicht in pages enthalten ist, wird diese automatisch hinzugefügt. Dies geschieht nur für next-Verweise - bei prev wird eine Warnung ausgegeben, da dies die Reihenfolge ändern würde.

      const config: ScriptConfig.Config = {
          panelTopic: 'NSPanel_Wohnzimmer',
          // ... weitere Konfiguration
          
          pages: [
              { globalLink: 'main' },           // Wird zur ersten Hauptseite
              { globalLink: 'wohnzimmer' },     // Navigation wird automatisch angepasst
              { globalLink: 'media_wohnzimmer' }, // Navigation wird automatisch angepasst
          ],
          
          subPages: []
      };
      

      Wichtig: Die erste Seite in pages sollte den uniqueName "main" haben (oder darauf verlinken), da dies als Startseite verwendet wird.

      3. Navigation in subPages

      Wenn eine globale Seite in subPages (Unterseiten) verwendet wird, können Sie die Navigation optional überschreiben:

      const config: ScriptConfig.Config = {
          panelTopic: 'NSPanel_Kueche',
          // ... weitere Konfiguration
          
          pages: [
              { globalLink: 'main' }
          ],
          
          subPages: [
              {
                  globalLink: 'wohnzimmer',
                  // Überschreibt die Navigation aus dem Global Script
                  prev: 'main',
                  next: 'kueche_panel2',
                  home: 'main'
              },
              {
                  globalLink: 'media_wohnzimmer'
                  // Keine Navigation angegeben = verwendet die aus dem Global Script
              }
          ]
      };
      

      Verhalten bei Navigation in subPages:

      • Wenn mindestens ein Navigationsparameter (prev, next, home, oder parent) angegeben wird, werden alle vier Parameter aus dem Local Script verwendet (auch wenn sie undefined sind)
      • Wenn kein Navigationsparameter angegeben wird, wird die Navigation aus dem Global Script übernommen

      4. Deep Linking mit uniqueName

      Wenn Sie in einem Local Script einen eigenen uniqueName für eine globale Seite angeben, der sich vom ursprünglichen uniqueName der globalen Seite unterscheidet, aktiviert dies die Deep Linking-Funktion:

      1. Automatisches Kopieren: Die globale Seite wird mit dem neuen uniqueName kopiert
      2. Rekursive Navigation: Alle Seiten, auf die diese Seite verweist, werden ebenfalls kopiert und umbenannt
      3. Isolierte Hierarchie: Es entsteht eine isolierte Seitenhierarchie, die unabhängig von anderen Verwendungen derselben globalen Seiten ist

      Anwendungsfall: Nutzen Sie dies, wenn Sie dieselbe globale Seite mehrfach auf einem Panel verwenden möchten, aber mit unterschiedlichen Navigationspfaden.

      Beispiel:

      // Global Script: Seite mit Navigation
      const details: ScriptConfig.PageGrid = {
          type: 'cardGrid',
          uniqueName: 'details',
          heading: 'Details',
          next: 'settings',
          items: [...]
      };
      
      // Local Script: Mehrfache Verwendung mit Deep Linking
      const config: ScriptConfig.Config = {
          pages: [
              { globalLink: 'main' },
              { globalLink: 'details', uniqueName: 'details_variant_a' }, // Erstellt Kopien
              { globalLink: 'details', uniqueName: 'details_variant_b' }  // Separate Kopien
          ],
          subPages: []
      };
      

      Konfiguration der Rekursionstiefe: Sie können die maximale Anzahl der Iterationen mit maxNavigationAdjustRuns im Global Script steuern (Standard: 3).

      Praktische Beispiele

      Beispiel 1: Mehrere Panels mit gleichen Seiten

      Global_Script.ts

      // Globale Seitendefinitionen
      const hauptseite: ScriptConfig.PageGrid = {
          type: 'cardGrid',
          uniqueName: 'main',
          heading: 'Übersicht',
          next: 'lichter',
          items: [
              { id: 'alias.0.Haus.Temperatur.Aussen' },
              { id: 'alias.0.Haus.Fenster.Offen' },
              { id: 'alias.0.Haus.Tuer.Status' }
          ]
      };
      
      const lichterSeite: ScriptConfig.PageGrid = {
          type: 'cardGrid',
          uniqueName: 'lichter',
          heading: 'Beleuchtung',
          prev: 'main',
          next: 'main',
          items: [
              { id: 'alias.0.Licht.Wohnzimmer' },
              { id: 'alias.0.Licht.Kueche' },
              { id: 'alias.0.Licht.Schlafzimmer' }
          ]
      };
      
      const globalPagesConfig: ScriptConfig.globalPagesConfig = {
          type: 'globalConfig',
          subPages: [
              hauptseite,
              lichterSeite
          ]
      };
      

      Nach der Konfiguration das Global Script ausführen, um die Änderungen zu übertragen.

      Local_Script_Panel1.ts (Wohnzimmer)

      const config: ScriptConfig.Config = {
          panelTopic: 'NSPanel_Wohnzimmer',
          // ... weitere Konfiguration
          
          pages: [
              { globalLink: 'main', heading: 'Wohnzimmer' }, // Überschreibt Heading
              { globalLink: 'lichter' }
          ],
          
          subPages: []
      };
      

      Nach der Konfiguration das Local Script ausführen, um die Änderungen zu übertragen.

      Local_Script_Panel2.ts (Küche)

      const config: ScriptConfig.Config = {
          panelTopic: 'NSPanel_Kueche',
          // ... weitere Konfiguration
          
          pages: [
              { globalLink: 'main', heading: 'Küche' }, // Überschreibt Heading
              { globalLink: 'lichter' }
          ],
          
          subPages: []
      };
      

      Nach der Konfiguration das Local Script ausführen, um die Änderungen zu übertragen.

      Beispiel 2: Unterschiedliche Seitenauswahl pro Panel

      Global_Script.ts

      const globalPagesConfig: ScriptConfig.globalPagesConfig = {
          type: 'globalConfig',
          subPages: [
              hauptseite,        // uniqueName: 'main'
              wohnzimmer,        // uniqueName: 'wohnzimmer'
              kueche,            // uniqueName: 'kueche'
              schlafzimmer,      // uniqueName: 'schlafzimmer'
              bad,               // uniqueName: 'bad'
              heizung,           // uniqueName: 'heizung'
              media              // uniqueName: 'media'
          ]
      };
      

      Local_Script_Wohnzimmer.ts

      const config: ScriptConfig.Config = {
          panelTopic: 'NSPanel_Wohnzimmer',
          
          pages: [
              { globalLink: 'main' },
              { globalLink: 'wohnzimmer' }, // Nur relevante Seiten für Wohnzimmer
              { globalLink: 'media' }
          ],
          
          subPages: [
              { globalLink: 'heizung' } // Als Unterseite
          ]
      };
      

      Local_Script_Kueche.ts

      const config: ScriptConfig.Config = {
          panelTopic: 'NSPanel_Kueche',
          
          pages: [
              { globalLink: 'main' },
              { globalLink: 'kueche' }, // Andere Seitenauswahl
              { globalLink: 'wohnzimmer' }
          ],
          
          subPages: []
      };
      

      Beispiel 3: Kombination globaler und lokaler Seiten

      Sie können globale Seiten mit lokal definierten Seiten kombinieren:

      // Lokale Seitendefinition nur für dieses Panel
      const lokaleSonderseite: ScriptConfig.PageGrid = {
          type: 'cardGrid',
          uniqueName: 'lokal_spezial',
          heading: 'Panel-spezifisch',
          prev: 'main',
          next: 'wohnzimmer',
          items: [
              { id: 'alias.0.PanelSpezifisch.Sensor1' }
          ]
      };
      
      const config: ScriptConfig.Config = {
          panelTopic: 'NSPanel_Spezial',
          
          pages: [
              { globalLink: 'main' },         // Globale Seite
              lokaleSonderseite,              // Lokale Seite
              { globalLink: 'wohnzimmer' }    // Globale Seite
          ],
          
          subPages: [
              { globalLink: 'media' },        // Globale Seite
              { globalLink: 'heizung' }       // Globale Seite
          ]
      };
      

      Beispiel 4: Deep Linking - Mehrfache Verwendung mit eigenen Namen

      Sie können dieselbe globale Seite mehrfach verwenden, indem Sie jeweils einen eigenen uniqueName vergeben. Der Adapter erstellt dann automatisch isolierte Kopien mit angepasster Navigation.

      Global_Script.ts

      const roomControl: ScriptConfig.PageGrid = {
          type: 'cardGrid',
          uniqueName: 'room_control',
          heading: 'Raum-Steuerung',
          next: 'room_settings',
          items: [
              { id: 'alias.0.Room.Light' },
              { id: 'alias.0.Room.Temperature' }
          ]
      };
      
      const roomSettings: ScriptConfig.PageGrid = {
          type: 'cardGrid',
          uniqueName: 'room_settings',
          heading: 'Raum-Einstellungen',
          prev: 'room_control',
          items: [
              { id: 'alias.0.Room.Config' }
          ]
      };
      
      const globalPagesConfig: ScriptConfig.globalPagesConfig = {
          type: 'globalConfig',
          subPages: [
              roomControl,
              roomSettings
          ],
          maxNavigationAdjustRuns: 5 // Erhöhte Rekursionstiefe für komplexe Hierarchien
      };
      

      Local_Script.ts

      const config: ScriptConfig.Config = {
          panelTopic: 'NSPanel_MultiRoom',
          
          pages: [
              { globalLink: 'main' },
              
              // Erste Instanz für Wohnzimmer
              { 
                  globalLink: 'room_control', 
                  uniqueName: 'living_room_control',
                  heading: 'Wohnzimmer'
              },
              // Automatisch kopiert: room_settings → living_room_control_room_settings_copy_nav_xxxxx
              
              // Zweite Instanz für Schlafzimmer
              { 
                  globalLink: 'room_control', 
                  uniqueName: 'bedroom_control',
                  heading: 'Schlafzimmer'
              }
              // Automatisch kopiert: room_settings → bedroom_control_room_settings_copy_nav_xxxxx
          ],
          
          subPages: []
      };
      

      In diesem Beispiel werden zwei isolierte Kopien der room_control-Seite mit jeweils eigener Navigation zu den automatisch kopierten room_settings-Seiten erstellt.

      Wichtige Hinweise und Best Practices

      Navigation und Reihenfolge

      1. Pages Navigation:

        • Die Navigation (next, prev) aus dem Global Script wird verwendet, um automatisch fehlende referenzierte Seiten zu pages hinzuzufügen
        • Bei next-Verweisen wird die referenzierte Seite automatisch nach der aktuellen Seite eingefügt
        • Bei prev-Verweisen erfolgt eine Warnung, da dies die Reihenfolge zufällig ändern würde
        • Nach dem automatischen Hinzufügen werden die Navigationsparameter entfernt und die Seiten zirkulär verlinkt
      2. SubPages Navigation: Bei Seiten in subPages gilt:

        • Ohne Navigationsparameter: Navigation aus Global Script wird übernommen
        • Mit mindestens einem Navigationsparameter: Alle Navigationsparameter aus Local Script werden verwendet
      3. Beispiel für automatisches Hinzufügen: Wenn Sie { globalLink: 'wohnzimmer' } in pages haben und die globale Seite wohnzimmer hat next: 'kueche', wird kueche automatisch zu pages hinzugefügt, falls noch nicht vorhanden.

      Dokumentation und Nachverfolgung

      Für eine bessere Nachverfolgung können Sie Kommentare in Ihrem Global Script verwenden, um Änderungen zu dokumentieren:

      // Version 1.0 - Initial setup
      // Version 1.1 - Added heating page
      const globalPagesConfig: ScriptConfig.globalPagesConfig = {
          type: 'globalConfig',
          subPages: [...]
      };
      

      Fehlervermeidung

      1. Eindeutige uniqueNames: Jede Seite im Global Script muss einen eindeutigen uniqueName haben.

      2. Hauptseite "main": Die erste Seite sollte den uniqueName "main" haben oder darauf verlinken.

      3. Global Script zuerst: Das Global Script muss ausgeführt werden, bevor Local Scripts darauf zugreifen können.

      4. Navigation konsistent halten: Achten Sie darauf, dass Navigationsverweise auf existierende Seiten zeigen.

      5. Deep Linking Rekursionstiefe: Bei komplexen Seitenhierarchien können Sie maxNavigationAdjustRuns erhöhen, um tiefere Navigationsketten zu unterstützen. Standardwert ist 3.

      6. uniqueName-Überschreibung: Wenn Sie einen eigenen uniqueName vergeben, werden automatisch Kopien erstellt. Nutzen Sie dies bewusst und nur wenn nötig.

      Wartung und Updates

      1. Zentrale Änderungen: Änderungen im Global Script erfordern nur ein erneutes Ausführen des Global Scripts.

      2. Local Scripts aktualisieren: Nach Änderungen im Global Script müssen die Local Scripts nicht neu ausgeführt werden - sie verwenden automatisch die aktuelle globale Konfiguration.

      3. Script-Updates: Die Type-Definitionen in den Scripts werden bei Updates automatisch aktualisiert, um die Wartungsfreundlichkeit zu gewährleisten.

      4. Panel-spezifische Überschreibungen: Nutzen Sie heading und Navigation-Überschreibungen sparsam, um die Wartbarkeit zu erhalten.

      Fehlerbehebung

      "Global page with uniqueName X not found!"

      Problem: Das Local Script referenziert eine Seite, die im Global Script nicht existiert.

      Lösung:

      • Prüfen Sie, ob der globalLink dem uniqueName im Global Script entspricht
      • Stellen Sie sicher, dass das Global Script erfolgreich ausgeführt wurde

      Seite wird nicht angezeigt

      Problem: Eine referenzierte Seite erscheint nicht auf dem Panel.

      Lösung:

      • Überprüfen Sie, ob die Seite in pages oder subPages eingetragen ist
      • Prüfen Sie die Navigation - ist die Seite über andere Seiten erreichbar?
      • Prüfen Sie, ob hiddenByTrigger verwendet wird

      Navigation funktioniert nicht wie erwartet

      Problem: Die Navigation zwischen Seiten verhält sich anders als erwartet.

      Lösung:

      • Bei pages: Navigation wird automatisch verwaltet, eigene Navigation wird ignoriert
      • Bei subPages: Prüfen Sie, ob Sie Navigation überschreiben oder die aus dem Global Script verwenden
      • Stellen Sie sicher, dass Navigationsverweise auf existierende Seiten zeigen

      Zusammenfassung

      Das Global Pages Feature bietet eine leistungsstarke Möglichkeit zur Wiederverwendung von Seitenkonfigurationen:

      • Global Script: Definiert einmal alle gemeinsamen Seiten mit uniqueName
      • Local Script: Referenziert Seiten per globalLink
      • Flexibilität: Überschreiben von heading und Navigation möglich
      • Deep Linking: Mehrfache Verwendung derselben Seite mit eigenen uniqueName und isolierter Navigation
      • Automatische Navigation: Fehlende referenzierte Seiten werden automatisch hinzugefügt
      • Wartbarkeit: Zentrale Änderungen wirken sich auf alle Panels aus
      • Kombinierbar: Globale und lokale Seiten können gemischt werden

      Diese Architektur ermöglicht es, eine konsistente Benutzererfahrung über mehrere NSPanels hinweg zu schaffen, während gleichzeitig panelspezifische Anpassungen und sogar mehrfache Verwendung derselben Seiten mit unterschiedlichen Navigationspfaden möglich bleiben.

      posted in Tester
      T
      ticaki
    • RE: Betatest NSPanel-lovelace-ui v0.4.x

      0.5.0 (2025-10-03)

      • (tt-tom17) Admin UI: Reworked/reordered settings layout and improved usability
      • (ticaki) Added globalPages/globalLink feature with Deep Linking support for reusable page configurations across multiple panels
      • (ticaki) Added screensaver notification system
      • (ticaki) Fixed cardThermo2 not switching
      • (ticaki) Implemented hiding of screensaver elements
      • (ticaki) Adjusted Brightsky templates
      • (ticaki) made script configuration transfer more robust
      posted in Tester
      T
      ticaki
    • RE: Betatest Bright Sky v0.3.x

      @ilovegym
      Ich hab die aktuell erstmal nur als "Warnung" gedacht - dafür sind die in 5,10,15... Minuten states - für das darzustellen müsste sich wohl mal einer das hier angucken https://brightsky.dev/demo/radar/ es zerpflücken und mir sagen was er wie an daten braucht - jetzt ist das mehr eine Liste von Infos zum maschinellen Verarbeiten oder aber um Aktion abhängig von möglichem Regen in X Minuten zu starten.

      Da könnte man bestimmt ein nettes widget bauen - ich hab davon aber keinen plan

      posted in Tester
      T
      ticaki
    • RE: Betatest Bright Sky v0.3.x

      Btw. Ich weiß man schreibt nur wenn was nicht geht - würde mich aber auch freuen, wenn jemand schreibt das etwas geht und brauchbar ist - z.B. regenradar 🙂

      posted in Tester
      T
      ticaki
    • RE: Vergleich Solarprognosen Solarwetter und brightsky

      @homoran sagte in Vergleich Solarprognosen Solarwetter und brightsky:

      @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

      @klassisch

      Blockly ist ein Hybrid aus Javascript und Lego.

      genau deswegen hilft es mir.

      Ich komme mit der js-Syntax selber einfach nicht klar.
      Deswegen nutzt mir dein Skript auch leider nichts, Sorry!

      Jeder wie er mag - ich tue mir schwer mit blockly deshalb gibts da wenig von mir 🙂

      posted in ioBroker Allgemein
      T
      ticaki
    • RE: accuweather: Fehlermeldung

      @gregors
      Apizugang von Accuweather wurde geändert, entweder bei Accuweather ein Bezahlabo abschließen oder einen andere Adapter (anderen Anbieter von Wetterdaten)wählen.

      posted in ioBroker Allgemein
      T
      ticaki
    • RE: Vergleich Solarprognosen Solarwetter und brightsky

      @klassisch

      Blockly ist ein Hybrid aus Javascript und Lego.

      posted in ioBroker Allgemein
      T
      ticaki
    • RE: Betatest Bright Sky v0.3.x

      @martybr
      ups 🙂 da muß ich ja noch ein flag setzen - update auf dem weg.

      posted in Tester
      T
      ticaki
    • RE: Anwesenheit Verzögerung, nochmalige Prüfung einbauen ?

      @chris299
      HomePod oder Apple TV ich hab beides

      posted in Skripten / Logik
      T
      ticaki
    • RE: Anwesenheit Verzögerung, nochmalige Prüfung einbauen ?

      Mit einem iPhone würde ich Apple Home verwenden und mir dort einen State im iobroker jeweils auf wahr oder falsch setzen lassen je nachdem ob ich da bin oder nicht. Das mache ich schon seit Jahren so.

      Zur Zeit über matter.

      posted in Skripten / Logik
      T
      ticaki
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo