SmartVISU Database Plot Widget
(http://i.imgur.com/0lzjG1F.png)
Da es ja bis jetzt keine Möglichkeit gab in SmartVISU direkt Plots aus FHEM darzustellen habe ich mich mal daran gemacht ein Widget dafür zu programmieren. Gelöst habe ich es über eine PHP Schnittstelle welche die DbLog Daten direkt aus der mySQL oder SQLite Datenbank ausliest und dann an das Widget übergibt. Damit das ganze nicht zu statisch wird, habe ich automatische Updates der Plots mit eingebaut welche über GADs getriggert werden. Die Plots basieren auf highchart.js, welches ja in SmartVISU schon enthalten ist um die schöne Optik beizubehalten. Die Plots können über das Widget per Konfigurations Arrays sehr umfangreich angepasst und individualisiert werden.
Ich würde mich freuen wenn sich vielleicht ein paar Leute finden die das Widget ausprobieren und evtl. Tipps und Anregungen zu weiteren Verbesserungen haben. Für die Zukunft habe ich noch geplant das Widget zu erweitern um auch andere Plot Typen zu integrieren. Bei Fragen, Bugs oder Problemen würde ich mich natürlich auch über eine Rückmeldung freuen ;D
Hier der Link zum Widget sowie Anleitung und Beispielen zur Einrichtung: https://github.com/ToGe3688/db_plot_widget
Beste Grüße,
Tobias
Hallo Tobias,
das schaut ja schonmal gut aus. Hab mir Deinen Code mal gezogen und in SmartVISU eingebaut. Werde es mal ausführlich testen, wenn es denn mal bei mir läuft ;) .
Habe aber leider bisher noch kein Plot ans laufen bekommen.
Viele Grüße
Oliver
edit: 16:00 Uhr:
folgender Fehler tritt beim Einbinden des Widgets auf:
dbPlot Error (Initial)
[dbPlot.widget]: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''300'' at line 1
edit: 23:21 Uhr
ERFOLG: widgets funktionieren super, details dazu morgen (..)
Zitat von: revil.o am 02 November 2015, 14:32:27
Hallo Tobias,
das schaut ja schonmal gut aus. Hab mir Deinen Code mal gezogen und in SmartVISU eingebaut. Werde es mal ausführlich testen, wenn es denn mal bei mir läuft ;) .
Habe aber leider bisher noch kein Plot ans laufen bekommen.
Viele Grüße
Oliver
edit: 16:00 Uhr:
folgender Fehler tritt beim Einbinden des Widgets auf:
dbPlot Error (Initial)
[dbPlot.widget]: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''300'' at line 1
edit: 23:21 Uhr
ERFOLG: widgets funktionieren super, details dazu morgen (..)
Hi Olly,
ich habe bei GitHub gesehen das du bereits einen Fix für die Nutzung mit einer mySQL DB hast. Ich habe diesen mal direkt eingebaut! Konnte es hier leider nicht lokal testen mit MySQL. Besten Dank dafür!
Ich habe zudem nochmal das gesamte Script überarbeitet, es gab nämlich noch ein paar zusätzliche Probleme die mir erst beim Test über längere Zeit aufgefallen sind:
1. Wenn man mehrere Plots in SmartVISU angelegt hat und nach einiger Zeit die Seite gewechselt hat wurde für den Plot nur der jeweils letzte Punkt geladen und die Daten dazwischen einfach ausgelassen. Das ist jetzt gefixt und der Plot wird bei jedem Update mit den gesamten Daten versorgt.
2. Das gleiche Problem hat dafür gesorgt das wenn man über längere Zeit die Plots im Browser geöffnet hatte die Punkte immer weiter zum Plot hinzugefügt wurden. Das hat nach einiger Zeit zum Absturz des Browsers, bzw. sehr hoher Speicherauslastung geführt. Ist mit dem Fix aus 1. aber ebenfalls behoben da jetzt nurnoch die Daten genutzt werden die auch wirklich dargestellt werden.
Zusätzlich habe ich bereits Vorbereitungen getroffen um das Script so anzupassen das es in Zukunft auch Plots zwischen zwei bestimmten Zeitpunkten anzeigen kann.
Du kannst dir die neue Version ja nochmal laden und testen! Kannst auch gerne Pull-Requests bei GitHub stellen wenn dir noch etwas anderes auffällt!
Gruß,
Tobi
Der Patch für mySQL wird aber so nicht funktionieren. Diese beiden Zeilen müssen umgedreht werden:
$db->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
$db = new PDO('mysql:host=' . $host . ';' . $database, $mysql_username, $mysql_password);
Zitat von: marvin78 am 03 November 2015, 12:28:35
Der Patch für mySQL wird aber so nicht funktionieren. Diese beiden Zeilen müssen umgedreht werden:
$db->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
$db = new PDO('mysql:host=' . $host . ';' . $database, $mysql_username, $mysql_password);
Ist geändert, danke für den Hinweis!
Gruß,
Tobi
Works like a charm!!!
Na das nenne ich doch mal einen gelungenen Einstand. Vielen Dank.
/Uli
Hallo,
brauche mal Hilfe, irgendwie bin ich zu blöd :)
Copy widget_dbplot.php and widget_dbplot.html files to SmartVISU widget folder (/widgets)
Edit the widget_dbplot.php file and set your database connection settings.
Copy visu.js to the folder of your SmartVISU page (/pages/myPage) or if you already have a visu.js file just append the content to the file.
Hab ich gemacht :)
Was genau muss ich jetzt zb in meine room_sleeping.html eintragen um einen Chart zu bekommen ?
{% set plotOptions =
[
{
'update_trigger_gad': 'HeatingTemperatureTrigger',
'device': 'wz.temp',
'reading': 'measured-temp',
'config': {
'name': 'Temperature',
'type': 'spline'
}
}
]%}
{{ dbPlot.linePlot('HeatingPlot', 'Temperatures', '', '', 'Temperatures', '°C', plotOptions, '', '', 300) }}
{% endblock %}
steh irgendwie aufm schlauch ...
sorry
Steh doch alles da.
HeatingTemperatureTrigger ist der gad, der triggert, wenn es einen neuen Wert für deinen Plot gibt. wz.temp ist das Device (Devicename, so wie er auch in der DB steht). measured-temp ist das reading, welches aus der DB gelesen werden soll.
Wow! Das ist ja genial!
Sehe ich das richtig, dass das mit einer SQLite Datenbank nur funktioniert, wenn diese lokal auf dem gleichen Rechner liegt?
Ja.
Zitat von: marvin78 am 04 November 2015, 14:26:31
Steh doch alles da.
HeatingTemperatureTrigger ist der gad, der triggert, wenn es einen neuen Wert für deinen Plot gibt. wz.temp ist das Device (Devicename, so wie er auch in der DB steht). measured-temp ist das reading, welches aus der DB gelesen werden soll.
Genau! Als zusätzliche Info vielleicht noch: Device ist das Gerät wie es in FHEM heißt (also bei Internals unter NAME), Reading ist der Wert der vom Gerät ausgelesen werden soll (Also in FHEM unter Readings). Die GAD in Fronthem legst du dann optimalerweise so an das sie auf das gleiche Reading zeigt. (Konverter ist egal, es ist nur wichtig um das Update vom Plot zu triggern wenn neue Daten verfügbar sind) Ganz wichtig ist natürlich auch das DbLog in FHEM richtig eingerichtet ist, sonst wirds auch nichts mit dem Plot.
Berichte mal obs geklappt hat!
Gruß
Zitat von: Thargor am 04 November 2015, 15:03:53
Wow! Das ist ja genial!
Sehe ich das richtig, dass das mit einer SQLite Datenbank nur funktioniert, wenn diese lokal auf dem gleichen Rechner liegt?
Falls du die Datenbank auslagern willst ist MySQL dein Stichwort. :D
Sooo läuft jetzt mit externer Mysql Datenbank :)
das php5-mysql Modul hat gefehlt ...
Wunder mich nur über die Minuswerte, da muss ich nochmal schauen. Anonsten top.
PS: Kann man die Farben individualisieren ?
Am besten schaust du dir mal die highcharts-Doku an (google nach highcharts). Man kann so einiges "schöner" machen ;)
Farbe geht über den Parameter color in der config.
Zitat von: Sebastian am 04 November 2015, 15:35:55
Sooo läuft jetzt mit externer Mysql Datenbank :)
das php5-mysql Modul hat gefehlt ...
Wunder mich nur über die Minuswerte, da muss ich nochmal schauen. Anonsten top.
PS: Kann man die Farben individualisieren ?
Wegen den Minuswerten einfach bei den yAxis Options min: 0 setzen! Ansonsten wie marvin schon gesagt hat am besten mal in die highcharts api doku gucken, da kann man noch sehr sehr viel individualisieren und anpassen. Die entsprechenden Stellen in der Doku sind auf der GitHub Widget Seite verlinkt.
In dem Zusammenhang ist mir heute morgen aufgefallen, dass auf Github im Beispiel zu den Legend Optionen etwas nicht stimmt.
Edit: Wollte gerade schreiben was nicht ok ist, da isset schon gefixed und erweitert :) Super!
Sieht jemand eine Möglichkeit off/on als 0/1 zu plotten. userReading ist klar, aber das bringt mich bei bestehenden Daten nicht weiter.
Wenn du ein bisschen php kannst, ist das im php File zum Widget leicht zu lösen. Falls du etwas Javascript kannst, kannst du es im Teil für visu.js machen (da würde ich es machen).
Falls nicht, würde ich warten, bis die native Plotlösung für fronthem fertig ist. ;)
Ich hatte die Hoffnung, dass Highcharts das könnte, php ist machbar.
Zitat von: marvin78 am 05 November 2015, 07:13:44
Falls nicht, würde ich warten, bis die native Plotlösung für fronthem fertig ist. ;)
Sollte aber erstmal nur für filelog kommen, aber in einem 3/4 Jahr kann sich viel geändert haben ;)
Naja. Ich persönlich finde Plots in einem Frontend ganz nett. Mir reichen sie aber, wenn ich ehrlich bin, in meinem Backend FHEMWEB.
Falls Highcharts es kann, was ich nicht ausschließe, wirst du die Lösung in der Doku zu Highcharts finden.
Zitat von: dev0 am 04 November 2015, 16:33:05
In dem Zusammenhang ist mir heute morgen aufgefallen, dass auf Github im Beispiel zu den Legend Optionen etwas nicht stimmt.
Edit: Wollte gerade schreiben was nicht ok ist, da isset schon gefixed und erweitert :) Super!
Jup, hatte ich direkt gefixt als ich deine Post gesehen hab. ;D
Zitat von: dev0 am 05 November 2015, 06:50:55
Sieht jemand eine Möglichkeit off/on als 0/1 zu plotten. userReading ist klar, aber das bringt mich bei bestehenden Daten nicht weiter.
Im PHP Script gibt es bereits eine Stelle wo durch die ausgelesenen Werte iteriert wird, da könntest du einfach eine if abfrage einbauen alá "Wenn Value = On Set Value = 1, Wenn Value = Off Set Value = 0", sollte eigentlich mit ein paar Zeilen recht simpel zu integrieren sein. Im JS würde ich es nicht machen da dann nochmal ordentlich Ressourcen gebraucht werden wenn der Client bei jedem Update die Werte prüfen muss. Ausserdem müsstest du die Prüfung dann an zwei Stellen machen (Initialisierung und Update). Highcharts bietet so direkt keine Funktion das zu konvertieren.
Klasse Arbeit, funktioniert sehr gut!
Ich habe jetzt beobachtet, dass ich auch wenn ich die timeRange auf 1440 setze werden nur 12 Stunden angezeigt. Geht es nicht weiter oder habe ich einen falschen Wert?
Danke
Lutz
maxRows beim Widgetaufruf erhöhen oder die Datenrate der Plots verringern.
Zitat von: dev0 am 06 November 2015, 05:52:52
maxRows beim Widgetaufruf erhöhen oder die Datenrate der Plots verringern.
max Rows erhöhen bringt leider nichts! :(
Eventuell Hinweise in der Browser Console, apache.log oder php.log zu finden?
Zitat von: cruser1800 am 06 November 2015, 20:44:37
max Rows erhöhen bringt leider nichts! :(
Also bei mir ist es aufjedenfall möglich einen Zeitraum von mehr als 12 Stunden abzubilden ohne Probleme. Falls du Firefox benutzt, könntest du mal bitte den folgenden Test machen:
1. Q gedrückt halten und Rechtsklick irgendwo auf der SmartVISU Seite.
2. In der sich öffnenden Entwicklerkonsole unten ganz rechts auf Netzwerkanalyse schalten.
3. Ganz unten auf XHR klicken
4. Seite aktualisieren oder einfach auf neu laden klicken
5. Jetzt sollten nach ein paar Sekunden POST Requests an widget_dbplot.php auftauchen.
6. Einen davon anklicken und dann auf Parameter wechseln.
7. Dort müssten jetzt jeweils timeRangeStart und timeRangeEnd als UNIX Timestamp definiert sein. (Diese einmal umrechnen, geht auf http://www.unixtimestamp.com)
8. Falls diese einem Zeitraum von 24 Stunden entsprechen ist zumindest die Anfrage an das Script i.O., ansonsten passt was mit der angegebenen Timerange in der Widget Definition nicht.
9. Einmal oben auf Antwort klicken und dann bei dem auszulesenden Wert Data ausklappen.
10. Hier wäre jetzt einmal die Anzahl der Datensätze interessant sowie der Timestamp vom ersten und letzten Datensatz. (Der Timestamp muss hier vor dem umwandeln noch durch 1000 geteilt werden, also einfach die letzten 3 Nullstellen entfernen.)
Und dann bitte mal hier posten was du dabei rausgefunden hast sowie die Definition wie du das Widget in deiner SmartVISU Seite anlegst.
Gruß
Hallo ToGe88
{{ dbPlot.linePlot('pingBandwithPlot', 'Temperatur / Feuchte', '1440', '', '', '', plotOptions, yAxisOptions, '', 300) }}
1446821080
Is equivalent to:
11/06/2015 @ 2:44pm (UTC)
1446907480
Is equivalent to:
11/07/2015 @ 2:44pm (UTC)
Also 24h werden abgefragt!
In Date 299 Arrays
Array0
1446861833
Is equivalent to:
11/07/2015 @ 2:03am (UTC)
Array 299
1446907385
Is equivalent to:
11/07/2015 @ 2:43pm (UTC)
Hiier ist der Abstand nur 40 Minuten!
Vielleicht findest du mein Problem!
Danke
Zitat von: cruser1800 am 07 November 2015, 15:57:31
Hallo ToGe88
{{ dbPlot.linePlot('pingBandwithPlot', 'Temperatur / Feuchte', '1440', '', '', '', plotOptions, yAxisOptions, '', 300) }}
1446821080
Is equivalent to:
11/06/2015 @ 2:44pm (UTC)
1446907480
Is equivalent to:
11/07/2015 @ 2:44pm (UTC)
Also 24h werden abgefragt!
In Date 299 Arrays
Array0
1446861833
Is equivalent to:
11/07/2015 @ 2:03am (UTC)
Array 299
1446907385
Is equivalent to:
11/07/2015 @ 2:43pm (UTC)
Hiier ist der Abstand nur 40 Minuten!
Vielleicht findest du mein Problem!
Danke
Also bei der Widget Definition fehlt aufjedenfall die Angabe zu maxRows deswegen holt er sich standartmäßig nur 300 Einträge. Probiere es mal so:
{{ dbPlot.linePlot('pingBandwithPlot', 'Temperatur / Feuchte', 1440, 1000, '', '', plotOptions, yAxisOptions, '', 300) }}
Ggfs. musst du die 1000 noch weiter nach oben schrauben!
Gruß
Danke klappt! :)
Hallo,
bin leider in Sachen php ein Anfänger, habe soweit alles am Laufen in fhem (Datenbank & SVG Plots) aber komme bei smartvisu nicht weiter
Einerseits das Editieren der db Variablen, soll ich die im widget file einfach daneben editieren oder einen php-tag neu damit machen?
Vielleicht könnte mir da jemand einen Code Schnipsel posten.
Datenbank ist sqlite am selben rechner (Raspi)
Und in smartvisu habe ich die Tags drinnen, nur er macht genau nichts.
Gad legt er in fhem auch nicht an.
Bin für jede Hilfe dankbar
lg
Zitat von: palermojammer am 09 November 2015, 11:50:04
Hallo,
bin leider in Sachen php ein Anfänger, habe soweit alles am Laufen in fhem (Datenbank & SVG Plots) aber komme bei smartvisu nicht weiter
Einerseits das Editieren der db Variablen, soll ich die im widget file einfach daneben editieren oder einen php-tag neu damit machen?
Vielleicht könnte mir da jemand einen Code Schnipsel posten.
Datenbank ist sqlite am selben rechner (Raspi)
Und in smartvisu habe ich die Tags drinnen, nur er macht genau nichts.
Gad legt er in fhem auch nicht an.
Bin für jede Hilfe dankbar
lg
Also wenn du die Standart Konfiguration von DbLog mit sqlite in FHEM benutzt solltest du eigentlich an der PHP Datei und den Variablen für die Datenbank nichts anpassen müssen. Kannst du mal posten wie du das Widget in SmartVISU anlegst? Evtl. fehlt auch noch die SQLite3 Erweiterung für PHP? (sudo apt-get install php5-sqlite)
Gruß
Hallo ToGe88,
ich habe gerade Dein Widget in Smartvisu getestet und bin begeistert! Vielen, vielen Dank von meiner Seite für die Mühe und insbesondere die ausführliche Doku, die es wirklich einfach macht damit klar zu kommen und erste Erfolge zu sehen. Ich habe noch eine Frage und eine Anregung. Mein FHEM und SV läuft auf einem Raspberry Pi 2, aktuell nutze ich DBLog mit MySQL. Leider ist das Laden der Charts bei mir extrem langsam auch wenn nur wenige Werte aus der DB abgefragt werden. Daher stelle ich die Frage in den Raum, ob das bei anderen ebenso ist oder was man evtl. noch tun kann um die Abfragen zu beschleunigen. Ist es evtl. ratsam auf MySQL zu verzichten und stattdessen SQLite Datenbanken einzurichten?
Meine Erfahrung zeigt, dass Plots unter FHEM, die auf einem FileLog statt DBLog basieren deutlich schneller sind. Wäre es evtl. noch eine Überlegung wert mal drüber nachzudenken, FileLog als Datenquelle ebenfalls noch in das Widget zu integrieren? Mit der Filelog get-Funktion sollte es meiner Meinung nach verhältnismäßig leicht sein, die Daten aus den Files abzufragen. Diese müssten dann nur passend in das JSON Format gewandelt werden und der restliche Code im Widget für die Weiterverarbeitung und Darstellung könnte dann gleich bleiben. Wie siehst Du das ToGe88, das müsste doch eigentlich so funktionieren, oder? Wenn ich demnächst mal wieder mehr Zeit habe, würde ich das mal versuchen, aber in tue mich derzeit bei PHP noch ein bißchen schwer...
Viele Grüße, Bruece-lee
Hallo, das Widget funktioniert echt gut, allerdings ich habe Probleme mit der Breite von dem Plot. Wenn ich das im Chrome öffne, das sieht das so aus wie in dem Screenshot. Wenn ich dann nochmal einen Refresh mit str+r mache, dann passt die Breite. Auf einem iPad passt die Breite mit dem Safari auch nicht.
Im Firefox passt es gleich beim ersten Laden der Seite.
Wenn es nach einem Reload funktioniert, dann könnte es auch mit dem Caching von SV zu tun haben -> Pagecache in SV ausschalten und <smartvisu_root>/temp löschen.
Wenn das nicht hilft, könnte man vermuten, dass es an modifierten css Einstellungen liegt. Untersuch die Seite doch mal mit Firebug o.ä. Tools. Vielleicht findest Du so etwas heraus...
Ich bin scheinbar auch zu blöd :o
- Ich habe gemäß Anleitung die Dateien in die angegebenen Ordner kopiert.
- In der php-Datei habe ich die Zugangsdaten für meine mysql-Datenbank eingetragen und den Datenbanktyp auf mysql gesetzt
- Ich habe den Beispielplot in eine Smartvisu Seite eingefügt
Leider passiert nichts, es wird kein Plot angezeigt. In der GAD-Konfiguration von fronthem tauchen die GADs des Plots auch nicht auf.
Apache und fhem habe ich schon neugestartet ohne Veränderung.
Kann ich irgendwo Fehlermeldungen in logs sehen?
Ich hänge heute Abend noch meine Dateien an, habe da gerade keinen Zugriff drauf.
Gruß,
Thorsten
Wie angekündigt hier meine Konfiguration:
Unter /var/www/smartvisu/widgets liegen folgende Dateien:
widget_dbplot.html und widget_dbplot.php
Das Widget habe ich so eingebunden:
{% set plotOptions =
[
{
'update_trigger_gad': 'updateOutsidePlot',
'device': 'therme',
'reading': 'ch_Toutside',
'config': {
'name': 'Temperatur',
'type': 'spline'
}
}
]%}
{{ dbPlot.linePlot('OutsideTempPlot', 'Außentemperatur', '', '', 'Temperatur', '°C', plotOptions, '', '', 300) }}
Aber irgendwie wird nichts angezeigt...
Zitat von: thoweiss am 18 November 2015, 09:39:11
Kann ich irgendwo Fehlermeldungen in logs sehen?
Wurde schon weiter geschrieben: http://forum.fhem.de/index.php/topic,43134.msg355692.html#msg355692
Die room_heating.html ist mit einer Größe von 0 Byte nicht sehr informativ ;)
*EDITH*
Ich habe meine room.html noch einmal angehängr.
Gnarf - danke für den Tipp.
Ich schaue mir das zuhause einmal an.
Gruß,
Thorsten
Also ich habe das jetzt nochmal mit "Element untersuchen" mit der Netzwerkanalyse geprüft.
Bei mir passiert leider überhaupt nichts - in der Konsole gibt es keinerlei Datenverkehr zur php-Datei.
Muss ich noch irgendwelche rechte oder Module für den Apache setzen oder installieren?
Gruß,
Thorsten
Hallo,
ich habe es mal kurz überflogen. Hast du das Widget mit dem Befehl {% import "widget_xxx.html" as xxx %} irgendwo importiert?
Stimmt,
das fehlte scheinbar noch.
Ich habe die html jetzt so aufgebaut:
/**
* -----------------------------------------------------------------------------
* @package smartVISU
* @author Martin Gleiß
* @copyright 2012
* @license GPL [http://www.gnu.de]
* -----------------------------------------------------------------------------
*/
{% extends "rooms.html" %}
{% import "widget_dbplot.html" as dbplot %}
{% set plotOptions =
[
{
'update_trigger_gad': 'HeatingTemperatureTrigger',
'device': 'therme',
'reading': 'ch_Toutside',
'config': {
'name': 'Temperature',
'type': 'spline'
}
}
]%}
{% block content %}
{{ dbPlot.linePlot('plot_1', 'Außentemperatur', '', '', 'Außentemperatur', '°C', plotOptions, '', '', 300) }}
{% endblock %}
Leider ohne Erfolg...
Beim laden der Seite tut sich immer noch nichts.
In der Konsole sehe ich auch keine Kommunikation mit der PHP-Datei.
dbplot != dbPlot
EDIT:
Jetzt läuft alles - allerdings lag es nicht allleine an der falschen Schreibweise...
Meine widget_dbplot.php war nicht vollständig, scheinbar ist beim Kopieren auf den Server etwas schiefgegangen.
Meine Datei endete in Zeile 124.
Nachdem ich die Datei diesmal komplett kopiert habe und die Zugangsdaten für mysql neu eingetragen habe läuft jetzt alles :-)
Komisch - kaum mach man etwas richtig funktioniert es auch ;D
Danke für eure Hilfe - jetzt kann ich mit den plots spielen.
Gruß,
Thorsten
Oh mann :-[
Da hatte ich wohl Tomaten auf den Augen!
Werde das zuhause gleich testen und hier Rückmeldung dazu geben.
Danke und gruß,
Thorsten
Bravo!
Es fehlt vielleicht noch ein Hinweis für den Import.
Bin Anfänger und hatte das nicht in meiner smartvisu html Datei eingefügt.
{% import "widget_dbplot.html" as dbplot %}
Noch eine Frage:
Wird der Plot automatisch neu gezeichnet, wenn ein neuer Wert vorhanden ist, oder erst, wenn ich die Seite neu lade?
Gruß
Eddie
Der Plot wird neu gezeichnet wenn ein Event der als Trigger definierten GAD eintrifft.
Dazu müssen aber im fronthem Editor die Leserechte der GAD für das entsprechende Endgerät aktiviert werden.
Gruß,
Thorsten
Hallo zusammen,
Ich komme momentan nicht weiter mit dem Plot.
- widget_dbplot.html und widget_dbplot.php liegen im Verzeichnis /smartVISU/widgets
- visu.js in meinen pages
- DBLog in Fhem ist mit sqlite eingerichtet und loggt in die Datenbank (anbei Screenshot)
- dbplot ist wie folgt eingebunden:
{% import "widget_dbplot.html" as dbPlot %}
<div class="block2">
<div class="ui-bar-b">
Temperaturverlauf
</div>
<div class="ui-fixed ui-body-a">
{% set plotOptions =
[
{
'update_trigger_gad': 'Multisensor_Schlafzimmer_temp',
'device': 'Multisensor_Schlafzimmer',
'reading': 'temperature',
'config': {
'name': 'Temperature',
'type': 'spline'
}
}
]
%}
{{ dbPlot.linePlot('TempPlot', 'temperature', '', '', 'temperature', '°C', plotOptions, '', '', 300) }}
</div>
</div>
- gad ist im fronthem angelegt
Leider wird in smartVisu nichts angezeigt.
In der Konsole bekomme ich für POST widget_dbplot.php : 500 Internal Server Error
Unter Antwort steht: SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data
An welcher Stelle könnte es hängen?
vg
Florian
Der Aufruf sieht richtig aus, die plotOptions auch.
Sind die widget_dbplot.* Dateien im smartvisu/widget Ordner OK?
Die Dateien sind vollständig. Gerade nochmal überprüft.
Mir ist aufgefallen, dass in meiner Datenbank bei den Zwave-Sensoren
unter Reading die Einheit "C" mitgeloggt wird.Könnte das Probleme verursachen?
Nee, das wird es auch nicht sein, Einheiten werden ignoriert.
Bei der Fehlermeldung hatte ich zuerst auf einen Typo in den plotOptions getippt, aber die sehen mMn korrekt aus.
Zitat von: FlorianZ am 01 Dezember 2015, 13:00:37
In der Konsole bekomme ich für POST widget_dbplot.php : 500 Internal Server Error
Ist im webserver log vielleicht mehr zu sehen? php logging hoch drehen. Schau dazu mal in die php.ini.
Hier ein Teil des Logs des Webservers:
2015-11-30 12:23:44: (mod_fastcgi.c.2673) FastCGI-stderr: #0 /var/www/smartVISU/widgets/widget_dbplot.php(80): PDO->__construct('sqlite:/opt/fhe...')
2015-11-30 12:23:44: (mod_fastcgi.c.2673) FastCGI-stderr: #1 {main}
2015-11-30 12:23:44: (mod_fastcgi.c.2673) FastCGI-stderr: thrown in /var/www/smartVISU/widgets/widget_dbplot.php on line 80
2015-11-30 12:23:47: (mod_fastcgi.c.2673) FastCGI-stderr: PHP Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in /var/www/smartVISU/widgets/widget_dbplot.php:80
2015-11-30 12:23:47: (mod_fastcgi.c.2673) FastCGI-stderr: Stack trace:
2015-11-30 12:23:47: (mod_fastcgi.c.2673) FastCGI-stderr: #0 /var/www/smartVISU/widgets/widget_dbplot.php(80): PDO->__construct('sqlite:/opt/fhe...')
2015-11-30 12:23:47: (mod_fastcgi.c.2673) FastCGI-stderr: #1 {main}
2015-11-30 12:23:47: (mod_fastcgi.c.2673) FastCGI-stderr: thrown in /var/www/smartVISU/widgets/widget_dbplot.php on line 80
2015-11-30 12:23:47: (mod_fastcgi.c.2673) FastCGI-stderr: PHP Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in /var/www/smartVISU/widgets/widget_dbplot.php:80
2015-11-30 12:23:47: (mod_fastcgi.c.2673) FastCGI-stderr: Stack trace:
2015-11-30 12:23:47: (mod_fastcgi.c.2673) FastCGI-stderr: #0 /var/www/smartVISU/widgets/widget_dbplot.php(80): PDO->__construct('sqlite:/opt/fhe...')
2015-11-30 12:23:47: (mod_fastcgi.c.2673) FastCGI-stderr: #1 {main}
2015-11-30 12:23:47: (mod_fastcgi.c.2673) FastCGI-stderr: thrown in /var/www/smartVISU/widgets/widget_dbplot.php on line 80
2015-11-30 12:24:24: (mod_fastcgi.c.2673) FastCGI-stderr: PHP Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in /var/www/smartVISU/widgets/widget_dbplot.php:80
2015-11-30 12:24:24: (mod_fastcgi.c.2673) FastCGI-stderr: Stack trace:
2015-11-30 12:24:24: (mod_fastcgi.c.2673) FastCGI-stderr: #0 /var/www/smartVISU/widgets/widget_dbplot.php(80): PDO->__construct('sqlite:/opt/fhe...')
2015-11-30 12:24:24: (mod_fastcgi.c.2673) FastCGI-stderr: #1 {main}
2015-11-30 12:24:24: (mod_fastcgi.c.2673) FastCGI-stderr: thrown in /var/www/smartVISU/widgets/widget_dbplot.php on line 80
2015-11-30 12:24:58: (mod_fastcgi.c.2673) FastCGI-stderr: PHP Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in /var/www/smartVISU/widgets/widget_dbplot.php:80
2015-11-30 12:24:58: (mod_fastcgi.c.2673) FastCGI-stderr: Stack trace:
2015-11-30 12:24:58: (mod_fastcgi.c.2673) FastCGI-stderr: #0 /var/www/smartVISU/widgets/widget_dbplot.php(80): PDO->__construct('sqlite:/opt/fhe...')
2015-11-30 12:24:58: (mod_fastcgi.c.2673) FastCGI-stderr: #1 {main}
2015-11-30 12:24:58: (mod_fastcgi.c.2673) FastCGI-stderr: thrown in /var/www/smartVISU/widgets/widget_dbplot.php on line 80
2015-11-30 12:24:58: (mod_fastcgi.c.2673) FastCGI-stderr: PHP Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in /var/www/smartVISU/widgets/widget_dbplot.php:80
Ich kenne sqlite nicht, aber ich denke dir fehlt die Anbindung. php-sqlite hast du installiert? Sonst musst du im Netz mal nach den Fehlermeldungen suchen.
Super!!
Das war der richtige Tip.
Mir hat php5-sqlite gefehlt.
Vielen Dank
vg
Florian
funktioniert wunderbar. danke! macht gleich was her am tablet.
Den angezeigten Zeitraum steuere ich derzeit ausschließlich über die eingelesenen Werte oder?
README.md:
* @param timeRange timerange that will be displayed in the chart | default: 60
* @param maxRows max row count that will be selected from the database | default: 300
Der Zeitraum wird über timeRange gesteuert, es müssen natürlich genug Daten eingelesen werden können (maxRows).
Na da habe ich den Wald vor lauter Bäumen nciht gesehen ;)
Aber gleich über etwas anderes gestolpert:
Hier bekomme ich immer den Fehler 18 von highcharts
{% import "widget_dbplot.html" as dbPlot %}
{% set plotOptions = [
{
'update_trigger_gad': 'trigger.plot.thermostat.heizung.wohnzimmer',
'device': 'thermostat.heizung.wohnzimmer',
'reading': 'desired',
'config': {
'name': 'Desired Temp.',
'type': 'line',
'dashStyle': 'Dash'
}},
{
'update_trigger_gad': 'trigger2.plot.thermostat.heizung.wohnzimmer',
'device': 'thermostat.heizung.wohnzimmer',
'reading': 'measured',
'config': {
'name': 'Temperature',
'type': 'line'
}
},
{
'update_trigger_gad': 'trigger3.plot.thermostat.heizung.wohnzimmer',
'device': 'thermostat.heizung.wohnzimmer',
'reading': 'actuation',
'config': {
'name': 'Ventil',
'type': 'line',
'yAxis':1
}
}
]%}
{% set yAxisOptions = [
{
title: {
text: 'Response Time',
},
labels: {
format: '{value} ms',
},
opposite: true
},
{
title: {
text: 'Available Bandwidth',
},
labels: {
format: '{value} MBit',
}
}
]%}
{{ dbPlot.linePlot('HeatingPlot', 'Temperatures', '', '', '', '', plotOptions, 'yAxisOptions', '', 300) }}
Zitat von: drdownload am 13 Januar 2016, 22:12:54
Hier bekomme ich immer den Fehler 18 von highcharts
Und was bedeutet Fehlercode 18?
http://www.highcharts.com/errors/18 "This error happens when you set a series' xAxis or yAxis property to point to an axis that does not exist."
Wahrscheinlich irgendeine Kleinigkeit in meiner definition aber ich sehe sie nicht.
Wieso auch immer, das geht (finde meinen Fehler nach wie vor nicht, aber solange es jetzt geht)
{% import "widget_dbplot.html" as dbPlot %}
{% set plotOptions = [
{
'update_trigger_gad': 'trigger.plot.thermostat.heizung.badezimmer',
'device': 'thermostat.heizung.badezimmer',
'reading': 'measured',
'config': {
'name': 'Ist',
'type': 'spline',
'unit': 'C',
'dashStyle':'Solid',
'line': {
dataLabels: {
enabled: true
},
}
}
},
{
'update_trigger_gad': 'trigger.plot.thermostat.heizung.badezimmer',
'device': 'thermostat.heizung.badezimmer',
'reading': 'desired',
'config': {
'name': 'Soll',
'type': 'spline',
'unit': 'C',
'dashStyle':'ShortDash'
}
},
{
'update_trigger_gad': 'trigger.plot.thermostat.heizung.badezimmer',
'device': 'thermostat.heizung.badezimmer',
'reading': 'actuation',
'config': {
'name': 'Ventil',
'type': 'spline',
'yAxis': 1,
'unit': '%',
'dashStyle': 'Dot'
}
}
]%}
{% set yAxisOptions = [
{
title: {
text: 'Temperatur',
},
labels: {
format: '{value} C',
},
opposite: true,
min:0,
max:28
},
{
title: {
text: 'Ventilstellung',
},
labels: {
format: '{value} %',
},
min:0,
max:100
}
]%}
{{ dbPlot.linePlot('rtrPlotBadezimmer', 'Temperatur / Ventilstellung', '720', '2000', '', '', plotOptions, yAxisOptions, '', 300) }}
kann man eigentlich den wohlfühlplot aus der smartvisu demo auch irgendwie anhängen?
Zitat von: drdownload am 15 Januar 2016, 19:07:51
kann man eigentlich den wohlfühlplot aus der smartvisu demo auch irgendwie anhängen?
Wie meinst'n das ?
vg
joerg
heißt plot.temprose http://demo.smartvisu.de/index.php?page=PlotHeizung
Ja. Funktioniert sehr gut!
Nur wie ;)
Ein {{ plot.temprose('p1',
['measured.thermostat.heizung.wohnzmmer', 'office_rtr_act', 'kid_rtr_act', 'bath_rtr_act', 'floor_rtr_act'],
['desired.thermostat.heizung.wohnzimmer', 'office_rtr_set', 'kid_rtr_set', 'bath_rtr_set', 'floor_rtr_set'],
['Wohnzimmer', 'Office', 'Kid', 'Bath', 'Floor']) }}
geht ja bei der dblog Lösung nicht einfach.
Ich habe die Temprose im Einsatz, scheinbar ältere Version. Ist aber Wurscht, kannste direkt die GAD mit converter nehmen, so wei bei button etc. Die temprose geht völlig Log unabhängig.
vg
joerg
edith: also nicht ganz korrekt, ich hab diese Temp/Hum Wohlfühl-Dingens. Das System sollte aber gleich sein. Einfach "ist" und "soll" dirket von den Thermostaten ...
edith2: den da (Anhang)
Wie von herrmannj gesagt ist die Lösung unabhägig von dblog. Ich benutze dieses auch!
Deine Definition ist auch OK. Jetzt solltest du im FHEM schaun ob du die GAD's alle auch verbunden hast!
Gruß Lutz
Hallo,
Zitat von: pole23 am 15 November 2015, 10:02:20
Hallo, das Widget funktioniert echt gut, allerdings ich habe Probleme mit der Breite von dem Plot. Wenn ich das im Chrome öffne, das sieht das so aus wie in dem Screenshot. Wenn ich dann nochmal einen Refresh mit str+r mache, dann passt die Breite. Auf einem iPad passt die Breite mit dem Safari auch nicht.
Im Firefox passt es gleich beim ersten Laden der Seite.
ich habe ein ähnliches Problem: wenn der Plot beim Laden der Seite nicht sichtbar ist, wird der Plot zu breit gezeichnet und erst beim Resize der Seite korrekt skaliert. Ist er jedoch beim Laden sichtbar, dann funktioniert es korrekt:
Dieser Code funktioniert:
<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">
<h3>Heizung</h3>
{% import "widget_homematic.html" as homematic %}
{{ homematic.hmtc('DG.wz.HZ.Heizkoerperventil', 'Heizung', 'DG.wz.HZ.Heizkoerperventil_actual', 'DG.wz.HZ.Heizkoerperventil_set', 'DG.wz.HZ.Heizkoerperventil_controlmode', '', '', '', 'DG.wz.HZ.Heizkoerperventil_battery', '', 'DG.wz.HZ.Heizkoerperventil_txt', '1.0', 'DG.wz.HZ.Heizkoerperventil_valve', 'DG.wz.HZ.Heizkoerperventil_humidity') }}
</div>
<div data-role="collapsible" data-collapsed="false">
<h3>Chart</h3>
{% import "widget_dbplot.html" as dbPlot %}
{% set plotOptions =
[
{
'update_trigger_gad': 'DG.wz.HZ.Heizkoerperventil_actual',
'device': 'DG.wz.HK.Wandthermostat',
'reading': 'measured-temp',
'config': {
'name': 'Temperature',
'type': 'spline'
}
}
]%}
{{ dbPlot.linePlot('HeatingPlot', 'Temperatures', '3600', '', 'Temperatures', '°C', plotOptions, '', '', 300) }}
</div>
</div>
</div>
Dieser nicht:
<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>Heizung</h3>
{% import "widget_homematic.html" as homematic %}
{{ homematic.hmtc('DG.wz.HZ.Heizkoerperventil', 'Heizung', 'DG.wz.HZ.Heizkoerperventil_actual', 'DG.wz.HZ.Heizkoerperventil_set', 'DG.wz.HZ.Heizkoerperventil_controlmode', '', '', '', 'DG.wz.HZ.Heizkoerperventil_battery', '', 'DG.wz.HZ.Heizkoerperventil_txt', '1.0', 'DG.wz.HZ.Heizkoerperventil_valve', 'DG.wz.HZ.Heizkoerperventil_humidity') }}
</div>
<div data-role="collapsible">
<h3>Chart</h3>
{% import "widget_dbplot.html" as dbPlot %}
{% set plotOptions =
[
{
'update_trigger_gad': 'DG.wz.HZ.Heizkoerperventil_actual',
'device': 'DG.wz.HK.Wandthermostat',
'reading': 'measured-temp',
'config': {
'name': 'Temperature',
'type': 'spline'
}
}
]%}
{{ dbPlot.linePlot('HeatingPlot', 'Temperatures', '3600', '', 'Temperatures', '°C', plotOptions, '', '', 300) }}
</div>
</div>
</div>
Hat vielleicht jemand eine Idee, was ich da machen kann?
Vielen Dank
Ronny
Erst einmal vielen Dank für dieses tolle Widget. Ich bin Einsteiger sowohl FHEM als auch SmartVISU betreffend, habe aber mit diesem Widget schon einige verschiedene Plots bei mir integriert.
Nun bin ich über das Highcharts "Meteogram" Beispiel gestolpert und finde dieses ziemlich cool, da sowohl optisch ansprechend als auch informativ (ohne die Infos auf mehrere Diagramme zu verteilen):
http://www.highcharts.com/demo/combo-meteogram/dark-unica#https://www.yr.no/place/United_Kingdom/England/London/forecast_hour_by_hour.xml (http://www.highcharts.com/demo/combo-meteogram/dark-unica#https://www.yr.no/place/United_Kingdom/England/London/forecast_hour_by_hour.xml)
Allerdings werden die Daten im Beispiel nach meinem Verständnis aus XML ausgelesen und nach JSON konvertiert. Es müsste doch möglich sein, die Daten direkt aus der SQLite DB auszulesen und das Plot so in SmartVisu (mit Daten aus einer eigenen Wetterstation) einzubinden? Leider übersteigt dies mein Können... Vielleicht gibt es jemanden mit mehr Wissen auf diesem Gebiet, der das Teil ebenfalls gebrauchen könnte und sich daran versuchen würde?
Viele Grüße
Andre
Alle nötigen html/js Funktionen, um die Daten direkt bei yr.no abzugreifen, sind in dem fiddle Demo (http://jsfiddle.net/gh/get/jquery/1.9.1/highslide-software/highcharts.com/tree/master/samples/highcharts/demo/combo-meteogram/) vorhanden. Ich sehe keinen Bedarf die Daten vorher in die eigene DB zu pumpen, da auch das gesamte "Widget für Plots mit DBLog" eine Übergangslösung darstellt, bis herrmannj die Plots in fronthem integriert hat (ich hoffe ja immer noch ;) ). Mit dieser Lösung wäre es dann sinnvoll, die Daten (z.B. von yr.no) in FHEM bereit zu stellen und dafür ein Widget zu schreiben ohne direkt auf DB oder Web zuzugreifen.
Zitat von: Andre27 am 09 Februar 2016, 14:23:17
Leider übersteigt dies mein Können...
Jeder fängt mal an ;) Alles Notwendige dazu ist vorhanden, du musst es nur einbinden.
Zitat(ich hoffe ja immer noch ;) ).
Yepp! Kommt!
Hallo,
ich verstehe nicht wo hier der GAD angelegt wird?
Gruß Jan
Was meinst Du GENAU?
Ich bekomme in FHEM keinen GAD erstellt, ich habe den Plot auf einer neuen SmartVisu Seite angelegt.
- Der GAD "wetterstation_teperatur_plot.sw" erscheint nicht in der GAD Übersicht in FHEM
- Es wird auch auf der Smart Visu Seite kein Plot erstellt alles leer.
- DBlog ist aktiv und funktioniert
Hier der Inhalt meiner Datei room_outside.html
/**
* -----------------------------------------------------------------------------
* @package smartVISU
* @author Martin Gleiß
* @copyright 2012
* @license GPL [http://www.gnu.de]
* -----------------------------------------------------------------------------
*/
{% extends "rooms.html" %}
{% import "widget_dbplot.html" as dbplot %}
{% set plotOptions =
[
{
'update_trigger_gad': 'wetterstation_teperatur_plot.sw',
'device': 'HM_3389D0',
'reading': 'temperature',
'config': {
'name': 'Temperature',
'type': 'spline'
}
}
]%}
{% block content %}
{{ dbPlot.linePlot('plot_1', 'Außentemperatur', '', '', 'Außentemperatur', '°C', plotOptions, '', '', 300) }}
{% endblock %}
Hier ein Auszug meiner Datei widget_dbplot.php
/* * ****************************************
* *****************CONFIG*******************
* **************************************** */
// Edit the dbConnect to match your DB Log settings of fhem
// For SQLite define the path to your db in your filesystem
// DB Type, use 'sqlite' or 'mysql'
$dbType = 'mysql';
// SQLite
$dbPath = '/opt/fhem/fhem.db';
// MySQL
$host = 'localhost';
$mysql_username = 'root';
$mysql_password = 'xxxxxxx';
$database = 'fhem';
$port = 3306;
Wo ist mein Fehler :)
Beste Grüße Jan
Zitat von: flipkill am 24 Februar 2016, 10:41:23
{% import "widget_dbplot.html" as dbplot %}
...
{{ dbPlot.linePlot('plot_1', 'Außentemperatur', '', '', 'Außentemperatur', '°C', plotOptions, '', '', 300) }}
dbplot != dbPlot
Zitat
$mysql_username = 'root';
$mysql_password = 'ilms1988';
root bentzt zum Administrieren... und das Passwort würde ich jetzt ÜBERALL ändern, wenn es echt ist.
Hi,
danke für den PW Hinweis ;) Ist aber nur eins für FHEM :) habe nun aber trotzdem mal xxxx rein gemacht.
Das mit dem dbplot != dbPlot verstehe ich nicht wo muss das nun hin?
Vielen Dank
Gruß Jan
Groß- und Kleinschreibung wird unterschieden.
Zitat von: flipkill am 24 Februar 2016, 11:31:20
habe nun aber trotzdem mal xxxx rein gemacht
Das ändert nichts daran, dass das Passwort verbrannt ist, auch wenn ich es nicht zitiert hätte. Ändere es.
Hi,
ich würde gerne nochmal ein unbeantwortetes Thema aus einem früheren Post aufgreifen. Habt Ihr auch das Phänomen, dass die Diagramme auf dem Smartphone Browser nicht korrekt skaliert sind? Bei mir ist es so, dass wenn ich eine Seite über das Smartvisu Menü aufrufe, alle Diagramme zunächst falsch skaliert werden. Wenn ich dann den Reload Button des Browsers drücke, dann passen die Diagramme nach dem vollständigen Aufbau der Seite.
Hat für dieses Problem evtl. schon jemand eine Lösung gefinden? Lässt sich da evtl. noch etwas in der visu.js machen?
Danke und Gruß,
Bruece-lee
kann ich in teilen bestätigen - aber noch nicht untersucht.
vg
joerg
Moin !
Kann ich bestätigen, genau den Effekt habe ich auch.
Gruß, Marc
Hat denn irgendwer evtl. einen Gedankenanstoß, wie man den Fehler eingrenzen könnte?
Gruß, bruece-lee
Zu dem Fehler kann ich leider nichts sagen, aber vielleicht könnt ihr mir weiter helfen, wie ich meine Charts schöner einbinden kann.
Ich möchte die Plots in ein <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">
einbinden. Das funktioniert soweit auch, aber leider überragt die Achsenbeschriftung den Rand des collapsibles und beim Ausklappen verschiebt sich alles. Ich bin leider nicht sonderlich Erfahren mit HTML und vielleicht könnt ihr mir hier weiterhelfen.
(https://forum.fhem.de/index.php?action=dlattach;topic=43134.0;attach=48170;image%20"width%20=%20200%3Cbr%20/%3Eheight%20=%20200")
Ein Ähnliches Problem mit der Skalierung hab ich, wenn ich zwei Plots übereinander darstellen will. Wenn ich den Chart in ein class="block" packe hat er nicht mehr die passende Skalierung über die gesamte Breite. Wenn ich das aber nicht tue, dann überlagern sich die Plots
(https://forum.fhem.de/index.php?action=dlattach;topic=43134.0;attach=48172;image%20"width%20=%20200%20height%20=%20200")
Zum eigenlichen Widget: Ich würde gerne zwei drilldown-/drillUpButton einbinden. Weiß aber nicht wo ich die definieren muss, da es "Highcharts.setOptions" so ja nicht gibt. Ist das ganz überhaupt möglich?
Beste Grüße
Fabian
Zitat von: Pythonf am 08 März 2016, 20:41:39
Ich möchte die Plots in ein <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">
einbinden.
Wenn Du an den smartvisu css Einstellungen nichts verdreht hast oder Dein Browser nicht das Problem ist, dann funktioniert es so:
Auf den Seiten, auf den Du einen Plot haben möchtest:
<div class="block">
<div class="set-1" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
<div data-role="collapsible" data-collapsed="false" >
<h3>Temperuaturen</h3>
{% import "widget_template_dbplot.html" as my_dbPlot %}
{{ my_dbPlot.heatingPlot('wz', 'WZ')}}
</div>
</div>
</div>
Die dazugehörige widget_template_dbplot.html Datei:
{% macro heatingPlot(id, room, height, colorMeasured, colorDesired, colorValve, colorDewpoint) %}
{% import "widget_dbplot.html" as dbPlot %}
{{ dbPlot.linePlot('id'~id~'heatingPlot', 'Ventil', '2880', '300', '', '',
[
{'update_trigger_gad': room~'_RTR_Clima.valve', 'device': room~'_HEIZUNG', 'reading': 'actuator', 'config': {'name': 'Ventil', 'unit':'%', 'yAxis':1, 'type': 'area', 'color': colorValve|default('#828282') }},
{'update_trigger_gad': room~'_RTR_Clima.desired-temp' , 'device': room~'_HEIZUNG', '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~'_HEIZUNG', 'reading': 'measured-temp', 'config': {'name': 'Ist Temp.', 'unit':'°', 'type': 'spline', 'color': colorMeasured|default('#FFC825') }},
{'update_trigger_gad': room~'_RTR_Clima.dewpoint', 'device': room~'_HEIZUNG', 'reading': 'dewpoint', 'config': {'name': 'Taupunkt', 'unit':'°', 'type': 'spline', 'color': colorDewpoint|default('#AAAAAA') }}
],
[
{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 %}
Zitat
da es "Highcharts.setOptions" so ja nicht gibt
Mir ist nicht klar warum das nicht funktionieren sollte, aber is auch kein Thema, mit dem ich mich im Moment beschäftige.
Ich hab das ganze nun versucht einzubinden aber es funktioniert so noch nicht:
{% macro heatingPlot(id, room, height, colorMeasured, colorDesired, colorValve) %}
{% import "widget_dbplot.html" as dbPlot %}
{{ dbPlot.linePlot('id'~id~'heatingPlot', 'Ventil', '2880', '300', '', '',
[
{'update_trigger_gad': room~'_HEIZUNG_Clima.valve', 'device': room~'_HEIZUNG', 'reading': 'actuator', 'config': {'name': 'Ventil', 'unit':'%', 'yAxis':1, 'type': 'area', 'color': colorValve|default('#828282') }},
{'update_trigger_gad': room~'_HEIZUNG_Clima.desired-temp' , 'device': room~'_HEIZUNG', 'reading': 'desired-temp', 'config': {'name': 'Soll Temp.', 'unit':'°', 'type': 'line', 'color': colorDesired|default('rgba(201,134,44,1)') }},
{'update_trigger_gad': room~'_HEIZUNG_Clima.measured-temp', 'device': room~'_HEIZUNG', 'reading': 'measured-temp', 'config': {'name': 'Ist Temp.', 'unit':'°', 'type': 'spline', 'color': colorMeasured|default('#FFC825') }}
],
[
{title: {text: 'Temp',}, labels: {format: '{value} °',}, opposite: true, max: 30, min: 0},
{title: {text: 'Actuator',}, labels: {format: '{value} %',}, max: 100, min: 0}
],
{ align: 'right', verticalAlign: 'top', layout: 'horizontal', x: -35 },
height|default(300)) }}
{% endmacro %}
Wobei der RTR "Fabian_HEIZUNG" heißt.
Wenn ich das ganze nun einbinde und wie folgt aufrufe, lädt die SV-Seite nicht mehr:
{{ my_dbPlot.heatingPlot('Fabian_Plot', 'Fabian')}}
Sehr ihr irgenwo einen offensichtlichen Fehler?
Wie importierst Du das Template?
{% import "widget_template_dbplot.html" as my_dbPlot %}
entweder in rooms.html oder direkt in der html (in dem Fall heizung_ov.html)
Aktuell sehr minimalsistisch alles andere rausgelöscht:
/**
* -----------------------------------------------------------------------------
* @package smartVISU
* @author Martin Gleiß
* @copyright 2012 - 2015
* @license GPL [http://www.gnu.de]
* -----------------------------------------------------------------------------
*/
{% extends "rooms.html" %}
{% import "widget_template_dbplot.html" as my_dbPlot %}
{% block content %}
<div class="preblock">
<td align="middle" width="70%">
<h1><img class="icon" src='{{ icon0 }}sani_heating_temp.svg' />Heizung</h1>
<hr>
</td>
</div>
{{ my_dbPlot.heatingPlot('Fabian_Plot', 'Fabian')}}
{% endblock %}
Wenn die Templatedatei widget_template_dbplot.html heißt und in deinem Pages Unterordner liegt, dann weiss ich auch nicht... Mit Firebug die Seite untersuchen.
Liebe fhem´ler,
ich habe dbplot auf meinem Testsystem (cubietruck) installiert und alles läuft prima.
Am Wochenende habe ich nun versucht das ganze auf meinem Live system zu installieren. Leider ohne erfolg. Die graphen werden nicht angezeigt.
Ich habe smartvisu noch einmal neu installiert und alle Daten vom Testsystem auf das livesystem kopiert. auch hier leider ohne erfolg.
Das Testsystem habe ich dann auf die Daten des Livesystems umgestellt (andere IP Adresse) und auch hier kommen die daten einwandfrei.
Wenn ich im Live System das Element untersuche erhalte ich folgende Fehlermeldung in der Konsole
POST
XHR
http://192.168.178.16/smartvisu/widgets/widget_dbplot.php [HTTP/1.0 500 Internal Server Error 6ms]
diese kommt bei Testsystem nicht. kann mir jemand hier weiterhelfen?
Dannke im Voraus.
Gerd
Hallo,
ich konnte erfolgreich die Plots in smartvisu einbinden. Doch leider bekomme ich keine schöne Graphen angezeigt. Gibt es eine Möglichkeit die Graphen so anzupassen, dass diese nicht so abgehakt wie auf dem Screen aussehen. Es werden alle 8 - 10 sek neue werte in die SQL Datenbank geschrieben. Liegt es vllt an der Häufigkeit ? Auch wenn der Zeitraum kleiner gewählt wird sind die Graphen nicht so wie auf der ersten Seite des Themas hier. Allerdings sind die Werteänderungen auch nur minimal . Vielleicht habt ihr ja noch eine Idee
Vielen Dank für eure Hilfe
Temp und Luftfeuchte eines Raums im Sekundentakt zu loggen ist absolut sinnfrei und führt auch zu dem gezeigten Plot und ist alles andere als performant. Auch kurvige Plotoptionen können das nicht "gerade biegen".
Hallo zusammen,
kennt ihr das Problem, dass einige Linien im Plot nicht orange sondern schwarz dargestellt werden ? Der Plot bekommt Daten aus der Datenbank und aktualisiert diese auch. Nur wird die Linie ganz blass in schwarz dargestellt und nicht in Orange. Dies ist aber nicht bei allen Graphen so. Habt ihr dafür eine Erklärung ? Bei bedarf kann ich auch noch ein Screen anfügen
Hi zusammen,
ich hab ebenfalls ein kleines Problem mit dem tollen Widget. Vielleicht hat da jemand einen Tip.
Ich versuche bei einem Plot mit mehreren lines eine dataRange > 1 Tag zu setzen.
Allerdings werden nur die Daten für die erste line für den erweiterten Zeitraum gelesen (siehe Anhang).
Ein normaler SVG Plot funktioniert dagegen einwandfrei, also die Daten sind auf jeden Fall verfügbar.
Mein Code:
{% set plotOptions = [
{
'update_trigger_gad': 'klima_draussen.temperature',
'device': 'klima_draussen',
'reading': 'temperature',
'config': {
'name': 'Temperatur',
'type': 'line',
'color': '#e64d00',
'unit': '°C',
}
},
{
'update_trigger_gad': 'klima_draussen.dew',
'device': 'klima_draussen',
'reading': 'dew',
'config': {
'name': 'Taupunkt',
'type': 'line',
'color': '#804000',
'unit': '°C',
}
},
{
'update_trigger_gad': 'klima_draussen.humidity',
'device': 'klima_draussen',
'reading': 'humidity',
'config': {
'name': 'Feuchtigkeit',
'type': 'line',
'color': '#1a8cff',
'unit': '% rH',
'yAxis': 1,
}
}
]%}
{% set yAxisOptions = [
{
title: {
text: 'Temperatur',
},
labels: {
format: '{value} °C' ,
},
opposite: true
},
{
title: {
text: 'Feuchtigkeit',
},
labels: {
format: '{value}%',
}
}
]%}
{{ dbPlot.linePlot('plot_klima_draussen', 'Klima', 10080, '', '', '', plotOptions, yAxisOptions, '', 300) }}
Vermutlich mußt Du den Parameter maxRows erhöhen:
Zitat
* @param maxRows max row count that will be selected from the database | default: 300
Super, hat geklappt.
Vielen vielen Dank für die schnelle Antwort :)
Hallo,
gibt es eigentlich schon etwas neues zu dem Skalierungsproblem ?
Wenn das Widget korrekt eingebunden ist, dann ist mir kein Skalierungsproblem bekannt.
Hallo zusammen,
ich habe FHEM und smartvisu schon seit einiger Zeit am laufen. Jetzt möchte ich auch gerne meine Plots ins smartvisu integrieren und schaffe es einfach nicht. Ich hoffe ihr könnt mir weiterhelfen.
Mein DBlog funktioniert und die events werden sauber geloggt.
Ich habe die widget_dbplot.php und widget_dbplot.config.php im smartvisu/widgets kopiert.
Die widget_dbplot.html und die visu.js liegt in meinem 'pages Folder.'
Die Datenbankeinstellungen der widget_dbplot.config.php meiner mysql Datenbank passen.
In meiner Seite habe ich folgenden Code integriert:
{{ basic.value('temperatur_plot_1', 'temperatur_puffer_oben.sw', '°C') }}
{% import "widget_dbplot.html" as dbPlot %}
{% set plotOptions =
[
{
'update_trigger_gad': 'temperatur_puffer_oben.sw',
'device': 'ow_temperatur_puffer_oben',
'reading': 'temperature',
'config': {
'name': 'Temperature',
'type': 'spline'
}
}
]%}
{{ dbPlot.linePlot('PlotAussen', 'Temperatures', '', '', 'Temperatures', '°C', plotOptions, '', '', 300) }}
Mit dem basic.value habe ich überprüft, dass der GAD auch funktioniert. Das device und reading habe ich überprüft, das passt ebenfalls.
Leider bekomme ich aber nur einen leeren Plot. Einen Screenshot habe ich angehängt :-(
Das apache error log zeigt keinen Fehler an, die Ausgabe der Browser Console habe ich auch angehängt. Hier sehe ich auch keinen Fehler.
Ich habe keine Ahnung, was ich hier falsch mache.
Das ganze läuft auf einem Ubuntu 14.04. Die folgenden Pakete sind installiert.
libapache2-mod-php5
php5-mysql
libdbd-mysql-perl
libdbi-perl
Könnt ihr mir vielleicht einen Tip geben, wie ich weitersuchen könnte?
Vielen Dank,
Josef
Ich muss leider auch noch einmal ein älteres Thema bzgl der Skalierung aufgreifen, welches schon in vorherigen Posts thematisiert wurde. Ich habe bei mehreren Browsern das Problem sobald ich die Page einmal aufrufe wird der Plot nicht auf die gesamte Seite skaliert. Betätige ich aber dann den Reload button skaliert die Page den Plot richtig. Mir fehlt immer noch jedlicher Ansatz den fehler einzugrenzen oder zu finden. hat jemand dazu noch eine Idee woran es liegen kann oder wie man den Fehler eingrenzen kann oder tritt dieses Problem überhaupt nochchmals bei jemanden auf ?
Ich habe auch mal 2 Screenshots angehangen. Einmal bei ersten load mit der kleinen Skalierung und dann der Reload der Seite
Zitat von: Micha_88 am 03 November 2016, 21:57:30
Ich muss leider auch noch einmal ein älteres Thema bzgl der Skalierung aufgreifen, welches schon in vorherigen Posts thematisiert wurde. Ich habe bei mehreren Browsern das Problem sobald ich die Page einmal aufrufe wird der Plot nicht auf die gesamte Seite skaliert. Betätige ich aber dann den Reload button skaliert die Page den Plot richtig. Mir fehlt immer noch jedlicher Ansatz den fehler einzugrenzen oder zu finden. hat jemand dazu noch eine Idee woran es liegen kann oder wie man den Fehler eingrenzen kann oder tritt dieses Problem überhaupt nochchmals bei jemanden auf ?
Ich habe auch mal 2 Screenshots angehangen. Einmal bei ersten load mit der kleinen Skalierung und dann der Reload der Seite
Das Thema hat sich jetzt doch erledigt und habe eine Lösung für das Problem gefunden. ich übergebe direkt eine Feste breite, sodass es nicht mehr zu diesem Phänomen kommt. Trotzdem vielen Dank
Hallo Micha_88,
schön, dass sich das Problem erledigt hat. Ich hatte früher Probleme mit den Plots, wenn ich sie in einer <table> eingebettet hatte. Nun habe ich sie im <div> eines typischen Blocks von Smartvisu untergebracht in folgender Form und alles funktioniert prima:
<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>Raumtemperatur</h3>
{% import "widget_dbplot.html" as dbPlot %}
.... (Definition des Plots) ....
</div>
</div>
</div>
VG, Bruece-Lee
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 (http://www.bernd-schubart.de/downloads/fhem/smartvisu_skalierung_01.PNG)
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 (http://www.bernd-schubart.de/downloads/fhem/smartvisu_skalierung_02.PNG)
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,
the ratman schrieb:
Zitatnur eben ist ein problem aufgetreten, desssen lösung ich nicht finde:
und zwar suche ich einen plot-type der schrittweise, also in "steps" darstellt (für nur 4 schaltzustände mit immer geraden linien dazwischen).
es scheint den type "step" aber nicht zu geben, wenn ich mir http://api.highcharts.com/highcharts#series anschau.
ich habe das gleiche Problem um die Solltemperatur darzustellen. Bei highcharts habe ich schon einige Typen angeschaut und teilweise getestet - jedoch schaffe ich es nicht wie in SVG steps darzustellen. Ich könnte mehr Datenpunkte in der db erzeugen um die Darstellung zu verbessern - gefällt mir aber nicht, da ich die db nicht unnötig zumüllen möchte.
Hat jemand eine Idee?
Gruß
Spielmann
Für den Typ "line" gibt es ja die Option step.
http://api.highcharts.com/highcharts/series%3Cline%3E.step (http://api.highcharts.com/highcharts/series%3Cline%3E.step)
Danke raman,
'step': 'left', war die Lösung. Das gibt mir gleich wieder Motivation an SmartVisu weiter zu basteln.
Hier mein Ergebnis:
{% import "widget_dbplot.html" as dbPlot %}
{% set plotOptions = [
{
'update_trigger_gad': 'og.bath.heating',
'device': 'HM_Wandthermostat_Bad',
'reading': 'Wandthermostat_Bad.1.TEMPERATURE',
'config': {
'name': 'Temperatur',
'type': 'line',
'unit': '°C',
}
},
{
'update_trigger_gad': 'og.bath.heating.set',
'device': 'HM_Wandthermostat_Bad',
'reading': 'Wandthermostat_Bad.2.SET_TEMPERATURE',
'config': {
'name': 'Soll Temp',
'type': 'area',
'fillOpacity': '0.3',
'step': 'left',
'unit': '°C',
}
},
{
'update_trigger_gad': 'og.bath.humidity',
'device': 'HM_Wandthermostat_Bad',
'reading': 'Wandthermostat_Bad.1.HUMIDITY',
'config': {
'name': 'Feuchtigkeit',
'type': 'spline',
'color': '#1a8cff',
'unit': '% rH',
'yAxis': 1,
}
}
]%}
{% set yAxisOptions = [
{
title: {
text: 'Temperatur',
},
labels: {
format: '{value} °C' ,
},
opposite: true
},
{
title: {
text: 'Feuchtigkeit',
},
labels: {
format: '{value}%',
}
}
]%}
{{ dbPlot.linePlot('plot_klima_bad', 'Klima', 4320, '', '', '', plotOptions, yAxisOptions, '', 300) }}
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 (http://www.bernd-schubart.de/downloads/fhem/smartvisu_skalierung_01.PNG)
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 (http://www.bernd-schubart.de/downloads/fhem/smartvisu_skalierung_02.PNG)
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>
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
Welche smartVISU/Highcharts Version verwendest Du?
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
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
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
Bei mir ist es mit der Änderung auch gelöst.
Irgendwelche Nachteile (z.B. Blockierungen in fhem etc) hat das nicht oder?
Auch bei mir hat es auf allen Endgeräten (Handy, Tab) geholfen.
Wollte schon smartVisu ersetzen!
Grüße Uwe
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!
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.
Die id müssen unterschiedlich sein
Vg
Jörg
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!
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
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 °C|state|3.00|°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
Hallo,
ich hab das selbe Problem und komme nicht weiter.
Hallo,
Ich verwende aktuell sv2.9 in einer Testumgebung, leider funktioniert das Dbplot Widget nur noch teilweise. Es werden zwar noch Plots angezeigt, aber man kann beispielsweise keine Farben mehr anpassen. Wird es für das Widget ein Update geben oder existiert eventuell eine Alternative, welche direkt auf eine Datenbank zugreift ohne den ,,Umweg" über FHEM?
Vielen Dank.
Hallo zusammen,
ich hab das selbe Problem, kann jemand mal ein paar Bilder bez den Code posten.
Danke
Schau Dir mal diesen Thread an: fronthem + Plots + status.log für smartVISU 2.9 (https://forum.fhem.de/index.php/topic,86584)