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

    #16
    Ja hatte ich heute morgen gleich versucht, ändert aber nichts am Fehlerbild.

    Frage ich einen anderen Plot an so erhalte ich keine Meldung im Log, lediglich 192.168.2.29:49267 sent '{"cmd":"series","item":"eg.wohnzimmer.std_tv.curr ent","series":"avg","start":"12h"}'.

    Sag mal sind Deine Verbräuche und Kosten von "gestern" stabil? Bei mir hatten sich die auch ständig geändert, hab das jetzt gefixed.
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #17
      Zitat von hhhc Beitrag anzeigen
      Ich habe 2 Landis + Gyr E350 vom Energieversorger gestellt bekommen.
      Daran habe ich je einen IR Schreib-Lese-Kopf (volkszaehler.org - wiki - IR-Schreib-Lesekopf, habe den Lötservice von Udo in Anspruch genommen) per USB an einen Rasperry-PI mit Standard-OS angebracht. Das Auslesen mache ich dann, indem ich per Cronjob jede Minute ein PHP Script ausführe (siehe anhang read.php.zip)
      Die entsprechenden Items in smarthome.py müssen über das Network plugin schreibbar sein.

      Da ich den Pi eh noch rumliegen hatte, war das für mich die kostengünstigste Lösung und es tut einwandfrei.

      Code:
              type = num
              cache = on
              sqlite = yes
              [B]nw = yes[/B]
      Die Idee mit dem Volkszähler hatte ich gar nicht auf dem Schirm. Ich hab bei mir im Zählerschrank sowieso nen kleinen Atom PC mit Ubuntu laufen der mein Smarthome hostet - und für ein paar Euro könnte man den Versuch ja durchaus wagen.

      Ich vermute mal Du verwendest die USB-Version?

      Danke & Grüße,

      Lars

      Kommentar


        #18
        Zitat von Shai Beitrag anzeigen
        Ich vermute mal Du verwendest die USB-Version?
        Ja, genau. Hab dem Udo auch gesagt, dass ich 4m USB Kabel bräuchte und hat das auch so umgesetzt. Super Service von ihm.
        ++ Der ultimative ETS 6 Schnellkurs ++
        KNX und die ETS vom Profi lernen
        www.ets-schnellkurs.de

        Kommentar


          #19
          Zitat von JuMi2006 Beitrag anzeigen
          Ja hatte ich heute morgen gleich versucht, ändert aber nichts am Fehlerbild.

          Frage ich einen anderen Plot an so erhalte ich keine Meldung im Log, lediglich 192.168.2.29:49267 sent '{"cmd":"series","item":"eg.wohnzimmer.std_tv.curr ent","series":"avg","start":"12h"}'.
          Ich muss gestehen, dass das mein erstes Widget war und ich kein Experte bin. Nichtsdestotrotz, Versionscheck:
          * Ich nutze dev-Zweig von smarthome.py
          * Ich habe ausserdem die Änderung von "Zoomable Plot" bzgl der zu übertragenden Count Variablen eingebaut (https://knx-user-forum.de/smartvisu/...able-plot.html)

          Kannst Du mal bitte den HTML Code eines bei Dir funktionierenden plot.period Diagramms posten?
          Das sollte sowas ähnliches sein:
          HTML-Code:
          <div id="ehz-p1verbrauchprotag" data-widget="plot.stacked" data-item="ehz.haus.verbrauch.gestern.avg.2w.now.100, ehz.wp.tag.verbrauch.gestern.avg.2w.now.100, ehz.wp.nacht.verbrauch.gestern.avg.2w.now.100" data-label="Haushalt, Wärmepumpe Tag, Wärmepumpe Nacht" data-stacklabels="true" data-correctdate="1" data-color="" data-exposure="column, column, column" data-axis="" class="plot" data-highcharts-chart="0">
          Ich vermute, dass der "Datenstring" (zaehler.haushalt.verbrauch.60min.max.48h.now.100) ähnlich aber ohne die 100 am Ende aussieht...
          ++ Der ultimative ETS 6 Schnellkurs ++
          KNX und die ETS vom Profi lernen
          www.ets-schnellkurs.de

          Kommentar


            #20
            Zitat von JuMi2006 Beitrag anzeigen
            Sag mal sind Deine Verbräuche und Kosten von "gestern" stabil? Bei mir hatten sich die auch ständig geändert, hab das jetzt gefixed.
            Kannst Du bitte näher beschreiben, wo der Fehler lag? Ggf hab ich den ja auch...
            ++ Der ultimative ETS 6 Schnellkurs ++
            KNX und die ETS vom Profi lernen
            www.ets-schnellkurs.de

            Kommentar


              #21
              Zum Fehler von "gestern"

              Code:
                          [[[[gestern]]]]
                              type = num
                              cache = on
                              sqlite = yes
                              eval_trigger = zaehler.haushalt.stand
                              #eval = sh.zaehler.haushalt.stand.sql() - sh.zaehler.haushalt.stand.sql.db('max', '1d', '1d')
                              eval = sh.zaehler.haushalt.stand.tag() - sh.zaehler.haushalt.stand.sql.db('min', str(sh.minute.since.midnight() + 1440) + 'i' , sh.minute.since.midnight.dbstr())
              Du fragst mit ('max','1d','1d') einen Wert von -24h ab und nicht vom Kalendertag. Ich habe noch die Stände vom Tagesbeginn als item (sh.zaehler.haushalt.stand.tag()) kann man aber auch über eine Datenbankabfrage machen. Von dem ziehe ich jetzt das Minimum von "Minuten seit Mitternacht + 1440 Minuten" (das ist gestern um 0.00 Uhr) ab.

              Da führen aber mehrere Wege nach Rom.

              html:
              HTML-Code:
              	<div id="room0_ehz-p22" data-widget="plot.stacked" data-item="zaehler.haushalt.verbrauch._60min.max.48h.now.100, zaehler.wp.verbrauch._60min.max.48h.now.100"
              		 		data-label="Haushalt, Wärmepumpe" data-stacklabels="false" data-correctdate="false"
              		data-color="" data-exposure="column, column" data-axis=""
              				class="plot"></div>
              EDIT:
              Es fehlt bei mir: data-highcharts-chart="0"
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #22
                Zitat von JuMi2006 Beitrag anzeigen
                Zum Fehler von "gestern"

                Code:
                            [[[[gestern]]]]
                                type = num
                                cache = on
                                sqlite = yes
                                eval_trigger = zaehler.haushalt.stand
                                #eval = sh.zaehler.haushalt.stand.sql() - sh.zaehler.haushalt.stand.sql.db('max', '1d', '1d')
                                eval = sh.zaehler.haushalt.stand.tag() - sh.zaehler.haushalt.stand.sql.db('min', str(sh.minute.since.midnight() + 1440) + 'i' , sh.minute.since.midnight.dbstr())
                Du fragst mit ('max','1d','1d') einen Wert von -24h ab und nicht vom Kalendertag. Ich habe noch die Stände vom Tagesbeginn als item (sh.zaehler.haushalt.stand.tag()) kann man aber auch über eine Datenbankabfrage machen. Von dem ziehe ich jetzt das Minimum von "Minuten seit Mitternacht + 1440 Minuten" (das ist gestern um 0.00 Uhr) ab.

                Da führen aber mehrere Wege nach Rom.
                Du hast sicherlich die fehlertolerantere Methode, aber ich führe das ('max','1d','1d') per cron um Mitternacht aus und somit stimmen die Werte schon überein.
                Code:
                            [[[[gestern]]]]
                                type = num
                                cache = on
                                sqlite = yes
                                crontab = 0 0 * * = 1
                                eval = sh.ehz.haus() - sh.ehz.haus.db('max', '1d', '1d')
                ++ Der ultimative ETS 6 Schnellkurs ++
                KNX und die ETS vom Profi lernen
                www.ets-schnellkurs.de

                Kommentar


                  #23
                  Hey,

                  ich hab gestern meinen IR-Lesekopf bekommen und direkt mal rumgespielt.
                  Die Daten vom EHZ lese ich direkt mit einer Smarthome Logik aus (via crontab 1x pro Minute) was auch scheinbar funktioniert, da ich den Zählerstand und den Momentanverbauch in meine Items bekomme.

                  Im SH Log sind allerdings noch einige Warnings vorhanden:

                  Code:
                  2015-01-18 13:31:42 WARNING  Main         Item ehz.haus.verbrauch.aktuell: problem reading cache: [Errno 2] No such file or directory: '/usr/local/smarthome/var/cache/ehz.haus.verbrauch.aktuell'
                  2015-01-18 13:31:42 WARNING  Main         Item ehz.haus.verbrauch.gestern.weekly_avg: problem reading cache: [Errno 2] No such file or directory: '/usr/local/smarthome/var/cache/ehz.haus.verbrauch.gestern.weekly_avg'
                  2015-01-18 13:31:42 WARNING  Main         Item ehz.haus.verbrauch.gestern: problem reading cache: [Errno 2] No such file or directory: '/usr/local/smarthome/var/cache/ehz.haus.verbrauch.gestern'
                  2015-01-18 13:31:42 WARNING  Main         Item ehz.haus.verbrauch.stuendlich: problem reading cache: [Errno 2] No such file or directory: '/usr/local/smarthome/var/cache/ehz.haus.verbrauch.stuendlich'
                  2015-01-18 13:31:42 WARNING  Main         Item ehz.haus.verbrauch.monat: problem reading cache: [Errno 2] No such file or directory: '/usr/local/smarthome/var/cache/ehz.haus.verbrauch.monat'
                  2015-01-18 13:31:42 WARNING  Main         Item ehz.haus.kosten.gestern.weekly_avg: problem reading cache: [Errno 2] No such file or directory: '/usr/local/smarthome/var/cache/ehz.haus.kosten.gestern.weekly_avg'
                  2015-01-18 13:31:42 WARNING  Main         Item ehz.kosten.gestern.weekly_avg: problem reading cache: [Errno 2] No such file or directory: '/usr/local/smarthome/var/cache/ehz.kosten.gestern.weekly_avg'
                  2015-01-18 13:31:42 WARNING  ehz.haus.verbrauch.aktuell Item ehz.haus.verbrauch.aktuell: problem evaluating sh.ehz.haus() - sh.ehz.haus.db('max', '1d', sh.minute.since.midnight.dbstr()): string index out of range
                  2015-01-18 13:31:59 WARNING  ehz.haus.verbrauch.aktuell Item ehz.haus.verbrauch.aktuell: problem evaluating sh.ehz.haus() - sh.ehz.haus.db('max', '1d', sh.minute.since.midnight.dbstr()): unsupported operand type(s) for -: 'float' and 'NoneType'

                  Ich benutze die Item.conf aus dem 1. Post, hab lediglich die Wärmepumpe rausgeworfen, da wir ne Gas-Therme haben.

                  Hat jemand ne Idee woher die Warnings kommen könnten?


                  Grüße,

                  Lars

                  Kommentar


                    #24
                    Ich bin mir ziemlich sicher dass fast alle nach einem Neustart (die ersten) bzw. am morgigen Tag verschwinden werden (keine gültigen Datenbankwerte von gestern).
                    Umgezogen? Ja! ... Fertig? Nein!
                    Baustelle 2.0 !

                    Kommentar


                      #25
                      Hey,

                      die Vermutung mit den fehlenden Werten hatte ich auch. Ich werde das mal beobachten.

                      Hattest Du eigentlich die Warnings in den Plots weg bekommen?

                      Code:
                      2015-01-18 19:57:34 WARNING  Main         Client 192.168.178.31:55452 requested invalid item: ehz.haus.verbrauch.stuendlich.max.48h.now.100
                      2015-01-18 19:57:34 WARNING  Main         Client 192.168.178.31:55452 requested invalid item: ehz.haus.kosten.gestern.max.2w.now.100
                      2015-01-18 19:57:34 WARNING  Main         Client 192.168.178.31:55452 requested invalid item: ehz.kosten.gestern.weekly_avg.max.2w.now.100
                      2015-01-18 19:57:34 WARNING  Main         Client 192.168.178.31:55452 requested invalid item: ehz.haus.verbrauch.gestern.avg.2w.now.100

                      Die habe ich nun auch

                      Kommentar


                        #26
                        Nein hab ich nicht, ich bekomme auch keine Plots da raus.
                        Umgezogen? Ja! ... Fertig? Nein!
                        Baustelle 2.0 !

                        Kommentar


                          #27
                          Hab das ganze jetzt bei mir auch mal eingebaut, leider mit den gleichen Fehlermeldungen bei den Plots.
                          Hab das ganze jetzt mit normalen plot.period gelöst, ist zwar nicht ganz so schön wie es mit dem anderen Plugin möglich sein soll, aber zumindest hat man eine Übersicht.

                          Code:
                          <div class="block" style="width: 100%;">
                            <div class="set-2" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
                              <div data-role="collapsible" data-collapsed="false">
                                <h3>Stromverbrauch pro Stunde (kwh)</h3>
                                {{ plot.period('pstunde', 'zaehler1.verbrauch.stuendlich', 'max', '48h', '', '', '', '', 'Haushalt', '#aa0', 'column', ['', ''], '1h') }}
                              </div>
                            </div>
                          </div>
                          
                          <div class="block" style="width: 100%;">
                            <div class="set-2" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
                              <div data-role="collapsible" data-collapsed="false">
                                <h3>Stromverbrauch pro Tag (kwh)</h3>
                                {{ plot.period('ptag', 'zaehler1.verbrauch.gestern', 'avg', '2w', '', '', '', '', 'Haushalt', '#aa0', 'column', ['', ''], '1h') }}
                              </div>
                            </div>
                          </div>
                          
                          <div class="block" style="width: 100%;">
                            <div class="set-2" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
                              <div data-role="collapsible" data-collapsed="false">
                                <h3>Kosten pro Tag (EUR)</h3>
                                {{ plot.period('pkost', ['zaehler1.kosten.gestern', 'zaehler1.kosten.gestern.weekly_avg'], 'max', '2w', '', '', '', '', ['Haushalt', 'Wochendurchschnitt'], ['#aa0', '#a6f829'], ['column', 'line'], ['', ''], '1h') }}
                              </div>
                            </div>
                          </div>
                          Angehängte Dateien

                          Kommentar


                            #28
                            Hallo
                            Ich hätte eine Frage für diese Visu um den Stromverbrauch anzuzeigen braucht man da einen Schaltaktor mit Stromzähler oder was wird da noch benötigt?

                            Danke

                            Kommentar


                              #29
                              Hey,

                              am einfachsten geht es mit einem eHZ, da dieser bereits über eine IR-Schnittstelle die benötigten Daten ausliefert.

                              Zur Anbindung an die Visu brauchst Du n Lesekopf (z.B. volkszaehler.org - wiki - USB-IR-Schreib-Lesekopf) und dazu n Pi oder einen anderen PC der die Daten ausliest und in deine Smarthome.py Items überträgt.

                              Alternativ gibt es wohl auch fertige KNX-Geräte die Du über die ETS parametrieren kannst.


                              Letzte Lösung ist allerdings teurer als die Selbstbau-Lösung. Dafür vermutlich auch ggfs. einfacher - wobei es hier im Forum ja schon etliche Hints dazu gibt wie man das ganze realisieren kann.


                              Einen extra Schaltaktor brauchst Du nicht.



                              Grüße,

                              Lars

                              Kommentar


                                #30
                                Zitat von JuMi2006 Beitrag anzeigen
                                Nein hab ich nicht, ich bekomme auch keine Plots da raus.

                                Also ich hab mir das noch mal angesehen und vermute stark das es an einem Versionsunterschied zwischen unserem und "hhhc" Smarthome.py liegt.

                                Tendenziell gibt es unterschiede im "sqlite" Plugin und zwar was das Parsing von Items mit dem "count" (die 100 am Ende) betrifft.

                                Ich habe in der "plot.html" den Count-Parameter mal aus dem "implode" rausgenommen und die Fehler im Log sind weg. Leider werden aber immer noch keine Charts ausgespielt, aber es sieht danach aus als wenn das JavaScript zum Initialisieren nicht ausgeführt wird - zumindest wir nicht mal ein "console.log" ausgegeben - hier bin ich aber zur Zeit noch ratlos was das sein kann.

                                Trotzdem mal meine angepasste "plot.html" - vielleicht hat ja jemand eine Idee was mit dem Javascript noch ist, das die Highcharts nicht initialisiert werden.

                                HTML-Code:
                                /**
                                * A simple widget for plotting stacked charts
                                *
                                * @param unique id for this widget
                                * @param series of item/s. More item/s in array form: [ item1 , item2 ]
                                * @param the mode: 'avg', 'sum', 'min', 'max'
                                * @param the minimum time (x-axis): '1h', '2h'... (duration-format)
                                * @param the maximum time (x-axis): '', '1h', '2h'... (duration-format, default: now)
                                * @param the minimum y-axis (optional)
                                * @param the maximum y-axis (optional)
                                * @param label/s for each series (optional)
                                * @param stacklabel if the aggregated values should be shown, true/false (optional, default true)
                                * @param color/s for each series e. g. '#f00' for red (optional, default: sutiable for design)
                                * @param type/s for each series (exposure): 'line', 'stair', 'spline', 'area', 'areaspline', 'column' (optional, default 'line')
                                * @param count number of data points to load, default 100
                                * @param correctdate whether to delete last data point (if stats from previous
                                *
                                * @see misc/fundamentals#Array-Form
                                * @see misc/fundamentals#Duration-Format
                                */
                                {% macro stacked(id, gad, mode, tmin, tmax, ymin, ymax, label, stacklabels, color, exposure, count, correctdate) %}
                                
                                	<div id="{{ uid(page, id) }}" data-widget="plot.stacked" data-item="{{ implode(gad, [mode|default('avg'), tmin|default('1h'), tmax|default('now')]) }}"
                                		{% 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>
                                
                                {% endmacro %}

                                Grüße,

                                Lars

                                Kommentar

                                Lädt...
                                X