Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Datenpunkt berechnen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Datenpunkt berechnen

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

      Also, wenn ihr jetzt so Gas gebt, erwarte ich bei Sonnenaufgang die ersten Resultate. Vom Wechselrichter versteht sich.

      1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators last edited by

        @moebius:

        Am besten die ganze

        prozedurale Programmierung vergessen - der function node ist "böse" `

        ok :shock:

        Ich wollte damit anfangen kleine Brocken javascript einzusetzen um langsam mit js warm zu werden 😞

        Daher sieht es bei mir auch so aus:
        144_solar_node-red.jpg

        nur im letzten kommt nichts raus:

        habe aber auch noch nicht lange gesucht.

        var DC = parseFloat(((msg.payload[5])*parseFloat(msg.payload[3])+(msg.payload[9])*parseFloat(msg.payload[7])));
        var AC = parseFloat(msg.payload[0]);
        
        var Wirkung = (AC/DC*100);
        
        if (parseFloat(msg.payload[5]) > 0) {
           msg.payload = Wirkung;
        } else {
           msg.payload = 0;
        }
        
        return msg;
        

        kein Gemecker, aber einfach kein Ergebnis auch kein null??

        @paul53:

        Du aber auch mit dem Semikolon. Was bei Homoran zu viele, sind bei Dir zu wenig. `
        Node-red meckert dann "unneccessary semikolon" - das hat es aber nicht :oops: :oops:

        Danke erstmal

        Rainer

        1 Reply Last reply Reply Quote 0
        • Y
          ykuendig last edited by

          Ich seh jetzt nicht in Deine Funktion-Nodes. Aber trimmst Du auch die Daten wie @moebius das vorgeschlagen hat? Oder rechnest Du das mit den ganzen Leerzeichen zusammen?

          1 Reply Last reply Reply Quote 0
          • M
            moebius last edited by

            @homoran: wahrscheinlich ist DC = 0 -> schlimm! 🙂

            Kann dir nur raten es nicht so zu machen - am Schluss endest du dann auch bei normalem javascript, tippst dir die finger wund und jagst die halbe Zeit bugs…

            1 Reply Last reply Reply Quote 0
            • Y
              ykuendig last edited by

              @moebius, aber Dein flow sieht ja eigentlich schon fast fertig aus. könntest Du da nicht die payloads noch gleich in Nummern wandeln. Dann müsste man blos noch die Datenpunkte richtig anschreiben. :lol:

              1 Reply Last reply Reply Quote 0
              • Homoran
                Homoran Global Moderator Administrators last edited by

                @ykuendig:

                Aber trimmst Du auch die Daten wie @moebius das vorgeschlagen hat? `
                An dem node hänge ich gerade und verstehe ihn noch nicht ganz.

                • Nein, ich arbeite noch mit allem, aber node-red scheint schlau zu sein und entfernt beim parseFloat() die Leerzeichen.

                @moebius:

                wahrscheinlich ist DC = 0 -> schlimm! `
                klar, daher ist es im Moment "x x x", was immer das bei parseFloat() ergibt??

                und hier in Köln heißt es: "Null x Null x Null is Null"

                bei der Division wird es dann natürlich lustig - überzeugt, dann muss ich das auch noch abfangen.

                @moebius:

                am Schluss endest du dann auch bei normalem javascript `
                Da will ich aber hin 😄

                Einen Adapter in node-red wäre wahrscheinlich höchst ambitioniert 😉

                Gruß

                Rainer

                1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 last edited by

                  Vor (msg.payload[9]) fehlt parseFloat.

                  var DC = parseFloat(msg.payload[5]) * parseFloat(msg.payload[3]) + parseFloat(msg.payload[9]) * parseFloat(msg.payload[7]);
                  var AC = parseFloat(msg.payload[0]);
                  
                  if(DC) {
                     msg.payload = 100 * AC / DC;
                  } else {
                     msg.payload = 0;
                  }
                  
                  return msg;
                  
                  1 Reply Last reply Reply Quote 0
                  • Homoran
                    Homoran Global Moderator Administrators last edited by

                    @paul53:

                    Vor (msg.payload[9]) fehlt parseFloat. `
                    Stimmt :oops:

                    Das wars aber nicht alleine. nur damit lief es immer noch nicht aber Jetzt klappte es - warum???

                    Hierzu habe ich noch Fragen:

                    if(DC) {
                       msg.payload = 100 * AC / DC;
                    

                    Warum hast du das DC in Klammern?

                    die 100 nach vorne wegen der Rundungsfehler? oder Dezimalstellen?

                    Gruß

                    Rainer

                    1 Reply Last reply Reply Quote 0
                    • M
                      moebius last edited by

                      @homoran: wenn du gleich nach dem selector ein switch machst und auf x x x checkst, hast du dahinter schon nur mehr gültige Werte (hoffentlich).

                      Du kannst jeden flow natürlich wieder in reinem javascript implementieren.

                      Aber die Schönheit und Eleganz von node-red ist dann leider weg 😞

                      @ykuendig: ja schon, aber ein bischen was zum üben sollte doch noch sein…
                      1803_clipboard07.jpg

                      1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 last edited by

                        @Homoran:

                        Warum hast du das DC in Klammern? `
                        Das ist der if-Ausdruck und entspricht

                        if(DC != 0)
                        

                        @Homoran:

                        die 100 nach vorne wegen der Rundungsfehler? oder Dezimalstellen? `
                        Nein, in JS bleibt es bei Float (im Gegensatz zu HM Script). Es ist nur wegen der Optik.

                        1 Reply Last reply Reply Quote 0
                        • Homoran
                          Homoran Global Moderator Administrators last edited by

                          :idea:

                          Danke euch Allen für eure Geduld!

                          Schonen Abend / Gute Nacht

                          Rainer

                          1 Reply Last reply Reply Quote 0
                          • Y
                            ykuendig last edited by

                            @Homoran:

                            if(DC) {
                               msg.payload = 100 * AC / DC;
                            ```` `  
                            

                            Aber Musik spielt das Ding nicht ? Oder? [Dong dong dong dong….]

                            1 Reply Last reply Reply Quote 0
                            • Homoran
                              Homoran Global Moderator Administrators last edited by

                              @ykuendig:

                              Also, wenn ihr jetzt so Gas gebt, erwarte ich bei Sonnenaufgang die ersten Resultate. Vom Wechselrichter versteht sich. `
                              144_screenshot_20170220-081231.jpg
                              😄 😄 😄

                              Jetzt muss ich nur noch die Datenpunkte anlegen und den cron eingeben.

                              Wie wird eigentlich ein cron alle 15 Sekunden angelegt.

                              Gruß

                              Rainer

                              1 Reply Last reply Reply Quote 0
                              • Y
                                ykuendig last edited by

                                im JS Adapter kannst Du ein Beispiel machen 'lassen'

                                Aber im Prinzip machst Du einfach einen Stern mehr. Und dann beim ersten "*/15". [Aus dem Kopf. Nicht getestet]

                                1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 last edited by

                                  @Homoran:

                                  Das wars aber nicht alleine. nur damit lief es immer noch nicht aber Jetzt klappte es - warum??? `
                                  Änderungen in der Reihenfolge, wie ich sie gemacht habe:

                                  1. Orignal Script Zeile

                                  2. parseFloat hinzugefügt

                                  3. Leerzeichen verändert, um die Struktur der Zeile besser zu erkennen

                                  4. Falsche Klammern erkannt und korrigiert

                                  var DC = parseFloat(((msg.payload[5])*parseFloat(msg.payload[3])+(msg.payload[9])*parseFloat(msg.payload[7])));
                                  var DC = parseFloat(((msg.payload[5])*parseFloat(msg.payload[3])+parseFloat(msg.payload[9])*parseFloat(msg.payload[7])));
                                  var DC = parseFloat(((msg.payload[5]) * parseFloat(msg.payload[3]) + parseFloat(msg.payload[9]) * parseFloat(msg.payload[7])));
                                  var DC = parseFloat(msg.payload[5]) * parseFloat(msg.payload[3]) + parseFloat(msg.payload[9]) * parseFloat(msg.payload[7]);
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • Y
                                    ykuendig last edited by

                                    Und nun, wo's dunkel ist… erzähl. Wie liefs?

                                    1 Reply Last reply Reply Quote 0
                                    • Homoran
                                      Homoran Global Moderator Administrators last edited by

                                      ich habe beim ersten Sonnenstrahl extra für dich ein Bild gepostet:

                                      ~~![](</s><URL url=)<link_text text="http://forum.iobroker.net/download/file ... &mode=view">http://forum.iobroker.net/download/file.php?id=9116&mode=view</link_text>" />

                                      jetzt habe ich vor ner halben Stunde die Datenstruktur erstellt und den Flow mit den Datenpunkten verknüpft.

                                      Seitdem ist alles wieder 0

                                      Gruß

                                      Rainer~~

                                      1 Reply Last reply Reply Quote 0
                                      • Homoran
                                        Homoran Global Moderator Administrators last edited by

                                        Läuft so weit ganz gut. Leider sind due falschen Verbrauchswerte immer noch da.
                                        144_screenshot_20170226-092716.jpg
                                        Die Berechnung des Verbrauchs funktioniert IMHO korrekt, die Solardaten werden alle 15 Sekunden abgerufen, die Daten vom Smartmeter auch.

                                        Die Berechnung des Verbrauchs wird auf e7ne Änderung des Smartmeter Werts getriggert, Solarwerte und Smartmeter jedoch per Cron.

                                        Diese sind jedoch nicht synchron.

                                        Bei starken Äderungen in der Sonneneinstrahlung kommt es daher zu falschen Verbrauchswerten.

                                        Leider habe ich in node-Red noch nicht gefunden, wie ich den Abruf der Solarwerte auf die Änderung des Smartmeter Werts triggern kann.

                                        Gruß

                                        Rainer

                                        1 Reply Last reply Reply Quote 0
                                        • M
                                          moebius last edited by

                                          Hallo Rainer,

                                          hoffe, du hast es schon auf javascript umgebaut - ansonsten wird ein Blitz deine Anlage treffen, denn du erzürnst den Programmiergott :lol:

                                          Die Werte ändern sich so schnell, dass ein 15sec Intervall bei der Abfrage viel zu lang ist. Tatsächlich wird eine Abfrage der Ist-Werte wohl nie stimmen…

                                          Du müsstest statt den Momentanwerten die kumulierten Werte der Geräte selbst verwenden.

                                          Das Synchronisieren könnte man noch verbessern und nicht alle 15 sec auslesen, sondern genau definiert bei sec 0,15,30,45 (modulo).

                                          Bzw wenn du verrätst wie der smartmeter Adapter getriggert wird, geht es vielleicht auch über node-red.

                                          1 Reply Last reply Reply Quote 0
                                          • Homoran
                                            Homoran Global Moderator Administrators last edited by

                                            @moebius:

                                            ansonsten wird ein Blitz deine Anlage treffen, denn du erzürnst den Programmiergott `
                                            ich hoffe die Module wandeln das dann wenigstens in Strom um :mrgreen:

                                            (Ich bicn wissenstechnisch noch nicht so weit - und Blockly kann dies nicht und node-red jenes - oder ich bin nur zu blöd)

                                            @moebius:

                                            Die Werte ändern sich so schnell, dass ein 15sec Intervall bei der Abfrage viel zu lang ist `
                                            Klar, um die Realwerte geht es hier im Moment auch nicht.

                                            @moebius:

                                            sondern genau definiert bei sec 0,15,30,45 (modulo). `
                                            ich hatte das auch gehofft, aber eben
                                            @moebius:

                                            wenn du verrätst wie der smartmeter Adapter getriggert wird, `
                                            das weiß ich nicht.

                                            Da kann man nur ein Intervall einstellen.

                                            Daher wollte ich
                                            @moebius:

                                            Das Synchronisieren könnte man noch verbessern `
                                            indem ich auf die Änderung des Wertes vom Smartmeter reagiere.

                                            Gruß

                                            Rainer

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            719
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            7
                                            70
                                            12420
                                            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