Hassio integration of Intesis ASCII gateway, Carlo Gavazzi VMU-C ModBus datalogger and ScionTech 8x16 HDMI Matrix

Hey guys,

long time no post. Been really busy but back with some really cool integration.

Recently I had A/C installed to cool the server room in the loft and additionally me in the other room of the loft :stuck_out_tongue:

I went for Panasonic units which have integrated Wifi but figured that I didn’t really want to use the Cloud integration as it means non localized traffic and added network latency.
I ended up adding an Intesis ASCII gateway to the indoor units.
Initially I used the Curl command but as the protocol is not HTTP based (JSON or XML), there were some issues. Through the Curl mailing list I was suggested to use the Netcat command instead which worked out much better!

TODO: is still integrate the Intesis Gateway with the Climate control thermostat in HASSIO. In the screenshot you can see that I’m using the Panasonic Cloud integration for this. All the other cards for the A/C are using the Intesis gateway.
The central heating is performed using a relay in the main GCE IPX800v4 controller in the main ABB DIN panel. - again the control of this was done in my Pine-LTS project (see my previous positngs; these are integrated into Hassio using the Hass API feature which is really neat)

For the Intesis product range the site is here if anyone is interested:
https://www.intesis.com/
https://www.intesis.com/products/protocol-translator/ascii-gateways

I’ve also integrated the ScionTech HDMI matrix switch. It was the only matrix I found that had a usable open API and didn’t need locked drivers to communicate with.
Virtually, I set up a bunch of scripts in Hassio to take control over the switching process between the inputs and outputs. It’s the second machine from the bottom in the screenshot of my A/V rack, above the 12 channel Monitor Audio amp.

Here is the link to the HDMI Matrix:
http://scion-tech.co.uk/

The last few weeks have been really fun!! As my main energy meter has 2x pulse outputs and an RS485 ModBus output, I wanted to log the energy and power values from it. A lot of research led me to the Carlo Gavazzi VMU-C data logger system. Those not familiar with Carlo Gavazzi, they build many devices for industrial and commercial applications such as energy and power measurement for single and three phase systems, control systems and also data logging for use in factories and power generation facilities among others.

The good thing about the VMU-C is that it allows you to build your own ModBus driver. As my energy meter is a rebranded Eastron 100A MID certified device, it was just a matter of getting the documentation for the RS485 protocol and the implementation within the meter itself.
For example the number of registers containing the values and the storage type within the registers within the values as in floating point/integer etc…

With the Eastron meter being logged by the Carlo VMU-C, I was given the API information by the really helpful tech support at CG and then integrated it into Hassio using a few Bash shell scripts which extract Power information and calculate the current and estimated billing projections.

My future plan for energy metering is to use a bunch of CG EM111 ModBus based meters to monitor selected circuits individually. They will be chained post RCBO before hitting the Phoenix Contact distribution blocks in the main panel:

(European Sites)
https://www.carlogavazzi.co.uk/controls/energy-analysers-and-quick-fit-solutions
https://gavazziautomation.com/

(US Site) https://www.gavazzionline.com/CGNA/energy/kwh-meters

Then using my scripts I will load that information into my Power and Energy pages in Hassio to get a full overview of the behavior of the building.

Currently I’m starting work on rebuilding the loft lighting control system. I ordered up 3x ABB Gemini series DIN panels and will use them for wiring distribution and automation using more of the GCE IPX system integrated with Hassio.
Basic features will include remote control switching, dimming and PWM for LED Strip lighting.

If anyone is interested in the Hassio configuration and various Bash scripts I’ve written, I can post them up on request or the configuration of the various components that I’m using… :slight_smile:

Here are the images:

1 Like

I’d be interested to see how you implemented the HDMI matrix switch - did you do it via IP or RS232? Could you share you config/scripts please?

1 Like

Hi,

I used IP for the Matrix as it’s a lot easier then converting everything over to RS232.

Here’s what I did:

confiiguration.yaml

sensor:
  - platform: command_line
    command: "curl -X GET http://IP/all_dat.get | cut -d ';' -f 1"
    scan_interval: 60
    name: "HDMI Matrix Output 1 Map"
    
  - platform: command_line
    command: "curl -X GET http://IP/all_dat.get | cut -d ';' -f 7"
    scan_interval: 60
    name: "HDMI Matrix Output 2 Map"    
    
  - platform: command_line
    command: "curl -X GET http://IP/all_dat.get | cut -d ';' -f 13"
    scan_interval: 60
    name: "HDMI Matrix Output 3 Map"    
    
  - platform: command_line
    command: "curl -X GET http://IP/all_dat.get | cut -d ';' -f 19"
    scan_interval: 60
    name: "HDMI Matrix Output 4 Map"    
    
  - platform: command_line
    command: "curl -X GET http://IP/all_dat.get | cut -d ';' -f 25"
    scan_interval: 60
    name: "HDMI Matrix Output 5 Map"    
    
  - platform: command_line
    command: "curl -X GET http://IP/all_dat.get | cut -d ';' -f 31"
    scan_interval: 60
    name: "HDMI Matrix Output 6 Map" 
    
  - platform: command_line
    command: "curl -X GET http://IP/all_dat.get | cut -d ';' -f 37"
    scan_interval: 60
    name: "HDMI Matrix Output 7 Map"    
    
  - platform: command_line
    command: "curl -X GET http://IP/all_dat.get | cut -d ';' -f 43"
    scan_interval: 60
    name: "HDMI Matrix Output 8 Map" 

input_boolean:
  hdmi_matrix_out1:
    name: "HDMI Matrix Output 1"
    initial: off
  hdmi_matrix_out2:
    name: "HDMI Matrix Output 2"
    initial: off   
  hdmi_matrix_out3:
    name: "HDMI Matrix Output 3"
    initial: off
  hdmi_matrix_out4:
    name: "HDMI Matrix Output 4"
    initial: off
  hdmi_matrix_out5:
    name: "HDMI Matrix Output 5"
    initial: off
  hdmi_matrix_out6:
    name: "HDMI Matrix Output 6"
    initial: off    
  hdmi_matrix_out7:
    name: "HDMI Matrix Output 7"
    initial: off
  hdmi_matrix_out8:
    name: "HDMI Matrix Output 8"
    initial: off    
    
  hdmi_matrix_in1:
    name: "HDMI Matrix Input 1"
    initial: off  
  hdmi_matrix_in2:
    name: "HDMI Matrix Input 2"
    initial: off 
  hdmi_matrix_in3:
    name: "HDMI Matrix Input 3"
    initial: off  
  hdmi_matrix_in4:
    name: "HDMI Matrix Input 4"
    initial: off   
  hdmi_matrix_in5:
    name: "HDMI Matrix Input 5"
    initial: off  
  hdmi_matrix_in6:
    name: "HDMI Matrix Input 6"
    initial: off 
  hdmi_matrix_in7:
    name: "HDMI Matrix Input 7"
    initial: off  
  hdmi_matrix_in8:
    name: "HDMI Matrix Input 8"
    initial: off  

