Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. SONOFF NSPanel mit Lovelace UI (TypeScript Version)

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    13
    1
    142

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.3k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

SONOFF NSPanel mit Lovelace UI (TypeScript Version)

Scheduled Pinned Locked Moved Hardware
lovelace uinspanelsonoff
8.0k Posts 277 Posters 7.2m Views 262 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ArmilarA Armilar

    @xelarep

    ja perfekt - viel Spaß bei der Konfiguration :blush:

    J Offline
    J Offline
    jpw1000
    wrote on last edited by jpw1000
    #4089

    Hallo, ich habe meine beiden Panels auf den aktuellen Stand gebracht, nun aber eine frage? Wo kann ich im Skript einstellen das die Temperatur von meiner Wetterstation kommt, die 4 kleinen Symbole sind kein Problem, nur ich finde keine Zeile wo die Temperatur her kommt.

    Vielen Dank für eure hilfe.

    ArmilarA 1 Reply Last reply
    0
    • J jpw1000

      Hallo, ich habe meine beiden Panels auf den aktuellen Stand gebracht, nun aber eine frage? Wo kann ich im Skript einstellen das die Temperatur von meiner Wetterstation kommt, die 4 kleinen Symbole sind kein Problem, nur ich finde keine Zeile wo die Temperatur her kommt.

      Vielen Dank für eure hilfe.

      ArmilarA Offline
      ArmilarA Offline
      Armilar
      Most Active Forum Testing
      wrote on last edited by
      #4090

      @jpw1000

      Das Script legt selbstständig einen Wetteralisas an. Dort kannst du die Temperatur ändern

      weatherEntity: 'alias.0.Wetter',
      

      Anstelle der Temperatur aus AccuWeather (alternativ Das Wetter) wählst du deinen eigenen Sensor unter TEMP...

      5a79ef5b-366a-46d1-9992-2329f19757aa-image.png

      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.

      J D 2 Replies Last reply
      0
      • ArmilarA Armilar

        @jpw1000

        Das Script legt selbstständig einen Wetteralisas an. Dort kannst du die Temperatur ändern

        weatherEntity: 'alias.0.Wetter',
        

        Anstelle der Temperatur aus AccuWeather (alternativ Das Wetter) wählst du deinen eigenen Sensor unter TEMP...

        5a79ef5b-366a-46d1-9992-2329f19757aa-image.png

        J Offline
        J Offline
        jpw1000
        wrote on last edited by
        #4091

        @armilar Vielen Dank! Funktioniert!

        1 Reply Last reply
        1
        • ArmilarA Armilar

          @jpw1000

          Das Script legt selbstständig einen Wetteralisas an. Dort kannst du die Temperatur ändern

          weatherEntity: 'alias.0.Wetter',
          

          Anstelle der Temperatur aus AccuWeather (alternativ Das Wetter) wählst du deinen eigenen Sensor unter TEMP...

          5a79ef5b-366a-46d1-9992-2329f19757aa-image.png

          D Offline
          D Offline
          DaPeace
          wrote on last edited by
          #4092

          @armilar
          Ich würde gerne Tagesstromverbrauch und Temperatur-Werte als Line oder Balken-Chart auf dem Panel ausgeben.
          Ich hab bei mir Node-red laufen und die Daten landen hier eh in einer mysql-DB. Ich kriege diese Daten ziemlich einfach in einen json-string oder kann das soweit anpassen wie es für das Panel notwendig wäre aber die Beispiele sind alle für Blocky und ioBroker und ich seh nicht ganz durch was NSPanel jetzt genau in dem Alias erwartet. Kannst du mir da ein einfaches Beispiel zeigen?
          Danke schonmal!

          ArmilarA 2 Replies Last reply
          0
          • D DaPeace

            @armilar
            Ich würde gerne Tagesstromverbrauch und Temperatur-Werte als Line oder Balken-Chart auf dem Panel ausgeben.
            Ich hab bei mir Node-red laufen und die Daten landen hier eh in einer mysql-DB. Ich kriege diese Daten ziemlich einfach in einen json-string oder kann das soweit anpassen wie es für das Panel notwendig wäre aber die Beispiele sind alle für Blocky und ioBroker und ich seh nicht ganz durch was NSPanel jetzt genau in dem Alias erwartet. Kannst du mir da ein einfaches Beispiel zeigen?
            Danke schonmal!

            ArmilarA Offline
            ArmilarA Offline
            Armilar
            Most Active Forum Testing
            wrote on last edited by Armilar
            #4093

            @dapeace sagte in SONOFF NSPanel mit Lovelace UI:

            Ich hab bei mir Node-red laufen und die Daten landen hier eh in einer mysql-DB...... aber die Beispiele sind alle für Blocky und ioBroker und ich seh nicht ganz durch was NSPanel jetzt genau in dem Alias erwartet.

            Bei Node-Red kann ich dir leider keine Unterstützung geben, da ich es nicht nutze und auch keine Ahnung habe wie man es benutzt :grin: . Bei mySQL allerdings auch nicht, da bei mir vollständig auf InfluxDB2...

            Evtl. gibt es aber User die Node-Red mit der cardChart oder cardLChart benutzen.
            Evtl. mal @Kuckuckmann fragen. Er ist bei Blockly und SQL - weiß aber nicht, ob er Charts im Einsatz hat.

            Was würde denn gegen ein Blockly oder gegen ein JavaScript sprechen? In den nachfolgenden Beispielen, sind auch Scripte für den History-Adapter enthalten.

            https://github.com/joBr99/nspanel-lovelace-ui/wiki/ioBroker-Card-Definitionen-(Seiten)#cardchart-ab-ts-script-v370

            var historyInstance = 'history.0';
            

            habe mal gehört, dass man dann den history gegen sql austauschen kann:

            var historyInstance = 'sql.0';
            

            und das die Daten dann auch kommen.

            Die cardChart erwartet einen String und einen Alias Info. Der String sieht wie folgt aus:

            16^12:00~37~17~13~18^16:00~21~17~22~18^20:00~17~17~16~11^0:00~5~5~5~5^4:00~5~4~4~15^8:00~22~13~10

            Zunächst einmal sind im o.a. Beispiel alle 24 Werte der Stunden über den Tag mit einer Tilde ("~") getrennt. An den Punkten, an denen dann die X-Achsen Ticks gesetzt werden, wird hinter dem Wert dann die Uhrzeit der X-Achse gesetzt

            d89af36d-bf3c-42a9-b88f-c8d1a60f2113-image.png

            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.

            D 1 Reply Last reply
            0
            • ArmilarA Armilar

              @dapeace sagte in SONOFF NSPanel mit Lovelace UI:

              Ich hab bei mir Node-red laufen und die Daten landen hier eh in einer mysql-DB...... aber die Beispiele sind alle für Blocky und ioBroker und ich seh nicht ganz durch was NSPanel jetzt genau in dem Alias erwartet.

              Bei Node-Red kann ich dir leider keine Unterstützung geben, da ich es nicht nutze und auch keine Ahnung habe wie man es benutzt :grin: . Bei mySQL allerdings auch nicht, da bei mir vollständig auf InfluxDB2...

              Evtl. gibt es aber User die Node-Red mit der cardChart oder cardLChart benutzen.
              Evtl. mal @Kuckuckmann fragen. Er ist bei Blockly und SQL - weiß aber nicht, ob er Charts im Einsatz hat.

              Was würde denn gegen ein Blockly oder gegen ein JavaScript sprechen? In den nachfolgenden Beispielen, sind auch Scripte für den History-Adapter enthalten.

              https://github.com/joBr99/nspanel-lovelace-ui/wiki/ioBroker-Card-Definitionen-(Seiten)#cardchart-ab-ts-script-v370

              var historyInstance = 'history.0';
              

              habe mal gehört, dass man dann den history gegen sql austauschen kann:

              var historyInstance = 'sql.0';
              

              und das die Daten dann auch kommen.

              Die cardChart erwartet einen String und einen Alias Info. Der String sieht wie folgt aus:

              16^12:00~37~17~13~18^16:00~21~17~22~18^20:00~17~17~16~11^0:00~5~5~5~5^4:00~5~4~4~15^8:00~22~13~10

              Zunächst einmal sind im o.a. Beispiel alle 24 Werte der Stunden über den Tag mit einer Tilde ("~") getrennt. An den Punkten, an denen dann die X-Achsen Ticks gesetzt werden, wird hinter dem Wert dann die Uhrzeit der X-Achse gesetzt

              d89af36d-bf3c-42a9-b88f-c8d1a60f2113-image.png

              D Offline
              D Offline
              DaPeace
              wrote on last edited by
              #4094

              @armilar
              Hi, wie ich mit Mysql und NodeRed an meine Daten komme weiß ich ja.
              NodeRed ist direkt mit ioB verknüpft und kann hier einfach einen Datenpunkt beschreiben und auch lesen.
              Ich würde also gerne aus NodeRed raus den Info-Datenpunkt vom Alias schreiben und brauche hier die Formatierung.
              Frage ist eben was genau in dem Datenpunkt drin stehen muß der mit dem Info-Alias verknüpft ist. Den Rest sollte ja dann das Skript machen oder?

              Das unten gelistete ist ja das, was dein Skript ans Panel via CustomSend schickt oder?

              16^12:00~37~17~13~18^16:00~21~17~22~18^20:00~17~17~16~11^0:00~5~5~5~5^4:00~5~4~4~15^8:00~22~13~10

              1 Reply Last reply
              0
              • ArmilarA Offline
                ArmilarA Offline
                Armilar
                Most Active Forum Testing
                wrote on last edited by Armilar
                #4095

                @dapeace

                Exakt, die cardChart legst du analog der Wiki an

                Dein NodeRed befüllt einen Datenpunkt in der Art des Strings

                16^12:00~37~17~13~18^16:00~21~17~22~18^20:00~17~17~16~11^0:00~5~5~5~5^4:00~5~4~4~15^8:00~22~13~10
                

                Dann legst du einen Alias vom Gerätetyp Info auf diesen Datenpunkt

                damit würde sich also die cardChart schon als Seite testen lassen...

                Die Seitendefinition der cardChart (Y-Achse wird hier definiert mit Faktor 10)

                2 = 0,2; 4 = 0,4; etc...

                let CardChartExample = <PageChart>
                {
                    'type': 'cardChart',
                    'heading': 'Stromzähler L1+L2+L3',
                    'useColor': true,
                    'items': [<PageItem>{ 
                                id: 'alias.0.NSPanel_1.cardChart', 
                                yAxis: 'Leistung [kW]', 
                                yAxisTicks: [2,4,6,8,10,2,4,6,8,20,2], 
                                onColor: Yellow
                             }]
                };
                

                yAxisTicks: [10,20,30], würde demnach so aussehen:

                246ccd57-c866-4797-9fa5-4d35d7936d9e-image.png

                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.

                D 1 Reply Last reply
                0
                • ArmilarA Armilar

                  @dapeace

                  Exakt, die cardChart legst du analog der Wiki an

                  Dein NodeRed befüllt einen Datenpunkt in der Art des Strings

                  16^12:00~37~17~13~18^16:00~21~17~22~18^20:00~17~17~16~11^0:00~5~5~5~5^4:00~5~4~4~15^8:00~22~13~10
                  

                  Dann legst du einen Alias vom Gerätetyp Info auf diesen Datenpunkt

                  damit würde sich also die cardChart schon als Seite testen lassen...

                  Die Seitendefinition der cardChart (Y-Achse wird hier definiert mit Faktor 10)

                  2 = 0,2; 4 = 0,4; etc...

                  let CardChartExample = <PageChart>
                  {
                      'type': 'cardChart',
                      'heading': 'Stromzähler L1+L2+L3',
                      'useColor': true,
                      'items': [<PageItem>{ 
                                  id: 'alias.0.NSPanel_1.cardChart', 
                                  yAxis: 'Leistung [kW]', 
                                  yAxisTicks: [2,4,6,8,10,2,4,6,8,20,2], 
                                  onColor: Yellow
                               }]
                  };
                  

                  yAxisTicks: [10,20,30], würde demnach so aussehen:

                  246ccd57-c866-4797-9fa5-4d35d7936d9e-image.png

                  D Offline
                  D Offline
                  DaPeace
                  wrote on last edited by
                  #4096

                  @armilar
                  Ok das klingt nicht so schwer.
                  Müssen es eine bestimmte Anzahl Werte sein?

                  ArmilarA 1 Reply Last reply
                  0
                  • D DaPeace

                    @armilar
                    Ok das klingt nicht so schwer.
                    Müssen es eine bestimmte Anzahl Werte sein?

                    ArmilarA Offline
                    ArmilarA Offline
                    Armilar
                    Most Active Forum Testing
                    wrote on last edited by
                    #4097

                    @DaPeace

                    Nein da geht auch mehr... Ausprobieren, da irgendwann ein sehr, sehr, sehr langer String in der HMI überlaufen kann... Und Balken kannst du dann auch nicht mehr erkennen. Wenn du auf einen Balken klickst siehst du übrigens den Wert...

                    d46f8ab8-4de4-46e8-a594-51004492a284-image.png

                    Für Temperaturen verwende ich in der Regel aber die cardLChart, da diese die Koordinaten schöner visualisiert...

                    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 Reply Last reply
                    0
                    • D DaPeace

                      @armilar
                      Ich würde gerne Tagesstromverbrauch und Temperatur-Werte als Line oder Balken-Chart auf dem Panel ausgeben.
                      Ich hab bei mir Node-red laufen und die Daten landen hier eh in einer mysql-DB. Ich kriege diese Daten ziemlich einfach in einen json-string oder kann das soweit anpassen wie es für das Panel notwendig wäre aber die Beispiele sind alle für Blocky und ioBroker und ich seh nicht ganz durch was NSPanel jetzt genau in dem Alias erwartet. Kannst du mir da ein einfaches Beispiel zeigen?
                      Danke schonmal!

                      ArmilarA Offline
                      ArmilarA Offline
                      Armilar
                      Most Active Forum Testing
                      wrote on last edited by Armilar
                      #4098

                      @dapeace sagte in SONOFF NSPanel mit Lovelace UI:

                      Temperatur-Werte als Line

                      Meine Temperatur-Sensoren schiebe ich durch ein einziges JS-Script. Kannste evtl auch für Node-Red mit mySQL adaptieren...

                      const Debug = false;
                      
                      const NSPanel_Path = '0_userdata.0.NSPanel.';
                      const Path = NSPanel_Path + 'Influx2NSPanel.cardLChart.';
                      let   PathSensor = '';
                      
                      let SensorName = ['EG.Buero.Temperatur',
                                        'EG.Gaeste_WC.Temperatur',
                                        'EG.Wohnzimmer.Temperatur',
                                        'EG.Hauswirtschaftsraum.Temperatur',
                                        'EG.Flur_vorne.Temperatur',
                                        'EG.Flur_hinten.Temperatur',
                                        'EG.Esszimmer.Temperatur',
                                        'EG.Kaminzimmer.Temperatur',
                                        'EG.Badezimmer.Temperatur',
                                        'EG.Kueche.Temperatur',
                                        'OG.Schlafzimmer_1.Temperatur',
                                        'OG.Gaestezimmer.Temperatur',
                                        'OG.Hobbyraum.Temperatur',
                                        'Gartenhaus.Temperatur'];
                      
                      const Sensor = [].concat('deconz.0.Sensors.5.temperature')  // EG.Buero.Temperatur
                                       .concat('deconz.0.Sensors.12.temperature')  // EG.Gaeste_WC.Temperatur
                                       .concat('deconz.0.Sensors.53.temperature')  // EG.Wohnzimmer.Temperatur
                                       .concat('deconz.0.Sensors.19.temperature')  // EG.Hauswirtschaftsraum.Temperatur
                                       .concat('deconz.0.Sensors.9.temperature')   // EG.Flur_vorne.Temperatur
                                       .concat('deconz.0.Sensors.27.temperature')  // EG.Flur_hinten.Temperatur
                                       .concat('deconz.0.Sensors.40.temperature')  // EG.Esszimmer.Temperatur
                                       .concat('deconz.0.Sensors.37.temperature')  // EG.Kaminzimmer.Temperatur
                                       .concat('deconz.0.Sensors.45.temperature')  // EG.Badezimmer.Temperatur
                                       .concat('deconz.0.Sensors.25.temperature')  // EG.Kueche.Temperature
                                       .concat('deconz.0.Sensors.57.temperature')  // OG.Schlafzimmer_1.Temperatur
                                       .concat('deconz.0.Sensors.60.temperature')  // OG.Gaestezimmer.Temperatur
                                       .concat('deconz.0.Sensors.63.temperature')  // OG.Hobbyraum.Temperatur
                                       .concat('deconz.0.Sensors.30.temperature'); // Gartenhaus.Temperatur
                                       
                      let   triggeredSensor = 0;
                      
                      const numberOfHoursAgo = 24;
                      const xAxisTicksEveryM = 60;
                      const xAxisLabelEveryM = 240;
                      
                      const InfluxInstance = 'influxdb.1';
                      
                      // Ab hier keine Ändeungen
                      
                      let coordinates = ''; 
                      
                      on({ id: Sensor, change: 'any' }, async function (obj) {
                          
                          if (Debug) console.log(obj.id);
                          if (Debug) console.log(Sensor.indexOf(obj.id));
                          if (Debug) console.log(SensorName[Sensor.indexOf(obj.id)])
                      
                          PathSensor = Path + SensorName[Sensor.indexOf(obj.id)]
                      
                          if (existsObject(PathSensor) == false) {
                              createState(PathSensor, 0, {
                                  name: 'SensorGrid',
                                  desc: 'Sensor Values [~<time>:<value>]*',
                                  type: 'string',
                                  role: 'value',
                              });
                          }
                      
                          let query =[
                              'from(bucket: "iobroker")',
                              '|> range(start: -' + numberOfHoursAgo + 'h)',
                              '|> filter(fn: (r) => r["_measurement"] == "' + obj.id + '")',
                              '|> 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);
                      
                          sendTo(InfluxInstance, 'query', query, function (result) {
                              if (result.error) {
                                  console.error(result.error);
                              } else {
                                  // show result
                                  if (Debug) console.log(result);
                                  let numResults = result.result.length;
                                  for (let r = 0; r < numResults; r++) 
                                  {
                                      let list = []
                                      let numValues = result.result[r].length;
                      
                                      for (let i = 0; i < numValues; i++) 
                                      {
                                          let time = Math.round(result.result[r][i]._rtime/1000/1000/1000/60);
                                          let value = Math.round(result.result[r][i]._value * 10);
                                          list.push(time + ":" + value);
                                      }
                      
                                      coordinates = list.join("~");
                      
                                      if (Debug) console.log(coordinates);
                                  }
                              }
                          });
                      
                          let timeOut = setTimeout (
                              function () {
                                  let ticksAndLabelsList = []
                                  let date = new Date();
                                  date.setMinutes(0, 0, 0);
                                  let ts = Math.round(date.getTime() / 1000);
                                  let 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
                                      {
                                          let currentDate = new Date(x * 1000);
                                          // Hours part from the timestamp
                                          let hours = '0' + String(currentDate.getHours());
                                          // Minutes part from the timestamp
                                          let minutes = '0' + String(currentDate.getMinutes());
                                          let 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);
                                  setState(PathSensor, ticksAndLabelsList.join('+') + '~' + coordinates, true);
                              }, 
                          1500
                          ) ;
                      });
                      

                      5bb270b6-0966-4868-9967-48ee6bc6d93d-image.png

                      Die cardLChart arbeitet allerdings mit Koordinaten:

                      Der String weicht von der cardChart ab:
                      0^16:00+60+120+180+240^20:00+300+360+420+480^00:00+540+600+660+720^04:00+780+840+900+960^08:00+1020+1080+1140+1200^12:00+1260+1320+1380~58:212~118:211~178:212~238:212~298:213~358:211~418:209~478:209~538:209~598:208~658:202~718:201~778:199~838:198~898:197~958:196~1018:198~1078:200~1138:201~1198:203~1258:208~1318:209~1378:208~1438:209

                      im vorderen Teil (rot) wird die X-Achse konstruiert und mit "+" verknüpft. Im Anschluss werden dann die Koordinaten mit der Tilde "~" getrennt als "X:Y" angegeben...

                      50e923c1-bb54-4599-aeba-047215d8e5f7-image.png

                      EDIT: Falls das dann alles irgendwann im Node-Red funktioniert, könntest du es der Nachwelt für eine Wiki-Erweiterung zur Verfügung stellen? Bist sicherlich nicht der einzige mit Node-Red... :kissing_closed_eyes:

                      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.

                      D 2 Replies Last reply
                      0
                      • ArmilarA Armilar

                        @dapeace sagte in SONOFF NSPanel mit Lovelace UI:

                        Temperatur-Werte als Line

                        Meine Temperatur-Sensoren schiebe ich durch ein einziges JS-Script. Kannste evtl auch für Node-Red mit mySQL adaptieren...

                        const Debug = false;
                        
                        const NSPanel_Path = '0_userdata.0.NSPanel.';
                        const Path = NSPanel_Path + 'Influx2NSPanel.cardLChart.';
                        let   PathSensor = '';
                        
                        let SensorName = ['EG.Buero.Temperatur',
                                          'EG.Gaeste_WC.Temperatur',
                                          'EG.Wohnzimmer.Temperatur',
                                          'EG.Hauswirtschaftsraum.Temperatur',
                                          'EG.Flur_vorne.Temperatur',
                                          'EG.Flur_hinten.Temperatur',
                                          'EG.Esszimmer.Temperatur',
                                          'EG.Kaminzimmer.Temperatur',
                                          'EG.Badezimmer.Temperatur',
                                          'EG.Kueche.Temperatur',
                                          'OG.Schlafzimmer_1.Temperatur',
                                          'OG.Gaestezimmer.Temperatur',
                                          'OG.Hobbyraum.Temperatur',
                                          'Gartenhaus.Temperatur'];
                        
                        const Sensor = [].concat('deconz.0.Sensors.5.temperature')  // EG.Buero.Temperatur
                                         .concat('deconz.0.Sensors.12.temperature')  // EG.Gaeste_WC.Temperatur
                                         .concat('deconz.0.Sensors.53.temperature')  // EG.Wohnzimmer.Temperatur
                                         .concat('deconz.0.Sensors.19.temperature')  // EG.Hauswirtschaftsraum.Temperatur
                                         .concat('deconz.0.Sensors.9.temperature')   // EG.Flur_vorne.Temperatur
                                         .concat('deconz.0.Sensors.27.temperature')  // EG.Flur_hinten.Temperatur
                                         .concat('deconz.0.Sensors.40.temperature')  // EG.Esszimmer.Temperatur
                                         .concat('deconz.0.Sensors.37.temperature')  // EG.Kaminzimmer.Temperatur
                                         .concat('deconz.0.Sensors.45.temperature')  // EG.Badezimmer.Temperatur
                                         .concat('deconz.0.Sensors.25.temperature')  // EG.Kueche.Temperature
                                         .concat('deconz.0.Sensors.57.temperature')  // OG.Schlafzimmer_1.Temperatur
                                         .concat('deconz.0.Sensors.60.temperature')  // OG.Gaestezimmer.Temperatur
                                         .concat('deconz.0.Sensors.63.temperature')  // OG.Hobbyraum.Temperatur
                                         .concat('deconz.0.Sensors.30.temperature'); // Gartenhaus.Temperatur
                                         
                        let   triggeredSensor = 0;
                        
                        const numberOfHoursAgo = 24;
                        const xAxisTicksEveryM = 60;
                        const xAxisLabelEveryM = 240;
                        
                        const InfluxInstance = 'influxdb.1';
                        
                        // Ab hier keine Ändeungen
                        
                        let coordinates = ''; 
                        
                        on({ id: Sensor, change: 'any' }, async function (obj) {
                            
                            if (Debug) console.log(obj.id);
                            if (Debug) console.log(Sensor.indexOf(obj.id));
                            if (Debug) console.log(SensorName[Sensor.indexOf(obj.id)])
                        
                            PathSensor = Path + SensorName[Sensor.indexOf(obj.id)]
                        
                            if (existsObject(PathSensor) == false) {
                                createState(PathSensor, 0, {
                                    name: 'SensorGrid',
                                    desc: 'Sensor Values [~<time>:<value>]*',
                                    type: 'string',
                                    role: 'value',
                                });
                            }
                        
                            let query =[
                                'from(bucket: "iobroker")',
                                '|> range(start: -' + numberOfHoursAgo + 'h)',
                                '|> filter(fn: (r) => r["_measurement"] == "' + obj.id + '")',
                                '|> 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);
                        
                            sendTo(InfluxInstance, 'query', query, function (result) {
                                if (result.error) {
                                    console.error(result.error);
                                } else {
                                    // show result
                                    if (Debug) console.log(result);
                                    let numResults = result.result.length;
                                    for (let r = 0; r < numResults; r++) 
                                    {
                                        let list = []
                                        let numValues = result.result[r].length;
                        
                                        for (let i = 0; i < numValues; i++) 
                                        {
                                            let time = Math.round(result.result[r][i]._rtime/1000/1000/1000/60);
                                            let value = Math.round(result.result[r][i]._value * 10);
                                            list.push(time + ":" + value);
                                        }
                        
                                        coordinates = list.join("~");
                        
                                        if (Debug) console.log(coordinates);
                                    }
                                }
                            });
                        
                            let timeOut = setTimeout (
                                function () {
                                    let ticksAndLabelsList = []
                                    let date = new Date();
                                    date.setMinutes(0, 0, 0);
                                    let ts = Math.round(date.getTime() / 1000);
                                    let 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
                                        {
                                            let currentDate = new Date(x * 1000);
                                            // Hours part from the timestamp
                                            let hours = '0' + String(currentDate.getHours());
                                            // Minutes part from the timestamp
                                            let minutes = '0' + String(currentDate.getMinutes());
                                            let 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);
                                    setState(PathSensor, ticksAndLabelsList.join('+') + '~' + coordinates, true);
                                }, 
                            1500
                            ) ;
                        });
                        

                        5bb270b6-0966-4868-9967-48ee6bc6d93d-image.png

                        Die cardLChart arbeitet allerdings mit Koordinaten:

                        Der String weicht von der cardChart ab:
                        0^16:00+60+120+180+240^20:00+300+360+420+480^00:00+540+600+660+720^04:00+780+840+900+960^08:00+1020+1080+1140+1200^12:00+1260+1320+1380~58:212~118:211~178:212~238:212~298:213~358:211~418:209~478:209~538:209~598:208~658:202~718:201~778:199~838:198~898:197~958:196~1018:198~1078:200~1138:201~1198:203~1258:208~1318:209~1378:208~1438:209

                        im vorderen Teil (rot) wird die X-Achse konstruiert und mit "+" verknüpft. Im Anschluss werden dann die Koordinaten mit der Tilde "~" getrennt als "X:Y" angegeben...

                        50e923c1-bb54-4599-aeba-047215d8e5f7-image.png

                        EDIT: Falls das dann alles irgendwann im Node-Red funktioniert, könntest du es der Nachwelt für eine Wiki-Erweiterung zur Verfügung stellen? Bist sicherlich nicht der einzige mit Node-Red... :kissing_closed_eyes:

                        D Offline
                        D Offline
                        DaPeace
                        wrote on last edited by DaPeace
                        #4099

                        @armilar Ja ich kann den Code dann posten. Kein Problem. Eine kurze Erklärung zu der Formatierung brauche ich aber noch und dann hab Ichs eigentlich auch gleich.

                        16^12:00~37~17~13~18^16:00~21~17~22~18^20:00~17~17~16~11^0:00~5~5~5~5^4:00~5~4~4~15^8:00~22~13~10
                        

                        Das sind ja Blöcke wenn ich das richtig sehe.
                        Ist die 16^ quasi der Befehl fürs Panel was da genau zu machen ist und der Rest sind dann die Daten? Oder lieg ich da falsch?
                        Ich glaube ich hab das etwas unterschätzt.
                        Sind die Werte nach der Uhrzeit die Zeichenkoordinaten wo er den Balken hinpinseln soll? Oder kannst du das näher erklären was genau der Block 12:00~37~17~13~18 z.B. darstellen würde? Ich bin jetzt davon ausgegangen das 12:00 die Zeit hinpinselt und 37 17 13 und 18 dann 4 Balken sind die das Panel automatisch zeichnet.. Warscheinlich bin ich da zu naiv.

                        ArmilarA 1 Reply Last reply
                        0
                        • D DaPeace

                          @armilar Ja ich kann den Code dann posten. Kein Problem. Eine kurze Erklärung zu der Formatierung brauche ich aber noch und dann hab Ichs eigentlich auch gleich.

                          16^12:00~37~17~13~18^16:00~21~17~22~18^20:00~17~17~16~11^0:00~5~5~5~5^4:00~5~4~4~15^8:00~22~13~10
                          

                          Das sind ja Blöcke wenn ich das richtig sehe.
                          Ist die 16^ quasi der Befehl fürs Panel was da genau zu machen ist und der Rest sind dann die Daten? Oder lieg ich da falsch?
                          Ich glaube ich hab das etwas unterschätzt.
                          Sind die Werte nach der Uhrzeit die Zeichenkoordinaten wo er den Balken hinpinseln soll? Oder kannst du das näher erklären was genau der Block 12:00~37~17~13~18 z.B. darstellen würde? Ich bin jetzt davon ausgegangen das 12:00 die Zeit hinpinselt und 37 17 13 und 18 dann 4 Balken sind die das Panel automatisch zeichnet.. Warscheinlich bin ich da zu naiv.

                          ArmilarA Offline
                          ArmilarA Offline
                          Armilar
                          Most Active Forum Testing
                          wrote on last edited by Armilar
                          #4100

                          @dapeace

                          Nein die 16 ist der erste Wert (Balken) und bekommt durch das ^12:00 Uhr die Uhrzeit an der X-Achse

                          Du könntest auch hinter jedem Wert eine Uhrzeit setzen. Nur dann sieht es in der X-Achse unmöglich aus

                          EDIT: Die "History"-Scripte können das auch wenn man die Instanz auf SQL stellt.

                          PS: Nextion kennt keine Fließkommazahlen. In diesem Fall wären es 1,6 kWh * 10 = 16. Die cardChart baut daraus dann wieder eine 1,6

                          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.

                          D 1 Reply Last reply
                          0
                          • ArmilarA Armilar

                            @dapeace

                            Nein die 16 ist der erste Wert (Balken) und bekommt durch das ^12:00 Uhr die Uhrzeit an der X-Achse

                            Du könntest auch hinter jedem Wert eine Uhrzeit setzen. Nur dann sieht es in der X-Achse unmöglich aus

                            EDIT: Die "History"-Scripte können das auch wenn man die Instanz auf SQL stellt.

                            PS: Nextion kennt keine Fließkommazahlen. In diesem Fall wären es 1,6 kWh * 10 = 16. Die cardChart baut daraus dann wieder eine 1,6

                            D Offline
                            D Offline
                            DaPeace
                            wrote on last edited by
                            #4101

                            @Armilar
                            Moin Armilar,
                            danke schonmal für deine Hilfe. Ein Problem hab ich noch. Das Scaling passt für meinen Zweck nicht.
                            Dein Beispiel hat ja einen Wertebereich von 0 - 4.
                            Ich möchte aber Werte zwischen 0 - 30 darstellen (Tagesverbrauch vom Haus) und auch bei der Einspeisung wird es ungefähr solche Werte geben.
                            Mit dem aktuellen Skript und "yAxisTicks: [100,200,300]," zeigt er mir vorne keine Legende an und die Skalierung scheint mir immer noch die gleiche zu sein. Kann man das irgendwie anpassen?

                            Ansonsten bin ich doch nicht doof. Es funktioniert so relativ einfach mit einem 5-Zeiler das in den Datenpunkt zu schreiben.

                            ArmilarA 1 Reply Last reply
                            0
                            • D DaPeace

                              @Armilar
                              Moin Armilar,
                              danke schonmal für deine Hilfe. Ein Problem hab ich noch. Das Scaling passt für meinen Zweck nicht.
                              Dein Beispiel hat ja einen Wertebereich von 0 - 4.
                              Ich möchte aber Werte zwischen 0 - 30 darstellen (Tagesverbrauch vom Haus) und auch bei der Einspeisung wird es ungefähr solche Werte geben.
                              Mit dem aktuellen Skript und "yAxisTicks: [100,200,300]," zeigt er mir vorne keine Legende an und die Skalierung scheint mir immer noch die gleiche zu sein. Kann man das irgendwie anpassen?

                              Ansonsten bin ich doch nicht doof. Es funktioniert so relativ einfach mit einem 5-Zeiler das in den Datenpunkt zu schreiben.

                              ArmilarA Offline
                              ArmilarA Offline
                              Armilar
                              Most Active Forum Testing
                              wrote on last edited by
                              #4102

                              @dapeace

                              sende mal kurz die Seitenvariable und den String

                              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.

                              ArmilarA 1 Reply Last reply
                              0
                              • ArmilarA Armilar

                                @dapeace

                                sende mal kurz die Seitenvariable und den String

                                ArmilarA Offline
                                ArmilarA Offline
                                Armilar
                                Most Active Forum Testing
                                wrote on last edited by Armilar
                                #4103

                                @DaPeace

                                funktioniert bei mir auch nicht in dem Wertebereich in der cardChart... in der cardLChart allerdings wohl :thinking_face:

                                https://github.com/joBr99/nspanel-lovelace-ui/issues/934
                                https://github.com/joBr99/nspanel-lovelace-ui/issues/794

                                Es gibt da noch 2 offene Issues im Github

                                Denke mal das erste Issue dürfte sich auf deine Frage beziehen... Einfach an das Issue dran hängen... Versuche die Tage mal zu klären, ob die gelöst werden können.

                                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.

                                D 1 Reply Last reply
                                1
                                • ArmilarA Armilar

                                  @DaPeace

                                  funktioniert bei mir auch nicht in dem Wertebereich in der cardChart... in der cardLChart allerdings wohl :thinking_face:

                                  https://github.com/joBr99/nspanel-lovelace-ui/issues/934
                                  https://github.com/joBr99/nspanel-lovelace-ui/issues/794

                                  Es gibt da noch 2 offene Issues im Github

                                  Denke mal das erste Issue dürfte sich auf deine Frage beziehen... Einfach an das Issue dran hängen... Versuche die Tage mal zu klären, ob die gelöst werden können.

                                  D Offline
                                  D Offline
                                  DaPeace
                                  wrote on last edited by
                                  #4104

                                  @armilar Ja genau das Phänomen hab ich auch. Danke für die Info. Ich schau mir das an und skaliere derweil die Werte erstmal / 10.

                                  1 Reply Last reply
                                  0
                                  • O Offline
                                    O Offline
                                    OlliBy67
                                    wrote on last edited by
                                    #4105

                                    Erstmal herzlichen Dank für eure super Arbeit.
                                    Ich hab gerade meinen zweiten Panel installiert. Dieses mal die US Version.
                                    Bis jetzt komm ich mit allem klar. Jedoch wollte ich im Screensaver jetzt neben
                                    einem Symbol für das interne Relais zusätzlich die Raumtemperatur anzeigen lassen.
                                    Leider ist da aber wohl zu wenig Platz. Kann man irgendwo den waagrechten Strich
                                    etwas verkürzen, sodass die der Wert korrekt angezeigt wird? Oder wie könnte ich das
                                    sonst lösen.
                                    Vielen Dank schon mal für eure Vorschläge und den Support hier.

                                    Vg Olli
                                    20231105_111405.jpg

                                    ArmilarA 1 Reply Last reply
                                    0
                                    • O OlliBy67

                                      Erstmal herzlichen Dank für eure super Arbeit.
                                      Ich hab gerade meinen zweiten Panel installiert. Dieses mal die US Version.
                                      Bis jetzt komm ich mit allem klar. Jedoch wollte ich im Screensaver jetzt neben
                                      einem Symbol für das interne Relais zusätzlich die Raumtemperatur anzeigen lassen.
                                      Leider ist da aber wohl zu wenig Platz. Kann man irgendwo den waagrechten Strich
                                      etwas verkürzen, sodass die der Wert korrekt angezeigt wird? Oder wie könnte ich das
                                      sonst lösen.
                                      Vielen Dank schon mal für eure Vorschläge und den Support hier.

                                      Vg Olli
                                      20231105_111405.jpg

                                      ArmilarA Offline
                                      ArmilarA Offline
                                      Armilar
                                      Most Active Forum Testing
                                      wrote on last edited by Armilar
                                      #4106

                                      @olliby67

                                      nachfolgende 4 Möglichkeiten fallen mir da für die US Version des NSPanel ein:

                                      1. Variante: Advanced Screensaver US_P

                                        ab1da22b-6045-476a-b8c1-b7f982461518-image.png

                                      2. Variante: Das Icon weglassen

                                         mrIcon1ScreensaverEntity: 
                                             { 
                                                 ScreensaverEntity: 'deconz.0.Sensors.3.open', 
                                                 ScreensaverEntityIconOn: null,
                                                 ScreensaverEntityIconOff: null, 
                                                 ScreensaverEntityValue: 'deconz.0.Sensors.5.temperature',
                                                 ScreensaverEntityValueDecimalPlace : 0,
                                                 ScreensaverEntityValueUnit: '°', 
                                                 ScreensaverEntityOnColor: MSRed, 
                                                 ScreensaverEntityOffColor: Yellow 
                                             },
                                        

                                        91a15a7e-4420-454e-8df1-a2f425e0103e-image.png

                                      3. Variante: Temperatur in die bottomScreensaverEntity 1-4 bringen

                                      4. Variante: Alternativ Layout nutzen und statt der Luftfeuchte die Raumtemperatur konfigurieren

                                        925549e6-53e8-48b9-a1a0-249f703a3bbe-image.png

                                        Scheint es aber aktuell nicht im Service-Menü zu funktionieren und müsste bis zum nächsten Fix über :

                                        0_userdata.0.NSPanel.EMU.Config.Screensaver.alternativeScreensaverLayout --> true
                                        

                                        gesetzt werden

                                      EDIT: Variante 5 --> Issue im Github für HMI aufmachen

                                      Und herzlich willkommen bei den NSPanel'ern :blush:

                                      EDIT2: Variante 6 --> NSPanel um 90° drehen mit US_L TFT

                                      68317690-a0fd-411e-aced-0b7867fea03d-image.png

                                      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 Reply Last reply
                                      1
                                      • T Offline
                                        T Offline
                                        TT-Tom
                                        wrote on last edited by
                                        #4107

                                        @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                                        Scheint es aber aktuell nicht im Service-Menü zu funktionieren und müsste bis zum nächsten Fix über :

                                        Was soll nicht funktionieren, das Umschalten auf alternativ Screensaver oder die Feuchte ändern??

                                        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

                                        ArmilarA 1 Reply Last reply
                                        1
                                        • O Offline
                                          O Offline
                                          OlliBy67
                                          wrote on last edited by
                                          #4108

                                          @Armilar
                                          Vielen Dank für die schnelle Hilfe und Vorschläge.
                                          Ich hab mich vorerst für Variante 2 (ohne Icon) entschieden. :+1:
                                          Das mit dem Issue bei Github muss ich mir erst mal in ruhe durchlesen.
                                          Mein Englisch ist leider nicht so gut. :thinking_face:
                                          Einen schönen Sonntag noch
                                          Olli

                                          1 Reply Last reply
                                          1
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          570

                                          Online

                                          32.7k

                                          Users

                                          82.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe