Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. SQL-Adapter, Werte nach Alter verdichten

    NEWS

    • Amazon Alexa - ioBroker Skill läuft aus ?

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    SQL-Adapter, Werte nach Alter verdichten

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

      Hi all,
      als Nicht-SQL-Spezialist suche ich eine Möglichkeit, die per SQL-Adapter in Mysql geloggten Werte nach Alter zu verdichten. Also z.B. die Außentemperatur pro Tag im laufenden Monat laufend bei Änderung, nach 1 Monat nur noch Höchst-/Niederst- und Durchschnittstemperaturen pro Tag und von Vorjahren ggf. diese nur noch pro Woche oder Monat vorzuhalten. Dabei sollten die Intervalle und Verdichtungstypen allgemein und je Adapter und Datenpunkte parametrierbar sein.
      Hat so etwas jemand schon gemacht?
      Wäre dies eine Anregung für die Weiterentwicklung des SQL-Adapters?
      Dank & Gruß

      OliverIO Azrael42 2 Replies Last reply Reply Quote 0
      • OliverIO
        OliverIO @tomrey last edited by OliverIO

        @tomrey

        Generell ist das machbar
        Datenbanken und SQL sind in der Regel darauf ausgelegt kontinuierliche Aufzeichnungen zu haben und dann bei der Abfrage die entsprechenden Aggregation durchzuführen.
        In deinem Fall wären das zwei Abfragen, einmal für den laufenden Monat beziehungsweise meinst du sicherlich für die letzten X Tage
        Und einmal für die Höchst und Tiefstwerte für die Zeit davor.
        Wenn das beispielsweise alles in einem Diagramm angezeigt werden soll, kann man diese beiden Abfragen auch mit einem UNION zusammenfassen.

        Wenn du eine echte Bereinigung der Tabellen haben möchtest, könnte man die Höchst und Tiefstwerte mit einer anfüge Abfrage hinzufügen (insert into) und die dann überflüssigen Einzelwerte löschen.

        Wenn Festplatten Speicherplatz nicht unbedingt so die Rolle spielt und die Tabellen richtig indiziert sind, würde ich die erste Möglichkeit ohne löschen empfehlen. Lieber dann irgendwann mal alte Daten, wenn sie wirklich nicht mehr benötigt werden dann löschen. Beispielsweise nach einem Jahr

        Wenn du dich für das Löschen entscheidest, würde ich die Werte aber in eigenen Tabellen vorhalten

        1 Reply Last reply Reply Quote 0
        • Azrael42
          Azrael42 @tomrey last edited by Azrael42

          @tomrey
          Ich gruppiere regelmäßig die geloggten Werte in der MariaDB.
          Ich zeichne viele Werte im 20 Sekunden Takt auf und habe die Historie der letzten Jahre in der DB gesammelt. Die ich natürlich auch ungern verlieren möchte. Aktuell laufen pro Jahr ca 30 Millionen Datensätze auf, Tendenz steigend. Da mein winziger DB Server damit überfordert ist, aggregiere ich die Werte ab und an.
          Das mache ich über einen GROUP BY auf eine Zeitperiode. Im ersten Jahr sind es bei mir 10 Min, dann immer länger.
          Da das Skript nicht so häufig läuft, mache ich das per Hand und für alle ID's.

          T 1 Reply Last reply Reply Quote 0
          • T
            tomrey @Azrael42 last edited by tomrey

            Danke für eure Infos.
            Ich werde mit einer zusätzlichen, verdichteten Datenbank arbeiten und die Originale in der iobroker-SQL (nach Verdichtung) vor einem bestimmten Zeitpunkt löschen.
            Beispiel Außentemperatur:
            Da interessieren mich Tages-/Wochen-/Monats-Höchst- und Niedrigstwerte, sowie die Durchschnitte pro Stunde.
            Bei der Verdichtung muß ich auch neue timestamps generieren.
            Da ich kein SQL-Erfahrungen habe, suche ich ein tool für die Konfiguration der SQL-Befehle.
            Grüße

            OliverIO Azrael42 2 Replies Last reply Reply Quote 0
            • OliverIO
              OliverIO @tomrey last edited by

              @tomrey

              ChatGPT.
              Beschreibe die tabellenstruktur und erkläre dein Ziel.
              Dann wird dir ChatGPT einen vorschlagfür die neue Tabelle machen und auch die Befehle für das anlegen und die Abfragen erstellen.
              Versuche aber auch selbst die Befehle zu verstehen. Es ist nicht so schwer.
              Schau in die Dokumentation von Marias/mysql, kannst dir aber auch alles von ChatGPT erklären lassen.
              Wenn du keine Ahnung hast füge
              ELI5
              Hinzu. Das bedeutet "explain like I'm 5"
              Das ist so eine Art Standard geworden für super Basic Erklärung.

              1 Reply Last reply Reply Quote 0
              • Azrael42
                Azrael42 @tomrey last edited by

                @tomrey

                SELECT 
                	id,
                	ROUND((ts/100000),0)*100000 AS ts,
                	-- FROM_UNIXTIME(TS/1000) AS CTS,
                	-- Date(FROM_UNIXTIME(TS/1000)) AS Datum,
                	round(Avg(Val),2) AS val,
                	1 AS ack,
                	1 AS _from,
                	0 AS q		
                FROM iobroker.ts_number
                	  WHERE val is not null
                		  and id = 163
                GROUP BY id, round(ts/100000, 0)*100000
                ORDER BY 2 DESC
                

                Als Starthilfe hier mal mein Script, das mir den 10 minütigen Durchschittswert eines Temperatursensors ausgibt. Hab auch mal die Hilfsspalten drin gelassen, die verwende ich beim Gruppieren in andere Perioden.

                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

                954
                Online

                32.3k
                Users

                81.1k
                Topics

                1.3m
                Posts

                3
                6
                110
                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