NEWS
Dynamisch erstellte Variablen.
-
@ptr sagte in Dynamisch erstellte Variablen.:
0_userdata.0.[etage].[raum].Timer1
Wohl eher anders herum.
0_userdata.0.Timer mit einem Objekt oder JSON
mixed-Type
-
@armilar weißt Du warum Timer in dieser getrennten Form nicht funktioniert? Ist mir schleierhaft. Habe sogar das Skript aufgedoppelt und je eines pro Raum eingesetzt (also z.B. im Skript NUR Minas_Zimmer Auswahl möglich)-> das gleiche Ergebnis.... der Timer bleibt nicht bei seinem Raum, sondern geht immer auf den letzten Trigger... Wo hängen die Timer also zusammen??
-
puh, da muss man das ganze skript restrukturieren.
das skript soll doch für verschiedene räume gleich funktionieren,
allerdings ist da generischer und raumspezifischer code gemischt.
ausserdem würde ich einzelne funktionalitäten in eigene funktionen auslagern.
so ist das schwer lesbar. also geht schon, ist aber aufwändig und damit auch wieder fehleranfälligwas mir auf die schnelle aufgefallen ist:
also immer wenn jemand play drückt, dann sollen die standard lautstärken gesetzt werden?
und dann noch zusätzlich wenn schlummern gesetzt ist, die lautstärke nach und nach runtergefahren werden.
das sind für mich 2 unabhängige funktionen, die man auch über separate trigger ansteuert.
wobei minas_zimmer_schlummern nirgends gelesen wird oder ich habs übersehen -
Weil ioBroker das so nicht vorgesehen hat und weil es auch keinen Sinn ergeben würde...
Beispiel:
Du legst einen Datenpunkt ("0_userdata.0.haus") an. Dieser Datenpunkt soll zum Beispiel ein komplettes JSON-Objekt aufnehmen, wie z.B. das nachfolgende (nur exemplarisch):[ { "etage":{ "EG":[ { "zimmer":"Wohnzimmer", "anwesend":true, "bewegung":true, "sonos_ip": "192" }, { "zimmer":"Hobbyraum", "anwesend":false, "bewegung":true, "sonos_ip": "174" } ] } }, { "etage":{ "OG":[ { "zimmer":"Yunes", "anwesend":false, "bewegung":false, "sonos_ip": "203" }, { "zimmer":"Mina", "anwesend":true, "bewegung":true, "sonos_ip": "188" } ] } } ]
und exakt das schreibst du in den Datenpunkt...
Diese JSON lassen sich in Blockly, JavaScript oder TypeScript erstellen und auch wieder einlesen oder verändern...
Siehst du die Objektstruktur und Tiefe? Kann auch erweitert werden
Andererseits könntest du das gleiche auch als Einzelobjekte unter 0_userdata.haus anlegen. Und auf diese entsprechend eine Logik aufbauen.
Deshalb sage ich schon seit einer Weile... Schreibe mal alle Anforderungen zusammen. Danach ist es in der Regel ein Kinderspiel... also wenn du sie dann auch noch mitteilst, wäre es ein Traum...
-
Noch ein Beispiel in tieferer Objekt-Struktur mit zusätzlicher Lautstärke:
[ { "etage":{ "EG":[ { "zimmer":{ "Wohnzimmer":[ { "anwesend":true, "bewegung":true, "lautstaerke":22, "sonos_ip":"192" } ] } }, { "zimmer":{ "Hobbyraum":[ { "anwesend":false, "bewegung":true, "lautstaerke":18, "sonos_ip":"174" } ] } } ] } }, { "etage":{ "OG":[ { "zimmer":{ "Yunes":[ { "anwesend":false, "bewegung":false, "lautstaerke":12, "sonos_ip":"203" } ] } }, { "zimmer":{ "Mina":[ { "anwesend":true, "bewegung":true, "lautstaerke":10, "sonos_ip":"188" } ] } } ] } } ]
-
ok, er scheint das Interesse verloren zu haben.
-
hmm, sehe ich auch so
-
dann kann ich ja endlich diesen Thread kapern
ich habe nichts verstanden, nur der Titel entspricht einem lang gehegten Wunsch von mir.
ich würde gerne eine Liste einer Variablen zuweisen, deren Name dynamisch erzeugt werden soll.
Idee gehört hier in den Thread: https://forum.iobroker.net/post/826534so sol die Liste so lange erweitert werden, wie die Daten zu einer Flugnummer gehören, falls mehrere Flüge im Beobachtungsfenster sind, sollen die Daten jeweils der richtigen Liste zugeordnet werden. Die Variable sollte deshalb möglichst der Flugnummer entsprechen.
So ganz zu Ende gedacht ist die Idee noch nicht, ich bastel meist nach trial & error.
Die Kernfrage ist erst einmal kann ich prinzipiell so Variablen erstellen (und nach Benutzung wieder löschen)?
-
@homoran sagte in Dynamisch erstellte Variablen.:
Die Kernfrage ist erst einmal kann ich prinzipiell so Variablen erstellen
Natürlich nicht... Aber du kannst jederzeit einer Variable ein Objekt unterjubeln...
Der Titel ist definitiv nicht sinnvoll benannt, auch wenn es ein langersehnter Wunsch von dir ist
-
@homoran sagte in Dynamisch erstellte Variablen.:
Idee gehört hier in den Thread
Das könnte man aber doch mal zu Ende bringen.
-
@armilar sagte in Dynamisch erstellte Variablen.:
@homoran sagte in Dynamisch erstellte Variablen.:
Die Kernfrage ist erst einmal kann ich prinzipiell so Variablen erstellen
Natürlich nicht... Aber du kannst jederzeit einer Variable ein Objekt unterjubeln...
Der Titel ist definitiv nicht sinnvoll benannt, auch wenn es ein langersehnter Wunsch von dir ist
Danke!
Auch wenn es nicht das ist was ich hören wollte. Immerhin erklärt es warum ich vergeblich versucht hatte "mein" Thema darin zu finden.Mit einer dynamisch benannten Variable hätte ich mich nur einfacher getan. Ich weiß ja nicht einmal wie man ein Objekt unterjubelt, geschweige denn wie ich relativ einfach prüfe in welche Variable ich schreiben müsste.
Danke!
-
Sehr gerne.
Daher war mein Anliegen in diesem Topic ja auch, die Anforderungen zu finden um eine
Ich würde dir gerne bei einer "Lösung" helfen, die wahrscheinlich komplett anders aussieht. Dazu brauchen wir aber die komplette Anforderung an die Lösung. Nicht das Problem...
Lösung zu denken, die funktioniert
Edit: Evtl. Code der sich selbst schreibt, aber ich denke das geht jetzt doch etwas zu weit
-
@homoran sagte: Die Kernfrage ist erst einmal kann ich prinzipiell so Variablen erstellen (und nach Benutzung wieder löschen)?
Nein. Ausweg: Array mit Objekten
const obj = {Flugnummer: 'LH123', weitere_Attribute: 'abc'}
Dann in einer Schleife die Objekte einlesen und die Flugnummer vergleichen.
-
@paul53 sagte:
@homoran sagte: Die Kernfrage ist erst einmal kann ich prinzipiell so Variablen erstellen (und nach Benutzung wieder löschen)?
Nein. Ausweg: Array mit Objekten
const obj = {Flugnummer: 'LH123', weitere_Attribute: 'abc'}
Dann in einer Schleife die Objekte einlesen und die Flugnummer vergleichen.
und genau solche komplexen Konstrukte wollte ich umgehen!
weil:
ich will es selber schaffen!
ich weiß dass du immer gerne hilfst! Aber du hast keine Ahnung wie es mich ärgert dass ich es nicht (mehr) selber kann.Schleifen kommen noch genug.
Dein Versuch mit dem speichern im Datenpunkt hatte nicht zuverlässig geklappt, daher muss alles über Variablen laufen und erst zum Schluss geschrieben werden.Im Moment habe ich den Beobachtunggsrahnen so klein wie möglich gestellt. Was aber andere "Probleme" mit sich bringt.
Das sollten wir dann aber wieder im alten Thread fortsetzen
ich würde diesen Teil dann rüberschieben.
-
@paul53
Nur mal so interessehalber, da ich ja von JS noch nicht so wirklich Plan habe:
Die "Objekte" von denen ihr hier sprecht ... kann ich die mitrecord
oderstruct
vergleichen?
Für ein lebendes "Objekt" fehlt mir hier igendwie die Instanziierung.Oder bin ich da (mal wieder) komplett auf dem Holzweg?
-
@homoran sagte in Dynamisch erstellte Variablen.:
Die Kernfrage ist erst einmal kann ich prinzipiell so Variablen erstellen (und nach Benutzung wieder löschen)?
ja klar
var flights={}; //initialisieren der Hauptvariable, die alles enthält var flightnumber1="ab1234"; //schlüssel1 var flightnumber2="cd5678"; //schlüssel2 //zuweisen von daten flights[flightnumber1]="Meine Informationen 1"; // dies können einfache skalare Daten sein, aber auch wieder ein array oder ein Objekt. Eine Verschachtelung kann beliebig tief erfolgen flights[flightnumber2]={name: "Ich bin ein Objekt"}; console.log(flights); //ausgabe der daten auf der console zum prüfen //löschen der daten delete flights[flightnumber1]; //löschen der daten mit dem schlüssel flugnummer1 console.log(flights);
die flugnummer müssen eindeutig sein, da man ansonsten die alten daten wieder überschreiben würde.
-
@oliverio neee,
Danke, aber nicht so rum.
der Variablenname soll dynamisch sein, also statt Flugnummer1 -> varRYR123
und der sollen dann die Liste mit den JSON (timestamp, flugnummer, lat, long, height) zu dem Flug zugeordnet werden.die Variable wird eine Lebensdauer von wenigen Minuten (Überflugzeit) haben.
Deine Variante mit 2-3 vordefinierten Variablen hatte ichvauch schon überlegt, alletdings keine Ahnung, wie ich diese blocken kann während sie in Nutzung ist um so lange #2 oder #3 zu nutzen (rollierend)
efit: hast du was geändert?
-
@homoran
In anderen Sprachen würde ich dafür eine Collection nehmen.
Aber in JS stehe ich mindestens genau so auf dem Schlauch wie Du -
@codierknecht sagte in Dynamisch erstellte Variablen.:
kann ich die mit recordoder struct vergleichen?
Records und Tuples, wenn @Homoran denn mindestens eine Variable zuässt
let myRecord = #{ a: 1, b: 2, c: 2}; let recordKeys = Object.keys(myRecord); // Returns ['a', 'b', 'c'];
let myTuple = #[1, 2, 3, 4, 5]; for(const i of myTuple) { console.log(i); }
-
@homoran
und woher kommt die information wie die flugnummer genau lautet? die musst du ja in eine variable speichern, die dann weiterverwendet wird.
die beiden flugnummern habe ich nur beispielhaft vordefiniert, damit es klarer wird.
wenn du wiederverwendbaren code hast, dann hast du da nur eine variablehier ein bisschen besser strukturierter code
var flights={}; //initialisieren der Hauptvariable, die alles enthält addData("ab1234","Meine Informationen 1"); addData("cd5678",{name: "Ich bin ein Objekt"}); console.log(flights); deleteData("ab1234"); console.log(flights); function addData(flightnumber,data) { flights[flightnumber] = data; } function deleteData(flightnumber) { delete flights[flightnumber]; }