Ankündigung

Einklappen
Keine Ankündigung bisher.

eHZ Visu Beispiel mit neuem Widget Stacked Column Bar Chart

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

    #91
    Bin den Thread grad nochmal durchgegangen und habe einen Verweis auf einen anderen Thread gefunden. Leider ohne Lösung. :,-(
    ---
    Martin

    Kommentar


      #92
      Könnte es mit der sqlite Version aus dem smarthome-dev-Zweig funktionieren?
      ---
      Martin

      Kommentar


        #93
        Ich vermute nicht dass es der Dev-Zweig ändert, an dem Plugin ist länger nichts verändert worden.

        Bei mir lokal habe ich in der sqlite __init__.py die Zeile 333 ( "if iend > tuples[-1][0]: ") auskommentiert, da ich auch Darstellungsprobleme hatte.

        Wäre eventuell einen Versuch wert?

        Kommentar


          #94
          Ich habe gerade festgestellt, dass ich den dev-Zweig bei mir im Einsatz habe. ;-)
          Da gibt es diese Zeile nicht mehr.
          ---
          Martin

          Kommentar


            #95
            Stimmt, das ist wohl dann n Relikt bei mir gewesen.
            Wie sieht denn Deine Anzeige aus? - Eventuell kann man da raus noch was ableiten.

            Ich hab nur 1 Zähler und hab auch noch etwas an der widget.js verändert, das würde aber bei Dir dafür sorgen das der mittlere Stacked-Chart nicht mehr funktioniert, weil ich den Zeitpunkt aller Datenpunkte für die "daily"-Version auf 0:00:00 Uhr korrigiere anstatt nur die letzten 10 Sekunden glatt zu ziehen.


            Kommentar


              #96
              stacked charts.png
              So schaut es gerade aus.
              ---
              Martin

              Kommentar


                #97
                Habe gestern im log gesehen, dass sh.py Probleme hat Werte zu generieren:

                Code:
                2015-07-30 04:00:00 WARNING  ehz.studio.verbrauch.stuendlich-eval Item ehz.studio: value max does not match type num. Via 1h 1h
                2015-07-30 04:00:00 WARNING  ehz.studio.verbrauch.stuendlich-eval Item ehz.studio.verbrauch.stuendlich: problem evaluating sh.ehz.studio() - sh.ehz.studio('max', '1h', '1h'): unsupported operand type(s) for -: 'float' and 'NoneType'
                2015-07-30 04:00:00 WARNING  ehz.haus.verbrauch.stuendlich-eval Item ehz.haus: value max does not match type num. Via 1h 1h
                2015-07-30 04:00:00 WARNING  ehz.haus.verbrauch.stuendlich-eval Item ehz.haus.verbrauch.stuendlich: problem evaluating sh.ehz.haus() - sh.ehz.haus('max', '1h', '1h'): unsupported operand type(s) for -: 'float' and 'NoneType'
                Hier die ehz.conf:
                Code:
                [ehz]
                    [[haus]]
                        type = num
                        cache = on
                        knx_dpt = 14
                        knx_listen = 6/7/13
                        knx_init = 6/7/13
                        sqlite = yes
                        nw = yes
                        [[[leistung_aktuell]]]
                            type = num
                            visu = yes
                            knx_dpt = 14
                            knx_listen = 6/7/14
                            knx_init = 6/7/14
                            sqlite = yes
                        [[[leistung_gestern]]]
                            type = num
                            visu = yes
                            eval = sh.ehz.haus.db('max', '1d', '1d')
                        [[[verbrauch]]]
                            [[[[aktuell]]]]
                                type = num
                                cache = on
                                eval = sh.ehz.haus() - sh.ehz.haus.db('max', '1d', sh.zeit.minutenseitmitternacht.dbstr())
                                eval_trigger = ehz.haus
                            [[[[gestern]]]]
                                type = num
                                cache = on
                                sqlite = yes
                                crontab = 0 0 * * = 1
                                eval = sh.ehz.haus() - sh.ehz.haus.db('max', '1d', '1d')
                                [[[[[weekly_avg]]]]]
                                    type = num
                                    cache = on
                                    sqlite = yes
                                    eval = round(sh.ehz.haus.verbrauch.gestern.db('avg', '1w'), 2)
                                    eval_trigger = ehz.kosten.gestern
                            [[[[stuendlich]]]]
                                type = num
                                cache = on
                                sqlite = yes
                                crontab = 0 * * * = 1
                                eval = sh.ehz.haus() - sh.ehz.haus.db('max', '1h','1h')
                            [[[[monat]]]]
                                type = num
                                cache = on
                                sqlite = yes
                                crontab = 0 0 1 * = 1
                                eval = sh.ehz.haus() - sh.ehz.haus.db('max', '1m', '1m')
                        [[[kosten]]]
                            [[[[heute]]]]
                                type = num
                                cache = on
                                sqlite = yes
                                eval = round((sh.ehz.haus.verbrauch.aktuell())*0.2274 + (136.85/365),2)
                                eval_trigger = ehz.haus.verbrauch.aktuell
                            [[[[gestern]]]]
                                type = num
                                cache = on
                                sqlite = yes
                                eval = round((sh.ehz.haus.verbrauch.gestern())*0.2274 + (136.85/365),2)
                                eval_trigger = ehz.haus.verbrauch.gestern
                                [[[[[weekly_avg]]]]]
                                    type = num
                                    cache = on
                                    sqlite = yes
                                    eval = round(sh.ehz.haus.kosten.gestern.db('avg', '1w'), 2)
                                    eval_trigger = ehz.haus.kosten.gestern
                            [[[[monat]]]]
                                type = num
                                cache = on
                                sqlite = yes
                                eval = round((sh.ehz.haus.verbrauch.monat())*0.2274 + (136.85/365),2)
                                eval_trigger = ehz.haus.verbrauch.monat
                    [[studio]]
                        type = num
                        cache = on
                        knx_dpt = 14
                        knx_listen = 6/7/9
                        knx_init = 6/7/9
                        sqlite = yes
                        nw = yes
                        [[[leistung_aktuell]]]
                            type = num
                            visu = yes
                            knx_dpt = 14
                            knx_listen = 6/7/12
                            knx_init = 6/7/12
                            sqlite = yes
                        [[[leistung_gestern]]]
                            type = num
                            visu = yes
                            eval = sh.ehz.studio.db('max', '1d', '1d')
                        [[[verbrauch]]]
                            [[[[aktuell]]]]
                                type = num
                                cache = on
                                eval = sh.ehz.studio() - sh.ehz.studio.db('max', '1d', sh.zeit.minutenseitmitternacht.dbstr())
                                eval_trigger = ehz.studio
                            [[[[gestern]]]]
                                type = num
                                cache = on
                                sqlite = yes
                                crontab = 0 0 * * = 1
                                eval = sh.ehz.studio() - sh.ehz.studio.db('max', '1d', '1d')
                                [[[[[weekly_avg]]]]]
                                    type = num
                                    cache = on
                                    sqlite = yes
                                    eval = round(sh.ehz.studio.verbrauch.gestern.db('avg', '1w'), 2)
                                    eval_trigger = ehz.kosten.gestern
                            [[[[stuendlich]]]]
                                type = num
                                cache = on
                                sqlite = yes
                                crontab = 0 * * * = 1
                                eval = sh.ehz.studio() - sh.ehz.studio.db('max', '1h','1h')
                            [[[[monat]]]]
                                type = num
                                cache = on
                                sqlite = yes
                                crontab = 0 0 1 * = 1
                                eval = sh.ehz.studio() - sh.ehz.studio.db('max', '1m', '1m')
                        [[[kosten]]]
                            [[[[heute]]]]
                                type = num
                                cache = on
                                sqlite = yes
                                eval = round((sh.ehz.studio.verbrauch.aktuell())*0.2274 + (136.85/365),2)
                                eval_trigger = ehz.studio.verbrauch.aktuell
                            [[[[gestern]]]]
                                type = num
                                cache = on
                                sqlite = yes
                                eval = round((sh.ehz.studio.verbrauch.gestern())*0.2274 + (136.85/365),2)
                                eval_trigger = ehz.studio.verbrauch.gestern
                                [[[[[weekly_avg]]]]]
                                    type = num
                                    cache = on
                                    sqlite = yes
                                    eval = round(sh.ehz.studio.kosten.gestern.db('avg', '1w'), 2)
                                    eval_trigger = ehz.studio.kosten.gestern
                            [[[[monat]]]]
                                type = num
                                cache = on
                                sqlite = yes
                                eval = round((sh.ehz.studio.verbrauch.monat())*0.2274 + (136.85/365),2)
                                eval_trigger = ehz.studio.verbrauch.monat
                    [[wp]]
                        [[[tag]]]
                            type = num
                            cache = on
                            knx_dpt = 14
                            knx_listen = 6/7/15
                            knx_init = 6/7/15
                            sqlite = yes
                            nw = yes
                            [[[[verbrauch]]]]
                                [[[[[aktuell]]]]]
                                    type = num
                                    cache = on
                                    eval = sh.ehz.wp.tag() - sh.ehz.wp.tag.db('max', '1d', sh.zeit.minutenseitmitternacht.dbstr())
                                    eval_trigger = ehz.wp.tag
                                [[[[[gestern]]]]]
                                    type = num
                                    cache = on
                                    sqlite = yes
                                    crontab = 0 0 * * = 1
                                    eval = sh.ehz.wp.tag() - sh.ehz.wp.tag.db('max', '1d', '1d')
                                [[[[[monat]]]]]
                                    type = num
                                    cache = on
                                    sqlite = yes
                                    crontab = 0 0 1 * = 1
                                    eval = sh.ehz.wp.tag() - sh.ehz.wp.tag.db('max', '1m', '1m')
                            [[[[kosten]]]]
                                [[[[[heute]]]]]
                                    type = num
                                    cache = on
                                    eval = round((sh.ehz.wp.tag.verbrauch.aktuell()*0.2251) + (84/2/365),2)
                                    eval_trigger = ehz.wp.tag.verbrauch.aktuell
                                [[[[[gestern]]]]]
                                    type = num
                                    cache = on
                                    sqlite = yes
                                    eval = round((sh.ehz.wp.tag.verbrauch.gestern()*0.2251) + (84/2/365),2)
                                    eval_trigger = ehz.wp.tag.verbrauch.gestern
                                [[[[[monat]]]]]
                                    type = num
                                    cache = on
                                    sqlite = yes
                                    eval = round((sh.ehz.wp.tag.verbrauch.monat()*0.2251) + (84/2/365),2)
                                    eval_trigger = ehz.wp.tag.verbrauch.monat
                        [[[nacht]]]
                            type = num
                            cache = on
                             knx_dpt = 14
                            knx_listen = 6/7/16
                            knx_init = 6/7/16
                            sqlite = yes
                            nw = yes
                            [[[[verbrauch]]]]
                                [[[[[aktuell]]]]]
                                    type = num
                                    cache = on
                                    eval = sh.ehz.wp.nacht() - sh.ehz.wp.nacht.db('max', '1d', sh.zeit.minutenseitmitternacht.dbstr())
                                    eval_trigger = ehz.wp.nacht
                                [[[[[gestern]]]]]
                                    type = num
                                    cache = on
                                    sqlite = yes
                                    crontab = 0 0 * * = 1
                                    eval = sh.ehz.wp.nacht() - sh.ehz.wp.nacht.db('max', '1d', '1d')
                                [[[[[monat]]]]]
                                    type = num
                                    cache = on
                                    sqlite = yes
                                    crontab = 0 0 1 * = 1
                                    eval = sh.ehz.wp.nacht() - sh.ehz.wp.nacht.db('max', '1m', '1m')
                            [[[[kosten]]]]
                                [[[[[heute]]]]]
                                    type = num
                                    cache = on
                                    eval = round((sh.ehz.wp.nacht.verbrauch.aktuell()*0.1929) + (84/2/365),2)
                                    eval_trigger = ehz.wp.nacht.verbrauch.aktuell
                                [[[[[gestern]]]]]
                                    type = num
                                    cache = on
                                    sqlite = yes
                                    eval = round((sh.ehz.wp.nacht.verbrauch.gestern()*0.1929) + (84/2/365),2)
                                    eval_trigger = ehz.wp.nacht.verbrauch.gestern
                                [[[[[monat]]]]]
                                    type = num
                                    cache = on
                                    sqlite = yes
                                    eval = round((sh.ehz.wp.nacht.verbrauch.monat()*0.1929) + (84/2/365),2)
                                    eval_trigger = ehz.wp.nacht.verbrauch.monat
                        [[[gesamt]]]
                            type = num
                            cache = on
                            sqlite = yes
                            eval = sh.ehz.wp.tag() + sh.ehz.wp.nacht()
                            eval_trigger = ehz.wp.tag | ehz.wp.nacht
                            [[[[leistung_aktuell]]]]
                                type = num
                                cache = on
                                knx_dpt = 14
                                knx_listen = 6/7/17
                                knx_init = 6/7/17
                                nw = yes
                            [[[[leistung_gestern]]]]
                                type = num
                                visu = yes
                                eval = sh.ehz.wp.gesamt.db('max', '1d', '1d')
                                eval_trigger = ehz.wp.gesamt
                            [[[[verbrauch]]]]
                                [[[[[aktuell]]]]]
                                    type = num
                                    cache = on
                                    eval = sh.ehz.wp.gesamt() - sh.ehz.wp.gesamt.db('max', '1d', sh.zeit.minutenseitmitternacht.dbstr())
                                    eval_trigger = ehz.wp.gesamt
                                [[[[[gestern]]]]]
                                    type = num
                                    cache = on
                                    sqlite = yes
                                    eval = sh.ehz.wp.tag.verbrauch.gestern() + sh.ehz.wp.nacht.verbrauch.gestern()
                                    eval_trigger = ehz.wp.tag.verbrauch.gestern | ehz.wp.nacht.verbrauch.gestern
                                [[[[[stuendlich]]]]]
                                    type = num
                                    cache = on
                                    sqlite = yes
                                    crontab = 0 * * * = 1
                                    eval = sh.ehz.wp.gesamt() - sh.ehz.wp.gesamt.db('max', '1h', '1h')
                                [[[[[monat]]]]]
                                    type = num
                                    cache = on
                                    sqlite = yes
                                    crontab = 0 0 1 * = 1
                                    eval = sh.ehz.wp.gesamt() - sh.ehz.wp.gesamt.db('max', '1m', '1m')
                Bin leider etwas ratlos. Komisch finde ich nur, dass für Wärmepumpe kein Fehler auftaucht. Da kommt die gleiche Zeile ja auch dreimal vor.

                ---
                Martin

                Kommentar


                  #98
                  Laut log fehlt da das .db, oder verschluckt das Log dieses?
                  PHP-Code:
                    sh.ehz.haus() - sh.ehz.haus.db('max''1h''1h'
                  Zuletzt geändert von Marcov; 30.07.2015, 20:32.

                  Kommentar


                    #99
                    Das scheint im log-file nicht richtig anzukommen. Im conf-file ist es doch richtig, oder sehe ich den Wald vor lauter Bäumen nicht?
                    ---
                    Martin

                    Kommentar


                      Habe gerade mal in mein Log geschaut, dort wird der Fehler mit ".db" ausgeben. smarthome.py vielleicht nicht sauber gestoppt und deshalb noch eine alte .conf geladen? Doppelte .conf Datei?

                      Kommentar


                        Hi,
                        In wie weit sind diese Plots in 2.8 (SHNG) integriert bzw. lauffähig?
                        Zuletzt geändert von fuxl66; 08.11.2016, 14:59.

                        Kommentar


                          Zitat von martinb07 Beitrag anzeigen
                          Auf Github gibt es verschiedene sog. "Branches". Normal lädst du dir den Master Branch. Du kannst aber, sofern vorhanden, auch auf andere Branches zugreifen. Meist heißt der Stand, der gerade in Bearbeitung ist "develop". Da sind dann die neuesten, vielleicht nicht ganz stabilen Änderungen enthalten.
                          Klar soweit?
                          Zu finden hier:
                          [ATTACH=CONFIG]n825175[/ATTACH]
                          Direktlink: https://github.com/mknx/smarthome/tree/develop


                          Gruß
                          Martin
                          Hi Martin,

                          ich kann das Plugin nicht finden.
                          Wie ist der Name das Plugins, und wo finde ich die letzet Version?
                          Dank uen Grüße
                          ANDI

                          Kommentar


                            Hi Andi

                            Das ist kein Plugin von sh.py. Die gestapelte Darstellung musst du dir in smartvisu selbst zusammenbasteln. Auf der ersten Seite steht beschrieben wie du das machst: https://knx-user-forum.de/forum/supp...005#post659005

                            Leider wurde es in die Version 2.8 nicht übernommen.
                            ---
                            Martin

                            Kommentar


                              Für smartVISU 2.9 steht zumindest die Integration von plot.stacked eigentlich auf der Liste. Allerdings tue ich mich noch etwas schwer mit den vielen vorausgesetzten Items in SH.py.
                              Das passt nicht so recht ins Konzept der smartVISU, unter Anderem weil diese ja mehrere Backends unterstützt.

                              Kommentar


                                Servus,

                                hat sich erledigt. Läuft bei mir nun.

                                Hallo zusammen,

                                ich habe versucht das bei mir zum Laufen zu bekommen. Leider ohne Erfolg.

                                Habe wie eingangs beschrieben die Zeit Logik integriert. Danach dann die Items in der conf angelegt. Das passt soweit da ich die Werte mir normal in der Visu anzeigen lassen kann.

                                die smartvisu/widgets/widget.js sieht so aus.
                                Code:
                                // ----- plot.stacked ----------------------------------------------------------
                                $(document).delegate('div[data-widget="plot.stacked"]', {
                                    'update': function (event, response) {
                                        // response is: [ [ [t1, y1], [t2, y2] ... ], [ [t1, y1], [t2, y2] ... ], ... ]
                                
                                        var label = $(this).attr('data-label').explode();
                                        var color = $(this).attr('data-color').explode();
                                        var exposure = $(this).attr('data-exposure').explode();
                                        var axis = $(this).attr('data-axis').explode();
                                        var zoom = $(this).attr('data-zoom');
                                        var showStacklabels = JSON.parse($(this).attr('data-stacklabels'));
                                        var correctdate = JSON.parse($(this).attr('data-correctdate'));
                                        var series = Array();
                                
                                        for (var i = 0; i < response.length; i++) {
                                            // 1) werte werden um Mitternacht für den Vortag generiert, Anzeige von Highcharts auf dem Folgetag, ABzug von 24h in millisekunden
                                            // 2) timestamp is in milliseconds, harmonize last 3 figures to 000
                                            // sollte also hiermit auf 10sec "ungenau" werden => notwendig für gruppierung von highcharts
                                            // 3) remove last value as it is a during the day value
                                            var oneResponse = response[i]; // [[1420526954593,0],[1420554301019,6.21],[1420585202298,6.7],[1420671601499,7.4],[1420671601527,7.12],[1420747423682,7.12]]
                                            for (var k = 0; k < oneResponse.length; k++) {
                                                var timestamp = oneResponse[k][0];
                                                // 1)
                                                if (correctdate) {
                                                    timestamp = timestamp - 1000 * 60 * 60 * 24;
                                                }
                                                // 2)
                                                //var newTimestamp = timestamp.toString().substring(0, 9).concat('0000');
                                                var newTimestamp = timestamp.toString().substring(0, 8).concat('00000');
                                                oneResponse[k][0] = parseInt(newTimestamp);
                                            }
                                            oneResponse.pop(); // 3)
                                            response[i] = oneResponse;
                                
                                            series[i] = {
                                                type: (exposure[i] != 'stair' ? exposure[i] : 'line'),
                                                step: (exposure[i] == 'stair' ? 'left' : false),
                                                name: label[i],
                                                data: response[i],
                                                color: (color[i] ? color[i] : null)
                                            }
                                        }
                                
                                
                                        // draw the plot
                                
                                        $('#' + this.id).highcharts({
                                                chart: { type: 'column' },
                                                series: series,
                                                xAxis: { type: 'datetime', title: { text: axis[0] } },
                                                yAxis: { min: $(this).attr('data-ymin'), max: $(this).attr('data-ymax'), title: { text: axis[1] }, stackLabels: {
                                                    enabled: showStacklabels,
                                                    style: { color: '#fff', 'font-size': '13px', 'line-height': '14px' } }
                                                    },
                                                plotOptions: {
                                                    column: {
                                                        stacking: 'normal',
                                                        dataLabels: { enabled: false }
                                                    }
                                                }
                                        });
                                
                                    },
                                
                                    'point': function (event, response) {
                                
                                        var count = $(this).attr('data-count');
                                        if (count < 100) {
                                            count = 100;
                                        }
                                        for (var i = 0; i < response.length; i++) {
                                            if (response[i]) {
                                                var chart = $('#' + this.id).highcharts();
                                
                                                // more points?
                                                for (var j = 0; j < response[i].length; j++) {
                                                    chart.series[i].addPoint(response[i][j], false, (chart.series[i].data.length >= count));
                                                }
                                                chart.redraw();
                                            }
                                        }
                                    }
                                });
                                Beim Anschliessenden "php make.php" im Hauptverzeichnis kommt dann dieser Fehler.

                                Code:
                                pi@raspberrypi:/var/www/html/smartVISU $ sudo php make.php
                                PHP Deprecated:  Methods with the same name as their class will not be constructors in a future version of PHP; PhpClosure has a deprecated constructor in /var/www/html/smartVISU/vendor/google.closure/php-closure.php on line 34
                                <pre>
                                                                                                     smart[VISU]
                                                                                                    01:34, 24.12
                                --------------------------------------------------------------------------------
                                
                                <b>lib/base/base.js</b>
                                PHP Fatal error:  Uncaught Exception: String could not be parsed as XML in /var/www/html/smartVISU/vendor/google.closure/php-closure.php:485
                                Stack trace:
                                #0 /var/www/html/smartVISU/vendor/google.closure/php-closure.php(485): SimpleXMLElement->__construct('')
                                #1 /var/www/html/smartVISU/vendor/google.closure/php-closure.php(281): PhpClosure->_parseXml('')
                                #2 /var/www/html/smartVISU/make.php(68): PhpClosure->_compile()
                                #3 /var/www/html/smartVISU/make.php(22): compile('lib/base/base.j...')
                                #4 {main}
                                  thrown in /var/www/html/smartVISU/vendor/google.closure/php-closure.php on line 485
                                Das DIV im Plot sieht wie folgt aus

                                PHP-Code:
                                <div id="{{ uid(page, id) }}" data-widget="plot.stacked" data-item="{{ implode(gad, [mode|default('avg'), tmin|default('1h'), tmax|default('now'), count|default(100)]) }}"
                                        
                                {% if ymin is not empty %} data-ymin="{{ ymin }}" {% endif %} {% if ymax is not empty %} data-ymax="{{ ymax }}" {% endif %}
                                        
                                data-label="{{ implode(label) }}" data-stacklabels="{{ stacklabels|default(true) }}" data-correctdate="{{ correctdate|default('false') }}"
                                        
                                data-color="{{ implode(color) }}" data-exposure="{{ implode(exposure) }}" data-axis="{{ implode(axes) }}"
                                        
                                {% if count is not empty %} data-count="{{ count }}" {% endif %}
                                        class=
                                "plot"></div

                                Verwenden tue ich die smartVISU 2.8 und SmartHomeNG 1.3.v1.3_Hotfix_2.

                                Hat jemand eine Idee wie der Fehler zustande kommt und wie man den Plotzum laufen bekommt?

                                Besten Dank im Voraus.

                                Grüße
                                Mirko
                                Zuletzt geändert von Simikuen; 08.01.2018, 16:48.

                                Kommentar

                                Lädt...
                                X