Certainly an interesting project and the details are useful in understanding the power of the integration of the various software and hardware components you employed.
But, in my experience, … this was “overkill”.
I implemented control of my Epson Projector (over RS-232 and 12v-DC-Out-Signal Wire) by just using an Arduino with SmartThings Shield (now deprecated, but replaceable using Arduino/MCU with WiFi like ESP8266 and Community provided Arduino libraries), and a bare bones RS-232 $12 breakout module for the Arduino.
Upon receiving the “on” signal from SmartThings, the Arduino issues “on[cr]” over the RS-232 using a simple library provided with the module. I repeat it 3 times in case the RS-232 communication is garbled. A minute or so later, the projector indicates success by powering the 12v signal wire, which is lowered by 2 resistors (Ohm’s Law) to 3v, and fed into one of the Arduino digital input ports. This triggers the script to send an “on” message to SmartThings and the DTH issues an “on” Event, closing the feedback loop and confirming the projector has been turned on. This confirmation also works flawlessly if the projector is manually activated (via it’s own IR remote or side-button).
The reverse occurs for “off”.
Meanwhile, the Arduino does double-duty as it is programmed to handled a “screen on” request from SmartThings. This triggers a 433Mhz transmitter module (~$12) to send a code to lower the motorized projection screen. If the screen used an IR remote, an IR module could have been used instead, or, I originally implemented with a 12v relay soldered to the buttons of the screen’s remote control.
The reverse occurs for “screen off”.
Finally, as a failsafe, since I’m using a smart-module anyway (i.e., an Arduino MCU), it can act independently of SmartThings. If it detects the 12v-DC signal input from the Projector, it automatically executes the screen-lowering function.