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

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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Verbesserung erfahren Blockly/Javascript/KI/AI

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Verbesserung erfahren Blockly/Javascript/KI/AI

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
48 Beiträge 11 Kommentatoren 1.3k Aufrufe 10 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • crunchipC crunchip

    @OliverIO sagte in Verbesserung erfahren Blockly/Javascript/KI/AI:

    Ich habe das Skript mit dem folgenden, prompt mal bei ChatGPT hineingeworfen

    wie schon anderweitig erwähnt verwende ich gerne perplexity, das erklärt einem automatisch ohne zu fragen,
    erläutert die Fehler, macht Verbesserungsvorschläge und stellt folge Fragen, was man sich z.b eventuell noch wünschen/Erweitern könnte. Das finde ich ganz praktisch, denn da kommen zwischendurch mal coole Ideen herum, an die man gar nicht gedacht hat.

    NegaleinN Offline
    NegaleinN Offline
    Negalein
    Global Moderator
    schrieb am zuletzt editiert von
    #30

    @crunchip sagte in Verbesserung erfahren Blockly/Javascript/KI/AI:

    erklärt einem automatisch ohne zu fragen, erläutert die Fehler, macht Verbesserungsvorschläge und stellt folge Fragen, was man sich z.b eventuell noch wünschen/Erweitern könnte. Das finde ich ganz praktisch, denn da kommen zwischendurch mal coole Ideen herum, an die man gar nicht gedacht hat.

    ähnlich ChatGPT.
    hab da auch Fehler erklärt bekommen, Tipps, usw.
    Werde mir jetzt mal Perplexity anschaun. Ist das für Scripte echt viel besser? Hab noch einige Projekte vor.

    ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
    ° Node.js Fixer ---> iob nodejs-update
    ° Fixer ---> iob fix

    liv-in-skyL 1 Antwort Letzte Antwort
    0
    • NegaleinN Negalein

      @crunchip sagte in Verbesserung erfahren Blockly/Javascript/KI/AI:

      erklärt einem automatisch ohne zu fragen, erläutert die Fehler, macht Verbesserungsvorschläge und stellt folge Fragen, was man sich z.b eventuell noch wünschen/Erweitern könnte. Das finde ich ganz praktisch, denn da kommen zwischendurch mal coole Ideen herum, an die man gar nicht gedacht hat.

      ähnlich ChatGPT.
      hab da auch Fehler erklärt bekommen, Tipps, usw.
      Werde mir jetzt mal Perplexity anschaun. Ist das für Scripte echt viel besser? Hab noch einige Projekte vor.

      liv-in-skyL Offline
      liv-in-skyL Offline
      liv-in-sky
      schrieb am zuletzt editiert von
      #31

      @Negalein mit perplevity habe ich nicht so gute Code Erfahrung

      Claude bei Javascript und gemini bei HTML Seiten nutze ich gerne

      nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

      NegaleinN Jey CeeJ crunchipC 3 Antworten Letzte Antwort
      0
      • liv-in-skyL liv-in-sky

        @Negalein mit perplevity habe ich nicht so gute Code Erfahrung

        Claude bei Javascript und gemini bei HTML Seiten nutze ich gerne

        NegaleinN Offline
        NegaleinN Offline
        Negalein
        Global Moderator
        schrieb am zuletzt editiert von
        #32

        @liv-in-sky sagte in Verbesserung erfahren Blockly/Javascript/KI/AI:

        Claude

        kenn ich noch nicht. gleich mal suchen. :)

        ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
        ° Node.js Fixer ---> iob nodejs-update
        ° Fixer ---> iob fix

        1 Antwort Letzte Antwort
        0
        • liv-in-skyL liv-in-sky

          @Negalein mit perplevity habe ich nicht so gute Code Erfahrung

          Claude bei Javascript und gemini bei HTML Seiten nutze ich gerne

          Jey CeeJ Online
          Jey CeeJ Online
          Jey Cee
          Developer
          schrieb am zuletzt editiert von
          #33

          @liv-in-sky sagte in Verbesserung erfahren Blockly/Javascript/KI/AI:

          Claude bei Javascript und gemini bei HTML Seiten nutze ich gerne

          Hier wären noch die Modelle wie Claude Sonnet 4.5, Opus 4.5, usw. interessant da sich die Modelle teilweise doch sehr Stark Unterscheiden in der Qualität für die Jeweilige Aufgabe.

          Persönlicher Support
          Spenden -> paypal.me/J3YC33

          1 Antwort Letzte Antwort
          0
          • liv-in-skyL liv-in-sky

            @Negalein mit perplevity habe ich nicht so gute Code Erfahrung

            Claude bei Javascript und gemini bei HTML Seiten nutze ich gerne

            crunchipC Offline
            crunchipC Offline
            crunchip
            Forum Testing Most Active
            schrieb am zuletzt editiert von
            #34

            @liv-in-sky sagte in Verbesserung erfahren Blockly/Javascript/KI/AI:

            Claude bei Javascript und gemini

            Ist doch mit inbegriffen und kann ausgewählt werden

            umgestiegen von Proxmox auf Unraid

            1 Antwort Letzte Antwort
            0
            • AsgothianA Asgothian

              Nun gut.. gebe ich mal meine Meinung zu dem Skript ab, ohne das der OP kommentiert hat was es machen soll:

              es ist Ressourcenverschwendung im grossen Stil und birgt das Risiko von Fehlberechnungen:

              • Es läuft ein Heartbeat alle 10 Sekunden auf Daten die sich wahrscheinlich deutlich seltener Ändern.
              • Der Heartbeat beinhaltet eine race-condition zum Trigger der Hardware-Werte, sprich je häufiger sich diese Ändern desdo öfter kann es da klemmen.
              • Die Ergebnisse dieses Heartbeats werden in eine DB geschrieben, damit diese die dann zur Darstellung 'Aggregieren' muss (Schon die Darstellung von nur 3 Stunden führt zu einem Graph der im Zweifelsfall mehr Datenpunkte hat als das zur Darstellung benutzte Gerät Pixel bereitstellt (3 Stunden = 180 minuten = 1800 Datenpunkte)
              • Es wird ein Multi-Trigger genutzt auf DP's die sich (wahrscheinlich - hier fehlt die Aussage des OP) quasi-Synchron ändern. In diesem werden die Werte aller beteiligten Einzel-DPs extra aus der Datenbank geholt (Risiko: Fehlberechnung wegen race-condition)
              • Es werden Dinge berechnet die nicht genutzt werden - in jedem Trigger-Durchlauf
              • Daten die besser im Skript in Variablen gehalten würden werden trotzdem immer über getState/setState gezogen.
              • Auch Konstante oder semi-Konstante Werte werden bei jeder Berechnung neu gezogen.
              • Es gibt eine mögliche race condition zwischen dem setState(PATH + 'Hausverbrauch', hausverbrauch, true); aus dem Trigger und dem const haus = getState(PATH + 'Hausverbrauch').val || 0; aus dem intervall. Wenn die Zeitlich ungünstig zusammen fallen dann wird der 'alte' Verbrauch gelesen, weil das setState nicht abgeschlossen ist.

              Es ist aus meiner Sicht ein wunderbares Beispiel dafür wie die KI etwas liefert was prinzipiell geht, aber wenn man genau hinschaut doch klemmt.

              A.
              Nachtrag:
              Ja, das ist ein relativ hartes Urteil. Ich halte das Skript für nicht gut. Und nein, dafür kann der OP nichts. Ohne weitergehendes Programmierwissen sind diese Probleme nicht ohne weiteres zu erkennen.

              Meister MopperM Online
              Meister MopperM Online
              Meister Mopper
              schrieb am zuletzt editiert von
              #35

              @Asgothian sagte in Verbesserung erfahren Blockly/Javascript/KI/AI:

              Nun gut.. gebe ich mal meine Meinung zu dem Skript ab, ohne das der OP kommentiert hat was es machen soll:

              Vielen Dank,
              ich habe die KI mit deiner Kritik "gefüttert" und sie hat geantwortet:

              "Autsch, das hat gesessen! Aber – und das sage ich als dein KI-Kollege ganz offen – der Programmierer hat in fast allen Punkten fachlich absolut recht. Das Skript ist ein klassisches Beispiel für „Hauptsache, es funktioniert irgendwie“, ohne auf die interne Mechanik von ioBroker zu achten.

              Besonders der Punkt mit der Race Condition (Wettlauf der Daten) und dem massiven getState-Spam ist kritisch für die Stabilität deines Systems."

              Als Ergebnis wurde dieses Skript generiert:

              // =============================================================================
              // PV-ENERGIEMASTER PRO v2.0
              // =============================================================================
              
              // --- 1. KONFIGURATION ---
              // Wir definieren die IDs oben, damit wir sie unten im Code nicht suchen müssen.
              const ID_BATTERIE_W    = 'modbus.0.inputRegisters.100.842_Battery_Power_(System)';
              const ID_PV_DACH_W     = 'solax.0.data.acpower';
              const ID_SMARTMETER_W  = 'smartmeter.0.1-0:16_7_0__255.value';
              const ID_SOC           = 'modbus.0.inputRegisters.100.843_Battery_State_of_Charge_(System)';
              const ID_SPEICHER_KWH  = '0_userdata.0.Energie.PV.Speichergroesse';
              
              const PATH = '0_userdata.0.Energie.PV.';
              
              // --- 2. DER "RAM-SPEICHER" DES SKRIPTS ---
              // Kritikpunkt: "Zu viele getStates". 
              // Lösung: Wir speichern die aktuellen Werte in Variablen im Arbeitsspeicher (RAM).
              // Das ist tausendmal schneller als jedes Mal beim ioBroker-Server anzufragen.
              let pvPower = 0, netPower = 0, batPower = 0, soc = 0;
              
              // Konstanten lesen wir NUR EINMAL beim Skriptstart. Die Größe deines Speichers 
              // ändert sich ja nicht alle 10 Sekunden.
              let speicherMax = getState(ID_SPEICHER_KWH).val || 0; 
              
              // Wichtig für die Energieberechnung: Wann haben wir das letzte Mal gerechnet?
              let lastTimestamp = Date.now();
              
              // --- 3. DIE BERECHNUNGSLOGIK ---
              function calculateEnergyMaster() {
                 
                 // --- A. Physikalische Aufteilung ---
                 // Netzbezug ist positiv (vom Netz), Einspeisung negativ (ins Netz).
                 const netzBezug      = netPower > 0 ? netPower : 0;
                 const einspeisung    = netPower < 0 ? Math.abs(netPower) : 0;
                 
                 // Batterie Laden ist positiv, Entladen ist negativ.
                 const batterieLaden  = batPower > 0 ? batPower : 0;
                 const batterieEntladen = batPower < 0 ? Math.abs(batPower) : 0;
              
                 // --- B. Hausverbrauch-Formel ---
                 // Der Hausverbrauch ergibt sich aus: Was kommt vom Dach + was kommt vom Netz 
                 // + was kommt aus der Batterie. Davon ziehen wir ab, was in die Batterie geht 
                 // oder ins Netz eingespeist wird.
                 let hausverbrauch = pvPower + netzBezug + batterieEntladen - batterieLaden - einspeisung;
                 if (hausverbrauch < 0) hausverbrauch = 0; // Physikalische Korrektur (Sicherheit)
              
                 // --- C. Autarkie ---
                 // Wie viel Prozent meines Verbrauchs decke ich NICHT durch das Netz?
                 let autarkie = hausverbrauch > 0 ? Math.min(100, (1 - (netzBezug / hausverbrauch)) * 100) : 0;
              
                 // --- D. Speicher-Prognose ---
                 let fertigUm = "n. n.";
                 const ladestandKWh = (speicherMax * soc) / 100;
              
                 if (batterieLaden > 50) { // Nur rechnen, wenn mit mehr als 50W geladen wird
                     const leerspeicherKWh = Math.max(0, speicherMax - ladestandKWh);
                     
                     // Formel: Restkapazität / Ladeleistung (in kW umgerechnet)
                     const restladezeitSec = (leerspeicherKWh / (batterieLaden / 1000)) * 3600;
                     
                     let now = new Date();
                     now.setSeconds(now.getSeconds() + restladezeitSec);
                     fertigUm = formatDate(now, "hh:mm");
                 }
              
                 // --- E. DER CLOU: Energie-Integration (Wh-Messung) ---
                 // Kritikpunkt: "Heartbeat alle 10 Sek ist Verschwendung".
                 // Lösung: Wir berechnen die Energie exakt zwischen zwei Wertänderungen.
                 const now = Date.now();
                 const durationHours = (now - lastTimestamp) / (1000 * 60 * 60); // Zeitdifferenz in Stunden
                 
                 if (durationHours > 0) {
                     // Energie (Wh) = Leistung (W) * Zeit (h)
                     const energyWh = hausverbrauch * durationHours;
                     const currentTagesverbrauch = getState(PATH + 'Tagesverbrauch').val || 0;
                     
                     // Wir addieren den kleinen Schnipsel Energie zum Tageszähler
                     setState(PATH + 'Tagesverbrauch', currentTagesverbrauch + energyWh, true);
                 }
                 lastTimestamp = now; // Zeitstempel für den nächsten Durchlauf merken
              
                 // --- F. DATENPUNKTE SCHREIBEN ---
                 // Wir schreiben nur die Werte, die wir wirklich für die Visualisierung (Grafana/Vis) brauchen.
                 setState(PATH + 'Hausverbrauch', hausverbrauch, true);
                 setState(PATH + 'Autarkie', Math.round(autarkie), true);
                 setState(PATH + 'lade_kwh', parseFloat(ladestandKWh.toFixed(1)), true);
                 setState(PATH + 'Restladezeit_final', fertigUm, true);
                 
                 // Die Rohwerte spiegeln wir nur, wenn sie für die Visu nötig sind
                 setState(PATH + 'PV_Dach', pvPower, true);
                 setState(PATH + 'Netzbezug', netzBezug, true);
              }
              
              // --- 4. DIE TRIGGER (DIE "ANTRIEBER") ---
              // Wir hören auf die Hardware. Sobald ein Sensor einen neuen Wert meldet, 
              // aktualisieren wir unsere Variable im RAM und rechnen sofort los.
              
              on({id: ID_PV_DACH_W, change: "ne"}, (obj) => { 
                 pvPower = obj.state.val || 0; 
                 calculateEnergyMaster(); 
              });
              
              on({id: ID_SMARTMETER_W, change: "ne"}, (obj) => { 
                 netPower = obj.state.val || 0; 
                 calculateEnergyMaster(); 
              });
              
              on({id: ID_BATTERIE_W, change: "ne"}, (obj) => { 
                 batPower = obj.state.val || 0; 
                 calculateEnergyMaster(); 
              });
              
              on({id: ID_SOC, change: "ne"}, (obj) => { 
                 soc = obj.state.val || 0; 
                 calculateEnergyMaster(); 
              });
              
              // Reset um Mitternacht
              schedule("0 0 * * *", () => {
                 setState(PATH + 'Tagesverbrauch', 0, true);
              });
              

              Wäre schön, wenn du die Zeit findest nochmal drüberzuschauen.

              Die Erklärung der KI:

              Was wurde verbessert?

              • Bye-bye Heartbeat & Race Condition: Der 10-Sekunden-Intervall wurde komplett entfernt. Stattdessen berechnet das Skript den Energieanteil (Wh) direkt bei jedem Trigger basierend auf der echten Zeitdifferenz (durationHours) zwischen den Meldungen. Das ist hochpräzise und verhindert, dass der Intervall alte Werte liest.

              • RAM statt Datenbank: Die Hardware-Werte werden in lokalen Variablen (pvPower, etc.) gehalten. getState wird im Rechenprozess fast gar nicht mehr benötigt.

              • Konstanten-Management: Die Speichereigenschaft wird nur noch einmalig beim Skriptstart gelesen, nicht mehr 1000-mal am Tag.

              • Daten-Hygiene: Der on-Trigger reagiert jetzt auf change: "ne" (neuer Wert), statt auf any. Das reduziert unnötige Rechenlast bei identischen Werten massiv.

              • Präzision: Durch die Integration über die Zeit (Delta-t) ist der Tagesverbrauch nun mathematisch korrekt, egal ob die Werte alle 2 Sekunden oder alle 2 Minuten kommen.

              • Das Skript ist jetzt „sauber“ und wird deinen ioBroker spürbar entlasten."

              Proxmox und HA

              1 Antwort Letzte Antwort
              1
              • Kalle BlomquistK Offline
                Kalle BlomquistK Offline
                Kalle Blomquist
                schrieb am zuletzt editiert von Kalle Blomquist
                #36

                Entschuldigt, ein unwissender schreibt, korrigiert mich, wenn ich falsch liege.

                Hab´t ihr eigentlich den Beitrag von Asgothian gelesen?
                Die Ki hat für Meister Propper eine Script geschrieben und jetzt soll ein anderer Mensch, und das zum zweiten mal das Script kontrollieren. Was macht das für einen Sinn?

                Jey CeeJ 1 Antwort Letzte Antwort
                1
                • ilovegymI Offline
                  ilovegymI Offline
                  ilovegym
                  schrieb am zuletzt editiert von
                  #37

                  Das macht auf jeden Fall Sinn, denn das von der KI geschriebene ist nicht immer so wie es da rauskommt, zu gebrauchen.
                  Oft steht KI auch fuer "Keine Intelligenz" - und man sollte IMMER !! das pruefen, was da erzeugt wird...

                  ilovegym66 – ioBroker Projekte & Automationen
                  GitHub: https://github.com/Ilovegym66 | Austausch im Discord: https://discord.gg/yC65zjr5uq

                  1 Antwort Letzte Antwort
                  3
                  • Kalle BlomquistK Kalle Blomquist

                    Entschuldigt, ein unwissender schreibt, korrigiert mich, wenn ich falsch liege.

                    Hab´t ihr eigentlich den Beitrag von Asgothian gelesen?
                    Die Ki hat für Meister Propper eine Script geschrieben und jetzt soll ein anderer Mensch, und das zum zweiten mal das Script kontrollieren. Was macht das für einen Sinn?

                    Jey CeeJ Online
                    Jey CeeJ Online
                    Jey Cee
                    Developer
                    schrieb am zuletzt editiert von
                    #38

                    @Kalle-Blomquist sagte in Verbesserung erfahren Blockly/Javascript/KI/AI:

                    Was macht das für einen Sinn?

                    Zum Beispiel den das User die wenig oder keine Ahnung von Programmierung haben, verstehen lernen worauf man achten muss wenn man mit KI Code erzeugt.

                    Persönlicher Support
                    Spenden -> paypal.me/J3YC33

                    1 Antwort Letzte Antwort
                    5
                    • Kalle BlomquistK Offline
                      Kalle BlomquistK Offline
                      Kalle Blomquist
                      schrieb am zuletzt editiert von
                      #39

                      Wäre es nicht besser einen Kursus zu belegen, um zu verstehen. Anstatt die Kontrolle auf einen Anderen zu verlagern. Und habe alle einen Anderen? Machen alle das?

                      HomoranH 1 Antwort Letzte Antwort
                      0
                      • Kalle BlomquistK Kalle Blomquist

                        Wäre es nicht besser einen Kursus zu belegen, um zu verstehen. Anstatt die Kontrolle auf einen Anderen zu verlagern. Und habe alle einen Anderen? Machen alle das?

                        HomoranH Nicht stören
                        HomoranH Nicht stören
                        Homoran
                        Global Moderator Administrators
                        schrieb am zuletzt editiert von
                        #40

                        @Kalle-Blomquist sagte in Verbesserung erfahren Blockly/Javascript/KI/AI:

                        Anstatt die Kontrolle auf einen Anderen zu verlagern

                        ???

                        Was pssiert denn hier täglich zigmal?
                        Hier werden Hilfeschreie "mein Skipt läuft nicht" ständig durch Kontrolle und Korrektur beantwortet

                        kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

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

                        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                        1 Antwort Letzte Antwort
                        1
                        • Kalle BlomquistK Offline
                          Kalle BlomquistK Offline
                          Kalle Blomquist
                          schrieb am zuletzt editiert von Kalle Blomquist
                          #41

                          Eben! und lernen wäre besser und nicht einfach abgeben

                          HomoranH Meister MopperM 2 Antworten Letzte Antwort
                          0
                          • Kalle BlomquistK Kalle Blomquist

                            Eben! und lernen wäre besser und nicht einfach abgeben

                            HomoranH Nicht stören
                            HomoranH Nicht stören
                            Homoran
                            Global Moderator Administrators
                            schrieb am zuletzt editiert von
                            #42

                            @Kalle-Blomquist sagte in Verbesserung erfahren Blockly/Javascript/KI/AI:

                            Eben! und lernen wäre besser.

                            Dass dieser Thread dazu dient solche User zu sensibilisieren dass die KI keine perfekten Ergebnisse liefert, und man diese überprüfen können müssze, ist dir schon klar??

                            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

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

                            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                            1 Antwort Letzte Antwort
                            2
                            • Kalle BlomquistK Offline
                              Kalle BlomquistK Offline
                              Kalle Blomquist
                              schrieb am zuletzt editiert von
                              #43

                              ja, deswegen muss man auch dem Xten User zum xten mal sagen, bitte melde dich nicht als root an, du kannst dir dein ganzes System zerschießen.
                              Meine Argumentation war: Solange ich nicht selber von A-Z verstehe,was mir die Ki da schreibt, lasse ich die Finger weg!
                              Ich warte nur auf die ersten Rechner, die die Kontrolle abgegeben haben, weil der User OpenClaw ohne ausreichende Kenntnis verwendet hat.
                              Aber ich bin jetzt raus aus der Diskussion.

                              HomoranH 1 Antwort Letzte Antwort
                              1
                              • Kalle BlomquistK Kalle Blomquist

                                ja, deswegen muss man auch dem Xten User zum xten mal sagen, bitte melde dich nicht als root an, du kannst dir dein ganzes System zerschießen.
                                Meine Argumentation war: Solange ich nicht selber von A-Z verstehe,was mir die Ki da schreibt, lasse ich die Finger weg!
                                Ich warte nur auf die ersten Rechner, die die Kontrolle abgegeben haben, weil der User OpenClaw ohne ausreichende Kenntnis verwendet hat.
                                Aber ich bin jetzt raus aus der Diskussion.

                                HomoranH Nicht stören
                                HomoranH Nicht stören
                                Homoran
                                Global Moderator Administrators
                                schrieb am zuletzt editiert von
                                #44

                                @Kalle-Blomquist sagte in Verbesserung erfahren Blockly/Javascript/KI/AI:

                                Meine Argumentation war: Solange ich nicht selber von A-Z verstehe,was mir die Ki da schreibt, lasse ich die Finger weg!

                                das sehe ich genauso, aber leider kam das so klar und deutlich bei mir nicht an!

                                kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

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

                                der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                1 Antwort Letzte Antwort
                                0
                                • NegaleinN Negalein

                                  @liv-in-sky sagte in Verbesserung erfahren Blockly/Javascript/KI/AI:

                                  wer dan strafrechtlich belangt wird

                                  der User!
                                  wenn du ein Messer gratis bekommst und damit wen tötest, wirst auch du bestraft und nicht der Schenker.

                                  Meister MopperM Online
                                  Meister MopperM Online
                                  Meister Mopper
                                  schrieb am zuletzt editiert von
                                  #45

                                  @Negalein sagte in Verbesserung erfahren Blockly/Javascript/KI/AI:

                                  der User!
                                  wenn du ein Messer gratis bekommst und damit wen tötest, wirst auch du bestraft und nicht der Schenker.

                                  Es sei denn, der Schenker gibt einen deutlichen Hinweis, was mit diesem Messer geschehen soll (Stichwort Anstiftung 😉).

                                  Proxmox und HA

                                  1 Antwort Letzte Antwort
                                  0
                                  • Kalle BlomquistK Kalle Blomquist

                                    Eben! und lernen wäre besser und nicht einfach abgeben

                                    Meister MopperM Online
                                    Meister MopperM Online
                                    Meister Mopper
                                    schrieb am zuletzt editiert von
                                    #46

                                    @Kalle-Blomquist sagte in Verbesserung erfahren Blockly/Javascript/KI/AI:

                                    Eben! und lernen wäre besser und nicht einfach abgeben

                                    Wozu ist denn deiner Meinung nach ein Forum da, für mich ist es:

                                    • Gemeinschaft mit Gleichgesinnten weltweit
                                    • Wissens- und Erfahrungsaustausch
                                    • Gegenseitige emotionale Unterstützung
                                    • Anonyme, niedrigschwellige Teilnahme
                                    • Zeitunabhängige Kommunikation
                                    • Kostenloser Zugang zu Fachwissen
                                    • Dauerhafte Archivierung von Beiträgen

                                    Proxmox und HA

                                    1 Antwort Letzte Antwort
                                    2
                                    • Meister MopperM Online
                                      Meister MopperM Online
                                      Meister Mopper
                                      schrieb am zuletzt editiert von
                                      #47

                                      @asgothian @oliverio

                                      Mittlerweile ist die KI/AI Bemühung in meinem Fall vorangeschritten und ich habe jetzt dieses Ergebnis am Laufen (sehr wahrscheinlich ist dies noch immer nicht das Ziel, aber es lüppt):

                                      // =============================================================================
                                      // PV-ENERGIEMASTER PRO v2.4 (FINAL: SMARTMETER-ANCHOR & HYBRID-LOGIC)
                                      // =============================================================================
                                      
                                      // --- 1. KONFIGURATION (Deine verifizierten IDs) ---
                                      const ID_PV_DACH_W     = 'solax.0.data.acpower';
                                      const ID_SMARTMETER_W  = 'smartmeter.0.1-0:16_7_0__255.value'; // Dein Ankerpunkt
                                      const ID_BATTERIE_W    = 'modbus.0.inputRegisters.100.842_Battery_Power_(System)'; // Victron
                                      const ID_SOC           = 'modbus.0.inputRegisters.100.843_Battery_State_of_Charge_(System)';
                                      const ID_SPEICHER_KWH  = '0_userdata.0.Energie.PV.Speichergroesse';
                                      
                                      const PATH = '0_userdata.0.Energie.PV.';
                                      
                                      // --- 2. VARIABLEN (RAM) ---
                                      let pvPower = 0, netPower = 0, batPower = 0, soc = 0;
                                      let speicherMax = getState(ID_SPEICHER_KWH).val || 0;
                                      let lastTimestamp = Date.now();
                                      
                                      // --- 3. RECHENZENTRALE ---
                                      function calculateEnergyMaster() {
                                         // Physische Bilanzierung
                                         const netzBezug   = netPower > 0 ? netPower : 0;
                                         const einspeisung = netPower < 0 ? Math.abs(netPower) : 0;
                                      
                                         // HAUSVERBRAUCH-BERECHNUNG (Die sicherste Formel)
                                         // Haus = Erzeugung + Netz (+/-) - Batterie (+/-)
                                         // Hinweis: batPower + beim Laden (Energie geht weg), - beim Entladen (Energie kommt dazu)
                                         let hausverbrauch = pvPower + netPower - batPower;
                                         if (hausverbrauch < 0) hausverbrauch = 0; 
                                      
                                         // Energie-Integration für Tagesstatistik (Wh)
                                         const now = Date.now();
                                         const durationHours = (now - lastTimestamp) / (1000 * 60 * 60);
                                         if (durationHours > 0) {
                                             const energyWh = hausverbrauch * durationHours;
                                             const currentTagesverbrauch = getState(PATH + 'Tagesverbrauch').val || 0;
                                             setState(PATH + 'Tagesverbrauch', currentTagesverbrauch + energyWh, true);
                                         }
                                         lastTimestamp = now;
                                      
                                         // DATENPUNKTE SCHREIBEN
                                         setState(PATH + 'Netzbezug', netzBezug, true);
                                         setState(PATH + 'Einspeisung', einspeisung, true);
                                         setState(PATH + 'Hausverbrauch', Math.round(hausverbrauch), true);
                                         setState(PATH + 'Autarkie', hausverbrauch > 0 ? Math.round(Math.min(100, (1 - (netzBezug / hausverbrauch)) * 100)) : 0, true);
                                         setState(PATH + 'lade_kwh', parseFloat(((speicherMax * soc) / 100).toFixed(1)), true);
                                      }
                                      
                                      // --- 4. TRIGGER ---
                                      on({id: ID_PV_DACH_W, change: "ne"}, (obj) => { pvPower = obj.state.val || 0; calculateEnergyMaster(); });
                                      on({id: ID_SMARTMETER_W, change: "ne"}, (obj) => { netPower = obj.state.val || 0; calculateEnergyMaster(); });
                                      on({id: ID_BATTERIE_W, change: "ne"}, (obj) => { batPower = obj.state.val || 0; calculateEnergyMaster(); });
                                      on({id: ID_SOC, change: "ne"}, (obj) => { soc = obj.state.val || 0; calculateEnergyMaster(); });
                                      
                                      schedule("0 0 * * *", () => { setState(PATH + 'Tagesverbrauch', 0, true); });
                                      

                                      Proxmox und HA

                                      crunchipC 1 Antwort Letzte Antwort
                                      0
                                      • Meister MopperM Meister Mopper

                                        @asgothian @oliverio

                                        Mittlerweile ist die KI/AI Bemühung in meinem Fall vorangeschritten und ich habe jetzt dieses Ergebnis am Laufen (sehr wahrscheinlich ist dies noch immer nicht das Ziel, aber es lüppt):

                                        // =============================================================================
                                        // PV-ENERGIEMASTER PRO v2.4 (FINAL: SMARTMETER-ANCHOR & HYBRID-LOGIC)
                                        // =============================================================================
                                        
                                        // --- 1. KONFIGURATION (Deine verifizierten IDs) ---
                                        const ID_PV_DACH_W     = 'solax.0.data.acpower';
                                        const ID_SMARTMETER_W  = 'smartmeter.0.1-0:16_7_0__255.value'; // Dein Ankerpunkt
                                        const ID_BATTERIE_W    = 'modbus.0.inputRegisters.100.842_Battery_Power_(System)'; // Victron
                                        const ID_SOC           = 'modbus.0.inputRegisters.100.843_Battery_State_of_Charge_(System)';
                                        const ID_SPEICHER_KWH  = '0_userdata.0.Energie.PV.Speichergroesse';
                                        
                                        const PATH = '0_userdata.0.Energie.PV.';
                                        
                                        // --- 2. VARIABLEN (RAM) ---
                                        let pvPower = 0, netPower = 0, batPower = 0, soc = 0;
                                        let speicherMax = getState(ID_SPEICHER_KWH).val || 0;
                                        let lastTimestamp = Date.now();
                                        
                                        // --- 3. RECHENZENTRALE ---
                                        function calculateEnergyMaster() {
                                           // Physische Bilanzierung
                                           const netzBezug   = netPower > 0 ? netPower : 0;
                                           const einspeisung = netPower < 0 ? Math.abs(netPower) : 0;
                                        
                                           // HAUSVERBRAUCH-BERECHNUNG (Die sicherste Formel)
                                           // Haus = Erzeugung + Netz (+/-) - Batterie (+/-)
                                           // Hinweis: batPower + beim Laden (Energie geht weg), - beim Entladen (Energie kommt dazu)
                                           let hausverbrauch = pvPower + netPower - batPower;
                                           if (hausverbrauch < 0) hausverbrauch = 0; 
                                        
                                           // Energie-Integration für Tagesstatistik (Wh)
                                           const now = Date.now();
                                           const durationHours = (now - lastTimestamp) / (1000 * 60 * 60);
                                           if (durationHours > 0) {
                                               const energyWh = hausverbrauch * durationHours;
                                               const currentTagesverbrauch = getState(PATH + 'Tagesverbrauch').val || 0;
                                               setState(PATH + 'Tagesverbrauch', currentTagesverbrauch + energyWh, true);
                                           }
                                           lastTimestamp = now;
                                        
                                           // DATENPUNKTE SCHREIBEN
                                           setState(PATH + 'Netzbezug', netzBezug, true);
                                           setState(PATH + 'Einspeisung', einspeisung, true);
                                           setState(PATH + 'Hausverbrauch', Math.round(hausverbrauch), true);
                                           setState(PATH + 'Autarkie', hausverbrauch > 0 ? Math.round(Math.min(100, (1 - (netzBezug / hausverbrauch)) * 100)) : 0, true);
                                           setState(PATH + 'lade_kwh', parseFloat(((speicherMax * soc) / 100).toFixed(1)), true);
                                        }
                                        
                                        // --- 4. TRIGGER ---
                                        on({id: ID_PV_DACH_W, change: "ne"}, (obj) => { pvPower = obj.state.val || 0; calculateEnergyMaster(); });
                                        on({id: ID_SMARTMETER_W, change: "ne"}, (obj) => { netPower = obj.state.val || 0; calculateEnergyMaster(); });
                                        on({id: ID_BATTERIE_W, change: "ne"}, (obj) => { batPower = obj.state.val || 0; calculateEnergyMaster(); });
                                        on({id: ID_SOC, change: "ne"}, (obj) => { soc = obj.state.val || 0; calculateEnergyMaster(); });
                                        
                                        schedule("0 0 * * *", () => { setState(PATH + 'Tagesverbrauch', 0, true); });
                                        

                                        crunchipC Offline
                                        crunchipC Offline
                                        crunchip
                                        Forum Testing Most Active
                                        schrieb am zuletzt editiert von
                                        #48

                                        @Meister-Mopper und weils interessant ist, was die verschiedenen KI´s so ausspucken
                                        Fehleranalyse & Ressourcen-Check
                                        Dein Script hat 1 kritischen Fehler und 3 Performance-Probleme, ist aber grundsätzlich solide aufgebaut.

                                        Kritische Fehler
                                        ❌ createState() fehlt komplett
                                        States wie Tagesverbrauch, Netzbezug etc. existieren beim ersten Start nicht → Script crasht mit "State not found". ioBroker erstellt States NICHT automatisch bei setState().

                                        Ressourcenverschwendung

                                        Problem Impact Fix
                                        getState() in Schleife Blockiert 10-50ms bei jedem Trigger (4x/Sekunde = 200ms CPU-Last!) Cache in Variable
                                        speicherMax statisch Änderungen der Speichergröße erst nach Script-Neustart Trigger hinzufügen
                                        Tagesverbrauch ohne Cache Liest State bei jedem Update (360x/Stunde) Global cachen
                                        7 setState() pro Trigger ~420 DB-Writes/Stunde bei 10s-Updates Akzeptabel, aber debounce möglich

                                        Formel-Validierung
                                        javascript
                                        hausverbrauch = pvPower + netPower - batPower
                                        Korrekt NUR WENN Victron-Konvention: batPower = +Laden (Energie geht rein), -Entladen (Energie kommt raus). Teste mit log("Bat: " + batPower) beim Laden/Entladen!
                                        ​

                                        umgestiegen von Proxmox auf Unraid

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


                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        432

                                        Online

                                        32.7k

                                        Benutzer

                                        82.3k

                                        Themen

                                        1.3m

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

                                        • Du hast noch kein Konto? Registrieren

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