NEWS
Button verstecken aus JSON Angaben (gelöst)
-
Hallo zusammen
Ich habe den Countdown Adapter bei mir installiert und mehrer Termine schon eingetragen.
Auf der Visu zeigt es mir immer an wie lange es nocht geht bis zum Termin. Dies erfolgt über JSON.
Jetzt wollte ich einen Button "verstecken" wenn noch mehr als 2 Tage sind bis zum Termin.Wie kann man das realisieren?
Die JSON Datei sieht folgendermassen aus:
[["Ostern"," 19 Tage 17 Stunden 55 Minuten",19,473,2,"16.04.2022 07:00"],["Frühling"," 1 Monat 16 Tage",47,1145,6,"14.05.2022 07:00"],["Sommer"," 3 Monate 18 Tage",110,2657,15,"16.07.2022 07:00"]]Funktioniert das über Blockly oder wie würdet ihr das machen?
-
Hallo zusammen
Ich habe den Countdown Adapter bei mir installiert und mehrer Termine schon eingetragen.
Auf der Visu zeigt es mir immer an wie lange es nocht geht bis zum Termin. Dies erfolgt über JSON.
Jetzt wollte ich einen Button "verstecken" wenn noch mehr als 2 Tage sind bis zum Termin.Wie kann man das realisieren?
Die JSON Datei sieht folgendermassen aus:
[["Ostern"," 19 Tage 17 Stunden 55 Minuten",19,473,2,"16.04.2022 07:00"],["Frühling"," 1 Monat 16 Tage",47,1145,6,"14.05.2022 07:00"],["Sommer"," 3 Monate 18 Tage",110,2657,15,"16.07.2022 07:00"]]Funktioniert das über Blockly oder wie würdet ihr das machen?
Nun ich gehe mal davon aus, dass die mittlere Zahl die Anzahl der Stunden bis zum Termin sind. Die brauchst doch nur rausziehen und abprüfen, ob die kleiner als 48 Stunden ist. Damit steuerst dann einen selbst erstellten Datenpunkt mit true oder false und setzt damit die Sichtbarkeit Deines Buttons:

Die Elemente in den Arrays sind wieder Arrays und dort das 4. Element - also Index 3.
In NR könnte man das mit folgendem kleinen Flow erreichen:

oder Du nimmst halt JS - musst halt nur den JSON mit parse in ein Array transferieren und dann in input speichern:
var str = '[["Ostern"," 19 Tage 17 Stunden 55 Minuten",19,473,2,"16.04.2022 07:00"],["Frühling"," 1 Monat 16 Tage",47,1145,6,"14.05.2022 07:00"],["Sommer"," 3 Monate 18 Tage",110,2657,15,"16.07.2022 07:00"]]'; var input = JSON.parse(str); result = (input.map(v => v[3] <= 48 ? true : false)).reduce((t,v) => v || t);Puzzeln tue ich nicht, aber Du kannst ja JS Funktionen in Blockly einbinden.
Hab das sogar gepackt - die Funktion in ein Puzzle zu packen:


Nun aber genug gepuzzelt. ;)
-
Nun ich gehe mal davon aus, dass die mittlere Zahl die Anzahl der Stunden bis zum Termin sind. Die brauchst doch nur rausziehen und abprüfen, ob die kleiner als 48 Stunden ist. Damit steuerst dann einen selbst erstellten Datenpunkt mit true oder false und setzt damit die Sichtbarkeit Deines Buttons:

Die Elemente in den Arrays sind wieder Arrays und dort das 4. Element - also Index 3.
In NR könnte man das mit folgendem kleinen Flow erreichen:

oder Du nimmst halt JS - musst halt nur den JSON mit parse in ein Array transferieren und dann in input speichern:
var str = '[["Ostern"," 19 Tage 17 Stunden 55 Minuten",19,473,2,"16.04.2022 07:00"],["Frühling"," 1 Monat 16 Tage",47,1145,6,"14.05.2022 07:00"],["Sommer"," 3 Monate 18 Tage",110,2657,15,"16.07.2022 07:00"]]'; var input = JSON.parse(str); result = (input.map(v => v[3] <= 48 ? true : false)).reduce((t,v) => v || t);Puzzeln tue ich nicht, aber Du kannst ja JS Funktionen in Blockly einbinden.
Hab das sogar gepackt - die Funktion in ein Puzzle zu packen:


