Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [Frage] geparster Gesamt-Laufzeitwert umwandeln in täglichen Laufzeitwert für Flot

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Frage] geparster Gesamt-Laufzeitwert umwandeln in täglichen Laufzeitwert für Flot

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 last edited by

      Javascript-Lösung:

      var idLaufzeit = '...';  // Datenpunkt-ID vorhanden
      var idGestern = '...';   // Datenpunkt-ID für neuen DP mit Gesamtlaufzeit um Mitternacht
      var idTag = '...';       // Datenpunkt-ID für neuen DP mit täglicher Laufzeit
      
      function calcTag() {
          var gesamt = getState(idLaufzeit).val;
          var gestern = getState(idGestern).val;
          setState(idTag, gesamt - gestern);
          setState(idGestern, gesamt);
      }
      
      schedule('0 0 * * *', calcTag);  // täglich um Mitternacht    
      
      
      1 Reply Last reply Reply Quote 0
      • Q
        Qlink last edited by

        Hi paul,

        vielen Dank für das Script von dir.

        Leider bleiben die von mir angelegten Datenpunkte leer. Oder muss ich bis nach Mitternacht warten bis sich was tut ?

        Hier das adaptierte Script von dir:

        var idLaufzeit = 'parser.0.Laufzeit_Heizen';  // Datenpunkt-ID vorhanden
        var idGestern = 'parser.0.Laufzeit_Heizen.Gestern';   // Datenpunkt-ID für neuen DP mit Gesamtlaufzeit um Mitternacht
        var idTag = 'parser.0.Laufzeit_Heizen.Tag';       // Datenpunkt-ID für neuen DP mit täglicher Laufzeit
        
        function calcTag() {
            var gesamt = getState(idLaufzeit).val;
            var gestern = getState(idGestern).val;
            setState(idTag, gesamt - gestern);
            setState(idGestern, gesamt);
        }
        
        schedule('0 0 * * *', calcTag);  // täglich um Mitternacht  
        

        und hier die angelegten DPs:

        415_laufzeit.png

        Oder mache ich sonst was falsch ?

        Beste Grüße

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

          @Qlink:

          Oder muss ich bis nach Mitternacht warten bis sich was tut ? `
          Ja. Du solltest erst einmal eine Uhrzeit in Kürze (z.B. '55 22 * * *') eingeben, bis 22:55 Uhr warten und anschließend zurück ändern.
          @Qlink:

          Oder mache ich sonst was falsch ? `
          Die Datenpunkte müssen vom Typ 'Zahl' sein (nicht 'Zeichenkette').

          1 Reply Last reply Reply Quote 0
          • Q
            Qlink last edited by

            Hi paul,

            heute morgen steht folgendes in den DPs:
            415_laufzeit2.png

            Es wird also bei allen DPs derselbe Wert wie die Gesamtlaufzeit angezeigt.

            Stimmt bei der Berechnung etwas nicht, oder muss ich noch einen Tag warten, weil es ja den Wert für gestern heute noch nicht gibt sondern erst morgen…? (hab ich das jetzt richtig gesagt ? :mrgreen:)

            und wieso sind die beiden Werte rot ? Was hat das zu bedeuten ?

            edit: was ich ebenfalls gerade noch gemerkt habe:

            scheinbar funktioniert der parser adapter nicht mehr seit ich die beiden DPs angelegt habe:

            es kommt folgende FM im Log:

            host.SERVER	2017-05-23 07:38:25.987	info	instance system.adapter.parser.0 started with pid 18472
            host.SERVER	2017-05-23 07:37:55.956	info	Restart adapter system.adapter.parser.0 because enabled
            host.SERVER	2017-05-23 07:37:55.956	error	instance system.adapter.parser.0 terminated with code 6 (uncaught exception)
            parser.0	2017-05-23 07:37:54.987	error	TypeError: Cannot read property 'match' of undefined at readLink (C:\Program Files\ioBroker\node_modules\iobroker.parser\main.js:224:13) at poll (C:\Program Files\ioBroker\node_modules\iobroke
            parser.0	2017-05-23 07:37:54.987	error	uncaught exception: Cannot read property 'match' of undefined
            parser.0	2017-05-23 07:37:53.706	info	starting. Version 0.2.1 in C:/Program Files/ioBroker/node_modules/iobroker.parser, node: v4.5.0
            host.SERVER	2017-05-23 07:37:50.566	info	instance system.adapter.parser.0 started with pid 9840
            host.SERVER	2017-05-23 07:37:19.925	info	Restart adapter system.adapter.parser.0 because enabled
            host.SERVER	2017-05-23 07:37:19.925	error	instance system.adapter.parser.0 terminated with code 6 (uncaught exception)
            parser.0	2017-05-23 07:37:18.878	error	at Manager.ondecoded (C:\Program Files\ioBroker\node_modules\iobroker.js-controller\node_modules\socket.io-client\lib\manager.js:332:8)
            parser.0	2017-05-23 07:37:18.878	error	at Manager.Emitter.emit (C:\Program Files\ioBroker\node_modules\iobroker.js-controller\node_modules\socket.io-client\node_modules\component-emitter\index.js:133:20)
            parser.0	2017-05-23 07:37:18.878	error	at Manager. (C:\Program Files\ioBroker\node_modules\iobroker.js-controller\node_modules\socket.io-client\node_modules\component-bind\index.js:21:15)
            parser.0	2017-05-23 07:37:18.878	error	at Socket.onpacket (C:\Program Files\ioBroker\node_modules\iobroker.js-controller\node_modules\socket.io-client\lib\socket.js:236:12)
            parser.0	2017-05-23 07:37:18.878	error	at Socket.onack (C:\Program Files\ioBroker\node_modules\iobroker.js-controller\node_modules\socket.io-client\lib\socket.js:312:9)
            parser.0	2017-05-23 07:37:18.878	error	at Socket. (C:\Program Files\ioBroker\node_modules\iobroker.js-controller\lib\states\statesInMemClient.js:150:27)
            parser.0	2017-05-23 07:37:18.878	error	at C:\Program Files\ioBroker\node_modules\iobroker.js-controller\lib\adapter.js:3864:61
            parser.0	2017-05-23 07:37:18.878	error	at C:\Program Files\ioBroker\node_modules\iobroker.parser\main.js:300:21
            parser.0	2017-05-23 07:37:18.878	error	at poll (C:\Program Files\ioBroker\node_modules\iobroker.parser\main.js:270:13)
            parser.0	2017-05-23 07:37:18.878	error	at readLink (C:\Program Files\ioBroker\node_modules\iobroker.parser\main.js:224:13)
            parser.0	2017-05-23 07:37:18.878	error	TypeError: Cannot read property 'match' of undefined
            parser.0	2017-05-23 07:37:18.878	error	uncaught exception: Cannot read property 'match' of undefined
            parser.0	2017-05-23 07:37:18.191	info	starting. Version 0.2.1 in C:/Program Files/ioBroker/node_modules/iobroker.parser, node: v4.5.0
            host.SERVER	2017-05-23 07:37:16.941	info	instance system.adapter.parser.0 started with pid 8744
            host.SERVER	2017-05-23 07:36:46.925	info	Restart adapter system.adapter.parser.0 because enabled
            

            wenn ich die beiden DPs lösche, läuft der Parser Adapter wieder …

            jemand eine idee ?

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

              @Qlink:

              oder muss ich noch einen Tag warten, weil es ja den Wert für gestern heute noch nicht gibt sondern erst morgen…? `
              Ja. Oder Du startest die Funktion mal zwischendurch am Tag, indem Du die Funktion am Ende des Skripts aufrufst

              ...
              
              schedule('0 0 * * *', calcTag);  // täglich um Mitternacht  
              if(!getState(idGestern).val) calcTag();  // bei Script start, wenn noch kein Wert im Datenpunkt
              

              @Qlink:

              und wieso sind die beiden Werte rot ? Was hat das zu bedeuten ? `
              Das ist nur die Darstellung im Reiter "Objekte", dass state.ack = false (nicht bestätigt). Wenn es stört, müssen die setState() ergänzt werden:

                  setState(idTag, gesamt - gestern, true);
                  setState(idGestern, gesamt, true);
              
              

              @Qlink:

              …wenn ich die beiden DPs lösche, läuft der Parser Adapter wieder ... `
              Vielleicht will der Parser-Adapter Datenpunkte löschen, die nicht in seiner Konfiguration angegeben sind ? Da die Datenpunkte quasi unter einem Datenpunkt erzeugt wurden, kann es Probleme geben, die zur Fehlfunktion führen. Das sollte man auf jeden Fall vermeiden. Erzeuge die beiden zusätzlichen Datenpunkte vom Typ 'Zahl' unter javascript.0; dann gibt es keine Probleme. Namen: 'Laufzeit_Heizen.Gestern' und 'Laufzeit_Heizen.Tag'.

              var idLaufzeit = 'parser.0.Laufzeit_Heizen';  // Datenpunkt-ID vorhanden
              var idGestern = 'javascript.0.Laufzeit_Heizen.Gestern';   // Datenpunkt-ID für neuen DP mit Gesamtlaufzeit um Mitternacht
              var idTag = 'javascript.0.Laufzeit_Heizen.Tag';       // Datenpunkt-ID für neuen DP mit täglicher Laufzeit
              
              
              1 Reply Last reply Reply Quote 0
              • Q
                Qlink last edited by

                Hi Paul,

                vielen Dank für deine Hilfe.

                Ich hab die Änderungen soweit durchgeführt.

                Der Parser Adapter hängt sich jetzt nicht mehr auf 🙂

                Es erscheint allerdings beim Aufruf des Scripts folgende Warning im Log:

                javascript.0	2017-05-23 21:26:00.515	warn	Wrong type of javascript.0.Laufzeit_Heizen.Gestern: "string". Please fix, while deprecated and will not work in next versions.
                javascript.0	2017-05-23 21:25:14.501	info	script.js.Umrechnung_Laufzeit_WW: registered 0 subscriptions and 1 schedule
                javascript.0	2017-05-23 21:25:14.501	info	Start javascript script.js.Umrechnung_Laufzeit_WW
                javascript.0	2017-05-23 21:25:14.485	info	Stop script script.js.Umrechnung_Laufzeit_WW
                javascript.0	2017-05-23 21:23:00.580	warn	Wrong type of javascript.0.Laufzeit_Heizen.Gestern: "string". Please fix, while deprecated and will not work in next versions.
                javascript.0	2017-05-23 21:22:43.580	info	script.js.Umrechnung_Laufzeit_WW: registered 0 subscriptions and 1 schedule
                javascript.0	2017-05-23 21:22:43.580	warn	Wrong type of javascript.0.Laufzeit_Heizen.Gestern: "string". Please fix, while deprecated and will not work in next versions.
                javascript.0	2017-05-23 21:22:43.533	info	Start javascript script.js.Umrechnung_Laufzeit_WW
                javascript.0	2017-05-23 21:22:41.815	info	Stop script script.js.Umrechnung_Laufzeit_WW
                

                Die DPs Gestern und Tag bleiben bei 0h…

                415_laufzeit3.png

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

                  Der Wert im Datenpunkt "parser.0.Laufzeit_Heizen" ist offenbar ein String. Dann ergänze das Einlesen des Wertes um parseFloat().

                      var gesamt = parseFloat(getState(idLaufzeit).val);
                  
                  

                  Tausche bitte den Wert null bei max gegen eine vernüftige Zahl aus (1000000)

                  1 Reply Last reply Reply Quote 0
                  • Q
                    Qlink last edited by

                    Hi Paul,

                    ich hab alles soweit angepasst.

                    Er zeigt mir jetzt beim Gestern DP denselben Wert wie beim Laufzeit_Heizen DP.

                    Beim Tag DP zeigt er mir 0h.

                    Ich nehme mal an das liegt noch daran weil der Gestern Wert noch nicht vorhanden ist…

                    Ich warte mal auf morgen, ob sichs dann einpendelt ...(wenn ich den schedule Wert auf die aktuelle Uhrzeit ändere, erscheinen ebenfalls keine anderen Werte, auch im Log erscheint kein Scriptaufruf...)

                    Vielen Dank jedenfalls nochmal für deine tolle Hilfe!

                    Beste Grüße

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

                      @Qlink:

                      Er zeigt mir jetzt beim Gestern DP denselben Wert wie beim Laufzeit_Heizen DP.

                      Beim Tag DP zeigt er mir 0h. `
                      Das ist immer so, wenn die Heizung den ganzen Tag nicht gelaufen ist.

                      1 Reply Last reply Reply Quote 0
                      • Q
                        Qlink last edited by

                        Stimmt, das macht Sinn :mrgreen:

                        Ich hätte das Ganze jetzt auf für WW gemacht:

                        var idLaufzeit = 'parser.0.Laufzeit_WW';  // Datenpunkt-ID vorhanden
                        var idGestern = 'javascript.0.Laufzeit_WW.Gestern';   // Datenpunkt-ID für neuen DP mit Gesamtlaufzeit um Mitternacht
                        var idTag = 'javascript.0.Laufzeit_WW.Tag';       // Datenpunkt-ID für neuen DP mit täglicher Laufzeit
                        
                        function calcTag() {
                            var gesamt = parseFloat(getState(idLaufzeit).val);
                            var gestern = getState(idGestern).val;
                            setState(idTag, gesamt - gestern,true);
                            setState(idGestern, gesamt,true);
                        }
                        
                        schedule('0 0 * * *', calcTag);  // täglich um Mitternacht '55 22 * * *''0 0 * * *'
                        if(!getState(idGestern).val) calcTag();  // bei Script start, wenn noch kein Wert im Datenpunkt
                        

                        Hier bleiben beide Werte bei 0h und einer davon ist wieder rot:
                        415_laufzeit5.png

                        Muss ich hier noch was ändern ?

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

                          @Qlink:

                          Muss ich hier noch was ändern ? `
                          Sieht gut aus, wenn die ID des Datenpunktes "parser.0.Laufzeit_WW" stimmt.

                          Allerdings müsste der Wert für Gestern anders aussehen. Gibt es eine Fehlermeldung im Log ?

                          1 Reply Last reply Reply Quote 0
                          • Q
                            Qlink last edited by

                            Hi Paul,

                            ich hab den kompletten iobroker host neugestartet. Danach war der Gestern Wert da und es wird auch nichts mehr rot dargestellt.

                            Es wird trotzdem nicht der richtige Gestern Wert angezeigt, sondern immer nur der Gesamt Wert.

                            In Folge dessen bleibt auch der Tag Wert immer bei 0h.

                            Hier läuft noch was nicht richtig rund …
                            415_laufzeit6.png

                            1 Reply Last reply Reply Quote 0
                            • Q
                              Qlink last edited by

                              Update: anscheinend hat das Script noch einen Tag gebraucht… jetzt passt alles und die Werte werden alle korrekt angezeigt 🙂 🙂 🙂

                              Vielen Dank nochmal für deine Hilfe Paul.

                              Eine Frage noch: Gibt es sowas ähnliches wie einen Statistik Adapter ?

                              Ich möchte gerne die einzelnen Laufzeit Werte, Stromverbrauchs Werte usw. aufsummiert vom Jahr 2017 oder vom Winter 2016(gewisse Zeitspanne) o.ä. anzeigen/abrufen können ?

                              Wie könnte ich das noch umsetzen ?

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate
                              FAQ Cloud / IOT
                              HowTo: Node.js-Update
                              HowTo: Backup/Restore
                              Downloads
                              BLOG

                              401
                              Online

                              32.0k
                              Users

                              80.4k
                              Topics

                              1.3m
                              Posts

                              3
                              15
                              1489
                              Loading More Posts
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes
                              Reply
                              • Reply as topic
                              Log in to reply
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                              The ioBroker Community 2014-2023
                              logo