Na, die Befehle musst Du entsprechend an den Input Channel senden.
Wenn Du auf das TX0: verzichten kannst (oder besser: Wenn das auch statischer Anteil der Antwort ist...) ist der Filter natürlich genauso gut. Und falls z.B. die Zeichenfolge
Con niemals im "interessanten" Teil der Antwort vorkommt (das ist der eigentliche Punkt...) sollte dann auch
ausreichen.
Transformation in Rules:
Es gibt in der
DSL (Domain Specific Language) eine
Core (integraler Bestandteil von openHAB)
Action namens
transform(<String>,<String>,<String>)
Dabei enthält
- der erste String die zu verwendende Transformation, also z.B. "REGEX" (mit Anführungszeichen...)
- der zweite String die eigentliche Transformation, also z.B. die reguläre Expression ".*TX0:(.*) Con.*Con.*" (und wenn dort ein Backslash verwendet wird, so dient dieser erst mal als Escape Zeichen für den String - könnte ja sein, dass ein " im String vorkommt, da müsste man dann \" schreiben. Entsprechend muss man dort für ein \ ein \\ schreiben)
- der dritte String den zu transformierenden Wert, also gewöhnlich eine Variable oder den Status eines Items (als String)
Da ich den angelieferten String irgendwie durch REGEX schleusen muss, habe ich das per Rule gelöst, das ist aber nicht die erste Option, auch wenn Du in der Folge ohnehin mit einer Rule arbeiten musst - "TX0: 4K60 594MHz RGB 8b " wird ja vermutlich nicht das sein, was Du sehen möchtest. Ich versuche bei solchen Aufgaben immer, statischen Ballast (also hier Verbindungsaufbau und Verbindungsabbau) so früh wie möglich loszuwerden, also bestenfalls noch im Channel.
Im Anschluss kannst Du in einer Rule den String recht einfach mit der Methode split() aufteilen (hier als DSL Code):
Code: Alles auswählen
rule "VRRoom Status setzen"
when
Item VRRoomOutput changed
then
val vr = newState.toString.split(" ") // newState entspricht VRRoomOutput.state
if(vr.size < 4) {
logWarn("vrroom","unerwartete Antwort: {}",newState)
return;
}
val res = vr.get(0)
val freq = vr.get(1)
val col = vr.get(2)
val mode = vr.get(3)
VRResolution.postUpdate(res)
VRFrequency.postUpdate(freq)
VRColourMode.postUpdate(col)
VRMode.postUpdate(mode)
end
Natürlich kannst Du innerhalb der Rule die Daten beliebig weiter analysieren, also z.B. die Zeichenkette MHz von der Frequenz abtrennen und den Zahlenwert als Zahl in einem Number Item speichern, gerne auch Number:Frequency mit der Einheit MHz, das eröffnet dann in der UI eventuell mehr Möglichkeiten für die Darstellung der verschiedenen Werte.
Die Anzahl der möglichen Befehle ist ja einigermaßen erschlagend

entsprechend wirst Du auch zum Senden der Befehle vermutlich über eine (weitere) Rule gehen wollen, die den zu sendenden String zusammensetzt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet