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. Entwicklung
  4. FRONIUS Adapter Entwicklung eingestellt?

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.4k

FRONIUS Adapter Entwicklung eingestellt?

Geplant Angeheftet Gesperrt Verschoben Entwicklung
fronius
440 Beiträge 44 Kommentatoren 119.6k Aufrufe 45 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.
  • J JJPhoenix79

    Hallo zusammen,

    ich bin nun schon echt lange am Lesen, was das Thema Solaarweb/Fronius usw angeht. Im IOB habe ich die beiden adapter auch schon am laufen. und teilweise monitore ich die Werte auch schon per DB und Grafana.

    Bei mir läuft eine 15KW-Anlage, mit folgenden Komponenten:
    Fronius Symo GEN24 10.0
    Fronius Symo 5.0-3-M
    Batterie: BYD Premium HVS/M 13,8kwh
    Fronius Smart Meter (RTU)

    Für mich ein paar Verständnisfragen:
    Wie bekomme ich die Gesamtwerte beider WR ohne Solarweb-Adapter ausgelesen, da es ja zwei unterschiedliche IPs sind?
    Geht das nur über MODBUS?
    Wenn ja, was benötige ich da für Hardware?

    Grüße und Danke schon einmal im Vorraus.

    Jörg

    C Offline
    C Offline
    c1olli
    schrieb am zuletzt editiert von
    #426

    @jjphoenix79
    Mach einfach zwei Instanzen auf, jeweils mit den IPs der WR.

    Gruß
    Olli

    1 Antwort Letzte Antwort
    0
    • J JJPhoenix79

      Hallo zusammen,

      ich bin nun schon echt lange am Lesen, was das Thema Solaarweb/Fronius usw angeht. Im IOB habe ich die beiden adapter auch schon am laufen. und teilweise monitore ich die Werte auch schon per DB und Grafana.

      Bei mir läuft eine 15KW-Anlage, mit folgenden Komponenten:
      Fronius Symo GEN24 10.0
      Fronius Symo 5.0-3-M
      Batterie: BYD Premium HVS/M 13,8kwh
      Fronius Smart Meter (RTU)

      Für mich ein paar Verständnisfragen:
      Wie bekomme ich die Gesamtwerte beider WR ohne Solarweb-Adapter ausgelesen, da es ja zwei unterschiedliche IPs sind?
      Geht das nur über MODBUS?
      Wenn ja, was benötige ich da für Hardware?

      Grüße und Danke schon einmal im Vorraus.

      Jörg

      mcm1957M Online
      mcm1957M Online
      mcm1957
      schrieb am zuletzt editiert von
      #427

      @jjphoenix79

      Dazu gab es mal einen Feature request (https://github.com/iobroker-community-adapters/ioBroker.fronius/issues/63)

      @nkleber hat dazu geantwortet:

      One instance shall always relate to 1 IP address. Multiple inverters with 1 datamanager are working properly.
      

      Ergo wenn du einen DataManager hast sollte diese beide WR erkennen.
      Wenn du 2 DataManager hast, dann brauchst du 2 Instanzen.

      Falls weitere Fragen existieren oder Diskussionbedraf, bitte ping @nkleber direkt an. Ich kann hier leider nicht mehr beigtragen da ich zur Zeot mnicht mal einen Fronius besitzt bzw. drauf ZUgriff habe.

      McM1957

      Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
      Support Repositoryverwaltung.

      Wer Danke sagen will, kann nen Kaffee spendieren: https://paypal.me/mcm1957atiobroker

      LESEN - gute Forenbeitrage

      J 1 Antwort Letzte Antwort
      0
      • JB_SullivanJ JB_Sullivan

        @io2023 Das Solarweb hängt gewöhnlich um einige Minuten hinterher. Also wenn du die DP`s vergleichen willst, dann mit dem WR eigenen Webinterface - da sollte es Deckungsgleich sein. Das Solarweb ist keine gute Referenz - schon gar nicht, wenn du auch noch ein Auge auf die Erträge haben willst.

        63032f6d-6c58-485c-ba3c-4aa2cceccd20-image.png

        I Offline
        I Offline
        io2023
        schrieb am zuletzt editiert von
        #428

        @jb_sullivan
        Danke für den Hinweis. Jetzt passen die Werte auch.

        1 Antwort Letzte Antwort
        0
        • S Strobelix

          @friedi100 bei den neuen Gen24 Auslieferungen ist die Solar-API abgeschalten und muss im Wechselrichter aktiviert werden

          IMG_5910.jpeg

          F Offline
          F Offline
          friedi100
          schrieb am zuletzt editiert von
          #429

          @strobelix
          Vielen Dank für deine Hilfe.
          Jetzt funktioniert alles perfekt.

          1 Antwort Letzte Antwort
          0
          • mcm1957M mcm1957

            @jjphoenix79

            Dazu gab es mal einen Feature request (https://github.com/iobroker-community-adapters/ioBroker.fronius/issues/63)

            @nkleber hat dazu geantwortet:

            One instance shall always relate to 1 IP address. Multiple inverters with 1 datamanager are working properly.
            

            Ergo wenn du einen DataManager hast sollte diese beide WR erkennen.
            Wenn du 2 DataManager hast, dann brauchst du 2 Instanzen.

            Falls weitere Fragen existieren oder Diskussionbedraf, bitte ping @nkleber direkt an. Ich kann hier leider nicht mehr beigtragen da ich zur Zeot mnicht mal einen Fronius besitzt bzw. drauf ZUgriff habe.

            McM1957

            J Offline
            J Offline
            JJPhoenix79
            schrieb am zuletzt editiert von
            #430

            @mcm57
            So, unsere Anlage ist nun auch wieder am öffentlichen Netz und ich kann ich weiter mit dem Thema beschäftigen.

            Nach langem hin und her, auch mit dem Fronius Support, sehe ich die Geräte im Solar web wieder.

            434f8dcd-24b8-4464-b8d9-049705be8516-grafik.png

            Leider finde ich im IOB des Fronius Smartmeters nicht alle Werte, die ich gerne auslesen/monitoren möchte.
            dfced526-1aad-4efe-9786-a168ec3d4c18-grafik.png

            zum Beispiel, was gerade verbraucht wird oder was produziert wird. Schön wäre es wirklich aus einer Datenquelle alles zu bekommen.

            nkleberN da_WoodyD 2 Antworten Letzte Antwort
            0
            • J JJPhoenix79

              @mcm57
              So, unsere Anlage ist nun auch wieder am öffentlichen Netz und ich kann ich weiter mit dem Thema beschäftigen.

              Nach langem hin und her, auch mit dem Fronius Support, sehe ich die Geräte im Solar web wieder.

              434f8dcd-24b8-4464-b8d9-049705be8516-grafik.png

              Leider finde ich im IOB des Fronius Smartmeters nicht alle Werte, die ich gerne auslesen/monitoren möchte.
              dfced526-1aad-4efe-9786-a168ec3d4c18-grafik.png

              zum Beispiel, was gerade verbraucht wird oder was produziert wird. Schön wäre es wirklich aus einer Datenquelle alles zu bekommen.

              nkleberN Offline
              nkleberN Offline
              nkleber
              schrieb am zuletzt editiert von
              #431

              @jjphoenix79 Die Daten kannst du nur aus der differenz zwischen WR und Smartmeter rechnen. Diese werden nicht über die API zur verfügung gestellt. Das Solarweb portal berechnet diese Daten auch selbst

              gruß Norbert

              1 Antwort Letzte Antwort
              1
              • J JJPhoenix79

                @mcm57
                So, unsere Anlage ist nun auch wieder am öffentlichen Netz und ich kann ich weiter mit dem Thema beschäftigen.

                Nach langem hin und her, auch mit dem Fronius Support, sehe ich die Geräte im Solar web wieder.

                434f8dcd-24b8-4464-b8d9-049705be8516-grafik.png

                Leider finde ich im IOB des Fronius Smartmeters nicht alle Werte, die ich gerne auslesen/monitoren möchte.
                dfced526-1aad-4efe-9786-a168ec3d4c18-grafik.png

                zum Beispiel, was gerade verbraucht wird oder was produziert wird. Schön wäre es wirklich aus einer Datenquelle alles zu bekommen.

                da_WoodyD Offline
                da_WoodyD Offline
                da_Woody
                schrieb am zuletzt editiert von
                #432

                @jjphoenix79
                1e80bb4a-7868-4fba-95f5-1e470cf9084b-grafik.png

                gruß vom Woody
                HAPPINESS is not a DESTINATION, it's a WAY of LIFE!

                1 Antwort Letzte Antwort
                0
                • J Offline
                  J Offline
                  JJPhoenix79
                  schrieb am zuletzt editiert von
                  #433

                  @nkleber said in FRONIUS Adapter Entwicklung eingestellt?:

                  @jjphoenix79 Die Daten kannst du nur aus der differenz zwischen WR und Smartmeter rechnen. Diese werden nicht über die API zur verfügung gestellt. Das Solarweb portal berechnet diese Daten auch selbst

                  gruß Norbert

                  @da_woody said in FRONIUS Adapter Entwicklung eingestellt?:

                  @jjphoenix79
                  1e80bb4a-7868-4fba-95f5-1e470cf9084b-grafik.png

                  Ok, danke euch beider erstmal. Da ich mich auch parallel noch mit dem Modbus beschäftige, warte ich hiermit noch etwas.

                  Möchte gern ohne Cloud, die entsprechenden Daten meiner beider WR ink des SM haben, wenn das denn damit geht.

                  jmeister79J 1 Antwort Letzte Antwort
                  0
                  • J JJPhoenix79

                    @nkleber said in FRONIUS Adapter Entwicklung eingestellt?:

                    @jjphoenix79 Die Daten kannst du nur aus der differenz zwischen WR und Smartmeter rechnen. Diese werden nicht über die API zur verfügung gestellt. Das Solarweb portal berechnet diese Daten auch selbst

                    gruß Norbert

                    @da_woody said in FRONIUS Adapter Entwicklung eingestellt?:

                    @jjphoenix79
                    1e80bb4a-7868-4fba-95f5-1e470cf9084b-grafik.png

                    Ok, danke euch beider erstmal. Da ich mich auch parallel noch mit dem Modbus beschäftige, warte ich hiermit noch etwas.

                    Möchte gern ohne Cloud, die entsprechenden Daten meiner beider WR ink des SM haben, wenn das denn damit geht.

                    jmeister79J Offline
                    jmeister79J Offline
                    jmeister79
                    schrieb am zuletzt editiert von
                    #434

                    @jjphoenix79 Die Berechnungen machste dann einfach im iobroker selber, ist kinderleicht.

                    1 Antwort Letzte Antwort
                    0
                    • AlenA Offline
                      AlenA Offline
                      Alen
                      schrieb am zuletzt editiert von
                      #435

                      Gibt es in der neuen 2er API eigentlich einen Datenpunkt mit dem aktuellen Tagesverbrauch (Energie) ? Ich konnte nichts finden. Falls nicht, wie könnte man diesem am besten selbst berechnen?

                      Gruss
                      Alen

                      jmeister79J 1 Antwort Letzte Antwort
                      0
                      • AlenA Alen

                        Gibt es in der neuen 2er API eigentlich einen Datenpunkt mit dem aktuellen Tagesverbrauch (Energie) ? Ich konnte nichts finden. Falls nicht, wie könnte man diesem am besten selbst berechnen?

                        Gruss
                        Alen

                        jmeister79J Offline
                        jmeister79J Offline
                        jmeister79
                        schrieb am zuletzt editiert von
                        #436

                        @alen hab nix gesehen aber ich erfasse alles selber.

                        ich mach das so:

                        Ich machd as mit nem Array aus Sensoren,. ist aber analog zu einzelwerten:

                        hier:
                        "Fronius","WH","javascript.0.Zaehler.PVZaehlerFronius_abs","TDWMY"

                        TWDMY heißt täglich wöchentlich usw... wenn Interesse am ganzen script besteht melde dich

                        on({id: "fronius.0.inverter.1.TOTAL_ENERGY", change: 'ne'}, function (obj) {
                        //schedule("* * * * *", function () {
                            setState("javascript.0.Verbrauch.Fronius_daily_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_daily_last").val)*1000)/1000, true);
                            setState("javascript.0.Verbrauch.Fronius_weekly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_weekly_last").val)*1000)/1000, true);
                            setState("javascript.0.Verbrauch.Fronius_monthly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_monthly_last").val)*1000)/1000, true);
                            setState("javascript.0.Verbrauch.Fronius_yearly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_yearly_last").val)*1000)/1000, true);
                        });
                        
                        schedule("57 23 * * *", function () {
                            for (var n = 0; n < ArrayOfSensors.length; n+=4) { // for every third    
                                if (ArrayOfSensors[n+3].includes('D') ){   
                                    var actvalue = getState(ArrayOfSensors[n+2]).val;
                                    var lastvalue = getState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_last').val;
                                    var [verbrauch, letzter] = intervallVerbrauch(actvalue, lastvalue);
                                    setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily',verbrauch, true);    //Summe des Tages
                                    setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_last', letzter, true); //letzter Zählerstand
                                    setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_actual', 0, true); //
                                }
                            }
                        
                        function intervallVerbrauch(totalAct, totalLast){
                            var consumption = Math.round ((totalAct - totalLast)*100)/100;
                            totalLast = Math.round (totalAct*100)/100;
                            return [consumption, totalLast]; 
                        }
                        
                        NegaleinN 1 Antwort Letzte Antwort
                        0
                        • jmeister79J jmeister79

                          @alen hab nix gesehen aber ich erfasse alles selber.

                          ich mach das so:

                          Ich machd as mit nem Array aus Sensoren,. ist aber analog zu einzelwerten:

                          hier:
                          "Fronius","WH","javascript.0.Zaehler.PVZaehlerFronius_abs","TDWMY"

                          TWDMY heißt täglich wöchentlich usw... wenn Interesse am ganzen script besteht melde dich

                          on({id: "fronius.0.inverter.1.TOTAL_ENERGY", change: 'ne'}, function (obj) {
                          //schedule("* * * * *", function () {
                              setState("javascript.0.Verbrauch.Fronius_daily_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_daily_last").val)*1000)/1000, true);
                              setState("javascript.0.Verbrauch.Fronius_weekly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_weekly_last").val)*1000)/1000, true);
                              setState("javascript.0.Verbrauch.Fronius_monthly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_monthly_last").val)*1000)/1000, true);
                              setState("javascript.0.Verbrauch.Fronius_yearly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_yearly_last").val)*1000)/1000, true);
                          });
                          
                          schedule("57 23 * * *", function () {
                              for (var n = 0; n < ArrayOfSensors.length; n+=4) { // for every third    
                                  if (ArrayOfSensors[n+3].includes('D') ){   
                                      var actvalue = getState(ArrayOfSensors[n+2]).val;
                                      var lastvalue = getState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_last').val;
                                      var [verbrauch, letzter] = intervallVerbrauch(actvalue, lastvalue);
                                      setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily',verbrauch, true);    //Summe des Tages
                                      setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_last', letzter, true); //letzter Zählerstand
                                      setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_actual', 0, true); //
                                  }
                              }
                          
                          function intervallVerbrauch(totalAct, totalLast){
                              var consumption = Math.round ((totalAct - totalLast)*100)/100;
                              totalLast = Math.round (totalAct*100)/100;
                              return [consumption, totalLast]; 
                          }
                          
                          NegaleinN Offline
                          NegaleinN Offline
                          Negalein
                          Global Moderator
                          schrieb am zuletzt editiert von
                          #437

                          @jmeister79 sagte in FRONIUS Adapter Entwicklung eingestellt?:

                          TWDMY heißt täglich wöchentlich usw... wenn Interesse am ganzen script besteht melde dich

                          hätte Interesse :)

                          ° Node.js: 20.17.0 NPM: 10.8.2
                          ° Proxmox, Ubuntu 22.04.3 LTS
                          ° Fixer ---> iob fix

                          jmeister79J 1 Antwort Letzte Antwort
                          0
                          • NegaleinN Negalein

                            @jmeister79 sagte in FRONIUS Adapter Entwicklung eingestellt?:

                            TWDMY heißt täglich wöchentlich usw... wenn Interesse am ganzen script besteht melde dich

                            hätte Interesse :)

                            jmeister79J Offline
                            jmeister79J Offline
                            jmeister79
                            schrieb am zuletzt editiert von jmeister79
                            #438

                            @negalein

                            Bitte.
                            Ist auf meine Bedürfnisse angepasst sollte aber grundsätzlich so funktionieren.

                            Es werden am Anfang für jeden Sensor die benötigten Punkte angelegt und in History aktiviert.

                            ps.: Kommentieren war noch nie mein Ding

                            var hist = {
                                 "history.0": {
                                    "enabled": true,
                                    "changesOnly": true,
                                    "debounce": 10000,
                                    "maxLength": 360,
                                    "retention": 31536000
                                 }
                            };
                            
                            
                            
                            //Sensor Array aller erfassten Geräte (Diese sind ebreits vorhanden)
                            // "Name","Einheit","Quelle","MDW"
                            //T:today
                            //m: minutelly
                            //D: Daily
                            //W: Weekly
                            //M: Monthly
                            //Y: Yearly
                            var ArrayOfSensors = [
                                "Stromzaehler","kWh","javascript.0.Zaehler.StromZaehler_abs","TmDWMY",         // "javascript.0.Zaehler.StromZaehler_abs"
                                "TauchpumpeSicker","kWh","fritzdect.0.DECT_xxxxxxxx.energy","mDW",
                                "TauchpumpeRegen","kWh","fritzdect.0.DECT_xxxxxxxx.energy","mDW",
                                "TauchpumpeLager","kWh","fritzdect.0.DECT_xxxxxxxx.energy","mDW",
                                "TauchpumpeHeiz","kWh","fritzdect.0.DECT_xxxxxxxx","mDW",
                                "TauchpumpeWerkstatt","kWh","fritzdect.0.DECT_xxxxxxxx.energy","mDW",
                                "Entfeuchter","kWh","zigbee.0.xxxxxxxx.consumption","TmDW",  
                                "Gaszaehler","m³","javascript.0.Zaehler.GasZaehler_abs","TmDWMY",                      // "javascript.0.Zaehler.GasZaehler_abs"
                                "Heizung","kWh","ems-esp.0.heatSources.energyMonitoring.consumption","DW",
                                "Brennerstarts","","ems-esp.0.heatSources.numberOfStarts","TDW",
                                "Photovoltaik","kWH","javascript.0.Zaehler.PVZaehler_abs","TmDWMY",
                                "Fronius","WH","javascript.0.Zaehler.PVZaehlerFronius_abs","TDWMY"
                                ];
                            
                                
                            var historyObjArray = [];
                            //Alle Datenpunkte kreieren
                            for (var n = 0; n < ArrayOfSensors.length; n+=4) { // for every second
                                if (ArrayOfSensors[n+3].includes('T') ){
                                    createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_actual', 0.0, {name: "diff today"+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});    
                                }
                                if (ArrayOfSensors[n+3].includes('m') ){
                                    createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_600s', 0.0, {name: "diff last 10min "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                    createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_600s_last', 0.0, {name: "abs last 10 min "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                    historyObjArray.push('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_600s'); //Ins History Array
                                }
                                if (ArrayOfSensors[n+3].includes('D') ){
                                    createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily', 0.0, {name: "diff last day "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                    createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_last', 0.0, {name: "abs last day "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                    historyObjArray.push('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily');//Ins History Array
                                }
                                if (ArrayOfSensors[n+3].includes('W') ){    
                                    createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly', 0.0, {name: "diff last week "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                    createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly_last', 0.0, {name: "abs last Week "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                    createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly_actual', 0.0, {name: "abs last Week "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                    historyObjArray.push('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly');//Ins History Array
                                }
                                if (ArrayOfSensors[n+3].includes('M') ){
                                    createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_monthly', 0.0, {name: "diff last month "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                    createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_monthly_last', 0.0, {name: "abs last month "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                    createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_monthly_actual', 0.0, {name: "abs last Week "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                    historyObjArray.push('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_monthly');//Ins History Array
                                }
                                if (ArrayOfSensors[n+3].includes('Y') ){    
                                    createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_yearly', 0.0, {name: "diff last year "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                    createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_yearly_last', 0.0, {name: "abs last year "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                    createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_yearly_actual', 0.0, {name: "diff actual yeat "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                    historyObjArray.push('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_yearly');//Ins History Array
                                }
                            }
                            
                            //History aktivieren für daily, weekly, monthly, yearly
                            for (var n = 0; n < historyObjArray.length; n++) { // for every second
                               // log (historyObjArray[n]);
                            
                                sendTo('history.0', 'enableHistory', {
                                    id: historyObjArray[n],
                                    options: {
                                        changesOnly:  true,
                                        debounce:     0,
                                        retention:    0,
                                        maxLength:    960,
                                        changesMinDelta: 0,
                                        aliasId: ''
                                    }
                                }, function (result) {
                                    if (result.error) {
                                        console.log(result.error);
                                    }
                                    if (result.success) {
                            
                                        // successfully enabled
                            
                                    }
                                });
                            }
                            
                            
                            
                            //erfassen der Sensorwerte auf today und actual year
                            //diese sensoren sollen immer live werte zeigen, dafür war das "T" gedacht
                            //Diese Kolelgen müssen manuell programmeirt werden, da ich noch nicht weiß wie ich aus einem array triggern kann. evtl mit concat im on?
                            //Hier evtl auf alle 10s umsteigen?
                            on({id: "javascript.0.Zaehler.StromZaehler_abs", change: 'ne'}, function (obj) {
                                setState("javascript.0.Verbrauch.Stromzaehler_daily_actual", Math.round ((getState("javascript.0.Zaehler.StromZaehler_abs").val - getState("javascript.0.Verbrauch.Stromzaehler_daily_last").val)*100)/100, true);
                                setState("javascript.0.Verbrauch.Stromzaehler_weekly_actual", Math.round ((getState("javascript.0.Zaehler.StromZaehler_abs").val - getState("javascript.0.Verbrauch.Stromzaehler_weekly_last").val)*100)/100, true);
                                setState("javascript.0.Verbrauch.Stromzaehler_yearly_actual", Math.round ((getState("javascript.0.Zaehler.StromZaehler_abs").val - getState("javascript.0.Verbrauch.Stromzaehler_yearly_last").val)*100)/100, true);
                            });
                            on({id: "javascript.0.Zaehler.GasZaehler_abs", change: 'ne'}, function (obj) {
                                setState("javascript.0.Verbrauch.Gaszaehler_daily_actual", Math.round ((getState("javascript.0.Zaehler.GasZaehler_abs").val - getState("javascript.0.Verbrauch.Gaszaehler_daily_last").val)*1000)/1000, true);
                                setState("javascript.0.Verbrauch.Gaszaehler_weekly_actual", Math.round ((getState("javascript.0.Zaehler.GasZaehler_abs").val - getState("javascript.0.Verbrauch.Gaszaehler_weekly_last").val)*1000)/1000, true);
                                setState("javascript.0.Verbrauch.Gaszaehler_yearly_actual", Math.round ((getState("javascript.0.Zaehler.GasZaehler_abs").val - getState("javascript.0.Verbrauch.Gaszaehler_yearly_last").val)*1000)/1000, true);
                            });
                            on({id: "javascript.0.Zaehler.PVZaehler_abs", change: 'ne'}, function (obj) {
                                setState("javascript.0.Verbrauch.Photovoltaik_daily_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehler_abs").val - getState("javascript.0.Verbrauch.Photovoltaik_daily_last").val)*1000)/1000, true);
                                setState("javascript.0.Verbrauch.Photovoltaik_weekly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehler_abs").val - getState("javascript.0.Verbrauch.Photovoltaik_weekly_last").val)*1000)/1000, true);
                                setState("javascript.0.Verbrauch.Photovoltaik_monthly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehler_abs").val - getState("javascript.0.Verbrauch.Photovoltaik_monthly_last").val)*1000)/1000, true);
                                setState("javascript.0.Verbrauch.Photovoltaik_yearly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehler_abs").val - getState("javascript.0.Verbrauch.Photovoltaik_yearly_last").val)*1000)/1000, true);
                            });
                            on({id: "fronius.0.inverter.1.TOTAL_ENERGY", change: 'ne'}, function (obj) {
                            //schedule("* * * * *", function () {
                                setState("javascript.0.Verbrauch.Fronius_daily_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_daily_last").val)*1000)/1000, true);
                                setState("javascript.0.Verbrauch.Fronius_weekly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_weekly_last").val)*1000)/1000, true);
                                setState("javascript.0.Verbrauch.Fronius_monthly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_monthly_last").val)*1000)/1000, true);
                                setState("javascript.0.Verbrauch.Fronius_yearly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_yearly_last").val)*1000)/1000, true);
                            });
                            
                            
                            //600s Erfassung
                            schedule("*/10 * * * *", function () {
                                for (var n = 0; n < ArrayOfSensors.length; n+=4) { // for every third
                                    if (ArrayOfSensors[n+3].includes('m') ){       
                                        var actvalue = getState(ArrayOfSensors[n+2]).val;
                                        var lastvalue = getState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_600s_last').val;
                                        var [verbrauch, letzter] = intervallVerbrauch(actvalue, lastvalue);
                                        setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_600s',verbrauch, true);
                                        setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_600s_last', letzter, true);
                                    }
                                }
                            });
                            
                            //24h erfassung
                            schedule("57 23 * * *", function () {
                                for (var n = 0; n < ArrayOfSensors.length; n+=4) { // for every third    
                                    if (ArrayOfSensors[n+3].includes('D') ){   
                                        var actvalue = getState(ArrayOfSensors[n+2]).val;
                                        var lastvalue = getState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_last').val;
                                        var [verbrauch, letzter] = intervallVerbrauch(actvalue, lastvalue);
                                        setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily',verbrauch, true);
                                        setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_last', letzter, true);
                                        setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_actual', 0, true);
                                    }
                                }
                                var WirkGrad = 0;
                                var Zustandszahl = getState("javascript.0.Parameter.ZustandszahlGas").val;
                                var HeizLeistung = getState("javascript.0.Heizung.Verbrauch.actualPower.Yesterday").val;
                                var GasVerbrauch = Math.round ((getState("javascript.0.Zaehler.GasZaehler_abs").val - getState("javascript.0.Gaszaehler_Daily_last").val)*1000)/1000
                            
                                WirkGrad = HeizLeistung / (GasVerbrauch * Zustandszahl); 
                                setState("javascript.0.Gas.errWirkungsgrad", WirkGrad);
                            });
                            
                            //Wöchentlich Montags 00:00
                            schedule("0 0 * * 1", function () {
                                for (var n = 0; n < ArrayOfSensors.length; n+=4) { // for every third
                                    if (ArrayOfSensors[n+3].includes('W') ){   //nur wenn wöchentlich aktiviert ist
                                        var actvalue = getState(ArrayOfSensors[n+2]).val;
                                        var lastvalue = getState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly_last').val;
                                        var [verbrauch, letzter] = intervallVerbrauch(actvalue, lastvalue);
                                        setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly',verbrauch, true);
                                        setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly_last', letzter, true);
                                        setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly_actual', 0, true);
                                    }
                                }
                            });
                            
                            
                            //Monatlich 01. 00:00
                            schedule("1 0 1 * *", function () {
                                for (var n = 0; n < ArrayOfSensors.length; n+=4) { // for every third
                                    if (ArrayOfSensors[n+3].includes('M') ){   //nur wenn Monatlich aktiviert ist
                                        var actvalue = getState(ArrayOfSensors[n+2]).val;
                                        var lastvalue = getState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_monthly_last').val;
                                        var [verbrauch, letzter] = intervallVerbrauch(actvalue, lastvalue);
                                        setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_monthly',verbrauch, true);
                                        setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_monthly_last', letzter, true);
                                    }
                                }
                            });
                            
                            
                            //Jährlich an neujahr  00:01
                            schedule("1 0 1 1 *", function () {
                                log('los gehts');
                                for (var n = 0; n < ArrayOfSensors.length; n+=4) { // for every third
                                    if (ArrayOfSensors[n+3].includes('Y') ){   //nur wenn wöchentlich aktiviert ist
                                        var actvalue = getState(ArrayOfSensors[n+2]).val;
                                        var lastvalue = getState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_yearly_last').val;
                                        var [verbrauch, letzter] = intervallVerbrauch(actvalue, lastvalue);
                                        setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_yearly',verbrauch, true);
                                        setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_yearly_last', letzter, true);
                                        log(ArrayOfSensors[n])
                                    }
                                }
                            });
                            
                            function intervallVerbrauch(totalAct, totalLast){
                                var consumption = Math.round ((totalAct - totalLast)*100)/100;
                                totalLast = Math.round (totalAct*100)/100;
                                return [consumption, totalLast]; 
                            }
                            
                            
                            
                            
                            
                            
                            
                            
                            AlenA 1 Antwort Letzte Antwort
                            0
                            • jmeister79J jmeister79

                              @negalein

                              Bitte.
                              Ist auf meine Bedürfnisse angepasst sollte aber grundsätzlich so funktionieren.

                              Es werden am Anfang für jeden Sensor die benötigten Punkte angelegt und in History aktiviert.

                              ps.: Kommentieren war noch nie mein Ding

                              var hist = {
                                   "history.0": {
                                      "enabled": true,
                                      "changesOnly": true,
                                      "debounce": 10000,
                                      "maxLength": 360,
                                      "retention": 31536000
                                   }
                              };
                              
                              
                              
                              //Sensor Array aller erfassten Geräte (Diese sind ebreits vorhanden)
                              // "Name","Einheit","Quelle","MDW"
                              //T:today
                              //m: minutelly
                              //D: Daily
                              //W: Weekly
                              //M: Monthly
                              //Y: Yearly
                              var ArrayOfSensors = [
                                  "Stromzaehler","kWh","javascript.0.Zaehler.StromZaehler_abs","TmDWMY",         // "javascript.0.Zaehler.StromZaehler_abs"
                                  "TauchpumpeSicker","kWh","fritzdect.0.DECT_xxxxxxxx.energy","mDW",
                                  "TauchpumpeRegen","kWh","fritzdect.0.DECT_xxxxxxxx.energy","mDW",
                                  "TauchpumpeLager","kWh","fritzdect.0.DECT_xxxxxxxx.energy","mDW",
                                  "TauchpumpeHeiz","kWh","fritzdect.0.DECT_xxxxxxxx","mDW",
                                  "TauchpumpeWerkstatt","kWh","fritzdect.0.DECT_xxxxxxxx.energy","mDW",
                                  "Entfeuchter","kWh","zigbee.0.xxxxxxxx.consumption","TmDW",  
                                  "Gaszaehler","m³","javascript.0.Zaehler.GasZaehler_abs","TmDWMY",                      // "javascript.0.Zaehler.GasZaehler_abs"
                                  "Heizung","kWh","ems-esp.0.heatSources.energyMonitoring.consumption","DW",
                                  "Brennerstarts","","ems-esp.0.heatSources.numberOfStarts","TDW",
                                  "Photovoltaik","kWH","javascript.0.Zaehler.PVZaehler_abs","TmDWMY",
                                  "Fronius","WH","javascript.0.Zaehler.PVZaehlerFronius_abs","TDWMY"
                                  ];
                              
                                  
                              var historyObjArray = [];
                              //Alle Datenpunkte kreieren
                              for (var n = 0; n < ArrayOfSensors.length; n+=4) { // for every second
                                  if (ArrayOfSensors[n+3].includes('T') ){
                                      createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_actual', 0.0, {name: "diff today"+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});    
                                  }
                                  if (ArrayOfSensors[n+3].includes('m') ){
                                      createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_600s', 0.0, {name: "diff last 10min "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                      createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_600s_last', 0.0, {name: "abs last 10 min "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                      historyObjArray.push('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_600s'); //Ins History Array
                                  }
                                  if (ArrayOfSensors[n+3].includes('D') ){
                                      createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily', 0.0, {name: "diff last day "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                      createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_last', 0.0, {name: "abs last day "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                      historyObjArray.push('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily');//Ins History Array
                                  }
                                  if (ArrayOfSensors[n+3].includes('W') ){    
                                      createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly', 0.0, {name: "diff last week "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                      createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly_last', 0.0, {name: "abs last Week "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                      createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly_actual', 0.0, {name: "abs last Week "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                      historyObjArray.push('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly');//Ins History Array
                                  }
                                  if (ArrayOfSensors[n+3].includes('M') ){
                                      createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_monthly', 0.0, {name: "diff last month "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                      createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_monthly_last', 0.0, {name: "abs last month "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                      createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_monthly_actual', 0.0, {name: "abs last Week "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                      historyObjArray.push('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_monthly');//Ins History Array
                                  }
                                  if (ArrayOfSensors[n+3].includes('Y') ){    
                                      createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_yearly', 0.0, {name: "diff last year "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                      createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_yearly_last', 0.0, {name: "abs last year "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                      createState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_yearly_actual', 0.0, {name: "diff actual yeat "+ArrayOfSensors[n], type: 'number', unit: ArrayOfSensors[n+1]});
                                      historyObjArray.push('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_yearly');//Ins History Array
                                  }
                              }
                              
                              //History aktivieren für daily, weekly, monthly, yearly
                              for (var n = 0; n < historyObjArray.length; n++) { // for every second
                                 // log (historyObjArray[n]);
                              
                                  sendTo('history.0', 'enableHistory', {
                                      id: historyObjArray[n],
                                      options: {
                                          changesOnly:  true,
                                          debounce:     0,
                                          retention:    0,
                                          maxLength:    960,
                                          changesMinDelta: 0,
                                          aliasId: ''
                                      }
                                  }, function (result) {
                                      if (result.error) {
                                          console.log(result.error);
                                      }
                                      if (result.success) {
                              
                                          // successfully enabled
                              
                                      }
                                  });
                              }
                              
                              
                              
                              //erfassen der Sensorwerte auf today und actual year
                              //diese sensoren sollen immer live werte zeigen, dafür war das "T" gedacht
                              //Diese Kolelgen müssen manuell programmeirt werden, da ich noch nicht weiß wie ich aus einem array triggern kann. evtl mit concat im on?
                              //Hier evtl auf alle 10s umsteigen?
                              on({id: "javascript.0.Zaehler.StromZaehler_abs", change: 'ne'}, function (obj) {
                                  setState("javascript.0.Verbrauch.Stromzaehler_daily_actual", Math.round ((getState("javascript.0.Zaehler.StromZaehler_abs").val - getState("javascript.0.Verbrauch.Stromzaehler_daily_last").val)*100)/100, true);
                                  setState("javascript.0.Verbrauch.Stromzaehler_weekly_actual", Math.round ((getState("javascript.0.Zaehler.StromZaehler_abs").val - getState("javascript.0.Verbrauch.Stromzaehler_weekly_last").val)*100)/100, true);
                                  setState("javascript.0.Verbrauch.Stromzaehler_yearly_actual", Math.round ((getState("javascript.0.Zaehler.StromZaehler_abs").val - getState("javascript.0.Verbrauch.Stromzaehler_yearly_last").val)*100)/100, true);
                              });
                              on({id: "javascript.0.Zaehler.GasZaehler_abs", change: 'ne'}, function (obj) {
                                  setState("javascript.0.Verbrauch.Gaszaehler_daily_actual", Math.round ((getState("javascript.0.Zaehler.GasZaehler_abs").val - getState("javascript.0.Verbrauch.Gaszaehler_daily_last").val)*1000)/1000, true);
                                  setState("javascript.0.Verbrauch.Gaszaehler_weekly_actual", Math.round ((getState("javascript.0.Zaehler.GasZaehler_abs").val - getState("javascript.0.Verbrauch.Gaszaehler_weekly_last").val)*1000)/1000, true);
                                  setState("javascript.0.Verbrauch.Gaszaehler_yearly_actual", Math.round ((getState("javascript.0.Zaehler.GasZaehler_abs").val - getState("javascript.0.Verbrauch.Gaszaehler_yearly_last").val)*1000)/1000, true);
                              });
                              on({id: "javascript.0.Zaehler.PVZaehler_abs", change: 'ne'}, function (obj) {
                                  setState("javascript.0.Verbrauch.Photovoltaik_daily_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehler_abs").val - getState("javascript.0.Verbrauch.Photovoltaik_daily_last").val)*1000)/1000, true);
                                  setState("javascript.0.Verbrauch.Photovoltaik_weekly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehler_abs").val - getState("javascript.0.Verbrauch.Photovoltaik_weekly_last").val)*1000)/1000, true);
                                  setState("javascript.0.Verbrauch.Photovoltaik_monthly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehler_abs").val - getState("javascript.0.Verbrauch.Photovoltaik_monthly_last").val)*1000)/1000, true);
                                  setState("javascript.0.Verbrauch.Photovoltaik_yearly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehler_abs").val - getState("javascript.0.Verbrauch.Photovoltaik_yearly_last").val)*1000)/1000, true);
                              });
                              on({id: "fronius.0.inverter.1.TOTAL_ENERGY", change: 'ne'}, function (obj) {
                              //schedule("* * * * *", function () {
                                  setState("javascript.0.Verbrauch.Fronius_daily_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_daily_last").val)*1000)/1000, true);
                                  setState("javascript.0.Verbrauch.Fronius_weekly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_weekly_last").val)*1000)/1000, true);
                                  setState("javascript.0.Verbrauch.Fronius_monthly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_monthly_last").val)*1000)/1000, true);
                                  setState("javascript.0.Verbrauch.Fronius_yearly_actual", Math.round ((getState("javascript.0.Zaehler.PVZaehlerFronius_abs").val - getState("javascript.0.Verbrauch.Fronius_yearly_last").val)*1000)/1000, true);
                              });
                              
                              
                              //600s Erfassung
                              schedule("*/10 * * * *", function () {
                                  for (var n = 0; n < ArrayOfSensors.length; n+=4) { // for every third
                                      if (ArrayOfSensors[n+3].includes('m') ){       
                                          var actvalue = getState(ArrayOfSensors[n+2]).val;
                                          var lastvalue = getState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_600s_last').val;
                                          var [verbrauch, letzter] = intervallVerbrauch(actvalue, lastvalue);
                                          setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_600s',verbrauch, true);
                                          setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_600s_last', letzter, true);
                                      }
                                  }
                              });
                              
                              //24h erfassung
                              schedule("57 23 * * *", function () {
                                  for (var n = 0; n < ArrayOfSensors.length; n+=4) { // for every third    
                                      if (ArrayOfSensors[n+3].includes('D') ){   
                                          var actvalue = getState(ArrayOfSensors[n+2]).val;
                                          var lastvalue = getState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_last').val;
                                          var [verbrauch, letzter] = intervallVerbrauch(actvalue, lastvalue);
                                          setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily',verbrauch, true);
                                          setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_last', letzter, true);
                                          setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_daily_actual', 0, true);
                                      }
                                  }
                                  var WirkGrad = 0;
                                  var Zustandszahl = getState("javascript.0.Parameter.ZustandszahlGas").val;
                                  var HeizLeistung = getState("javascript.0.Heizung.Verbrauch.actualPower.Yesterday").val;
                                  var GasVerbrauch = Math.round ((getState("javascript.0.Zaehler.GasZaehler_abs").val - getState("javascript.0.Gaszaehler_Daily_last").val)*1000)/1000
                              
                                  WirkGrad = HeizLeistung / (GasVerbrauch * Zustandszahl); 
                                  setState("javascript.0.Gas.errWirkungsgrad", WirkGrad);
                              });
                              
                              //Wöchentlich Montags 00:00
                              schedule("0 0 * * 1", function () {
                                  for (var n = 0; n < ArrayOfSensors.length; n+=4) { // for every third
                                      if (ArrayOfSensors[n+3].includes('W') ){   //nur wenn wöchentlich aktiviert ist
                                          var actvalue = getState(ArrayOfSensors[n+2]).val;
                                          var lastvalue = getState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly_last').val;
                                          var [verbrauch, letzter] = intervallVerbrauch(actvalue, lastvalue);
                                          setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly',verbrauch, true);
                                          setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly_last', letzter, true);
                                          setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_weekly_actual', 0, true);
                                      }
                                  }
                              });
                              
                              
                              //Monatlich 01. 00:00
                              schedule("1 0 1 * *", function () {
                                  for (var n = 0; n < ArrayOfSensors.length; n+=4) { // for every third
                                      if (ArrayOfSensors[n+3].includes('M') ){   //nur wenn Monatlich aktiviert ist
                                          var actvalue = getState(ArrayOfSensors[n+2]).val;
                                          var lastvalue = getState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_monthly_last').val;
                                          var [verbrauch, letzter] = intervallVerbrauch(actvalue, lastvalue);
                                          setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_monthly',verbrauch, true);
                                          setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_monthly_last', letzter, true);
                                      }
                                  }
                              });
                              
                              
                              //Jährlich an neujahr  00:01
                              schedule("1 0 1 1 *", function () {
                                  log('los gehts');
                                  for (var n = 0; n < ArrayOfSensors.length; n+=4) { // for every third
                                      if (ArrayOfSensors[n+3].includes('Y') ){   //nur wenn wöchentlich aktiviert ist
                                          var actvalue = getState(ArrayOfSensors[n+2]).val;
                                          var lastvalue = getState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_yearly_last').val;
                                          var [verbrauch, letzter] = intervallVerbrauch(actvalue, lastvalue);
                                          setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_yearly',verbrauch, true);
                                          setState('javascript.0.Verbrauch.'+ArrayOfSensors[n]+'_yearly_last', letzter, true);
                                          log(ArrayOfSensors[n])
                                      }
                                  }
                              });
                              
                              function intervallVerbrauch(totalAct, totalLast){
                                  var consumption = Math.round ((totalAct - totalLast)*100)/100;
                                  totalLast = Math.round (totalAct*100)/100;
                                  return [consumption, totalLast]; 
                              }
                              
                              
                              
                              
                              
                              
                              
                              
                              AlenA Offline
                              AlenA Offline
                              Alen
                              schrieb am zuletzt editiert von
                              #439

                              @jmeister79 Vielen Dank für dein Script.

                              Ich habe jedoch Schwierigkeiten genau zu vestehen, wie der Verbrauch nun berechnet wird?

                              Woher kommt bei dir der Datenpunkt

                              javascript.0.Zaehler.StromZaehler_abs
                              

                              ?

                              Liefert das dein (Fronius) Wechselrichter bzw. die Solarweb API ?

                              Du berechnest dann den Stromverbrauch anhand der Veränderung dieses Wertes - korrekt?

                              Gruss
                              Alen

                              jmeister79J 1 Antwort Letzte Antwort
                              0
                              • AlenA Alen

                                @jmeister79 Vielen Dank für dein Script.

                                Ich habe jedoch Schwierigkeiten genau zu vestehen, wie der Verbrauch nun berechnet wird?

                                Woher kommt bei dir der Datenpunkt

                                javascript.0.Zaehler.StromZaehler_abs
                                

                                ?

                                Liefert das dein (Fronius) Wechselrichter bzw. die Solarweb API ?

                                Du berechnest dann den Stromverbrauch anhand der Veränderung dieses Wertes - korrekt?

                                Gruss
                                Alen

                                jmeister79J Offline
                                jmeister79J Offline
                                jmeister79
                                schrieb am zuletzt editiert von jmeister79
                                #440

                                @alen ich benutze Aliasse. Ich hab n Javascript das bei onChange die werte aus dem Fronius in diesen Datenpunkt schreibt, falls sichd ann die sChnittstelle ändert muss ich nur diese stelle ändern statt alle. Stromverbrauch wird inkrementell berechnet:

                                Hatte da neulich noch n Fehler korrigiert:

                                
                                createState("javascript.0.Zaehler.StromZaehler_abs", 0.0, {name: "Zaehlerstand Stromzähler", type: 'number', unit: 'kWh'});
                                
                                //Initialwerte für neustart des Scriptes
                                var total_oldPlus = getState("fronius.0.meter.0.EnergyReal_WAC_Plus_Absolute").val;
                                var total_oldMinus = getState("fronius.0.meter.0.EnergyReal_WAC_Minus_Absolute").val;
                                
                                
                                
                                
                                on({id: 'fronius.0.meter.0.EnergyReal_WAC_Plus_Absolute', change: "any"}, function (obj) {
                                    var total_new = getState("fronius.0.meter.0.EnergyReal_WAC_Plus_Absolute").val; //New Value speichern   
                                    var diff = (total_new - total_oldPlus);   
                                    var zaehlerstand_alt = getState("javascript.0.Zaehler.StromZaehler_abs").val;	//alten zählerstand abfragen
                                    setState("javascript.0.Zaehler.StromZaehler_abs", Math.round (1000*zaehlerstand_alt+diff)/1000);	//Auf drei nachkommastellen runden
                                    total_oldPlus = total_new; //Old Value speichern 
                                });
                                
                                on({id: 'fronius.0.meter.0.EnergyReal_WAC_Minus_Absolute', change: "any"}, function (obj) {
                                    var total_new = getState("fronius.0.meter.0.EnergyReal_WAC_Minus_Absolute").val; //New Value speichern   
                                    var diff = (total_new - total_oldMinus);     
                                    var zaehlerstand_alt = getState("javascript.0.Zaehler.StromZaehler_abs").val;	//alten zählerstand abfragen
                                    setState("javascript.0.Zaehler.StromZaehler_abs", Math.round (1000*zaehlerstand_alt-diff)/1000);	//Auf drei nachkommastellen runden
                                    total_oldMinus = total_new; //Old Value speichern 
                                });
                                
                                1 Antwort Letzte Antwort
                                0
                                Antworten
                                • In einem neuen Thema antworten
                                Anmelden zum Antworten
                                • Älteste zuerst
                                • Neuste zuerst
                                • Meiste Stimmen


                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                807

                                Online

                                32.4k

                                Benutzer

                                81.6k

                                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