SmartVISU Widget für Plots mit DbLog aus FHEM

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

Vorheriges Thema - Nächstes Thema

dev0

#15
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!

dev0

Sieht jemand eine Möglichkeit off/on als 0/1 zu plotten. userReading ist klar, aber das bringt mich bei bestehenden Daten nicht weiter.

marvin78

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. ;)

dev0

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 ;)

marvin78

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.

ToGe88

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.

cruser1800

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

dev0

maxRows beim Widgetaufruf erhöhen oder die Datenrate der Plots verringern.

cruser1800

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!  :(

dev0

Eventuell Hinweise in der Browser Console, apache.log oder php.log zu finden?

ToGe88

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ß



cruser1800

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

ToGe88

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ß

cruser1800


palermojammer

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