Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Vergleich Solarprognosen Solarwetter und brightsky

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    Vergleich Solarprognosen Solarwetter und brightsky

    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      klassisch Most Active @ticaki last edited by

      @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

      @klassisch

      das ist influx oder history oder ... 🙂

      Ja, bei mir ist es history. History nimmt einen Teil der Arbeit ab.
      Man schreibt die Daten val und ts in den entsprechenden Datenpunkt mit setState.
      Wenn man dann die Werte updaten will, hilft history beim Löschen. Entweder einzeln oder in einem Zeitbereich.
      sendTo('history',deleteRange, id, start, end)
      https://github.com/ioBroker/ioBroker.history/blob/master/docs/en/README.md

      Man kann mit sendTo(history.0,

      1 Reply Last reply Reply Quote 0
      • K
        klassisch Most Active @ticaki last edited by

        @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

        @homoran

        kannst doch die voraussage in die history hauen und dann mit dem ist wert anzeigen?

        ja mit setState in ein entsprechendes Objekt schreiben. Val und ts kann da reingeschrieben werden und die üblichen Flags und Datenquellen.

        Wenn man dann eine neue Prognose auswirft, kann man die künftigen Daten mit Hilfe von History löschen und mit den neuen Prognosedaten beschreiben

        Wobei ich keine solar werte in der Stundenvoraussage habe... hm, hab aber net heute morgen geguckt

        Sollten doch da sein. Also doch, ja, sind doch da. solar_estimate pro Stunde. Habe ich gestern manuell ausgelesen und mit dem python Script und meinen Frickelscript verglichen.

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

          @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

          kannst doch die voraussage in die history hauen und dann mit dem ist wert anzeigen?

          das kenne/kann ich nicht mit Timestamps in der Zukunft.
          7ch schreibe immer nur aktuelle Daten in einen DP, der dann in history geloggt wird.

          K 1 Reply Last reply Reply Quote 0
          • K
            klassisch Most Active @Homoran last edited by

            @homoran sagte in Vergleich Solarprognosen Solarwetter und brightsky:

            @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

            kannst doch die voraussage in die history hauen und dann mit dem ist wert anzeigen?

            das kenne/kann ich nicht mit Timestamps in der Zukunft.

            Es geht aber so

            // Neue Werte in die History schreiben
                    myResultSteps.forEach(entry => {
                        setState(id, {
                            val: entry.val,
                            ts: entry.ts,
                            ack: true
                        });
            
            K 1 Reply Last reply Reply Quote 0
            • K
              klassisch Most Active @klassisch last edited by

              @klassisch und die json Datensätzen in den json files sehen dann so aus

                {
                  "val": 331.37224828504077,
                  "ack": 1,
                  "ts": 1758261600000,
                  "q": 0,
                  "c": "script.js.EnergyManagement.PvForecastBrightSkyBased",
                  "from": "system.adapter.javascript.0",
                  "user": "system.user.admin"
                },
              
              

              Das System kümmert sich auch darum, daß diese Files auch in die richtigen Tagesfolder geschrieben werden.
              Für den user einfacher als gedacht.
              Und @Homoran muß seine schönen Hüllkurven nicht ständig manuell anpassen 🙂

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

                @klassisch geht zwar inzwischen schon ins OT vom OT, aber egal.

                ich hab jetzt diesen DP angelegt.
                Screenshot_20250918-123009_Firefox.jpg
                den werde ich wahrscheinlich historisiwren müssen, oder?

                und dann mit sendto füttern?

                muss mal dein js verdauen und in Blockly transformieren, damit ich das auch später noch nachvollziehen und ggf. woanders einsetzen kann

                EDIT:
                Bild nachgeliefert

                K 1 Reply Last reply Reply Quote 0
                • K
                  klassisch Most Active @Homoran last edited by klassisch

                  @homoran sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                  @klassisch geht zwar inzwischen schon ins OT vom OT, aber egal.

                  ich hab jetzt diesen DP angelegt.
                  Gut

                  den werde ich wahrscheinlich historisieren müssen, oder?

                  Ja, history ankreuzen, damit history sich drum kümmert

                  und dann mit sendto füttern?

                  Ganz normal mit setState, wie oben gezeigt

                  muss mal dein js verdauen und in Blockly transformieren, damit ich das auch später noch nachvollziehen und ggf. woanders einsetzen kann

                  Na, wer weiß. Vielleicht kann das auch mal der Adapter?

                  Edit:
                  sendTo braucht man, wenn history Datensätze löschen soll.

                  Edit2:

                  // Neue Werte in die History schreiben
                  
                          myResultSteps.forEach(entry => {
                  
                              setState(id, {
                  
                                  val: entry.val,
                  
                                  ts: entry.ts,
                  
                                  ack: true
                  
                              });
                  

                  myResultSteps ist ein array mit den einzelnen Wertepaaren (val, ts) in der Perlenkette.

                  forEach nudelt die von vorne bis hinten durch

                  Und steState gibt die weg ans Fremework und durch das history-Kreuzchen kümmert sich history drum und organsiert die files.
                  So stelle ich mir das vor.

                  Homoran 1 Reply Last reply Reply Quote 1
                  • K
                    klassisch Most Active last edited by

                    Und warum machen wir die Prognosen? Z.B. für das netzdienliche Einspeisen.
                    Unser Netzbetreiber zeigt die aktuelle (geschätzte??) Situation in unserem Ort

                    546dd734-be23-4efb-bbfd-1f4d834e7221-grafik.png

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

                      @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                      Unser Netzbetreiber zeigt die aktuelle (geschätzte??) Situation in unserem Ort

                      ooh, dann weisst du sogar was der will.
                      muss mal suchen, ob es so etwas hier auch gibt.

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

                        @klassisch sorry, Bild fehlte, hab's editiert

                        for each ist klar, var id = DatenpunktID hinzufügen ??

                        K 1 Reply Last reply Reply Quote 0
                        • K
                          klassisch Most Active @Homoran last edited by klassisch

                          @homoran id ist der Datenpunkt. z.B. '0_userdata.0.power.pvFrDCEnergy.SolarForecastPowerSteps'

                          Edit: Tricky wird es, wenn neue Forcast-Werte kommen. Denn dann will man die alten (schlechteren) raus haben und muß löschen bevor man neue reinschreibt. Dabei hilft sendTo(history(id,'deleteRange' ...

                          T Homoran 2 Replies Last reply Reply Quote 1
                          • T
                            ticaki Developer @klassisch last edited by

                            @klassisch

                            man kanns aber auch einfach woanders hin spiegeln 🙂

                            K 1 Reply Last reply Reply Quote 0
                            • K
                              klassisch Most Active @ticaki last edited by

                              @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                              @klassisch

                              man kanns aber auch einfach woanders hin spiegeln 🙂

                              Das habe ich nicht verstanden.
                              Einen anderen Datenpunkt nehmen? Also einen Datenpunkt für die 05:00 und einen anderen für die 08:00 Prognose?
                              Wenn man 24 oder 48h forecast hat, wird man ums löschen kaum herumkommen.

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

                                @klassisch ja, so hab ich das verstanden und versucht
                                Screenshot_20250918-134108_Firefox.jpg

                                ich denke, den Rest muss ich in dem Textbaustein zusammenbauen.

                                Der Code hat zumindest schon eine leichte Ähnlichkeit

                                var id;
                                
                                
                                id = 'Messwerte.0.Solaranlage.Prognosen.clearSkyHourly';
                                sendTo('history.0', 'send', {
                                  'parameter': '' + String(id),
                                });
                                

                                EDIT:
                                manchmal muss man erst posten um das Zahnrad zu sehen
                                Screenshot_20250918-134546_Firefox.jpg

                                aber so richtig passt es auch nicht

                                var id;
                                
                                
                                id = 'Messwerte.0.Solaranlage.Prognosen.clearSkyHourly';
                                sendTo('history.0', 'send', {
                                  'id': id,
                                  'val': '',
                                  'ts': '',
                                  'ack': '',
                                });
                                
                                K 1 Reply Last reply Reply Quote 0
                                • K
                                  klassisch Most Active @Homoran last edited by

                                  @homoran das einfache Speichern geht zumindest im Skript mit setState.
                                  Blockly kenne ich nicht

                                  1 Reply Last reply Reply Quote 0
                                  • T
                                    ticaki Developer last edited by ticaki

                                    Mal was kompliziertes - hab keine Lust das in den Adapter einzubauen

                                    Klont einen Datenpunkt oder ein Verzeichnis (sourceDir) in das Verzeichnis (targetDir) und schreibt alle Datenpunkte mit dem Zeitstempel relativ zum tigger zeitpunkt (ahead)

                                    const targetDir = '0_userdata.0.brightsky'
                                    const sourceDir = 'brightsky.0.hourly.05'
                                    const ahead = 60 * 1 // 1 Stunde
                                    
                                    // ---
                                    // code
                                    // ---
                                    
                                    extendObject(targetDir,{type: "channel", common:{name:sourceDir}});
                                    
                                    const r = new RegExp(`^${sourceDir.replace(/[\\^$.*+?()[]{}|/]/g, '\\$&')}.*`);
                                    on({id:r, change: 'any'}, async (dp) => {
                                        const end = dp.id.replace(`${sourceDir}.`,'');
                                        const tDp = `${targetDir}.${end}`
                                        if (!existsObject(tDp)) {
                                            const obj = getObject(dp.id);
                                            const newObj = {
                                                type: obj.type,
                                                common: obj.common,
                                                native: {}
                                            }
                                            await extendObjectAsync(tDp, newObj as any)
                                            await sleep(50);
                                        }
                                        const ts = Date.now() + ahead * 60 * 1000
                                        setState(tDp,{val: dp.state.val, from: dp.state.from, ack:dp.state.ack, ts: ts, lc:ts});
                                        log(`write state ${dp.id} to ${tDp} with val: ${dp.state.val}`)
                                    })
                                    

                                    Das log am Ende kann man auskommentieren - das macht nur was, wenn die datenpunkte triggern - außer den channel erstellen wo es rein soll.

                                    Hoffe hab den bedarf richtig verstanden... na wenn nicht, das kann ich bestimmt mal selbst gebrauchen.

                                    EDIT: Muss setObject in den Einstellungen aktiviert sein.

                                    1 Reply Last reply Reply Quote 0
                                    • K
                                      klassisch Most Active last edited by

                                      Frage an den Meister @ticaki : In der Konfig des Adapters kann man ja z.B. die Anzahl der forecast Stunden eingeben. Kann man diese Zahl irgendwo aus der Datenstruktur auslesen oder ermitteln?

                                      Homoran T 2 Replies Last reply Reply Quote 0
                                      • Homoran
                                        Homoran Global Moderator Administrators @klassisch last edited by

                                        @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                        Kann man diese Zahl irgendwo aus der Datenstruktur auslesen oder ermitteln?

                                        ich hatte gestern abend noch parallel einen Thread wegen Blockly aufgemacht.
                                        Eine ähnliche Frage habe ich gerade da gestellt.
                                        https://forum.iobroker.net/post/1295083

                                        nicht wörtlich, hat aber das gleiche Ziel.

                                        1 Reply Last reply Reply Quote 1
                                        • T
                                          ticaki Developer @klassisch last edited by

                                          @klassisch

                                          Ja, die steht in getObject(system.adapter.brightsky.0) und dort im json unter native.hours.

                                          K 1 Reply Last reply Reply Quote 2
                                          • K
                                            klassisch Most Active @ticaki last edited by

                                            @ticaki Vielen Dank, ich habe es gefunden

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

                                            Support us

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

                                            816
                                            Online

                                            32.1k
                                            Users

                                            80.7k
                                            Topics

                                            1.3m
                                            Posts

                                            7
                                            218
                                            5101
                                            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