Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Node-Red errechneten Wert mit Dezimaltrenner versehen?

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Node-Red errechneten Wert mit Dezimaltrenner versehen?

    This topic has been deleted. Only users with topic management privileges can see it.
    • Lucifor1976
      Lucifor1976 last edited by Lucifor1976

      Schönen guten Abend zusammen,

      ich hab mal wieder etwas zu node-red.
      Wir haben einen e3dc S10 E. und lesen diesen über den RSCP aus. LEider funktionieren die Datenpunkte DB ja noch nicht.
      (was ein träumchen wäre)

      Ich möchte nun mit node red die Tagesproduktion errechnen. Leider geht das gerade wohl nur mit
      /PVI/String0/DC_String_Energy_all +
      /PVI/String1/DC_String_Energy_all

      Das das nicht so genau ist, da die Wechselrichterverluste fehlen ist mir klar. Aber darum gehts grad nicht.

      Ich rechne nun mit node red String0 und String1 zusammen, das klappt und erhalte als Ergebnis Wh. =
      1234567Wh
      Um das ganze in Grafana optisch aufzuwerten schön zu machen, stimmt das Format nicht.
      Es muss ja eigentlich so sein: 1234,567kwh Gesamtproduktion.

      In Node red sieht das so aus:

      Bildschirmfoto 2023-04-18 um 19.20.35.png

      Bildschirmfoto 2023-04-18 um 19.21.19.png

      Ich schaff es nun aber nicht mir anstatt 1234567 // 1234,567 ausgeben zu lassen.

      Kann mir jemand auf die Sprünge helfen?


      if (msg.topic === "e3dc-rscp/0/PVI/PVI_0/String_0/DC_STRING_ENERGY_ALL") context.set("String0", msg.payload);
      if (msg.topic === "e3dc-rscp/0/PVI/PVI_0/String_1/DC_STRING_ENERGY_ALL") context.set("String1", msg.payload);

      var String0 = context.get("String0") || 0;
      var String1 = context.get("String1") || 0;

      msg.payload = String0 + String1 / 1000;
      return msg;


      Die Formel im Spoiler klebt mir an die 7 Stellen nochmals drei Nachkomma Stellen an, ein ... * 0,001 bringt ganz seltsame Ergebnisse.

      mickym F 2 Replies Last reply Reply Quote 0
      • mickym
        mickym Most Active @Lucifor1976 last edited by

        @lucifor1976 Warum rechnest Du denn mit Strings überhaupt? Hast Du die Konvertierung eingeschaltet. Und nein Zahlen haben sowohl im iobroker, als auch in NodeRed einen Punkt als Dezimaltrenner und werden dir nur in den Objekten mit Komma dargestellt.

        Schau mal im Adapter ob Du diese blöde Konvertierung eingeschaltet hast.

        Lucifor1976 1 Reply Last reply Reply Quote 0
        • F
          frankyboy73 @Lucifor1976 last edited by

          @lucifor1976 sagte in Node-Red errechneten Wert mit Dezimaltrenner versehen?:

          msg.payload = String0 + String1 / 1000;

          Es gilt bei Formeln Punkt vor Strichrechnung.
          Bei deiner Formel würde der String1 erst durch 1000 geteilt und dann + String0 gerechnet.
          10000 + 10000 / 1000 wären dann 10010
          Versuchsmal mit ner Klammer (10000 + 10000) / 1000, das sind dann nämlich 20.
          Also msg.payload = (String0 + String1) / 1000;

          Das aber nur wenn du Zahlenwerte verwendest (Number), wenn die Inhalte deiner String Variablen wirklich Strings sind klappt das nicht.
          Zur Not könntest du in der Funktion deine Strings als Number benutzen.
          So zum Beispiel:
          msg.payload = (Number(String0) + Number(String1)) / 1000;

          Aber @mickym kennt da bestimmt noch ne bessere Lösung.

          mickym Lucifor1976 2 Replies Last reply Reply Quote 0
          • mickym
            mickym Most Active @frankyboy73 last edited by

            @frankyboy73 Na wichtig ist, dass die Konvertierungsfunktion ausgeschaltet ist:

            1c618968-a2fa-4026-b855-b27f83892734-image.png

            Das muss irgendein Relikt aus der Vergangenheit sein - sonst kommen auch Zahlen aus den Datenpunkten raus. Wenn man das allerdings spät umstellt - hat man halt Konvertierungsaufwand.

            Ansonsten schön wieder was von Dir zu hören. Du hast Dich rar gemacht!!!! -

            F 1 Reply Last reply Reply Quote 0
            • F
              frankyboy73 @mickym last edited by

              @mickym Hi, da seine Formel beim addieren funktioniert, gehe ich davon aus, das Zahlen aus seinen Nodes kommen, Strings würden ja nur aneinander gehängt werden.
              Ich denke mal das nur die Bezeichnung, Benennung "String" ist und das gar nicht wirklich ein String ist. Wie gesagt nur ne Vermutung.
              Ja, ab und zu Poste ich auch mal was, wenn ich es für Sinnvoll halte. Ich lese hier aber immer noch täglich mit. Für Antworten bin ich meist nur nicht schnell genug und außerdem kennen sich einige Leute hier besser aus wie ich.
              Der Thread: https://forum.iobroker.net/topic/64204/shellys-alt-und-plus-über-mqtt-adapter?_=1681843139200
              ist übrigens super und ganz schön lang geworden. Kann man sich ganz schön viel an Infos rausziehen, Anfänger wie Fortgeschrittene.
              Aber sorry offtopic.

              mickym 1 Reply Last reply Reply Quote 1
              • mickym
                mickym Most Active @frankyboy73 last edited by

                @frankyboy73 sagte in Node-Red errechneten Wert mit Dezimaltrenner versehen?:

                @mickym Hi, da seine Formel beim addieren funktioniert, gehe ich davon aus, das Zahlen aus seinen Nodes kommen, Strings würden ja nur aneinander gehängt werden.
                Ich denke mal das nur die Bezeichnung, Benennung "String" ist und das gar nicht wirklich ein String ist. Wie gesagt nur ne Vermutung.
                Ja, ab und zu Poste ich auch mal was, wenn ich es für Sinnvoll halte. Ich lese hier aber immer noch täglich mit. Für Antworten bin ich meist nur nicht schnell genug und außerdem kennen sich einige Leute hier besser aus wie ich.
                Der Thread: https://forum.iobroker.net/topic/64204/shellys-alt-und-plus-über-mqtt-adapter?_=1681843139200
                ist übrigens super und ganz schön lang geworden. Kann man sich ganz schön viel an Infos rausziehen, Anfänger wie Fortgeschrittene.
                Aber sorry offtopic.

                Na wenn schon Zahlen rauskommen, hast Du ja alles erklärt. Punkt vor Strich usw. 😉

                1 Reply Last reply Reply Quote 0
                • Lucifor1976
                  Lucifor1976 @mickym last edited by

                  @mickym sagte in Node-Red errechneten Wert mit Dezimaltrenner versehen?:

                  @lucifor1976 Warum rechnest Du denn mit Strings überhaupt? Hast Du die Konvertierung eingeschaltet. Und nein Zahlen haben sowohl im iobroker, als auch in NodeRed einen Punkt als Dezimaltrenner und werden dir nur in den Objekten mit Komma dargestellt.

                  Schau mal im Adapter ob Du diese blöde Konvertierung eingeschaltet hast.

                  Hello, nein die Konvertierung war aus 🙂 Die Daten liegen als Nummer vor. Der Datenpunkt wird ohne irgendwelche Trenner in der Datenbank gespeichert.

                  1 Reply Last reply Reply Quote 0
                  • Lucifor1976
                    Lucifor1976 @frankyboy73 last edited by

                    @frankyboy73 sagte in Node-Red errechneten Wert mit Dezimaltrenner versehen?:

                    @lucifor1976 sagte in Node-Red errechneten Wert mit Dezimaltrenner versehen?:

                    msg.payload = String0 + String1 / 1000;

                    Es gilt bei Formeln Punkt vor Strichrechnung.
                    Bei deiner Formel würde der String1 erst durch 1000 geteilt und dann + String0 gerechnet.
                    10000 + 10000 / 1000 wären dann 10010
                    Versuchsmal mit ner Klammer (10000 + 10000) / 1000, das sind dann nämlich 20.
                    Also msg.payload = (String0 + String1) / 1000;

                    Das aber nur wenn du Zahlenwerte verwendest (Number), wenn die Inhalte deiner String Variablen wirklich Strings sind klappt das nicht.
                    Zur Not könntest du in der Funktion deine Strings als Number benutzen.
                    So zum Beispiel:
                    msg.payload = (Number(String0) + Number(String1)) / 1000;

                    Aber @mickym kennt da bestimmt noch ne bessere Lösung.

                    Hello, genau das hat funktioniert, ich danke euch 🙂

                    msg.payload = (String0 + String1) / 1000;

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    625
                    Online

                    31.7k
                    Users

                    79.7k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    635
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo