Background:
I did some quick digital-path testing on my AltitudeCI because I wanted to check the part of the unit that I use in playback: HDMI input to AES output. I am not using the AltitudeCI analog outputs, so I was not trying to test the DAC section or analog performance. I also don't feel like trying to sweep them as there's not a lot of space behind my front rack...
The test was inspired by the earlier Altitude32 ASR review, but this is not a direct duplicate of that test setup as I ran into REW limitations and didn't want to spend a lot of time, once I saw the outstanding results I was getting with room correction and a "Strong" target curve enabled, versus without.
The good news for the few tests I did, I do not see any obvious clipping, side bands, or strange HDMI behavior visible at the AES outputs that is of relevance.
I've also since updated this post with some of the final details as this build is now complete. You can now see final build pics, detailed in room measurements, etc... by scrolling through this post.
Signal Path for HDMI Testing:
JRiver Media Center playing playing wave test files → NVIDIA RTX 2080 Ti HDMI output → Trinnov AltitudeCI HDMI input → AltitudeCI AES output → RME HDSPe AES input → REW RTA capture
The RME HDSPe AES is best accessed through ASIO, while the Trinnov HDMI output from the PC is exposed through the normal Windows/Java device path in REW. REW’s driver mode is global, so I could not simply select Java for HDMI output and ASIO for RME input in the same REW instance. The workaround was to generate 96 k/24-bit -3dBFS WAV test files, play them in JRiver through my normal Trinnov HDMI zone, and capture the AltitudeCI AES output with the RME/REW analyzer path.
I used -3 dBFS test files for the main flat/no-correction checks. Captured levels matched the file levels, so the HDMI-to-AES path appeared to be at unity (for the flat measurements with room optimization turned off anyways).
I would not interpret the small far-out spurs as audible or practically significant.They are on the order of -175 to -180 dBFS, and the 2M FFT setting is intentionally revealing. A lower FFT length would likely hide them. They also appeared at 19kHz even if I perform a loop back test on the RME sound card by itself in REW, with the Trinnov totally removed from the signal chain. Unfortunately, I can't measure any better to remove them, as I have already turned on dithering which helped get rid of some... However, this is plenty good enough for me, and I can't swing Audio Precision gear plus have the Trinnov AltitudeCI
Bottom line:
In my setup, the AltitudeCI HDMI-in to AES-out path looks extremely clean at 96 kHz, even with my usual strong target curve listening preset plus optimization enabled... The very low spurs I have are reproducible, but are from my RME HDSPe AES card (as I did loopback measurements to prove this). I'm really happy to finally find a processor that does what I want, and to have decent HDMI that doesn't degrade audio quality (my last processor was in 2016).
The CI is highly recommended, but is not cheap at all. However, I figured, heck the room has 16 Benchmark AHB2 amps, so why not add a Trinnov processor too. There are actually very few options that could provide 32 AES input and output channels btw, with no down-sampling either (up to 192kHz). Of course, most movies are still mastered in 48kHz, but it's great to have an Atmos/DTS-X decoder that can work with my pro-audio based setup so well!
I will say that before when I tried room correction software, I quickly removed it as I found it to add slight artifacts. Not the case with the Trinnov, all I hear is improvement. It is one of the first processors I've had that didn't try to set my subs to some ridiculous value like 30 feet either. Out of the box, it does a great job time aligning subs, in fact they were time aligned very close to what I have done manually after over a decade of experience. The bass management active crossover settings allow for even more customization with the latest 2.2.0 firmware, allowing a pro or an experienced enthusiast to achieve world class results.
In fact, the CI does such a good job at everything, I removed the 6 Xilica XD4080 speaker processors, that were manually setup using an Earthworks M30 mic, Benchmark ADC1 and Benchmark MPA1. There is no snake oil here. I have a serious measurement setup, and the CI does a great job out of the box. I did do a few minor tweaks though to achieve the absolute best sounding setup I've ever heard. Some of those are discussed in later sections below.
The 3d microphone is highly sensitive. Even if you rotate it as small as humanly possible, the slight rotation still shows up on the polar plot inside the CI's GUI that can map your speaker locations three dimensionally. It's that sensitive, and if anything, all the level and time delay it did improved from what I had meticulously done by hand.
With some small manually tweaking, I was able to configure my 8 JL Audio subs to be +/-1dB down to just below 20Hz! The manual tweaking I did slightly improved the bass performance as shown in the final measurements section. However, most are going to be perfectly happy without having to add calculated PEQ filters upstream and slightly modify time delays of the automatic room optimization to achieve world class performance. Note that my small room is not ideal for WaveForming as several of my chairs would be inside the cancellation zone if I ran my rear subs as absorbers. However, I think achieving .6% acoustically measured THD at the main listening position at 20 Hz and at 96dB SPL is definitely world class. Most will never hear such refined bass, and I'm not even using WaveForming!
I also ended up tri-amping the main 5 channel bed layer using the AtltitudeCI. In fact, the center is actually using four channels by itself, to give the inefficient woofers even more headroom with the addition a third AHB2 dedicated to the center channel! Trinnov's optimization had no problem removing the phase shift from the LR4 filters I used, and the sound is definitely on par with the prior Xilica XD4080's FIR filters I had setup. Note that I did customize the activecrossover settings inside the Trinnov to achieve the best performance. However, it is really neat to remove 6 rack units of Xilica processors, and greatly simplify cable management.
HDMI Signal Path Measurements - Flat results with no correction:
-180dBFS WAV File Test (Flat target curve, no optimization turned on).
HDMI Signal Path Measurements -3dBFS WAV File Tests (Flat target curve, no optimization turned on):
HDMI Signal Path Measurements - Strong Target Curve Plus Room Optimization:
Some Pics of the Final Setup:
Equipment Details:
DACs, Amps and processor:
Trinnov AltitudeCI 32 Channel
17 Benchmark AHB2's
16 Benchmark DAC3 B's
Benchmark HPA4 Headphone/Line Amplifier
Custom Watercooled PC:
Custom machined chassis, VFD display, 4k UHD drive slim drive, AMD threadripper processor
RME HDSPe AES 32-Channel AES/EBU PCI Express Card (used for PCM music playback)
NVIDIA GeForce RTX 2080 Ti (used for movie and Atmos album playback)
Subs and Speakers:
4 JL Audio F212 subs
4 JL Audio F113 subs
4 Klipsch Palladium P39f Floorstanding Speakers
1 Klipsch Palladium P-27c Center Speaker
6 Klipsch Palladium P-17b Bookshelf Speakers (with 1/4" custom made steel mounts)
Signal Routing:
As JRiver offers custom zone management, I created three zones: Trinnov HDMI, RME 2 CH AES, and RME 5.1 CH AES. I wrote a custom home automation driver from scratch that gives me full control over the AltitudeCI, along with a custom JRiver plug-in that sends commands to my home automation server to switch the CI between HDMI and AES just prior to track playback. This actually works very well and allows me to use AES for all FLAC files, while automatically switching the CI's audio source to HDMI when playing movies, Atmos albums, or any other content that requires bitstreaming.
All signals originate from the PC through either HDMI or AES. Note that the AltitudeCI cleverly allows the HDMI video signal to remain active while using the AES inputs for audio.
All digital processing is done internally inside the AltitudeCI. The AltitudeCI then outputs 32 AES channels to 16 Benchmark DAC3 Bs. Some of the DAC3 Bs have their internal passive attenuation jumpers set to 0 dB, -10 dB, or -20 dB.
This allows me to set the analog gain structure correctly rather than throwing away level digitally upstream. That lets me reduce the DAC’s output voltage where I don’t need the full +24 dBu of analog output, while attenuating the DAC’s signal and the DAC’s own analog noise together. The goal is to better match the downstream device sensitivity, whether that’s the JL subwoofer inputs (note that the v2 subs run hotter than the v1 subs) or the AHB2’s 9.8 Vrms input requirement. A good way to think about it is that I’m not running excess gain and then compensating for it with large digital cuts. The result is cleaner gain structure, lower absolute noise at the driver, and better use of the available digital headroom.
Headroom Management:
In addition to the discussion above, I also use JRiver to analyze all my FLAC files, then use the Maximize Volume for Peak Level Normalization option along with the DSP option Peak Level Normalize. This ensures the existing dynamic range stays intact, but the track levels are raised so that the sample peak for each track is 0.01 dBFS below 0 dBFS. If there are inter-sample overs (ISOs), they will not impact the processing inside the AltitudeCI because it uses 64-bit floating-point math internally and even preserves the source sample rate (many other processors do not). At the DAC stage, the Benchmark DAC3 Bs have an additional 3 dB of internal headroom that can easily accommodate ISOs.
This method also preserves valuable digital headroom at the AES outputs of the AltitudeCI, because I no longer have to turn the volume up by 6 dB, or in some cases even close to 20 dB, simply to compensate for tracks that were recorded and mastered at very low levels. I now have much more headroom and can easily achieve 120 dBC or higher in my room, which I rarely do for obvious hearing-safety reasons.
In Room Measurements:
Subwoofers - Trinnov optimized without WaveForming (i.e. conventional subwoofer configuration):
Trinnov subwoofer optimization, slightly tweaked with calculated PEQ filters upstream of the room optimization:
Front left speaker following Trinnov's optimization (and a few custom tweaks I did to slightly improve the bass management crossover):
Cabling:
All cables going to the DACs, amps, subs and speakers were handmade to be the exact length needed by me. It was kinda fun for a while after making cables, but once you make 116 of them, it gets old.
Digital AES cables:
16 Canare DA206 110ohm cables with Neutrik gold plated XLR connectors goes out to each Benchmark DAC3 B from one of two Avid DB25-XLRM 4 ft DigiSnakes that are connected to the Trinnov AltitudeCI. Each DA206 110 ohm cable terminates into a Canare BCJ-XJ-TRC 110 Ohm to 75 Ohm digital audio impedance transformer. I then made 16 Canare LV-61S RG59 75 Ohm coax cables, using Canare BCP-C4B BNC connectors and Canare RCAP-C4A RCA connectors that connect to each Benchmark DAC3 B.
Analog:
32 Canare L-4E6S Star-Quad cables were made to length for all analog cables. Due to the geomtry of the cable, they reduces electromagnetic interference very well as shown in this video. Neutrik gold plated XLR connectors were used at each end.
Trigger:
All trigger cables were custom made to the exact length as well. I used Neutrik rean NYS226BG 3.5mm mono plugs.
Power cables:
Tripp Lite P007-L02 locking power cables were used at on all devices, cut to length, keeping the factory locking mechanism. I used Leviton 15 Amp straight blade 5256-BVO plugs, orange (I just liked the color).
Automation:
Premise is a PC-based home automation server that provides an object-oriented software model for integrating devices, automation logic, user interfaces, and external control paths.
The Premise Trinnov AltitudeCI module (kinda like a driver) provides an object-oriented Premise model for controlling and monitoring the CI over its TCP automation protocol. Commands and feedback are asynchronous and two-way: Premise properties such as power, source/profile, preset, volume, mute, correction/bypass, dim, front display, sample rate, and listening format are mapped to Trinnov commands and parsed feedback. The number of CI source inputs inside Premise are also dynamic, and the module also automatically maintains the Premise input/profile list to match the profiles configured in the CI. This means changing any command state in the CI’s web interface is automatically reflected in the home automation system, and vice versa.
The CI can be integrated with anything else in the home automation system instead of being limited to the Trinnov app or remote. That lets keyboard volume keys, a USB volume knob, Premise UI controls, voice commands, a telegram chatbot, HTTP links, VFD/status displays, trigger logic, and JRiver metadata automation all control or react to the processor through the same central Premise module logic.
Even when the CI is turned on locally, Premise is notified through the CI’s 12V trigger output and can run the associated theater automation, such as dimming the lights and turning on the display. Using my touch-based keyboard, I can raise and lower the CI volume directly. Since JRiver is already integrated into Premise through a separate module I wrote, Premise can also switch the CI from HDMI to AES whenever JRiver starts playing a FLAC file. When the headphone profile is selected on the AltitudeCI, Premise selects a 2-channel AES zone in JRiver, and the only active AES output feeds a Benchmark DAC3 B driving a Benchmark HPA4 headphone amplifier.
Since the module has so many properties, I split the property view across multiple panes to make it easier to read. The greyed-out properties are used internally by the module for state tracking, feedback handling, command suppression, and automation logic.
The GUI can be customized however desired, since Premise exposes the CI and related theater functions as normal automation objects rather than locking control into a single interface. In my setup, I mainly use URC RF remotes that are integrated into the system and provide custom RS-232 ASCII output to Premise. I also control the system through a Telegram chatbot, voice commands, and a custom website.
I did some quick digital-path testing on my AltitudeCI because I wanted to check the part of the unit that I use in playback: HDMI input to AES output. I am not using the AltitudeCI analog outputs, so I was not trying to test the DAC section or analog performance. I also don't feel like trying to sweep them as there's not a lot of space behind my front rack...
The test was inspired by the earlier Altitude32 ASR review, but this is not a direct duplicate of that test setup as I ran into REW limitations and didn't want to spend a lot of time, once I saw the outstanding results I was getting with room correction and a "Strong" target curve enabled, versus without.
The good news for the few tests I did, I do not see any obvious clipping, side bands, or strange HDMI behavior visible at the AES outputs that is of relevance.
I've also since updated this post with some of the final details as this build is now complete. You can now see final build pics, detailed in room measurements, etc... by scrolling through this post.
Signal Path for HDMI Testing:
JRiver Media Center playing playing wave test files → NVIDIA RTX 2080 Ti HDMI output → Trinnov AltitudeCI HDMI input → AltitudeCI AES output → RME HDSPe AES input → REW RTA capture
The RME HDSPe AES is best accessed through ASIO, while the Trinnov HDMI output from the PC is exposed through the normal Windows/Java device path in REW. REW’s driver mode is global, so I could not simply select Java for HDMI output and ASIO for RME input in the same REW instance. The workaround was to generate 96 k/24-bit -3dBFS WAV test files, play them in JRiver through my normal Trinnov HDMI zone, and capture the AltitudeCI AES output with the RME/REW analyzer path.
I used -3 dBFS test files for the main flat/no-correction checks. Captured levels matched the file levels, so the HDMI-to-AES path appeared to be at unity (for the flat measurements with room optimization turned off anyways).
I would not interpret the small far-out spurs as audible or practically significant.They are on the order of -175 to -180 dBFS, and the 2M FFT setting is intentionally revealing. A lower FFT length would likely hide them. They also appeared at 19kHz even if I perform a loop back test on the RME sound card by itself in REW, with the Trinnov totally removed from the signal chain. Unfortunately, I can't measure any better to remove them, as I have already turned on dithering which helped get rid of some... However, this is plenty good enough for me, and I can't swing Audio Precision gear plus have the Trinnov AltitudeCI
Bottom line:
In my setup, the AltitudeCI HDMI-in to AES-out path looks extremely clean at 96 kHz, even with my usual strong target curve listening preset plus optimization enabled... The very low spurs I have are reproducible, but are from my RME HDSPe AES card (as I did loopback measurements to prove this). I'm really happy to finally find a processor that does what I want, and to have decent HDMI that doesn't degrade audio quality (my last processor was in 2016).
The CI is highly recommended, but is not cheap at all. However, I figured, heck the room has 16 Benchmark AHB2 amps, so why not add a Trinnov processor too. There are actually very few options that could provide 32 AES input and output channels btw, with no down-sampling either (up to 192kHz). Of course, most movies are still mastered in 48kHz, but it's great to have an Atmos/DTS-X decoder that can work with my pro-audio based setup so well!
I will say that before when I tried room correction software, I quickly removed it as I found it to add slight artifacts. Not the case with the Trinnov, all I hear is improvement. It is one of the first processors I've had that didn't try to set my subs to some ridiculous value like 30 feet either. Out of the box, it does a great job time aligning subs, in fact they were time aligned very close to what I have done manually after over a decade of experience. The bass management active crossover settings allow for even more customization with the latest 2.2.0 firmware, allowing a pro or an experienced enthusiast to achieve world class results.
In fact, the CI does such a good job at everything, I removed the 6 Xilica XD4080 speaker processors, that were manually setup using an Earthworks M30 mic, Benchmark ADC1 and Benchmark MPA1. There is no snake oil here. I have a serious measurement setup, and the CI does a great job out of the box. I did do a few minor tweaks though to achieve the absolute best sounding setup I've ever heard. Some of those are discussed in later sections below.
The 3d microphone is highly sensitive. Even if you rotate it as small as humanly possible, the slight rotation still shows up on the polar plot inside the CI's GUI that can map your speaker locations three dimensionally. It's that sensitive, and if anything, all the level and time delay it did improved from what I had meticulously done by hand.
With some small manually tweaking, I was able to configure my 8 JL Audio subs to be +/-1dB down to just below 20Hz! The manual tweaking I did slightly improved the bass performance as shown in the final measurements section. However, most are going to be perfectly happy without having to add calculated PEQ filters upstream and slightly modify time delays of the automatic room optimization to achieve world class performance. Note that my small room is not ideal for WaveForming as several of my chairs would be inside the cancellation zone if I ran my rear subs as absorbers. However, I think achieving .6% acoustically measured THD at the main listening position at 20 Hz and at 96dB SPL is definitely world class. Most will never hear such refined bass, and I'm not even using WaveForming!
I also ended up tri-amping the main 5 channel bed layer using the AtltitudeCI. In fact, the center is actually using four channels by itself, to give the inefficient woofers even more headroom with the addition a third AHB2 dedicated to the center channel! Trinnov's optimization had no problem removing the phase shift from the LR4 filters I used, and the sound is definitely on par with the prior Xilica XD4080's FIR filters I had setup. Note that I did customize the activecrossover settings inside the Trinnov to achieve the best performance. However, it is really neat to remove 6 rack units of Xilica processors, and greatly simplify cable management.
HDMI Signal Path Measurements - Flat results with no correction:
-180dBFS WAV File Test (Flat target curve, no optimization turned on).
HDMI Signal Path Measurements -3dBFS WAV File Tests (Flat target curve, no optimization turned on):
HDMI Signal Path Measurements - Strong Target Curve Plus Room Optimization:
Some Pics of the Final Setup:
Equipment Details:
DACs, Amps and processor:
Trinnov AltitudeCI 32 Channel
17 Benchmark AHB2's
16 Benchmark DAC3 B's
Benchmark HPA4 Headphone/Line Amplifier
Custom Watercooled PC:
Custom machined chassis, VFD display, 4k UHD drive slim drive, AMD threadripper processor
RME HDSPe AES 32-Channel AES/EBU PCI Express Card (used for PCM music playback)
NVIDIA GeForce RTX 2080 Ti (used for movie and Atmos album playback)
Subs and Speakers:
4 JL Audio F212 subs
4 JL Audio F113 subs
4 Klipsch Palladium P39f Floorstanding Speakers
1 Klipsch Palladium P-27c Center Speaker
6 Klipsch Palladium P-17b Bookshelf Speakers (with 1/4" custom made steel mounts)
Signal Routing:
As JRiver offers custom zone management, I created three zones: Trinnov HDMI, RME 2 CH AES, and RME 5.1 CH AES. I wrote a custom home automation driver from scratch that gives me full control over the AltitudeCI, along with a custom JRiver plug-in that sends commands to my home automation server to switch the CI between HDMI and AES just prior to track playback. This actually works very well and allows me to use AES for all FLAC files, while automatically switching the CI's audio source to HDMI when playing movies, Atmos albums, or any other content that requires bitstreaming.
All signals originate from the PC through either HDMI or AES. Note that the AltitudeCI cleverly allows the HDMI video signal to remain active while using the AES inputs for audio.
All digital processing is done internally inside the AltitudeCI. The AltitudeCI then outputs 32 AES channels to 16 Benchmark DAC3 Bs. Some of the DAC3 Bs have their internal passive attenuation jumpers set to 0 dB, -10 dB, or -20 dB.
This allows me to set the analog gain structure correctly rather than throwing away level digitally upstream. That lets me reduce the DAC’s output voltage where I don’t need the full +24 dBu of analog output, while attenuating the DAC’s signal and the DAC’s own analog noise together. The goal is to better match the downstream device sensitivity, whether that’s the JL subwoofer inputs (note that the v2 subs run hotter than the v1 subs) or the AHB2’s 9.8 Vrms input requirement. A good way to think about it is that I’m not running excess gain and then compensating for it with large digital cuts. The result is cleaner gain structure, lower absolute noise at the driver, and better use of the available digital headroom.
Headroom Management:
In addition to the discussion above, I also use JRiver to analyze all my FLAC files, then use the Maximize Volume for Peak Level Normalization option along with the DSP option Peak Level Normalize. This ensures the existing dynamic range stays intact, but the track levels are raised so that the sample peak for each track is 0.01 dBFS below 0 dBFS. If there are inter-sample overs (ISOs), they will not impact the processing inside the AltitudeCI because it uses 64-bit floating-point math internally and even preserves the source sample rate (many other processors do not). At the DAC stage, the Benchmark DAC3 Bs have an additional 3 dB of internal headroom that can easily accommodate ISOs.
This method also preserves valuable digital headroom at the AES outputs of the AltitudeCI, because I no longer have to turn the volume up by 6 dB, or in some cases even close to 20 dB, simply to compensate for tracks that were recorded and mastered at very low levels. I now have much more headroom and can easily achieve 120 dBC or higher in my room, which I rarely do for obvious hearing-safety reasons.
In Room Measurements:
Subwoofers - Trinnov optimized without WaveForming (i.e. conventional subwoofer configuration):
Trinnov subwoofer optimization, slightly tweaked with calculated PEQ filters upstream of the room optimization:
Front left speaker following Trinnov's optimization (and a few custom tweaks I did to slightly improve the bass management crossover):
Cabling:
All cables going to the DACs, amps, subs and speakers were handmade to be the exact length needed by me. It was kinda fun for a while after making cables, but once you make 116 of them, it gets old.
Digital AES cables:
16 Canare DA206 110ohm cables with Neutrik gold plated XLR connectors goes out to each Benchmark DAC3 B from one of two Avid DB25-XLRM 4 ft DigiSnakes that are connected to the Trinnov AltitudeCI. Each DA206 110 ohm cable terminates into a Canare BCJ-XJ-TRC 110 Ohm to 75 Ohm digital audio impedance transformer. I then made 16 Canare LV-61S RG59 75 Ohm coax cables, using Canare BCP-C4B BNC connectors and Canare RCAP-C4A RCA connectors that connect to each Benchmark DAC3 B.
Analog:
32 Canare L-4E6S Star-Quad cables were made to length for all analog cables. Due to the geomtry of the cable, they reduces electromagnetic interference very well as shown in this video. Neutrik gold plated XLR connectors were used at each end.
Trigger:
All trigger cables were custom made to the exact length as well. I used Neutrik rean NYS226BG 3.5mm mono plugs.
Power cables:
Tripp Lite P007-L02 locking power cables were used at on all devices, cut to length, keeping the factory locking mechanism. I used Leviton 15 Amp straight blade 5256-BVO plugs, orange (I just liked the color).
Automation:
Premise is a PC-based home automation server that provides an object-oriented software model for integrating devices, automation logic, user interfaces, and external control paths.
The Premise Trinnov AltitudeCI module (kinda like a driver) provides an object-oriented Premise model for controlling and monitoring the CI over its TCP automation protocol. Commands and feedback are asynchronous and two-way: Premise properties such as power, source/profile, preset, volume, mute, correction/bypass, dim, front display, sample rate, and listening format are mapped to Trinnov commands and parsed feedback. The number of CI source inputs inside Premise are also dynamic, and the module also automatically maintains the Premise input/profile list to match the profiles configured in the CI. This means changing any command state in the CI’s web interface is automatically reflected in the home automation system, and vice versa.
The CI can be integrated with anything else in the home automation system instead of being limited to the Trinnov app or remote. That lets keyboard volume keys, a USB volume knob, Premise UI controls, voice commands, a telegram chatbot, HTTP links, VFD/status displays, trigger logic, and JRiver metadata automation all control or react to the processor through the same central Premise module logic.
Even when the CI is turned on locally, Premise is notified through the CI’s 12V trigger output and can run the associated theater automation, such as dimming the lights and turning on the display. Using my touch-based keyboard, I can raise and lower the CI volume directly. Since JRiver is already integrated into Premise through a separate module I wrote, Premise can also switch the CI from HDMI to AES whenever JRiver starts playing a FLAC file. When the headphone profile is selected on the AltitudeCI, Premise selects a 2-channel AES zone in JRiver, and the only active AES output feeds a Benchmark DAC3 B driving a Benchmark HPA4 headphone amplifier.
Since the module has so many properties, I split the property view across multiple panes to make it easier to read. The greyed-out properties are used internally by the module for state tracking, feedback handling, command suppression, and automation logic.
The GUI can be customized however desired, since Premise exposes the CI and related theater functions as normal automation objects rather than locking control into a single interface. In my setup, I mainly use URC RF remotes that are integrated into the system and provide custom RS-232 ASCII output to Premise. I also control the system through a Telegram chatbot, voice commands, and a custom website.
Last edited: