Guten Abend zusammen,
Ich frage mich, ob es in Rules-DSL für openhab nicht so etwas wie ein mehrdimensionales Array gibt oder sowas wie ein Record.
Ich habe mir jetzt erstmal mit mehreren Maps beholfen, dass ist aber relativ aufwendig bzw. unübersichtlich.
Hintergrund:
Ich habe für eine Verschattungsautomatik mehrere Optionen pro Raum, die einstellbar sein sollen. Dies sind z.b. An/Aus, Sollschliessstand, azimuth, etc.
In den jeweiligen Maps habe ich schematisch gesehen so aufgebaut:
AzimuthMap = [Rollladenname][Azimuth], ...
SchliessstandMap = [Rollladenname][Sollschliessstand], ...
Etc.
Einfacher wäre natürlich:
[Rollladenname => String][Sollschliesstand => Number][Azimuth => Number], etc.
Gibt es so etwas für Openhab/RulesDSL? Das würde den Aufwand deutlich reduzieren bzw. der überschaubarkeit dienen.
Viele Grüße
Jan
Rules-DSL - Array oder "Record-Set"
- udo1toni
- Beiträge: 14415
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rules-DSL - Array oder "Record-Set"
Nein, mehrdimensionale Arrays gibt es in der DSL nicht.
Es gibt allerdings andere Optionen, die ebenfalls möglich wären.
Man sollte auch abwägen, wie hoch der jeweilige Aufwand ist.
Technisch elegant wäre meinetwegen ein 2-dimensionales Array, aber wir reden ja hoffentlich nicht von dutzenden Werten pro Shutter, sondern eher von meinetwegen drei oder vier Werten verteilt auf drei oder vier Azimuth Grenzwerte insgesamt. Da würde ich am ehesten zu drei oder vier eindimensionalen Arrays greifen, oder man versucht die Item Metadaten zu verwenden (hab ich noch nicht selbst genutzt, keine Ahnung, wie einfach das mit der DSL funktioniert), da könnte man dann z.B. auch ein JSON Objekt in den Metadaten hinterlegen, im Stil
aber auch da müsste man halt schauen, dass man die Azimuth Werte sinnvoll begrenzt, wobei man ja eh vor allem auf "Sonne steht auf der Hausseite" schaut und dann nicht minutenweise die Rollläden zucken lassen will...
Es gibt allerdings andere Optionen, die ebenfalls möglich wären.
Man sollte auch abwägen, wie hoch der jeweilige Aufwand ist.
Technisch elegant wäre meinetwegen ein 2-dimensionales Array, aber wir reden ja hoffentlich nicht von dutzenden Werten pro Shutter, sondern eher von meinetwegen drei oder vier Werten verteilt auf drei oder vier Azimuth Grenzwerte insgesamt. Da würde ich am ehesten zu drei oder vier eindimensionalen Arrays greifen, oder man versucht die Item Metadaten zu verwenden (hab ich noch nicht selbst genutzt, keine Ahnung, wie einfach das mit der DSL funktioniert), da könnte man dann z.B. auch ein JSON Objekt in den Metadaten hinterlegen, im Stil
Code: Alles auswählen
beschattung={"20":15,"30":20,"90":45,"180":0}
openHAB4.2.0 stable in einem Debian-Container (bookworm) (Proxmox 8.2.4, LXC), mit openHABian eingerichtet
-
- Beiträge: 12
- Registriert: 3. Jun 2023 22:54
Re: Rules-DSL - Array oder "Record-Set"
Guten Abend udo1toni,
Vielen Dank für Deine Antwort.
Die Idee mit den Metadaten und dem JSON Objekt ist gut, dass werde ich mal weiterverfolgen und versuche Rückmeldung zugeben.
Es geht nicht um mehrere Azimuth Werte. Genau genommen habe ich da nur zwei (runter/hoch). Die Shutter fahren bedingt durch die Autoverschatting max. 1 mal runter und erst hoch bei gegebenem sonnenstand. Ich finde es auch nicht gut wenn diese mehrere Male fahren würden nur weil z.b. ein Wölkchen vorbei zieht
Zur Erklärung meiner Optionen habe ich mal 2-3 Screenshots gemacht:
Für jede der Optionen gibt es mehr oder weniger ein Map, mit der Zuordnung Shutter->Options-Item.
Viele Grüße
Jan
Vielen Dank für Deine Antwort.
Die Idee mit den Metadaten und dem JSON Objekt ist gut, dass werde ich mal weiterverfolgen und versuche Rückmeldung zugeben.
Es geht nicht um mehrere Azimuth Werte. Genau genommen habe ich da nur zwei (runter/hoch). Die Shutter fahren bedingt durch die Autoverschatting max. 1 mal runter und erst hoch bei gegebenem sonnenstand. Ich finde es auch nicht gut wenn diese mehrere Male fahren würden nur weil z.b. ein Wölkchen vorbei zieht
Zur Erklärung meiner Optionen habe ich mal 2-3 Screenshots gemacht:
Für jede der Optionen gibt es mehr oder weniger ein Map, mit der Zuordnung Shutter->Options-Item.
Viele Grüße
Jan
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- udo1toni
- Beiträge: 14415
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rules-DSL - Array oder "Record-Set"
Das scheint mir reichlich kompliziert zu sein. Wozu die Hashmap? Packe die verschiedenen Items in Gruppen (nicht semantisch!) und arbeite innerhalb der Rule mit den Gruppen. Z.B.:
gShutter_Steuerung für alle Items zur Steuerung, gShutter_Soll_Ost für alle Sollpositionen der Ostverschattung usw.
Wenn Du innerhalb der Rule dann Zugriff brauchst, greifst Du über die Gruppe z.B. so zu:
Die Itemnamenanfänge müssen natürlich entsprechend identisch sein, das ist aber so wie ich das sehe ohnehin gegeben.
Du könntest sogar z.B. alle Sollpositionen gemeinsam in einer Gruppe abfrühstücken, Du musst dann halt zusätzlich den Filter erweitern, so dass er auch noch die Himmelrichtung im Itemnamen abfragt.
Ein mehrdimensionales Array ist dafür nicht notwendig.
gShutter_Steuerung für alle Items zur Steuerung, gShutter_Soll_Ost für alle Sollpositionen der Ostverschattung usw.
Wenn Du innerhalb der Rule dann Zugriff brauchst, greifst Du über die Gruppe z.B. so zu:
Code: Alles auswählen
soll = gShutter_Soll_Ost.members.filter[i|i.name.startsWith(ersterTeilDesNamens)].state
Du könntest sogar z.B. alle Sollpositionen gemeinsam in einer Gruppe abfrühstücken, Du musst dann halt zusätzlich den Filter erweitern, so dass er auch noch die Himmelrichtung im Itemnamen abfragt.
Ein mehrdimensionales Array ist dafür nicht notwendig.
openHAB4.2.0 stable in einem Debian-Container (bookworm) (Proxmox 8.2.4, LXC), mit openHABian eingerichtet