Skip to content
  • 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
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Vorlage] Betriebsstundenzähler & Verbrauchsrechner

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.0k

[Vorlage] Betriebsstundenzähler & Verbrauchsrechner

[Vorlage] Betriebsstundenzähler & Verbrauchsrechner

Scheduled Pinned Locked Moved Skripten / Logik
javascript
333 Posts 51 Posters 90.5k 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
    #6

    H Pix,

    genau daran hatte ich als Erweiterung auch gedacht. Die Tages,Wochen und Monatswerte (vielleicht sogar Jahr)

    Ich versuche es aber generisch zu halten. Es wollen sich ja nicht alle mit jS beschäftigen.

    Wie immer sind deine VIS-Widgets super.

    vG Looxer

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

      Version 0.21 ist jetzt eingestellt.

      Die Variable LSTAT wird nicht mehr benötigt, was das Script kleiner macht

      Funktional gibts keinen Unterschied.

      vG Looxer

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

        Hi,

        das script ist jetzt umgebaut. Version 0.25

        Falls es jemand schon ausprobiert hat; dann sind ein paar Anpassungen notwendig im Bereich der Einstellungen - siehe script

        Auch sollten die variablen "Betriebsstundenzaehler.System." gelöscht werden. Dafür werden dann automatisch neue angelegt.

        Folgende Änderungen gibt es:

        • Die Erweiterung des scripts auf mehr Objekte ist sehr einfach möglich

        • Vorbereitungen für die Anzeige von Tages/Wochen/Moants/Jahres-Betriebszeit sind eingebaut (noch nicht funktional)

        vG Looxer

        1 Reply Last reply
        0
        • P Offline
          P Offline
          pix
          wrote on last edited by Dutchman
          #9

          Hallo Looxer,

          hab es installiert. Das Log in die externe Datei klappt so nicht bei mir (OS X):

          2016-01-31 14:48:31.936  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Logfile nicht gefunden - wird angelegt
          2016-01-31 14:48:31.937  - error: message hm-rpc.0.LEQ0268726.1.LEVEL [object Object] ENOENT: no such file or directory, open '/opt/iobroker/iobroker-data/BSZLog.csv'
          2016-01-31 14:48:31.939  - error: Error: ENOENT: no such file or directory, open '/opt/iobroker/iobroker-data/BSZLog.csv'
            at Error (native)
            at Object.fs.openSync (fs.js:549:18)
            at Object.fs.writeFileSync (fs.js:1156:15)
            at Object.fs.appendFileSync (fs.js:1204:6)
            at writelog (script.js.AATest_Betriebstundenzaehler:439:13)
            at GeraetUpdate (script.js.AATest_Betriebstundenzaehler:370:3)
            at Object. <anonymous>(script.js.AATest_Betriebstundenzaehler:301:81)
            at Object.subs.callback (/Users/pix/Documents/iobroker/node_modules/iobroker.javascript/javascript.js:1111:48)
            at /Users/pix/Documents/iobroker/node_modules/iobroker.javascript/javascript.js:454:48
            at getObjectEnums (/Users/pix/Documents/iobroker/node_modules/iobroker.javascript/javascript.js:2304:17)
            at getObjectEnums (/Users/pix/Documents/iobroker/node_modules/iobroker.javascript/javascript.js:2323:28)
            at getObjectEnums (/Users/pix/Documents/iobroker/node_modules/iobroker.javascript/javascript.js:2323:28)
            at checkPatterns (/Users/pix/Documents/iobroker/node_modules/iobroker.javascript/javascript.js:450:17)
            at Object.utils.adapter.stateChange (/Users/pix/Documents/iobroker/node_modules/iobroker.javascript/javascript.js:190:17)
            at Object.that.states.States.change (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:1942:80)
            at Socket. <anonymous>(/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:45:30)
            at Socket.Emitter.emit (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-emitter/index.js:134:20)
            at Socket.onevent (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:254:10)
            at Socket.onpacket (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:212:12)
            at Manager. <anonymous>(/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-bind/index.js:21:15)
            at Manager.Emitter.emit (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-emitter/index.js:134:20)
            at Manager.ondecoded (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/manager.js:301:8)
            at Decoder. <anonymous>(/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-bind/index.js:21:15)
            at Decoder.Emitter.emit (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-emitter/index.js:134:20)
            at Decoder.add (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/socket.io-parser/index.js:247:12)
            at Manager.ondata (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/manager.js:291:16)
            at Socket. <anonymous>(/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-bind/index.js:21:15)
            at Socket.Emitter.emit (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-emitter/index.js:134:20)
            at Socket.onPacket (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/socket.js:430:14)
            at WS. <anonymous>(/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/socket.js:248:10)
            at WS.Emitter.emit (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-emitter/index.js:134:20)
            at WS.Transport.onPacket (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/transport.js:147:8)
            at WS.Transport.onData (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/transport.js:139:8)
            at WebSocket.ws.onmessage (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/websocket.js:112:10)
            at WebSocket.onMessage (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/WebSocket.js:418:14)
            at emitTwo (events.js:87:13)
            at WebSocket.emit (events.js:172:7)
            at Receiver.ontext (/Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/WebSocket.js:816:10)
            at /Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/Receiver.js:477:18
            at /Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/Receiver.js:361:7
            at /Users/pix/Documents/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/PerMessageDeflate.js:221:5
            at afterWrite (_stream_writable.js:346:3)
            at onwrite (_stream_writable.js:337:7)
            at WritableState.onwrite (_stream_writable.js:89:5)
            at afterTransform (_stream_transform.js:79:5)
            at TransformState.afterTransform (_stream_transform.js:54:12)
            at Zlib.callback (zlib.js:614:5)</anonymous></anonymous></anonymous></anonymous></anonymous></anonymous> 
          

          Ausserdem muss man diesen Bereich des Skriptes noch mal überdenken:

          on({id: Gruppen[0][0], valNe: 1000 }, function(obj)    {  if (obj.state.ack)  { GeraetUpdate( Gruppen[0][0], GrpSystem[0][0], GrpSystem[0][1], GrpSystem[0][2] ); }   });    // ende on id
          on({id: Gruppen[1][0], valNe: 1000 }, function(obj)    {  if (obj.state.ack)  { GeraetUpdate( Gruppen[1][0], GrpSystem[1][0], GrpSystem[1][1], GrpSystem[1][2] ); }   });    // ende on id
          on({id: Gruppen[2][0], valNe: 1000 }, function(obj)    {  if (obj.state.ack)  { GeraetUpdate( Gruppen[2][0], GrpSystem[2][0], GrpSystem[2][1], GrpSystem[2][2] ); }   });    // ende on id
          on({id: Gruppen[3][0], valNe: 1000 }, function(obj)    {  if (obj.state.ack)  { GeraetUpdate( Gruppen[3][0], GrpSystem[3][0], GrpSystem[3][1], GrpSystem[3][2] ); }   });    // ende on id
          on({id: Gruppen[4][0], valNe: 1000 }, function(obj)    {  if (obj.state.ack)  { GeraetUpdate( Gruppen[4][0], GrpSystem[4][0], GrpSystem[4][1], GrpSystem[4][2] ); }   });    // ende on id
          on({id: Gruppen[5][0], valNe: 1000 }, function(obj)    {  if (obj.state.ack)  { GeraetUpdate( Gruppen[5][0], GrpSystem[5][0], GrpSystem[5][1], GrpSystem[5][2] ); }   });    // ende on id
          on({id: Gruppen[6][0], valNe: 1000 }, function(obj)    {  if (obj.state.ack)  { GeraetUpdate( Gruppen[6][0], GrpSystem[6][0], GrpSystem[6][1], GrpSystem[6][2] ); }   });    // ende on id
          on({id: Gruppen[7][0], valNe: 1000 }, function(obj)    {  if (obj.state.ack)  { GeraetUpdate( Gruppen[7][0], GrpSystem[7][0], GrpSystem[7][1], GrpSystem[7][2] ); }   });    // ende on id
          on({id: Gruppen[8][0], valNe: 1000 }, function(obj)    {  if (obj.state.ack)  { GeraetUpdate( Gruppen[8][0], GrpSystem[8][0], GrpSystem[8][1], GrpSystem[8][2] ); }   });    // ende on id
          on({id: Gruppen[9][0], valNe: 1000 }, function(obj)    {  if (obj.state.ack)  { GeraetUpdate( Gruppen[9][0], GrpSystem[9][0], GrpSystem[8][1], GrpSystem[9][2] ); }   });    // ende on id
          on({id: Gruppen[10][0], valNe: 1000 }, function(obj)   {  if (obj.state.ack)  { GeraetUpdate( Gruppen[10][0], GrpSystem[10][0], GrpSystem[10][1], GrpSystem[10][2] ); }   });    // ende on id
          on({id: Gruppen[11][0], valNe: 1000 }, function(obj)   {  if (obj.state.ack)  { GeraetUpdate( Gruppen[11][0], GrpSystem[11][0], GrpSystem[11][1], GrpSystem[11][2] ); }   });    // ende on id
          on({id: Gruppen[12][0], valNe: 1000 }, function(obj)   {  if (obj.state.ack)  { GeraetUpdate( Gruppen[12][0], GrpSystem[12][0], GrpSystem[12][1], GrpSystem[12][2] ); }   });    // ende on id
          on({id: Gruppen[13][0], valNe: 1000 }, function(obj)   {  if (obj.state.ack)  { GeraetUpdate( Gruppen[13][0], GrpSystem[13][0], GrpSystem[13][1], GrpSystem[13][2] ); }   });    // ende on id
          on({id: Gruppen[14][0], valNe: 1000 }, function(obj)   {  if (obj.state.ack)  { GeraetUpdate( Gruppen[14][0], GrpSystem[14][0], GrpSystem[14][1], GrpSystem[14][2] ); }   });    // ende on id
          on({id: Gruppen[15][0], valNe: 1000 }, function(obj)   {  if (obj.state.ack)  { GeraetUpdate( Gruppen[15][0], GrpSystem[15][0], GrpSystem[15][1], GrpSystem[15][2] ); }   });    // ende on id
          on({id: Gruppen[16][0], valNe: 1000 }, function(obj)   {  if (obj.state.ack)  { GeraetUpdate( Gruppen[16][0], GrpSystem[16][0], GrpSystem[16][1], GrpSystem[16][2] ); }   });    // ende on id
          on({id: Gruppen[17][0], valNe: 1000 }, function(obj)   {  if (obj.state.ack)  { GeraetUpdate( Gruppen[17][0], GrpSystem[17][0], GrpSystem[17][1], GrpSystem[17][2] ); }   });    // ende on id
          on({id: Gruppen[18][0], valNe: 1000 }, function(obj)   {  if (obj.state.ack)  { GeraetUpdate( Gruppen[18][0], GrpSystem[18][0], GrpSystem[18][1], GrpSystem[18][2] ); }   });    // ende on id
          on({id: Gruppen[19][0], valNe: 1000 }, function(obj)   {  if (obj.state.ack)  { GeraetUpdate( Gruppen[19][0], GrpSystem[19][0], GrpSystem[19][1], GrpSystem[19][2] ); }   });    // ende on id
          on({id: Gruppen[20][0], valNe: 1000 }, function(obj)   {  if (obj.state.ack)  { GeraetUpdate( Gruppen[20][0], GrpSystem[20][0], GrpSystem[20][1], GrpSystem[20][2] ); }   });    // ende on id
          
          

          Denn während es zu Beginn des Skriptes für den User leicht möglich ist, weitere Geräte durch Eintragung ins Array hinzuzufügen, muss er ja (bei über 20 Geräten) diesen Code auch erweitern. Es muss doch irgendwie möglich sein, alle Gruppen mit einem Subscribe zu überwachen.

          Ich habe schon überlegt, ob es vielleicht Sinn macht, die Geräte über das Gewerk abzufragen. Füge jedes zu überwachende Gerät einfach zum Gewerk "Betriebstunden" und dann wird das Gewerk überwacht (so, wie hier im http://forum.iobroker.net/viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564)

          Gruß

          Pix

          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

          1 Reply Last reply
          0
          • P Offline
            P Offline
            pix
            wrote on last edited by Negalein
            #10

            Hab das Skript mal getestet:

            Ohne das Log in eine externe Datei läuft es, ohne Fehler zu produzieren. Zuerst dachte ich, die Zeiten passen ja gar nicht. Aber die letztenbeiden Stellen sind wohl Minuten, oder? . Ich habe zwei Dimmer überwacht (Level). Die Lampen waren mehrere Minuten an. Hier das Log

            2016-01-31 14:50:20.628  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: registered 21 subscriptions and 0 schedules
            2016-01-31 14:50:50.038  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:50:52.467  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:52:06.935  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:52:09.520  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:52:58.320  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:53:01.934  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:54:49.528  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:54:52.624  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:55:27.089  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:55:30.258  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:56:09.219  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:56:11.542  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:56:42.431  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:56:45.251  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:57:10.900  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:57:11.633  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;95.5 ; 000:00:00:00 ; 0 ; 000:00:00:00 ; 0
            2016-01-31 14:57:14.948  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;0 ; 000:00:00:03 ; 3315 ; 000:00:00:03 ; 3315
            2016-01-31 14:57:42.912  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;0.5 ; 000:00:00:03 ; 3315 ; 000:00:00:03 ; 3315
            2016-01-31 14:57:45.412  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:03 ; 3315 ; 000:00:00:03 ; 3315
            2016-01-31 14:57:50.398  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:03 ; 3315 ; 000:00:00:03 ; 3315
            2016-01-31 14:57:53.278  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:03 ; 3315 ; 000:00:00:03 ; 3315
            2016-01-31 14:58:05.126  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;99.5 ; 000:00:00:03 ; 3315 ; 000:00:00:03 ; 3315
            2016-01-31 14:58:08.122  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;0 ; 000:00:00:02 ; 2995 ; 000:00:00:06 ; 6310
            2016-01-31 14:58:18.810  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;0.5 ; 000:00:00:02 ; 2995 ; 000:00:00:06 ; 6310
            2016-01-31 14:58:21.999  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:02 ; 2995 ; 000:00:00:06 ; 6310
            2016-01-31 14:58:34.688  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:02 ; 2995 ; 000:00:00:06 ; 6310
            2016-01-31 14:58:38.181  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:02 ; 2995 ; 000:00:00:06 ; 6310
            2016-01-31 14:59:04.390  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:02 ; 2995 ; 000:00:00:06 ; 6310
            2016-01-31 14:59:07.881  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:02 ; 2995 ; 000:00:00:06 ; 6310
            2016-01-31 14:59:18.594  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;99.5 ; 000:00:00:02 ; 2995 ; 000:00:00:06 ; 6310
            2016-01-31 14:59:21.071  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;0 ; 000:00:00:02 ; 2476 ; 000:00:00:08 ; 8786
            2016-01-31 14:59:49.378  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Lampe Flur Regal.LEVEL;Betriebsstundenzaehler.System.Grp01MSec;0.5 ; 000:00:00:02 ; 2476 ; 000:00:00:08 ; 8786
            2016-01-31 14:59:51.852  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;33.5 ; 000:00:00:02 ; 2476 ; 000:00:00:08 ; 8786
            2016-01-31 14:59:54.903  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:02 ; 2476 ; 000:00:00:08 ; 8786
            2016-01-31 15:00:09.731  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Lampe Flur Regal.LEVEL;Betriebsstundenzaehler.System.Grp01MSec;99.5 ; 000:00:00:02 ; 2476 ; 000:00:00:08 ; 8786
            2016-01-31 15:00:11.272  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Lampe Flur Regal.LEVEL;Betriebsstundenzaehler.System.Grp01MSec;92.5 ; 000:00:00:02 ; 2476 ; 000:00:00:08 ; 8786
            2016-01-31 15:00:11.557  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Lampe Flur Regal.LEVEL;Betriebsstundenzaehler.System.Grp01MSec;99 ; 000:00:00:02 ; 2476 ; 000:00:00:08 ; 8786
            2016-01-31 15:00:14.432  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Lampe Flur Regal.LEVEL;Betriebsstundenzaehler.System.Grp01MSec;100 ; 000:00:00:02 ; 2476 ; 000:00:00:08 ; 8786
            2016-01-31 15:00:28.665  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:02 ; 2476 ; 000:00:00:08 ; 8786
            2016-01-31 15:00:32.046  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Licht Büro Computer.LEVEL;Betriebsstundenzaehler.System.Grp00MSec;100 ; 000:00:00:02 ; 2476 ; 000:00:00:08 ; 8786
            2016-01-31 15:00:44.936  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Lampe Flur Regal.LEVEL;Betriebsstundenzaehler.System.Grp01MSec;99.5 ; 000:00:00:02 ; 2476 ; 000:00:00:08 ; 8786
            2016-01-31 15:00:48.099  - info: javascript.2 script.js.AATest_Betriebstundenzaehler: Lampe Flur Regal.LEVEL;Betriebsstundenzaehler.System.Grp01MSec;0 ; 000:00:00:03 ; 3162 ; 000:00:00:03 ; 3162
            

            261_bildschirmfoto_2016-01-31_um_15.04.06.jpg

            Gruß

            Pix

            ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

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

              Hi Pix,

              Danke für's testen.

              @pix:

              Ausserdem muss man diesen Bereich des Skriptes noch mal überdenken: `
              das habe ich getan, soweit ich es eben vermag und es mit einem Loop probiert. Das geht natürlich nicht.

              Andererseits ist die Erweiterung super simple aber es wäre natürlich schöner, wenn das automatisiert wäre.

              Zum Thema Log und OSX. Das heisst, dein IObroker läuft auf OSX?

              Funktioniert der Pfad nicht ? oder ist es der Befehl append, der Probleme macht ?

              @pix:

              ber die letztenbeiden Stellen sind wohl Minuten, oder? `
              Die letzten Stellen sind Sekunden. Das Format ist: DDD:HH:MM:SS

              ABER

              Es kann sein, dass zum Zeitpunkt des Programmstarts der Verbraucher bereits eingeschaltet war.

              Beim Ausschalten würde dann nicht gemessen, da ja die Einschaltzeit nicht bekannt ist.

              Also muss immer erst mal eingeschaltet werden, die Zeit abgespeichert und dann ausgeschaltet. Dann wird gemessen.

              Hintergrund: Wenn ioBroker mal abstürzt oder etwas anderes passiert, das dazu führt, dass die Einschaltzeit nicht bekannt ist,

              dann darf nicht gemessen werden.

              Morgen werde ich wahrscheinlich die Zeitabschnittsmessung einstellen. Dann ist es möglich Tages/Wochen/Monats/Jahresbetriebszeiten darzustellen

              vG Looxer

              1 Reply Last reply
              0
              • P Offline
                P Offline
                pix
                wrote on last edited by Negalein
                #12

                Das macht Sinn, Messung Start nur bei Licht Einschalten.

                Check mal Zeile 245. Log('Logfile blabla'), 'info'; Das Info gehört in die Klammern, ist aber eigentlich nicht nötig, weil default. Übrigens ist an dieser Stelle der Hinweis des Editors "too many Errors..". Ich schätze, das hat was mit dem Umgang mit der externen Datei zu tun.

                Ja ich lasse ioBroker auf OS X laufen. Die externe Datei ist nicht so wichtig für mich. Das kann ich später testen.

                Gruß

                Pix

                EDIT: Du hast auch ne Menge Funktionen zur Zeitumrechnung. Auch diese Zeile habe ich gesehen:

                FormTimeKum  = TimeCalc(FormTimeKum,newkumtime);
                

                Hast du dir mal den ioBroker Javascript Befehl https://github.com/iobroker/ioBroker.javascript#example angesehen? Der ist super für sowas.

                Und die Funktionen addZero2 und 3 kannst du zusammenfassen:

                //-----------------------------------------------------------------------------------------------------
                // Funktion zur Erzeugung von 2 oder 3 führenden Nullen für das Datum Format
                //-----------------------------------------------------------------------------------------------------
                function addZero(i) {
                    if (i < 10) {
                        j = "00" + i;
                        i = "0" + i;
                    } 
                    if (i > 9 && i < 100) {
                        j = "0" + i;
                    }
                    return {
                        'zero2' : i,
                        'zero3' : j
                    }
                } // Ende Funktion
                

                Gibt ein Objekt zurück.

                Also kannst du den Aufruf hier (und auch die anderen) so umbauen

                //-----------------------------------------------------------------------------------------------------
                // Funktion zur Zeitdifferenzrechnung mit Format DDD:HH:MM:SS
                //-----------------------------------------------------------------------------------------------------
                function TimeCalc(time,diff) {
                // Millisekunden umrechnen in Tag Stunden Minuten Sekunden
                
                var tag = addZero(Math.floor(diff / (1000*60*60*24))).zero3;
                diff = diff % (1000*60*60*24);
                var std = addZero(Math.floor(diff / (1000*60*60))).zero2;
                diff = diff % (1000*60*60);
                var min =  addZero(Math.floor(diff / (1000*60))).zero2;
                diff = diff % (1000*60);
                var sec = addZero(Math.floor(diff / 1000)).zero2;
                time =  tag + ":" + std + ":" + min + ":" + sec; // jetzt ddd:hh:mm:ss zusammensetzen
                return time;
                }
                

                Die Funktion liefert beides (2 und 3 führende Nullen). Mit zero2 oder zero3 wählst du einfach den gewünschten "Datenpunkt"

                Macht es kürzer. 😄

                Gruß

                Pix

                ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                1 Reply Last reply
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by Negalein
                  #13

                  Anmerkung zur ungenutzten Funktion BackTimeCalc: Woher kommt die Variable str ? Müsste es nicht time sein ?

                  function BackTimeCalc(time) {
                  // Tage Stunden Minuten Sekunden umrechnen in ms
                  	var n = time.length;
                  	var Sek = time.substr(n-2, 2);
                  	var Min = time.substr(n-5, 2);
                  	var Std = time.substr(n-8, 2);
                  	var Tge = time.substr(n,n-8-1);
                  	var MSec = (Sek+(Min*60)+(Std*3600)+(Tge*24*3600)) * 1000;
                  	return MSec;
                  }
                  

                  Rückgabewerte deklariert man üblicherweise innerhalb der Funktion und nicht als Übergabewert an die Funktion (MSec).
                  3435_screenshot__39_.png
                  3435_screenshot__40_.png

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  1 Reply Last reply
                  -1
                  • P Offline
                    P Offline
                    pix
                    wrote on last edited by
                    #14

                    Ha, Paul war wieder schneller. Nach der ungenutzten Funktion wollte ich auch noch fragen (siehe Edit oben) :lol:
                    3435_screenshot__41_.png

                    ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                    1 Reply Last reply
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      wrote on last edited by
                      #15

                      @pix:

                      Hast du dir mal den ioBroker Javascript Befehl formatDate angesehen? Der ist super für sowas. `
                      Daran hatte ich auch gedacht. Allerdings funktioniert formatDate nur für absolute Zeiten richtig, da es die Zeitzone berücksichtigt. Für die Verwendung auf Zeitdifferenzen muss man z.B. bei MEZ 3.600.000 ms von der Differenzzeit abziehen, damit das Ergebnis stimmt.

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

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

                        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
                        0
                        • L Offline
                          L Offline
                          looxer01
                          wrote on last edited by
                          #17

                          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
                          0
                          • P Offline
                            P Offline
                            pix
                            wrote on last edited by
                            #18

                            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

                            ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                            1 Reply Last reply
                            0
                            • P Offline
                              P Offline
                              pix
                              wrote on last edited by
                              #19

                              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

                              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

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

                                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
                                0
                                • L Offline
                                  L Offline
                                  looxer01
                                  wrote on last edited by
                                  #21

                                  @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
                                  0
                                  • P Offline
                                    P Offline
                                    pix
                                    wrote on last edited by
                                    #22

                                    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

                                    ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

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

                                      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
                                      0
                                      • L Offline
                                        L Offline
                                        looxer01
                                        wrote on last edited by
                                        #24

                                        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
                                        0
                                        • L Offline
                                          L Offline
                                          looxer01
                                          wrote on last edited by
                                          #25

                                          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
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          622

                                          Online

                                          32.4k

                                          Users

                                          81.3k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe