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. Einsteigerfragen
  4. Automatisierung
  5. SQL Wert-voriger Wert ausgeben

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.5k

SQL Wert-voriger Wert ausgeben

Geplant Angeheftet Gesperrt Verschoben Automatisierung
12 Beiträge 5 Kommentatoren 862 Aufrufe 4 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.
  • M Offline
    M Offline
    Mark
    schrieb am zuletzt editiert von
    #1

    Hallo Zusammen,

    kan mir jemand sagen, ob man in SQL bei der Abfrage andere Werte ausgeben kann, als die, die in der Datenbank stehen?
    Konkret geht es um die berechnung des Stromberbrauchs:
    Mit SELECT * FROM ts_number WHERE id=1; bekomme ich die Zählerstände jeweils vom Tagesbeginn. Ich würde nun gerne mit der Abfrage den Verbrauch anzeigen lassen. (Letzter Zählerstand - Vorletzter Zählerstand) und das ganze für einen vorab definierten Zeitraum (z.B. letzte 7 Tage, letzte 30 Tage usw).

    Ro75R G 2 Antworten Letzte Antwort
    0
    • M Mark

      Hallo Zusammen,

      kan mir jemand sagen, ob man in SQL bei der Abfrage andere Werte ausgeben kann, als die, die in der Datenbank stehen?
      Konkret geht es um die berechnung des Stromberbrauchs:
      Mit SELECT * FROM ts_number WHERE id=1; bekomme ich die Zählerstände jeweils vom Tagesbeginn. Ich würde nun gerne mit der Abfrage den Verbrauch anzeigen lassen. (Letzter Zählerstand - Vorletzter Zählerstand) und das ganze für einen vorab definierten Zeitraum (z.B. letzte 7 Tage, letzte 30 Tage usw).

      Ro75R Online
      Ro75R Online
      Ro75
      schrieb am zuletzt editiert von
      #2

      @mark Was für einen Wert loggst du denn genau?

      SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

      1 Antwort Letzte Antwort
      0
      • M Mark

        Hallo Zusammen,

        kan mir jemand sagen, ob man in SQL bei der Abfrage andere Werte ausgeben kann, als die, die in der Datenbank stehen?
        Konkret geht es um die berechnung des Stromberbrauchs:
        Mit SELECT * FROM ts_number WHERE id=1; bekomme ich die Zählerstände jeweils vom Tagesbeginn. Ich würde nun gerne mit der Abfrage den Verbrauch anzeigen lassen. (Letzter Zählerstand - Vorletzter Zählerstand) und das ganze für einen vorab definierten Zeitraum (z.B. letzte 7 Tage, letzte 30 Tage usw).

        G Offline
        G Offline
        GombersIOB
        schrieb am zuletzt editiert von GombersIOB
        #3

        @mark said in SQL Wert-voriger Wert ausgeben:

        ob man in SQL bei der Abfrage andere Werte ausgeben kann, als die, die in der Datenbank stehen?

        Man kann in der Query feste Werte vorgeben. Aber wozu dann eine Query? Werte auszugeben, die man nicht hat, ist schon schwieriger.
        Klingt nach einer Ansage, die ich mal in New Orleans im Fritzels (einer Jazz-Kneipe dort) gehört habe: "Wir spielen für $20 jedes Lied das wir kennen und für $100 auch die, die wir nicht kennen!"

        M 1 Antwort Letzte Antwort
        0
        • G GombersIOB

          @mark said in SQL Wert-voriger Wert ausgeben:

          ob man in SQL bei der Abfrage andere Werte ausgeben kann, als die, die in der Datenbank stehen?

          Man kann in der Query feste Werte vorgeben. Aber wozu dann eine Query? Werte auszugeben, die man nicht hat, ist schon schwieriger.
          Klingt nach einer Ansage, die ich mal in New Orleans im Fritzels (einer Jazz-Kneipe dort) gehört habe: "Wir spielen für $20 jedes Lied das wir kennen und für $100 auch die, die wir nicht kennen!"

          M Offline
          M Offline
          Mark
          schrieb am zuletzt editiert von
          #4

          @gombersiob ich logge:
          Id, timestamp, zaehlerstand
          1, 01.03.2023 (als timestamp), 68185
          2, 02.03.2023, 68192
          3, 03.03.2023, 68200

          Als Query soll dann
          02.03.23, 7 (also 68192-68185)
          03.03.23, 8
          erscheinen.

          Theoretische könnte ich die obige Anfrage an ein php-Skript übergeben und dort berechnen lassen. Dachte aber es wäre vielleicht auch direkt über sql möglich?

          Ro75R G D 3 Antworten Letzte Antwort
          0
          • M Mark

            @gombersiob ich logge:
            Id, timestamp, zaehlerstand
            1, 01.03.2023 (als timestamp), 68185
            2, 02.03.2023, 68192
            3, 03.03.2023, 68200

            Als Query soll dann
            02.03.23, 7 (also 68192-68185)
            03.03.23, 8
            erscheinen.

            Theoretische könnte ich die obige Anfrage an ein php-Skript übergeben und dort berechnen lassen. Dachte aber es wäre vielleicht auch direkt über sql möglich?

            Ro75R Online
            Ro75R Online
            Ro75
            schrieb am zuletzt editiert von
            #5

            @mark Nochmal die Frage, was loggst du genau? Datenpunkt zum Beispiel wäre nicht schlecht.

            SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

            M 1 Antwort Letzte Antwort
            0
            • M Mark

              @gombersiob ich logge:
              Id, timestamp, zaehlerstand
              1, 01.03.2023 (als timestamp), 68185
              2, 02.03.2023, 68192
              3, 03.03.2023, 68200

              Als Query soll dann
              02.03.23, 7 (also 68192-68185)
              03.03.23, 8
              erscheinen.

              Theoretische könnte ich die obige Anfrage an ein php-Skript übergeben und dort berechnen lassen. Dachte aber es wäre vielleicht auch direkt über sql möglich?

              G Offline
              G Offline
              GombersIOB
              schrieb am zuletzt editiert von GombersIOB
              #6

              @mark

              WHERE id=1

              mit dieser id muss

              1   01.03.2023  68185
              

              zurückkommen.

              Aber ich verstehe die Absicht - kann dabei leider nicht helfen. Ich würde die Logik im JavaScript abbilden. Eine Query zu bauen, die zwei Folgezeilen voneinander abzieht, das übersteigt meine Kenntnisse. Es geht, mit Google habe ich sowas ähnliches gefunden - aber es sieht recht komplex aus.
              Vor allen Dingen müsste man auch sicherstellen, dass zwei Folgezeilen auch zwei aufeinander folgende Tage sind - logging könnte ja auch mal ausgefallen sein.

              1 Antwort Letzte Antwort
              0
              • Ro75R Ro75

                @mark Nochmal die Frage, was loggst du genau? Datenpunkt zum Beispiel wäre nicht schlecht.

                M Offline
                M Offline
                Mark
                schrieb am zuletzt editiert von
                #7

                @ro75 Ich Schreibe im Blockly die Ausgelesenen Werte eines Smartmeters in Verschiedene Datenpunkte

                schedule("0 0 * * *", async function () {
                  setState("0_userdata.0.Strom.Zaehlerstand.ZaehlerstandTagBeginnBezug"/*ZaehlerstandTagBeginnBezug*/, getState("smartmeter.0.1-0:1_8_0__255.value").val, true);
                  setState("0_userdata.0.Strom.Zaehlerstand.ZaehlerstandTagBeginnEinspeisung"/*ZaehlerstandTagBeginnEinspeisung*/, getState("smartmeter.0.1-0:2_8_0__255.value").val, true);
                  setState("0_userdata.0.Strom.Zaehlerstand.ZaehlerstandTagBeginnErzeugung"/*ZaehlerstandTagBeginnErzeugung*/, getState("smartmeter.1.1-0:2_8_0__255.value").val, true);
                });
                

                Diese Datenpunkte werden dann in der Datenbank gespeichert.
                19f8bbcd-85dc-4f23-a422-8409d9c2f994-grafik.png

                In der Abfrage suche ich nun alle mit ID=1 raus
                1dc8e622-867f-4c0b-a4f6-e3d2ff2394e5-grafik.png

                Und hier hätte ich gerne statt val jeweils die differenz zum vorigen Wert.

                Ro75R Azrael42A 2 Antworten Letzte Antwort
                0
                • M Mark

                  @ro75 Ich Schreibe im Blockly die Ausgelesenen Werte eines Smartmeters in Verschiedene Datenpunkte

                  schedule("0 0 * * *", async function () {
                    setState("0_userdata.0.Strom.Zaehlerstand.ZaehlerstandTagBeginnBezug"/*ZaehlerstandTagBeginnBezug*/, getState("smartmeter.0.1-0:1_8_0__255.value").val, true);
                    setState("0_userdata.0.Strom.Zaehlerstand.ZaehlerstandTagBeginnEinspeisung"/*ZaehlerstandTagBeginnEinspeisung*/, getState("smartmeter.0.1-0:2_8_0__255.value").val, true);
                    setState("0_userdata.0.Strom.Zaehlerstand.ZaehlerstandTagBeginnErzeugung"/*ZaehlerstandTagBeginnErzeugung*/, getState("smartmeter.1.1-0:2_8_0__255.value").val, true);
                  });
                  

                  Diese Datenpunkte werden dann in der Datenbank gespeichert.
                  19f8bbcd-85dc-4f23-a422-8409d9c2f994-grafik.png

                  In der Abfrage suche ich nun alle mit ID=1 raus
                  1dc8e622-867f-4c0b-a4f6-e3d2ff2394e5-grafik.png

                  Und hier hätte ich gerne statt val jeweils die differenz zum vorigen Wert.

                  Ro75R Online
                  Ro75R Online
                  Ro75
                  schrieb am zuletzt editiert von
                  #8

                  @mark Dann benutze im SQL LIMIT 2. Damit bekommst du nur 2 Datensätze und dann damit eine Subtraktion ausführen.

                  SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

                  1 Antwort Letzte Antwort
                  0
                  • M Mark

                    @ro75 Ich Schreibe im Blockly die Ausgelesenen Werte eines Smartmeters in Verschiedene Datenpunkte

                    schedule("0 0 * * *", async function () {
                      setState("0_userdata.0.Strom.Zaehlerstand.ZaehlerstandTagBeginnBezug"/*ZaehlerstandTagBeginnBezug*/, getState("smartmeter.0.1-0:1_8_0__255.value").val, true);
                      setState("0_userdata.0.Strom.Zaehlerstand.ZaehlerstandTagBeginnEinspeisung"/*ZaehlerstandTagBeginnEinspeisung*/, getState("smartmeter.0.1-0:2_8_0__255.value").val, true);
                      setState("0_userdata.0.Strom.Zaehlerstand.ZaehlerstandTagBeginnErzeugung"/*ZaehlerstandTagBeginnErzeugung*/, getState("smartmeter.1.1-0:2_8_0__255.value").val, true);
                    });
                    

                    Diese Datenpunkte werden dann in der Datenbank gespeichert.
                    19f8bbcd-85dc-4f23-a422-8409d9c2f994-grafik.png

                    In der Abfrage suche ich nun alle mit ID=1 raus
                    1dc8e622-867f-4c0b-a4f6-e3d2ff2394e5-grafik.png

                    Und hier hätte ich gerne statt val jeweils die differenz zum vorigen Wert.

                    Azrael42A Offline
                    Azrael42A Offline
                    Azrael42
                    schrieb am zuletzt editiert von
                    #9

                    @mark
                    Ist das Thema noch offen? Habe ich umgesetzt und funktioniert soweit bei mir. Recht fummelig, aber geht.

                    KNX - Modbus - EBus - Smartmeter
                    PV Überschuss Steuerung für Wallbox und WP mit Node-Red, SQL Programmierung, eigens entwickelte KNX Komponenten

                    1 Antwort Letzte Antwort
                    0
                    • M Mark

                      @gombersiob ich logge:
                      Id, timestamp, zaehlerstand
                      1, 01.03.2023 (als timestamp), 68185
                      2, 02.03.2023, 68192
                      3, 03.03.2023, 68200

                      Als Query soll dann
                      02.03.23, 7 (also 68192-68185)
                      03.03.23, 8
                      erscheinen.

                      Theoretische könnte ich die obige Anfrage an ein php-Skript übergeben und dort berechnen lassen. Dachte aber es wäre vielleicht auch direkt über sql möglich?

                      D Offline
                      D Offline
                      diwoma
                      schrieb am zuletzt editiert von
                      #10

                      @mark Standard-SQL kann das glaube ich nicht.
                      Es hängt davon ab, welchen SQL-Server du verwendest. Bei MSSQL neuerer Generation gibt es einen Befehl, der auf die vorherige Datenzeile referenziert, das man den Wert für eine Subtraktion verwenden kann.

                      -- diwoma

                      ioBroker in LX-Container in Proxmox
                      Zigbee-Coordinator: CC2652P2-TCP FW: 20230507

                      Azrael42A 1 Antwort Letzte Antwort
                      0
                      • D diwoma

                        @mark Standard-SQL kann das glaube ich nicht.
                        Es hängt davon ab, welchen SQL-Server du verwendest. Bei MSSQL neuerer Generation gibt es einen Befehl, der auf die vorherige Datenzeile referenziert, das man den Wert für eine Subtraktion verwenden kann.

                        Azrael42A Offline
                        Azrael42A Offline
                        Azrael42
                        schrieb am zuletzt editiert von Azrael42
                        #11

                        @diwoma
                        Schau dir mal Cursor Skripte an. Mit denen kannst du genau das erreichen. Gibt es seit gefühlt 20 Jahren. Zumindest bei MSSQL.
                        Was @marc hier machen will, kann man in dem Fall aber über ein "Group by" recht simpel erreicht werden:

                        select
                              cast(from_unixtime(ts / 1000) as date) AS Datum,
                              max(val) - min(val)  AS ErzeugungKWH
                                 from
                                    ts_number 
                                 where
                                    id = 173 
                                    -- and cast(from_unixtime(ts / 1000) as date) > cast(current_timestamp() as date) - interval 60 day 
                                 group by
                                   1
                                 order by
                                    1 desc
                        

                        In dem Beispiel hier, werden alle protokollierten Zählerstände meines Wechselrichters eines Tages gruppiert und der Min vom Max Wert subtrahiert. Geht natürlich mit jedem beliebigem Intervall.

                        KNX - Modbus - EBus - Smartmeter
                        PV Überschuss Steuerung für Wallbox und WP mit Node-Red, SQL Programmierung, eigens entwickelte KNX Komponenten

                        Azrael42A 1 Antwort Letzte Antwort
                        0
                        • Azrael42A Azrael42

                          @diwoma
                          Schau dir mal Cursor Skripte an. Mit denen kannst du genau das erreichen. Gibt es seit gefühlt 20 Jahren. Zumindest bei MSSQL.
                          Was @marc hier machen will, kann man in dem Fall aber über ein "Group by" recht simpel erreicht werden:

                          select
                                cast(from_unixtime(ts / 1000) as date) AS Datum,
                                max(val) - min(val)  AS ErzeugungKWH
                                   from
                                      ts_number 
                                   where
                                      id = 173 
                                      -- and cast(from_unixtime(ts / 1000) as date) > cast(current_timestamp() as date) - interval 60 day 
                                   group by
                                     1
                                   order by
                                      1 desc
                          

                          In dem Beispiel hier, werden alle protokollierten Zählerstände meines Wechselrichters eines Tages gruppiert und der Min vom Max Wert subtrahiert. Geht natürlich mit jedem beliebigem Intervall.

                          Azrael42A Offline
                          Azrael42A Offline
                          Azrael42
                          schrieb am zuletzt editiert von Azrael42
                          #12

                          Da ich gerade sowieso dran war, neue Datenpunkte für die Wärmepumpe zu erstellen, hier noch wie ich die SQL Daten in den IOBroker bekomme:

                          Als erstes lege ich der Einfachheit Halber eine View in der DB an.
                          (In HeidiSQL Rechtsklick auf die View -->Erstellen --> Neue View --> Statement von oben...)

                          Danach lege ich einen neuen Datenpunkt im IOBroker an

                          {
                            "common": {
                              "name": "WP_KWH_AUS",
                              "desc": "Manuell erzeugt",
                              "role": "state",
                              "type": "number",
                              "read": true,
                              "write": true,
                              "def": 0
                            },
                            "type": "state",
                            "native": {},
                            "from": "system.adapter.admin.0",
                            "user": "system.user.admin",
                            "ts": 1683869527657,
                            "_id": "0_userdata.0.Script.WP_KWH_AUS",
                            "acl": {
                              "object": 1636,
                              "state": 1636,
                              "owner": "system.user.admin",
                              "ownerGroup": "system.group.administrator"
                            }
                          }
                          

                          Zuletzt habe ich ein JScript am laufen, in dem die View abgefragt wird und den Wert auf den DP schreibt.

                          sendTo('sql.0', 'query', 'SELECT ErzeugungKWH Wert FROM iobroker.v_ErzeugungWPDaily WHERE DATE(Datum) = DATE (NOW())',function(result)
                          {
                          setState("0_userdata.0.Script.WP_KWH_AUS",Number(JSON.stringify(result.result[0].Wert)));
                          });
                          

                          Das wird dann über einen Sheduler jede Minute ausgeführt.

                          Grüße
                          Rich

                          KNX - Modbus - EBus - Smartmeter
                          PV Überschuss Steuerung für Wallbox und WP mit Node-Red, SQL Programmierung, eigens entwickelte KNX Komponenten

                          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

                          660

                          Online

                          32.5k

                          Benutzer

                          81.6k

                          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