Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Vorlage] Betriebsstundenzähler & Verbrauchsrechner

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Vorlage] Betriebsstundenzähler & Verbrauchsrechner

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

      @thomasSC:

      hm-rpc.0 2018-03-19 18:23:52.772 error binrpc -> setValue: no dpType for hm-rpc.0.OEQ0045311.3! `

      Sieht mir nach einem Fehler bei binrpc aus.

      Ich glaube nicht, dass das was mit dem Script zu tun hat.

      Versuche mal testweise auf XML umzustellen (hmrpc-adapter)

      Vg looxer,

      1 Reply Last reply Reply Quote 0
      • S
        sveni_lee last edited by

        ich habe mich heute auch mal an den BSZ gesetzt. Ich möchte gern meine Stromzähler auswerten.

        ich habe einen DatenPunkt "javascript.0.Stromzaehler.Normalstrom.Zaehlerstand_input"

        dieser wird fortlaufend hochgezählt. Bei jeder Umdrehung wird der Wert um 1 hochgesetzt. Das klappt auch soweit!

        Der Wert entspricht den tatsächlichen Umdrehungen des Zähler also jetzt grad 2409806, bei 75u/kWh also 32130,75 kWh.

        folgende Einstellungen habe ich BSZ vorgenommen:

        var Gruppen = [];
        //              1.Homematic ID,                    2.Thema(no spaces)                    3.History  4.DAY  5.Week  6.Month 7.Year  8.Switch   9 - 18 Status to log                                                         19.stop 20.Loesch
        Gruppen[ 0]  = ['javascript.0.Stromzaehler.Normalstrom.Zaehlerstand_input'                                ,'Normalstrom'                                 ,true  ,true  ,true  ,true  ,true  ,true  ,'delta'      ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; // kWh Normalzähler
        Gruppen[ 1]  = ['javascript.0.Stromzaehler.Normalstrom.Zaehlerstand_input'                                ,'Normalstromkosten'                                 ,true  ,true  ,true  ,true  ,true  ,false  ,'delta'      ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; // Euro Normalzähler
        
        var logname = [];
        //              Stat1           Stat2       Stat3       Stat4               Stat5       Stat6       Stat7       Stat8   Stat9   Stat10
        logname[0]  =   ['Normalstrom-kWh'      ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
        logname[1]  =   ['Normalstrom-Euro'      ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
        
        var special = [];
        //             1.Round 2.add1   3.Faktor                4\. Divisor  5.add2  6.Individuallogik  7: DELTA(M)Grenze    8.Warten auf Bestaetigung  9.Durchschnitt - 10.Zaehlschwelle     11 Schedule    12\. Min/MAX     13\. MehrfachStatus  14\. Selektives Logging
        special[0]  =   ['3'     ,''     ,''                     ,'75'         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 , ''     ]; 
        special[1]  =   ['2'     ,''     ,'0.2487'                     ,'75'         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; 
        

        bekomme aber nur 0 angezeigt…

        ~~![](</s><URL url=)https://i.imgur.com/L9dHDep.jpg" />

        EDIT: geslöst, hatte das mit ack falsch verstanden.~~

        1 Reply Last reply Reply Quote 0
        • S
          sveni_lee last edited by

          eine Frage habe ich nocht…

          ich habe noch nicht verstanden, wie ich die Zeit zwischen der Änderung des Datenpunktes berechnen kann.

          ich habe einen counter für den Stromzähler der immer artig hochzählt um den momentan Verbrauch zu berechnen,

          müsste ich die Zeit für eine Umdrehung also die Zeit bis zur nächsten Erhöhung ermitteln...

          Aber wie kann ich das realisieren?

          1 Reply Last reply Reply Quote 0
          • S
            schittl last edited by

            Danke für das tolle Skript. Ist es damit auch ohne Probleme möglich die Betriebsstunden von Hue Lampen zu protokollieren? Folgende Einstellungen habe ich probiert:

            Gruppen[ 4]  = ['hue.0.Philips_hue.Eingang_White_I.on'      ,'Licht'           ,false  ,true   ,true   ,true   ,true   ,true     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; // Eingang-Lampe
            logname[ 4]  = ['Eingang-Lampe'           ,''             ,''             ,''         ,''         ,''         ,''         ,''     ,''     ,'']; // Eingang-Lampe
            special[ 4]  = [''     ,''     ,''        ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 , ''     ]; // Eingang-Lampe
            
            

            Zusatzfrage:

            Wie kann ich von Endgeräten an einer Homematic-Steckdose (Datenpunkt POWER) die Betriebsstunden und Counter speichern? Habe folgenden Bereich POWER-Abfrage zusätzlich inkludiert. Damit bekomme ich schon mal die Betriebsstunden. Nur leider noch nicht wie oft wurde das Endgerät eingeschaltet.

            ! // TIME Datenpunkt hier POWER Geraet if (objGruppe.match('POWER')) { // ist es ein POWER Geraet ? if (Gruppen[nummer][8] === '') { return; } // Gibt es einen Status in der Gruppentabelle ? wenn nein ciao - es wurd nur spalte 8 abgefragt if (Gruppen[nummer][18] === true) { return; } // Objekt ist mit refresh gekennzeichnet - keine updates LastMSec = Number(getState(objMSec).val); // lese letzten Wert var statusvalue = parseInt(Gruppen[nummer][8],10); // in der Gruppentabelle Spalte 8 wird eine Zahl erwartet für POWER Geraete - in eine integer Zahl umwandeln if (GeraeteStatus >= statusvalue) { // Geraet wurde eingeschaltet - Einschaltzeit setzen if (LastMSec === 0 ) { // Wenn Geraet keine Einschaltzeit hat und der Verbraucher nicht kleiner eingeschaltet wurde als in der Gruppen tabelle unter status, dann ignoriere setState(objMSec,currSec); // merken millisekunden zum Zeitpunkt "Einschalten" FormTimeSingle = TimeCalc(currSec,nummer); // Zeit in lesbarem Format ddd:hh:mm:ss GeraeteStatus = TauschePunktKomma(GeraeteStatus); // Umwandlung von javascript float in 2 decimals mit Komma für die Logausgabe lesbar in Excel //"Datum;Uhrzeit; Type; Activity; nummer HM-ID; Objekt-Text; CurrValue; SystemObj Alt; SysemObj Neu; SystemMSEC Alt ; SystemMSEC NEU; CounterObj ALT; CounterOBJ NEU writelog(nummer,"A","TIME-POWER" + ";" + "SetCurrTime" + ";" +nummer + ";" + Gruppen[nummer][0] + ";" + GeraeteName + ";" + GeraeteStatus + ";" +";" + ";" + LastMSec + ";" + currSec); } } else { // Geraet wurde ausgeschaltet objTime = objTime + '.TIME.' + statusname; LastKumSec = Number(getState(objKum).val); // lese kumulierten Wert if (LastMSec > 0 ) { // Geraet hatte eine Einschaltzeit gespeichert - jetzt rechnen und zurücksetzen lastvalue = Number(getState(objTime).val); // lese kumulierten Wert - letzter umgerechnete Wert if( timeformat || typeof(lastvalue) == "string") { // falls ein timeformat gewaehlt wurde (ddd.hh.mm.ss), dann muss umgewandelt werden in millisek lastvalue = LastKumSec; // der letzte Wert entspricht jetzt dem kumulierten Systemwert lastvalue = lastvalue + addition1; lastvalue = lastvalue * faktor; // Faktor anwenden lastvalue = lastvalue + addition2; } diffvalraw = currSec - LastMSec; // Berechnen der Zeitdifferenz newvalue = diffvalraw; // lese aktuellen Wert aud dem veränderten Datenpunkt if(special[nummer][5] !== '') { // Individualfunktionen newvalue = individual(special[nummer][5].toUpperCase(),nummer,diffvalraw); // hier kommt ein umgerechneter Wertaus der Individualfunktion zurück z.B. KG . individualFunc = true; } // endif Individualfunktion newvalue = newvalue + addition1; newvalue = newvalue * faktor; // Faktor anwenden newvalue = newvalue + addition2; newvalue = lastvalue + newvalue; // neuer umgerechneter Wert für den Counter newkumtime = LastKumSec + diffvalraw; // neuer nicht umgerechneter Wert für den Systembereich setState(objKum,newkumtime); // Schreibe wert in variable setState(objMSec,0); newvalue = runden(newvalue,rundung); // Neuer umgerechneter Gesamtwert mit Rundung für den Counter FormTimeKum = TimeCalc(newvalue,nummer); // Berechne Betriebsstunden Zeitformat von millisekunden in dd:hh:mm:ss = FormTime setState(objTime,FormTimeKum); // Schreibe neuen Wert in variable ValKum2(nummer, day,week,month,year,objKum,objTime,diffvalraw,addition1,addition2,faktor,rundung,individualFunc,true,timeformat); // update der Werte in täglichen, wöchentlichen, monatlichen, jährlichen einheiten wenn so gewünscht Average(nummer,day,week,month,year,statusname,newvalue,diffvalraw,addition1,addition2,faktor,rundung,false); // update der Werte in täglichen, wöchentlichen, monatlichen, jährlichen einheiten wenn so gewünscht) MINMAX(nummer,day,week,month,year,statusname,newvalue,diffvalraw,addition1,addition2,faktor,rundung,false) // update der MINMAX Werte in täglichen, wöchentlichen, monatlichen, jährlichen einheiten wenn so gewünscht setState(objMSec,0); // setzen Millisekunden auf Null um Fehlschaltungen zu vermeiden if(switchupdate) { LastKumSwitch = getState(objSwitch).val; // lese kumulierten Zaehlungen switchdiff = LastKumSwitch + 1; setState(objSwitch,switchdiff); // setzen plus ein Schaltvorgang SwitchKum(day,week,month,year,objSwitch); // update der switches in täglichen, wöchentlichen, monatlichen, jährlichen einheiten wenn so gewünscht } // endif switchupdate lastvalue = TimeCalc(lastvalue,nummer); //Aufbereitung für Log if(typeof(lastvalue) == "number") { lastvalue = TauschePunktKomma(lastvalue); // Umwandlung von javascript float in 2 decimals mit Komma für die Logausgabe lesbar in Excel } if(typeof(FormTimeKum) == "number") { FormTimeKum = TauschePunktKomma(FormTimeKum); // Umwandlung von javascript float in 2 decimals mit Komma für die Logausgabe lesbar in Excel } //"Datum;Uhrzeit; Type; Activity; nummer HM-ID; Objekt-Text; CurrValue; SystemObj Alt; SysemObj Neu; SystemMSEC Alt ;SystemMSEC NEU; CounterObj ALT; CounterOBJ NEU writelog(nummer,"A","TIME-POWER" + ";" + "SetNewTime" + ";" +nummer + ";" + Gruppen[nummer][0] + ";" + GeraeteName + ";" + GeraeteStatus +";" + LastKumSec + ";" + newkumtime + ";" + LastMSec + ";" + "0" + ";" + lastvalue +";" + FormTimeKum); return; } // endif statusname } // Geraet war vorher eingeschaltet return; // ciao - nix mehr zu tun } // endif es ist ein power Geraet !

            Gruppen[ 1]  = ['hm-rpc.0.xxxx.2.POWER'               ,'Strom'           ,false  ,true   ,true   ,true   ,true   ,false    ,'10'   ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; // Küche-Geschirrspüler
            logname[ 1]  = ['Küche-Geschirrspüler'    ,''             ,''             ,''         ,''         ,''         ,''         ,''     ,''     ,'']; // Küche-Geschirrspüler
            special[ 1]  = [''     ,''     ,''        ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; // Küche-Geschirrspüler
            
            

            Hintergrund:

            Die Steckdose ist immer an und wird niemals ausgeschaltet.

            vg

            Falk

            1 Reply Last reply Reply Quote 0
            • T
              thomasSC last edited by

              Jetzt habe ich eine ganz Banale frage. ich glaub ich seh den Code vor lauter Buchstaben nicht.

              Ich nutze das Skript um meine UVC Lampe meines Gartenteiches zu überwachen. Nun bekomme ich aber als Format 000:00:00:00 angezeigt.

              Dies kann ich leider nicht für eine schöne Visa benutzen. Ich würde gerne den "odometer" von HQWidgets nutzen. Mich interessieren auch wirklich nur stunden. keine tage, keine Sekunden etc.

              Kann mir jemand beim Skript für die Umwandlung helfen? Vielen Dank schonmal.

              Gruß Thomas

              push hat denn niemand eine Idee?

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

                Hallo,

                ich möchte die Betriebszeiten von Pumpen protokollieren. Es wird auch die Summe protokolliert, aber das Zurücksetzen bei Tages- Wochenweseln funktioniert irgendwie nicht, was mache ich falsch:

                4489_bildschirmfoto_2018-04-13_um_14.58.18.png

                filename="Bildschirmfoto 2018-04-13 um 14.57.54.png" index="0">~~

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

                  4489_bildschirmfoto_2018-04-13_um_14.57.54.png

                  1 Reply Last reply Reply Quote 0
                  • T
                    thomasSC last edited by

                    Hat keiner eine Idee für die Umwandlung in reine Stunden?

                    1 Reply Last reply Reply Quote 0
                    • L
                      looxer01 last edited by

                      @thomasSC:

                      Hat keiner eine Idee für die Umwandlung in reine Stunden? `
                      Hi,

                      Wenn du die Methode "TIME" verwendest, dann wird normalerweise ein Format erzeugt, dass so aussieht "DDD:HH:MM:SS"

                      Wenn du eine Umrechnung vornimmst, dann wird das Format nicht mehr so dargestellt. Das Programm rechnet immer mit Millisekunden.

                      Wenn du also in Tabelle "Special" im Divisor 3600000 eingibst, dann wird die Zahl in Stunden dartgestellt. Allerdings dezimal. Dass heisst das 3:30 = 3.5

                      vG Looxer

                      1 Reply Last reply Reply Quote 0
                      • B
                        Beowolf last edited by

                        Hallo zusammen,

                        habe da ein Problem. Ich habe das Skript für meine Heizung eingebaut. Von meiner Heizung kommt die Meldung Brenner feuert als "true" und "false" Meldung.

                        Der Datenpunkt sieht so aus "javascript.0.STUNDEN.BRENNER.STATE". Unter Objekte kann ich auch schön sehen wie sich der Zustand ändert. Unter VIS habe ich auch eine entsprechende Grafik die sich dann auch ändert. Es funktioniert also.

                        Wenn ich diesen Datenpunkt jetzt in den BSZ einsetze passiert nicht. Der Zähler zählt nicht.

                        Ersetze ich den Datenpunkt durch einen einfachenHM-Schaltaktor, also das ich per Funkschalter schalten kann, wird schön die "gezählte" Zeit im BSZ angezeigt.

                        Wo mache ich den Fehler? Was wird benötigt?

                        Grüße

                        Manfred

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

                          @Beowolf:

                          Hallo zusammen,

                          habe da ein Problem. Ich habe das Skript für meine Heizung eingebaut. Von meiner Heizung kommt die Meldung Brenner feuert als "true" und "false" Meldung.

                          Der Datenpunkt sieht so aus "javascript.0.STUNDEN.BRENNER.STATE". Unter Objekte kann ich auch schön sehen wie sich der Zustand ändert. Unter VIS habe ich auch eine entsprechende Grafik die sich dann auch ändert. Es funktioniert also.

                          Wenn ich diesen Datenpunkt jetzt in den BSZ einsetze passiert nicht. Der Zähler zählt nicht.

                          Ersetze ich den Datenpunkt durch einen einfachenHM-Schaltaktor, also das ich per Funkschalter schalten kann, wird schön die "gezählte" Zeit im BSZ angezeigt.

                          Wo mache ich den Fehler? Was wird benötigt?

                          Grüße

                          Manfred `

                          Hab genau das gleiche Problem. Gibt es schon eine Lösung?

                          cya

                          Thomas

                          1 Reply Last reply Reply Quote 0
                          • B
                            Beowolf last edited by

                            Ja, das wäre wirklich sehr schön, wenn es dafür eine Lösung geben würde.

                            1 Reply Last reply Reply Quote 0
                            • L
                              looxer01 last edited by

                              @Beowolf:

                              Wenn ich diesen Datenpunkt jetzt in den BSZ einsetze passiert nicht. Der Zähler zählt nicht.

                              Ersetze ich den Datenpunkt durch einen einfachenHM-Schaltaktor, also das ich per Funkschalter schalten kann, wird schön die "gezählte" Zeit im BSZ angezeigt.

                              Wo mache ich den Fehler? Was wird benötigt? `

                              also, ich bin überzeugt, dass es ein Konfigurationsproblem ist.

                              Bitte Leerzeichen vermeiden. und die genaue Schreibweise der Datenpunkte beachten. Gross und Kleinschreibung muessen dabei exakt identisch siein.

                              Schaut Ihr mal und meldet zurück ?

                              vG Looxer

                              1 Reply Last reply Reply Quote 0
                              • S
                                schittl last edited by

                                @looxer01:

                                also, ich bin überzeugt, dass es ein Konfigurationsproblem ist.

                                Bitte Leerzeichen vermeiden. und die genaue Schreibweise der Datenpunkte beachten. Gross und Kleinschreibung muessen dabei exakt identisch siein.

                                Schaut Ihr mal und meldet zurück ?

                                vG Looxer `
                                Groß und Kleinschreibung kann ich schon mal ausschließen…

                                Gruppen[13]  = ['javascript.0.Weihnachtsbeleuchtung'                    ,'Licht'            ,false  ,true   ,true   ,true   ,true   ,true     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; // Weihnachtsbeleuchtung
                                .....
                                Gruppen[19]  = ['g-homa.0.XXXXXX.power'                                 ,'Strom'            ,false  ,true   ,true   ,true   ,true   ,false    ,'10'   ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; // XXXXXX
                                Gruppen[20]  = ['javascript.0.Systeminfos.STATE_WINDOWS_OPEN_KITCHEN'   ,'Luft'             ,false  ,true   ,true   ,true   ,true   ,true     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; // Kueche-Fenster
                                
                                

                                Diese beiden bringen keine Werte, andere aber schon und zuverlässig. Auffallend ist es das es nur Objekte betrifft, welche im Adapter "javascript" gespeichert sind. g-Homa, hue, hm-rega und hm-rpc funktionieren.

                                vg

                                Falk

                                1 Reply Last reply Reply Quote 0
                                • L
                                  looxer01 last edited by

                                  @schittl:

                                  oß und Kleinschreibung kann ich schon mal ausschließen… `
                                  ok, nächster punkt wäre mal zu schauen was in den RAW daten der Objekte steht.

                                  Was ist das für ein Datentyp etc.

                                  Kannst du die RAW Werte mal posten ?

                                  vG Looxer

                                  1 Reply Last reply Reply Quote 0
                                  • B
                                    Beowolf last edited by

                                    Ist geschehen. :oops:

                                    1 Reply Last reply Reply Quote 0
                                    • S
                                      schittl last edited by

                                      @Beowolf:

                                      Der Stromzähler wird schön erfasst, der Wasserzähler erscheint nicht. Warum? Wo habe ich dort einen Fehler?

                                      Grüße

                                      Manfred `

                                      Vermutlich falsches Thema. Poste das bitte hier:

                                      viewtopic.php?f=21&t=12272

                                      1 Reply Last reply Reply Quote 0
                                      • S
                                        schittl last edited by

                                        @looxer01:

                                        ok, nächster punkt wäre mal zu schauen was in den RAW daten der Objekte steht.

                                        Was ist das für ein Datentyp etc.

                                        Kannst du die RAW Werte mal posten ?

                                        vG Looxer `
                                        Natürlich hier bitte:

                                        ! { "from": "system.adapter.javascript.0", "ts": 1514491542223, "common": { "name": "Weihnachtsbeleuchtung", "desc": "Soll Weihnachtsbeleuchtung eingeschaltet werden?", "type": "boolean", "role": "javascript", "read": true, "write": true }, "native": { "name": "Weihnachtsbeleuchtung", "desc": "Soll Weihnachtsbeleuchtung eingeschaltet werden?", "type": "boolean", "role": "javascript", "read": true, "write": true }, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "javascript.0.Weihnachtsbeleuchtung", "type": "state" } !

                                        bzw.

                                        ! { "common": { "name": "Status der geöffneten Fenster/Türen in der Küche", "read": true, "write": true, "type": "boolean", "desc": "Status der geoeffneten Fenster/Türen in der Kueche", "def": false, "role": "state" }, "native": { "name": "Status der geoeffneten Fenster/Türen in der Kueche", "read": true, "write": true, "type": "boolean", "desc": "Status der geoeffneten Fenster/Türen in der Kueche", "def": false, "role": "state" }, "type": "state", "from": "system.adapter.javascript.0", "ts": 1528288136458, "_id": "javascript.0.Systeminfos.STATE_WINDOWS_OPEN_KITCHEN", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } } !
                                        vg

                                        Falk

                                        1 Reply Last reply Reply Quote 0
                                        • S
                                          schittl last edited by

                                          @looxer01: Gibt es neue Erkenntnisse? Benötigst Du weitere Unterstützung?

                                          1 Reply Last reply Reply Quote 0
                                          • L
                                            looxer01 last edited by

                                            @schittl:

                                            @looxer01: Gibt es neue Erkenntnisse? Benötigst Du weitere Unterstützung? `
                                            Hi,

                                            Ich komme erst am WE dazu, weil ich zur analyse etwas mehr Zeit brauche.

                                            ggf brauche ich deine Hilfe. Am Besten ist aber immer mal selber ins System zu schauen. Jedenfalls für den BSZ.

                                            Ich melde mich.

                                            vG Looxer

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            725
                                            Online

                                            31.8k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            51
                                            333
                                            78550
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo