Hey all, thanks for this wonderful thread, and thanks Duct Tape for the list of commands. You're a life saver. I now have a functional solution on the Frame 2022 using RS232 which I've chosen for two reasons...
IP is flakey and unreliable on the Frame... Authentication tokens are often needing to be refreshed manually, power control switching between Art mode and regular tv mode is flakey and unpredictable, and there is no brightness control which is necessary due to the poor sensor control over Art mode brightness in low light.
Infrared is not great for me as I am building a custom wood frame that will block the receiver. There are forwarders etc but I haven't seen a lot of success with them outside of units such as this, which they don't want to sell to people who don't own their deco frames.
So here's my setup for anyone else who might be interested...
TV
The Frame 2022 65" (QA65LS03BAWXXY - Australia)
Port: "Service" (it's not called Ex link in Australia)
node-red-node-serialport package installed (version 0.15.0) to send the RS232 commands
Note: The latest version (node-red-node-serialport 1.0.1) on arm based processors silently fails when attempting to open a connection to the USB serial port and kills the running instance of node red, therefore required manual npm installation of 0.15.0. This is a known issue they'll fix in future versions.
Controller / node red configuration
Expose the USB serial port / device in docker-compose config
/dev/ttyUSB0:/dev/ttyUSB0, or
/dev/serial/by-id/YOURDEVICE:/dev/ttyUSB0
group_add:
- dialout
Configure node-red-node-serialport
Serial port: The port specified in the docker config, i.e. /dev/ttyUSB0
Baud rate: 9600 (115200 failed to send commands for me despite others reporting this as working)
Data bits: 8
Parity: None
Stop bits: 1
All other config options: Default
Note: There is no hardware flow control implemented in this package, therefore no ability to enable / disable it. Disabled by virtue of not being supported :)
Node red flow / commands
Sending the HEX commands to the TV using the node-red-node-serialport package is achieved by sending buffered data. Here is an example (download node red JSON flow)
A node red inject node (or any other node that initiates a flow)
A function node that passes through buffered data as individual bytes (i.e. for the Power On HEX command of 08 22 00 00 00 02 D4)
A 'serial out' node that is configured as per the "Configure node-red-node-serialport" step above
Initiate the flow via clicking the inject node, or whatever other flow trigger you use, and the command will be sent to the TV
And that's it :) It works flawlessly. Because it's implemented via Node Red, I can use this to send RS232 commands via any automation / flow in Node Red. Some things I have in place:
Zigbee wall switch automations (also available using my harmony remote)
Button press -> Deconz zigbee event -> Node Red -> Toggle tv on / off
Long button press -> Deconz zigbee event -> Node Red -> Dim tv brightness
Double button press -> Deconz zigbee event -> Node Red -> Increase tv brightness
Home assistant list helper
Select art mode, tv mode or off -> Node Red -> Set tv state
My next automation will be to automatically detect room brightness via a Lux meter and then feed brightness data to the tv
Hopefully someone finds this helpful. Feel free to ping me if you have any questions.