NEWS
Variable in ID-Namen verwenden?
-
Gelöscht.
-
@Homoran sagte:
Ich habe für jeden Raum das gleiche Skkript und würde gerne nach dem Kopiern nur den Raumnamen in einer Variable ändern
Da wirst Du wohl auf natives Javascript umsteigen müssen, denn Blockly verwendet meist Select ID zum Zuordnen von IDs. Schau Dir mal meine Skripte in Deiner Doku an, dann siehst Du, wie einfach es mit getIdByName() geht.
-
Danke Paul!
@paul53 sagte in Variable in ID-Namen verwenden?:
wie einfach
ich mache ja schon langsam Fortschritte.
Das Rollladenprojekt sollte mir mal komplexere Abläufe vor die Augen führen.
Ich habe weniger die Probleme mit dem nachvollziehen, als mit der Erstellung der richtigen Befehle und deren Syntax.
Das ist wie bei einer Fremdsprache - verstehen geht noch, aber selber richtig sprechen ist wesentlich schwerer
-
Vorschlag: Erstelle das Skript für einen Raum in Blockly, kopiere das erzeugte Javascript (ohne die letzte Zeile) in ein neues Javascript und passe die IDs unter Verwendung von getIdByName() an. Nach erfolgreichem Test kannst Du dieses Skript als Kopier-Vorlage für die weiteren Räume verwenden.
-
Danke!
Das werde ich mal versuchen.Aber erst das Blockly für einen Raum mit allen Optionen (Fenstergriff, Urlaub, Kino...) pimpen
Und als nächste Stufe kommt dann das iterieren in einem Skript
-
Anmerkung: Die Namen müssen für getIdByName() eindeutig sein, d.h. es darf kein weiteres Objekt mit diesem Namen existieren.
-
@paul53
Klar - werde auch noch einiges umbenennen müssen, resp. komplett neu machen, wenn ich das Grundgerüst erweitere.
Habe zum Beispiel bereits im Wohnzimmer die Balkon-Tür und das Fenster.
Räume und unter WZ noch Tür und Fenster.
Die Struktur müsste dann wieder einheitlich sein, auch wenn es nur einen Rolladen gibt müsste es dann Raum - Fenster - states seinIm Endeffekt soll es nur noch ein Skript werden, das diese DP nacheinander abarbeitet.
Aber das ist Zukuunftsmusik -
@Homoran sagte in Variable in ID-Namen verwenden?:
Besteht eigentlich in Blockly die Möglichkeit Zustände von IDs variabel abzufragen.
Voraussetzung ist natürlich, dass die IDs (oder die Namen??) systematisch benannt sind.Ich habe für jeden Raum das gleiche Skkript und würde gerne nach dem Kopiern nur den Raumnamen in einer Variable ändern:
Werte von einer ID-Variablen abfragen geht leider (noch) nicht in Blockly.
Werte setzen/verändern aber schon.
Ich stand vor der gleichen Problematik bei meiner Heizungssteuerung. Jede Menge Räume und alle einzeln steuerbar.
Da die Logik in jedem Raum gleich ist und ich grundsätzlich ein "fauler Hund" bin, wollte ich die Scripte einfach kopieren.Damit ich nicht jedes Script komplett überarbeiten musste, habe ich eine "Initialisierung" Funktion eingebaut.
Dort werden alle raumspezifischen Daten in lokale Variablen gesetzt. Wenn der Trigger auslöst, wird als erstes die Initialisierung aufgerufen.
Somit habe ich nur eine Stelle an der ich die Parameter anpassen muss.
Und hier der "schreibe" Baustein mit dem man ID's, die in einer Variablen stehen, ändern kann.
-
@rantanplan sagte in Variable in ID-Namen verwenden?:
Damit ich nicht jedes Script komplett überarbeiten musste, habe ich eine "Initialisierung" Funktion eingebaut.
That's it!!!!
So was wollte ich haben!
Aber auf die Idee, die GANZE Id mitzugeben bin ich nicht gekommenDanke!
-
Zitat Homoran
Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
-
Success!
-
Die Blöcke "schreibe", "binde direct_oid_src" und "Falls Objekt" sind die einzigen Blöcke, an die die Datenpunkt-ID auch als String übergeben werden kann. Es fehlt ein entsprechender Block zum Einlesen (getState()).
So etwas ist in Blockly möglich:
Die Javascript-Funktion ist ganz einfach:return getIdByName(name);
-
@paul53 sagte in Variable in ID-Namen verwenden?:
..... Es fehlt ein entsprechender Block zum Einlesen (getState()).
Ja, den hätte ich ja auch gerne. Ein issue dazu ist aber mal "abgeblockt" worden.
issue 154 -
@rantanplan
Das Issue ist noch offen - ich schreib da mal was rein -
@paul53 sagte in Variable in ID-Namen verwenden?:
So etwas ist in Blockly möglich:
Grundsächlich eine gute Idee.
Viel, viel schöner wäre es aber hier.
Dies würde vieles vereinfachen.Diesem Baustein konnte ich seine Funktion noch nicht entlocken.
Ich hatte gehofft damit geht es. Produziere aber nur Errors.
-
@rantanplan sagte:
Diesem Baustein konnte ich seine Funktion noch nicht entlocken.
Wo hast Du den gefunden ? Ich finde den Block nicht (Version 3.6.4).
-
Wenn ich das richtig verstanden habe, dann bräuchtet Ihr einen Block so wie hier?
(Hab ich mal manuell hinzugefügt, noch ohne Funktion) -
@paul53 sagte in Variable in ID-Namen verwenden?:
@rantanplan sagte:
Diesem Baustein konnte ich seine Funktion noch nicht entlocken.
Wo hast Du den gefunden ? Ich finde den Block nicht (Version 3.6.4).
Ich teste gerade die 4.1.7. Ist irgend wann bei 4.x.x aufgetaucht.
-
@thewhobox sagte in Variable in ID-Namen verwenden?:
Wenn ich das richtig verstanden habe, dann bräuchtet Ihr einen Block so wie hier?
(Hab ich mal manuell hinzugefügt, noch ohne Funktion)Jepp.
-
Okay, falls ich es zum laufen bringe soll ich dann ein Pull Request auf Github für ioBroker.javascript machen?
@apollon77Oder lieber den Code hier posten damit es jeder selbst hinzufügen kann?
@paul53 Ist die funktion getIdByName() global oder von dir selbst erstellt. Ansonsten könnte man dafür auch ein eigenes Block-Element erstellen.