NEWS
Test Adapter flexcharts - Stapeldiagramme und mehr
-
@da_woody sagte in Test Adapter flexcharts 0.0.1 - Stapeldiagramme und mehr:
@jrbwh "sondern muss es per Javascript oder Blockly erstellen."
sorry, das ist f
ü
r mich kein adapter.Sehe ich auch so. Blicke da nicht durch.
Gibt es ein Blockly Beispiel? Wie bekomme ich die History Daten da rein?@sigi234 Danke f
ü
r Deine R
ü
ckmeldung.
Leider arbeite ich selbst nicht mit Blockly, deshalb gibt es da noch kein Beispiel.Grunds
ä
tzlich geht es so:- Darzustellende Daten beschaffen, z.B. aus der History lesen
- Ein Objekt erstellen, das eine f
ü
r ECharts passende Struktur hat. Beispiel f
ü
r ein einfaches Balkendiagramm s.u. Deine einzelnen Datenreihen musst Du jeweils im Key "data" speichern. - Das Objekt im JSON-Format in einem State speichern, z.B. unter der ID
0_userdata.0.flexcharts.chart1 - In einem Browser-Tab oder in einem iFrame die ID des States an flexcharts
ü
bergeben. Also mit http://localhost:8200/echarts.html?source=state&id=0_userdata.0.flexcharts.chart1
Mir ist schon klar, dass das ein bisschen kompliziert ist und sich nicht direkt erschlie
ß
t. Das ist f
ü
r F
ä
lle gedacht, wenn man mit den GUI-basierten Ans
ä
tzen nicht weiter kommt und man bereit ist, mehr Zeit in das Thema zu investieren.Template f
ü
r ein einfaches Balkendiagramm mit einer Datenreihe:{"tooltip":{"trigger":"axis","axisPointer":{"type":"shadow"}}, "legend":{}, "xAxis":[{"type":"category","data":["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]}], "yAxis":[{"type":"value"}], "dataZoom":[{"show":true,"start":0,"end":100}], "series":[ {"name":"Meine Datenreihe 1","type":"bar","color":"#a30000","data":[8,19,21,50,26,1,36]} ]} -
@sigi234 Danke f
ü
r Deine R
ü
ckmeldung.
Leider arbeite ich selbst nicht mit Blockly, deshalb gibt es da noch kein Beispiel.Grunds
ä
tzlich geht es so:- Darzustellende Daten beschaffen, z.B. aus der History lesen
- Ein Objekt erstellen, das eine f
ü
r ECharts passende Struktur hat. Beispiel f
ü
r ein einfaches Balkendiagramm s.u. Deine einzelnen Datenreihen musst Du jeweils im Key "data" speichern. - Das Objekt im JSON-Format in einem State speichern, z.B. unter der ID
0_userdata.0.flexcharts.chart1 - In einem Browser-Tab oder in einem iFrame die ID des States an flexcharts
ü
bergeben. Also mit http://localhost:8200/echarts.html?source=state&id=0_userdata.0.flexcharts.chart1
Mir ist schon klar, dass das ein bisschen kompliziert ist und sich nicht direkt erschlie
ß
t. Das ist f
ü
r F
ä
lle gedacht, wenn man mit den GUI-basierten Ans
ä
tzen nicht weiter kommt und man bereit ist, mehr Zeit in das Thema zu investieren.Template f
ü
r ein einfaches Balkendiagramm mit einer Datenreihe:{"tooltip":{"trigger":"axis","axisPointer":{"type":"shadow"}}, "legend":{}, "xAxis":[{"type":"category","data":["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]}], "yAxis":[{"type":"value"}], "dataZoom":[{"show":true,"start":0,"end":100}], "series":[ {"name":"Meine Datenreihe 1","type":"bar","color":"#a30000","data":[8,19,21,50,26,1,36]} ]}@jrbwh
Kannst du einen Fehler bzgl. Port abfangen? In meinem Fall ist es dercameras-Adapter, der nutzt auch 8200.
Oder evtl. direkt einen anderen Port verwenden?

error: flexcharts.0 (458177) Exception-Code: EADDRINUSE: listen EADDRINUSE: address already in use :::8200 -
@jrbwh
Kannst du einen Fehler bzgl. Port abfangen? In meinem Fall ist es dercameras-Adapter, der nutzt auch 8200.
Oder evtl. direkt einen anderen Port verwenden?

error: flexcharts.0 (458177) Exception-Code: EADDRINUSE: listen EADDRINUSE: address already in use :::8200 -
@mcu Danke f
ü
r den Hinweis. Nein, habe ich nicht abgefangen. Werde ich einbauen.Den Default
ä
ndere ich dann auch gleich. Gibt es eine Liste der bereits verwendeten Ports? -
@mcu Habe den Default-Port jetzt auf 3100 ge
ä
ndert. Da grafana auf 3000 liegt, scheint mir das passend.
Mein Versuch, einen Port-Konflikt abzufangen, funktioniert aber bisher nicht. Ich habe den Start des http-Servers in ein try-catch gepackt, trotzdem st
ü
rzt der Adapter im Konfliktfall ab und meldet f
ü
r die Zeile von this.webServer.listendiesen Fehler:uncaught exception: listen EADDRINUSE: address already in use. Der Code sieht so aus:try { this.webServer.listen({port: this.config.port}, () => { this.log.info(`Server started on localhost:${this.config.port}`); this.setState('info.connection', true, true); }); } catch (e) { this.log.error(`Start of http server failed on localhost:${this.config.port} - err=${e.message}`); this.setState('info.connection', false, true); }Verstehe ich nicht. Wie hast Du das gel
ö
st? -
@mcu Habe den Default-Port jetzt auf 3100 ge
ä
ndert. Da grafana auf 3000 liegt, scheint mir das passend.
Mein Versuch, einen Port-Konflikt abzufangen, funktioniert aber bisher nicht. Ich habe den Start des http-Servers in ein try-catch gepackt, trotzdem st
ü
rzt der Adapter im Konfliktfall ab und meldet f
ü
r die Zeile von this.webServer.listendiesen Fehler:uncaught exception: listen EADDRINUSE: address already in use. Der Code sieht so aus:try { this.webServer.listen({port: this.config.port}, () => { this.log.info(`Server started on localhost:${this.config.port}`); this.setState('info.connection', true, true); }); } catch (e) { this.log.error(`Start of http server failed on localhost:${this.config.port} - err=${e.message}`); this.setState('info.connection', false, true); }Verstehe ich nicht. Wie hast Du das gel
ö
st? -
@jrbwh Nimm die Funktion.
const check_port = await this.getPortAsync(this.config.port);Ist der Prot belegt gibt check_port den n
ä
chsten freien wieder.Gru
ß
//Lucky@lucky_esa Wow, kaum macht man es richtig, funktioniert's.
Vielen Dank f
ü
r die super schnelle Hilfe! -
@darkiop Habe jetzt ein erstes Javascript-Template erstellt. Damit k
ö
nnen kombinierte Stapel-/Linien-Diagramme erstellt werden, wenn die Daten als Tages-, Monats- oder Jahres-Werte im History-Adapter vorliegen. Das Template liegt hier.Wichtig: Die History-Daten m
ü
ssen "sauber" sein, d.h. in jeder Datenreihe muss zu jedem Tag/Monat/Jahr genau ein Wert vorhanden sein. Sowohl mehrfach vorhandene, als auch fehlende Werte f
ü
hren meist zu seltsamen Effekten in den Charts.Um das Template zu benutzen, m
ü
ssen einige Werte im Skript angepasst werden. das ist alles in den Kommentaren im Skript beschrieben. Wenn alles klappt, sieht ein typisches Ergebnis dann so aus:
@jrbwh sagte in Test Adapter flexcharts 0.0.1 - Stapeldiagramme und mehr:
An einem Skript f
ü
r z.B. t
ä
glich gespeicherte Daten bin ich dran. Wie sieht denn Dein Datenformat konkret aus?Ich bin leider immer noch nicht dazugekommen mich damit zu besch
ä
ftigen ...
Aber der Winter ist ja lange 
Hier mal ein einfaches Beispiel wof
ü
r ich deine Charts verwenden w
ü
rde:
Die 3 Werte werden t
ä
glich um 23:59 ermittelt und in eine MariaDB mit dem SQL-Adapter geschrieben. F
ü
r das Chart stelle ich mir ein Balkendiagram mit den 3 Werten pro Tag und vielleicht 7 Tage zur
ü
ck vor. In etwa so, nur eben xAxis.data ausgehende vom heutigen Tag -7d.option = { xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] }, yAxis: { type: 'value' }, series: [ { data: [120, 200, 150, 80, 70, 110, 130], type: 'bar' }, { data: [120, 200, 150, 80, 70, 110, 130], type: 'bar' }, { data: [120, 200, 150, 80, 70, 110, 130], type: 'bar' } ] }; -
@jrbwh sagte in Test Adapter flexcharts 0.0.1 - Stapeldiagramme und mehr:
An einem Skript f
ü
r z.B. t
ä
glich gespeicherte Daten bin ich dran. Wie sieht denn Dein Datenformat konkret aus?Ich bin leider immer noch nicht dazugekommen mich damit zu besch
ä
ftigen ...
Aber der Winter ist ja lange 
Hier mal ein einfaches Beispiel wof
ü
r ich deine Charts verwenden w
ü
rde:
Die 3 Werte werden t
ä
glich um 23:59 ermittelt und in eine MariaDB mit dem SQL-Adapter geschrieben. F
ü
r das Chart stelle ich mir ein Balkendiagram mit den 3 Werten pro Tag und vielleicht 7 Tage zur
ü
ck vor. In etwa so, nur eben xAxis.data ausgehende vom heutigen Tag -7d.option = { xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] }, yAxis: { type: 'value' }, series: [ { data: [120, 200, 150, 80, 70, 110, 130], type: 'bar' }, { data: [120, 200, 150, 80, 70, 110, 130], type: 'bar' }, { data: [120, 200, 150, 80, 70, 110, 130], type: 'bar' } ] };@darkiop Das sollte mit dem Skript-Template direkt m
ö
glich sein, wie in meinem Post vom 31. Aug. 2024, 11:54 beschrieben. Folgendes musst Du anpassen:
"instanceHistory": Deine History-Instanz eintragen
"yAxis": Die 2te y-Achse entfernen
"mySeries.daily": F
ü
r die ersten 3 Zeilen Deine Datenpunkte eintragen, alles "stack_a" zuordnen (sofern es ein Stapeldiagramm mit einem Balken werden soll). Die restlichen Zeilen l
ö
schen.
"mySeries.monthly" und "mySeries.yearly": Alle Zeilen l
ö
schen, also nur []
ü
brig lassen
Aufrufen mit " ...params={"period":"daily", "start":7} -
Major Update auf Apache ECharts 6.0.0
16.10.2025: Apache hat vor ein paar Wochen die Version 6.0.0 von ECharts ver
ö
ffentlicht, hier sind die Neuerungen im Detail beschrieben. Das Standard-Thema, also das visuelle Erscheinungsbild, wurde deutlich ver
ä
ndert, es gibt einige neue Funktionen und Diagrammtypen und man kann nun dynamisch zwischen hellem und dunklem Design umschalten, getriggert durch die Systemeinstellung.Ich habe Flexcharts entsprechend erweitert:
- mit
&themev5kann man daf
ü
r sorgen, dass das alte Erscheinungsbild (Version 5) bestehen bleibt - mit
&darkmode=autoaktiviert man die erw
ä
hnte dynamische Umschaltung - es ist jetzt m
ö
glich, eigene Themen zu definieren und an Flexcharts zu
ü
bergeben - zus
ä
tzliche Funktionsdefinitionen k
ö
nnen nun in unbegrenzter Anzahl
ü
bergeben werden
Gerne mal ausprobieren, vor allem auch die Abw
ä
rtskompatibilit
ä
t. Es sollte alles funktionieren wie bisher. Evtl. sehen die Chart visuell anders aus, dann sollte &themev5das alte Erscheinungsbild zur
ü
ck bringen. Die Version ist im Beta-Repo verf
ü
gbar.Im Readme sind die neuen M
ö
glichkeiten beschrieben. Auch ein einfaches Beispiel wie man die Themen nutzen kann, ist enthalten.Freue mich auf euer Feedback.
=====================================================================================
Motivation f
ü
r FlexchartsHabt ihr auch schon mal die M
ö
glichkeit vermisst, "richtige" Stapeldiagramme zu erzeugen? Oder andere spezielle Diagramme, die momentan mit ioBroker nicht m
ö
glich sind? Mit dem Adapter flexcharts ist das m
ö
glich. Ein Stapeldiagramm sieht dann z.B. so aus:

Der ECharts-Adapter ist klasse, hat aber durch das UI-Konzept Einschr
ä
nkungen bzgl. der m
ö
glichen Diagramm-Typen.Konzept
Mit dem flexcharts-Adapter ist es m
ö
glich, alle Diagrammtypen zu erzeugen, die Apache eCharts anbietet. Dazu
ü
bergibt man dem Adapter die komplette Definition des Charts (den Inhalt von optionsin den Beispielen als JSON-Objekt). Man kann das Chart also nicht per UI zusammen klicken (es gibt keine UI), sondern muss es per Javascript oder Blockly erstellen.Der Adapter arbeitet als Web-Extension, ben
ö
tigt also den Web-Adapter und ist per Default auf Port 8082 erreichbar. Das Verhalten steuert man
ü
ber Parameter im http-Aufruf. Beispiel:- Definition und Daten des Charts hat man im State
0_userdata.0.echarts.chart1gespeichert - Dann erzeugt der Aufruf
http://localhost:8082/flexcharts/echarts.html?source=state&id=0_userdata.0.echarts.chart1das entsprechende eChart. Diese Adresse kann man als iFrame z.B. in der vis oder in jarvis eintragen. Oder direkt in einem Browser-Tab. Stattlocalhostggf. die Adresse der ioBroker-Rechners verwenden. - Statt die Chart-Daten in einem State zu speichern, kann man sie direkt per Skript erzeugen und mit callback() an den Adapter
ü
bergeben. - Ein Demo-Chart ist im Adapter hinterlegt, das ruft man auf mit
http://localhost:8082/flexcharts/echarts.html?source=state&id=flexcharts.0.info.chart1
Details zu Installation und Verwendung sind im README beschrieben:
https://github.com/MyHomeMyData/ioBroker.flexchartsBitte ausprobieren
Adapter ist im Beta-Repo verf
ü
gbar. Link zum npm-Paket.
Ich freue mich auf eure R
ü
ckmeldungen!Hinweis zu Versionen kleiner als 0.1.4
Falls jemand eine Version vor 0.1.4 installiert hat: Bitte einmal den Adapter (nicht nur die Instanz) komplett deinstallieren und neu installieren. Dadurch wird das Zusammenspiel mit dem Admin-Adapter aufger
ä
umt. Da der Adapter keine eigene Konfigurationsparameter hat, kann dabei nichts verloren gehen.
- mit
-
@darkiop Das sollte mit dem Skript-Template direkt m
ö
glich sein, wie in meinem Post vom 31. Aug. 2024, 11:54 beschrieben. Folgendes musst Du anpassen:
"instanceHistory": Deine History-Instanz eintragen
"yAxis": Die 2te y-Achse entfernen
"mySeries.daily": F
ü
r die ersten 3 Zeilen Deine Datenpunkte eintragen, alles "stack_a" zuordnen (sofern es ein Stapeldiagramm mit einem Balken werden soll). Die restlichen Zeilen l
ö
schen.
"mySeries.monthly" und "mySeries.yearly": Alle Zeilen l
ö
schen, also nur []
ü
brig lassen
Aufrufen mit " ...params={"period":"daily", "start":7}@jrbwh Ja, kann ich best
ä
tigen ... mit etwas selber code lesen h
ä
tt ich das auch hinbekommen ... aber wie gesagt, die Prios haben sich gerade ver
ä
ndert. Danke dir - ich werd mal schauen wie ich die Charts nutzen kann.Hast du auch vorgesehen den Dark-Mode der echarts zu implementieren?
-
@jrbwh Ja, kann ich best
ä
tigen ... mit etwas selber code lesen h
ä
tt ich das auch hinbekommen ... aber wie gesagt, die Prios haben sich gerade ver
ä
ndert. Danke dir - ich werd mal schauen wie ich die Charts nutzen kann.Hast du auch vorgesehen den Dark-Mode der echarts zu implementieren?
-
Ich bin verwirrt: Der von mir oben eingestellte Link zeigt nicht mehr auf die Installationsseite. Wo ist die Installationsanweisung abgeblieben?
-
@legro Ich habe die Installationsanleitung nach dem Hinweis von Martin rausgenommen.
Du kannst den Adapter aber einfach per npm installieren:
cd /opt/iobroker npm i iobroker.flexchartsDann in der Adapter-Ansicht eine Instanz erg
ä
nzen. -
@jrbwh
Hallo,
bin sehr an diesem Adapter interessiert. Machst du da noch einen offiziellen Adapter draus? -
@delphinis Ja, da ist der Plan. Das Review zur Aufnahme ins Beta-Repo l
ä
uft, siehe PR.Du kannst den Adapter aber sofort
ü
ber npm installieren:cd /opt/iobroker npm i iobroker.flexcharts -
@delphinis Der adapter ist jetzt im Beta-Repo verf
ü
gbar. Funktioniert jetzt als Web-Extension, d.h. der Web-Adapter (web.0) muss installiert sein und flexcharts ist dann unter Port 8082 erreichbar. Au
ß
erdem muss ein flexchartsin der Adresse vorangestellt werden, also z.B.http://localhost:8082/flexcharts/echarts.html?source=state&id=flexcharts.0.info.chart1Das Readme ist entsprechend angepasst.
Freue mich auf Deine R
ü
ckmeldung.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden
.