Rules-DSL - Array oder "Record-Set"

Hier bitte alles rein was Off-topic ist.

Moderatoren: Cyrelian, seppy

Antworten
Janm
Beiträge: 12
Registriert: 3. Jun 2023 22:54
Answers: 1

Rules-DSL - Array oder "Record-Set"

Beitrag von Janm »

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

Benutzeravatar
udo1toni
Beiträge: 13984
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Rules-DSL - Array oder "Record-Set"

Beitrag von udo1toni »

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

Code: Alles auswählen

beschattung={"20":15,"30":20,"90":45,"180":0}
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...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Janm
Beiträge: 12
Registriert: 3. Jun 2023 22:54
Answers: 1

Re: Rules-DSL - Array oder "Record-Set"

Beitrag von Janm »

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:
Screenshot_20230825_234114_Total Commander.jpg
Screenshot_20230825_233609_openHAB.jpg
Screenshot_20230825_233600_openHAB.jpg
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.

Benutzeravatar
udo1toni
Beiträge: 13984
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Rules-DSL - Array oder "Record-Set"

Beitrag von udo1toni »

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:

Code: Alles auswählen

soll = gShutter_Soll_Ost.members.filter[i|i.name.startsWith(ersterTeilDesNamens)].state
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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten