SmartVISU Widget für Plots mit DbLog aus FHEM

Begonnen von ToGe88, 28 Oktober 2015, 13:02:47

Vorheriges Thema - Nächstes Thema

eldi0s

Zitat von: Joker am 06 November 2016, 10:08:22
Hi,

ich habe leider nach wie vor Skalierungsprobleme mit den Plots, nicht immer, aber doch sehr häufig. Meistens auf dem iPhone, aber auch ab und an lokal am Rechner.
Das Problem ist dann, dass der Plot quasi aus seiner Box herausläuft. Hier ein Screenshot:

Falsch skaliert

Auf dem iPhone muss ich dann das Telefon einmal ins Querformat drehen und wieder zurück, dann stimmt es und sieht so aus:

Richtig skaliert

Am Rechner lässt es sich durch einen Reload der Seite lösen.

Eingebettet ist mein Plot so:

    <div class="block">
    <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>Temperaturverlauf</h3>
    {{ tplDbPlot.heatingPlot('dbplot_living', 'Wohnzimmer')}}
    </div>
    </div>
    </div>


Und das Template sieht so aus:
{% macro heatingPlot(id, room, height, colorMeasured, colorDesired, colorValve) %}
{% import "widget_dbplot.html" as dbPlot %}
{{ dbPlot.linePlot('id'~id~'heatingPlot', '', '1440', '300', '', '',
[
{'update_trigger_gad': room~'_RTR_Clima.valve',         'device': room~'.Heizkoerperthermostat.Clima', 'reading': 'ValvePosition', 'config': {'name': 'Ventil',           'unit':'%', 'yAxis':1, 'type': 'area',   'color': colorValve|default('#828282') }},
{'update_trigger_gad': room~'_RTR_Clima.desired-temp' , 'device': room~'.Wandthermostat.Climate',      'reading': 'desired-temp',  'config': {'name': 'Soll Temp.',       'unit':'°',            'type': 'line',   'color': colorDesired|default('rgba(201,134,44,1)') }},
{'update_trigger_gad': room~'_RTR_Clima.measured-temp', 'device': room~'.Wandthermostat.Climate',      'reading': 'measured-temp', 'config': {'name': 'Ist Temp.',        'unit':'°',            'type': 'spline', 'color': colorMeasured|default('#FFC825') }}
],
[
{title: {text: '',}, labels: {format: '{value} °',}, opposite: true, max: 30, min: 0},
{title: {text: '',}, labels: {format: '{value} %',}, max: 100, min: 0}
],
{ align: 'right', verticalAlign: 'top', layout: 'horizontal', x: -35 },
height|default(300)) }}
{% endmacro %}


Jemand eine Idee??

Hallo Zusammen,

bin heute auf diesen Thread gestoßen. Habe exakt das selbe Problem wie Joker.
Egal was ich probiere, beim ersten Aufruf der Page (Raspi,iPhone,Windows PC) skaliert
er mir die Plotlinien aus dem Block heraus. Ein Reload der Page behebt das Problem.

Hat echt niemand eine Idee dazu? Habe ien KNX System mit fronthem. Hier mein Code:

<div class="block">
<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>Plot</h3>
{% import "widget_dbplot.html" as dbPlot %}
{% set plotOptions =
[
{
        'update_trigger_gad': 'WOG_Komfort_Temp_Trig',
        'device': 'WOG.Soll.Temp',
        'reading': 'state',
        'config': {
            'name': 'Soll Temp.',
            'type': 'spline'
}
    },
    {
        'update_trigger_gad': 'WOG_Ist_Temp_Trig',
        'device': 'WOG.Ist.Temp',
        'reading': 'state',
        'config': {
            'name': 'Ist Temp.',
            'type': 'spline'
        }
    }
]%}
{{ dbPlot.linePlot('HeatingPlot', 'Temperatures', '720', '', 'Temperaturen', 'Grad', plotOptions, '', '', 230) }}
</div>

</div>
</div>

Hanky

Hallo,

hatte auch das Problem mit den Plots die nicht in ihrem Bereich bleiben wollten. Hatte dann in den Highcharts Bug reports was dazu gelesen (finde den Eintrag leider nicht mehr). Problem ist wohl dass der Plot aufbau parallel zum restlichen Seitenaufbau läuft, und der Plot beim ersten Laden schon vor der Seite fertig ist. Die Seite gibt dann wohl nicht ihre "Abmessungen" korrekt an den Plot weiter.

