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. Skripten / Logik
  4. [Vorlage] Betriebsstundenzähler & Verbrauchsrechner

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    5
    1
    160

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    8
    1
    183

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    879

[Vorlage] Betriebsstundenzähler & Verbrauchsrechner

Scheduled Pinned Locked Moved Skripten / Logik
javascript
333 Posts 51 Posters 98.7k Views 26 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.
  • L Offline
    L Offline
    looxer01
    wrote on last edited by
    #107

    Hi,

    also in der Ersten Spalte von Gruppen muss ein gueltiger Datenpunkt eingetragen sein.

    Für einen State-Daenpunkt sähe das so aus

    Gruppen[ 0] = ['hm-rpc.0.MEQ0183268.1.STATE',…............................]

    Um den richtigen Datenpunkt zu erhalten kannst du z.B. einfach in die Objektliste gehen und das kleine Icon drücken, das in der Zeile des Datenpunktes, bei der Bezeichnung des Datenpunktes sichtbar wird, wenn du mit der Maus drüber gehst. Wenn du dieses Icon drückst und dann per ctrl-v im script einfügst hast du den richtigen Datenpunkt

    Auf jeden Fall hast du die Methode Time gewählt mit diesen Einstellungen. Ist ja auch gut so.

    Für die zweite Spalte ein Thema. Ist eine Frage wie du das organisieren möchtest. Ein Vorschlag wäre:

    Gruppen[ 0] = ['hm-rpc.0.MEQ0183268.1.STATE', "Pumpen",…...............]

    Wichtig ist dann noch die Tabelle "special" dort trägst du im Faktor und Divisor. Bitte beachte, dass die Zeit in Millisekunden gemessen wird.

    Für Minuten musst du also durch 60000 teilen, um dann mit dem Faktor zu multiplizieren, der ja den Verbrauch Liter in Minuten darstellen soll

    vG Looxer

    1 Reply Last reply
    0
    • D Offline
      D Offline
      Dice19
      wrote on last edited by
      #108

      Danke für Die Hilfe.

      Hab das soweit angepasst.

      Erscheint dann unter Objekte - javascript - Betriebsstundenzähler der neue Datenpunkt für die Zeit bzw den Wert?

      Bei mir taucht nur das script auf wo ich die Tabelle drin ist… :(

      @looxer01:

      Hi,

      also in der Ersten Spalte von Gruppen muss ein gueltiger Datenpunkt eingetragen sein.

      Für einen State-Daenpunkt sähe das so aus

      Gruppen[ 0] = ['hm-rpc.0.MEQ0183268.1.STATE',…............................]

      Um den richtigen Datenpunkt zu erhalten kannst du z.B. einfach in die Objektliste gehen und das kleine Icon drücken, das in der Zeile des Datenpunktes, bei der Bezeichnung des Datenpunktes sichtbar wird, wenn du mit der Maus drüber gehst. Wenn du dieses Icon drückst und dann per ctrl-v im script einfügst hast du den richtigen Datenpunkt

      Auf jeden Fall hast du die Methode Time gewählt mit diesen Einstellungen. Ist ja auch gut so.

      Für die zweite Spalte ein Thema. Ist eine Frage wie du das organisieren möchtest. Ein Vorschlag wäre:

      Gruppen[ 0] = ['hm-rpc.0.MEQ0183268.1.STATE', "Pumpen",…...............]

      Wichtig ist dann noch die Tabelle "special" dort trägst du im Faktor und Divisor. Bitte beachte, dass die Zeit in Millisekunden gemessen wird.

      Für Minuten musst du also durch 60000 teilen, um dann mit dem Faktor zu multiplizieren, der ja den Verbrauch Liter in Minuten darstellen soll

      vG Looxer `

      1 Reply Last reply
      0
      • L Offline
        L Offline
        looxer01
        wrote on last edited by
        #109

        ja, unter objecte javascript.

        Der Pfad darunter ist komplett anpassbar.

        Standard ist

        BSZ

        Counter

        Folge ich den Einstellungen von oben dann sieht es so aus:

        BSZ

        Counter

        Pumpen

        Garten_Pumpen_Überwachung

        DAY

        Week

        Month

        YEAR

        …. aus dem Gedächtnis, da ich kein System zur Verfügung habe.

        vG Looxer

        1 Reply Last reply
        0
        • D Offline
          D Offline
          Dice19
          wrote on last edited by
          #110

          Bei mir hat er nix neues erstellt. Anbei ein Foto von meinem Objekte - Javascript
          2120_betriebsstunden.jpg

          1 Reply Last reply
          0
          • L Offline
            L Offline
            looxer01
            wrote on last edited by
            #111

            @tobih83:

            Bei mir hat er nix neues erstellt. Anbei ein Foto von meinem Objekte - Javascript `

            schickst du mir mal das Programm mit deinen Einstellungen per PN ?

            vielen Dank

            Looxer

            1 Reply Last reply
            0
            • D Offline
              D Offline
              Dice19
              wrote on last edited by
              #112

              Bei mir zählt er was aber keine ahnung was. Die Zeiten stimmen nicht mit dem überein was ich überschlagen habe an Laufzeit.

              Und die errechnete Menge kommt garnicht hin.

              Muss wohl was andere überlegen um die Menge zu erfassen.

              1 Reply Last reply
              0
              • Stefan4711S Offline
                Stefan4711S Offline
                Stefan4711
                wrote on last edited by
                #113

                Ist es eigentlich möglich auch den Inhalt von JavaScript-Variablen als Datenpunkte zu nutzen?

                Hintergrund: ich habe die Verbrauchswerte bereits in Watt vorliegen und würde darüber gerne einen Durchschnitt bilden.

                Mein naiver Ansatz war einfach den JS-Datenpunkt einzutragen. Das funktioniert aber leider nicht (Wert ist immer "0")
                > Gruppen[ 4] = ['javascript.0.strom.EG_W' ,'Strom' ,true ,true ,true ,true ,true ,false ,'calc' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //

                Was hingegen ohne Probleme geht ist:
                > Gruppen[ 3] = ['modbus.0.holdingRegisters.40071_Hausverbrauch','Strom' ,true ,true ,true ,true ,true ,false ,'calc' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //

                Stefan.

                1 Reply Last reply
                0
                • C Offline
                  C Offline
                  crepp
                  wrote on last edited by
                  #114

                  Hallo looxer01,

                  Vielen Dank für das tolle Script, wie ich das überschauen kann, ist es genau das was ich benötige. Ich würde es also gern für meinen iobroker verwenden/anpassen. Prinzipiell habe ich den Grundaufbau verstanden, was mir fehlt ist der direkte Zugang zur Einrichtung Konfig für meine Homematic Geräte.

                  Ich sehe, das ich jedes zu loggende Gerät im Script hinterlegen muss.

                  Eine Beispieldatei mit einem Beispielgerät wär hilfreich für den ersten Zugang zur Einrichtung.

                  Wäre dankbar für eine Hilfestellung für den ersten Start …

                  Gruß

                  crepp

                  Gruß

                  crepp

                  –-

                  CCU2 / 2x RaspberryPi / 2x Amazon Echo Dot / Milight LED / Philips Hue (z.Z. 16 Homematic-Geräte)

                  Kodi auf W10pro und OSMC

                  DVBViewer MediaServer auf W10

                  1 Reply Last reply
                  0
                  • L Offline
                    L Offline
                    looxer01
                    wrote on last edited by
                    #115

                    Hi Crepp,

                    Ein paar Bespiele sind ja in der Konfiguration schon enthalten

                    ich habe mal eine weitere Beispiel- Konfiguration beigefügt.

                    Ein paar Erklärungen dazu:

                    Erstes Beispiel: Es wird die Laufzeit eines Verbrauchers in Millisekungen gemessen

                    Gruppe0 misst einfach die Laufzeit eines Gerätes. Anfang der Messung beginnt dann, wenn das geraet den Status true hat. Das Ende wird erfasst, wenn der Status auf false sich aendert.

                    Eine Historie brauche ich für die Zeitmessung nicht. Also steht die auf false

                    logname0 ist der Name der Messung. Hier heisst es Schneckenzeit

                    special0. Da die Zeit in Millisekungen gemessen werden soll und auch sonst nichts umgerechnet wird gibt es hier keine Einstellungen

                    –------------------------------------------

                    Nächstes Beispiel (aufbauend) Errechnung Pelletverbrauch

                    Umrechnung der Laufzeit in KG (Es geht um eine Pelletverbrauchsrechnung)

                    Gruppe1 - ist identisch mit Gruppe 0 bis darauf, dass ich auch eine Historie erzeugen möchte.

                    Die Gruppen sind identisch, weil beide die Laufzeiten der Anlage in Millisekunden messen

                    logname1 = Hier ist es PelletKG

                    special1 = hier wird nun eine Umrechnung von Zeit in KG vorgenommen. Dabei wird umgerechnet in Minuten (also millisekunden / 60000) und dann mit 7.5 multipliziert. Das ist hier so, weil die Laufzeit den Pelletaushub bestimmt.

                    –-------------------------------------------

                    Nächstes Beispiel (Aussentemperatur Log jeden Mittag)

                    Gruppe15: Das Thermometer wird mit der Methode CALC abgefragt. Die Methode Calc deswegen, weil ich keine Zeit messe, sondern den Wert des Gerätes direkt verwende. Dabei macht die Messung der Anzahl der Schaltungen keinen Sinn (Switch) und steht deshalb auf false

                    Logname15 Der Name der Messung ist AussenNoon

                    special15 Die Rundung steht auf 2 Nachkommastellen, da dies für die Temperturmessung mehr als ausreicht. Ich möchte eine Durchschnittstemperaturmessung mit loggen. Damit kann z.B. die durschnittliche Wochen,Monats Temperatur berechnet werden

                    Die Messung findet jeden Tag um 12:00 statt.

                    Minimale und Maximale Temperaturen werden ebenfalls geloggt

                    Die ermittelten Werte (Temperaturen) werden in eine Excel datei geloggt

                    Das könnte beliebig fortgesetzt werden. Die Anzahl der Einstellungsmöglichkeiten ist schon recht gross.

                    Ich hoffe, dass es ein wenig hilft.

                    [spoiler]
                    var Gruppen = [];
                    //              1.Homematic ID,                    2.Feldname(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.KEQ0178063.1.STATE'            ,'Pellet'                           ,false  ,true   ,true   ,true   ,true   ,true   ,'false' ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; // Schneckenzeit 
                    Gruppen[1]  = ['hm-rpc.0.KEQ0178063.1.STATE'            ,'Pellet'                           ,true   ,true   ,true   ,true   ,true   ,false  ,'false' ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; // Kumuliert   KG
                    Gruppen[2]  = ['hm-rpc.0.KEQ0178063.1.STATE'            ,'Pellet'                           ,true   ,true   ,true   ,true   ,true   ,false  ,'false' ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; // Kumuliert   Euro
                    Gruppen[3]  = ['hm-rpc.0.KEQ0178063.1.STATE'            ,'Pellet'                           ,false  ,false  ,false  ,false  ,false  ,false  ,'false' ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; // Restbestand KG
                    Gruppen[4]  = ['hm-rpc.0.KEQ0178063.1.STATE'            ,'Pellet'                           ,false  ,false  ,false  ,false  ,false  ,false  ,'calc'  ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; // Laufzeiten f.Graphik
                    Gruppen[5]  = ['initial'                                ,''                                 ,false  ,true   ,true   ,true   ,true   ,true   ,''      ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; // Reserviert fuer Individuallogik
                    Gruppen[6]  = ['modbus.0.holdingRegisters.26_FA1_STATE' ,'Oekofen'                          ,false  ,true   ,true   ,true   ,true   ,false  ,'1'     ,'2'    ,'3'    ,'4'    ,'5'    ,'7'    ,'99'   ,''     ,''     ,''     ,false ,false];
                    Gruppen[7]  = ['modbus.0.holdingRegisters.26_FA1_STATE' ,'Oekofen'                          ,false  ,true   ,true   ,true   ,true   ,false  ,'7'     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; // Oekofen
                    Gruppen[8]  = ['initial', ''                                                                ,false  ,false  ,false  ,false  ,false  ,false  ,''      ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false];
                    Gruppen[9]  = ['initial'                                , 'Strom'                           ,true   ,true   ,true   ,true   ,true   ,true   ,'delta' ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,true  ,false]; //
                    Gruppen[10] = ['initial'                                ,'Strom'                            ,true   ,true   ,true   ,true   ,true   ,false  ,'delta' ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; // 
                    Gruppen[11] = ['initial'                                , 'Strom'                           ,false  ,true   ,true   ,true   ,true   ,true   ,'delta' ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,true,  false]; // 
                    Gruppen[12] = ['initial'                                , 'Strom'                           ,true   ,true   ,true   ,true   ,true   ,true   ,'delta' ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,true ,false]; // 
                    Gruppen[13] = ['initial'                                , ''                                ,false  ,false  ,false  ,false  ,false  ,false  ,''      ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false];
                    Gruppen[14] = ['hm-rpc.0.JEQ0014148.1.TEMPERATURE'      , 'Temperaturen'                    ,true   ,true   ,true   ,true   ,true   ,false  ,'calc'  ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false];
                    Gruppen[15] = ['hm-rpc.0.JEQ0014148.1.TEMPERATURE'      , 'Temperaturen'                    ,true   ,true   ,true   ,true   ,true   ,false  ,'calc'  ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false];
                    Gruppen[16] = ['initial'                                ,  ''                               ,true   ,true   ,true   ,true   ,true   ,false  ,'calc'  ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false];
                    Gruppen[17] = ['initial'                                , 'Anwesenheit'                     ,false  ,true   ,true   ,true   ,true   ,true   ,''      ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,true ,true];
                    Gruppen[18] = ['initial'                                , 'Anwesenheit'                     ,false  ,true   ,true   ,true   ,true   ,true   ,''      ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,true ,true];
                    Gruppen[19] = ['hm-rpc.0.JEQ0295143.1.STATE'            , 'Pool'                            ,true   ,true   ,true   ,true   ,true   ,true   ,''      ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false];
                    Gruppen[20] = ['hm-rpc.0.JEQ0055021.1.STATE'            , 'Pool'                            ,true   ,true   ,true   ,true   ,true   ,false  ,''      ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false];
                    Gruppen[21] = ['initial'                                , ''                                ,false  ,false  ,false  ,false  ,false  ,false  ,''      ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; 
                    Gruppen[22] = ['hm-rpc.0.JEQ0038551.1.STATE'            , 'Pool'                            ,true   ,true   ,true   ,true   ,true   ,true   ,''      ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false];
                    Gruppen[23] = ['initial'                                , 'Harmony'                         ,false  ,true   ,true   ,true   ,true   ,true  ,'0'      ,'1'    ,'2'    ,'3'    ,''     ,''     ,''     ,''     ,''     ,''     ,true  ,false];
                    Gruppen[24] = ['initial'                                , 'Harmony'                         ,false  ,true   ,true   ,true   ,true   ,true  ,'TV'     ,'PowerOff',''  ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,true  ,false];
                    Gruppen[25] = ['initial'                                , 'Harmony'                         ,false  ,true   ,true   ,true   ,true   ,true   ,'false' ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,true  ,false];
                    
                    /*-------------------------------------------------------------------------------
                    
                    Die folgende Tabelle dient zur Vergabe von Statusnamen zur besseren Lesbarkeit. Standard ist EIN
                    Die ziffern im Array z.B. [0] korrespondieren mit der Gruppentabelle also Gruppen[0] gehört zu logname[0]
                    Wird hier kein Feldname vergeben, dann wird Spalte 9-18 der Gruppentabelle als Feldname verwendet
                    Beispiel: Zustand Lampe = EIN ,
                    Beispiel: Status 1 =Start, 2 =  Heizung_Zuendung,3 = Softstart 4 = Heizung_Brennen, 5 = Heizung_Nachlauf etc
                    ACHTUNG- keine spaces verwenden */
                    var logname = [];
                    //              Stat1           Stat2       Stat3       Stat4               Stat5       Stat6       Stat7       Stat8   Stat9   Stat10
                    logname[0]  =   ['Schneckenzeit',''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[1]  =   ['PelletKG'     ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[2]  =   ['PelletEURO'   ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[3]  =   ['PelletRest'   ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[4]  =   ['SchneckeSchalt',''        ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[5]  =   ['EinAus5'      ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[6]  =   ['Start'        ,'Zuendung' ,'Softstart','Leistungsbrand'   ,'Nachlauf' ,'Saugen'   ,'Idle'     ,''     ,''     ,''];
                    logname[7]  =   ['PelletTheor'  ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[8]  =   ['EinAus8'      ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[9]  =   ['EinAus9'      ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[10] =   ['EinAus10'     ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[11] =   ['EinAus11'     ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[12] =   ['EinAus12'     ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[13] =   ['EinAus13'     ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[14] =   ['Aussen'       ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[15] =   ['AussenNoon'   ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[16] =   ['EinAus16'     ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[17] =   ['AnwRalf'      ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[18] =   ['AnwEllen'     ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[19] =   ['Filter'       ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[20] =   ['PoolHeizung'  ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[21] =   ['EinAus21'     ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[22] =   ['Klimaanlage'  ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[23] =   ['EinAus23'     ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[24] =   ['EinAus24'     ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    logname[25] =   ['EinAus25'     ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                    
                    /*
                    Tabelle "special"   :   hier werden Rechenregeln und Sonderfunktionen hinterlegt
                    Pos1 Rundung auf Nachkommastellen
                    Pos2 Addition1 mit dem angegebenen Wert erfolgt vor der Multiplikation mit dem Faktor aus Pos3
                    Pos3 = Faktor für die Multiplikationen - Ein Faktor kann nur sinnvoll eingegeben werden, wenn zu diesem Zeitpunkt alle Werte auf Null stehen.
                    .......Der Faktor kann nicht null sein. In diesem Fall wird 1 angenommen.
                    .......Also entweder bei der Neueinrichtung bzw ein Refresh ist aller Werte ist erforderlich
                    Pos4 = Divisor um den Faktor lesbar zu machen z.B. Millisekunden Divisor für Sekunde = 1000 , Minute = 60000, Stunde = 3600000
                    .......Die Rechnung ist Faktor/Divisor / Wenn Divisor = blank oder 0, dann wird 1 angenommen
                    Pos5 = Addition2 mit dem angegebenen Wert erfolgt nach der Multiplikation mit dem Faktor aus Pos3
                    .......Formel: y=((x+add1)*faktor/divisor)+add2  / y = Ergebnis - x = eigehender Wert aus dem überwachten Datenpunkt
                    .......y wird in die Indivduallogik geschickt um weiter zu berechnen
                    Pos6 ist vorgesehen, um Funktionen im Programm zu definieren die dann aufgerufen werden - Programmierung ist erforderlich
                    Pos7 nur fuer Methode Delta und DeltaM - bei Tanksensoren/Energiesensoren kommt es haeufig zu Schwankungen plus und minus - Hier wird die Grenze bestimmt bei der ein Tankvorgang sicher angenommen werden kann z.B. 100 Liter differenz
                    ......der Wert muss in der gemessenen Einheit angegeben werden. Z.B. Ultraschallsensoren senden in Liter. Dann ist die Zahl, die hier eingegeben werden muss ebenfalls Liter. Wenn nichts angegeben wird, dann wird 100 angenommen
                    Pos8.. Sonderfall, wenn unter Gruppe(0) ein Datenpunkt eingetragen wurde der nicht nach update eine Bestaetigung (ack) erhaelt. In diesem Fall sollte 8 auf false stehen
                    Pos9 =Wenn ein gleitender Durchschnitt berechnet werden soll, dann wird hier true eingetragen  (noch nicht aktiviert)
                    Pos10 = Zählschwelle für Durchschnittsberechnung. TIME in Millisekunden (bei einer Einschaltzeit unter der Angabe hier wird der Wert nicht in die Durchschnittsberechnung einbezogen)
                    ........Umrechnugnen anhand von addition1 faktor, divisor und addition2 werden dabei nicht berücksichtigt
                    Pos11 =  Alternativ zum Auslösen bei Veränderung lassen sich hier Zeiten eingeben an denen die Erfassung des Zustandes der zu loggenden Datenpunkte erfolgt.
                    .........format ist CRON. Beispiele: alle 10 Minuten =  * /10 * * * *  (leerzeichen vor "/"" bitte entfernen) täglich um 12 Uhr = 0 12 * * * -
                    .........alle 2 Stunden = 0 * /2 * * * etc (leerzeichen vor "/"" bitte entfernen)
                    .........mit der folgenden Web-Seite können die Zeiten generiert werden:        http://crontab-generator.org/
                    .........Zur Ueberpruefung von Cron Expessions bietet sich diese Website an:    http://crontab.guru/
                    .........Das ist nicht fuer die Methode TIME sinnvoll und ist daher ausgeschaltet, falls ein schedule fuer TiME eingegeben wurde
                    Pos12 =  Logging für diesen Datenpunkt wird eingeschaltet, wenn ein true eingetragen wird. Damit werden Minimum und Maximum Werte festgehalten
                    Pos13 =  Mehrfachstatus loggen ? dann true. In diesem Fall wird ein Status auch dann gesetzt, wenn bereits der gleiche Status vorher gesetzt wurde.
                             das hat zur Folge, dass z.B. die Zeitmessung neu gestartet wird, obwohl der Status im Grunde nicht geändert wurde. Standard ist false
                    Pos14 =  Selective Logging - Wenn auf true, dann wird dieser Datenpunkt in einer dedizierten Datei geloggt
                    
                    */
                    
                    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]  =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 , ''     ]; // Schneckenzeit
                    special[1]  =   ['2'     ,''    ,'7.5'                  ,'60000'    ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,'true'  ]; // Pelletverbrauch in KG
                    special[2]  =   ['2'    ,''     ,'1.725'                ,'60000'    ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; // Pelletverbrauch in Euro
                    special[3]  =   ['2'    ,''     ,'-7.5'                 ,'60000'    ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; // Pellet Restbestand
                    special[4]  =   [''     ,'1'    ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; // für die Graphische Auswertungen Ein = 2 / aus = 1
                    special[5]  =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 , ''     ];
                    special[6]  =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; // Zeiterfassung fuer Stqtus Heizung
                    special[7]  =   ['2'    ,''     ,'-1'                   ,''         ,''     ,'oekofen'          ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; // Sonderlogik fuer Saugzeiten Oekofen - theoretischer Pelletverbrauch
                    special[8]  =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                    special[9]  =   [''     ,''     ,''                     ,'1000'     ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; // 
                    special[10] =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; // 
                    special[11] =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; // 
                    special[12] =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; //
                    special[13] =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                    special[14]  =  ['2'    ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,'true'         ,''             ,''                 ,'true'         ,''                 ,''      ];
                    special[15]  =  ['2'    ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,'true'         ,''             ,'0 12 * * *'       ,'true'         ,''                 ,'true'  ];
                    special[16]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                    special[17]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                    special[18]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                    special[19]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,'true'  ];
                    special[20]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,'true'  ];
                    special[21]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                    special[22]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                    special[23]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                    special[24]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                    special[25]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                    
                    [/spoiler]
                    
                    
                    1 Reply Last reply
                    0
                    • C Offline
                      C Offline
                      crepp
                      wrote on last edited by
                      #116

                      Vielen Dank für deine schnelle Reaktion, Habe jetzt zwei Geräte angelegt (nur Zeiterfassung) aber ich denke da wird noch einiges im Lauf der Zeit hinzukommen.

                      Gruß crepp

                      Gruß

                      crepp

                      –-

                      CCU2 / 2x RaspberryPi / 2x Amazon Echo Dot / Milight LED / Philips Hue (z.Z. 16 Homematic-Geräte)

                      Kodi auf W10pro und OSMC

                      DVBViewer MediaServer auf W10

                      1 Reply Last reply
                      0
                      • C Offline
                        C Offline
                        crepp
                        wrote on last edited by
                        #117

                        Hallo,

                        Ich hab mich etwas zu früh gefreut, hab noch ein kleines Problem.

                        Prinzipiell läuft der Zähler mit den zwei Datenpunkten.

                        Nur meine Darstellung in vis gefällt mir noch nicht so sehr:
                        686_unbenannt.png
                        Links meine Darstellung, rechts die Darstellung wie ich sie gerne hätte (ohne führende Nullen)

                        Das bekomme ich jedoch mit dem Widget "String Val Text" nicht hin, da es keine Möglichkeit gibt den Wert umzurechnen.
                        686_unbenannt2.png

                        Kannst Du mir einen heissen Tipp geben, welches Widget ich verwenden kann.

                        Das widget "Number Val" (was ich rechts verwendet habe) kann umrechnen, zeigt mir aber keinen Wert an…

                        Gruß

                        crepp

                        –-

                        CCU2 / 2x RaspberryPi / 2x Amazon Echo Dot / Milight LED / Philips Hue (z.Z. 16 Homematic-Geräte)

                        Kodi auf W10pro und OSMC

                        DVBViewer MediaServer auf W10

                        1 Reply Last reply
                        0
                        • L Offline
                          L Offline
                          looxer01
                          wrote on last edited by
                          #118

                          Hi Crepp,

                          Wenn keine Umrechnung eingegeben wird, dann ist das Format DDDDDD:HH:MM:SS hart verdrahtet.

                          Du kannst aber einfach von Millisekunden umrechnen (Tabelle special) und bekommst dann einen numerischen WEert.

                          Wenn du z.B. dazu im Divisor 1000 eingibst kannst du im Multiplikator

                          z.B. 60 eingeben und du erhältst Minuten

                          oder 3600 und der bekommst Stunden

                          oder 86400 und bist bei Tagen.

                          Dass solltest du dann noch mit einer Rundung versehen. z.B 1

                          vG Looxer

                          1 Reply Last reply
                          0
                          • N Offline
                            N Offline
                            noxx
                            wrote on last edited by
                            #119

                            hallo

                            ich nehme mal an, das ich Datenpunkte mit Wert nicht verwenden kann?

                            Der Gaszähler wird geloggt und als Datenpunkt abgelegt.

                            Gruppen[ 0]  = ['javascript.0.Gaszaehler.Wert'           ,''                                 ,true   ,true   ,true   ,true   ,true   ,false
                            
                            

                            LOG:

                            20:11:03.900	[info]	javascript.0 Stop script script.js.common.Betriebsstundenzaehler
                            20:11:04.483	[info]	javascript.0 Start javascript script.js.common.Betriebsstundenzaehler
                            20:11:04.485	[error]	javascript.0 script.js.common.Betriebsstundenzaehler: TypeError: Cannot read property 'common' of null at script.js.common.Betriebsstundenzaehler:323:47 at ContextifyScript.Script.runInContext (vm.js:35:29)
                            

                            2880_01.png

                            1 Reply Last reply
                            0
                            • L Offline
                              L Offline
                              looxer01
                              wrote on last edited by
                              #120

                              Hi Noxx,

                              doch klar, gerade Werte sollten ja geloggt werden und berechnet.

                              Schick doch mal deine Einstellungen. Ich schau mal. Könnte ein Einstellungsproblem sein.

                              vG >Looxer

                              1 Reply Last reply
                              0
                              • N Offline
                                N Offline
                                noxx
                                wrote on last edited by
                                #121

                                Bisher steht nur in Gruppe[0] was drin

                                Gruppen[ 0]  = ['javascript.0.Gaszaehler.Wert'           ,''                                 ,true   ,true   ,true   ,true   ,true   ,false  ,''      ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; //
                                
                                1 Reply Last reply
                                0
                                • L Offline
                                  L Offline
                                  looxer01
                                  wrote on last edited by
                                  #122

                                  Sorry aus versehen geloescht

                                  1 Reply Last reply
                                  0
                                  • N Offline
                                    N Offline
                                    noxx
                                    wrote on last edited by
                                    #123

                                    hmm, habe den dreh nicht.

                                    Gruppen[ 0]  = ['javascript.0.Gaszaehler.Wert'           ,''                                 ,true   ,true   ,true   ,true   ,true   ,false  ,'delta'      ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; //
                                    

                                    liefert

                                    (vm.js:35:29)
                                    21:51:35.973	[info]	javascript.0 Stop script script.js.common.Betriebsstundenzaehler
                                    21:51:36.512	[info]	javascript.0 Start javascript script.js.common.Betriebsstundenzaehler
                                    21:51:36.514	[error]	javascript.0 script.js.common.Betriebsstundenzaehler: TypeError: Cannot read property 'common' of null at script.js.common.Betriebsstundenzaehler:323:47 at ContextifyScript.Script.runInContext (vm.js:35:29)
                                    

                                    Edit

                                    Nun kein Fehler mehr. Anscheinend muss die Spalte 2 gefüllt sein

                                    1 Reply Last reply
                                    0
                                    • N Offline
                                      N Offline
                                      noxx
                                      wrote on last edited by
                                      #124

                                      habe nun 2 "geräte" eingestellt, beim Regensensor werden die Werte

                                      übernommen, beim Gaszähler nicht.

                                      Keine Ahnung warum, sind beide gleich eingestellt.

                                      Gruppen[ 0]  = ['javascript.0.Gaszaehler.Wert'          ,'Heizung'                          ,true  ,true  ,true  ,true  ,true  ,false  ,'delta'      ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; //
                                      Gruppen[ 1]  = ['rflink.0.channels.Cresta_2.RAIN'       ,'Wetterstation'                    ,true  ,true  ,true  ,true  ,true  ,false  ,'delta'      ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,''     ,false ,false]; //
                                      
                                      logname[0]  =   ['Gasuhr'      ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                                      logname[1]  =   ['Regenmesser'      ,''         ,''         ,''                 ,''         ,''         ,''         ,''     ,''     ,''];
                                      
                                      
                                      special[0]  =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 , ''     ]; 
                                      special[1]  =   [''     ,''     ,'0.227'                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; 
                                      
                                      

                                      2880_01.png

                                      1 Reply Last reply
                                      0
                                      • L Offline
                                        L Offline
                                        looxer01
                                        wrote on last edited by
                                        #125

                                        Hi Noxx,

                                        Der Gaszähler steht auf delta. Das ist ok. Ist der Datenpunkt, der den jeweils aktuellen Gesamtverbrauchswert des Gaszählers misst, ein wirklich Javascript-datenpunkt ? -

                                        Wichtig ist, dass der Wert in diesem Datenpunkt ein kontinuierlich aufsteigender Wert ist (eben die aktuelle verbraucht m3 Zahl.) Dann sollte das delta auch gemessen werden. Wie oft wird dieser Datenpunkt denn aktualisiert. Denn bei jeder Akutualisierung wird der Unterschied berechnet. Kann es sein, dass das im Sekundenbereich geschieht. ? Vielleicht ist der Wert dann zu klein. Durch das setzen des schedules in "special" kann auch das Aktualisieren geplant werden.

                                        Bin jetzt bis Montag unterwegs und kann nur lesen.

                                        vG Looxer

                                        1 Reply Last reply
                                        0
                                        • K Offline
                                          K Offline
                                          knopers1
                                          wrote on last edited by
                                          #126

                                          Hi Noxx,

                                          ewentuell liegt der Fehler im Java-Script was Du mir zukommen lassen hast.

                                          Und zwar genau in der Zeile:

                                          schedule ("* * * * *", function(){ // alle 3 Minuten aufrufen

                                          Wenn das Script alle drei min. die WEB abfragen soll, muß es so aussehen.

                                          schedule ("*/3 * * * *", function(){

                                          Ich baue heute alles nach und berichte ob es bei mir funktioniert!

                                          var request = require('request');
                                          var parseString = require('xml2js').parseString;
                                          
                                          var url="http://192.168.1.43"; // hier die Adresse der Webseite eintragen
                                          
                                          var GaszaehlerId = "Gaszaehler.Wert"; // Der Wert steht in "javascript.0."
                                          
                                          function processData(body){
                                             parseString(body, function (err, result) {
                                                // log(JSON.stringify(result.MyHome.ESP8266_GasMeter[0].data[4].$.value));
                                                if (!err)
                                                    setState(GaszaehlerId,result.MyHome.ESP8266_GasMeter[0].data[4].$.value);
                                             });   
                                          }
                                          
                                          createState(GaszaehlerId,
                                                    0, 
                                                    false,
                                                    {
                                                      type:"number",
                                                      unit:"m³"
                                                    });
                                          
                                          schedule ("* * * * *", function(){ // alle 3 Minuten aufrufen
                                              request({  
                                                  uri: url,
                                                  method: "GET",
                                                  timeout: 10000,
                                                  followRedirect: true,
                                                  maxRedirects: 10
                                              }, function(error, response, body) {
                                                  if (!error) {
                                                      if (response.statusCode == 200) {
                                                          processData(body);    
                                                      }
                                                  } else log("Fehler: "+error);
                                              });    
                                          })
                                          

                                          HP Microserver Gen8, RPI-4, IoBroker,

                                          1 Reply Last reply
                                          0

                                          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                          With your input, this post could be even better 💗

                                          Register Login
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          531

                                          Online

                                          32.8k

                                          Users

                                          82.7k

                                          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