Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Einsteigerfragen
    4. Automatisierung
    5. Datenpunkte in Zukunft - in Influx abspeichern?

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Datenpunkte in Zukunft - in Influx abspeichern?

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

      Hallo, ich habe den Influx-History-Adapter installiert. Der speichert Daten (akt. Temperatur) immer mir dem aktuellen timestamp. Nun habe ich aber auch zukünftige Daten aus dem WeatherUnderground-Adapter.
      Für einen Vergleich von Prognose und eintretenden Ereignis möchte ich die für künftige Zeiten prognostizierten Daten abspeichern und dann (zweite Herausforderung) in Grafana anzeigen. Es soll also ein Graph mit den gemessenen Temperaturen angezeigt werden und ein zweiter Graph mit den prognostizierten Tmperaturen und zwar so, dass sie die selbe Zeit-Achse nutzen. Die prognostizierten Werte sollen dann über das aktuelle Datum hinaus angezeigt werden. Ist das mit Influx und Grafana überhaupt möglich? Wie müsste ich die Messwerte in Influx speichern? Da müsste ich ja auch den timestamp mit angeben.
      Hat das schon mal jemand gemacht? Im Forum habe ich nicht viel und nichts passendes zu diesem Thema finden können.
      Vielen Dank im Vorraus für euer Gehirnschmalz!

      MartinP 1 Reply Last reply Reply Quote 0
      • MartinP
        MartinP @Andreas 9 last edited by MartinP

        @andreas-9 Mit der Kommandozeilen-Api habe ich schon Datenpunkte in der Influx-DB "Glattgebügelt", wenn es da einen Ausreißer gab, weil eine Änderung eines Blockly-Skriptes fehlerhaft war ...

        Sollte theoretisch auch mit Datenpunkten in der Zukunft gehen ...

        Grafana paart sich ganz gut mit Influx, aber das ist kein Muss... Es gibt auch wohl einen Grafana-Adapter für WeatherUnderground...

        https://github.com/nbrownus/nestflux

        https://grafana.com/blog/2024/12/26/how-to-monitor-your-local-weather-with-grafana/

        Und das noch für die andere Richtung
        https://github.com/nitrogen76/cheapWeather

        Selbst hier im Forum

        https://forum.iobroker.net/topic/58707/wettervorhersage-in-influxdb-grafana-über-javascript

        A 1 Reply Last reply Reply Quote 0
        • A
          Andreas 9 @MartinP last edited by

          @martinp vielen Dank!
          Das hilft wahrscheinlich schon um mich da tiefer einzuarbeiten. Schon mal gut zu wissen, dass es offenbar keine fertige Lösung gibt.

          S 1 Reply Last reply Reply Quote 0
          • S
            stenmic @Andreas 9 last edited by stenmic

            @andreas-9

            so kannst du manuell Daten nach InfluxDB2 schreiben.
            timestamp in der Zukunft ist natürlich möglich.
            Ich nutze das für die Solcast Prognose fürn nächsten Tag.

            2025-04-14 17 42 21.jpg

            Blockly:

            <xml xmlns="https://developers.google.com/blockly/xml">
             <variables>
               <variable id=",:{hr%rjz2^[24zr^p7a">Datenbank</variable>
               <variable id="Dlo+1PLQemZy?.iB}=Lx">Datenpunkt</variable>
               <variable id="(QRDIt)0edV4EIK+koiO">Wert</variable>
               <variable id=".Et{LjN`7`SMLUgK-W,P">timestamp</variable>
             </variables>
             <block type="procedures_defcustomnoreturn" id="bWK`G{.=CsgMCevgYtUA" x="-112" y="13">
               <mutation statements="false">
                 <arg name="Datenbank" varid=",:{hr%rjz2^[24zr^p7a"></arg>
                 <arg name="Datenpunkt" varid="Dlo+1PLQemZy?.iB}=Lx"></arg>
                 <arg name="Wert" varid="(QRDIt)0edV4EIK+koiO"></arg>
                 <arg name="timestamp" varid=".Et{LjN`7`SMLUgK-W,P"></arg>
               </mutation>
               <field name="NAME">Sent2InfluxDB</field>
               <field name="SCRIPT">c2VuZFRvKERhdGVuYmFuaywgJ3N0b3JlU3RhdGUnLCB7DQogICAgaWQ6IERhdGVucHVua3QsDQogICAgc3RhdGU6IHt0czogdGltZXN0YW1wLA0KICAgIHZhbDogV2VydCwNCiAgICBhY2s6IHRydWUsDQogICAgZnJvbTogImphdmFzY3JpcHQuMCIsDQogICAgcTogMH19KTs=</field>
               <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
             </block>
             <block type="on" id="?)2%fU/_=;SjvXtJWEgS" x="-112" y="63">
               <field name="OID">ID auswählen</field>
               <field name="CONDITION">ne</field>
               <field name="ACK_CONDITION"></field>
               <statement name="STATEMENT">
                 <block type="procedures_callcustomnoreturn" id="K|`4Rwsp:OGK^lG/fyiK">
                   <mutation name="Sent2InfluxDB">
                     <arg name="Datenbank"></arg>
                     <arg name="Datenpunkt"></arg>
                     <arg name="Wert"></arg>
                     <arg name="timestamp"></arg>
                   </mutation>
                   <value name="ARG0">
                     <block type="text" id="*t/+=tEHfwMLx,Fv.xB+">
                       <field name="TEXT">influxdb.0</field>
                     </block>
                   </value>
                   <value name="ARG1">
                     <block type="text" id="lvQN)7R3YJwIKdTMIB/s">
                       <field name="TEXT">_measurement</field>
                     </block>
                   </value>
                   <value name="ARG2">
                     <block type="math_number" id="$g2SHGNScBrEzpn9U8-%">
                       <field name="NUM">0</field>
                     </block>
                   </value>
                   <value name="ARG3">
                     <block type="time_get" id="{i418$+K(_gV~8)iEohh">
                       <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                       <field name="OPTION">object</field>
                     </block>
                   </value>
                 </block>
               </statement>
             </block>
            </xml>
            

            Fuktion:

            sendTo(Datenbank, 'storeState', {
               id: Datenpunkt,
               state: {ts: timestamp,
               val: Wert,
               ack: true,
               from: "javascript.0",
               q: 0}});
            

            das würde auch gehen:
            2025-04-14 17 48 26.jpg

            A 2 Replies Last reply Reply Quote 0
            • A
              Andreas 9 @stenmic last edited by

              @stenmic Das ist super! Hab mir schon gedacht, dass das so in etwa gehen muss. Ich probiere das gleichfalls aus. Vielen Dank!

              1 Reply Last reply Reply Quote 0
              • A
                Andreas 9 @stenmic last edited by

                @stenmic Toll! Funktioniert!!! 🙂
                shelly.jpg
                Vielen Dank nochmals! 😂

                S 1 Reply Last reply Reply Quote 0
                • S
                  stenmic @Andreas 9 last edited by

                  @andreas-9 gerne

                  MartinP 1 Reply Last reply Reply Quote 0
                  • MartinP
                    MartinP @stenmic last edited by MartinP

                    @stenmic Das gibt mir gerade eine Idee für einen Vis View, mit einer Art "Influx-Putzer"

                    Bisher habe ich die Fehlwerte in der Influx-DB immer mit der Kommandozeile geputzt ...

                    S 1 Reply Last reply Reply Quote 0
                    • S
                      stenmic @MartinP last edited by

                      @martinp möchtest du Daten löschen?
                      Da hätte ich auch was…
                      IMG_1099.jpeg

                      MartinP 1 Reply Last reply Reply Quote 0
                      • MartinP
                        MartinP @stenmic last edited by

                        @stenmic Ja, und das dann natürlich mit Bindings an eine Eingabemaske in vis o. ä. 😉
                        aber wahrscheinlich ist man da auch nur marginal schneller, als wenn man das in der Kommandozeile einfach heruntertippt ...

                        Das Access-Token ist in der Javascript funktion verborgen? Das wäre der einzige Punkt mit signifikantem Optimierungsbedarf... die untenstehende Kommandozeile ist schon SEHR lang, wenn man sie zusammengeklöppelt hat

                        influx delete   --bucket iobroker ...
                        
                        S 1 Reply Last reply Reply Quote 0
                        • S
                          stenmic @MartinP last edited by stenmic

                          @martinp ne, der Token ist im Adapter 🙂

                          Blockly

                          <xml xmlns="https://developers.google.com/blockly/xml">
                           <variables>
                             <variable id="0grn+ZZ^A{TEgVTYs)x4">Influxdb</variable>
                             <variable id="7h*q~fZDx{Qg;bxZv02f">Datenpunkt</variable>
                             <variable id="bU67QEX4Pg0|ofer{R)T">Startdatum</variable>
                             <variable id="{fo.)eP%`achV^,#lu7p">Enddatum</variable>
                             <variable id="FY32ON^[.^(}pN3d25;j">Ergebnis</variable>
                           </variables>
                           <block type="procedures_defcustomreturn" id="^3P(QTQ]b)r44*Ap2[$s" x="138" y="-862">
                             <mutation statements="false">
                               <arg name="Influxdb" varid="0grn+ZZ^A{TEgVTYs)x4"></arg>
                               <arg name="Datenpunkt" varid="7h*q~fZDx{Qg;bxZv02f"></arg>
                               <arg name="Startdatum" varid="bU67QEX4Pg0|ofer{R)T"></arg>
                               <arg name="Enddatum" varid="{fo.)eP%`achV^,#lu7p"></arg>
                             </mutation>
                             <field name="NAME">Query</field>
                             <field name="SCRIPT">DQp2YXIgZXJnZWJuaXM7DQpzZW5kVG8oJ2luZmx1eGRiLicrSW5mbHV4ZGIrJycsICdkZWxldGVSYW5nZScsIFsNCiAgICB7aWQ6ICcnK0RhdGVucHVua3QrJycsIHN0YXJ0OiAnK1N0YXJ0ZGF0dW0rJywgZW5kOiAnK0VuZGRhdHVtKyd9DQpdLCANCg0KZnVuY3Rpb24gKHJlc3VsdCkgew0KICAgIGlmIChyZXN1bHQuZXJyb3IpIHsNCiAgICAgICAgY29uc29sZS5lcnJvcihyZXN1bHQuZXJyb3IpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIC8vIHNob3cgcmVzdWx0DQogICAgICAgIC8vIGNvbnNvbGUubG9nKCdSb3dzOiAnICsgSlNPTi5zdHJpbmdpZnkocmVzdWx0KSk7DQogICAgICAgIGVyZ2VibmlzID0gSlNPTi5zdHJpbmdpZnkocmVzdWx0KTsNCiAgICB9DQp9KTsNCmF3YWl0IHdhaXQoMTAwMCk7DQpyZXR1cm4gZXJnZWJuaXM7DQo=</field>
                             <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                           </block>
                           <block type="variables_set" id="Qpo#umj?Zy%]d6sR7az+" x="138" y="-792">
                             <field name="VAR" id="FY32ON^[.^(}pN3d25;j">Ergebnis</field>
                             <value name="VALUE">
                               <block type="procedures_callcustomreturn" id="~HE?3SQL+/75:(Ix}#^V">
                                 <mutation name="Query">
                                   <arg name="Influxdb"></arg>
                                   <arg name="Datenpunkt"></arg>
                                   <arg name="Startdatum"></arg>
                                   <arg name="Enddatum"></arg>
                                 </mutation>
                                 <value name="ARG0">
                                   <block type="text" id="=4LUZp0ul,`Gc[P6~=Si">
                                     <field name="TEXT">0</field>
                                   </block>
                                 </value>
                                 <value name="ARG1">
                                   <block type="text" id="SZ[VuOHvHspXe~`(~DKe">
                                     <field name="TEXT">xxx</field>
                                   </block>
                                 </value>
                                 <value name="ARG2">
                                   <block type="text" id="5iMW`#nn-(+}AY5A%5+f">
                                     <field name="TEXT">2024-08-17T13:00:00.000Z</field>
                                   </block>
                                 </value>
                                 <value name="ARG3">
                                   <block type="text" id="hra#F(}ld5]Ul1Nw!n%3">
                                     <field name="TEXT">2024-08-17T13:00:00.000Z</field>
                                   </block>
                                 </value>
                               </block>
                             </value>
                             <next>
                               <block type="debug" id="dBD/LU,q,`5r:-U]Y/Cy">
                                 <field name="Severity">warn</field>
                                 <value name="TEXT">
                                   <shadow type="text" id="/4edf?_}em?hla,K)f!a">
                                     <field name="TEXT">test</field>
                                   </shadow>
                                   <block type="variables_get" id="Rovd}jR]w[OI3]21#V]c">
                                     <field name="VAR" id="FY32ON^[.^(}pN3d25;j">Ergebnis</field>
                                   </block>
                                 </value>
                               </block>
                             </next>
                           </block>
                          </xml>
                          

                          Funktion

                          var ergebnis;
                          sendTo('influxdb.'+Influxdb+'', 'deleteRange', [
                             {id: ''+Datenpunkt+'', start: '+Startdatum+', end: '+Enddatum+'}
                          ], 
                          
                          function (result) {
                             if (result.error) {
                                 console.error(result.error);
                             } else {
                                 // show result
                                 // console.log('Rows: ' + JSON.stringify(result));
                                 ergebnis = JSON.stringify(result);
                             }
                          });
                          await wait(1000);
                          return ergebnis;
                          
                          

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          899
                          Online

                          31.7k
                          Users

                          79.7k
                          Topics

                          1.3m
                          Posts

                          3
                          11
                          279
                          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