shell_command:
    matrix_out1_in1: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out1 matrix=1'"
    matrix_out1_in2: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out1 matrix=2'"
    matrix_out1_in3: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out1 matrix=3'"    
    matrix_out1_in4: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out1 matrix=4'"    
    matrix_out1_in5: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out1 matrix=5'"    
    matrix_out1_in6: "/usr/bin/curl -X POST http://IPvideo.get -d '#video_d out1 matrix=6'"    
    matrix_out1_in7: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out1 matrix=7'"    
    matrix_out1_in8: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out1 matrix=8'"    
    
    matrix_out2_in1: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out2 matrix=1'"
    matrix_out2_in2: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out2 matrix=2'"
    matrix_out2_in3: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out2 matrix=3'"    
    matrix_out2_in4: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out2 matrix=4'"    
    matrix_out2_in5: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out2 matrix=5'"    
    matrix_out2_in6: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out2 matrix=6'"    
    matrix_out2_in7: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out2 matrix=7'"    
    matrix_out2_in8: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out2 matrix=8'"  
    
    matrix_out3_in1: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out3 matrix=1'"
    matrix_out3_in2: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out3 matrix=2'"
    matrix_out3_in3: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out3 matrix=3'"    
    matrix_out3_in4: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out3 matrix=4'"    
    matrix_out3_in5: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out3 matrix=5'"    
    matrix_out3_in6: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out3 matrix=6'"    
    matrix_out3_in7: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out3 matrix=7'"    
    matrix_out3_in8: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out3 matrix=8'"   
    
    matrix_out4_in1: "/usr/bin/curl -X POST http://IPvideo.get -d '#video_d out4 matrix=1'"
    matrix_out4_in2: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out4 matrix=2'"
    matrix_out4_in3: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out4 matrix=3'"    
    matrix_out4_in4: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out4 matrix=4'"    
    matrix_out4_in5: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out4 matrix=5'"    
    matrix_out4_in6: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out4 matrix=6'"    
    matrix_out4_in7: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out4 matrix=7'"    
    matrix_out4_in8: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out4 matrix=8'"    
    
    matrix_out5_in1: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out5 matrix=1'"
    matrix_out5_in2: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out5 matrix=2'"
    matrix_out5_in3: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out5 matrix=3'"    
    matrix_out5_in4: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out5 matrix=4'"    
    matrix_out5_in5: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out5 matrix=5'"    
    matrix_out5_in6: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out5 matrix=6'"    
    matrix_out5_in7: "/usr/bin/curl -X POST http://IPvideo.get -d '#video_d out5 matrix=7'"    
    matrix_out5_in8: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out5 matrix=8'"    
    
    matrix_out6_in1: "/usr/bin/curl -X POST http://IPvideo.get -d '#video_d out6 matrix=1'"
    matrix_out6_in2: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out6 matrix=2'"
    matrix_out6_in3: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out6 matrix=3'"    
    matrix_out6_in4: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out6 matrix=4'"    
    matrix_out6_in5: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out6 matrix=5'"    
    matrix_out6_in6: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out6 matrix=6'"    
    matrix_out6_in7: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out6 matrix=7'"    
    matrix_out6_in8: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out6 matrix=8'"    
    
    matrix_out7_in1: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out7 matrix=1'"
    matrix_out7_in2: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out7 matrix=2'"
    matrix_out7_in3: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out7 matrix=3'"    
    matrix_out7_in4: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out7 matrix=4'"    
    matrix_out7_in5: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out7 matrix=5'"    
    matrix_out7_in6: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out7 matrix=6'"    
    matrix_out7_in7: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out7 matrix=7'"    
    matrix_out7_in8: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out7 matrix=8'"    
    
    matrix_out8_in1: "/usr/bin/curl -X POST http://IPvideo.get -d '#video_d out8 matrix=1'"
    matrix_out8_in2: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out8 matrix=2'"
    matrix_out8_in3: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out8 matrix=3'"    
    matrix_out8_in4: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out8 matrix=4'"    
    matrix_out8_in5: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out8 matrix=5'"    
    matrix_out8_in6: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out8 matrix=6'"    
    matrix_out8_in7: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out8 matrix=7'"    
    matrix_out8_in8: "/usr/bin/curl -X POST http://IP/video.get -d '#video_d out8 matrix=8'"   

scripts.yaml


matrix_out1_in1:
    sequence:
    - service: shell_command.matrix_out1_in1  
    
matrix_out1_in2:
    sequence:
    - service: shell_command.matrix_out1_in2 
    
matrix_out1_in3:
    sequence:
    - service: shell_command.matrix_out1_in3 
    
matrix_out1_in4:
    sequence:
    - service: shell_command.matrix_out1_in4 
    
matrix_out1_in5:
    sequence:
    - service: shell_command.matrix_out1_in5
    
matrix_out1_in6:
    sequence:
    - service: shell_command.matrix_out1_in6
    
matrix_out1_in7:
    sequence:
    - service: shell_command.matrix_out1_in7 
    
matrix_out1_in8:
    sequence:
    - service: shell_command.matrix_out1_in8 

This then goes on in sequence with out2, out3, out4… out8

