NEWS
Wie kann ich in TypeScript "Variablen zusammenfassen"
-
Hallo zusammen
ich bin noch recht neu was die Erfahrungen mit TypScript angeht und habe daher eine (vermutlich) recht einfache Frage bei der ich aber nicht weiterkomme:
Und zwar möchte ich gern in einer "Hauptvariablen" (A) mehrere "Untervariablen" (a,b,c,...) zusammenfassen und diese dann über die "Punktnotation" aufrufen und verarbeiten.
Also zB. würde ich gern über "console.log(A.c)" den Inhalt der Variable c (welche unter "A" gruppiert ist) ausgeben.
Bei Matlab gibt es dafür den Variablentyp "Strukturvariable" - das ist halt sehr praktisch wenn die Variablen (a,b,c,...) immer gleich heißen - dann kann man die über die übergeordnete Variable unterscheiden und muss nicht so viele unterschiedliche Variablennamen erfinden
Ich würde mich freuen wenn mir jemand einen "Startpunkt" geben kann von wo aus ich dann weiterkomme - oder vlt auch ein kleines Minimalbeispiel?
Vielen Dank
-
@m_aus_b das ist einfach ein Objekt in Javascript
-
@haus-automatisierung Hallo Matthias
Vielen Dank für deine schnelle Antwort das es hier in Richtung Objekt geht hab ich mir schon gedacht - daher ist hier ja auch TS "die richtige" Sprache denke ich.
Ich hab auch schon mit dem Typ "class" ein bisschen rumgespielt, aber so richtig ist das noch nicht das was ich brauche (glaube ich). Ich könnte mir zwar eine Klasse mit verschiedenen Parametern definieren, allerdings benötige ich dann doch für jede "Klasse" eine eigene Definition weil ich immer unterschiedlich viele Parameter je Klasse habe (wovon viele Parameter aber den gleichen Namen haben). Und ich will ja nicht Parameter in einer Klasse definieren die ich gar nicht brauche. Außerdem hätte ich auch gern drei "Ebenen" wenn das geht. Also so nach dem Motto "A.e.c = WR1_input_PVa_U"
Toll wäre wenn ich dann die Variablen so in der Art verwenden könnte:
"A.e.c = getState('modbus.0.inputRegisters.30959_PVa_U').val;"
bzw:
"A.e.c * A.e.d = A.e.e; "Ich habe übrigens schon dank deinem iobroker-Masterkurs so einiges mit dem iobroker über Blockly realisiert - das funktioniert echt gut und macht auch Spaß! Da ich aber auch schon einige Erfahrung in der CoDeSys-Programmierung mit ST ("Strukturierter Text") habe, schätze ich die Möglichkeiten von Scripten schon sehr und will mich daher jetzt mal etwas mehr mit ts beschäftigen. - Falls du da auch vor hast mal einen Kurs anzubieten?!
Grüße aus Berlin - der Micha
-
@m_aus_b Am besten schreibst Du mal genau, was Du vor hast. Eine Klasse ist ja wieder etwas ganz anderes.
Außerdem hätte ich auch gern drei "Ebenen" wenn das geht. Also so nach dem Motto "A.e.c = WR1_input_PVa_U"
Das kann man so definieren.
const A = { e: { c: getState('modbus.0.inputRegisters.30959_PVa_U').val, }, }; log(A.e.c); // ändern A.e.c = 123; log(A.e.c);
Mit TypeScript könnte man die Struktur aber noch besser beschreiben (was Datentypen angeht usw).
-
@haus-automatisierung ah cool - das geht auf jeden Fall schon genau in die Richtung was ich meine!
Was habe ich genau vor - ich will aktuell vor allem das Batterielademanagement der Speicherbatterie nach meinen Wünschen steuern. Das ist leider bei dem SMA_STP_SE-WR nicht ganz so komfortabel wie es sein könnte weil ich nicht einfach nur die "maximale Ladeleistung" der Batterie vorgeben kann. (ein entsprechendes Modbusregister gibt es zwar - das funktioniert aber leider nicht). Daher bleibt nur die Möglichkeit die Wirkleistung vorzugeben - dabei muss man dann aber dafür sorgen das zB. nicht aus dem Netz geladen wird...
Lange Rede kurzer Sinn
- ich bin aktuell dabei alle möglichen Daten erstmal in einer übersichtlichen Struktur einzulesen um dann im nächsten Schritt verschiedene Berechnungen damit auszuführen.
Das Beispiel von grade kann ich vlt noch etwas genauer darstellen:
"WR_1.input.PVa_U = getState('modbus.0.inputRegisters.30959_PVa_U').val;"
Kannst du mir noch erklären wie das ganze mit ts dann aussehen würde? Gibt es für diese Art der Struktur eigentlich einen speziellen Namen?
Das ist am Anfang für mich immer ein bisschen das Problem das ich einfach oft nicht weiß was ich eigentlich genau Fragen muss um zu meiner Lösung zu kommen
Daher riesen Dank das du da sovielen "noobs" wie mir weiterhilfst!
-
@m_aus_b sagte in Wie kann ich in TypeScript "Variablen zusammenfassen":
Kannst du mir noch erklären wie das ganze mit ts dann aussehen würde?
Du gehst ganz schön viele Schritte auf einmal. Schau Dir doch erstmal die Basis JavaScript-Syntax an und löse dort dein Problem. Wenn Du damit fit bist, dann kannst Du das immer noch auf TS migrieren und die Vorteile kennenlernen.
Ansonsten würde ich erstmal jede Menge JavaScript-Tutorials durcharbeiten (die Syntax und deine Anforderung hat ja nix mit dem ioBroker zu tun). Sonst hängst Du immer wieder.
-
@haus-automatisierung Ja das stimmt natürlich - ich habe mir da natürlich auch schon so einiges angeschaut. Da ich mit ST und Matlab aber schon auch so meine Erfahrungen in der Programmierung und Strukturierung von Code habe, wollte ich da soein paar Dinge mit denen ich gute Erfahrungen gemacht habe "mitnehmen".
Wie gesagt - das Lademanagement habe ich ja aktuell mit Blockly am laufen - und das funktioniert ja auch ganz gut. Ich hab also keinen Druck das jetzt unbedingt mit ts umzusetzen. An js "stört" mich halt das hier nur eine schwache Typisierung gegeben ist und es ist schon toll was in ts zB. mit "class" so geht.
-
@m_aus_b sagte in Wie kann ich in TypeScript "Variablen zusammenfassen":
was in ts zB. mit "class" so geht.
Das geht in JS aber auch alles
-
@haus-automatisierung ja da hab ich wohl noch viel zu lernen