Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Falsche werte schon bei Aufzeichnung ausschliessen

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Falsche werte schon bei Aufzeichnung ausschliessen

    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      legro @cainam last edited by legro

      @cainam said in Falsche werte schon bei Aufzeichnung ausschliessen:

      Wie ist die Zeile 1 zu interpretieren, ..

      Das Beispiel stammt aus einem CRON-Job, der um 0:00 Uhr aktiv wird und Werte des vergangenen Tages abspeichern soll. Die erste Zeile bewirkt, dass der Zeitstempel des Datensatzes auf 12:00 Uhr des vergangenen Tages gesetzt wird; ohne diese Korrektur würde das Ganze ja dem Folgetag zugewiesen.

      Mit der Angabe in ziel gibst du das gewünschte measurement nach deinen Wünschen vor. Wenn die zugehörige Datenreihe vorhanden ist, wird der Datenpunkt angefügt, im anderen Fall wird eine neue Datenreihe erzeugt.

      1 Reply Last reply Reply Quote 0
      • C
        cainam @legro last edited by cainam

        @legro
        passiert das realtime, dh sobald sich der datenwert ändert?

        und wie kann ich das am besten kombinieren für mehrere datenpunkte?

        so? wobei xxx... die verschiedenen werte sind?

        const idSrc = 'deconz.0.Sensors.10.temperature'/*Temperature 10 - Aussen temperature*/
        const idSrc = 'xxx1'
        const idSrc = 'xxx2...'
        
        const idDst = '0_userdata.0.InfluxDB_Dateninfos.Aussen.Temperatur'/*Temperatur*/ 
         const idDst = 'xxx1'
        const idDst = 'xxx2...'
        
        on(idSrc, function(dp) {
            if(dp.state.val > -25) setState(idDst, dp.state.val, true);
        });
        
        L C 2 Replies Last reply Reply Quote 0
        • L
          legro @cainam last edited by

          @cainam said in Falsche werte schon bei Aufzeichnung ausschliessen:

          @legro
          passiert das realtime, dh sobald sich der datenwert ändert?

          Wann das passiert, kannst du doch mit einem Trigger steuern; z.B.: Wenn der Wert im betreffenden Datenpunkt geändert/aktualisiert wird, löst der Trigger aus und du kannst die gewünschten Kontrollen durchführen lassen und die korrigierten Werte in die Datenbank schreiben.

          In meinem Beispiel, aus dem ich das Ganze entnommen habe, geschieht das Ganze mittels eines CRON-Jobs.

          1 Reply Last reply Reply Quote 0
          • C
            cainam @cainam last edited by cainam

            @cainam said in Falsche werte schon bei Aufzeichnung ausschliessen:

            if(dp.state.val > -25) setS

            und müsste das nicht < -25 sein ? Also alle werte die weniger sind als -25....?

            ich könnte ja einfach beim originalobjekt ein "min": -25, und ein "max": 50, machen!?

            paul53 L 2 Replies Last reply Reply Quote 0
            • paul53
              paul53 @cainam last edited by

              @cainam sagte: müsste das nicht < -25 sein ?

              Nein, denn es sollen nur Werte > -25 °C weiter gegeben werden.

              @cainam sagte in Falsche werte schon bei Aufzeichnung ausschliessen:

              beim originalobjekt ein "min": -25, und ein "max": 50, machen!?

              Dann erzeugt der js-controller lediglich eine Warnung.

              @cainam sagte in Falsche werte schon bei Aufzeichnung ausschliessen:

              für mehrere datenpunkte?

              const idSrc1 = 'deconz.0.Sensors.10.temperature'/*Temperature 10 - Aussen temperature*/
              const idSrc2 = 'xxx1'
              const idSrc3 = 'xxx2...'
               
              const idDst1 = '0_userdata.0.InfluxDB_Dateninfos.Aussen.Temperatur'/*Temperatur*/ 
              const idDst2 = 'xxx1'
              const idDst3 = 'xxx2...'
               
              on(idSrc1, function(dp) {
                  if(dp.state.val > -25) setState(idDst1, dp.state.val, true);
              });
              on(idSrc2, function(dp) {
                  if(dp.state.val > -25) setState(idDst2, dp.state.val, true);
              });
              on(idSrc3, function(dp) {
                  if(dp.state.val > -25) setState(idDst3, dp.state.val, true);
              });
              
              C 1 Reply Last reply Reply Quote 0
              • L
                legro @cainam last edited by

                @cainam

                Wenn du, wie du schreibst, noch in den Anfängen steckst, warum verwendest du nicht Blockly? Da kannst du dir das Ganze bequem und schnell zusammenstellen. Mein nachfolgend dargestellter Vorschlag kommt gänzlich ohne zusätzliche Datenpunkte aus.

                Zum Eintragen in InfluxDB kommt die auf storeState basierende JavaScript-Funktion zur Anwendung, welche den gewünschten Wert in die Datenbank schreibt. Im Trigger wird die Meldung (Datenpunkt) des Sensors bewertet und nur dann in die Datenbank geschrieben, wenn der Wert zwischen -25 und 100 liegt.

                ca73e3a3-791c-418f-9051-04cf4bd45aca-image.png

                C 1 Reply Last reply Reply Quote 0
                • C
                  cainam @legro last edited by cainam

                  @legro

                  Danke tausend mal, eine Frage noch. Das JavaScript der function sieht so aus?

                  
                  sendTo('influxdb.0', 'storeState', {
                      id: ziel,
                      state: {ts: zeit, val: wert, ack: false, from: ziel}
                  }, result => console.log('added'));
                  
                  
                  L 1 Reply Last reply Reply Quote 0
                  • L
                    legro @cainam last edited by legro

                    @cainam

                    sendTo('influxdb.0', 'storeState', {
                        id: 'mbus.0.counter.xxx',
                        state: {ts: 1589458809352, val: 123, ack: false, from: 'system.adapter.whatever.0', ...}
                    }, result => console.log('added'));
                    

                    Ausgangspunkt für meine Funktion ist die auf GitHub vorgestellte Funktion sendTo mit dem Parameter storeState, wie ich sie dir hier aus GitHub herauskopiert habe. Die falsche Klammersetzung und Adapterbezeichnung in diesem Beispiel habe ich hierbei schon korrigiert.

                    Diese kannst du dir nach Belieben anpassen. Selbstverständlich kannst du auch meine (verkürzte) Version als Ausgangspunkt verwenden. Ob die array function in der 4.Zeile ggf. optional ist (also weggelassen werden kann), habe ich noch nicht ausprobiert.

                    Den Parameter state in der 3.Zeile kannst du nach Belieben füllen. Das zweite Beispiel auf GitHub zeigt, dass du anstelle eines einzelnen Objektes auch ein ganzes Array [..] solcher state-Objekte übergeben kannst, die mittels eines einzigen Aufrufs als measurements in InfluxDB eingetragen werden.

                    Viel Erfolg!

                    1 Reply Last reply Reply Quote 0
                    • C
                      cainam @paul53 last edited by cainam

                      @paul53 said in Falsche werte schon bei Aufzeichnung ausschliessen:

                                                                                                                                                  const idSrc1 = 'deconz.0.Sensors.10.temperature'/*Temperature 10 - Aussen temperature*/                                                                                                                                                                            const idSrc2 = 'xxx1'                                                                                                                                                                            const idSrc3 = 'xxx2...'                                                                                                                                                                                                                                                                                                                                                         const idDst1 = '0_userdata.0.InfluxDB_Dateninfos.Aussen.Temperatur'/*Temperatur*/                                                                                                                                                                             const idDst2 = 'xxx1'                                                                                                                                                                            const idDst3 = 'xxx2...'                                                                                                                                                                                                                                                                                                                                                         on(idSrc1, function(dp) {                                                                                                                                                                                if(dp.state.val > -25) setState(idDst1, dp.state.val, true);                                                                                                                                                                            });                                                                                                                                                                            on(idSrc2, function(dp) {                                                                                                                                                                                if(dp.state.val > -25) setState(idDst2, dp.state.val, true);                                                                                                                                                                            });                                                                                                                                                                            on(idSrc3, function(dp) {                                                                                                                                                                                if(dp.state.val > -25) setState(idDst3, dp.state.val, true);                                                                                                                                                                            });                                            
                      

                      Habe nun das mal so gemacht:

                      const idSrc1 = 'deconz.0.Sensors.10.temperature'/*Temperature 10 - Aussen temperature*/
                      const idSrc2 = 'deconz.0.Sensors.13.temperature'/*Temperature 13 - Wohnzimmer temperature*/
                      
                      const idDs1t = '0_userdata.0.InfluxDB_Dateninfos.Aussen.Temperatur'/*Temperatur*/ 
                      const idDst2 = '0_userdata.0.InfluxDB_Dateninfos.Innen.Wohnzimmer'/*Wohnzimmer*/
                      
                      on(idSrc1, function(dp) {
                          if(dp.state.val > -25) setState(idDst1, dp.state.val, true);
                      });
                      on(idSrc2, function(dp) {
                          if(dp.state.val > -25) setState(idDst2, dp.state.val, true);
                      });
                      

                      leider kommt da immer ein fehler (gehen tut es aber)

                      Fehler: 12:20:08.518 error javascript.0 (600) at Object.<anonymous> (script.js.Beispiele_und_Test.Daten_vorbereiten_influx:8:37)
                      12:48:34.457 error javascript.0 (600) at Object.<anonymous> (script.js.Beispiele_und_Test.Daten_vorbereiten_influx:8:37)
                      13:16:59.930 error javascript.0 (600) at Object.<anonymous> (script.js.Beispiele_und_Test.Daten_vorbereiten_influx:8:37)
                      13:43:43.411 error javascript.0 (600) at Object.<anonymous> (script.js.Beispiele_und_Test.Daten_vorbereiten_influx:8:37)
                      13:43:54.197 error javascript.0 (600) at Object.<anonymous> (script.js.Beispiele_und_Test.Daten_vorbereiten_influx:8:37)
                      13:50:40.761 error javascript.0 (600) at Object.<anonymous> (script.js.Beispiele_und_Test.Daten_vorbereiten_influx:8:37)
                      13:51:31.516 error javascript.0 (600) at Object.<anonymous> (script.js.Beispiele_und_Test.Daten_vorbereiten_influx:8:37)
                      13:52:32.862 error javascript.0 (600) at Object.<anonymous> (script.js.Beispiele_und_Test.Daten_vorbereiten_influx:8:37)
                      13:54:45.267 error javascript.0 (600) at Object.<anonymous> (script.js.Beispiele_und_Test.Daten_vorbereiten_influx:8:37)
                      14:02:52.445 error javascript.0 (600) at Object.<anonymous> (script.js.Beispiele_und_Test.Daten_vorbereiten_influx:8:37)
                      14:06:25.954 error javascript.0 (600) at Object.<anonymous> (script.js.Beispiele_und_Test.Daten_vorbereiten_influx:8:37)
                      14:12:21.660 error javascript.0 (600) at Object.<anonymous> (script.js.Beispiele_und_Test.Daten_vorbereiten_influx:8:37)
                      14:19:18.080 error javascript.0 (600) at Object.<anonymous> (script.js.Beispiele_und_Test.Daten_vorbereiten_influx:8:37)
                      14:40:47.328 error javascript.0 (600) at Object.<anonymous> (script.js.Beispiele_und_Test.Daten_vorbereiten_influx:8:37)

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

                        @cainam
                        Vertipper?

                        const idDs1t
                        
                        C 1 Reply Last reply Reply Quote 0
                        • C
                          cainam @paul53 last edited by

                          @paul53 ups... sorry - danke

                          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

                          827
                          Online

                          32.0k
                          Users

                          80.4k
                          Topics

                          1.3m
                          Posts

                          4
                          21
                          904
                          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