VRRoom -Telnet und Weboberfläche

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

filmgucker2
Beiträge: 237
Registriert: 8. Apr 2020 20:59
Answers: 0

Re: VRRoom -Telnet und Weboberfläche

Beitrag von filmgucker2 »

Log sagt:

Code: Alles auswählen

 Exec [OUTPUT]: 'Trying 192.168.188.176...'
2023-09-30 21:36:42.422 [DEBUG] [ng.exec.internal.handler.ExecHandler] - Exec [OUTPUT]: 'Connected to 192.168.188.176.'
2023-09-30 21:36:42.422 [DEBUG] [ng.exec.internal.handler.ExecHandler] - Exec [OUTPUT]: 'Escape character is '^]'.'
2023-09-30 21:36:42.423 [DEBUG] [ng.exec.internal.handler.ExecHandler] - Exec [OUTPUT]: 'TX0: 4K60 594MHz RGB 8b  '
2023-09-30 21:36:43.420 [DEBUG] [ng.exec.internal.handler.ExecHandler] - Exec [ERROR]: 'Connection closed by foreign host.'
2023-09-30 21:36:43.421 [DEBUG] [ng.exec.internal.handler.ExecHandler] - Transformed response is 'null'
Nur auf die 3. Zeile bin ich scharf :D
Raspberry Pi 4, OH 4.0.3

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

Re: VRRoom -Telnet und Weboberfläche

Beitrag von udo1toni »

Ja, das Log ist da leider nur bedingt hilfreich, weil es nicht den vollständigen Output liefert (so wie weiter oben).

Ich habe das gerde hier mal in einer Rule ausprobiert, da muss ich tatsächlich den \ doppelt angeben, also so:

Code: Alles auswählen

REGEX(.*character is ..\\].\\. (.*) Connection.* Connection.*)
Im Transform Feld des Channels, passend zum Beispieltext von weiter oben (wo das Connection closed doppelt drin steht)
Alternativ (entweder oder, KEINESFALLS an beiden Stellen gleichzeitig) im Link zwischen Channel und Item

Code: Alles auswählen

.*character is ..\\].\\. (.*) Connection.* Connection.*
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

filmgucker2
Beiträge: 237
Registriert: 8. Apr 2020 20:59
Answers: 0

Re: VRRoom -Telnet und Weboberfläche

Beitrag von filmgucker2 »

Immer noch nicht ...
Auf meinem 1. Bild "Thing" in das Feld Transformation eingetragen: REGEX(.*character is ..\\].\\. (.*) Connection.* Connection.*)
Im Channel/Item: Radiobutton Profile Standard. Log sagt: Transform response is null.

Umgekehrt: Feld Transformation mit REGEX((.*))
Channel/Item: REGEX Radiobutton + Feld regulärer Ausdruck: .*character is ..\\].\\. (.*) Connection.* Connection.*
Das Item zeigt nichts. Radiobutton Standard zeigt den ganzen unveränderten string.

Du sprachst von einer rule: Kann ich in der nicht den empfangenen ganzen string mit REGEX umwandeln, wenn das Item updated?
Raspberry Pi 4, OH 4.0.3

filmgucker2
Beiträge: 237
Registriert: 8. Apr 2020 20:59
Answers: 0

Re: VRRoom -Telnet und Weboberfläche

Beitrag von filmgucker2 »

Aber ich weiß natürlich nicht, wie die rule aussehen muss ...

...wenn ich so überlege, klingt das aber vielleicht etwas unelegant. Vielleicht liegt es am Verbindungs-
abbruch und REGEX hat nicht genug Zeit um zu arbeiten? Oder bei den Engländern fragen?
Raspberry Pi 4, OH 4.0.3

filmgucker2
Beiträge: 237
Registriert: 8. Apr 2020 20:59
Answers: 0

Re: VRRoom -Telnet und Weboberfläche

Beitrag von filmgucker2 »

Bei REGEX Radiobutton zeigt er jetzt doch den ganzen string, sagt aber dass er nicht transformieren kann, da steht noch '%s'

...ich sehe gerade: hatte vor das erste Connection einen \ gemacht. Ohne den ist wieder nichts
Raspberry Pi 4, OH 4.0.3

filmgucker2
Beiträge: 237
Registriert: 8. Apr 2020 20:59
Answers: 0

Re: VRRoom -Telnet und Weboberfläche

Beitrag von filmgucker2 »

...die lange REGEX Nacht.
Mit
.*TX0:(.*)Connection.*Connection closed by foreign host.*

und dem Radiobutton REGEX gehts. Aber noch eine Frage: Das liefert mir den Status, Und wenn ich der VRRoom Befehle
geben möchte? Über telnet geht das: etwa: set reboot.
Raspberry Pi 4, OH 4.0.3

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

Re: VRRoom -Telnet und Weboberfläche

Beitrag von udo1toni »

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

Code: Alles auswählen

.*TX0:(.*) Con.*Con.*
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

filmgucker2
Beiträge: 237
Registriert: 8. Apr 2020 20:59
Answers: 0

Re: VRRoom -Telnet und Weboberfläche

Beitrag von filmgucker2 »

Ein wie üblich wunderbarer Tipp! Danke! Aber noch einmal zurück zum Ausführen Befehl:
Den könnte ich doch auch über eine ExecuteCommandline machen. Wie müsste die denn aussehen?
Irgendwas mit usr/bin/bash telnet .... usw?
Raspberry Pi 4, OH 4.0.3

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

Re: VRRoom -Telnet und Weboberfläche

Beitrag von udo1toni »

Ja, natürlich kannst Du das auch ohne das exec Binding direkt in einer Rule machen, dann musst Du die Kommandozeile halt dort als executeCommandLine() Action absetzen. Das ist übrigens sehr ausführlich in der Original Doku erläutert...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

filmgucker2
Beiträge: 237
Registriert: 8. Apr 2020 20:59
Answers: 0

Re: VRRoom -Telnet und Weboberfläche

Beitrag von filmgucker2 »

Ich schau mal. Deine ausführlichen Erklärungen verführen halt dazu, immer weiter zu fragen und nicht in die Doku zu sehen...
Raspberry Pi 4, OH 4.0.3

Antworten