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. ioBroker Allgemein
  4. Negative Werte in FLOT positiv darstellen

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    250

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

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

Negative Werte in FLOT positiv darstellen

Scheduled Pinned Locked Moved ioBroker Allgemein
25 Posts 6 Posters 4.0k Views 3 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.
  • HomoranH Homoran

    @Ralla66 nee, nicht ganz.

    Ein Alias ist seit einiger Zeit möglich im Admin zu erstellen, üblicherweise unter alias.0

    Sinnvoll z.B. wenn man komplexe Scripte oder Visus hat und dann auf einmal ein Gerät defekt ist und durch eins mit einer anderen ID ersetzt wird.
    Arbeitet man grundsätzlich mit Aliasen macht das dann gar nichts, dann weist du dem Alias einfach die andere ID zu und in deinen Skripten kann weiter mit dem selben Alias gearbeitet werden.

    Nachdem ich aber mehrere Posts von @paul53 gelesen hatte habe ich gemerkt, dass der Alias ein noch viel mächtigeres Tool sein muss, indem auch Transformationen der Werte in einen Alias durchgeführt werden können.

    @paul53 legt so einen Alias mit all diesen Funktionen immer über javascript an, weil das manuelle Anlegen wohl noch nicht so komfortabel ist.
    Aber sonst haben Aliase mit js/Blockly nichts zu tun.

    ...und ich habe noch mehr zu lernen :seufz:

    paul53P Offline
    paul53P Offline
    paul53
    wrote on last edited by
    #21

    @Homoran sagte:

    üblicherweise unter alias.0

    Ausschließlich unter alias.0, denn nur dort werden sie vom js-controller als Alias behandelt.

    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

    1 Reply Last reply
    0
    • Ralla66R Ralla66

      @Homoran
      Schwierig zu beschreiben,
      entweder 1 Alias umschreiben von - nach +hier einzelnt,
      oder per Blockly viele Aliase umschreiben von - nach +.
      Wobei für ein Flot Wert wohl per Alias von paul53 reicht.
      Wenn er uns verrät wie das geht.

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by paul53
      #22

      @Ralla66 sagte:

      Wenn er uns verrät wie das geht.

      Passe im folgenden Script idOrigin an, dann wird durch einmaliges Aktivieren des Scripts der Alias erzeugt, der bei Werten kleiner 0 invertiert.

      // Original-Datenpunkt
      const idOrigin = '...'; // ID eingeben !
      // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt.
      // Bei Nicht-Verwendung Leerstring '' zuweisen
      const idRead = ''; //'knx.0.Wohnen.Licht.Esstisch_Status'/*Wohnen Licht Esstisch Status*/;
       
      // Alias-Datenpunkt
      const idAlias = 'PV.Einspeisung';
      var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk;
      
      // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich
      nameAlias = 'PV Einspeisung';
      desc = 'per Script erstellt';
      // typeAlias = 'boolean'; // oder 'number'
      read = "val < 0 ? -val : 0"; // Erkennung "Aus" --> false erfolgt automatisch  
      // write = "val ? true : true";
      // role = 'value';
      // min = 0; // nur Zahlen
      // max = 100; // nur Zahlen
      // unit = '%'; // nur für Zahlen
      // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein)
      // custom = []; // verhindert doppelte Ausführung von history, ...
      // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten !
      // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten !
      
      // Ab hier nichts ändern !!
      function createAlias(idDst, idSrc, idRd) {
         if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn');
         else {
            var obj = {};
            obj.type = 'state';
            obj.common = getObject(idSrc).common;
            obj.common.alias = {};
            if(idRd) {
                obj.common.alias.id = {};
                obj.common.alias.id.read = idRd;
                obj.common.alias.id.write = idSrc;
                obj.common.read = true;
            } else obj.common.alias.id = idSrc;
            if(typeAlias) obj.common.type = typeAlias;
            if(obj.common.read !== false && read) obj.common.alias.read = read;
            if(obj.common.write !== false && write) obj.common.alias.write = write;
            if(nameAlias) obj.common.name = nameAlias;
            if(role) obj.common.role = role;
            if(desc) obj.common.desc = desc;
            if(min !== undefined) obj.common.min = min;
            if(max !== undefined) obj.common.max = max;
            if(unit) obj.common.unit = unit;
            if(states) obj.common.states = states;
            if(custom && obj.common.custom) obj.common.custom = custom;
            obj.native = {};
            setObject(idDst, obj);
            if(raum && existsObject('enum.rooms.' + raum)) {
               let obj = getObject('enum.rooms.' + raum)
               obj.common.members.push(idDst);
               setObject('enum.rooms.' + raum, obj);
            }
            if(gewerk && existsObject('enum.functions.' + gewerk)) {
               let obj = getObject('enum.functions.' + gewerk)
               obj.common.members.push(idDst);
               setObject('enum.functions.' + gewerk, obj);
            }
         } 
      }
       
      createAlias('alias.0.' + idAlias, idOrigin, idRead);
      

      Wenn anschließend idAlias, nameAlias und read angepasst werden, kann gleich noch der Alias für den Bezug erzeugt werden.

      read = "val > 0 ? val : 0"; // Bezug nur bei positiven Werten  
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      HomoranH M 2 Replies Last reply
      0
      • paul53P paul53

        @Ralla66 sagte:

        Wenn er uns verrät wie das geht.

        Passe im folgenden Script idOrigin an, dann wird durch einmaliges Aktivieren des Scripts der Alias erzeugt, der bei Werten kleiner 0 invertiert.

        // Original-Datenpunkt
        const idOrigin = '...'; // ID eingeben !
        // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt.
        // Bei Nicht-Verwendung Leerstring '' zuweisen
        const idRead = ''; //'knx.0.Wohnen.Licht.Esstisch_Status'/*Wohnen Licht Esstisch Status*/;
         
        // Alias-Datenpunkt
        const idAlias = 'PV.Einspeisung';
        var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk;
        
        // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich
        nameAlias = 'PV Einspeisung';
        desc = 'per Script erstellt';
        // typeAlias = 'boolean'; // oder 'number'
        read = "val < 0 ? -val : 0"; // Erkennung "Aus" --> false erfolgt automatisch  
        // write = "val ? true : true";
        // role = 'value';
        // min = 0; // nur Zahlen
        // max = 100; // nur Zahlen
        // unit = '%'; // nur für Zahlen
        // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein)
        // custom = []; // verhindert doppelte Ausführung von history, ...
        // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten !
        // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten !
        
        // Ab hier nichts ändern !!
        function createAlias(idDst, idSrc, idRd) {
           if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn');
           else {
              var obj = {};
              obj.type = 'state';
              obj.common = getObject(idSrc).common;
              obj.common.alias = {};
              if(idRd) {
                  obj.common.alias.id = {};
                  obj.common.alias.id.read = idRd;
                  obj.common.alias.id.write = idSrc;
                  obj.common.read = true;
              } else obj.common.alias.id = idSrc;
              if(typeAlias) obj.common.type = typeAlias;
              if(obj.common.read !== false && read) obj.common.alias.read = read;
              if(obj.common.write !== false && write) obj.common.alias.write = write;
              if(nameAlias) obj.common.name = nameAlias;
              if(role) obj.common.role = role;
              if(desc) obj.common.desc = desc;
              if(min !== undefined) obj.common.min = min;
              if(max !== undefined) obj.common.max = max;
              if(unit) obj.common.unit = unit;
              if(states) obj.common.states = states;
              if(custom && obj.common.custom) obj.common.custom = custom;
              obj.native = {};
              setObject(idDst, obj);
              if(raum && existsObject('enum.rooms.' + raum)) {
                 let obj = getObject('enum.rooms.' + raum)
                 obj.common.members.push(idDst);
                 setObject('enum.rooms.' + raum, obj);
              }
              if(gewerk && existsObject('enum.functions.' + gewerk)) {
                 let obj = getObject('enum.functions.' + gewerk)
                 obj.common.members.push(idDst);
                 setObject('enum.functions.' + gewerk, obj);
              }
           } 
        }
         
        createAlias('alias.0.' + idAlias, idOrigin, idRead);
        

        Wenn anschließend idAlias, nameAlias und read angepasst werden, kann gleich noch der Alias für den Bezug erzeugt werden.

        read = "val > 0 ? val : 0"; // Bezug nur bei positiven Werten  
        
        HomoranH Do not disturb
        HomoranH Do not disturb
        Homoran
        Global Moderator Administrators
        wrote on last edited by
        #23

        @paul53 wobei ich da noch auf Antwort von @Thirteen37 warte, was er da genau machen will. bei seinem letzter post sagte er

        @Thirteen37 sagte in Negative Werte in FLOT positiv darstellen:

        Momentan habe ich nur die Möglichkeit meine Solaranlage zu messen und den Verbrauch des Hauses nicht, darum würde ich nur ein einfaches Diagramm mit Flot erzeugen wollen, mit einer einzigen Linie für die Solaranlage.

        kein Support per PN! - Fragen im Forum stellen -
        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
        Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton im Header. Danke!
        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

        1 Reply Last reply
        0
        • wendy2702W Offline
          wendy2702W Offline
          wendy2702
          wrote on last edited by wendy2702
          #24

          Huch, leben in dem alten Thread von mir.

          Ich habe auch einen Wert der per Modbus ausgelesen wird un immer negativ ist.

          Wie kann ich den denn am einfachsten positiv bekommen?

          Muss zugeben ich habe beim lesen mit Alias den faden aktuell verloren und bei dem Script bin ich mir nicht sicher ob es das richtige für mich ist oder ob es nur benötigt wird wenn der Wert auch positiv werden kann.

          EDIT: HAT SICH ERLEDIGT. EIGENTLICH SELBSTERKLÄREND NACH DEM X-TEN LESEN :-)

          Bitte keine Fragen per PN, die gehören ins Forum!

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

          1 Reply Last reply
          0
          • paul53P paul53

            @Ralla66 sagte:

            Wenn er uns verrät wie das geht.

            Passe im folgenden Script idOrigin an, dann wird durch einmaliges Aktivieren des Scripts der Alias erzeugt, der bei Werten kleiner 0 invertiert.

            // Original-Datenpunkt
            const idOrigin = '...'; // ID eingeben !
            // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt.
            // Bei Nicht-Verwendung Leerstring '' zuweisen
            const idRead = ''; //'knx.0.Wohnen.Licht.Esstisch_Status'/*Wohnen Licht Esstisch Status*/;
             
            // Alias-Datenpunkt
            const idAlias = 'PV.Einspeisung';
            var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk;
            
            // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich
            nameAlias = 'PV Einspeisung';
            desc = 'per Script erstellt';
            // typeAlias = 'boolean'; // oder 'number'
            read = "val < 0 ? -val : 0"; // Erkennung "Aus" --> false erfolgt automatisch  
            // write = "val ? true : true";
            // role = 'value';
            // min = 0; // nur Zahlen
            // max = 100; // nur Zahlen
            // unit = '%'; // nur für Zahlen
            // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein)
            // custom = []; // verhindert doppelte Ausführung von history, ...
            // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten !
            // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten !
            
            // Ab hier nichts ändern !!
            function createAlias(idDst, idSrc, idRd) {
               if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn');
               else {
                  var obj = {};
                  obj.type = 'state';
                  obj.common = getObject(idSrc).common;
                  obj.common.alias = {};
                  if(idRd) {
                      obj.common.alias.id = {};
                      obj.common.alias.id.read = idRd;
                      obj.common.alias.id.write = idSrc;
                      obj.common.read = true;
                  } else obj.common.alias.id = idSrc;
                  if(typeAlias) obj.common.type = typeAlias;
                  if(obj.common.read !== false && read) obj.common.alias.read = read;
                  if(obj.common.write !== false && write) obj.common.alias.write = write;
                  if(nameAlias) obj.common.name = nameAlias;
                  if(role) obj.common.role = role;
                  if(desc) obj.common.desc = desc;
                  if(min !== undefined) obj.common.min = min;
                  if(max !== undefined) obj.common.max = max;
                  if(unit) obj.common.unit = unit;
                  if(states) obj.common.states = states;
                  if(custom && obj.common.custom) obj.common.custom = custom;
                  obj.native = {};
                  setObject(idDst, obj);
                  if(raum && existsObject('enum.rooms.' + raum)) {
                     let obj = getObject('enum.rooms.' + raum)
                     obj.common.members.push(idDst);
                     setObject('enum.rooms.' + raum, obj);
                  }
                  if(gewerk && existsObject('enum.functions.' + gewerk)) {
                     let obj = getObject('enum.functions.' + gewerk)
                     obj.common.members.push(idDst);
                     setObject('enum.functions.' + gewerk, obj);
                  }
               } 
            }
             
            createAlias('alias.0.' + idAlias, idOrigin, idRead);
            

            Wenn anschließend idAlias, nameAlias und read angepasst werden, kann gleich noch der Alias für den Bezug erzeugt werden.

            read = "val > 0 ? val : 0"; // Bezug nur bei positiven Werten  
            
            M Offline
            M Offline
            mooly
            wrote on last edited by
            #25

            @paul53

            Super lange her... aber ich habe aktuell genau dieses Problem. Habe dein Skript kopiert und die ID angepasst, aber unter alias finde ich die "PV.Einspeisung" nicht...

            Mache ich etwas falsch?

            Viele Grüße!

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


            Support us

            ioBroker
            Community Adapters
            Donate
            FAQ Cloud / IOT
            HowTo: Node.js-Update
            HowTo: Backup/Restore
            Downloads
            BLOG

            484

            Online

            32.7k

            Users

            82.5k

            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