Wenn Du im Editor unten die Schaltfläche "Vollständiger Editor" oder "Vorschau" klickst (je nachdem, in welchem Kontext der Editor aufgerufen wurde...) erhältst Du oberhalb des Eingabefensters Knöpfe, mit denen Du die Steuercodes einfügen lassen kannst. Das funktioniert auch für bestehende Texte (Textblock markieren und gewünschtes Format klicken).
Du kannst die Tags aber auch einfach mit dazu schreiben. Tags werden in eckigen Klammern geschrieben [] und dann gibt es Schlüsselworte, für Code z.B. "code"

Das Ende wird mit dem gleichen Tag versehen, nur steht dann vor dem Schlüsselwort noch ein /, also z.B. [/code]. Da hier bisher kein öffnendes Tag vorkam, wird das Schlüsselwort auch angezeigt, juhu...
Es handelt sich hier um BBCode, genaue Erläuterungen dazu
unter diesem Link.
Kannst Du mal einen Regelsatz für einen Rollladen anzeigen, also so, wie er momentan ist?
MISPEZI hat geschrieben: ↑22. Jan 2022 10:02
In der neuen Rule soll dann etwa folgendes passieren:
Code: Alles auswählen
sendCommand(teil1 + "_" + teil2 + "_" + teil3 + "_DWRE",1) // und das geht nicht, wegen der 1
Es müßte die Form [Item].sendCommand(1) haben - wahrscheinlich habe ich die Namen unglücklich gewählt...
Du verwendest die Action sendCommand(string,string). Diese erwartet als Parameter zwei Strings. 1 ist kein String. Du kannst also leicht
Code: Alles auswählen
sendCommand(teil1 + "_" + teil2 + "_" + teil3 + "_DWRE","1")
schreiben, aber eleganter ist es, aus der zweiten Gruppe das passende Item herauszusuchen:
Code: Alles auswählen
rule "Zufahren mit Sonnensteuerung"
when
Item Auswahl_Steuerung changed to 1 // Schließzeit erreicht
then
gRS_REGEL.members.filter[i|i.state == 1].forEach[j|
val StringBuilder strName = new StringBuilder // die "ordentliche" Art, einen String zusammenzusetzen ;)
val Myname = j.name.split("_") // eine Liste
strName.append(Myname.get(0))
strName.append("_")
strName.append(Myname.get(1))
strName.append("_")
strName.append(Myname.get(2))
gRS_DWRE.members.filter[k|
k.name.startsWith(strName.toString)
].head.sendCommand(1) // .head -> das erste Item der Ergebnisliste
]
end
was ich immer noch nicht verstanden habe, ist, wie die eigentliche Steuerung abläuft. Das Item RS_EGEZ_10_REGEL gibt es für jeden Rollladen? Das Item RS_EGEZ_10_DWRE gibt es ebenfalls für jeden Rollladen? Aber wo kommt da sie Steuerung ins Spiel? Hast Du die Schaltzeiten jeweils im ESP hinterlegt? Das bedeutet dann ja, dass Du (Gruppensteuerung mal außen vor gelassen) für jeden Rollladen einzeln die Zeiten eingeben musst? Die Sonnenstandssteuerung erfolgt auch vom ESP? Und openHAB teilt dem ESP lediglich mit, in welchem Modus der Laden gesteuert wird? Dafür bräuchte es dann doch überhaupt keine Rule, Du müsstest lediglich das Regel-Item mit dem entsprechenden Channel verbinden.
Meine Rollläden werden alle absolut positioniert (neun Stück ebenfalls per ESP8266, mit Tasmota im Rollershutter Mode, weitere 20 über knx). Ich habe dann Regeln, welche zur bestimmten Uhrzeit die Läden verfahren.
Hätte ich also einen Schalter, mit dem ich zwischen Manuell, Zeit- und Sonnenstandsautomatik umschaltete, sähe die Sonnenuntergangsregel bei mir so aus:
Code: Alles auswählen
rule "Zufahren mit Sonnensteuerung"
when
Channel 'astro:sun:local:civilDusk#event' triggered START // Sonnenuntergang, bürgerliche Dämmerung
then
gRS_Position.members.filter[i|
var String strName = i.name.split("_").get(0) + "_"
strName = strName + i.name.split("_").get(1) + "_"
strName = strName + i.name.split("_").get(2) + "_"
gRS_REGEL.members.filter[j|j.name.startsWith(strName)].head.state == 1
].forEach[k|
k.sendCommand(100) // Rollladen schließen
]
end
Die Rule filtert aus allen Rollladensteuerungen diejenigen Items heraus, deren Pendant aus der Betriebsartwahl den Status 1 aufweist. Ich filtere also andersrum.
Ich bräuchte für diesen Ansatz dann eine Regel pro Automatik-Zeitpunkt. Ich habe keine Deaktivierung der Automatik vorgesehen, allerdings habe ich dann doch an einer Stelle so etwas nachgerüstet, falls wir mal Übernachtungsgäste im Wohnzimmer haben, damit die dann nicht von sieben Rollladenmotoren geweckt werden. Das ist aber nur in den entsprechenden Regeln drin, die potentiell davon betroffen sind, also alle Öffnungszeiten vor 9 Uhr. Danach haben die Kinder eh dafür gesorgt, dass alle wach sind...
Ich habe meine Itemnamen außerdem anders aufgebaut, so dass der identifizierende Teil des Namens (also der, anhand derer eine Rule Paare aus Items aus zwei Gruppen bilden kann) immer ein einziger Teilstring ist, der am ende oder am Anfang des Itemnamens steht. Deshalb benötige ich weder StringBuilder noch Zusammensetzen von Teilstrings
