Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. SONOFF NSPanel mit Lovelace UI

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.3k

SONOFF NSPanel mit Lovelace UI

Geplant Angeheftet Gesperrt Verschoben Hardware
lovelace uinspanelsonoff
7.8k Beiträge 272 Kommentatoren 6.7m Aufrufe 254 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • D Doggie

    @armilar und Andere, Danke an alle nochmals für die Hilfe.
    Nebenbei bemerkt: Ich weiß nicht, ob es so günstig ist alles zum Thema NSPanel in ein Topic zu packen. So sind mehrere Anfragen "verschachtelt" und schwerer zu lesen. Gut wäre es, wenn man "Untertopics" anlegen könnte, aber das gibt die Forensoftware wohl nicht her.

    T Nicht stören
    T Nicht stören
    ticaki
    schrieb am zuletzt editiert von
    #5014

    @doggie sagte in SONOFF NSPanel mit Lovelace UI:

    @armilar und Andere, Danke an alle nochmals für die Hilfe.
    Nebenbei bemerkt: Ich weiß nicht, ob es so günstig ist alles zum Thema NSPanel in ein Topic zu packen. So sind mehrere Anfragen "verschachtelt" und schwerer zu lesen. Gut wäre es, wenn man "Untertopics" anlegen könnte, aber das gibt die Forensoftware wohl nicht her.

    Die Sache ist das ca. 60% der Topics im deutschen Forum bei mir ausgeblendet werden und wenn dort eine Frage zu diesem Panel erscheint, bekomme ich die nie zu sehen.

    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

    Spenden

    1 Antwort Letzte Antwort
    0
    • ArmilarA Offline
      ArmilarA Offline
      Armilar
      Most Active Forum Testing
      schrieb am zuletzt editiert von
      #5015

      @ticaki

      Dito... Ich lese nur sehr wenig der meisten Threads und Posts hier im Forum... Wenn du es hier reinschreibst, dann werde ich automatisch benachrichtigt... Leider gibt es kein Unterforum für das NSPanel, was es deutlich strukturieren würde...

      Auf der anderen Seite bekommt man aber auch Lösungen und Anregungen zu anderen Themen und Fragestellungen...

      Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
      https://github.com/joBr99/nspanel-lovelace-ui/wiki

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      1 Antwort Letzte Antwort
      0
      • T TT-Tom

        @rene55 Sorry Fehler lag bei mir / Script, bitte nochmal neu von Github ziehen.

        Rene55R Offline
        Rene55R Offline
        Rene55
        schrieb am zuletzt editiert von
        #5016

        @tt-tom Erfolg ist zu vermelden: Mein Abfallkalender läuft. NSPanel_Abfallkalender.jpg

        Habe zwar den Colorpicker, den du gezeigt hast nicht gefunden, aber dennoch eine 'schöne' Farbe gewählt.

        Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
        ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
        Wetterstation: Froggit WH3000SE V1.6.6

        T 1 Antwort Letzte Antwort
        2
        • Rene55R Rene55

          @tt-tom Erfolg ist zu vermelden: Mein Abfallkalender läuft. NSPanel_Abfallkalender.jpg

          Habe zwar den Colorpicker, den du gezeigt hast nicht gefunden, aber dennoch eine 'schöne' Farbe gewählt.

          T Offline
          T Offline
          TT-Tom
          schrieb am zuletzt editiert von
          #5017

          @rene55

          https://nodtem66.github.io/nextion-hmi-color-convert/index.html

          Gruß Tom
          https://github.com/tt-tom17
          Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

          NSPanel Script Wiki
          https://github.com/joBr99/nspanel-lovelace-ui/wiki

          NSPanel Adapter Wiki
          https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

          Rene55R 1 Antwort Letzte Antwort
          1
          • T TT-Tom

            @rene55

            https://nodtem66.github.io/nextion-hmi-color-convert/index.html

            Rene55R Offline
            Rene55R Offline
            Rene55
            schrieb am zuletzt editiert von
            #5018

            @tt-tom Auch hier gibt es was zu sehen: Der Graph entwickelt sich langsam (aber stetig).

            NSPanel_TemperaturGraph.jpg

            Danke auch hierfür und für die kräftige Hilfestellung.
            Kleiner Wunsch von mir: const BucketName: string = 'storage_short'; statt fest verdrahtetem "iobroker' noch mit einbauen.

            Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
            ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
            Wetterstation: Froggit WH3000SE V1.6.6

            T theknutT 2 Antworten Letzte Antwort
            2
            • Rene55R Rene55

              @tt-tom Auch hier gibt es was zu sehen: Der Graph entwickelt sich langsam (aber stetig).

              NSPanel_TemperaturGraph.jpg

              Danke auch hierfür und für die kräftige Hilfestellung.
              Kleiner Wunsch von mir: const BucketName: string = 'storage_short'; statt fest verdrahtetem "iobroker' noch mit einbauen.

              T Offline
              T Offline
              TT-Tom
              schrieb am zuletzt editiert von
              #5019

              @rene55 sagte in SONOFF NSPanel mit Lovelace UI:

              const BucketName: string = 'storage_short';

              Wunsch erfüllt :blush:

              Gruß Tom
              https://github.com/tt-tom17
              Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

              NSPanel Script Wiki
              https://github.com/joBr99/nspanel-lovelace-ui/wiki

              NSPanel Adapter Wiki
              https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

              1 Antwort Letzte Antwort
              1
              • Rene55R Offline
                Rene55R Offline
                Rene55
                schrieb am zuletzt editiert von
                #5020

                @tt-tom Vielen Dank, das ging aber fix !!

                Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
                ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
                Wetterstation: Froggit WH3000SE V1.6.6

                1 Antwort Letzte Antwort
                0
                • ArmilarA Armilar

                  @doggie

                  Wenn man erstmal verstanden hat wie es geht, dann ist es einfach und geht auch verdammt schnell. Ich habe über 3000 Zeilen "nur Config" und von der Struktur her ist das meiste auch in jedem NSPanel vorhanden.

                  Wie @TT-Tom schon korrekt erwähnt hat ist bei einem Info nur ein .ACTUAL vorhanden und das reicht auch aus. Also jedes Icon in einer cardGrid oder cardEntities ist genau ein Alias vom Gerätetyp XYZ.
                  Manche Alias Geräte-Typen wie z.B. eine Lampe haben mehrere Eigenschaften. Eine "Info" nicht. Die liefert genau einen Wert eines Datenpunktes und ist somit auch ein eigenes pageItem.
                  Wenn nun diverse Werte eines Gaszählers (hast ja eigentlich nie Infos zu den Datenpunkten geliefert) angezeigt werden sollen, dann ist jeder Wert des Gaszählers ein Alias vom Geräte-Typ Info.

                  Bei den ganz komplexen Aliassen legen wir die ja automatisch an (z.B. Gerätetyp media bei der cardMedia)

                  Wenn ich einmal "Gaszähler" angelegt habe und dann wieder lösche (wegen meiner Probiererei) bekomme ich bei dem nächsten Anlegen von "Gaszähler" nicht mehr das Fenster angezeigt, wo ich die Datenpunkte auswählen kann. Dann wird gleich ein Gerät Gaszähler mit Icon angezeigt. Ich muss dann "Gaszähler 2" oder "Gaszähler neu" anlegen.

                  Ist manchmal so. Der Device-Manager ist leider nicht der perfekteste Adapter und eben auch an vielen Stellen fehlerbehaftet. Dummerweise auch der einzige der es "einfach" hinbekommt. Sollten irgendwo Reste eines Alias warum auch immer nach dem Löschen noch vorhanden sein, so lassen sich diese auch unter Objekte alias.0... löschen.

                  Wenn man die Rollen, Channels und der Aliasse erst einmal verstanden hat, kann man sie auch per Hand anlegen. Aber auch da gibt es genügend Fallstricke. Würde also weiterhin den Geräte-Manager verwenden. Wenn etwas nicht geht, dann einfach hier eine Frage stellen. Habe zu fast jedem Alias mittlerweile raus, wie man die Bug's (auch wenn es langsam nervt) umgeht und dennoch zu einem positiven Ergebnis kommt ;-)

                  Da der Alias-Manager nun etwas sehr komplex und ebenfalls alles andere als intuitiv ist, würde ich dir die Erstellung dort ebenfalls nicht empfehlen...

                  Ich denke nach der ganzen Probiererei, wird es in einem hohen Tempo vorwärts gehen... :blush:

                  D Offline
                  D Offline
                  Doggie
                  schrieb am zuletzt editiert von
                  #5021

                  @armilar
                  Es funktioniert immer noch nicht.
                  Ich habe im Tab "Geräte" unter NSPanel - 1 einen Ordner mit dem Namen "Gaszähler" angelegt.
                  Dann unter diesem Ordner "Gaszähler" ein Gerät mit dem Namen "Verbrauch Heute" und als Typ"Info" Das Gerät wird angelegt, aber es erscheint kein Fenster wo ich die Verknüpfung mit dem Datenpunkt aus Javascript - Gaszähler - Verbrauch Heute herstellen kann.
                  Das Fenster ist aber gestern schon erschienen. Warum heute nicht? Irgendetwas läuft noch schief.
                  Inzwischen reagiert der ganze IOBroker nicht mehr, weder mit Browser noch über Putty.
                  Bald brauche ich nicht nur dieses Forum, sondern auch die Telefonseelsorge:anguished:
                  Jetzt muss ich erstmal den ioBroker wieder in Gange bringen...

                  D 1 Antwort Letzte Antwort
                  0
                  • D Doggie

                    @armilar
                    Es funktioniert immer noch nicht.
                    Ich habe im Tab "Geräte" unter NSPanel - 1 einen Ordner mit dem Namen "Gaszähler" angelegt.
                    Dann unter diesem Ordner "Gaszähler" ein Gerät mit dem Namen "Verbrauch Heute" und als Typ"Info" Das Gerät wird angelegt, aber es erscheint kein Fenster wo ich die Verknüpfung mit dem Datenpunkt aus Javascript - Gaszähler - Verbrauch Heute herstellen kann.
                    Das Fenster ist aber gestern schon erschienen. Warum heute nicht? Irgendetwas läuft noch schief.
                    Inzwischen reagiert der ganze IOBroker nicht mehr, weder mit Browser noch über Putty.
                    Bald brauche ich nicht nur dieses Forum, sondern auch die Telefonseelsorge:anguished:
                    Jetzt muss ich erstmal den ioBroker wieder in Gange bringen...

                    D Offline
                    D Offline
                    Doggie
                    schrieb am zuletzt editiert von
                    #5022

                    Nachtrag: Er läuft wieder, aber nur nach power-on-reset und iob fix.

                    T 1 Antwort Letzte Antwort
                    0
                    • D Doggie

                      Nachtrag: Er läuft wieder, aber nur nach power-on-reset und iob fix.

                      T Offline
                      T Offline
                      TT-Tom
                      schrieb am zuletzt editiert von
                      #5023

                      @doggie zeige mal bitte ein Bild von dem Alias Ordner wo der Gaszähler jetzt liegt

                      Gruß Tom
                      https://github.com/tt-tom17
                      Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

                      NSPanel Script Wiki
                      https://github.com/joBr99/nspanel-lovelace-ui/wiki

                      NSPanel Adapter Wiki
                      https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                      D 1 Antwort Letzte Antwort
                      0
                      • T TT-Tom

                        @doggie zeige mal bitte ein Bild von dem Alias Ordner wo der Gaszähler jetzt liegt

                        D Offline
                        D Offline
                        Doggie
                        schrieb am zuletzt editiert von
                        #5024

                        @tt-tom Gerne:
                        e80b189f-772c-43d3-9b66-205a7ddfc6a6-image.png

                        Wenn ich mit dem Cursor über den Stift streiche, erscheint dort : "Ordner bearbeiten" bei anderen Geräten erscheint "Zustände bearbeiten" und ich kann ein Alias anlegen.
                        Bei anderen Geräten ist alles gut:
                        f6875d00-8300-405b-9a2a-c15164f0d6b6-image.png
                        Schon merkwürdig.

                        T 1 Antwort Letzte Antwort
                        0
                        • D Doggie

                          @tt-tom Gerne:
                          e80b189f-772c-43d3-9b66-205a7ddfc6a6-image.png

                          Wenn ich mit dem Cursor über den Stift streiche, erscheint dort : "Ordner bearbeiten" bei anderen Geräten erscheint "Zustände bearbeiten" und ich kann ein Alias anlegen.
                          Bei anderen Geräten ist alles gut:
                          f6875d00-8300-405b-9a2a-c15164f0d6b6-image.png
                          Schon merkwürdig.

                          T Offline
                          T Offline
                          TT-Tom
                          schrieb am zuletzt editiert von TT-Tom
                          #5025

                          @doggie wenn ich das richtig sehe hast du dein Datenpunkt unter nspanel.1.gaszähler angelegt. findest du diesen unter Objekte im Alias nicht?

                          Gruß Tom
                          https://github.com/tt-tom17
                          Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

                          NSPanel Script Wiki
                          https://github.com/joBr99/nspanel-lovelace-ui/wiki

                          NSPanel Adapter Wiki
                          https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                          D 1 Antwort Letzte Antwort
                          0
                          • T TT-Tom

                            @doggie wenn ich das richtig sehe hast du dein Datenpunkt unter nspanel.1.gaszähler angelegt. findest du diesen unter Objekte im Alias nicht?

                            D Offline
                            D Offline
                            Doggie
                            schrieb am zuletzt editiert von
                            #5026

                            @tt-tom Ich habe noch weiter probiert:
                            5bbfc4a1-a4ea-4b07-9631-ba0de65127c2-image.png
                            Obwohl ich unter Gaszähler ein Gerät angelegt habe, erscheint es unter Geräte nicht.

                            Unter Objekten erscheint garnichts:
                            3165769b-c0fc-4aa4-96e1-c91117f4d304-image.png

                            Ich habe nochmal mit dem Alias-Manager "herumprobiert". Dort erscheinen einige Aliase, obwohl ich sie unter Geräten gelöscht habe. Nur, ein System kann ich nicht erkennen.
                            Ob es einen Fehler im ioBroker gibt?

                            Der gleiche Zustand wie oben im Alias-Manager:
                            3bc76492-5692-4beb-bf0d-22778ceb811f-image.png

                            Verstehen tu ich das nicht.

                            ArmilarA 1 Antwort Letzte Antwort
                            0
                            • Rene55R Rene55

                              @tt-tom Auch hier gibt es was zu sehen: Der Graph entwickelt sich langsam (aber stetig).

                              NSPanel_TemperaturGraph.jpg

                              Danke auch hierfür und für die kräftige Hilfestellung.
                              Kleiner Wunsch von mir: const BucketName: string = 'storage_short'; statt fest verdrahtetem "iobroker' noch mit einbauen.

                              theknutT Offline
                              theknutT Offline
                              theknut
                              schrieb am zuletzt editiert von
                              #5027

                              @rene55 das war auch einer meiner Änderungen, ich mach jetzt den PR

                              ☕ @ https://ko-fi.com/theknut

                              1 Antwort Letzte Antwort
                              0
                              • D Doggie

                                @tt-tom Ich habe noch weiter probiert:
                                5bbfc4a1-a4ea-4b07-9631-ba0de65127c2-image.png
                                Obwohl ich unter Gaszähler ein Gerät angelegt habe, erscheint es unter Geräte nicht.

                                Unter Objekten erscheint garnichts:
                                3165769b-c0fc-4aa4-96e1-c91117f4d304-image.png

                                Ich habe nochmal mit dem Alias-Manager "herumprobiert". Dort erscheinen einige Aliase, obwohl ich sie unter Geräten gelöscht habe. Nur, ein System kann ich nicht erkennen.
                                Ob es einen Fehler im ioBroker gibt?

                                Der gleiche Zustand wie oben im Alias-Manager:
                                3bc76492-5692-4beb-bf0d-22778ceb811f-image.png

                                Verstehen tu ich das nicht.

                                ArmilarA Offline
                                ArmilarA Offline
                                Armilar
                                Most Active Forum Testing
                                schrieb am zuletzt editiert von Armilar
                                #5028

                                @doggie

                                Ich habe den Eindruck du hast den Zweck des Alias nicht wirklich verstanden...

                                Du suchst nach der Erstellung des Alias nach dem Datenpunkt des Gaszählers? ... Es ist genau anders herum.

                                1. Zunächst brauchst du den Datenpunkt aus einem Adapter, der dir den Wert des Gaszählers anzeigt, den du im Panel darstellen willst.
                                2. Jetzt öffnest du den Gerätemanger, vergibst einen Namen und wählst den Gerätetypen Info aus
                                3. In dem Fenster, in dem der .ACTUAL erscheint ordnest du den Datenpunkt aus Punkt 1) zu.

                                speichern. Das wars...

                                In der Seitenvariable für den Gaszähler trägst du den eben erstellen Alias (ohne das .ACTUAL) ein.

                                fertig...

                                Da wird nichts im NSPanel-Verzeichnis wie aus Geisterhand erscheinen... Punkt 1 - 3 und fertig ist das Ding

                                Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
                                https://github.com/joBr99/nspanel-lovelace-ui/wiki

                                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                T D 2 Antworten Letzte Antwort
                                0
                                • theknutT Offline
                                  theknutT Offline
                                  theknut
                                  schrieb am zuletzt editiert von theknut
                                  #5029

                                  öhm sorry Leute, scheinbar kann jeder das Wiki editieren, ich dachte der macht dann einen PR drauß, aber er hat es einfach gespeichert....
                                  Bitte noch mal drüber schauen, aber bei mir läuft das schon seit ein paar Tagen problemlos: https://github.com/joBr99/nspanel-lovelace-ui/wiki/ioBroker-Card-Definitionen-(Seiten)#typescript-für-influx2

                                  Hier das aktualisierte Skript:

                                  • jetzt mit async/await
                                  • kann mehrere States überwachen
                                  • generiert sofort die States
                                    • man muss nicht erst warten, bis ein neuer Wert kommt
                                    • das ist gerade fürs Testen bisschen nervig
                                  • Bucket ist konfigurierbar
                                  const Debug = false;
                                  
                                  const NSPanel_Path = '0_userdata.0.NSPanel.1.';
                                  const Path = NSPanel_Path + 'Influx2NSPanel.cardLChart.';
                                  const InfluxInstance = 'influxdb.1';
                                  const influxDbBucket = 'iobroker';
                                  const numberOfHoursAgo = 24;
                                  const xAxisTicksEveryM = 60;
                                  const xAxisLabelEveryM = 240;
                                  
                                  // this records holds all sensors and their corresponding states which act as the data source for the charts
                                  // add all sensors which are to be displayed in this script, there is no need to use multiple scripts
                                  const sensors : Record<string, string> = {};
                                  /*         ↓ Id of the sensor                 ↓ Id of the data source for the charts */
                                  sensors['deconz.0.Sensors.65.temperature'] = Path + 'buero_temperature';
                                  sensors['deconz.0.Sensors.65.humidity'] = Path + 'buero_luftfeuchte';
                                  
                                  // create data source for NsPanel on script startup
                                  Object.keys(sensors).forEach(async x => {
                                      await generateDateAsync(x, sensors[x]);
                                  });
                                  
                                  // then listen to the sensors and update the data source states accordingly
                                  on({ id: Object.keys(sensors), change: 'any' }, async function (obj) {
                                      if (!obj.id) {
                                          return;
                                      }
                                  
                                      await generateDateAsync(obj.id, sensors[obj.id]);
                                  });
                                  
                                  async function generateDateAsync(sensorId: string, dataPointId: string) {
                                      const query =[
                                          'from(bucket: "' + influxDbBucket + '")',
                                          '|> range(start: -' + numberOfHoursAgo + 'h)',
                                          '|> filter(fn: (r) => r["_measurement"] == "' + sensorId + '")',
                                          '|> filter(fn: (r) => r["_field"] == "value")',
                                          '|> drop(columns: ["from", "ack", "q"])',
                                          '|> aggregateWindow(every: 1h, fn: last, createEmpty: false)',
                                          '|> map(fn: (r) => ({ r with _rtime: int(v: r._time) - int(v: r._start)}))',
                                          '|> yield(name: "_result")'].join('');
                                  
                                      if (Debug) console.log('Query: ' + query);
                                  
                                      const result : any = await sendToAsync(InfluxInstance, 'query', query);
                                      if (result.error) {
                                          console.error(result.error);
                                          return;
                                      }
                                      
                                      if (Debug) console.log(result);
                                      const numResults = result.result.length;
                                      let coordinates : string = '';
                                      for (let r = 0; r < numResults; r++) 
                                      {
                                          const list : string[] = []
                                          const numValues = result.result[r].length;
                                  
                                          for (let i = 0; i < numValues; i++) 
                                          {
                                              const time = Math.round(result.result[r][i]._rtime/1000/1000/1000/60);
                                              const value = Math.round(result.result[r][i]._value * 10);
                                              list.push(time + ":" + value);
                                          }
                                  
                                          coordinates = list.join("~");
                                  
                                          if (Debug) console.log(coordinates);
                                      }
                                  
                                      const ticksAndLabelsList : string[] = []
                                      const date = new Date();
                                      date.setMinutes(0, 0, 0);
                                      const ts = Math.round(date.getTime() / 1000);
                                      const tsYesterday = ts - (numberOfHoursAgo * 3600);
                                      if (Debug) console.log('Iterate from ' + tsYesterday + ' to ' + ts + ' stepsize=' + (xAxisTicksEveryM * 60));
                                      for (let x = tsYesterday, i = 0; x < ts; x += (xAxisTicksEveryM * 60), i += xAxisTicksEveryM)
                                      {
                                          if ((i % xAxisLabelEveryM))
                                              ticksAndLabelsList.push('' + i);
                                          else
                                          {
                                              const currentDate = new Date(x * 1000);
                                              // Hours part from the timestamp
                                              const hours = "0" + String(currentDate.getHours());
                                              // Minutes part from the timestamp
                                              const minutes = "0" + String(currentDate.getMinutes());
                                              const formattedTime = hours.slice(-2) + ':' + minutes.slice(-2);
                                  
                                              ticksAndLabelsList.push(String(i) + "^" + formattedTime);
                                          }
                                      }
                                      if (Debug) console.log('Ticks & Label: ' + ticksAndLabelsList);
                                      if (Debug) console.log('Coordinates: ' + coordinates);
                                      await setOrCreate(dataPointId, ticksAndLabelsList.join("+") + '~' + coordinates, true);
                                  }
                                  
                                  async function setOrCreate(id : string, value : any, ack : boolean) {
                                      if (!(await existsStateAsync(id))) {
                                           await createStateAsync(id, value, {
                                              name: id.split('.').reverse()[0],
                                              desc: 'Sensor Values [~<time>:<value>]*',
                                              type: 'string',
                                              role: 'value',
                                          });
                                      } else {
                                          await setStateAsync(id, value, ack);
                                      }
                                  }
                                  

                                  ☕ @ https://ko-fi.com/theknut

                                  Rene55R 1 Antwort Letzte Antwort
                                  1
                                  • ArmilarA Armilar

                                    @doggie

                                    Ich habe den Eindruck du hast den Zweck des Alias nicht wirklich verstanden...

                                    Du suchst nach der Erstellung des Alias nach dem Datenpunkt des Gaszählers? ... Es ist genau anders herum.

                                    1. Zunächst brauchst du den Datenpunkt aus einem Adapter, der dir den Wert des Gaszählers anzeigt, den du im Panel darstellen willst.
                                    2. Jetzt öffnest du den Gerätemanger, vergibst einen Namen und wählst den Gerätetypen Info aus
                                    3. In dem Fenster, in dem der .ACTUAL erscheint ordnest du den Datenpunkt aus Punkt 1) zu.

                                    speichern. Das wars...

                                    In der Seitenvariable für den Gaszähler trägst du den eben erstellen Alias (ohne das .ACTUAL) ein.

                                    fertig...

                                    Da wird nichts im NSPanel-Verzeichnis wie aus Geisterhand erscheinen... Punkt 1 - 3 und fertig ist das Ding

                                    T Offline
                                    T Offline
                                    TT-Tom
                                    schrieb am zuletzt editiert von
                                    #5030

                                    @armilar eigentlich hat er es richtig angefangen, aber irgendwie ist es in den Alias nicht aufgetaucht. Ich traue diesem Adapter eh nicht mehr.

                                    Gruß Tom
                                    https://github.com/tt-tom17
                                    Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

                                    NSPanel Script Wiki
                                    https://github.com/joBr99/nspanel-lovelace-ui/wiki

                                    NSPanel Adapter Wiki
                                    https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                                    1 Antwort Letzte Antwort
                                    0
                                    • Florian KlanteF Offline
                                      Florian KlanteF Offline
                                      Florian Klante
                                      schrieb am zuletzt editiert von
                                      #5031

                                      Guten morgen zusammen.
                                      Vorab ein herzliches Dankeschön für die Arbeit die hier geleistet wird.
                                      Ich bin neu in der Thematik NSpanel mit Lovelace UI und dank der Community hier schon verdammt weit gekommen. Allerdings habe ich ein paar Herausforderungen bei denen ihr bestimmt helfen könnt. Ich hoffe das es an dieser Stelle richtig ist, ansonsten lasst es mich wissen - danke ;-)
                                      Ich habe im Forum schon gesucht aber nichts gefunden, evtl. liegt es an meiner Handhabung...

                                      Button1/2:
                                      Ich habe die Rule2 definiert und auch im TS Script die entsprechenden Anpassungen für Toggle vorgenommen.
                                      Wenn ich jetzt die Button betätige, dann wird auch entsprechend geschaltet, aber ich muss danach immer erst auf eine andere Page wechseln um erneut ein Toggle auszuführen.
                                      Also konkretes Bsp.:
                                      NSpanel ist im Screensaver. Drücke ich Button1 wird Licht eingeschaltet.
                                      Drücke ich Button1 erneut, bleibt das Licht eingeschaltet.
                                      Wecke ich das NSpanel auf und meine Startseite wird angezeigt, kann ich über Button1 das Licht wieder ausschalten.
                                      Drücke ich im Startbildschirm wieder Button1, wird das LIcht nicht eingeschaltet.
                                      Wechsel ich auf eine andere Seite oder aber es geht in den Screensaver, kann ich über Button1 das Licht wieder einschalten.

                                      Jemand eine Idee?

                                      theknutT 1 Antwort Letzte Antwort
                                      0
                                      • Florian KlanteF Florian Klante

                                        Guten morgen zusammen.
                                        Vorab ein herzliches Dankeschön für die Arbeit die hier geleistet wird.
                                        Ich bin neu in der Thematik NSpanel mit Lovelace UI und dank der Community hier schon verdammt weit gekommen. Allerdings habe ich ein paar Herausforderungen bei denen ihr bestimmt helfen könnt. Ich hoffe das es an dieser Stelle richtig ist, ansonsten lasst es mich wissen - danke ;-)
                                        Ich habe im Forum schon gesucht aber nichts gefunden, evtl. liegt es an meiner Handhabung...

                                        Button1/2:
                                        Ich habe die Rule2 definiert und auch im TS Script die entsprechenden Anpassungen für Toggle vorgenommen.
                                        Wenn ich jetzt die Button betätige, dann wird auch entsprechend geschaltet, aber ich muss danach immer erst auf eine andere Page wechseln um erneut ein Toggle auszuführen.
                                        Also konkretes Bsp.:
                                        NSpanel ist im Screensaver. Drücke ich Button1 wird Licht eingeschaltet.
                                        Drücke ich Button1 erneut, bleibt das Licht eingeschaltet.
                                        Wecke ich das NSpanel auf und meine Startseite wird angezeigt, kann ich über Button1 das Licht wieder ausschalten.
                                        Drücke ich im Startbildschirm wieder Button1, wird das LIcht nicht eingeschaltet.
                                        Wechsel ich auf eine andere Seite oder aber es geht in den Screensaver, kann ich über Button1 das Licht wieder einschalten.

                                        Jemand eine Idee?

                                        theknutT Offline
                                        theknutT Offline
                                        theknut
                                        schrieb am zuletzt editiert von theknut
                                        #5032

                                        @florian-klante poste mal wie du button1 und button2 in der Config konfiguriert hast und bist du dir sicher, dass deine zu schaltenden States wirklich boolean sind? Wichtig ist, dass die States, falls es Aliase sind, eine richtige Convert-Funktion haben um bspw. aus "true" ein true machen zu können.

                                        So habe ich es bei mir:

                                        button1: {
                                                mode: "toggle",
                                                page: null,
                                                entity: "alias.0.Rooms.Wohnzimmer.Stehlampe.SET",
                                                setValue: null
                                            },
                                            button2: {
                                                mode: "toggle",
                                                page: null,
                                                entity: "alias.0.Rooms.Wohnzimmer.HueGradientLightStrips.ON",
                                                setValue: null
                                            }
                                        

                                        de824b9e-c916-41bb-8b6d-3acb952c96f2-image.png

                                        ☕ @ https://ko-fi.com/theknut

                                        Florian KlanteF 1 Antwort Letzte Antwort
                                        0
                                        • theknutT theknut

                                          öhm sorry Leute, scheinbar kann jeder das Wiki editieren, ich dachte der macht dann einen PR drauß, aber er hat es einfach gespeichert....
                                          Bitte noch mal drüber schauen, aber bei mir läuft das schon seit ein paar Tagen problemlos: https://github.com/joBr99/nspanel-lovelace-ui/wiki/ioBroker-Card-Definitionen-(Seiten)#typescript-für-influx2

                                          Hier das aktualisierte Skript:

                                          • jetzt mit async/await
                                          • kann mehrere States überwachen
                                          • generiert sofort die States
                                            • man muss nicht erst warten, bis ein neuer Wert kommt
                                            • das ist gerade fürs Testen bisschen nervig
                                          • Bucket ist konfigurierbar
                                          const Debug = false;
                                          
                                          const NSPanel_Path = '0_userdata.0.NSPanel.1.';
                                          const Path = NSPanel_Path + 'Influx2NSPanel.cardLChart.';
                                          const InfluxInstance = 'influxdb.1';
                                          const influxDbBucket = 'iobroker';
                                          const numberOfHoursAgo = 24;
                                          const xAxisTicksEveryM = 60;
                                          const xAxisLabelEveryM = 240;
                                          
                                          // this records holds all sensors and their corresponding states which act as the data source for the charts
                                          // add all sensors which are to be displayed in this script, there is no need to use multiple scripts
                                          const sensors : Record<string, string> = {};
                                          /*         ↓ Id of the sensor                 ↓ Id of the data source for the charts */
                                          sensors['deconz.0.Sensors.65.temperature'] = Path + 'buero_temperature';
                                          sensors['deconz.0.Sensors.65.humidity'] = Path + 'buero_luftfeuchte';
                                          
                                          // create data source for NsPanel on script startup
                                          Object.keys(sensors).forEach(async x => {
                                              await generateDateAsync(x, sensors[x]);
                                          });
                                          
                                          // then listen to the sensors and update the data source states accordingly
                                          on({ id: Object.keys(sensors), change: 'any' }, async function (obj) {
                                              if (!obj.id) {
                                                  return;
                                              }
                                          
                                              await generateDateAsync(obj.id, sensors[obj.id]);
                                          });
                                          
                                          async function generateDateAsync(sensorId: string, dataPointId: string) {
                                              const query =[
                                                  'from(bucket: "' + influxDbBucket + '")',
                                                  '|> range(start: -' + numberOfHoursAgo + 'h)',
                                                  '|> filter(fn: (r) => r["_measurement"] == "' + sensorId + '")',
                                                  '|> filter(fn: (r) => r["_field"] == "value")',
                                                  '|> drop(columns: ["from", "ack", "q"])',
                                                  '|> aggregateWindow(every: 1h, fn: last, createEmpty: false)',
                                                  '|> map(fn: (r) => ({ r with _rtime: int(v: r._time) - int(v: r._start)}))',
                                                  '|> yield(name: "_result")'].join('');
                                          
                                              if (Debug) console.log('Query: ' + query);
                                          
                                              const result : any = await sendToAsync(InfluxInstance, 'query', query);
                                              if (result.error) {
                                                  console.error(result.error);
                                                  return;
                                              }
                                              
                                              if (Debug) console.log(result);
                                              const numResults = result.result.length;
                                              let coordinates : string = '';
                                              for (let r = 0; r < numResults; r++) 
                                              {
                                                  const list : string[] = []
                                                  const numValues = result.result[r].length;
                                          
                                                  for (let i = 0; i < numValues; i++) 
                                                  {
                                                      const time = Math.round(result.result[r][i]._rtime/1000/1000/1000/60);
                                                      const value = Math.round(result.result[r][i]._value * 10);
                                                      list.push(time + ":" + value);
                                                  }
                                          
                                                  coordinates = list.join("~");
                                          
                                                  if (Debug) console.log(coordinates);
                                              }
                                          
                                              const ticksAndLabelsList : string[] = []
                                              const date = new Date();
                                              date.setMinutes(0, 0, 0);
                                              const ts = Math.round(date.getTime() / 1000);
                                              const tsYesterday = ts - (numberOfHoursAgo * 3600);
                                              if (Debug) console.log('Iterate from ' + tsYesterday + ' to ' + ts + ' stepsize=' + (xAxisTicksEveryM * 60));
                                              for (let x = tsYesterday, i = 0; x < ts; x += (xAxisTicksEveryM * 60), i += xAxisTicksEveryM)
                                              {
                                                  if ((i % xAxisLabelEveryM))
                                                      ticksAndLabelsList.push('' + i);
                                                  else
                                                  {
                                                      const currentDate = new Date(x * 1000);
                                                      // Hours part from the timestamp
                                                      const hours = "0" + String(currentDate.getHours());
                                                      // Minutes part from the timestamp
                                                      const minutes = "0" + String(currentDate.getMinutes());
                                                      const formattedTime = hours.slice(-2) + ':' + minutes.slice(-2);
                                          
                                                      ticksAndLabelsList.push(String(i) + "^" + formattedTime);
                                                  }
                                              }
                                              if (Debug) console.log('Ticks & Label: ' + ticksAndLabelsList);
                                              if (Debug) console.log('Coordinates: ' + coordinates);
                                              await setOrCreate(dataPointId, ticksAndLabelsList.join("+") + '~' + coordinates, true);
                                          }
                                          
                                          async function setOrCreate(id : string, value : any, ack : boolean) {
                                              if (!(await existsStateAsync(id))) {
                                                   await createStateAsync(id, value, {
                                                      name: id.split('.').reverse()[0],
                                                      desc: 'Sensor Values [~<time>:<value>]*',
                                                      type: 'string',
                                                      role: 'value',
                                                  });
                                              } else {
                                                  await setStateAsync(id, value, ack);
                                              }
                                          }
                                          
                                          Rene55R Offline
                                          Rene55R Offline
                                          Rene55
                                          schrieb am zuletzt editiert von
                                          #5033

                                          @theknut Danke für das Script. Jetzt habe ich das Problem, wo der Alias ins Spiel kommen soll. Es ist ja eigentlich gut beschrieben:

                                          
                                          /*         ↓ Id of the sensor                 ↓ Id of the data source for the charts */
                                          sensors['deconz.0.Sensors.65.temperature'] = Path + 'buero_temperature';
                                          

                                          Damit konnte ich soweit umgehen. Aktuell Fragezeichen??

                                          Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
                                          ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
                                          Wetterstation: Froggit WH3000SE V1.6.6

                                          T 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          628

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe