Ankündigung

Einklappen
Keine Ankündigung bisher.

sql-binding

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    sql-binding

    hmm...

    bis inclusive #467 funktionierte bei mir folgende sql.persistence:

    Code:
    Bell_1 -> "insert into ohBell (item,value,ohdatum) values ('Klingel1', '%1$s','%2$tY-%2$tm-%2$td %2$tT')" : strategy = everyChange
    Bell_2 -> "insert into ohBell (item,value,ohdatum) values ('Klingel2', '%1$s','%2$tY-%2$tm-%2$td %2$tT')" : strategy = everyChange
    Jetzt kommt eine Fehlermeldung:
    Code:
    17:29:41.028 ERROR o.o.p.s.i.SqlPersistenceService[:128] - Could not create table for item 'insert into ohBell (item,value,ohdatum) values ('Klingel1', '%1$s','%2$tY-%2$tm-%2$td %2$tT')': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Klingel1', '%1$s','%2$tY-%2$tm-%2$td %2$tT')')' at line 1
    17:29:41.028 ERROR o.o.p.s.i.SqlPersistenceService[:179] - Unable to store item 'Bell_1'.
    Im Wiki ist das auch anders beschrieben, aber ich erinnere mich gut, das damals(tm) ebenfalls so wie oben gelesen zu haben.
    Da jetzt offensichtlich der Klammerteil wegfällt, im dem die Zuordnung zu den Feldern erfolgt: Wie müssen die Felder in der sql-Datenbank heißen, in denen der Name des items, der wert und die timestamp hinterlegt werden?
    (Und warum versucht der service jetzt offensichtlich, eine Tabelle zu erzeugen?)

    #2
    Hi,

    siehe Issue 166. Der SQL Service ist seitdem queryable. Dafür wurden ein paar Änderungen vorgenommen. Eine davon ist, dass der Itemname nun mehr in der Tabelle gespeichert wird. Es gibt nun vielmehr eine Tabelle für jedes Item.

    Gruß,

    Thomas E.-E.
    Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

    Kommentar


      #3
      Grrr...

      ...nun gut, ich verstehe den Hintergrund, die Arbeitsweise zu ändern.

      Schöner wäre, man hätte da Wahlfreiheit, ist ja nicht so, dass die alte Struktur keine Daseinsberechtigung hätte, aber ich kann natürlich meine externen Abfragen auf die SQL-Datenbank ändern, ist also nicht so wild.

      Allerdings:
      Code:
      11:21:09.092 ERROR o.o.p.s.i.SqlPersistenceService[:128] - Could not create table for item 'insert into GATE values ('%2$tY-%2$tm-%2$td %2$tT', 999, %1$s)': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%2$tm-%2$td %2$tT', 999, %1$s)')' at line 1
      11:21:09.093 ERROR o.o.p.s.i.SqlPersistenceService[:179] - Unable to store item 'Gate_Out_Garden_2'.
      tut nicht. :-(

      mein sql.persist:
      Code:
      tems {
          // persist all items once a day and on every change and restore them from the db at startup
          // careful, this might result in huge databases - that's why it is in comment here ;-)
          // * : strategy = everyChange, everyDay, restoreOnStartup
          
          // Türklingeln
          Bells* -> "insert into BELL values ('%2$tY-%2$tm-%2$td %2$tT', 999 %1$s)" : strategy = everyChange
          // Tor hinten
          Gates* -> "insert into GATE values ('%2$tY-%2$tm-%2$td %2$tT', 999, %1$s)" : strategy = everyChange
      }
      Alle zu persistierenden Items sind in den beiden Gruppen Bells und Gates zusammengefasst.
      Wobei es sich übrigens um Logik handelt, nicht um Zahlen. Vielleicht ist das ja der Fehler, allerdings sehe ich nicht, wie ich aus ON und OFF Zahlen machen soll.
      Bin ich wirklich der Einzige, der gerne sehen möchte, wann Tore geöffnet wurden oder geklingelt wurde?
      Noch blöder wird es bei Telefonnummern, die ich auch gerne persistieren möchte. Und eine Query darauf erscheint mir auch sinnvoll, vonwegen letzte Anrufe, nein, ich habe bisher weder Asterisk noch Fritz!Box, aber das steht auch weiter hinten auf der ToDo-Liste.)

      Eine Tabelle Items wurde angelegt, aber keine weiteren für die verschiedenen Items, auch gibt es keine Einträge in der Tabelle Items.
      Ich hatte den Thread in Issue 166 so verstanden, dass die Tabellen jetzt automatisch erstellt werden. Wenn nein, wie muss die Struktur aussehen?

      Kommentar


        #4
        Hallo udo,

        nein, du bist nicht der Einzige mit diesen Wünschen.
        Ich habe gerade erst gestern hinbekommen, dass ich Daten in der alten Struktur (also mit den Feldern im Klammerteil) korrekt abspeichern kann.

        Auch ich möchte gerne ON und OFF Zeiten abspeichern und muss jetzt wohl doch nochmals updaten, neue numerische Items definieren und die Datenzugriffe anpassen
        Denn: Laut Hinweis im Issue wird der Wert des Items als 'double' abgestellt und nicht als 'string'.

        Wofür steht bei dir die 999?

        Kommentar


          #5
          Wofür steht bei dir die 999?
          Naja, ich wollte erstmal überhaupt das Binding neu zum Laufen bringen. Deshalb habe ich die Daten sklavisch aus den von mir gefundenen Informationen abgetippt.
          Allerdings hatte ich es auch ohne die 999 versucht.

          Schön wäre, wenn schon eine so bedeutende Änderung vorgenommen wird, zeitnah entweder im Sourcecode eine neue config oder gerne auch eine Beispiel-Config in der Demo zu hinterlegen.

          Ich fand sql als persistence vor allem deshalb nett, weil ich so problemlos extern zugreifen kann.
          Die Idee, grundsätzlich alles weitgehend automatisch durhc den Service erstellen zu lassen ist toll, aber ein String sollte dann entweder automatisch erkannt und als solcher gespeichert werden, oder es müsste einen Parameter geben, der dem Service sagt, den String als solchen zu behandeln.

          Ich werde das Gefühl nicht los, dass sql.persist komplett anders aussehen muss, warum sollte man noch ein SQL-Statement mit auf den Weg geben, wenn der Service dies ohnehin selbst erzeugt?

          Kommentar


            #6
            Ich fand sql als persistence vor allem deshalb nett, weil ich so problemlos extern zugreifen kann.
            Die Idee, grundsätzlich alles weitgehend automatisch durhc den Service erstellen zu lassen ist toll,
            Genau das ist auch der Grund weshalb ich es gestern mit sql-Persistance versucht habe.
            Vorher hatte ich jedesmal ein python-script aufgerufen, um die Item-Informationen in meine sql-Datenbank zu schreiben (funktioniert zwar, ist aber eben nicht "Standard").

            Kommentar


              #7
              ich schaue mir die Änderungen heute Abend nochmal an …
              Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

              Kommentar


                #8
                Gibt es schon irgendwelche erhellenden Informationen, wie ich das SQL-Binding richtig anspreche, um mit der aktuellen Version Items zu persistieren?

                Weder logische noch String-Items lassen sich persistieren, aber auch keine Zahlen (Temperaturen), zumindest nicht mit der Zeile, die ich aus dem Wiki habe.
                Wobei ich, wie schon erwähnt, bezweifle, dass die Zeile mit dem neuen Binding überhaupt noch sinnvoll sein kann (das Binding schreibt die Daten laut Beschreibung itemabhängig in automatisch erstellte Tabellen, womit es ja wohl sinnlos ist, die Zieltabelle anzugeben)
                sinnvoller wäre wohl
                Code:
                Bells* -> "insert into %3$s values ('%2$tY-%2$tm-%2$td %2$tT', 999, %1$s)" : strategy = everyChange
                was aber auch nicht stimmen kann, da der Name der Zieltabelle ja aus der Tabelle Items gelesen werden muss.

                Kommentar


                  #9
                  lösung...

                  So, nachdem ich mir nochmal genau die anderen persistence-files angeschaut habe, bin ich auf die richtige Schreibweise gekommen...
                  Code:
                  Items {
                      Temperature* : strategy = everyChange
                  }
                  führt zum Ziel. Also für die Temperaturen in der so benannten Gruppe. Was bei logischen oder String-Items passiert, teste ich morgen.

                  (Das kommt davon, wenn man zu kompliziert denkt...)

                  Kommentar


                    #10
                    Nachdem ich jetzt Zahlen mit sql persistieren kann, möchte ich zusätzlich (wieder) Texte und logische Zustände persistieren können. Ich hab mal einen Issue dafür aufgemacht.

                    Hint: String-Items könnte der service ja ohne weiteres selbsttätig erkennen und die Tabellen entsprechend mit String statt Double erzeugen.
                    Bei logischen Items könnten erstmal logische Wert als String abgelegt werden, oder es müsste eine Hilfstabelle erzeugt werden, in der den verschiedenen logischen Werten Zahlen zugeordnet werden können (was dann halt ungleich mehr Aufwand bedeutet).

                    Kommentar

                    Lädt...
                    X