Da ich keine java Script Kenntnisse habe, habe ich mir mit einem workaround im php Skript geholfen. Hier habe ich einfach ein Sleep von einer Sekunde eingebaut. Damit bauen die Plots zwar minimal verzögert auf, skalieren dann aber richtig.

Eingebaut habe ich das sleep an folgender Stelle im widget_dbplot.php (Bei mir Zeile 122):


// Close DB Connection
unset($db);
sleep(1); //<-- Hier Sleep eingefügt, damit Plots erst nach der Seite aufbauen.

// Return the array and encode to JSON
echo json_encode($returnArray);



evtl. kann ja jemand von den Profis mit den Informationen eine schönere Lösung draus machen.

Grüße

Hanky

dev0

Welche smartVISU/Highcharts Version verwendest Du?

eldi0s

Hallo,

danke erstmal für die Info Hanky. Werde das heute Abend mal ausprobieren ;-) Die Sache hatte mir die ganze Motivation
am weiterarbeiten genommen.

@dev0
Ich verwende die Version welche bei smartvisu 2.8 mit dabei war. (Highcharts JS v4.2.6)

Grüße
eldi

Hanky

#109
Hallo,

bei mir ist es Highcharts JS v4.2.7 (2016-09-21) wobei ich mich gerade nicht erinnern kann das manuell aktualisiert zu haben...

Edit: Ist doch 4.2.6. Hatte Testweise mal 4.2.7 drüber kopiert. Lief dann aber leider nicht. Danach habe ich wieder 4.2.6 in den Ordner kopiert. Alles was bei 4.2.7 dabei war, was bei 4.2.6 noch nicht vorhanden war existiert noch von 4.2.7... Muss ich noch mal sauber aufräumen.

Grüße

Hanky

eldi0s

Danke Hanky  :) ;)

Plot wird jetzt einwandfrei dargestellt und die leichte Zeitverzögerung
find ich auch nicht schlimm. Im Gegenteil, sieht sogar echt gut aus wenn
der Plot sich "animiert" von links nach Rechts aufbaut während der Block
schon da ist.

Danke nochmal  8)

Grüße,
eldi

Joker

Bei mir ist es mit der Änderung auch gelöst.

Irgendwelche Nachteile (z.B. Blockierungen in fhem etc) hat das nicht oder?

ichichich

Auch bei mir hat es auf allen Endgeräten (Handy, Tab) geholfen.

Wollte schon smartVisu ersetzen!

Grüße Uwe

Thargor

Hallo zusammen,

ich habe jetzt auch mal versucht das Widget einzubinden. Nach dem installieren der sqlite extensions und der Erweiterung des Basedirs komme ich nun immerhin schonmal dazu, dass Smartvisu mir anzeigt: [dbPlot.widget]: SQLSTATE[HY000]: General error: 14 unable to open database file
Wenn ich die Datenbankdatei kopiere (mit den gleichen Rechte wie die Orginaldate) und mit dem Widget auf die Kopie zugreife, dann klappt der Zugriff. Stelle ich wieder zurück auf die Datei auf die auch FHEM zugreift, bekomme ich die obige Meldung.
Hat mir jemand eine Idee woran das liegen kann? Zugriffskonflikte? Zuviele geöffnete Datenbankverbindungen (aber eigentlich greift ja nur FHEM noch darauf zu).

Vielen Dank!

Fistandantilus

Hi,

