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
    12
    1
    129

  • 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.2k

[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
    #1

    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 1 Antwort Letzte Antwort
    0
    • 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

                        554

                        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