Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Database Plugin

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

    Ich habe nämlich einen Max wert von gestern aus der Datenbank geholt.
    (Max, 1d)
    Der Wert war 2.0. ( sind aber mehrere Werte in der DB mit 2.0)
    und vom Tag davor:
    (Max, 2d, 1d)
    Wert = 0.0
    und diese Beiden Werte addiert.
    =2.0
    Am nächsten Tag das Gleiche
    Ergebnis: 4.0
    Obwohl an dem Tag nur ein Wert 0.0 dazugekommen ist.
    Deshalb meine Vermutung, dass der vorletzte Tag eigentlich (Max, 3d, 2d) sein müsste.

    Wenn es aber um Stunden geht, hat sich bestimmt ein Wert auf die Tag 2 Seite geschmuggelt(24 Std von jetzt)
    Was aber echt blöd ist, da man dann ja nie einen Max Wert sicher von einem Tag bekommt.

    Versteht man was ich sagen möchte????
    Zuletzt geändert von schuma; 16.11.2018, 17:51.

    Kommentar


      So wie ich es verstehe, sind die Zeitangaben in der DB-Abfrage immer relativ zum Ausführungszeitpunkt. Im Grunde ist 1d nur eine andere Schreibweise von 24h und 1w nichts andere wie 7d oder 168h..
      Bedeutet (max, 2d, 1d) ist das gleiche wie (max, 48h, 24h) vom Ausführungszeitpunkt gesehen.

      Willst Du ein tag-genaues Ergebnis, musst entweder die Abfrage mit diesen relativen Zeit immer im Mitternacht mit crontab machen oder über Zeitlogik (ich glaube der Link war 2 Posts weiter oben) immer den aktellen Abstand von der Taggrenze (bspw hours since midnight) berechnen und das dann bei der db-Abfrage nutzen.

      Kommentar


        Da die Anforderung in der Art "der Durchschnitt von gestern" immer wieder kommt, wäre vielleicht eine entsprechende Erweiterung überlegenswert.
        Man das etwa so lösen, dass man vor die Zeitangabe ein "startof:" schreiben könnte, also z.B. item.db('avg', 'startof:2d', 'startof:1d') wäre dann vorgestern.

        Kommentar


          Die Erweiterung wäre sicher gut. Mit wäre noch eine Erweiterung bzgl. Dauer eines Items >0 in sek wichtig. bspw item.db('duration', 'sh.time.minute.since.midnight.dbstr())

          Für den zeitlich Abfrag nehme ich:
          Code:
                      gestern:
                          type: num
                          visu_acl: 'ro'
                          eval: round((sh...db('max', sh.time.minute.since.midnight.dbstr(), sh.time.minute.since.midnight.dbstr()) - sh...db('max', str(sh.time.minute.since.midnight() + 1440) + 'i', str(sh.time.minute.since.midnight() + 1440) + 'i')) / 60 /60, 2)
                          eval_trigger: heizung.recalc
                          crontab: 1 0 * * = 1
                          cache: 'yes'
                          database: 'yes'
          
                      gestern_minus1:
                          type: num
                          visu_acl: 'ro'
                          eval: round((sh...db('max', str(sh.time.minute.since.midnight() + 1440) + 'i', str(sh.time.minute.since.midnight() + 1440) + 'i') - sh...db('max', str(sh.time.minute.since.midnight() + 2880) + 'i', str(sh.time.minute.since.midnight() + 2880) + 'i')) / 60 /60, 2)
                          eval_trigger: heizung.recalc
                          crontab: 1 0 * * = 1
                          cache: 'yes'
                      
                      gestern_minus2:
                          type: num
                          visu_acl: 'ro'
                          eval: round((sh...db('max', str(sh.time.minute.since.midnight() + 2880) + 'i', str(sh.time.minute.since.midnight() + 2880) + 'i') - sh...db('max', str(sh.time.minute.since.midnight() + 4320) + 'i', str(sh.time.minute.since.midnight() + 4320) + 'i')) / 60 /60, 2)
                          eval_trigger: heizung.recalc
                          crontab: 1 0 * * = 1
                          cache: 'yes'
                          
                      gestern_minus3:
                          type: num
                          visu_acl: 'ro'
                          eval: round((sh...db('max', str(sh.time.minute.since.midnight() + 4320) + 'i', str(sh.time.minute.since.midnight() + 4320) + 'i') - sh...db('max', str(sh.time.minute.since.midnight() + 5670) + 'i', str(sh.time.minute.since.midnight() + 5670) + 'i')) / 60 /60, 2)
                          eval_trigger: heizung.recalc
                          crontab: 1 0 * * = 1
                          cache: 'yes'
          Das klappt gut.

          Kommentar


            Versuche seit einiger Zeit auch meine DB umzustellen.
            MariaDB und Zugang funktioniert nach der Doku.
            Komme auch auf phpmyadmin erfolgreich auf die "LEEREN" Tabellen vom user: smarthome
            Leerzeilen in der plugin.yaml connect alle entfernt
            Läuft alles unter einer VirtualBox Debian9 unter OMV.

            Server-Version: 10.1.37-MariaDB-0+deb9u1 - Debian 9.6


            plugin.yaml
            Code:
            #neu 12/2018 db als mariaDB MySql
            database:
                class_name: Database
                class_path: plugins.database
                driver: pymysql
                connect:
                  - host:127.0.0.1
                  - user:smarthome
                  - passwd:HdLQfgdge5Q0Z1OQp
                  - db:smarthome_db
                instance: mysqldb
            Fehler:
            Code:
            2018-12-10  20:43:00 ERROR    root              Database [Database]: Could not connect to the database: object supporting the buffer API required
            2018-12-10  20:43:00 ERROR    plugins.database  Database: initialization failed: object supporting the buffer API required
            2018-12-10  20:44:00 ERROR    root              Database [Database]: Could not connect to the database: object supporting the buffer API required
            2018-12-10  20:44:00 ERROR    plugins.database  Database: initialization failed: object supporting the buffer API required
            Code:
            MariaDB [mysql]> select Host, User from user;
            +-----------+------------+
            | Host      | User       |
            +-----------+------------+
            | localhost | phpmyadmin |
            | localhost | root       |
            | localhost | smarthome  |
            +-----------+------------+
            4 rows in set (0.00 sec)
            
            
            +-----------------------------------+--------------+------------+
            | Host                              | Db           | USer       |
            +-----------------------------------+--------------+------------+
            | 127.0.0.1                         | smarthome_db | smarthome  |
            | localhost                         | phpmyadmin   | phpmyadmin |
            | localhost                         | smarthome_db | smarthome  |
            | «ip of your smarthomeng server»   | smarthome_db | smarthome  |
            +-----------------------------------+--------------+------------+
            RaspberryPi B+ und Pi2, Enertex KNXnet/IP Interface u TULIP, XS1-FS20, QNap TS-212, OpenELEC, Asterisk TK

            Kommentar


              Hallo,

              ich möchte meinen Datenbank mal bereinigen.
              In der Doku steht dazu:
              dbplugin.cleanup()

              This method will remove all items and logs from database of items which are currenlty not configured to be logged to database. Beware of this using in a multi-instance setup, since one instance does not know the item of the other instance!
              Wie geht das genau?
              Über CLI oder eine Logik?
              Irgendwie stehe ich auf dem Schlauch?

              Ist in der Doku irgendwo geschrieben, wie die Funktionen, die ein Plugin mitbringt, angesprochen werden können?

              Danke Euch.

              Kommentar


                Funktionen auf Plugins kannst Du einfach bspw. über eine Logik aufrufen. Aus dem CLI Plugin müsste das aber auch gehen.. oder Du baust dem Web-Interface des DB Plugins einfach einen Button dazu und stellst einen Pull Request ;-)))))

                Wenn wir jede Python Grundlage in die Doku schreiben würden, hätten wir einen 5000-seitigen Roman, den keiner mehr lesen würde (machen sie jetzt ja schon nicht...)

                Kommentar


                  Ich habe das Cleanup jetzt in die WebGUI im DEV Plugin integriert. Du darfst zum Testen auf den Knopf drücken - ich habe Angst ;-)

                  Scherz beiseite: bei mir ists gerade durchgelaufen. Dauert ggf. nur einige Minuten.
                  Zuletzt geändert von psilo; 17.12.2018, 16:21.

                  Kommentar


                    achja und nochwas: die funktionen des DB Plugins sind sogar per autocomplete im logikeditor verfügbar (DEV!)

                    database_autocomplete.png

                    Die API Übersicht gibts jetzt auch im Webif des Database Plugins:

                    webif.JPG
                    Zuletzt geändert von psilo; 17.12.2018, 18:14.

                    Kommentar


                      psilo
                      Super, danke.
                      Ist die develop schon so stabil, dass man/ich einen Wechsel wagen kann?
                      Oder kann ich auch nur das database-Plugin auf develop ziehen?

                      Kommentar


                        stabil ja, es wird aber nur mit dem DEV Core gehen!

                        Kommentar


                          Zitat von schorge Beitrag anzeigen
                          Versuche seit einiger Zeit auch meine DB umzustellen.
                          Fehler:
                          Code:
                          2018-12-10 20:43:00 ERROR root Database [Database]: Could not connect to the database: object supporting the buffer API required
                          2018-12-10 20:43:00 ERROR plugins.database Database: initialization failed: object supporting the buffer API required
                          2018-12-10 20:44:00 ERROR root Database [Database]: Could not connect to the database: object supporting the buffer API required
                          2018-12-10 20:44:00 ERROR plugins.database Database: initialization failed: object supporting the buffer API required
                          [/CODE]
                          schorge - konntest du das Problem lösen? Ich stehe gerade vor der selben Fehlermeldung.

                          Viele Grüße
                          Jannis

                          Kommentar


                            Zitat von psilo Beitrag anzeigen
                            stabil ja, es wird aber nur mit dem DEV Core gehen!
                            Hab auf Develop umgestellt und das Feature getestet. Bei mir hat es ziemlich lange gedauert. Liegt wohl daran, dass bei mir alles auf einem RPI3 mit USB-Stick läuft.

                            ​​​​​​Ließe sich auch noch ein Button zum Defragmentieren bzw Optimieren der DB einbauen?

                            Kommentar


                              Wie "defragmentiere" bzw. "optimiere" ich bitte eine DB???? Haben wir dafür Funktionen? Defragmentieren kenne ich aus Dateisystemen, aber nicht Datenbanken. Optimieren könnte Index neu aufbauen sein, aber das kann ich ja direkt auf DB Ebene machen?!

                              Wichtig: das ist nicht mein Plugin. Ich habe bisher nur mit dem bestehenden Funktionsumfang ein WebIF dazugebaut. Tiefer einzusteigen sprengt derzeit meine Zeit.

                              Hat das Cleanup die Sachen gelöscht, die Du erwartet hast? Ich habe leider nicht drauf geachtet und nur acht gegeben, dass das was ich brauche noch da ist ;-)

                              Kommentar


                                erneut die Frage
                                Hat das Cleanup die Sachen gelöscht, die Du erwartet hast? Ich habe leider nicht drauf geachtet und nur acht gegeben, dass das was ich brauche noch da ist ;-)
                                Ich fände schon fair, wenn man ein Feature baut, dann wenigstens etwas tieferes Feedback zu kriegen

                                Kommentar

                                Lädt...
                                X