The lovelace ui configuration is quite long:

                    "cards": [
                        {
                            "cards": [
                                {
                                    "cards": [
                                        {
                                            "cards": [
                                                {
                                                    "entity": null,
                                                    "hold_action": "none",
                                                    "name": "INPUT",
                                                    "show_icon": false,
                                                    "show_name": true,
                                                    "show_state": false,
                                                    "styles": {
                                                        "card": [
                                                            {
                                                                "height": "40px"
                                                            }
                                                        ]
                                                    },
                                                    "tap_action": {
                                                        "action": "none"
                                                    },
                                                    "type": "custom:button-card"
                                                }
                                            ],
                                            "type": "horizontal-stack"
                                        },
                                        {
                                            "cards": [
                                                {
                                                    "entity": "input_boolean.hdmi_matrix_in1",
                                                    "hold_action": "none",
                                                    "icon": "mdi:video-input-hdmi",
                                                    "name": "HTPC 4 - Lounge",
                                                    "show_icon": true,
                                                    "show_name": true,
                                                    "state": [
                                                        {
                                                            "color": "green",
                                                            "value": "off"
                                                        },
                                                        {
                                                            "color": "white",
                                                            "value": "on"
                                                        }
                                                    ],
                                                    "styles": {
                                                        "card": [
                                                            {
                                                                "width": "210px"
                                                            },
                                                            {
                                                                "height": "98px"
                                                            }
                                                        ]
                                                    },
                                                    "tap_action": {
                                                        "action": "toggle"
                                                    },
                                                    "type": "custom:button-card"
                                                }
                                            ],
                                            "type": "horizontal-stack"
                                        },
                                        {
                                            "cards": [
                                                {
                                                    "entity": "input_boolean.hdmi_matrix_in2",
                                                    "hold_action": "none",
                                                    "icon": "mdi:video-input-hdmi",
                                                    "name": "HTPC 5 - Kitchen",
                                                    "show_icon": true,
                                                    "show_name": true,
                                                    "state": [
                                                        {
                                                            "color": "red",
                                                            "value": "off"
                                                        },
                                                        {
                                                            "color": "white",
                                                            "value": "on"
                                                        }
                                                    ],
                                                    "styles": {
                                                        "card": [
                                                            {
                                                                "width": "210px"
                                                            },
                                                            {
                                                                "height": "98px"
                                                            }
                                                        ]
                                                    },
                                                    "tap_action": {
                                                        "action": "toggle"
                                                    },
                                                    "type": "custom:button-card"
                                                }
                                            ],
                                            "type": "horizontal-stack"
                                        },
                                        {
                                            "cards": [
                                                {
                                                    "entity": "input_boolean.hdmi_matrix_in3",
                                                    "hold_action": "none",
                                                    "icon": "mdi:video-input-hdmi",
                                                    "name": "HTPC 6 - Living Room",
                                                    "show_icon": true,
                                                    "show_name": true,
                                                    "state": [
                                                        {
                                                            "color": "blue",
                                                            "value": "off"
                                                        },
                                                        {
                                                            "color": "white",
                                                            "value": "on"
                                                        }
                                                    ],
                                                    "styles": {
                                                        "card": [
                                                            {
                                                                "width": "210px"
                                                            },
                                                            {
                                                                "height": "98px"
                                                            }
                                                        ]
                                                    },
                                                    "tap_action": {
                                                        "action": "toggle"
                                                    },
                                                    "type": "custom:button-card"
                                                }
                                            ],
                                            "type": "horizontal-stack"
                                        },

                                        {
                                            "cards": [
                                                {
                                                    "entity": "sensor.hdmi_matrix_output_3_map",
                                                    "hold_action": "none",
                                                    "icon": "mdi:sofa",
                                                    "name": "Living Room",
                                                    "show_icon": true,
                                                    "show_name": true,
                                                    "state": [
                                                        {
                                                            "color": "green",
                                                            "operator": "==",
                                                            "value": "VO:3IN:1"
                                                        },
                                                        {
                                                            "color": "red",
                                                            "operator": "==",
                                                            "value": "VO:3IN:2"
                                                        },
                                                        {
                                                            "color": "blue",
                                                            "operator": "==",
                                                            "value": "VO:3IN:3"
                                                        },
                                                        {
                                                            "color": "yellow",
                                                            "operator": "==",
                                                            "value": "VO:3IN:4"
                                                        },
                                                        {
                                                            "color": "Chartreuse",
                                                            "operator": "==",
                                                            "value": "VO:3IN:5"
                                                        },
                                                        {
                                                            "color": "brown",
                                                            "operator": "==",
                                                            "value": "VO:3IN:6"
                                                        },
                                                        {
                                                            "color": "Cyan",
                                                            "operator": "==",
                                                            "value": "VO:3IN:7"
                                                        },
                                                        {
                                                            "color": "DarkMagenta",
                                                            "operator": "==",
                                                            "value": "VO:3IN:8"
                                                        }
                                                    ],
                                                    "styles": {
                                                        "card": [
                                                            {
                                                                "width": "210px"
                                                            },
                                                            {
                                                                "height": "98px"
                                                            }
                                                        ]
                                                    },
                                                    "tap_action": {
                                                        "action": "call-service",
                                                        "service": "input_boolean.toggle",
                                                        "service_data": {
                                                            "entity_id": "input_boolean.hdmi_matrix_out3"
                                                        }
                                                    },
                                                    "type": "custom:button-card"
                                                }
                                            ],
                                            "type": "horizontal-stack"
                                        },
                                        {
                                            "cards": [
                                                {
                                                    "entity": "sensor.hdmi_matrix_output_4_map",
                                                    "hold_action": "none",
                                                    "icon": "mdi:bed-empty",
                                                    "name": "Small Bedroom",
                                                    "show_icon": true,
                                                    "show_name": true,
                                                    "state": [
                                                        {
                                                            "color": "green",
                                                            "operator": "==",
                                                            "value": "VO:4IN:1"
                                                        },
                                                        {
                                                            "color": "red",
                                                            "operator": "==",
                                                            "value": "VO:4IN:2"
                                                        },
                                                        {
                                                            "color": "blue",
                                                            "operator": "==",
                                                            "value": "VO:4IN:3"
                                                        },
                                                        {
                                                            "color": "yellow",
                                                            "operator": "==",
                                                            "value": "VO:4IN:4"
                                                        },
                                                        {
                                                            "color": "Chartreuse",
                                                            "operator": "==",
                                                            "value": "VO:4IN:5"
                                                        },
                                                        {
                                                            "color": "brown",
                                                            "operator": "==",
                                                            "value": "VO:4IN:6"
                                                        },
                                                        {
                                                            "color": "Cyan",
                                                            "operator": "==",
                                                            "value": "VO:4IN:7"
                                                        },
                                                        {
                                                            "color": "DarkMagenta",
                                                            "operator": "==",
                                                            "value": "VO:4IN:8"
                                                        }
                                                    ],
                                                    "styles": {
                                                        "card": [
                                                            {
                                                                "width": "210px"
                                                            },
                                                            {
                                                                "height": "98px"
                                                            }
                                                        ]
                                                    },
                                                    "tap_action": {
                                                        "action": "call-service",
                                                        "service": "input_boolean.toggle",
                                                        "service_data": {
                                                            "entity_id": "input_boolean.hdmi_matrix_out4"
                                                        }
                                                    },
                                                    "type": "custom:button-card"
                                                }
                                            ],
                                            "type": "horizontal-stack"
                                        },
                                        {
                                            "cards": [
                                                {
                                                    "entity": "sensor.hdmi_matrix_output_5_map",
                                                    "hold_action": "none",
                                                    "icon": "mdi:washing-machine",
                                                    "name": "Utility Room",
                                                    "show_icon": true,
                                                    "show_name": true,
                                                    "state": [
                                                        {
                                                            "color": "green",
                                                            "operator": "==",
                                                            "value": "VO:5IN:1"
                                                        },
                                                        {
                                                            "color": "red",
                                                            "operator": "==",
                                                            "value": "VO:5IN:2"
                                                        },
                                                        {
                                                            "color": "blue",
                                                            "operator": "==",
                                                            "value": "VO:5IN:3"
                                                        },
                                                        {
                                                            "color": "yellow",
                                                            "operator": "==",
                                                            "value": "VO:5IN:4"
                                                        },
                                                        {
                                                            "color": "Chartreuse",
                                                            "operator": "==",
                                                            "value": "VO:5IN:5"
                                                        },
                                                        {
                                                            "color": "brown",
                                                            "operator": "==",
                                                            "value": "VO:5IN:6"
                                                        },
                                                        {
                                                            "color": "Cyan",
                                                            "operator": "==",
                                                            "value": "VO:5IN:7"
                                                        },
                                                        {
                                                            "color": "DarkMagenta",
                                                            "operator": "==",
                                                            "value": "VO:5IN:8"
                                                        }
                                                    ],
                                                    "styles": {
                                                        "card": [
                                                            {
                                                                "width": "210px"
                                                            },
                                                            {
                                                                "height": "98px"
                                                            }
                                                        ]
                                                    },
                                                    "tap_action": {
                                                        "action": "call-service",
                                                        "service": "input_boolean.toggle",
                                                        "service_data": {
                                                            "entity_id": "input_boolean.hdmi_matrix_out5"
                                                        }
                                                    },
                                                    "type": "custom:button-card"
                                                }
                                            ],
                                            "type": "horizontal-stack"
                                        },
                                        {
                                            "cards": [
                                                {
                                                    "entity": "sensor.hdmi_matrix_output_6_map",
                                                    "hold_action": "none",
                                                    "icon": "mdi:speaker",
                                                    "name": "Living Room 1",
                                                    "show_icon": true,
                                                    "show_name": true,
                                                    "state": [
                                                        {
                                                            "color": "green",
                                                            "operator": "==",
                                                            "value": "VO:6IN:1"
                                                        },
                                                        {
                                                            "color": "red",
                                                            "operator": "==",
                                                            "value": "VO:6IN:2"
                                                        },
                                                        {
                                                            "color": "blue",
                                                            "operator": "==",
                                                            "value": "VO:6IN:3"
                                                        },
                                                        {
                                                            "color": "yellow",
                                                            "operator": "==",
                                                            "value": "VO:6IN:4"
                                                        },
                                                        {
                                                            "color": "Chartreuse",
                                                            "operator": "==",
                                                            "value": "VO:6IN:5"
                                                        },
                                                        {
                                                            "color": "brown",
                                                            "operator": "==",
                                                            "value": "VO:6IN:6"
                                                        },
                                                        {
                                                            "color": "Cyan",
                                                            "operator": "==",
                                                            "value": "VO:6IN:7"
                                                        },
                                                        {
                                                            "color": "DarkMagenta",
                                                            "operator": "==",
                                                            "value": "VO:6IN:8"
                                                        }
                                                    ],
                                                    "styles": {
                                                        "card": [
                                                            {
                                                                "width": "210px"
                                                            },
                                                            {
                                                                "height": "98px"
                                                            }
                                                        ]
                                                    },
                                                    "tap_action": {
                                                        "action": "call-service",
                                                        "service": "input_boolean.toggle",
                                                        "service_data": {
                                                            "entity_id": "input_boolean.hdmi_matrix_out6"
                                                        }
                                                    },
                                                    "type": "custom:button-card"
                                                }
                                            ],
                                            "type": "horizontal-stack"
                                        },
                                        {
                                        "cards": [
                                            {
                                                "entity": "sensor.hdmi_matrix_output_7_map",
                                                "hold_action": "none",
                                                "icon": "mdi:speaker",
                                                "name": "Living Room 2",
                                                "show_icon": true,
                                                "show_name": true,
                                                "state": [
                                                    {
                                                        "color": "green",
                                                        "operator": "==",
                                                        "value": "VO:7IN:1"
                                                    },
                                                    {
                                                        "color": "red",
                                                        "operator": "==",
                                                        "value": "VO:7IN:2"
                                                    },
                                                    {
                                                        "color": "blue",
                                                        "operator": "==",
                                                        "value": "VO:7IN:3"
                                                    },
                                                    {
                                                        "color": "yellow",
                                                        "operator": "==",
                                                        "value": "VO:7IN:4"
                                                    },
                                                    {
                                                        "color": "Chartreuse",
                                                        "operator": "==",
                                                        "value": "VO:7IN:5"
                                                    },
                                                    {
                                                        "color": "brown",
                                                        "operator": "==",
                                                        "value": "VO:7IN:6"
                                                    },
                                                    {
                                                        "color": "Cyan",
                                                        "operator": "==",
                                                        "value": "VO:7IN:7"
                                                    },
                                                    {
                                                        "color": "DarkMagenta",
                                                        "operator": "==",
                                                        "value": "VO:7IN:8"
                                                    }
                                                ],
                                                "styles": {
                                                    "card": [
                                                        {
                                                            "width": "210px"
                                                        },
                                                        {
                                                            "height": "98px"
                                                        }
                                                    ]
                                                },
                                                "tap_action": {
                                                    "action": "call-service",
                                                    "service": "input_boolean.toggle",
                                                    "service_data": {
                                                        "entity_id": "input_boolean.hdmi_matrix_out7"
                                                    }
                                                },
                                                "type": "custom:button-card"
                                            }
                                        ],
                                        "type": "horizontal-stack"
                                    },
                                    {
                                        "cards": [
                                            {
                                                "entity": "sensor.hdmi_matrix_output_8_map",
                                                "hold_action": "none",
                                                "icon": "mdi:seat-recline-extra",
                                                "name": "TV Room",
                                                "show_icon": true,
                                                "show_name": true,
                                                "state": [
                                                    {
                                                        "color": "green",
                                                        "operator": "==",
                                                        "value": "VO:8IN:1"
                                                    },
                                                    {
                                                        "color": "red",
                                                        "operator": "==",
                                                        "value": "VO:8IN:2"
                                                    },
                                                    {
                                                        "color": "blue",
                                                        "operator": "==",
                                                        "value": "VO:8IN:3"
                                                    },
                                                    {
                                                        "color": "yellow",
                                                        "operator": "==",
                                                        "value": "VO:8IN:4"
                                                    },
                                                    {
                                                        "color": "Chartreuse",
                                                        "operator": "==",
                                                        "value": "VO:8IN:5"
                                                    },
                                                    {
                                                        "color": "brown",
                                                        "operator": "==",
                                                        "value": "VO:8IN:6"
                                                    },
                                                    {
                                                        "color": "Cyan",
                                                        "operator": "==",
                                                        "value": "VO:8IN:7"
                                                    },
                                                    {
                                                        "color": "DarkMagenta",
                                                        "operator": "==",
                                                        "value": "VO:8IN:8"
                                                    }
                                                ],
                                                "styles": {
                                                    "card": [
                                                        {
                                                            "width": "210px"
                                                        },
                                                        {
                                                            "height": "98px"
                                                        }
                                                    ]
                                                },
                                                "tap_action": {
                                                    "action": "call-service",
                                                    "service": "input_boolean.toggle",
                                                    "service_data": {
                                                        "entity_id": "input_boolean.hdmi_matrix_out8"
                                                    }
                                                },
                                                "type": "custom:button-card"
                                            }
                                        ],
                                        "type": "horizontal-stack"
                                    }
                                ],
                                "type": "vertical-stack"
                            }
                        ],
                        "column_width": "50%",
                        "layout": "<layout>",
                        "max_columns": 3,
                        "max_width": "25%",
                        "min_columns": 3,
                        "min_height": 3,
                        "min_width": "5%",
                        "type": "custom:layout-card"
                    }
                ],
                "panel": true,
                "path": "hdmi-matrix",
                "title": "HDMI Matrix"
            },

