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

      Hi,

      das sollte ohnehin schon funktionieren. Das Prinzip ist ja wie beim Stromzähler.

      Ein Wert kommt rein und dieser ist der letzte Stand. Differenzbildung zum vorherigen Stand ist der Verbrauch.

      Der Unterschied ist, dass sich der letzte Stand beim Stromzähler immer erhöht während er sich bei dir immer verringert. (negative Verbrauchswerte)

      Ich habe das Feedback, dass der Stromzähler funktioniert, also wird es wohl auch bei dir schon jetzt gehen, und zwar mit der Methode DELTA.

      Die Differenz wird dabei immer gebildet, wenn der Zählerstand eingeht und in die Perioden (Tag,Woche,Monat,Jahr) eingetragen.

      Wäre super, wenn du das mal testen könntest.

      Mit der Version 0.65 kommt dann noch der Vorperiodenwert.

      Damit hast du nur einen update je Periode (Tag,Woche,Monat,Jahr), der sich erst bei Periodenwechsel ändert.

      vG Looxer

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

        Anwendungsbeispiel Stromverbrauch

        291_obj-verbrauch.png

        291_verbrauch.png

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

          Anwendungsbeispiel bool offset , Darstellung von mehreren Statussignalen übereinander

          291_mehrfachgraph.png
          291_objecttree.png

          genauere Anleitung hier: http://forum.iobroker.net/viewtopic.php … 933#p19780

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

            Hi,

            es gibt ein umfängliches update - Jetzt Version 0.70. (siehe erster Post)

            Da die Einstellungen doch recht komplex sind habe ich ich eine recht ausführliche Dokumentation hinzugefügt.

            Dafür sind die Beschreibungen im ersten Post gekürzt

            major changes:

            ….........Version 0.70 Die Datenpunkte werden jetzt nicht zurückgesetzt sondern geloescht, wenn das loeschkennzeichen gesetzt wird

            ............................bei der Berechnung der Methoden ist ein Divisor eingefügt worden um leichter von Millisekunden auf Verbrauchswerte zu rechnen, oder auch für alternative Darstellungen für Zeitwerte

            ............................DELTAM - Methode hinzugefügt um automatische Tankmessungen zu unterstützen (absteigende gemeldete Werte)

            ............................Zusammenführung der Methoden ADD und SUB in TIME. Das wird durch die Anwendung der Rechenregel auch für TIME gemacht. Damit kann bei negativen faktor SUB - also Bestandsrechnung umgesetzt werden

            ............................Auch kann jederzeit von Darstellung DDDD:HH:MM:SS auf Sekunden/Minuten/Stunden/Tage etc durch Umrechnung umgestellt werden

            ............................Durch Tabelle specials kann eingestellt werden, ob der BSZ für einen Datenpunkt auf ack = true oder false reagieren soll (false sitzt i.d.R. bei selbsdefinierten Datenpunkten)

            ............................Die Anzal der möglichen IDs ist auf 26 erhöht

            ............................Eine Fluktuationsgrenze für Delta und deltaM ist in Tabelle special eingefügt. Bei blank(also '') wird 100 angenommen. Damit können Schwankungen von Messgeraeten ausgeglichen werden (i.d.R sollte 100 ausreichend sein)

            ............................Zur Vermeidung von Eingabefehlern in den Tabellen sind Zahlen in hochkomma erlaubt aber auch Zahlen ohne hochkomma- bei der Angabe von status true/false ist ebenfalls beides möglich

            ............................Es besteht die Möglichkeit eine Individuallogik einzubauen. Beispiel ist hier "oekofen". Der gemessene Wert wird vor Anwendung der Rechenregel an die function individual(funktion,nummer,runtime) gegeben.

            ............................wobei funktion = Name der Individual-Funktion / nummer = nummer des Geraetes aus der ersten Tabelle / runtime = gemessener Wert und Rückgabewert (damit wird der gemessene Wert uebersteuert)

            ............................Tabelle special Nummer 10 eingefügt zur Vorbereitung einer gleitenden Durchschnittsberechnung

            ............................Es wurden Reserveplätze für tabelle specials eingefügt (10 und 11).

            ............................Logging fuer die Aenderung von Datenpunkten wurde erneuert

            vG Looxer

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

              Hi,

              die funktionale Entwicklung ist jetzt so gut wie beendet. Also, mir fällt nicht mehr so viel ein: 😄

              Die Version 0.90 ist jetzt hochgeladen (erster Post) und hat folgende Erweiterungen:

              • Durchschnittsfunktion um z.B. Durchschnittliche Temperaturen (z.B. Aussentemperatur) oder durchschnittliche Einschaltzeiten zu loggen

              Die Funktion kann für alle Methoden (TIME, DELTA und CALC) verwendet werden.

              • Schedulefunktion als Alternative zu den Triggern. Um z.B. eine Mittagstemperatur zu loggen und nicht 24 Stunden jede Temperatur oder auch um z.B.

              nicht immer alle Messwerte eines Sensors zu verarbeiten sondern ggf nur stündlich etc. Das macht natürlich keinen Sinn bei Methode TIME

              • Es wurden wesentlich mehr Absicherungen eingebaut, um Fehleingaben zu vermeiden. (Plausibilitätsprüfungen, Defaultwerte etc)

              • Die Dokumentation enthält jetzt auch eine Programmablaufbeschreibung mit Referenzpunkten zum Programm.

              Aufgrund der Veränderungen habe ich mich entschieden die History auf Level der Perioden zu verschieben. Und auch die Perioden umzubenennen, um eine sinnvolle Reihenfolge zu zeigen. Wie damit umgegangen werden kann steht im ersten Post.

              vG Looxer

              1 Reply Last reply Reply Quote 0
              • Thisoft
                Thisoft last edited by

                Hallo Looxer,

                zuerst einmal ein großes Kompliment für das Script. Ich habe jetzt gerade die ersten Implementierungen vorgenommen. Mal sehen was so rauskommt, ob ich alles richtig verstanden habe 😉

                Allerdings vermisse ich noch etwas - ich hätte gerne für eine Temperatur die Max und Min Werte über die jeweiligen Zeiträume mit ausgewertet. Habe ich die Funktion nur nicht gefunden oder hast Du das wirklich noch nicht eingebaut :?: 😉

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

                  Hallo Thisoft, das ist tatsächlich noch nicht eingebaut, allerdings schon zu 60 % entwickelt, dann beende ich das mal über das WE und stelle eine neue Version ein 🙂

                  VG looxer

                  Gesendet von meinem S600 mit Tapatalk

                  1 Reply Last reply Reply Quote 0
                  • Thisoft
                    Thisoft last edited by

                    Hallo Looxer,

                    das ist super dass Du das schon mit geplant hast. Ich will dir damit aber keinesfalls das schöne lange Wochenende verderben! Es drängelt nicht so sehr. Mach das wenn du mal Zeit hast.

                    Vielen Dank und einen schönen Männertag.

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

                      Hi,

                      es gibt eine neue Version (jetzt 0.95) mit drei neuen Funktionen

                      • Minimum und Maximum Werte könnten geloggt werden (z.B. Temperaturen ) Das kann eingestellt werden für alle Methoden

                      • Sonderfunktion Mehrfachstatus (wird wohl die Ausnahme sein) Falls es gewünscht ist auch ohne effektive Statusänderung zu loggen (siehe Doku)

                      • Selektives Logging = Erzeugen von Excel Dateien für einzelne Datenpunkte , (z.B. um die Daten in Excel weiter zu verarbeiten.

                      vG Looxer

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

                        Ich habe gerade -danke an Thisoft- festgestellt, dass die Version 0.95 nicht korrekt hochgeladen war.

                        Daher steht jetzt Version 0.96b bereit.

                        vG Looxer

                        1 Reply Last reply Reply Quote 0
                        • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            443
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

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