NEWS
Script mit "externer" Datenquelle?
-
Hallo,
ich nutze iobroker nun knapp 2 Jahre und möchte jetzt etwas tiefer in die "Programmierung" einsteigen. Bisher nutze ich nur kleinere Blockly-Scripte, wie "wenn der Aktor betätigt wird, schalte dieses Licht ein", oder "schalte die Heizung aus, wenn das Fenster geöffnet wird", usw.
Jetzt kam mir die Idee, den CD-Spieler meiner Kinder gegen eine RFID-Jukebox zu ersetzen, wobei die Jukebox ein Amazon Echo ist und der RFID-Reader ein ESP8266 mit entsprechenden Modulen.
Ich habe nun erreicht, dass beim Auflegen einer RFID-Karte ein MQTT-Datenpunkt mit der entsprechenden ID der Karte beschrieben wird. Auch habe ich ein Blockly, welches anhand dieser ID an Alexa den Befehl zum Abspielen einer Playlist schickt. Bei einigen wenigen Karten ist das so ja noch übersichtlich, aber sobald es in Richtung 20-30-50 Karten geht, wird das unübersichtlich zu pflegen.
Aktuell sieht das Script mit nur zwei Karten-IDs so aus:
Jetzt kam mir der Gedanke, eine "externe" Datenquelle anzubinden. In dieser Datenquelle sind anhand der Karten-ID die Quelle (z.b. Spotify oder Amazon Music) und der zugehörige Alexa-Befehl hinterlegt (z.B. "Spiele Playlist Leo Lausemaus Folge 1"). Legt mein Sohn die Karte mit der ID 6970fbb2 auf, soll sich das Script aus der Datenquelle die Quelle und den Befehl für Alexa raussuchen und in die Variablen schreiben, welche dann im Script weiterverwendet werden.
Wie erreiche ich das und mit welcher Datenquelle?
In Powershell würde ich jetzt als Datenquelle vermutlich eine XML schreiben und diese dann zur Laufzeit einlesen. Hier bin ich allerdings überfragt.
Auf meine Synology hätte ich eine MariaDB (MySQL), aber ich habe nichts gefunden, wie man sowas lösen könnte.
Dann ist mir noch der Gedanke gekommen, dass ich ja die ganzen Karten als Datenpunkte unter userdata pflegen könnte, aber auch hier habe ich nichts gefunden, wie man einen ganzen Ordner einlesen kann und vor allem auch als zweidimensionalen Array speichern kann.Jemand eine Idee?
Viele Grüße
Tobias -
-
@gfacek
Du kannst auch eine JSON Datei nehmen und diese in einen DP schreiben, oder wie im Beispiel in die Variable kopieren
-
Vielen Dank für die beiden Vorschläge. Ich schaue mir beides einmal an.
@paul53
Die Variante mit dem $Selector habe ich in irgendeinem Script schon einmal gesehen. Vielleich habe ich das noch irgendwo in meinen Drafts.@fastfoot
Spontan ist das für mich am nachvollziehbarsten. Zumindest scheinbar die am schnellsten umsetzbare Lösung. -
@fastfoot
Puh, jetzt muss ich doch mal doof fragen. Grundsätzlich funktioniert dein Vorschlag.
Ich habe variable "playlist" jetzt so wie bei dir manuell reinkopiert. Das läuft schon mal.
Wenn ich das JSON jetzt in einen Datenpunkt verwalten möchte...wie würde ich das dann am geschicktesten machen? -
@gfacek Du legst einen DP unter 0_userdata.0 an (type=string) und kopierst das json da rein. ich persönlich sehe da aber keinen Vorteil drin, weil es sich da super schlecht bearbeitenn lässt. Wenn du es dann doch aus einem textfile kopierst, kannst du es auch gleich in die Variable kopieren.
-
Ah, ok. Ich dachte, dass es sich dann ähnlich komfortabel verwalten lässt, wie in deinem Codeschnipsel oben. Aber hast recht, dann kann ich es gleich lieber in einer Textdatei verwalten und wenn ich Änderungen habe, einfach per Copy/Paste in die Variable stecken.
Insgesamt bin ich erstmal so zufrieden mit...vielen Dank!
So sieht es derzeit aus:
-
@gfacek Du kannst die Id's auch direkt von der Datei einlesen, falls sie in der Shell zugänglich ist
-
Coole Idee...muss ich mal gucken, was am Ende einfacher ist. Ob ich eher auf iobroker:8081 und dort unter Scripts gehe, oder ob ich irgendwie über winscp an die Datei im Filesystem vom iobroker gehe.
Wenn ich den Weg über die Anpassung des Scripts gehe, muss ich das dann auch speichern und somit wird die Variable dann auch gleich eingelesen.Aktuell bin ich erstmal zufrieden mit der Lösung.