`

basically the output map first gets called with: “entity”: “sensor.hdmi_matrix_output_1_map”,
then continues… forgive the partial config in areas but my terminal can only hold so many lines :rofl:

The nice thing is that Custom Button card: https://github.com/custom-cards/button-card
let’s you change color based on state. So if for example the code for one input is blue and you decide to send it to various outputs, they all go blue

Forgive the the multiple responses, I should have dumped everything into files and uploaded them - next time I will be more aware!!

Wow - thats a lot of config :rofl: kudos for getting that all working.

I am looking at different matrix option at the moment - i want one that does HDMI over CAT5 and notice Scion Tech also do a one of these. I am guessing you are UK based? Can i ask where you purchased your matrix please?

1 Like

ScionTech is really excellent as it also has analog and digital S/PDIF Coax outputs. Oh did I mention the Open API :wink:

You can get them directly from ScionTech themselves. www.scion-tech.co.uk

They are really helpful and have great customer service!

1 Like

This might of interest to you, you mentioned the 10BaseT. The ScionTech switches come with them included on selected models (basically all the 10BaseT models):

Thank you

Thats exactly what I want. I have been looking at the HDANYWHERE range this also has the open API but Scion might be a viable alternayive - expecially with the audio outputs too - i’m thinking this could solve the multi room audio / TTS announcments issue too.

1 Like

In my setup I am using the ScionTech coupled to the 12 channel Monitor Audio amplifier using 3.5mm stereo to 2x RCA phono leads.

This basically gives me 6x stereo outputs for multi room audio.

The way I have set things up is that I have 5x screen outputs using HDMI, the speakers on the screens are muted as I’m using a combination of Monitor Audio and Cambridge Audio ceiling speakers and 4x JBL Control 1 Vintage model that I bought almost 20 years ago now during my student days. <- they still work and surprisingly sound pretty good when coupled to the MA amp (though there obviously many different sounding speakers out there).

For inputs I mainly use ASRock J5005 based systems running KODI on top of Arch Linux. TV is sourced from a TBS MOI system which runs CentOS and TVHeadend using 4x tuner cards with a variety of TVB-S/T inputs.

Oh additionally the ScionTech has stereo analog inputs as well using 3.5mm stereo jacks and also can input/output IR too of which is useful for any type of set top box or BlueRay player etc…

I would say, yes give the ScionTech a try if it meets all the requirements.

Over the years I have seen and dealt with many different brands. More expensive does not always mean better - generally speaking of course as this statement is true for even enterprise grade network equipment or other systems at this level.
Sometimes it’s a good idea to just build what you want yourself if you have the ability and time, this is true for many things including niche devices such as NTP clocked Astronomic Clocks (which don’t exist on the market - the nearest are probably Meinberg Time Servers), HTPC’s, network devices such as routers/firewalls and so much more :slight_smile:

WOW!!! I’d love to know what you plan on buying after you’ve robbed the next bank :rofl: :rofl:

Seriously though thank you for your replies - its a great help

Shhh!!! You’re revealing state secrets :rofl:

  • definitely not an elevator! One place I worked in had one between the basement and ground floor. The stairs were so wide anyway that I didn’t see the point of that one; then again I wasn’t designing the place :joy:

No problem. I’m just happy that it has helped someone :smiley:

Would you care to share what you’ve implemented for the Intesis units? There’s a custom_componentwhich I’ve found to be slightly flaky, so maybe you’ve got a good alternative!

Hi! Sure:

This is what I’ve done… first created the directory path: /usr/share/hassio/homeassistant/intesis

Then I created 2 scripts:

Script 1- AC_INTESIS

#!/bin/bash

while :
do
    echo "GET,1:*" | nc -w 1 <intesis_ip> 3310 > /usr/share/hassio/homeassistant/intesis/BED1_ALL
    echo "ID" | nc -w 1 <intesis_ip> 3310 > /usr/share/hassio/homeassistant/intesis/BED1_ID
    echo "GET,1:*" | nc -w 1 <intesis_ip> 3310 > /usr/share/hassio/homeassistant/intesis/BED2_ALL
    echo "ID" | nc -w 1 <intesis_ip> 3310 > /usr/share/hassio/homeassistant/intesis/BED2_ID
done

Script 2- hassio.intesis

#!/bin/bash

#HASSIO Sensor Configuration
#####
#  - platform: command_line
#    command: "cat intesis/BED1_ALL | grep -m 1 AMBTEMP | cut -f2 -d : | cut -f2 -d , | sed 's/..$/.&/;t;s/^.$/.0&/'"
#    unit_of_measurement: "°C"
#    scan_interval: 1
#    name: "Intesis Loft Bedroom1 AC Temperature"    
#    
#  - platform: command_line
#    command: "cat intesis/BED2_ALL | grep -m 1 AMBTEMP | cut -f2 -d : | cut -f2 -d , | sed 's/..$/.&/;t;s/^.$/.0&/'"
#    unit_of_measurement: "°C"
#    scan_interval: 1
#    name: "Intesis Loft Bedroom2 AC Temperature"
#    
#  - platform: command_line
#    command: "cat intesis/BED1_ALL | grep ONOFF | cut -f2 -d : | cut -f2 -d ,"
#    scan_interval: 1
#    name: "Intesis Loft Bedroom1 AC OnOff"    
#    
#  - platform: command_line
#    command: "cat intesis/BED2_ALL | grep ONOFF | cut -f2 -d : | cut -f2 -d ,"
#    scan_interval: 1
#    name: "Intesis Loft Bedroom2 AC OnOff"    
#    
#  - platform: command_line
#    command: "cat intesis/BED1_ALL | grep FANSP | cut -f2 -d : | cut -f2 -d ,"
#    scan_interval: 1
#    name: "Intesis Loft Bedroom1 AC Fan Speed"    
#    
#  - platform: command_line
#    command: "cat intesis/BED2_ALL | grep FANSP | cut -f2 -d : | cut -f2 -d ,"
#    scan_interval: 1
#    name: "Intesis Loft Bedroom2 AC Fan Speed"    
#    
#  - platform: command_line
#    command: "cat intesis/BED1_ALL | grep MODE | cut -f2 -d : | cut -f2 -d ,"
#    scan_interval: 1
#    name: "Intesis Loft Bedroom1 AC Mode"    
#    
#  - platform: command_line
#    command: "cat intesis/BED2_ALL | grep MODE | cut -f2 -d : | cut -f2 -d ,"
#    scan_interval: 1
#    name: "Intesis Loft Bedroom2 AC Mode"    
#    
#  - platform: command_line
#    command: "cat intesis/BED1_ALL | grep VANEUD | cut -f2 -d : | cut -f2 -d ,"
#    scan_interval: 1
#    name: "Intesis Loft Bedroom1 AC VaneUD"    
#    
#  - platform: command_line
#    command: "cat intesis/BED2_ALL | grep VANEUD | cut -f2 -d : | cut -f2 -d ,"
#    scan_interval: 1
#    name: "Intesis Loft Bedroom2 AC VaneUD"
#    
#  - platform: command_line
#    command: "cat intesis/BED1_ALL | grep VANELR | cut -f2 -d : | cut -f2 -d ,"
#    scan_interval: 1
#    name: "Intesis Loft Bedroom1 AC VaneLR"    
#    
#  - platform: command_line
#    command: "cat intesis/BED2_ALL | grep VANELR | cut -f2 -d : | cut -f2 -d ,"
#    scan_interval: 1
#    name: "Intesis Loft Bedroom2 AC VaneLR"  
#    
#  - platform: command_line
#    command: "cat intesis/BED1_ID | cut -f6 -d ,"
#    scan_interval: 1
#    unit_of_measurement: 'dB'
#    name: "Intesis Loft Bedroom1 AC RSSI"    
#    
#  - platform: command_line
#    command: "cat intesis/BED2_ID | cut -f6 -d ,"
#    scan_interval: 1
#    unit_of_measurement: 'dB'
#    name: "Intesis Loft Bedroom2 AC RSSI"
######

while :

do
#
#BEDROOM 1 AC VARIABLES
#

        b1a="/usr/share/hassio/homeassistant/intesis/BED1_ALL"

        b1temp=$(cat "$b1a" | grep -m 1 AMBTEMP | cut -f2 -d : | cut -f2 -d , | sed 's/..$/.&/;t;s/^.$/.0&/')

        b1onoff=$(cat "$b1a" | grep ONOFF | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        b1fansp=$(cat "$b1a" | grep FANSP | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        b1mode=$(cat "$b1a" | grep MODE | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        b1vaneud=$(cat "$b1a" | grep VANEUD | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        b1vanelr=$(cat "$b1a" | grep VANELR | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        b1errs=$(cat "$b1a" | grep ERRSTATUS | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        b1errc=$(cat "$b1a" | grep ERRCODE | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

	b1id="/usr/share/hassio/homeassistant/intesis/BED1_ID"

	b1rssi=$(cat "$b1id" | cut -f6 -d ,)

        b1ip=$(cat "$b1id" | cut -f3 -d , | cut -f1 -d ' ')

#
#BEDROOM 2 AC VARIABLES
#

	b2a="/usr/share/hassio/homeassistant/intesis/BED2_ALL"

	b2temp=$(cat "$b2a" | grep -m 1 AMBTEMP | cut -f2 -d : | cut -f2 -d , | sed 's/..$/.&/;t;s/^.$/.0&/')

	b2onoff=$(cat "$b2a" | grep ONOFF | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

	b2fansp=$(cat "$b2a" | grep FANSP | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

	b2mode=$(cat "$b2a" | grep MODE | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

	b2vaneud=$(cat "$b2a" | grep VANEUD | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

	b2vanelr=$(cat "$b2a" | grep VANELR | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        b2errs=$(cat "$b2a" | grep ERRSTATUS | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        b2errc=$(cat "$b2a" | grep ERRCODE | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        b2id="/usr/share/hassio/homeassistant/intesis/BED2_ID"

        b2rssi=$(cat "$b2id" | cut -f6 -d ,)

        b2ip=$(cat "$b2id" | cut -f3 -d , | cut -f1 -d ' ')

#    
#LIVING ROOM AC VARIABLES
#  

        lra="/usr/share/hassio/homeassistant/intesis/LR_ALL"

        lrtemp=$(cat "$lra" | grep -m 1 AMBTEMP | cut -f2 -d : | cut -f2 -d , | sed 's/..$/.&/;t;s/^.$/.0&/')

        lronoff=$(cat "$lra" | grep ONOFF | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        lrfansp=$(cat "$lra" | grep FANSP | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        lrmode=$(cat "$lra" | grep MODE | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        lrvaneud=$(cat "$lra" | grep VANEUD | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        lrvanelr=$(cat "$lra" | grep VANELR | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        lrid="/usr/share/hassio/homeassistant/intesis/LR_ID"

        lrrssi=$(cat "$lrid" | cut -f6 -d ,)

        lrip=$(cat "$lrid" | cut -f3 -d ,)

#
#TV ROOM AC VARIABLES
#  

        tvra="/usr/share/hassio/homeassistant/intesis/TVR_ALL"

        tvrtemp=$(cat "$tvra" | grep -m 1 AMBTEMP | cut -f2 -d : | cut -f2 -d , | sed 's/..$/.&/;t;s/^.$/.0&/')

        tvronoff=$(cat "$tvra" | grep ONOFF | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        tvrfansp=$(cat "$tvra" | grep FANSP | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        tvrmode=$(cat "$tvra" | grep MODE | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        tvrvaneud=$(cat "$tvra" | grep VANEUD | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        tvrvanelr=$(cat "$tvra" | grep VANELR | cut -f2 -d : | cut -f2 -d , | tr -d [:cntrl:])

        tvrid="/usr/share/hassio/homeassistant/intesis/TVR_ID"

        tvrrssi=$(cat "$tvrid" | cut -f6 -d ,)

        tvrip=$(cat "$tvrid" | cut -f3 -d ,)


#
#BEDROOM 1 CURL FUNCTION FOR HASSIO API
#


        if [ -z "$b1temp" ]
        then
                echo "b1temp empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": '$b1temp', "attributes": {"unit_of_measurement": "°C","friendly_name": "Intesis Loft Bedroom1 AC Temperature"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom1_ac_temperature ;
        fi

        if [ -z "$b1onoff" ]
        then
                echo "b1onoff empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$b1onoff"'", "attributes": {"friendly_name": "Intesis Loft Bedroom1 AC OnOff"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom1_ac_onoff ;
        fi

        if [ -z "$b1fansp" ]
        then
                echo "b1fansp empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$b1fansp"'", "attributes": {"friendly_name": "Intesis Loft Bedroom1 AC Fan Speed"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom1_ac_fan_speed ;
        fi

        if [ -z "$b1mode" ]
        then
                echo "b1mode empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$b1mode"'", "attributes": {"friendly_name": "Intesis Loft Bedroom1 AC Mode"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom1_ac_mode ;
        fi

        if [ -z "$b1vaneud" ]
        then
                echo "b1vaneud empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$b1vaneud"'", "attributes": {"friendly_name": "Intesis Loft Bedroom1 AC VaneUD"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom1_ac_vaneud ;
        fi

        if [ -z "$b1vanelr" ]
        then
                echo "b1vanelr empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$b1vanelr"'", "attributes": {"friendly_name": "Intesis Loft Bedroom1 AC VaneLR"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom1_ac_vanelr ;
        fi

        if [ -z "$b1errs" ]
        then
                echo "b1errs empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$b1errs"'", "attributes": {"friendly_name": "Intesis Loft Bedroom1 AC Error Status"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom1_ac_errs ;
        fi

        if [ -z "$b1errc" ]
        then
                echo "b1errc empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$b1errc"'", "attributes": {"friendly_name": "Intesis Loft Bedroom1 AC Error Code"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom1_ac_errc ;
        fi

        if [ -z "$b1rssi" ]
        then
                echo "b1rssi empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": '$b1rssi', "attributes": {"unit_of_measurement": "dBi","friendly_name": "Intesis Loft Bedroom1 AC RSSI"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom1_ac_rssi ;
        fi

        if [ -z "$b1ip" ]
        then
                echo "b1ip empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": '$b1ip', "attributes": {"friendly_name": "Intesis Loft Bedroom1 AC IP"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom1_ac_ip ;
        fi

#
#BEDROOM 2 CURL FUNCTION FOR HASSIO API
#

	if [ -z "$b2temp" ]
	then
		echo "b2temp empty"
        else
		curl -X POST \
    			-H "Authorization: Bearer <auth_string>" \
    			-H "Content-Type: application/json" \
    			-d '{"state": '$b2temp', "attributes": {"unit_of_measurement": "°C","friendly_name": "Intesis Loft Bedroom2 AC Temperature"}}' \
    			http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom2_ac_temperature ;
	fi

        if [ -z "$b2onoff" ]
        then
                echo "b2onoff empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$b2onoff"'", "attributes": {"friendly_name": "Intesis Loft Bedroom2 AC OnOff"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom2_ac_onoff ;
        fi

        if [ -z "$b2fansp" ]
        then
                echo "b2fansp empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$b2fansp"'", "attributes": {"friendly_name": "Intesis Loft Bedroom2 AC Fan Speed"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom2_ac_fan_speed ;
        fi

        if [ -z "$b2mode" ]
        then
                echo "b2mode empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$b2mode"'", "attributes": {"friendly_name": "Intesis Loft Bedroom2 AC Mode"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom2_ac_mode ;
        fi

        if [ -z "$b2vaneud" ]
        then
                echo "b2vaneud empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$b2vaneud"'", "attributes": {"friendly_name": "Intesis Loft Bedroom2 AC VaneUD"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom2_ac_vaneud ;
        fi

        if [ -z "$b2vanelr" ]
        then
                echo "b2vanelr empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$b2vanelr"'", "attributes": {"friendly_name": "Intesis Loft Bedroom2 AC VaneLR"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom2_ac_vanelr ;
        fi

        if [ -z "$b2errs" ]
        then
                echo "b2errs empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$b2errs"'", "attributes": {"friendly_name": "Intesis Loft Bedroom2 AC Error Status"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom2_ac_errs ;
        fi

        if [ -z "$b2errc" ]
        then
                echo "b2errc empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$b2errc"'", "attributes": {"friendly_name": "Intesis Loft Bedroom2 AC Error Code"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom2_ac_errc ;
        fi

        if [ -z "$b2rssi" ]
        then
                echo "b2rssi empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": '$b2rssi', "attributes": {"unit_of_measurement": "dBi","friendly_name": "Intesis Loft Bedroom2 AC RSSI"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom2_ac_rssi ;
        fi

        if [ -z "$b2ip" ]
        then
                echo "b2ip empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": '$b2ip', "attributes": {"friendly_name": "Intesis Loft Bedroom2 AC IP"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_loft_bedroom2_ac_ip ;
        fi

#
#LIVING ROOM CURL FUNCTION FOR HASSIO API
#

	if [ -z "$lrtemp" ]
	then
		echo "lrtemp empty"
        else
		curl -X POST \
    			-H "Authorization: Bearer <auth_string>" \
    			-H "Content-Type: application/json" \
    			-d '{"state": '$lrtemp', "attributes": {"unit_of_measurement": "°C","friendly_name": "Intesis Living Room AC Temperature"}}' \
    			http://<hassio_ip>:8123/api/states/sensor.intesis_living_room_ac_temperature ;
	fi

        if [ -z "$lronoff" ]
        then
                echo "lronoff empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$lronoff"'", "attributes": {"friendly_name": "Intesis Living Room AC OnOff"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_living_room_ac_onoff ;
        fi

        if [ -z "$lrfansp" ]
        then
                echo "lrfansp empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$lrfansp"'", "attributes": {"friendly_name": "Intesis Living Room AC Fan Speed"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_living_room_ac_fan_speed ;
        fi

        if [ -z "$lrmode" ]
        then
                echo "lrmode empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$lrmode"'", "attributes": {"friendly_name": "Intesis Living Room AC Mode"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_living_room_ac_mode ;
        fi

        if [ -z "$lrvaneud" ]
        then
                echo "lrvaneud empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$lrvaneud"'", "attributes": {"friendly_name": "Intesis Living Room AC VaneUD"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_living_room_ac_vaneud ;
        fi

        if [ -z "$lrvanelr" ]
        then
                echo "lrvanelr empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$lrvanelr"'", "attributes": {"friendly_name": "Intesis Living Room AC VaneLR"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_living_room_ac_vanelr ;
        fi

        if [ -z "$lrrssi" ]
        then
                echo "lrrssi empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": '$lrrssi', "attributes": {"unit_of_measurement": "dBi","friendly_name": "Intesis Living Room AC RSSI"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_living_room_ac_rssi ;
        fi

        if [ -z "$lrip" ]
        then
                echo "lrip empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": '$lrip', "attributes": {""friendly_name": "Intesis Living Room AC IP"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_living_room_ac_ip ;
        fi

#
#TV ROOM CURL FUNCTION FOR HASSIO API
#

	if [ -z "$tvrtemp" ]
	then
		echo "tvrtemp empty"
        else
		curl -X POST \
    			-H "Authorization: Bearer <auth_string>" \
    			-H "Content-Type: application/json" \
    			-d '{"state": '$tvrtemp', "attributes": {"unit_of_measurement": "°C","friendly_name": "Intesis TV Room AC Temperature"}}' \
    			http://<hassio_ip>:8123/api/states/sensor.intesis_tv_room_ac_temperature ;
	fi

        if [ -z "$tvronoff" ]
        then
                echo "tvronoff empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$tvronoff"'", "attributes": {"friendly_name": "Intesis TV Room AC OnOff"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_tv_room_ac_onoff ;
        fi

        if [ -z "$tvrfansp" ]
        then
                echo "tvrfansp empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$tvrfansp"'", "attributes": {"friendly_name": "Intesis TV Room AC Fan Speed"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_tv_room_ac_fan_speed ;
        fi

        if [ -z "$tvrmode" ]
        then
                echo "tvrmode empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$tvrmode"'", "attributes": {"friendly_name": "Intesis TV Room AC Mode"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_tv_room_ac_mode ;
        fi

        if [ -z "$tvrvaneud" ]
        then
                echo "tvrvaneud empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$tvrvaneud"'", "attributes": {"friendly_name": "Intesis TV Room AC VaneUD"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_tv_room_ac_vaneud ;
        fi

        if [ -z "$tvrvanelr" ]
        then
                echo "tvrvanelr empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": "'"$tvrvanelr"'", "attributes": {"friendly_name": "Intesis TV Room AC VaneLR"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_tv_room_ac_vanelr ;
        fi

        if [ -z "$tvrrssi" ]
        then
                echo "tvrrssi empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": '$tvrrssi', "attributes": {"unit_of_measurement": "dBi","friendly_name": "Intesis TV Room AC RSSI"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_tv_room_ac_rssi ;
        fi

        if [ -z "$tvrip" ]
        then
                echo "tvrip empty"
        else
                curl -X POST \
                        -H "Authorization: Bearer <auth_string>" \
                        -H "Content-Type: application/json" \
                        -d '{"state": '$tvrip', "attributes": {"friendly_name": "Intesis TV Room AC IP"}}' \
                        http://<hassio_ip>:8123/api/states/sensor.intesis_tv_room_ac_ip ;
        fi
done

The rest are just sensors and switches in Hassio config eg.

      intesis_loft_bedroom2_ac_switch:
        command_on: "echo 'SET,1:ONOFF,ON' | nc -w 1 <intesis_ip> 3310"
        command_off: "echo 'SET,1:ONOFF,OFF' | nc -w 1 <intesis_ip> 3310"
        command_state: "cat intesis/BED2_ALL | grep ONOFF | cut -f2 -d : | cut -f2 -d ,"
        value_template: '{{ value == "ON" }}' 
      loft_bedroom2_ac_fan_speed_auto:
        command_on: "echo 'SET,1:FANSP,AUTO' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:FANSP' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "AUTO" }}'
      loft_bedroom2_ac_fan_speed_1:
        command_on: "echo 'SET,1:FANSP,1' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:FANSP' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "1" }}'
      loft_bedroom2_ac_fan_speed_2:
        command_on: "echo 'SET,1:FANSP,2' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:FANSP' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "2" }}'
      loft_bedroom2_ac_fan_speed_3:
        command_on: "echo 'SET,1:FANSP,3' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:FANSP' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "3" }}'
      loft_bedroom2_ac_fan_speed_4:
        command_on: "echo 'SET,1:FANSP,4' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:FANSP' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "4" }}'
      loft_bedroom2_ac_fan_speed_5:
        command_on: "echo 'SET,1:FANSP,5' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:FANSP' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "5" }}'  
      loft_bedroom2_ac_mode_auto:
        command_on: "echo 'SET,1:MODE,AUTO' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:MODE' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "AUTO" }}'        
      loft_bedroom2_ac_mode_cool:
        command_on: "echo 'SET,1:MODE,COOL' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:MODE' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "COOL" }}'        
      loft_bedroom2_ac_mode_fan:
        command_on: "echo 'SET,1:MODE,FAN' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:MODE' | nc -w 1 <intesis_ip> 3310" 
        value_template: '{{ value == "FAN" }}' 
      loft_bedroom2_ac_mode_dry:
        command_on: "echo 'SET,1:MODE,DRY' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:MODE' | nc -w 1 <intesis_ip> 3310" 
        value_template: '{{ value == "DRY" }}'
      loft_bedroom2_ac_mode_heat:
        command_on: "echo 'SET,1:MODE,HEAT' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:MODE' | nc -w 1 <intesis_ip> 3310" 
        value_template: '{{ value == "HEAT" }}'
      loft_bedroom2_ac_vane_updown_auto:
        command_on: "echo 'SET,1:VANEUD,AUTO' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:VANEUD' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "AUTO" }}'
      loft_bedroom2_ac_vane_updown_1:
        command_on: "echo 'SET,1:VANEUD,1' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:VANEUD' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "1" }}'
      loft_bedroom2_ac_vane_updown_2:
        command_on: "echo 'SET,1:VANEUD,2' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:VANEUD' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "2" }}'
      loft_bedroom2_ac_vane_updown_3:
        command_on: "echo 'SET,1:VANEUD,3' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:VANEUD' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "3" }}'
      loft_bedroom2_ac_vane_updown_4:
        command_on: "echo 'SET,1:VANEUD,4' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:VANEUD' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "4" }}'
      loft_bedroom2_ac_vane_updown_5:
        command_on: "echo 'SET,1:VANEUD,5' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:VANEUD' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "5" }}'
      loft_bedroom2_ac_vane_updown_swing:
        command_on: "echo 'SET,1:VANEUD,SWING' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:VANEUD' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "SWING" }}' 
      loft_bedroom2_ac_vane_leftright_auto:
        command_on: "echo 'SET,1:VANELR,AUTO' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:VANELR' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "AUTO" }}'
      loft_bedroom2_ac_vane_leftright_1:
        command_on: "echo 'SET,1:VANELR,1' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:VANELR' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "1" }}'
      loft_bedroom2_ac_vane_leftright_2:
        command_on: "echo 'SET,1:VANELR,2' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:VANELR' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "2" }}'
      loft_bedroom2_ac_vane_leftright_3:
        command_on: "echo 'SET,1:VANELR,3' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:VANELR' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "3" }}'
      loft_bedroom2_ac_vane_leftright_4:
        command_on: "echo 'SET,1:VANELR,4' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:VANELR' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "4" }}'
      loft_bedroom2_ac_vane_leftright_5:
        command_on: "echo 'SET,1:VANELR,5' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:VANELR' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "5" }}'
      loft_bedroom2_ac_vane_leftright_swing:
        command_on: "echo 'SET,1:VANELR,SWING' | nc -w 1 <intesis_ip> 3310"
        command_state: "echo 'GET,1:VANELR' | nc -w 1 <intesis_ip> 3310"
        value_template: '{{ value == "SWING" }}' 
  - platform: command_line
    command: "cat intesis/BED2_ID |cut -f3 -d ',' |cut -f1 -d ' '"
    scan_interval: 10
    name: "Intesis Loft Bedroom2 AC IP"

In the UI can then create things like this:

Please let me know if there’s anything you else you need :slight_smile:

Thanks! It’s a shame that there’s no command-line climate integration. I suspect it would drive me a bit batty having so many individual entities like that, but your Bash scripts are pretty clever, and could be made even more flexible by using variables for your individual units.

I think I’m going to have to get my head back around the Climate.MQTT integration and the wmp2mqtt project

The Intesis protocol is a very basic and simple protocol which actually before using Netcat I attempted using Curl and found it didn’t work well. So because of this it is a little different to integrate then a standard HTTP based API which outputs JSON or XML.

As for the bash scripts, yes of course - they can be made dynamic by using variables and probably refined in other areas too.
What I have done is simply added them to a cron tab and started them @reboot.

There is a thermostat integration in Hassio which can be made to work with the system. Just like the dimmer integration. Unfortunately I haven’t had time to play around with them as there are many things to sort out still taking priority.

Anyway, glad that you found my ideas interesting. If there is anything else I can help with just let me know :wink:

Congratulations on your setup. I am way behind but your UI screenshots are a huge inspiration. How did you manage to establish the integration with Carlo Gavazzi energy meter modbus ? I mean on the hardware side as well as the software (hassio config) side ?

Thanks for the comment!

So, what I’ve done is yes used Modbus. I added a 45A energy meter after each RCBO in the top DIN panel. I then used CAT6 cable to connect the Modbus interface. You can ‘daisy chain’ the system but I chose to use a Phoenix Contact PTFix to interconnect the meters with the VMU-C.

On the software side I am using the API from the VMU.

I wrote a quick shell script which I run in cron:

#!/bin/bash

uname={username}
passwd={password}
ip_address={ipv4}

epoc=`date +%s`
#echo $epoc
t0=$(( $epoc - 300 ))
#echo $t0

wget -N --output-file=/usr/share/hassio/homeassistant/carlo_gavazzi/vmu-c_api.log --user-agent=MOZILLA --output-document=/usr/share/hassio/homeassistant/carlo_gavazzi/vmu-c.energy "http://$ip_address/receiverftp.php?HTTP_VAR_QRY&$uname@$passwd&$t0&$epoc&ALL&ALL"

The information is then fed into Home Assistant using the configuration.yaml file:

    
  - platform: command_line
    command: "cat carlo_gavazzi/vmu-c.energy |grep 'AC;VIRT_EM;;Main_Meter.Group1P' |cut -f9 -d ';'"
    scan_interval: 10
    unit_of_measurement: "kWh"
    name: "Main Meter kWh" 
    
  - platform: command_line
    command: "cat carlo_gavazzi/vmu-c.energy |grep 'AC;VIRT_EM;;Main_Meter.Group1P' |cut -f22 -d ';'"
    scan_interval: 10
    unit_of_measurement: "kW"
    name: "Main Meter kW"  
    
  - platform: command_line
    command: "cat carlo_gavazzi/vmu-c.energy |grep 'AC;VIRT_EM;;Main_Meter.Group1P' |cut -f11 -d ';'"
    scan_interval: 10
    unit_of_measurement: "V"
    name: "Main Meter V" 
    
  - platform: command_line
    command: "cat carlo_gavazzi/vmu-c.energy |grep 'AC;VIRT_EM;;Main_Meter.Group1P' |cut -f19 -d ';'"
    scan_interval: 10
    unit_of_measurement: "A"
    name: "Main Meter A"

Hope that helps. Let me know if you need any more information :slight_smile: