Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. FRONIUS Adapter Entwicklung eingestellt?

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    21
    1
    880

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

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

FRONIUS Adapter Entwicklung eingestellt?

Scheduled Pinned Locked Moved Entwicklung
fronius
440 Posts 44 Posters 120.3k Views 45 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D diwoma

    @io2023
    Das hängt jetzt davon ab, ob die die Version 1.x oder die Version 2.01 installiert hast.
    Aber suche nach folgenden Namen:
    P_AKKU ...... Lade/Entlade-Leistung (Ladung ist negativ)
    P_GRID ....... Bezug/Lieferung ins GRID (Bezug ist positiv)
    P_LOAD ..... Verbrauch (im Haus)
    P_PV ........... Leistung von der PV
    SOC ............ Ladestand der Batterie

    in Version 1.x unter Fronius.0.powerflow
    ab Version 2.x unter Fronius.0.site

    Der SOC liegt unter dem Inverter-Folder
    Version 1.x .... fronius.0.powerflow.inverter1.SOC
    Version 2.x ..... fronius.0.inverter.1.SOC

    Hängt aber wahrscheinlich auch davon ab, ob Du den Fronius-Smartmeter hast (wie ich)
    Bei anderer Konfiguration könnte es anders sein, aber die kenne ich nicht.

    NegaleinN Offline
    NegaleinN Offline
    Negalein
    Global Moderator
    wrote on last edited by
    #421

    @diwoma sagte in FRONIUS Adapter Entwicklung eingestellt?:

    SOC

    was ist der SOC?

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

    C 1 Reply Last reply
    0
    • NegaleinN Negalein

      @diwoma sagte in FRONIUS Adapter Entwicklung eingestellt?:

      SOC

      was ist der SOC?

      C Offline
      C Offline
      c1olli
      wrote on last edited by
      #422

      SoC = state of charge

      Gruß
      Olli

      1 Reply Last reply
      1
      • D diwoma

        @io2023
        Das hängt jetzt davon ab, ob die die Version 1.x oder die Version 2.01 installiert hast.
        Aber suche nach folgenden Namen:
        P_AKKU ...... Lade/Entlade-Leistung (Ladung ist negativ)
        P_GRID ....... Bezug/Lieferung ins GRID (Bezug ist positiv)
        P_LOAD ..... Verbrauch (im Haus)
        P_PV ........... Leistung von der PV
        SOC ............ Ladestand der Batterie

        in Version 1.x unter Fronius.0.powerflow
        ab Version 2.x unter Fronius.0.site

        Der SOC liegt unter dem Inverter-Folder
        Version 1.x .... fronius.0.powerflow.inverter1.SOC
        Version 2.x ..... fronius.0.inverter.1.SOC

        Hängt aber wahrscheinlich auch davon ab, ob Du den Fronius-Smartmeter hast (wie ich)
        Bei anderer Konfiguration könnte es anders sein, aber die kenne ich nicht.

        I Offline
        I Offline
        io2023
        wrote on last edited by
        #423

        @diwoma

        Danke für die schnelle Antwort.
        Ich habe gerade mal auf die Version 2.01 aktualisiert. Mit P_LOAD habe ich eine größere Abweichung zur Anzeige im Solarweb.

        p_load.jpg

        An was kann das liegen?

        Das Smartmeter ist von Fronius.

        Kann ich den Ordner Powerflow dann löschen?

        JB_SullivanJ 1 Reply Last reply
        0
        • I io2023

          @diwoma

          Danke für die schnelle Antwort.
          Ich habe gerade mal auf die Version 2.01 aktualisiert. Mit P_LOAD habe ich eine größere Abweichung zur Anzeige im Solarweb.

          p_load.jpg

          An was kann das liegen?

          Das Smartmeter ist von Fronius.

          Kann ich den Ordner Powerflow dann löschen?

          JB_SullivanJ Offline
          JB_SullivanJ Offline
          JB_Sullivan
          wrote on last edited by
          #424

          @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

          ioBroker auf Intel Core i3-5005U NUC und Windwos10 Pro

          I 1 Reply Last reply
          0
          • J Offline
            J Offline
            JJPhoenix79
            wrote on last edited by
            #425

            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 mcm1957M 2 Replies Last reply
            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

              C Offline
              C Offline
              c1olli
              wrote on last edited by
              #426

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

              Gruß
              Olli

              1 Reply Last reply
              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
                wrote on last edited by
                #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 Reply Last reply
                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
                  wrote on last edited by
                  #428

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

                  1 Reply Last reply
                  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
                    wrote on last edited by
                    #429

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

                    1 Reply Last reply
                    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
                      wrote on last edited by
                      #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 Replies Last reply
                      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
                        wrote on last edited by
                        #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 Reply Last reply
                        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
                          wrote on last edited by
                          #432

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

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

                          1 Reply Last reply
                          0
                          • J Offline
                            J Offline
                            JJPhoenix79
                            wrote on last edited by
                            #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 Reply Last reply
                            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
                              wrote on last edited by
                              #434

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

                              1 Reply Last reply
                              0
                              • AlenA Offline
                                AlenA Offline
                                Alen
                                wrote on last edited by
                                #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 Reply Last reply
                                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
                                  wrote on last edited by
                                  #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 Reply Last reply
                                  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
                                    wrote on last edited by
                                    #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 Reply Last reply
                                    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
                                      wrote on last edited by 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 Reply Last reply
                                      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
                                        wrote on last edited by
                                        #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 Reply Last reply
                                        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
                                          wrote on last edited by 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 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          802

                                          Online

                                          32.5k

                                          Users

                                          81.6k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe