Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. SQL - Wert per Script speichern

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    SQL - Wert per Script speichern

    This topic has been deleted. Only users with topic management privileges can see it.
    • bahnuhr
      bahnuhr Forum Testing Most Active last edited by

      @apollon77

      Nachtrag:

      Wenn ich die gespeicherten Werte per Script abrufe:

      sendTo('sql.0', 'query', 'SELECT id FROM datapoints WHERE name="javascript.0.Sonstige.xxxxxx"', function (result) {
          if (result.error) {
              console.error(result.error);
          } else {
              console.log('Rows: ' + JSON.stringify(result.result));
              var now = new Date();
              now.setHours(-10000000);
              sendTo('sql.0', 'query', 'SELECT * FROM ts_number WHERE id=' + result.result[0].id, function (result) {
                  console.log('Rows: ' + JSON.stringify(result.result));
              });
          }
      });
      

      dann wird ausgegeben:

      {"id":177,"ts":820278000000,"val":-366.7,"ack":1,"_from":0,"q":0},{"id":177,"ts":822956400000,"val":-388.9,"ack":1,"_from":0,"q":0},{"id":177,"ts":825462000000,"val":-411.1,"ack":1,"_from":0,"q":0},{"id":177,"ts":828140400000,"val":-411.1,"ack":1,"_from":0,"q":0},{"id":177,"ts":830815200000,"val":-410.5,"ack":1,"_from":0,"q":0},{"id":177,"ts":833407200000,"val":-409.9,"ack":1,"_from":0,"q":0},{"id":177,"ts":836085600000,"val":-329.5,"ack":1,"_from":0,"q":0},{"id":177,"ts":838677600000,"val":-329.4,"ack":1,"_from":0,"q":0},{"id":177,"ts":841356000000,"val":-323.7,"ack":1,"_from":0,"q":0},{"id":177,"ts":844034400000,"val":-300.3,"ack":1,"_from":0,"q":0},{"id":177,"ts":846630000000,"val":-293.7,"ack":1,"_from":0,"q":0},{"id":177,"ts":849308400000,"val":-283.4,"ack":1,"_from":0,"q":0},{"id":177,"ts":851900400000,"val":-267.7,"ack":1,"_from":0,"q":0},{"id":177,"ts":854578800000,"val":-267.3,"ack":1,"_from":0,"q":0},{"id":177,"ts":857084400000,"val":-261.5,"ack":1,"_from":0,"q":0},{"id":177,"ts":859676400000,"val":-251.2,"ack":1,"_from":0,"q":0},{"id":177,"ts":862351200000,"val":-245.7,"ack":1,"_from":0,"q":0},{"id":177,"ts":864943200000,"val":-245.1,"ack":1,"_from":0,"q":0},{"id":177,"ts":867621600000,"val":-236.4,"ack":1,"_from":0,"q":0},{"id":177,"ts":870213600000,"val":-236.9,"ack":1,"_from":0,"q":0},{"id":177,"ts":872892000000,"val":-235.6,"ack":1,"_from":0,"q":0},{"id":177,"ts":875570400000,"val":-228.1,"ack":1,"_from":0,"q":0},{"id":177,"ts":878166000000,"val":-227.4,"ack":1,"_from":0,"q":0},{"id":177,"ts":880844400000,"val":-216.7,"ack":1,"_from":0,"q":0},
      

      Folglich werden (wei von apollon gesagt) die 3x 0 wieder angehängt.

      Aber die Werte kommen trotzdem in flot nicht an (siehe oben).

      Liegt das Problem bei flot (und nicht bei sql) ??

      1 Reply Last reply Reply Quote 0
      • bahnuhr
        bahnuhr Forum Testing Most Active last edited by

        Hallo an alle.

        Nochmal die Frage ganz konkret.

        Werte vor 01.01.2000 werden in sql gespeichert.
        Wie bekommt man es hin, dass diese auch angezeigt werden in flot ?

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

          Ich könnte mir vorstellen das das hier der Grund ist

          https://github.com/ioBroker/ioBroker.sql/blob/c4df5fa0e25610dfcb3e245f8140331dea35022f/main.js#L1858-L1861

          Das denke ich macht keinen Sinn weil die Daten ja aus der DB kommen.

          Nimm das mal bitte Testweise bei dir raus. tuts dann?

          F bahnuhr 2 Replies Last reply Reply Quote 0
          • F
            fastfoot @apollon77 last edited by

            @apollon77 sagte in SQL - Wert per Script speichern:

            ...weil die Daten ja aus der DB kommen.

            das macht auch anders keinen Sinn, die Prüfung müsste auf < 946681200 lauten, nicht < 946681200000. Auch 946681199999 sind immer noch ms

            1 Reply Last reply Reply Quote 0
            • bahnuhr
              bahnuhr Forum Testing Most Active @apollon77 last edited by

              @apollon77
              @fastfoot

              Habe etliches funktioniert.
              Folgendes Testscript:

              // Wert schreiben
                  var theDate = new Date("30 june 1999");
                  var ts_wert = theDate.getTime();
                  log (ts_wert);
                  if (ts_wert < 946681200000) { ts_wert = ts_wert / 1000 };
                  log (ts_wert);
                  sendTo('sql.0', 'storeState', {id: 'javascript.0.Sonstige.testsql', state: {val: -80, ts: ts_wert, ack:true}});
              

              Wenn ich durch 1000 teile (9 Stellen), werden in sql 3x0 automatisch angehängt (also dann wieder 12 Stellen).
              Wenn ich * 1000 nehme, dann werden nochmals 3x0 angehängt (also dann 15 Stellen).

              Wenn ich alle Werte abrufe sieht man dies:

              19:07:23.372	info	javascript.0 (31981) script.js.Scripte.test5: Rows: [{"id":179,"ts":930693600000,"val":-80,"ack":1,"_from":0,"q":0},{"id":179,"ts":1620666302479,"val":30,"ack":0,"_from":16,"q":0},{"id":179,"ts":930693600000000,"val":-80,"ack":1,"_from":0,"q":0}]
              

              Aber in flot erscheint am 30.06.1999 kein Wert:
              163a8c68-cda5-4e77-bf1c-e32e43aaebb8-image.png

              Fazit für mich:
              /1000 teilen und sql setzt 3x0 dazu. Bei Abfrage der Daten scheint der Wert richtig zu sein.
              Aber in flot kommt dies nicht an.

              mfg
              Dieter

              apollon77 1 Reply Last reply Reply Quote 0
              • apollon77
                apollon77 @bahnuhr last edited by

                @bahnuhr hä?!! Hast du mal die con mir genannten Zeilen bei dir entfernt und Adapter sql neu gestartet??

                bahnuhr 1 Reply Last reply Reply Quote 0
                • bahnuhr
                  bahnuhr Forum Testing Most Active @apollon77 last edited by

                  @apollon77

                  So, alle Daten in sql gelöscht.
                  Beim lesen der Werte kommt nur ein leeres Array:
                  69099711-8a6b-4b23-a1ed-6db82ae4ed7f-image.png

                  SQL neu gestartet.

                  Dann folgendes Script (ohne Prüfung < ....):

                     var theDate = new Date("30 june 1999");
                      var ts_wert = theDate.getTime();
                      log (ts_wert);
                      //if (ts_wert < 946681200000) { ts_wert = ts_wert / 1000 };
                      //log (ts_wert);
                      sendTo('sql.0', 'storeState', {id: 'javascript.0.Sonstige.testsql', state: {val: -80, ts: ts_wert, ack:true}});
                  

                  Beim Lesen der Werte kommt nun:

                  21:38:04.119	info	javascript.0 (31981) script.js.Scripte.test5: Rows: [{"id":179,"ts":930693600000000,"val":-80,"ack":1,"_from":0,"q":0}]
                  

                  15 Stellen (kann das richtig sein ???

                  Und in flot kommt auch nichts an !

                  F apollon77 2 Replies Last reply Reply Quote 0
                  • F
                    fastfoot @bahnuhr last edited by

                    @bahnuhr sagte in SQL - Wert per Script speichern:

                    15 Stellen (kann das richtig sein ???
                    Und in flot kommt auch nichts an !

                    verantwortlich für die 15 Stellen sind die Zeilen 1543 - 1547. Aber auch nach Auskommentierung dieser Zeilen (die Zeit steht dann richtig in der DB) bekomme ich in Flot kein Ergebnis. Letztlich ist es das gleiche Ergebnis welches Du schon mit der Division durch 1000 im Skript erreicht hattest. Ich würde meinen dass Flot hier ein Problem hat

                    bahnuhr 1 Reply Last reply Reply Quote 0
                    • bahnuhr
                      bahnuhr Forum Testing Most Active @fastfoot last edited by bahnuhr

                      @fastfoot sagte in SQL - Wert per Script speichern:

                      Ich würde meinen dass Flot hier ein Problem hat

                      sehe ich auch so.
                      Und hatte ich ja oben schon vermerkt.

                      Ist jetzt nur die Frage, wer kann da helfen ?
                      @apollon77 ?? - noch ne Idee

                      1 Reply Last reply Reply Quote 0
                      • apollon77
                        apollon77 @bahnuhr last edited by

                        @bahnuhr Grmpf ... Du solltest keine Daten löschen und solltest auch nichts am Schreib.-Skript ändern. Das muss so sein. Du solltest NUR die eine Stelle in der main,.js im SQL Adapter ändern der beim Daten lesen den timestamp blöd kaputt macht

                        F bahnuhr 2 Replies Last reply Reply Quote 0
                        • F
                          fastfoot @apollon77 last edited by

                          @apollon77 sagte in SQL - Wert per Script speichern:

                          @bahnuhr Grmpf ... Du solltest keine Daten löschen und solltest auch nichts am Schreib.-Skript ändern. Das muss so sein. Du solltest NUR die eine Stelle in der main,.js im SQL Adapter ändern der beim Daten lesen den timestamp blöd kaputt macht

                          Ich hatte das ja gemacht und es hat nichts gebracht. Beim Schreiben wird der ts ja bereits mit 1000 multipliziert(Zeile 1546) so dass Zeile 1858 eh nie wahr wird. Belässt man das Script aber mit der Teilung durch 1000, so ist der ts in der DB ja richtig, aber auch da bringt das Auskommentieren nichts. Flot erkennt auch bei mir nur Daten >= 1.1.2000

                          1 Reply Last reply Reply Quote 0
                          • bahnuhr
                            bahnuhr Forum Testing Most Active @apollon77 last edited by bahnuhr

                            @apollon77

                            Hast du es denn auch mal nachvollzogen.
                            Wir sind offensichtlich der Meinung es liegt an flot.

                            Kannst du da mal nachschauen.

                            Danke.

                            Wäre doch schön, wenn man die Daten < 2000 auch in flot angezeigt bekommen könnte.

                            P.S.
                            Habe eben mal ein issue erstellt im Adapter "flot"

                            apollon77 1 Reply Last reply Reply Quote 0
                            • apollon77
                              apollon77 @bahnuhr last edited by

                              @bahnuhr Ok, da muss man tiefer reinschauen. ich würde ja mal testen ob den ein sendTo "getHistory" mit den richtigen Werte die Daten lieefert oder nicht - und mein Change solte sicherstellen das die Daten richtig kommen. Wenn die richtig kommen DANN ist es in Flot. Wenn die Daten nicht kommen ist es in sql.-

                              Ich bin aber ehrlich: meine Todo liste ist gerade übervoll und habe gerade jicht die Zeit da tief reinzuschauen. Von daher Issue ist wohl korrekt. je weiter Ihr selbst kommt umso besser ... zew .. HAHA ... https://github.com/ioBroker/ioBroker.flot/blob/master/src/js/data.js#L445

                              Da ist ein sch**** Interoperabilty Thema mit dem s->ms hack :-((

                              In meiner Welt muss in getHistory diese Zeile raus und in Flot auch

                              bahnuhr 1 Reply Last reply Reply Quote 0
                              • bahnuhr
                                bahnuhr Forum Testing Most Active @apollon77 last edited by

                                @apollon77 sagte in SQL - Wert per Script speichern:

                                In meiner Welt muss in getHistory diese Zeile raus und in Flot auch

                                Danke für die Erläuterung.
                                Ich schau es mir an und berichte dann.

                                1 Reply Last reply Reply Quote 1
                                • bahnuhr
                                  bahnuhr Forum Testing Most Active last edited by

                                  @apollon77
                                  @fastfoot

                                  So, ich habe mal per winscp die Zeilen
                                  6720a716-9886-4f3a-b018-eb2f5b883268-image.png
                                  in der Datei:
                                  opt/iobroker/node-modules/iobroker.sql/main.js
                                  auskommentiert.

                                  Dann iob komplett neu gestartet.

                                  Danach Wert per Script geschrieben.
                                  Es werden aber immer noch 3 x 0 angehängt.

                                  Was mache ich da falsch?
                                  Warum wird das Script in der main.js immer noch abgearbeitet obwohl die Zeilen doch auskommentiert sind.

                                  Ich versteh es gerade nicht.
                                  Oder hab ich die falsche Datei?

                                  F 1 Reply Last reply Reply Quote 0
                                  • F
                                    fastfoot @bahnuhr last edited by

                                    @bahnuhr sagte in SQL - Wert per Script speichern:

                                    @apollon77
                                    @fastfoot
                                    Es werden aber immer noch 3 x 0 angehängt.

                                    ich hatte es in Post 24 erklärt. Deine Änderung wirkt sich beim Lesen der Daten aus, bzw mMn nach eben nicht weil die Daten in der DB durch Zeile 1547 den 1000fachen Wert haben. Ich fürchte für mich ist das eine Nummer zu hoch.

                                    Aber befolge doch mal was apollon rät und mache eine Abfrage mit getHistory, belasse dazu den SQL Adapter so wie du ihn geändert hast

                                    bahnuhr 1 Reply Last reply Reply Quote 0
                                    • bahnuhr
                                      bahnuhr Forum Testing Most Active @fastfoot last edited by

                                      @fastfoot sagte in SQL - Wert per Script speichern:

                                      Abfrage mit getHistory

                                      Was ist damit gemeint ?

                                      @apollon77 sagte in SQL - Wert per Script speichern:

                                      https://github.com/ioBroker/ioBroker.flot/blob/master/src/js/data.js#L445

                                      Ich finde diese Datei weder unter "...iobroker-data" als auch unter "...node_modules"
                                      Folglich weiß ich nun nicht wo etwas zu ändern ist.

                                      Fazit:
                                      Ich glaube das ist zu hoch für mich.
                                      Würde dies ja gerne hinbekommen; klappt aber nicht.

                                      F 1 Reply Last reply Reply Quote 0
                                      • F
                                        fastfoot @bahnuhr last edited by

                                        @bahnuhr sagte in SQL - Wert per Script speichern:

                                        @fastfoot sagte in SQL - Wert per Script speichern:

                                        Abfrage mit getHistory

                                        Was ist damit gemeint ?

                                        @apollon77 sagte in SQL - Wert per Script speichern:

                                        https://github.com/ioBroker/ioBroker.flot/blob/master/src/js/data.js#L445

                                        Ich finde diese Datei weder unter "...iobroker-data" als auch unter "...node_modules"
                                        Folglich weiß ich nun nicht wo etwas zu ändern ist.

                                        Das läuft wohl anders als bei herkömmlichen Adaptern. Die Datei ist kaum lesbar(minified?). Ich habe sie bei mir geändert indem ich die Prüfung auf viel kleinere Werte geändert habe. Danach habe ich auch Werte in Flot gesehen, allerdings war das Datum um 1 Monat verschoben und in der DB musste der ts trotzdem in Sekunden eingetragen sein.

                                        Fazit:
                                        Ich glaube das ist zu hoch für mich.
                                        Würde dies ja gerne hinbekommen; klappt aber nicht.

                                        Mein Fazit: Das ist zu hoch für uns, zuviele Komponenten die da wohl am Datum rumhacken, zu wenig Ahnung von der Materie, fehlende Tools (und Ahnung davon) um den Adapter Flot Source vernünftig zu ändern. Zu alledem habe ich Probleme mich überhaupt in Flot zurecht zu finden. Ich habe Flot wieder gelöscht und gebe auf, das dauert wohl noch eine Zeit lang bis ich da wirklich mitmischen kann 😞

                                        Mit getHistory() war wohl die Abfrage sendTo("sql.0", "getHistory",....) gemeint.

                                        bahnuhr 1 Reply Last reply Reply Quote 1
                                        • bahnuhr
                                          bahnuhr Forum Testing Most Active @fastfoot last edited by

                                          @fastfoot
                                          Danke trotzdem für deine Hilfe.

                                          Jetzt kann man nur hoffen, dass @apollon77 oder jemand anders sich diesem bug einmal annimmt.
                                          Wäre doch gut, wenn flot dies richtig anzeigen würde.

                                          F 1 Reply Last reply Reply Quote 0
                                          • F
                                            fastfoot @bahnuhr last edited by

                                            @bahnuhr, @apollon77 ich habe jetzt doch noch einen Workaround gefunden, bis jemand mit Ahnung einen Fix bereitstellen kann

                                            • sendTo('sql.2', 'storeState',{}) weiterhin mit ts / 1000 ausführen
                                            • in node_modules/iobroker.sql/main.js die Zeilen 1859-1861 auskommentieren
                                            • in node_modules/iobroker.flot/www/js/flot.js =1e3*t[a].ts durch =1e0*t[a].ts ersetzen
                                            • SQL Adapter neu starten
                                            • Für Flot einen Upload durchführen

                                            Mit meinen Testdaten funktioniert das nur mit Art=Bei Änderung

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            929
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            58
                                            2509
                                            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