Nun aber genug gepuzzelt. ;)
@mickym Danke für die vielen tollen Aufzeichnungen. Aber ich bin nicht so visiert auf Java zu programmieren und für mich ist der gross Teil von dir gerade mehr Bahnhof als das ich das einfach verstehen könnte.
-
@mickym Danke für die vielen tollen Aufzeichnungen. Aber ich bin nicht so visiert auf Java zu programmieren und für mich ist der gross Teil von dir gerade mehr Bahnhof als das ich das einfach verstehen könnte.
@stefu87_ch Ich hab Dir doch sogar die Funktion hier in ein Blockly gepackt. hier mal zum Import - kannst ja mal versuchen:
-
@stefu87_ch Ich hab Dir doch sogar die Funktion hier in ein Blockly gepackt. hier mal zum Import - kannst ja mal versuchen:
@mickym Das hab ich soweit verstanden, ich frage mich nun, was mache ich mit dem debug Output? Muss da was verknüpft werden?
-
@mickym Das hab ich soweit verstanden, ich frage mich nun, was mache ich mit dem debug Output? Muss da was verknüpft werden?
@stefu87_ch Bis auf einen Logikfehler dass ich <48 und nicht <= 48 abprüfen müsste.
Ich zeigs Dir trotzdem mal anhand von Node-Red - aber geht mit den anderen genauso.
Wenn Du den JSON String parsed - ergibt das ein Array mit jedem Termin als weiteres Array. Innerhalb eines Array ist das 4. Element (Index=3) die Anzahl an Stunden:

Sobald ein Termin unter 48 Stunden ist - ergibt sich ein true, sonst ein false.
Du legst also einen Datenpunkt an und schreibst das Ergebnis dieses Blocklies, Flows oder JS in diesen Datenpunkt. Diesen gibst Du dann in Deinem Button unter Sichtbarkeit ein, wie in dem Screenshot. Ist ein Termin unter 48 Stunden steht in dem Datenpunkt true und Dein Button ist sichtbar.

Also einfach das Ergebnis dieses Blocklies in den Datenpunkt sichtbarkeit schreiben. Falls ein Termin innerhalb von 48 Stunden fällig ist, wird true in den Datenpunkt geschrieben, anderenfalls false.
-
@stefu87_ch Bis auf einen Logikfehler dass ich <48 und nicht <= 48 abprüfen müsste.
Ich zeigs Dir trotzdem mal anhand von Node-Red - aber geht mit den anderen genauso.
Wenn Du den JSON String parsed - ergibt das ein Array mit jedem Termin als weiteres Array. Innerhalb eines Array ist das 4. Element (Index=3) die Anzahl an Stunden:

Sobald ein Termin unter 48 Stunden ist - ergibt sich ein true, sonst ein false.
Du legst also einen Datenpunkt an und schreibst das Ergebnis dieses Blocklies, Flows oder JS in diesen Datenpunkt. Diesen gibst Du dann in Deinem Button unter Sichtbarkeit ein, wie in dem Screenshot. Ist ein Termin unter 48 Stunden steht in dem Datenpunkt true und Dein Button ist sichtbar.

Also einfach das Ergebnis dieses Blocklies in den Datenpunkt sichtbarkeit schreiben. Falls ein Termin innerhalb von 48 Stunden fällig ist, wird true in den Datenpunkt geschrieben, anderenfalls false.
@mickym Ich denke mal, das dies sicher falsch ist, aber ich steh gerade massiv auf dem Schlauch und entschuldige mich auch dafür das ich das nicht so ganz deutlich verstehe.

-
@mickym Ich denke mal, das dies sicher falsch ist, aber ich steh gerade massiv auf dem Schlauch und entschuldige mich auch dafür das ich das nicht so ganz deutlich verstehe.

@stefu87_ch Nee nichts mit false machen, sondern das Ergebnis der Function einfach mit aktualisiere in Deinen Datenpunkt schreiben. Also nicht falls ....

Also so das Debug kannst ja dann wegschmeissen.
-
@stefu87_ch Nee nichts mit false machen, sondern das Ergebnis der Function einfach mit aktualisiere in Deinen Datenpunkt schreiben. Also nicht falls ....

Also so das Debug kannst ja dann wegschmeissen.
@mickym Ich denke so habe ich das auch falsch verstanden oder:

-
@mickym Ich denke so habe ich das auch falsch verstanden oder:

@stefu87_ch Habe es gerade gepostet. ;)
Testen kannst Du in dem Du einfach mal die Stunden manuell auf unter 48 setzt.
Also statt:
[["Ostern"," 19 Tage 17 Stunden 55 Minuten",19,473,2,"16.04.2022 07:00"],["Frühling"," 1 Monat 16 Tage",47,1145,6,"14.05.2022 07:00"],["Sommer"," 3 Monate 18 Tage",110,2657,15,"16.07.2022 07:00"]]machst einfach aus den 473 mal eine 47, dann sollte true rauskommen und in dem Datenpunkt true stehen
[["Ostern"," 19 Tage 17 Stunden 55 Minuten",19,47,2,"16.04.2022 07:00"],["Frühling"," 1 Monat 16 Tage",47,1145,6,"14.05.2022 07:00"],["Sommer"," 3 Monate 18 Tage",110,2657,15,"16.07.2022 07:00"]] -
@stefu87_ch Habe es gerade gepostet. ;)
Testen kannst Du in dem Du einfach mal die Stunden manuell auf unter 48 setzt.
Also statt:
[["Ostern"," 19 Tage 17 Stunden 55 Minuten",19,473,2,"16.04.2022 07:00"],["Frühling"," 1 Monat 16 Tage",47,1145,6,"14.05.2022 07:00"],["Sommer"," 3 Monate 18 Tage",110,2657,15,"16.07.2022 07:00"]]machst einfach aus den 473 mal eine 47, dann sollte true rauskommen und in dem Datenpunkt true stehen
[["Ostern"," 19 Tage 17 Stunden 55 Minuten",19,47,2,"16.04.2022 07:00"],["Frühling"," 1 Monat 16 Tage",47,1145,6,"14.05.2022 07:00"],["Sommer"," 3 Monate 18 Tage",110,2657,15,"16.07.2022 07:00"]]@mickym Krieg ich eine warnung:

