FTUI Neue Version chart_widget

Begonnen von eki, 31 Januar 2016, 00:17:26

Vorheriges Thema - Nächstes Thema

uron

#645
Danke eki, dass du nochmals nach der 3. Aufgabenstellung geschaut hast, die Flächen unterhalb der Null-Linie sind jetzt tatsächlich rot eingefärbt.
Schade, dass ich den Code data-columnspec='["4:powerfox.power.*","4:FBDECT_FritzBox_08761_0489668.power.*",["4:powerfox.power.*","4:powerfox.power.*:0:$fld[3]<0?0:$fld[3]"]]'
data-style='["ftui l0","ftui l4",["fill",["-20","#ff0000","1.0"],["0","#ff0000","1.0"],["0","#DDA400","0.0"],["10000","#DDA400","0.0"]]]'
data-ptype='["lines","lines:0","lines"]'
data-uaxis='["secondary","primary","secondary"]'
(insbesondere die Array-Elemente der 2. Zeile) nicht raffe, da könnten mir ja noch weitere Ideen kommen. Aber nun ist der erste Wunsch ja erfüllt. Vielleicht "seziere" ich den mal genauer und teste ein wenig und komme dann doch noch selbst dahinter - oder gibt es dafür irgendwo eine Dokumentation (wiki hilft mir da auch nicht weiter)? Herausbekommen habe ich, dass das 2. Array für die Farbfläche (rot) steht, die Transparenz (welcher Wertebereich gilt hier?) und Stoppunkte kann ich durch Tests aber nicht erkennen.
Ich habe der Einfachheit halber deinen kompletten Code kopiert und bei mir eingefügt; die abstürzende Linie und die doppelte Kurve ist jedoch noch erhalten - sei's drum
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

uron

Zu dem genannten data-style will ich doch mal konkret nachfragen und hoffe, auf Unterstützung.
["fill",["-20","#ff0000","1.0"],["0","#0000ff","1.0"],["0","#DDA400","0.0"],["10000","#DDA400","0.0"]]

Lt. Wiki gibt das ,,fill" an, ob eine Linie gezeichnet oder ob die Zeichnungsfläche ausgefüllt werden soll – hier also wie gewünscht ,,fill"!
Im folgenden Array steht die ,,-20" für den Datenwert!? Was ist das für ein Wert?
Soll in dem Beispiel der Wertebereich von -20 bis 0 (2. Array) rot befüllt werden oder stehen die ersten Werte im Array für etwas anderes? Da gibt es bei mir erhebliche Defizite!
Das Gleiche gilt für die Array 3 und 4 im Therm: Soll von 0 bis 10000 die Funktion nicht mit der Farbe (hier orange=DDA400) gefüllt werden, da die Transparenz mit Null eingestellt ist. Ändere ich die 0.0 in 1.0 müsste doch dann die Fläche ausgefüllt werden?

Bin ich auf dem Holzweg?
Danke für eure evlt. Nachhilfe!
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

eki

#647
Das Ganze ist doch recht ausführlich im Wiki beschrieben. Egal, es funktioniert folgendermaßen:

Das Argument von data-style muss ein Array sein (also in [] eingeschlossen werden).
Das Array enthält als ersten Wert eine Anweisung, ob nur Linien gezeichnert werden sollen (dann muss das eine Zahl sein, die dann die Dicke der Linie darstellt)
oder einen String ("fill") der dann eben sagt, dass die Fläche (was Fläche in Deinem Fall bedeutet erkläre ich später auch noch) gefüllt werden soll.
Danach kommen in dem äußeren Array noch mal Arrays, die aus jeweils 3 Werten bestehen und zwar immer einem Grenzwert (der bezieht sich auf die Y-Achseneinteilung des zugehörigen Graphen), einer Farbe und einer "Durchsichtigkeit" zwischen 0 und 1 (0 heißt durchsichtig, 1 heißt deckend).
Diese Werte werden beim Einfärben folgendermaßen benutzt: Es wird immer der Y-Bereich zwischen einem Wert und dem Nächsten fließend zwischen der Farbe und der Durchsichtigkeit des Arrays und der Farbe und Durchsichtigkeit des nächsten Arrays eingefärbt.
In Deinem Fall ist das also so (Du hast übrigens eine Änderung zu meinem Teil gemacht, bei Dir ist die zweite Farbe nicht rot sondern blau, bei mir waren bewüßt beide rot): Von einem Minimalwert (den hatte ich einfach willkürlich mal auf -20 gesetzt und er sollte so klein sein, dass er durch die Daten in Deinem Graphen nie erreicht wird) bis zu 0 wird in meinem Fall alles gleichmäßig flächendeckend rot eingefärbt (in Deinem Fall würde das kontinuierlich von rot nach blau mit allen Zwischentönen eingefärbt werden). Da der Wert 0 dann auch im nächsten Array vorkommt, wird ab 0 direkt ohne Übergang (zwischen 0 und 0 gibt es ja nichts zu interpolieren) mit der nächsten Farbe (orange #DDA400) und der Durchsichtigkeit 0 (also komplett durchsichtig) begonnen und das geht so weiter bis zu einem sehr hohen Wert (willkürlich von mir auf 10000 gestzt, sollte wieder so groß sein, dass er höher als alle möglichen Y-Werte ist), also für den Rest des Plots.
Die Linie wird also von -20 (eigentlich sollte das heißen von minus unendlich) bis 0 rot gefüllt und ab da durchsichtig bis zu 10000 (eigentlich plus unendlich).

Jetzt zum Columnspec Wert. Es gibt die Mögichkeit zwei normale Columnspec Definitionen in ein Array zu schreiben. Wenn das Chart solche eine Definition vorfindet, dann wird der Graph folgendermaßen gebildet: Es wird eine Linie entsprechend dem ersten Ausdruck gezeichnet und daran dann eine zweite Linie in umgekehrter Reihenfolge eintsprechend dem zweiten Ausdruck hinten dran gehängt dadurch entsteht ein Graph, der eine geschlossene Fläche mit dem ersten Ausdruck als eine Begrenzung und dem zweiten Ausdruck als zweite Begrenzung bildet. Wenn dann noch eine Füllung angegeben wird, dann wird eben zwischen diesen beiden Linien gefüllt (im Wiki is das ein Schlauch zwischen Minimal- und Maximalwert der Temeraturvorhersage).
In Deinem Fall ist der errste Ausdruck ganz normal Deine Kurve. Der zweite Ausdruck ist auch die Kurve allerdings bei 0 abgeschnitten (das kommt durch die Zusaztfunktion in der Columnspec. Der Ausdruck $fld[3]<0?0:$fld[3] bedeutet, dass der Funktionswert (die 4 Spalte des Inputs, blöderweise beginnt das Array was hier zu Grunde liegt bei 0 und nicht wie am Anfang der Columnspec bei 1 (das habe ich aber nicht zu verantworten)) wenn er kleiner als 0 ist auf 0 gesetzt wird, und ansonsten eben auf den Funktionswert. Dadurch entsteht eine Kurve, die unten durch die 0 begrenz wird und oben eben die Datenwerte darstellt und zwischen diesen Werten wird gefüllt.

So, das war jetzt etwas länglich, hat aber hoffentlich mehr geklärt als verwirrt ;)

uron

#648
Huuii eki, jetzt hast du dir aber viel Mühe gegeben!
Aber, noch klemmt es bei mir:
Ich hatte natürlich in dem Wiki gelesen und glaubte zunächst, die Syntax wie folgt zu verstehen - ich beschreib es mal mit meinen - vielleicht - unfachmännischen Worten:

  • zu Beginn des äußeren Arrays steht die Liniendicke oder ein String (hier "fill") - das hast du bestätigt
  • dann folgen die ersten beiden "inneren" Arrays: Die ersten beiden beschreiben den unteren (-20) und oberen (0) Grenzwert der Funktion, die mit einer Farbe (hier rot) mit der Durchsichtigkeit  "1.0" gefüllt wird
  • danach dann die zwei weiteren Arrays, die wiederum den unteren (0) und oberen (10000) Grenzwert der gleichen Funktion, mit der Farbe (hier #DDA400=orange) mit der Durchsichtigkeit "0.0" befüllt wird - im Ergebnis also keine Füllung, da volle Transparenz
  • Mit diesen Annahmen habe ich dann alle möglichen Farben und Werte getestet, es ergaben sich aber keine Änderungen. Als Testszenario wollte ich damit dann die Werte >0 der Funktion mit orange befüllen, was wie ich jetzt erfahren habe, so nicht funktioniert
  • es kommt also noch die Definition in Columnspec zum Tragen - und nun klemmt es genau an dieser Stelle, da die Syntax nun nicht gerade etwas für Dummies ist
Brauche ich für das Testszenario (Fläche unter der Funktion mit den Werten >0 = orange) jetzt noch eine zusätzliche Funktion im Columnspec so in der Art "4:powerfox.power.*:0:$fld[3]>0?0:$fld[3]". Im Test klappt das so leider nicht, wahrscheinlich muss ich dann auch noch im date-style etwas ändern?

Ich hab das jetzt kurzer Hand mal getestet und auch die Zeile zu data-style
data-columnspec='["4:powerfox.power.*","4:FBDECT_FritzBox_08761_0489668.power.*",["4:powerfox.power.*","4:powerfox.power.*:0:$fld[3]<0?0:$fld[3]"],["4:powerfox.power.*","4:powerfox.power.*:0:$fld[3]>0?0:$fld[3]"]]'
data-style='["ftui l0","ftui l4",["fill",["-200","#ff0000","1.0"],["0","#ff0000","1.0"],["0","#DDA400","0.0"],["10000","#DDA400","0.0"]],["fill",["-200","#ff0000","0.0"],["0","#ff0000","0.0"],["0","#DDA400","1.0"],["10000","#DDA400","1.0"]]]'
data-ptype='["lines","lines:0","lines","lines"]'
data-uaxis='["secondary","primary","secondary","secondary"]'

Ich glaube, ich bin dank deiner Erläuterungen jetzt auf dem richtigen Weg!
Leider beginnt das Befüllen der Funktion >0 mit der Farbe "orange" erst bei ca. 130 - da fehlt jetzt noch ein Input!

Nachtrag von Montag, 26.4.: Interessanterweise liegt der genannte Wert (alt: ~130) heute Morgen bei ca. 70!
Nachtrag 2 vom Montag, 26.4.: Das schein aber Datenabhängig zu sein, siehe Grafik einige Stunden später:
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

eki

Was hat Dir denn an meinem Vorschlag nicht gefallen? Du brauchst, um das mit der Füllung unter 0 zu realisieren, nur 2 Graphen. Der erste ist einfach der, den Du vorher schon hattest. Der zweite (der sollte am Anfang gezeichnet werden als als letztes in der Reihenfolge stehen, die Graphen werden immer von hinten nach vorne in der Definition gezeichnet) ist der mit den zwei Linien, so wie ich es angegeben habe. Warum Du da noch einen vierten dazubaust habe ich nicht so ganz verstanden.

Nochmal zu den data-style Arrays. Es kann soviele innere Arrayelemente geben wie Du willst, Wenn du einen harten Übergang an einem bestimmten Wert haben willst, dann brauchst Du mindestens 4 Array Elemente (eines von "minus undendlich" eines das die "linke Seite" für den Übergangspunkt definiert (also das Ende der Einstellungen für Werte kleiner als der Überganspunkt) eines für die "rechte Seite" (also von dem Übergangspunkt hin zu größeren Werten) und eines für "plus unendlich". Unten mal ein paar Beispiele (Bilder sagen mehr als Worte ;))

uron

#650
Danke eki für deine Geduld, aber ich glaube, wir diskutieren aneinander vorbei!
Das mit den Übergängen habe ich glaube ich verstanden und es hat ja auch funktioniert.
Die Aufgabenstellung war ja, dass alle Werte unterhalb der orangenen Funktion, die <0 sind, rot zu füllen sind - klappt Dank deiner Hilfe.

Um mein neu gewonnenes Verständnis der Syntax auszutesten, hatte ich zusätzlich versucht, alle Werte unterhalb der orangenen Funktion, die >0 sind, orange zu befüllen. Da komme ich -wenn ich es richtig verstehe - doch nicht mit weiteren Arrays hin, da unter
data-columnspec='["4:powerfox.power.*","4:FBDECT_FritzBox_08761_0489668.power.*",["4:powerfox.power.*","4:powerfox.power.*:0:$fld[3][b]<0[/b]?0:$fld[3]"]]'
doch nur Werte <0 selektiert sind. Oder interpretiere ich das falsch?
Deshalb hatte den vierten dazu gebaut!
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

eki

#651
...tssss auf was für Ideen Du so alles kommst. Ich hoffe ich habe Dich jetzt verstanden, probiers mal damit.


data-columnspec='["4:powerfox.power.*","4:FBDECT_FritzBox_08761_0489668.power.*",["4:powerfox.power.*","4:powerfox.power.*:0:$fld[3]<=0?0:$fld[3]"]]'
data-style='[["fill",["-10000","#ff0000","0.0"],["0","#ff0000","0.0"],["0","#DDA400","1.0"],["10000","#DDA400","1.0"]],"ftui l4",["fill",["-10000","#ff0000","1.0"],["0","#ff0000","1.0"],["0","#DDA400","0.0"],["10000","#DDA400","0.0"]]]'
data-ptype='["lines","lines:0","lines"]'
data-uaxis='["secondary","primary","secondary"]'
data-legend='["akt. externer Leistungsbezug [W]","akt. Solar-Ernte [W]",""]'



Das Problem mit dem Füllen nach oben ist die Art und Weise, wie die Auswahl durch die fld[... Bediningung erzeugt wird und wie das Chartwidget das dann malt (nämlich durch Pfade, die von SVG im Browser dann gemalt werden. Da Du keine Punkte hast, die genau auf null liegen, ist das dann irgendwo zwischen dem letzten über null und dem ersten unter Null interpoliert.
Was ich gemacht habe, ist einfach die normale Füllung zwischen der x-Achse und dem Graphen für den ersten Graphen zu nehmen, und über Style dann dafür zu sorgen, dass alles unter 0 durchsichtig wird.

uron

#652
Super, ich danke dir. Ich glaube, da bin ich jetzt auch mitgekommen!

Aber mal ehrlich, selbsterklärend ist das natürlich nicht und nur mit dem Wiki kommen sicher auch andere User ihre Probleme oder wo setzt das Wissen auf, was mir fehlt.
Gleiches gilt z.B. auch die das Ausfüllen der Flächen zwischen 2 Funktionen - das wär's jetzt noch, die Fläche zwischen der orangenen und der grünen Funktion, aber das ist sicher jetzt unverschämt.
Die fehlenden Wiki-Erläuterungen sind wirklich kein Vorwurf, sondern eine Erklärung für mich, dass es ohne detaillierte Doku nicht gehen konnte - aber vielleicht bin ich einer der Wenigen, denen die Basics fehlen.

Nun ja, es ist vollbracht und dazugelernt habe ich natürlich auch, Dank deiner "Nachhilfe", eki.
Vielleicht profitiert der eine oder andere User auch von deinen Beschreibungen, dafür habe ich dann gerne "hergehalten"  ;)
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

eki

#653
Das Wiki steht jedem offen, das habe ich nicht allein gemacht, sondern dazu haben auch User beigetragen. Falls Du da was ergänzen möchtest, immer ran.
Das mit dem Füllen zwischen 2 Funktionen ist ja genau das wofür die Arrays in der Columnspec gedacht waren. Wenn Du also als ein Array Element die untere und als das andere Element die obere Funktion nimmst, füllt er dazwischen.

uron

Das das Wiki offen ist, ist mir bekannt.
Sollte ich das mit der Füllung zwischen 2 Funktionen weitestgehend eigenständig hinbekommen schaue ich mal, was ich vom Erkenntnisgewinn vermitteln sollte.
Ob ich mich da unter die Cracks  - so in der Art "Chart-Widget für Dummies" - wohl fühle, sehen wir dann. Ich glaube, ich bewege mich da auf dünnem Eis.
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

ulobo60

Hallo erstmal,

ich weiß nicht, ob Sie's schon wußten, aber ... ich raff's einfach nicht!
Ich möchte gern die 7-Tage-Inzidenz-Werte von 6 Landkreisen in einem Chart darstellen - über einen zurückliegenden Zeitraum von 5 Tagen. Die RKI-Daten laufen täglich auf in meiner MySQL-logdb.

Hier das Device listing:

Internals:
   API_LAST_RES 1619838600.21242
   API__LAST_MSG 200
   DEF        https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=death_rate,cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID&returnGeometry=false&outSR=4326&f=json
   FUUID      607c7466-f33f-4a34-1ca1-2b879d6e66d190c2
   NAME       coronaSpreadCounties
   NEXT       2021-05-02 05:10:00
   NR         83
   SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=death_rate,cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID&returnGeometry=false&outSR=4326&f=json (200)
   STATE      ???
   SVN        24360 2021-04-29 21:17:23 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=death_rate,cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID&returnGeometry=false&outSR=4326&f=json
     SECRET:
   Helper:
     DBLOG:
       230sti:
         logdb:
           TIME       1619838601.51007
           VALUE      148
       64sti:
         logdb:
           TIME       1619838601.51007
           VALUE      151
       66sti:
         logdb:
           TIME       1619838601.51007
           VALUE      163
       76sti:
         logdb:
           TIME       1619838601.51007
           VALUE      133
       80sti:
         logdb:
           TIME       1619838601.51007
           VALUE      182
       95sti:
         logdb:
           TIME       1619838601.51007
           VALUE      143
   OLDREADINGS:
     2021-05-01 00:19:24   230_cases7_per_100k 159
     2021-05-01 00:19:24   64_cases7_per_100k 150
     2021-05-01 00:19:24   66_cases7_per_100k 168
     2021-05-01 00:19:24   76_cases7_per_100k 141
     2021-05-01 00:19:24   80_cases7_per_100k 194
     2021-05-01 00:19:24   95_cases7_per_100k 153
   READINGS:
     2021-04-30 13:41:01   230             159
     2021-05-01 05:10:01   230_cases       5909
     2021-05-01 05:10:01   230_cases7_per_100k 148
     2021-05-01 05:10:01   230_deaths      174
     2021-05-01 05:10:01   230_name        LK Ebersberg
     2021-05-01 05:10:01   230sti          148
     2021-04-30 13:41:01   64              150
     2021-05-01 05:10:01   64_cases        22876
     2021-05-01 05:10:01   64_cases7_per_100k 151
     2021-05-01 05:10:01   64_deaths       374
     2021-05-01 05:10:01   64_name         SK Düsseldorf
     2021-05-01 05:10:01   64sti           151
     2021-04-30 13:41:01   66              168
     2021-05-01 05:10:01   66_cases        24045
     2021-05-01 05:10:01   66_cases7_per_100k 163
     2021-05-01 05:10:01   66_deaths       546
     2021-05-01 05:10:01   66_name         SK Essen
     2021-05-01 05:10:01   66sti           163
     2021-04-30 13:41:01   76              141
     2021-05-01 05:10:01   76_cases        16124
     2021-05-01 05:10:01   76_cases7_per_100k 133
     2021-05-01 05:10:01   76_deaths       316
     2021-05-01 05:10:01   76_name         LK Rhein-Kreis Neuss
     2021-05-01 05:10:01   76sti           133
     2021-04-30 13:41:01   80              194
     2021-05-01 05:10:01   80_cases        48078
     2021-05-01 05:10:01   80_cases7_per_100k 182
     2021-05-01 05:10:01   80_deaths       638
     2021-05-01 05:10:01   80_name         SK Köln
     2021-05-01 05:10:01   80sti           182
     2021-04-30 13:41:01   95              153
     2021-05-01 05:10:01   95_cases        29325
     2021-05-01 05:10:01   95_cases7_per_100k 143
     2021-05-01 05:10:01   95_deaths       833
     2021-05-01 05:10:01   95_name         LK Recklinghausen
     2021-05-01 05:10:01   95sti           143
     2021-04-19 21:28:40   siebentage      117.0
Attributes:
   DbLogInclude .*(64sti|66sti|76sti|80sti|95sti|230sti).*
   interval   10 5 * * *
   oldreadings .*_cases7_per_100k
   readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['76', '64', '80', '66', '95', '230'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['76', '64', '80', '66', '95', '230'])]"), concat(property('attributes.OBJECTID'),'_cases'), property('attributes.cases'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['76', '64', '80', '66', '95', '230'])]"), concat(property('attributes.OBJECTID'),'_deaths'), property('attributes.deaths'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['76', '64', '80', '66', '95', '230'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), sprintf('%.0f', property('attributes.cases7_per_100k')))
   room       Corona-Status
   userReadings 230sti {ReadingsVal ("coronaSpreadCounties","230_cases7_per_100k","")*1},
64sti {ReadingsVal ("coronaSpreadCounties","64_cases7_per_100k","")*1},
66sti {ReadingsVal ("coronaSpreadCounties","66_cases7_per_100k","")*1},
76sti {ReadingsVal ("coronaSpreadCounties","76_cases7_per_100k","")*1},
80sti {ReadingsVal ("coronaSpreadCounties","80_cases7_per_100k","")*1},
95sti {ReadingsVal ("coronaSpreadCounties","95_cases7_per_100k","")*1}


Die userReadings werden in meine Datenbank übernommen - bisher sind da je Landkreis (z.B. '76sti') 2 Tageswerte enthalten.

Hier meine HTML zur Darstellung im FTUI:

<li data-row="1" data-col="1" data-sizex="14" data-sizey="12" class="">
<header><div data-type="label" class="charts_head">7-Tages-Inzidenzen von 6 ausgewählten Landkreisen</div></header>
<div data-type="chart"
data-device="coronaSpreadCounties"
data-logdevice='["myLogProxy"]'
data-columnspec='["Func:mylogProxy_my1Plot(\\x22coronaSpreadCounties\\x22,\\x2276sti\\x22)"]'
data-style='["ftui l0sym"]'
data-ptype='["lines"]'
data-uaxis='["primary"]'
data-legend='["Neuss"]'
data-height="700"
data-timeformat="dd\.\MM"
data-minvalue="0"
data-maxvalue="300"
data-daysago_start = "5"
data-daysago_end = "-1"
data-xticks="auto"
data-yticks="auto"
data-showlegend="true"
class="nobuttons">
</div>
</li>
Zwecks Test habe ich hier nur 1 Datenreihe eingegeben. Wenn erfolgreich, ergänze ich die anderen 5 Elemente.


Das 'logProxy' ist in meiner fhem.cfg enthalten.
Das proplanta-Chart (von der offiziellen 'FTUI Widget Chart'-Seite) ist in meinem FTUI2 implementiert und funktioniert seit ca. 2 Jahren (war ja auch nur STRG+C und STRG+V !).

Kann es sein, dass ich dem Chart keine "Werte bzw. Zahlen" sondern immer noch "Text" übergebe?
Ich hatte gelesen, dass ein JsonMod generell TEXT übergibt. Daher habe ich die userReadings mit ' + 0' erstellt, damit dem Chart NUMERISCHE WERTE übergeben werden.
Ist das evtl. unsinnig?
Oder liegt die Macke irgenwo anders?
Für Eure Hilfe wäre ich sehr dankbar.
3x raspi + cam-Modul mit mmal-motion - 2x raspi mit KODI - 1x raspi mit FHEM + FTUI

ulobo60

... ich habe noch ein Zusatz:

Im logfile habe ich gerade gefunden:

2021.05.01 13:34:48 1: myLogProxy: logProxy_my1Plot("coronaSpreadCounties","76sti",$from,$to,6,"day"): Undefined subroutine &main::logProxy_my1Plot called at (eval 1800) line 1.

D.h., ich muss 'my1Plot' als subroutine definieren!? Und ich dachte, dieser Ausdruck sei frei wählbar!  :-[
Könnt Ihr mir bitte sagen, wo und mit welchem Inhalt diese subroutine definiert sein muss?
3x raspi + cam-Modul mit mmal-motion - 2x raspi mit KODI - 1x raspi mit FHEM + FTUI

ulobo60

...noch ein P.P.S.:

Habe jetzt 'data-columnspec' wie folgt definiert:

data-columnspec='["Func:logProxy_proplanta2Plot(\\x22coronaSpreadCounties\\x22,\\x2276sti\\x22,$from,$to,6,\\x22day\\x22)"]'

Fehlermeldung im logfile ist weg.Aber immer noch keine Daten im Chart.
Okay, ich halte jetzt erst mal die Füße still und warte auf evtl. Antworten/Hilfestellungen.  :)
3x raspi + cam-Modul mit mmal-motion - 2x raspi mit KODI - 1x raspi mit FHEM + FTUI

ulobo60

Habe gestern einige Stunden mit dem instensiven Lesen dieses Threads verbracht. Es hat sich gelohnt.
Vor allem die Beispiele und Beschreibungen des WIKIs zum Chart-Widget (https://wiki.fhem.de/wiki/FTUI_Widget_Chart) - dort insbesondere der Abschnitt "Datenquellen" - zeigten mir, dass ich bisher auf dem falschen von 3 Erstellungswegen unterwegs war:
nicht der Weg "3. LogProxy" sondern "2. DbLog Verlaufsdaten einer Datenbank entnehmen" trifft auf meine Situation zu!
Schließlich speichere ich die für's Chart benötigten Daten ja seit 3 Tagen in meiner MySQL-Datenbank !!!

Nach dieser Erkenntnis habe ich dann dementsprechend alles neu codiert, und nun sehe ich auch erste Linien-Verläufe im Chart.
Ist noch nicht ganz fertig, bin aber wohl auf dem besten Weg.
Drohung: bei größeren Problemen melde ich mich wieder!  ;)

3x raspi + cam-Modul mit mmal-motion - 2x raspi mit KODI - 1x raspi mit FHEM + FTUI

ulobo60

Da bin ich wieder...  :)
Bei meinem 7-Tage-Inzidenz-Chart funzt technisch gesehen mittlerweile alles (siehe angehängten Screenshot)
Von der Optik her habe ich noch 2 kleinere Fragen an Euch:

1) Datenwerte
Gibt es die Chance, die Datenwerte dauerhaft je Datenpunkt an den Kurven anzeigen zu lassen?

2) MySQL
Könnte mir bitte ein Wissender für meine MySQL-DB ein REPLACE oder INSERT (o.ä.) verraten, mit dem man im TIMESTAMP die Uhrzeit manuell ändern und speichern kann? Die '23:57:47' und '14:10:20' würde ich gern in '05:10:01' umwandeln. Meine Eigenversuche mit im Netz gefundenen Codierungen sind kläglich gescheitert.
Okay: die blaue Linie ist in 4 Tagen sowieso nach links aus dem Chart gewandert. Aber so ne Funktion kann man immer mal gut gebrauchen - gerade in Testphasen.

Hierzu meine (üblichen) Datenbankfelder:

history - coronaSpreadCounties
---
| TIMESTAMP           | DEVICE               | TYPE    | EVENT      |READING|VALUE| UNIT |
| 2021-04-30 23:57:47 | coronaSpreadCounties | JSONMOD | 230sti: 159| 230sti| 159 |  |
| 2021-05-01 05:10:01 | coronaSpreadCounties | JSONMOD | 230sti: 148| 230sti| 148 |  |
| 2021-05-02 05:10:01 | coronaSpreadCounties | JSONMOD | 230sti: 141| 230sti| 141 |  |
| 2021-04-30 14:10:20 | coronaSpreadCounties | JSONMOD | 64sti: 150 | 64sti | 150 |  |
| 2021-05-01 05:10:01 | coronaSpreadCounties | JSONMOD | 64sti: 151 | 64sti | 151 |  |
| 2021-05-02 05:10:01 | coronaSpreadCounties | JSONMOD | 64sti: 151 | 64sti | 151 |  |
| 2021-04-30 23:57:47 | coronaSpreadCounties | JSONMOD | 66sti: 168 | 66sti | 168 |  |
| 2021-05-01 05:10:01 | coronaSpreadCounties | JSONMOD | 66sti: 163 | 66sti | 163 |  |
| 2021-05-02 05:10:01 | coronaSpreadCounties | JSONMOD | 66sti: 151 | 66sti | 151 |  |
| 2021-04-30 23:57:47 | coronaSpreadCounties | JSONMOD | 76sti: 141 | 76sti | 141 |  |
| 2021-05-01 05:10:01 | coronaSpreadCounties | JSONMOD | 76sti: 133 | 76sti | 133 |  |
| 2021-05-02 05:10:01 | coronaSpreadCounties | JSONMOD | 76sti: 119 | 76sti | 119 |  |
| 2021-04-30 23:57:47 | coronaSpreadCounties | JSONMOD | 80sti: 194 | 80sti | 194 |  |
| 2021-05-01 05:10:01 | coronaSpreadCounties | JSONMOD | 80sti: 182 | 80sti | 182 |  |
| 2021-05-02 05:10:01 | coronaSpreadCounties | JSONMOD | 80sti: 188 | 80sti | 188 |  |
| 2021-04-30 23:57:47 | coronaSpreadCounties | JSONMOD | 95sti: 153 | 95sti | 153 |  |
| 2021-05-01 05:10:01 | coronaSpreadCounties | JSONMOD | 95sti: 143 | 95sti | 143 |  |
| 2021-05-02 05:10:01 | coronaSpreadCounties | JSONMOD | 95sti: 142 | 95sti | 142 |  |


Schon mal Dank im Voraus - und ... Eki ... vielen, vielen Dank für Dein saugeiles Chart Widget sowie für Deine langjährige Betreuung und ständige Optimierung dieses Moduls.

3x raspi + cam-Modul mit mmal-motion - 2x raspi mit KODI - 1x raspi mit FHEM + FTUI