ich habe gerade das Widget getestet - super, vielen Dank für die Arbeit. Ein Problem habe ich allerdings und hoffe Ihr könnt helfen.
Ich habe 2 Charts. Jedes für sich funktioniert problemlos. Wenn ich beide zusammen auf einer Seite anzeigen möchte, werden im Block des ersten Charts die Werte vom 2. angezeigt und das Zweite fehlt ganz. Habt Ihr eine Idee? Hier der 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>Stromzähler</h3>
            {% import "widget_dbplot.html" as dbPlot %}
           

            {% set plotOptions =
             [
              {
                'update_trigger_gad': 'HourPower',
                'device': 'HourPower',
                'reading': 'state',
                'config': {
                  'name': 'Verbrauch',
                  'type': 'spline'
                }
              }
            ]%}
            {{ dbPlot.linePlot('Stromzähler', 'Verbrauch', '1440', '30', 'Stromverbrauch/Stunde', 'W', plotOptions, '', '', 300) }}
      </div>
    </div>
  </div>

  <div class="preblock">
  </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>Stromzähler2</h3>
            {% import "widget_dbplot.html" as dbPlot2 %}
            {% set plotOptions2 =
             [
              {
                'update_trigger_gad': 'DailyPower',
                'device': 'DailyPower',
                'reading': 'state',
                'config': {
                  'name': 'Verbrauch2',
                  'type': 'spline'
                }
              }
            ]%}
            {{ dbPlot2.linePlot('Stromzähler', 'Verbrauch2', '10000', '30', 'Stromverbrauch/Tag', 'W', plotOptions2, '', '', 300) }}
      </div>
    </div>
  </div>


VG
F.
Raspberry Pi 3 + FHEM + Smartvisu/Fronthem, CUL, HMLAN, Enocean USB300, Eltako (FAM14, FSB14, FSR,FTS14EM,Multisensor,...) - MySQL DB + 2.Raspberry für Heizungsregelung und 3. Raspberry als Alarmanlage

herrmannj

Die id müssen unterschiedlich sein

Vg
Jörg

Fistandantilus

Oh Mann, da hab ich schon überall eine 2 davor geschrieben und das hab ich übersehen  ::) War wohl schon zu spät gestern. Auf jeden Fall danke dafür, jetzt funktioniert es bestens!
Raspberry Pi 3 + FHEM + Smartvisu/Fronthem, CUL, HMLAN, Enocean USB300, Eltako (FAM14, FSB14, FSR,FTS14EM,Multisensor,...) - MySQL DB + 2.Raspberry für Heizungsregelung und 3. Raspberry als Alarmanlage

avolkmer

Hallo,

gibt es eine Möglichkeit die Werte aus dem dbLog für die Anzeige z.B. durch 100 zu rechnen?

z.B. Datenbank-Wert in der Log Tabelle 30 - Wert für den Chart 0,3

Vielen Dank für die Hilfe!

Alex

Jessyfoosy

Ich würde mich gerne hier anschließen auch wenn das Thema schon älter ist.

Ich bekomme einfach nix angezeigt. Ich benutze SmartVisu 2.8. Mein DBLog funktioniert mit sqlite mit dem Aufruf sqlite3 /opt/fhem/fhem.de

Das Plot habe ich wie folgt eingebunden:

{% import "widget_dbplot.html" as dbPlot %}
{% set plotOptions =
[
{
'update_trigger_gad': 'Temperatur.sw',
'device': 'Temperatur',
'reading': 'state',
'config': {
'name': 'Temperature',
'type': 'spline'
}
}
]%}
{{ dbPlot.linePlot('Aussen_Temp_plot', 'Temperatur', '', '', 'Temperatur', '°C', '', '', '', '') }}


Meine config:
// DB Type, use 'sqlite' or 'mysql'
$dbType = 'sqlite';

//SQLite
$dbPath = '/opt/fhem/fhem.db';


folgende Pakete sind Installiert:
php-common
php-mbstring
php-sqlite3
php7.0
php7.0-cli
php7.0-common
php7.0-json
php7.0-mbstring
php7.0-opcache
php7.0-readline
php7.0-sqlite3


Das Reading in der DBLog:
Zitat2018-02-08 10:55:29|Temperatur|KNX|state: 3.00 &deg;C|state|3.00|&deg;C

Die Datein wurde natürlich auch wie beschrieben kopiert. Im Anhang noch das GAD Temperatur.sw und nochmal eine Fehlermeldung in der Firefox Console.

Folgende Dinge habe ich schon probiert:
Reading mit "Temperatur:state"
"sqlite" in der config und widget_dbplot.php durch "sqlite3" ersetzt

Hoffe mir kann jemand Helfen

buchner51

Hallo,

ich hab das selbe Problem und komme nicht weiter.
Raspberry pi 3+
KNX mit TUL, FHEM mit SMARTVISU 2.9