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

      Danke an euch.

      und das habe ich draus gemacht.

      • addzero angepasst (spart mir ja auch eine Funktion 🙂

      • die nicht verwendeten Funktionen entfernt. (die kamen noch aus den Tagen wo ich nicht sicher war ob ich Millisekunden abspeichern sollte)

      • mit formatDate konnte ich nicht soviel anfangen, da ich ja kein Datum sondern eine Laufzeit berechne/darstelle

      • log(….,"info") korrigiert

      mittlerweile habe ich auch tages/wochen/monats/Jahressummen implementiert. Kann man je Gerät unterscheiden was man haben will.

      Heute war ja ein guter Tag zum Testen: Monatsanfang, Wochenanfang, und Tagesanfang ja sowieso 🙂

      (aber leider gibt es ja so massive probleme mit der cron schedule Funktion)

      Ich muss nur noch das externe Log erweitern und die Zeitabschnittsverbräuche dort fortschreiben (auf Wunsch)

      @Pix: es wäre super, wenn du mal schauen kannst ob mit der Anpassung des Pfades das externe Log geschrieben wird.

      vG Looxer

      EDIT: so sieht es dann in denn Objekten aus inklusiver der Zeitabschnitte wo sie definiert wurden
      305_bsz1.jpg

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

        Version 0.5 ist jetzt eingestellt mit der zusätzlichen Funktionalitaet:

        • Zeitabschnitt-Logging - Betriebszaehler je ID einstellbar fuer Tag, Woche, Monat, Jahr

        für den Refresh ist ein Cron Schedule vorhanden, der aber aufgrund eines Fehlers im scheduler nicht funktioniert.

        Die Funktion ist getestet aber der scheduler eben nicht. (steht im Moment auf alle 24 Stunden )

        Was noch fehlt ist das logging fuer die Zeitabschnitte.

        vG Looxer

        1 Reply Last reply Reply Quote 0
        • P
          pix last edited by

          Hallo Looxer,

          Kleinigkeit für die Funktion createStates

          Du hast ja oben im Array auf Position [2] eine Bezeichnung der Geräte gespeichert. Die Bezeichnung kannst du gut als Beschreibung oder besser Name in den Befehl createState übernehmen.

          if (Gruppen[zaehler][4] === true) {                                                  // soll eine WEEK kumulations Variable angelegt werden ?
                              createState(sysLocation + '.Grp' + zaehler2 + 'Kum.WEEK',   0);
                              createState(countLocation + "." +  Gruppen[zaehler][1] + ".WEEK",   "000:00:00:00", { name: 'Betriebstunden ' + Gruppen[zaehler][2] } );
                          }                
          
          

          Das ist neu:

          , { name: 'Betriebstunden ' + Gruppen[zaehler][2] }

          Dann wird die Übersicht im Reiter Objekte auch besser.

          Gruß

          Pix

          Edit: 'Betriebstunden ' + zugefügt

          1 Reply Last reply Reply Quote 0
          • P
            pix last edited by

            Hi,

            Thema externes Log:

            Es funktioniert, wenn ich unter OS X den ganzen Pfad eingebe:

            var LogPath         = "/Users/pix/Documents/iobroker/iobroker-data/BSZLog.csv";             // Pfad und Dateiname des externen Logs
            var TimeLogPath     = "/Users/pix/Documents/iobroker/iobroker-data/BSZTimeLog.csv";     // Pfad und Dateiname des externen Logs für die Zeitabschnitte täglich, wöchentlich monatlich jährlich
            
            ````Das musst du also auch noch etwas personalisieren.
            
            /Users/pix/Documents/iobroker/iobroker-data/BSZLog.csv
            
            OS X spezifisch Rest überall gleich
            
            wobei das System nicht zwangsläufig im Ordner iobroker installiert sein muss. Der ordner kann auch anders heißen.
            
            Was steht dann im Log um Mitternacht? Die gesamtzeit des Tages?
            
            Gruß
            
            Pix
            1 Reply Last reply Reply Quote 0
            • L
              looxer01 last edited by

              Hi Pix,

              habs gerade mal getestet und es funktioniert.

              Allerdings verwirrt es mich eher. Besser waere es, wenn es als zusätzliche Beschreibung dienen könnte, z.B. beim Maus drüberfahren.

              Aber das geht wohl nicht ?

              vG Looxer
              5087_unbenannt.jpg

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

                @pix:

                Was steht dann im Log um Mitternacht? Die gesamtzeit des Tages? `
                Ja, so ist es gedacht. Um Mitternacht soll der Wert dann gesichert werden und dann genullt.

                vG Looxer

                1 Reply Last reply Reply Quote 0
                • P
                  pix last edited by

                  Hallo Looxer,

                  deine Protokollierung in eine Datei hat mich nicht mehr losgelassen. Habs jetzt in meinen Zähler auch eingebauthttp://forum.iobroker.org/viewtopic.php?f=21&t=2175&p=18886&sid=928d466eba6d7bb5516ff63754ad60cf&sid=928d466eba6d7bb5516ff63754ad60cf#p18886. Vielen Dank!

                  Gruß,

                  Pix
                  14780_2019-01-11_12h01_02.png

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

                    Hey Pix,

                    freut mich, ist doch super, dass wir hier uns gegenseitig Ideen und Hilfen geben und auch Alternativen bieten.

                    (oder vielmehr, dass ich das auch mal kann 🙂 )

                    Das Forum hier ist eh das Beste.

                    vG Looxer

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

                      Hi,

                      ich habe jetzt die finale Version des BSZ eingestellt. Das Logging baue ich dort nicht mehr weiter aus.

                      Diese Version ist stabil und kann fuer einfaches Logging verwendet werden.

                      jetzt baue ich den BSZ um und mache eine erweiterte Version daraus. Der wird aber eine andere Struktur haben bzw. die Variablen werden anders strukturiert, daher sind die beiden Versionen nicht kompatibel.

                      Funktionen:

                      • Das Wichtigste ist, dass ich die Begrenzung auf True/false bzw. 0/100 aufheben möchte und bis zu 10 frei einstellbare Status loggen möchte.

                      z.B. für Heizungen oder Geräte mit Status ungleich true/false z.B. Wassermelder etc. Auch ist es dann möglich z.B. nur auf false zu loggen statt auf true. (Bei mir ist ein Gerät leider so eingestellt und das werde ich auch nicht mehr ändern) Das ist quasi ein Abfallprodukt.

                      • Pix Idee zum loggen der Schaltungen möchte ich ebenfalls übernehmen, wobei jeder Statuswechsel gezählt werden soll.

                      • Ausbau des Loggings

                      vG Looxer

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

                        Hi,

                        ich habe den erweiterte Betriebsstundenzaehler im ersten post hochgeladen.

                        Der kann jetzt deutlich mehr. Beispiele:

                        • jeder einzelne Status einer Variablen / Geraet kann geloggt werden. z.B. Sinnvoll bei Heizungen etc

                        • Eine Geraet kann daher auch -wenn gewünscht auf true und false geloggt werden dann werden die Zeiten für ein und aus getrennt geloggt

                        • Für die Status können sprechende Namen verwendet werden statt der status namen (z.B. statt 01 = Brenner_Laeuft)

                        • LEVEL geraete sind einstellbar ab wann sie als eingeschaltet gelten z.B.wird dann erst geloggt wenn der Dimmer mehr als 20% eingeschaltet ist

                        • Ein Zaehlwerk von Schaltvorgängen kann wahlweise aktiviert werden

                        • Kumulation kann auf tag,woche,monat, jahr wahlweise eingestellt werden.

                        Was noch fehlt ist das logging in eine EXCEL - Datei . Da muss ich noch ran :shock:

                        vG Looxer

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

                          Hi,

                          Super Sache und Danke für's Teilen!

                          Kleine Anmerkung: in der .txt steht beim Datum 2015 statt 2016 :ugeek:

                          Beste Grüße,

                          Rob

                          1 Reply Last reply Reply Quote 0
                          • P
                            pix last edited by

                            Hallo Looxer,

                            ich finde auch, dass du da schon richtig was geschafft hast. Super!

                            Es wird mir aber zu unübersichtlich. Es soll ja generisch sein. Es ist aber schon recht kompliziert, neue Geräte einzutragen. Die vielen Spalten im Array verwirren. Vielleicht solltest du alle Einstellungen eines Gerät zusammenfassen (besser untereinander, auch wenn das Skript länger wird), damit man nicht an verschiedene Stellen im Skript springen muss. Wenn dann jede Einstllungsmöglichkeit kurz kommentiert ist, fällt es dem Nutzer leichter.

                            Gruß

                            Pix

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

                              Schreib ein Adapter 😄

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

                                @pix:

                                Hallo Looxer,

                                Vielleicht solltest du alle Einstellungen eines Gerät zusammenfassen (besser untereinander, auch wenn das Skript länger wird),

                                Pix `
                                habs mal versuchsweise gemacht - siehe unten- Ich bin mir nicht so sicher. das werden 700 Zeilen.

                                @Bluefox:

                                Schreib ein Adapte `
                                ist mir klar. Das schreit ja danach. Wäre auch gut für die Anwesenheitssimulation.

                                ABER - keine Ahnung wie ich überhaupt damit anfangen sollte.

                                Wahrscheinlich brauchts eine komplette Entwicklungsumgebung /Raspi/ioBroker/Webstorm damit das produktiv system nicht leidet.

                                Dann ist eine Oberflächenentwicklung ja noch etwas vollkommen anderes als eine einfache script entwicklung….

                                vG Looxer

                                ! var Gruppen = []; Gruppen[0] = /*1.Homematic ID, */ ['hm-rpc.0.JEQ0036841.1.STATE' , // der Text "initial" muss eingetragen sein fuer nicht genutzte Zeilen. Es funktionieren alle LEVEL und STATE Geraete und alles was mit true und false belegt werden kann /*2.Feldname(no spaces)*/ 'Licht_WZ_EsstischStehlampe' , // ist der Variablenname unter dem die Betriebszeiten in ioBroker abgelegt werden. Wichtig: keine Sonderzeichen und keine Spaces verwenden. Statdessen aber Unterstriche eintragen /*3.Freie Beschreibung */ 'Licht Wohnzimmer Esstisch Stehlampe' , //st frei zu vergebener Text (Beschreibung) /*4.DAY */ true , // Variable DAY wird angelegt und kumuliert - täglicher refresh - keine Hochkomma /*5.Week */ true , // Variable DAY wird angelegt und kumuliert - täglicher refresh - keine Hochkomma /*6.Month */ true , // Variable DAY wird angelegt und kumuliert - täglicher refresh - keine Hochkomma /*7.Year */ true , // Variable DAY wird angelegt und kumuliert - täglicher refresh - keine Hochkomma /*8.Switch */ true, // Verwendung eines Zaehlers um die Statuswechsel (anzahl Schaltungen) zu zaehlen /*9 - 18 Status to log */ 'true' , //9 - 18 Eingabe was gezaehlt werden soll. Jeder Eintrag erzeugt eine variable in den Objekten. Sobald ein Status des Homematic-ID gesetzt wird, wird die Zeit bzw. die Anzahl der Schaltvorgaenge gespeichert /*10- 18 Status to log */ '' , //Status kann in hochkomma anagegeben werden z.B. '100' oder 100\. Für Level Geraete wird nur ein Status berücksichtigt. Der Status kann von 0 - 100 eingegeben wird - empfohlen ist 1\. /*11 - Status to log */ '' , // Als eingeschaltet wird alles groesser gleich dem eingegebenen Wert berechnet /*12 - Status to log */ '' , /*13 - Status to log */ '' , /*14 - Status to log */ '' , /*15 - Status to log */ '' , /*16 - Status to log */ '' , /*17 - Status to log */ '' , /*18 - Status to log */ '' , /*19 - Status to log */ /*Refresh */ false // Refresh. Es werden alle Daten geloescht. Solange Refresh auf true steht werden keine neuen Daten aufgezeichnet ]; Gruppen[1] = /*1.Homematic ID, */ ['hm-rpc.0.JEQ0199306.1.LEVEL' , /*2.Feldname(no spaces)*/ 'Licht_WZ_EsstischDecke' , /*3.Freie Beschreibung */ 'Licht Wohnzimmer Esstisch Deckenlampe' , /*4.DAY */ true , /*5.Week */ true , /*6.Month */ false , /*7.Year */ false , /*8.Switch */ true, /*9 - 18 Status to log */ 'true' , /*10- 18 Status to log */ '' , /*11 - Status to log */ '' , /*12 - Status to log */ '' , /*13 - Status to log */ '' , /*14 - Status to log */ '' , /*15 - Status to log */ '' , /*16 - Status to log */ '' , /*17 - Status to log */ '' , /*18 - Status to log */ '' , /*19 - Status to log */ /*Refresh */ false ]; !

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

                                  Version 030 ist jetzt hochgeladen mit folgenden Erweiterungen:

                                  ….........Version 0.30

                                  • Externes Logging (Excel) ist implementiert und kann aktiviert werden und zwar fuer jeden aufgezeichnete Statuswechsel und fuer genullte Werte

                                  • HISTORY ist implementiert und kann aktiviert werden fuer Monat und Jahr (genullte Werte werden in Form JJJJMM gesichert

                                  Rahmen der History funktion wurde die freie Bezeichnung entfernt, da sie nirgendwo im Programm genutzt wurde

                                  • Refresh variable ist einstellbar. Vorläufige Funktion: Updates werden ignoriert falls auf true

                                  vG Looxer

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

                                    Hi,

                                    Version 0.40 ist im ersten post hochgeladen.

                                    Es gab noch einige grundsätzliche Fehler in der Vorversion beim Monats bzw. Jahreswechsel.

                                    Das sollte jetzt funktionieren.

                                    Ich selber setze den Zaehler jetzt produktiv ein.

                                    vG Looxer
                                    144_total01.png
                                    144_total02.png

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

                                      und jetzt ist die Version 0.60 hochgeladen mit wesentlich erweitertem Funktionsumfang.

                                      Ich habe den ersten Post upgedated mit einer umfangreicheren Beschreibung.

                                      Wesentlich ist das neue Methoden hinzugekommen sind die Berechnungen ermöglichen, die über zeitdifferenzbildung hinausgehen.

                                      Das wird z.B. benötig für Ölverbrauchs-Stromverbrauchs,Pelletverbrauchs Rechnungen in KG/Wh, kWh, Euro etc.

                                      vG Looxer

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

                                        gelöscht - update folgt

                                        1 Reply Last reply Reply Quote 0
                                        • blauholsten
                                          blauholsten Developer last edited by

                                          Wollte mal ein kurzes Feedback geben. Erstmal grosses Lob für die tolle Arbeit!!!!!!!!!!!!

                                          Ich nutze "Ihn" seit einigen Tagen produktiv, ohne Fehler! Klappt alles wunderbar, hoffe aber dennoch das du nicht wieder eine neue Version raus bringst! 😄 😉 …Denn die Arrays umzuschreiben macht etwas Arbeit. :oops:

                                          Gibt es die Möglichkeit das man z.B. auch einen Tagesverbrauch oder ähnliches machen kann? ...Überwache meine Öltanks, und mache in einem ähnlichen Skript einen Tages, Wochen-verbrauch usw... würde das gerne alles in deinem Skript machen!

                                          Mfg blauholsten

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

                                            Hi blauholsten,

                                            Das freut mich, dass es jemand einsetzt 🙂

                                            die Time Funktion ist -glaube ich- recht stabil. Auch die Stomverbauchsmessung läuft.

                                            Für andere Funktionen musste ich doch noch tiefer in die Programmierkiste greifen.

                                            Die neue Version 0.65, die bald fertig ist:

                                            Die kann alles was Verbrauch und Silo braucht. Dafür musste ich aber noch die Tabelle "special" anpassen.

                                            Ansonsten sind keine weiteren Änderungen notwendig

                                            Ich teste die Version aber noch ein wenig bevor ich sie hochlade.

                                            Für Silorechnung kannst du dann folgendes machen:

                                            • Messung der Füllzeiten anhand der Laufzeiten der Düse vermute ich mal (irgendwoher muss ja die Grundlage kommen)

                                            • Umrechnung in Literverbrauch mit Kumulation und darstellung in perioden (DAY,WEEK,MONTH,YEAR) inklusiver Vorperioden für die Graphische Darstellung

                                            • Darstellung des Restbestandes im Tank/Silo. (Subtraktion des Verbrauches fom letzten Tankstand). Der Tank muss natürlich dann nach Füllung auf "voll" gesetzt werden

                                            • Umrechnung in Euroverbrauch mit Kumulation und darstellung in perioden inklusiver Vorperioden für die Graphische Darstellung

                                            • Darstellung des AN AUS Zustandes der Düsenlaufzeit auch in Werten wie z.B. 1 und zwei statt true und false (So lassen sich die Schaltzustände in FLOT darstellen (Dafür gibt es eine neue Methode "BOOL"

                                            Zusätzlich lassen sich alle Datenpunkte auch wieder automatisch loeschen (nicht nur nullen). Falls mal was umgebaut werden muss

                                            Ich selber habe eine Schnecke deren Schnittstelle dummerweise immer false meldet, wenn sie läuft. Dafür habe ich noch eine Reverse funktion eingebaut. Ist aber wohl special

                                            Ich hoffe, dass ist es was du brauchst.

                                            vG Looxer

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            892
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

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