Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Frage] Suche Skript für einfachen Betriebsstundenzähler

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    13
    1
    166

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.3k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

[Frage] Suche Skript für einfachen Betriebsstundenzähler

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
11 Beiträge 5 Kommentatoren 1.9k Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T Offline
    T Offline
    TOBO
    schrieb am zuletzt editiert von
    #2

    Bevor ich nun wieder um die Ohren gehauen bekomme. Ich habe hier rein gar keine Idee, wie man das per Script lösen kann.

    Gruß.

    ToBo

    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      pix
      schrieb am zuletzt editiert von
      #3

      Hallo TOBO,

      werde dir hier nix basteln.

      Ich würde auf jeden Fall erst einmal History für den Datenpunkt aktivieren. Damit kann man ggf. später arbeiten.

      Eine Idee sind zwei States/Objekte zu erstellen: zum Beispiel mit den Namen ontime und offtime.

      Dann überwachst du den Datenpunkt der Lampe. Bei Einschalten lässt du dir die Aktuelle Zeit (in Millisekunden https://www.w3schools.com/jsref/jsref_gettime.asp) ausgeben. Von diesem Wert ziehst den aktuellen Wert von offtime ab und speicherst das Ergebnis in ontime. Beim Ausschalten ziehst du von der aktuellen Zeit den Wert von ontime ab und speicherst in offtime, usw.

      Bei der Ausgabe musst du die Millisekunden nur in eine schönes Format umwandeln.

      Gruß

      Pix

      Gruß

      Pix

      Edit: Die beiden Objekte ontime/offtime sollten natürlich zu Beginn (beim ersten Skriptstart) ein "Saldo" haben, also zB die aktuelle Uhrzeit in ms.

      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 Antwort Letzte Antwort
      0
      • T Offline
        T Offline
        TOBO
        schrieb am zuletzt editiert von
        #4

        Na das ist ja schon mal ein Anfang. Werde da mal was versuchen und melde mich wieder.

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #5

          Ich verwende diese Skript:

          // Betriebsstunden Heizung
          
          // Raumkurzname am Anfang des Datenpunktnamen und als JS-Gruppenname
          const raum = name.split(".")[2];
          
          const heizid    = getIdByName(raum + ".Heizen");
          const betriebid = getIdByName(raum + ".Heizstunden");
          
          var betrieb = getState(betriebid).val;
          
          function stunden(dp) {
              if(!dp.state.val) {
                  var aus = dp.state.lc;
                  var ein = dp.oldState.lc;
                  betrieb = betrieb + (aus - ein) / 3600000;
                  setState(betriebid, betrieb, true);
              }
          }
          
          on(heizid, stunden);
          
          

          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

          Basti97B 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            Ich verwende diese Skript:

            // Betriebsstunden Heizung
            
            // Raumkurzname am Anfang des Datenpunktnamen und als JS-Gruppenname
            const raum = name.split(".")[2];
            
            const heizid    = getIdByName(raum + ".Heizen");
            const betriebid = getIdByName(raum + ".Heizstunden");
            
            var betrieb = getState(betriebid).val;
            
            function stunden(dp) {
                if(!dp.state.val) {
                    var aus = dp.state.lc;
                    var ein = dp.oldState.lc;
                    betrieb = betrieb + (aus - ein) / 3600000;
                    setState(betriebid, betrieb, true);
                }
            }
            
            on(heizid, stunden);
            
            
            Basti97B Offline
            Basti97B Offline
            Basti97
            Most Active
            schrieb am zuletzt editiert von
            #6

            @paul53 Ich habe mal eine Frage zu deinem Script die Betriebsstunden werden erst dann berechnet wenn der Datenpunkt in diesem Fall die Heizung wieder ausgeschaltet wurde. Oder? Gibt es auch eine Möglichkeit die Betriebsstunden so lange mit zu zählen bis der Datenpunkt wieder auf false bzw ausgeschaltet wurde.
            Noch eine zweite Frage werden die Betriebsstunden bei dem nächsten mal einschalten wieder auf 0 gesetzt oder weiter gerechnet. Es wäre schön wenn das Script beide Funktion hätte.

            Gruß Basti :) :)

            Iobroker läuft als VM auf Proxmoxserver x folgende Hersteller im Einsatz Sonoff, Gosund, Siemens x Aofo über Tasmota x Zigbee x das Smarthome wächst und wächst

            paul53P 1 Antwort Letzte Antwort
            0
            • T TOBO

              Hallo zusammen,

              Ich habe in meiner Werkstatt gestern zwei Infrarotdeckenstrahler installiert und würde gern deren Betriebsstunden erfassen. Habe zwar hier das im Forum gefunden, ist mir aber viiiel zu kompliziert.

              http://forum.iobroker.net/viewtopic.php … %C3%A4hler

              Mir würde es schon reichen, wenn das Skript immer die Minuten aufaddieren würde, wenn ein bestimmter Ausgang gesetzt ist. Der Wert sollte vielleicht in einer Textdatei auf der SD Karte gesichert werden, damit er nicht immer nach einem Reboot bei Null anfängt

              Wäre schön, wenn mir da jemand was basteln könnte.

              Dankeschön.

              ToBo

              D Offline
              D Offline
              Dragon
              schrieb am zuletzt editiert von Dragon
              #7

              @tobo Guten Abend du könntest mit einem Datenpunkt arbeiten der in Schleife jede Minuten um einen Zähler erhöht wird. Ich denke für das was du vorhast sollte das reichen.

              <block xmlns="https://developers.google.com/blockly/xml" type="on_ext" id="!Yu2T=MG}4ASMUCE4bZ4" x="-887" y="-612">
                <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                <field name="CONDITION">true</field>
                <field name="ACK_CONDITION"></field>
                <value name="OID0">
                  <shadow type="field_oid" id="#|oI(iifqu_dni]QN^)y">
                    <field name="oid">sonoff.0.Verlaengerungsschnur.POWER2</field>
                  </shadow>
                </value>
                <statement name="STATEMENT">
                  <block type="variables_set" id="m=Teu2Zy-b.N|@0XdF!l">
                    <field name="VAR" id="%S,KVC0xxmw?`!2=H:Jj">Betriebsstunden</field>
                    <value name="VALUE">
                      <block type="get_value" id="D;!iL!U0Gh#r1N-Wcfa[">
                        <field name="ATTR">val</field>
                        <field name="OID">0_userdata.0.example_state</field>
                      </block>
                    </value>
                    <next>
                      <block type="timeouts_setinterval" id="+d0;tpqH%r,PS;W]x?TP">
                        <field name="NAME">Intervall</field>
                        <field name="INTERVAL">1</field>
                        <field name="UNIT">min</field>
                        <statement name="STATEMENT">
                          <block type="controls_if" id="U^aU^TiKi:HBxVh:KO^c">
                            <mutation else="1"></mutation>
                            <value name="IF0">
                              <block type="logic_compare" id="rBa-O[n0s34V-xghnffs">
                                <field name="OP">EQ</field>
                                <value name="A">
                                  <block type="get_value" id="8g?}|:)g~UPZce)}uZqm">
                                    <field name="ATTR">val</field>
                                    <field name="OID">sonoff.0.Verlaengerungsschnur.POWER2</field>
                                  </block>
                                </value>
                                <value name="B">
                                  <block type="logic_boolean" id="Fm8q+YU|Y?FOT.6tIo(M">
                                    <field name="BOOL">TRUE</field>
                                  </block>
                                </value>
                              </block>
                            </value>
                            <statement name="DO0">
                              <block type="math_change" id="*pP9oIz@y9txC|L{-dMq">
                                <field name="VAR" id="%S,KVC0xxmw?`!2=H:Jj">Betriebsstunden</field>
                                <value name="DELTA">
                                  <shadow type="math_number" id="LDIw6nwjqq#qGWwVO4gC">
                                    <field name="NUM">1</field>
                                  </shadow>
                                </value>
                                <next>
                                  <block type="control" id="y47s?)ft1{nsAZ#4f0R%">
                                    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                    <field name="OID">0_userdata.0.example_state</field>
                                    <field name="WITH_DELAY">FALSE</field>
                                    <value name="VALUE">
                                      <block type="variables_get" id="6}{/!`ZS3F@@3YBZvjgm">
                                        <field name="VAR" id="%S,KVC0xxmw?`!2=H:Jj">Betriebsstunden</field>
                                      </block>
                                    </value>
                                  </block>
                                </next>
                              </block>
                            </statement>
                            <statement name="ELSE">
                              <block type="timeouts_clearinterval" id="20f9o050S^Y6?n#Qy5Lx">
                                <field name="NAME">Intervall</field>
                              </block>
                            </statement>
                          </block>
                        </statement>
                      </block>
                    </next>
                  </block>
                </statement>
              </block>
              

              Damit solltest du weiterkommen. Du hast damit aber nur eine Minutengenaue Betriebsstundenanzahl. "example_state" muss als Zahl definiert sein und "Verlängerungsschnur Grille" sollte deine Steckdose zum an und ausschalten der IR Strahler sein.

              1 Antwort Letzte Antwort
              0
              • Basti97B Basti97

                @paul53 Ich habe mal eine Frage zu deinem Script die Betriebsstunden werden erst dann berechnet wenn der Datenpunkt in diesem Fall die Heizung wieder ausgeschaltet wurde. Oder? Gibt es auch eine Möglichkeit die Betriebsstunden so lange mit zu zählen bis der Datenpunkt wieder auf false bzw ausgeschaltet wurde.
                Noch eine zweite Frage werden die Betriebsstunden bei dem nächsten mal einschalten wieder auf 0 gesetzt oder weiter gerechnet. Es wäre schön wenn das Script beide Funktion hätte.

                Gruß Basti :) :)

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #8

                @basti97 sagte: werden die Betriebsstunden bei dem nächsten mal einschalten wieder auf 0 gesetzt oder weiter gerechnet.

                Es wird weiter gerechnet (kumulative Betriebsstunden).

                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

                Basti97B 1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @basti97 sagte: werden die Betriebsstunden bei dem nächsten mal einschalten wieder auf 0 gesetzt oder weiter gerechnet.

                  Es wird weiter gerechnet (kumulative Betriebsstunden).

                  Basti97B Offline
                  Basti97B Offline
                  Basti97
                  Most Active
                  schrieb am zuletzt editiert von
                  #9

                  @paul53 Dankeschön wo muss ich den Datenpunkt eintragen der überwacht werden soll.

                  Iobroker läuft als VM auf Proxmoxserver x folgende Hersteller im Einsatz Sonoff, Gosund, Siemens x Aofo über Tasmota x Zigbee x das Smarthome wächst und wächst

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • Basti97B Basti97

                    @paul53 Dankeschön wo muss ich den Datenpunkt eintragen der überwacht werden soll.

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von paul53
                    #10

                    @basti97 sagte: wo muss ich den Datenpunkt eintragen der überwacht werden soll.

                    Trage Deine IDs ein

                    // Betriebsstunden
                    const idAktor   = '...'; // zu überwachender Aktor
                    const idBetrieb = '...'; // eigener Datenpunkt für die Betriebsstunden (kumulativ)
                    const idDauer   = '...'; // eigener Datenpunkt für die letzte Einschaltdauer (in h) 
                    
                    var betrieb = getState(idBetrieb).val;
                     
                    function stunden(dp) {
                        if(!dp.state.val) {
                            let dauer = (dp.state.lc - dp.oldState.lc) / 3600000;
                            betrieb += dauer;
                            setState(idBetrieb, Math.round(betrieb * 10) / 10, true); // 1 Nachkommastelle
                            setState(idDauer, Math.round(dauer * 10) / 10, true); // 1 Nachkommastelle
                        }
                    }
                     
                    on(idAktor, stunden);
                    

                    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

                    Basti97B 1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @basti97 sagte: wo muss ich den Datenpunkt eintragen der überwacht werden soll.

                      Trage Deine IDs ein

                      // Betriebsstunden
                      const idAktor   = '...'; // zu überwachender Aktor
                      const idBetrieb = '...'; // eigener Datenpunkt für die Betriebsstunden (kumulativ)
                      const idDauer   = '...'; // eigener Datenpunkt für die letzte Einschaltdauer (in h) 
                      
                      var betrieb = getState(idBetrieb).val;
                       
                      function stunden(dp) {
                          if(!dp.state.val) {
                              let dauer = (dp.state.lc - dp.oldState.lc) / 3600000;
                              betrieb += dauer;
                              setState(idBetrieb, Math.round(betrieb * 10) / 10, true); // 1 Nachkommastelle
                              setState(idDauer, Math.round(dauer * 10) / 10, true); // 1 Nachkommastelle
                          }
                      }
                       
                      on(idAktor, stunden);
                      
                      Basti97B Offline
                      Basti97B Offline
                      Basti97
                      Most Active
                      schrieb am zuletzt editiert von
                      #11

                      @paul53 Super vielen Dank ich probiere es aus. :)

                      Iobroker läuft als VM auf Proxmoxserver x folgende Hersteller im Einsatz Sonoff, Gosund, Siemens x Aofo über Tasmota x Zigbee x das Smarthome wächst und wächst

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      496

                      Online

                      32.7k

                      Benutzer

                      82.4k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe