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

      leider gab es im Skript noch einen Fehler.

      Beim Wochenwechsel wurde ein Parameter für das Logging falsch übergeben und damit brach das Skript ab.

      Das ist jetzt mit Version 0.96 behoben

      vG Looxer

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

        Habe das jetzt auch endlich geschafft auf die website zu laden.

        Dabei habe ich mir erlaubt in der ersten Zeile die Versionsnummer von 0.95 auf 0.96 zu ändern 😉

        Gruß

        Rainer

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

          Danke Rainer,

          ich habe es jetzt auch im ersten Post angepasst. 🙂

          vG

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

            Hi,

            es gibt ein update auf Version 0.97. (erster Post)

            Nur das Coding muss ausgetauscht werden. Im Einstellungsbereich hat sich nichts geändert

            Die Änderung beseitigt einen Fehler, der beim Schreiben von Änderungen in eine CSV-Datei (externes Logging) von einzelnen IDs auftrat.

            Es wurde immer in die Datei "BSZExtLog_1.csv" geschrieben. Auch, wenn das Logging für z.B. Zeile 15 eingestellt war und

            damit eigentlich in "BSZExtLog_15.csv" geschrieben werden sollte.

            vG Looxer

            1 Reply Last reply Reply Quote 0
            • E
              eastcoast last edited by

              Hallo Looxer,

              erst Mal vielen Dank für Dein Skript!

              Ich verwende es zur Messung der Einschaltzeit von HM Aktoren.

              Eine Sache würde ich mir jedoch noch wünschen:

              Das Format DDD:HH:MM:SS bei TIME ist für manche Anwendungen unübersichtlich,

              z.B. für DAY würde HH:MM:SS reichen, meistens würde ich ein HHH:MM bevorzugen.

              Perfekt wäre natürlich, wenn man das Ausgabeformat für DAY, WEEK, MONTH, YEAR konfigurieren könnte! 😉

              1 Reply Last reply Reply Quote 0
              • E
                eastcoast last edited by

                Hallo,

                habe noch ein kleines Problem mit dem Skript:

                Beim Tageswechsel (vermutlich auch Woche, Monat und Jahr) werden die Werte nicht auf 0 zurückgesetzt.

                Ich verwende noch eine sehr einfache Konfiguration:

                ! 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] = ['hm-rpc.0.MEQ0001234.1.STATE' ,'heating' ,false ,true ,true ,true ,true ,true ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Gruppen[ 1] = ['hm-rpc.0.MEQ0005678.1.STATE' ,'heating' ,false ,true ,true ,true ,true ,true ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // ... ! var logname = []; // Stat1 Stat2 Stat3 Stat4 Stat5 Stat6 Stat7 Stat8 Stat9 Stat10 logname[0] = ['E-Heizung 1' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[1] = ['E-Heizung 2' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; ... ! 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] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' , '' ]; special[1] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; ... ! var TimeSetStunde = "00"; // Bitte Uhrzeit - hier Stunde eingeben im 24 Stunden Format z.B. 00 für Mitternacht var TimeSetMinute = "04"; // Bitte Minuten eingeben z.B. 10 - = 00:10 für Null Uhr Zehn var logflag = false; // wenn auf true dann wird das logging in Datei /opt/iobroker/iobroker-data/BSZLog.csv eingeschaltet bei false vice versa var Timelogflag = false; // wenn auf true dann wird das logging in Datei /opt/iobroker/iobroker-data/BSZTimeLog.csv eingeschaltet bei false vice versa ... !
                …habe ich irgendein Setting übersehen?

                Danke!

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

                  @eastcoast:

                  .habe ich irgendein Setting übersehen?

                  Danke! `

                  Hi,

                  sorry, bin gerade erst zurück von einer Geschäftsreise.

                  Also, sieht eigentlich ok aus. Zum Testen kannst du das auch auf irgendeine Zeit setzen. Z.B. in 5 Minuten.

                  Ich habe meinen Wechsel auf 00:59 stehen.

                  Falls das nicht klappt, dann schicke mir bitte deine Konfig über eine PN. Lässt sich besser lesen.

                  lG Looxer

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

                    @eastcoast:

                    Beim Tageswechsel (vermutlich auch Woche, Monat und Jahr) werden die Werte nicht auf 0 zurückgesetzt. `

                    Hallo eascost

                    noch eine Frage: schau dir bitte mal das log an. Um 00:04 sollte ein LogEintrag vorhanden sein:

                    "EVENT Betriebsstundenzaehler werden zurueckgesetzt TAG: …....."

                    Wenn der nicht da ist, dann wurde die schedule funktion nicht aufgerufen. Das könnte mehrere Ursachen haben:

                    • läuft noch was um diese Zeit im System ?

                    • systemseitig irgend ein Problem mit schedule ?

                    Falls das log ausgeführt wurde und trotzdem nicht zurückgesetzt wurde, dann brauche ich mal dein Programm.

                    Damit würde ich das bei mir debuggen.

                    vG Looxer

                    1 Reply Last reply Reply Quote 0
                    • E
                      eastcoast last edited by

                      @looxer01:

                      @eastcoast:

                      Beim Tageswechsel (vermutlich auch Woche, Monat und Jahr) werden die Werte nicht auf 0 zurückgesetzt. `
                      noch eine Frage: schau dir bitte mal das log an. Um 00:04 sollte ein LogEintrag vorhanden sein:

                      "EVENT Betriebsstundenzaehler werden zurueckgesetzt TAG: …....." `
                      Hallo Looxer,

                      erstmal vielen Dank für deine rasche Unterstützung!

                      Leider kam ich erst jetzt dazu, mir das anzusehen:

                      ! Schedule scheint zu passen:

                      javascript.0 script.js.test: EVENT Betriebsstundenzaehler werden zurueckgesetzt TAG:09 Wochentag 0Monat 10
                      >! ````
                      Habe das ganze mittels log Ausgaben bis in
                      

                      function TimeNull(...)

                      ! ````
                      weiterverfolgt, hier scheint dann die Nullung bei folgender Abfrage zu scheitern:

                      //  zurücksetzen der  DAY  variablen
                      ...
                      if (ObjectExists(updateobj))  {
                      ...
                      >! ````
                      Die Objekte scheinen aber korrekt zu exisitieren:
                       ![1408_clipboard01.jpg](/assets/uploads/files/1408_clipboard01.jpg) 
                      1 Reply Last reply Reply Quote 0
                      • E
                        eastcoast last edited by

                        @eastcoast:

                        @looxer01:

                        @eastcoast:

                        Beim Tageswechsel (vermutlich auch Woche, Monat und Jahr) werden die Werte nicht auf 0 zurückgesetzt. `
                        noch eine Frage: schau dir bitte mal das log an. Um 00:04 sollte ein LogEintrag vorhanden sein:

                        "EVENT Betriebsstundenzaehler werden zurueckgesetzt TAG: …....." `
                        Hallo Looxer,

                        erstmal vielen Dank für deine rasche Unterstützung!

                        Leider kam ich erst jetzt dazu, mir das anzusehen:

                        ! Schedule scheint zu passen:

                        javascript.0 script.js.test: EVENT Betriebsstundenzaehler werden zurueckgesetzt TAG:09 Wochentag 0Monat 10
                        >! ````
                        Habe das ganze mittels log Ausgaben bis in
                        

                        function TimeNull(...)

                        ! ````
                        weiterverfolgt, hier scheint dann die Nullung bei folgender Abfrage zu scheitern:

                        //  zurücksetzen der  DAY  variablen
                        ...
                        if (ObjectExists(updateobj))  {
                        ...
                        >! ````
                        Die Objekte scheinen aber korrekt zu exisitieren:
                        >! Clipboard01.jpg `  
                        

                        Habe gerade meinen Fehler gefunden:

                        Meine Feldnamen in "var logname" enthielten ein Leerzeichen! :oops:

                        Sorry dass ich Dich belästigt habe.

                        Nochmals vielen Dank für Dein Skript und Deine Hilfe!

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

                          @eastcoast:

                          Meine Feldnamen in "var logname" enthielten ein Leerzeichen! :oops: `

                          super - sehr gut. Hätte ich wahrscheinlich erst beim Debugging gesehen.

                          Eigentlich habe ich versucht die meisten Fehler abzufangen entweder durch Korrektur oder durch Hinweise im Log. -

                          bei einem Skript ist es eben was anderes als in der Dialog Programmierung.

                          bezüglich deiner Format habe ich mir Gedanken gemacht.

                          Ich speichere die ermittelten Werte für TIME immer in ms ab. Somit liesse sich jederzeit eine Umrechnung vornehmen und auch eine Aenderung der Umrechnung.

                          Ich könnte mir vorstellen eine flexible Lösung zu machen mit allen Konstellation von links nach rechts, also

                          DDD:HH:MM:SS:MS beispielsweise auch für DDD oder MM oder MS oder HH:MM etc

                          Ich schaue mir das am nächsten WE an.

                          lG Looxer

                          1 Reply Last reply Reply Quote 0
                          • R
                            ralalla last edited by

                            Noch mal bitte eine kurze Info zu State und Level.

                            Ich will z.B. aus einem Wert 0-100% Betriebsstunden erzeugen.

                            Ab 1% soll die Zeit laufen.

                            Im ioBroker wird der Wert unter "Typ" mit state dargestellt und unter "Rolle" auch.

                            Der Wert selbst als 0-100%.

                            Kann ich den Wert in dem Zustand verarbeiten ?

                            Also würde meine Geräte ID so aussehen: hm-rega.0.6822.7155.state

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

                              Hallo Ralalla,

                              Deine GeräteID deutet nicht auf ein Level Gerät hin.

                              Ein State Gerät hat vordefinierte zustände wie z.B. "aus" oder "ein".

                              Ein Level Gerät zeigt den Zustand in Prozent an, wobei 1% z.B. 1% geöffnet oder eingeschaltet heisst. (Beispiel Rolllade oder Dimmer")

                              Ein Level-Gerät wird im Programm als solches erkannt wenn in der ID ein "LEVEL" enthalten ist. Das ist bei deiner ID nicht der Fall.

                              Um was für ein Gerät handelt es sich denn ?

                              vG Looxer

                              1 Reply Last reply Reply Quote 0
                              • R
                                ralalla last edited by

                                Das sind z. B. Werte meiner Heizung. Die lese ich aus dem Ebus aus über cuxd

                                Gesendet von iPhone mit Tapatalk

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

                                  @ralalla:

                                  Das sind z. B. Werte meiner Heizung. Die lese ich aus dem Ebus aus über cuxd `

                                  aaah, sorry. Das sollte ich gesehen haben, da es ja REGA werte sind.

                                  Es gibt zwar die States 9-18, die man loggen kann aber das hilft dir nicht da ich verstehe, dass es ja beliebige Zahlen zwischen 1 bis 100 betreffen kann.

                                  Es gibt zwei Möglichkeiten.

                                  1 Programm Anpassung für deinen Fall um den Level Fall anzuwenden für diese ID

                                  2 Du schreibst ein Mini-Programm und setzt ein Flagg auf "true", wenn der Wert groesser 0 ist und auf "false", wenn der Wert = 0 ist.

                                  Dann kann der BSZ die Zeiten exakt messen. Nr. 2 ist wenig Aufwendig und wäre somit der bessere Weg.

                                  vG Looxer

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

                                    Hallo looxer,

                                    Viele Dank für Dein Script ich nutze es zur Laufzeitmessung, Zählen Schaltvorgänge und zur Energiemessung(Strom,Gas, Wasser).

                                    Es funktioniert Supi, nun zu meiner Frage ..gibt es die Möglichkeit alte Zählerstände einzutragen und wenn ja wo.

                                    Am besten wäre so eine Funktion wie bei deinem Stromzähler mit HT und NT

                                    Grüße Steffen

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

                                      @syber:

                                      .gibt es die Möglichkeit alte Zählerstände einzutragen und wenn ja wo. `

                                      im Prinzip ja. Ich mache das auch so bei meiner Pelletverbrauchsrechnung (time)

                                      Dazu nutze ich das Widget JQUI Input.

                                      Gib mir doch mal deine Konfig und sage mir wo du Korrekturen machen möchtest. Dann schaue ich mir das an

                                      vG Looxer

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

                                        Hallo,

                                        es geht um Gruppe 24 und 25

                                        edit aber mache es bitte nicht so schwer …ich hab 0 Ahnung vom Script 😉
                                        842_bsz.txt

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

                                          Hi,

                                          vielen Dank für die Konfig.

                                          Wenn ich das richtig sehe, dann hast du fuer Strom einen EnergyCounter. (bei Gas wirds ja aehnlich funktionieren)

                                          Dieser liefert regelmaessig (z.B. alle 30 sekunden) einen Wert vom Counter.

                                          Die Konfig ist auf Delta eingestellt. Damit wird die Differenz jeweils vom letzten Zaehlerstand gezogen.

                                          So weisst du den Verbrauch. Der Verbrauch wird in DAY WEEK Month YEAR gespeichert.

                                          Den Zaehlerstand kannst du nicht direkt beeinflussen, denn der kommt ja immer vom energy-counter.

                                          Den Verbrauch kannst du jederzeit manuell korrigieren, da ja immer die Differenz auf DAY WEEK MONTH YEAR aufgeschlagen wird.

                                          Es gibt mehrere Möglichkeiten auf den Zaehlerstand einfluss zu nehmen,

                                          1. durch Umrechnen.

                                          In der Tabelle special kannst du einen Wert addieren oder subtrahieren, was einer Korrektur gleichkommt.

                                          2. durch individuallogik (indivduelle Erweiterung innerhalb des scriptes)

                                          das ist schon etwas aufwendiger und muesste programmiert werden

                                          Wie oft kommen denn solche Korrekturen vor ?

                                          vG Looxer

                                          1 Reply Last reply Reply Quote 0
                                          • E
                                            ein-bayer last edited by

                                            Hallo,

                                            das ist ja ein super script !! Hab es relativ schnell hinbekommen.

                                            Ich benutze es zur kwh erfassung meiner Zähler. Ich habe jetzt testweise 2 Zähler angelegt und wollte die Anzeige in KWH haben. Der Eintrag in Tabelle special wirkt sich nicht auf das Ergebnis der Objekte aus, hier bekomme ich zb 625.121. Der Wert entspricht der Beobachtung nach der gemessenen Leistung in Watt

                                            Hab ich etwas falsch eingestellt?
                                            1342_bildschirmfoto_2017-01-22_um_19.16.26.png
                                            1342_bildschirmfoto_2017-01-22_um_19.17.27.png

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            413
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            51
                                            333
                                            78711
                                            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