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

  • JuMi2006
    antwortet
    Ich bin auch auf develop, aber momentan ist abends nicht mehr als ne halbe Stunde drin um mal auf den Code zu schauen
    Von *.js und *.html verstehe ich aber so richtig wenig .

    Einen Kommentar schreiben:


  • Shai
    antwortet
    Laut einem Post weiter vorne ist er auf dem Develop Stand. - Deswegen auch meine Vermutung mit dem Versionsunterschied.

    Das JS hab ich leider bisher noch nicht ans laufen bekommen, irgendwo überseh ich wohl ne Stelle...

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Ich versuche da auch gerade durchzusteigen, was mir nicht klar ist:

    An welcher Stelle in der widget.js werden die Daten abgefragt?

    @hhhc: Welche Version von sh.py benutzt Du?

    Grüße

    Einen Kommentar schreiben:


  • Shai
    antwortet
    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

    Einen Kommentar schreiben:


  • Shai
    antwortet
    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

    Einen Kommentar schreiben:


  • StoRmtec
    antwortet
    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

    Einen Kommentar schreiben:


  • Mike01
    antwortet
    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

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Nein hab ich nicht, ich bekomme auch keine Plots da raus.

    Einen Kommentar schreiben:


  • Shai
    antwortet
    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

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    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).

    Einen Kommentar schreiben:


  • Shai
    antwortet
    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

    Einen Kommentar schreiben:


  • hhhc
    antwortet
    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')

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    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"

    Einen Kommentar schreiben:


  • hhhc
    antwortet
    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...

    Einen Kommentar schreiben:


  • hhhc
    antwortet
    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...

    Einen Kommentar schreiben:

Lädt...
X