-
@mickym Krieg ich eine warnung:

@stefu87_ch Hier ich exportiere es Dir nochmal komplett:
Den Datenpunkt habe ich direkt unter 0_userdata.0 erstellt -also unter 0_userdata.0.sichtbarkeit
bei mir kommt einmal true oder false raus:

Ich bin aber kein Blockly Spezialist - wenn das bei Dir nicht funktioniert und bei mir schon, dann muss das wohl ein Blockly Spezi Dir helfen. Ich bin eher NodeRed Fan. ;)
-
@stefu87_ch Hier ich exportiere es Dir nochmal komplett:
Den Datenpunkt habe ich direkt unter 0_userdata.0 erstellt -also unter 0_userdata.0.sichtbarkeit
bei mir kommt einmal true oder false raus:

Ich bin aber kein Blockly Spezialist - wenn das bei Dir nicht funktioniert und bei mir schon, dann muss das wohl ein Blockly Spezi Dir helfen. Ich bin eher NodeRed Fan. ;)
@mickym Hab jetzt deinen neuen Aktuellen Code genommen und jetzt funktioniert er auch bei mir.
-
@mickym Hab jetzt deinen neuen Aktuellen Code genommen und jetzt funktioniert er auch bei mir.
@stefu87_ch So und nun noch unter Deinem Button - den Sichtbarkeitspunkt entsprechend angeben und einfach mal die 473 in 47 eingeben und umgekehrt. Den JSON String liest Du natürlich aus Deinem Datenpunkt ein.
Ach und in der Function noch das kleiner gleich in kleiner ändern:

-
@stefu87_ch So und nun noch unter Deinem Button - den Sichtbarkeitspunkt entsprechend angeben und einfach mal die 473 in 47 eingeben und umgekehrt. Den JSON String liest Du natürlich aus Deinem Datenpunkt ein.
Ach und in der Function noch das kleiner gleich in kleiner ändern:

@mickym sagte in Button verstecken aus JSON Angaben:
einfach mal die 473 in 47 eingeben und umgekehrt
Das habe ich noch nicht ganz verstanden, wo ich das eingeben muss.
Aber das ist ja ein Textfeld. Wie wird den das aktualisiert?

-
@mickym sagte in Button verstecken aus JSON Angaben:
einfach mal die 473 in 47 eingeben und umgekehrt
Das habe ich noch nicht ganz verstanden, wo ich das eingeben muss.
Aber das ist ja ein Textfeld. Wie wird den das aktualisiert?

@stefu87_ch Du kannst doch den manuell verändern und statt der 473 die 3 löschen aus dem Text.
Das wird auch nicht aktualisiert, sondern ich habe doch Dein Beispiel genommen. Du wirst natürlich den Inhalt Deines Datenpunktes der den JSON String enthält in die Variable JSON zuweisen.Also bei Dir wird es statt dem Textfeld dann irgendwie so aussehen:

Ich weiß ja nicht in welchem Datenpunkt DEin JSON String steht. Ich habe nur an dem Text Deines Beispiels getestet, ob der Sichtbarkeits-Datenpunkt true und false ausgibt.
-
@stefu87_ch Du kannst doch den manuell verändern und statt der 473 die 3 löschen aus dem Text.
Das wird auch nicht aktualisiert, sondern ich habe doch Dein Beispiel genommen. Du wirst natürlich den Inhalt Deines Datenpunktes der den JSON String enthält in die Variable JSON zuweisen.Also bei Dir wird es statt dem Textfeld dann irgendwie so aussehen:

Ich weiß ja nicht in welchem Datenpunkt DEin JSON String steht. Ich habe nur an dem Text Deines Beispiels getestet, ob der Sichtbarkeits-Datenpunkt true und false ausgibt.
@mickym Funktioniert.
Vielen Dank trotz allem, das du mich so kräftig unterstützt hast. -
@mickym Funktioniert.
Vielen Dank trotz allem, das du mich so kräftig unterstützt hast.@stefu87_ch Na das freut mich und das mit mir - als Puzzle-Legastheniker. ;)
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