Rinnai Heating/Cooling Wifi Module

@Mantorok - I’m pretty happy with the MQTT Zone status updates, but I gave the new Zone accessory a test run. This is pretty clever, as it would be useful for anyone that has a multi set point config.

Here’s a screenshot for anyone interested as to what it looks like.

However… This does break the HA HomeKit integration somewhat. Well, it doesn’t break it, it just doesn’t sync any zones. This would be expected, as they are no longer switches. I don’t know how you’d be able to sync this new type of accessory in to HA without having a custom switch module with a state and status.

Hi @David_M, the Multi Set Point config has had this ability to show thermostats for each zone since version 1.2.0. That’s where I got the idea from.

I think I know why the zone accessories are not working with the HA HomeKit integration. According to https://www.home-assistant.io/integrations/homekit/ the ‘Heater Cooler’ is not a supported component. I’m not sure if there are any plans to add it in the near future.

An option could be to use the ‘Thermostat’ instead which is supported by HA HomeKit. Although the 2 look pretty much the same there are some subtle differences in the way they function. The reason I chose the ‘Heater Cooler’ is that you can tap the tile to toggle the zone on & off (so it works like a switch). With the ‘Thermostat’ you have to tap the tile, which displays the menu, then you have to select off or heat/cool for on.

EDIT: Looks like someone has already raised the lack of ‘Heater Cooler’ support in HA: https://github.com/home-assistant/core/issues/30384

hey @Mantorok - With the recent update, I don’t suppose you changed anything that would have caused increase polling to the wifi module. Since updating a few days ago I’ve woken up to a cold house due to my automation schedule not running because of the infamous ECONNREFUSED timeout error starting in the middle of the night. Happened twice today also. I never use the Rinnai app, but double checked it wasn’t open.

I had the publishFrequency set to 30, so I’ve just changed it to 60 to see if it helps.

Good find re the Heater Cooler accessory. Developer suggests ensuring a serial is set for accessories, but I’ve confirmed the new ones do have a unique one. Not bothering me at the moment.

Also, are these frequent, and random, open/close connections normal behavior?

image

I can’t think of anything I may have changed to cause that behaviour. You could try turning on debug logs to see what’s causing the tcp connection to open so frequently. I don’t see that in my logs but I’m not using MQTT

I was thinking about adding a bit more logging to show what’s causing the tcp connection to open. Sounds like it may be needed!

Have you tried setting the connection timeout to -1?

Another thing to try is increasing the Close Connection Delay. Perhaps try adding 100 ms

I’ve released version 2.5.1 of the plugin. This version includes:

  • Changes to the config for controller & zone accessories
  • Removal of AUTO option from Zone Heater Cooler
  • Extra logging to show what caused the TCP connection to open

NOTE: If you do not use the default controller type (ie. Thermostat) or the default Zone type (ie. Switches) then you’ll need to modify the config to re-select your preferred types.

Thanks Mantorok for the plugin! Super impressive. I’ve installed it in Portainer in Homebridge in Hassio.

I get a bunch of stuff in the Homebridge log that looks like:

e[37m[7/3/2020, 2:33:59 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchRepository.execute({"type":"close"})
e[37m[7/3/2020, 2:33:59 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchRepository.process({"type":"close"})
e[37m[7/3/2020, 2:33:59 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchRepository.closeConnection()
e[37m[7/3/2020, 2:33:59 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchTcp.destroy()
e[37m[7/3/2020, 2:33:59 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Closed
e[37m[7/3/2020, 2:34:00 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchRepository.drained()
e[37m[7/3/2020, 2:34:52 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateStates()
e[37m[7/3/2020, 2:34:52 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchRepository.execute({"type":"get"})
e[37m[7/3/2020, 2:34:52 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchRepository.process({"type":"get"})
e[37m[7/3/2020, 2:34:52 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchRepository.connect()
e[37m[7/3/2020, 2:34:52 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchTcp.connect()
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Open
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchRepository.dataHandler(N000000[{"SYST": {"CFG": {"MTSP": "N", "NC": "00", "DF": "N", "TU": "C", "CF": "1", "VR": "0181", "CV": "0008", "CC": "043", "ZA": "                ", "ZB": "                ", "ZC": "                ", "ZD": "                " }, "AVM": {"HG": "Y", "EC": "Y", "CG": "N", "RA": "N", "RH": "N", "RC": "N" }, "OSS": {"DY": "FRI", "TM": "12:32", "BP": "Y", "RG": "Y", "ST": "N", "MD": "H", "DE": "N", "DU": "N", "AT": "999", "LO": "N" }, "FLT": {"AV": "N", "C3": "000" } } },{"HGOM": {"CFG": {"ZUIS": "Y", "ZAIS": "N", "ZBIS": "N", "ZCIS": "N", "ZDIS": "N", "CF": "N", "PS": "Y", "DG": "W" }, "OOP": {"ST": "N", "CF": "N", "FL": "00", "SN": "Y" }, "GSO": {"OP": "A", "SP": "18", "AO": "O" }, "GSS": {"HC": "N", "FS": "N", "GV": "N", "PH": "N", "AT": "L", "AZ": "L" }, "APS": {"AV": "N" }, "ZUO": {"UE": "Y" }, "ZAO": {"UE": "N" }, "ZBO": {"UE": "N" }, "ZCO": {"UE": "N" }, "ZDO": {"UE": "N" }, "ZUS": {"AE": "N", "MT": "999" }, "ZAS": {"AE": "N", "MT": "999" }, "ZBS": {"AE": "N", "MT": "999" }, "ZCS": {"AE": "N", "MT": "999" }, "ZDS": {"AE": "N", "MT": "999" } } }])
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateAll(status)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateMode(status)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(Mode,)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(Mode,HGOM,)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateZones(status)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(ZoneInstalled,U)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(ZoneInstalled,HGOM,U)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(ZoneInstalled,A)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(ZoneInstalled,HGOM,A)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(ZoneInstalled,B)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(ZoneInstalled,HGOM,B)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(ZoneInstalled,C)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(ZoneInstalled,HGOM,C)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(ZoneInstalled,D)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(ZoneInstalled,HGOM,D)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateState(status)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(State,)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(State,HGOM,)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateFanState(status)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(FanState,)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(FanState,HGOM,)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.mode()
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateFanSpeed(status)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(FanSpeed,)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(FanSpeed,HGOM,)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateCurrentTemperature(status)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(CurrentTemp,U)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(CurrentTemp,HGOM,U)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(CurrentTemp,A)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(CurrentTemp,HGOM,A)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(CurrentTemp,B)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(CurrentTemp,HGOM,B)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(CurrentTemp,C)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(CurrentTemp,HGOM,C)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(CurrentTemp,D)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(CurrentTemp,HGOM,D)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateTargetTemperature(status)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.hasMultiSetPoint()
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(TargetTemp,U)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(TargetTemp,HGOM,U)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.mode()
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateTemperatureUnits(status)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(TempUnits,)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(TempUnits,HGOM,)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateSystemActive(status)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.hasMultiSetPoint()
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(SystemActive,)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(SystemActive,HGOM,)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateAutoEnabled(status)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(AutoEnabled,U)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(AutoEnabled,HGOM,U)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(AutoEnabled,A)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(AutoEnabled,HGOM,A)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(AutoEnabled,B)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(AutoEnabled,HGOM,B)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(AutoEnabled,C)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(AutoEnabled,HGOM,C)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(AutoEnabled,D)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(AutoEnabled,HGOM,D)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateUserEnabled(status)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(UserEnabled,U)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(UserEnabled,HGOM,U)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(UserEnabled,A)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(UserEnabled,HGOM,A)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(UserEnabled,B)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(UserEnabled,HGOM,B)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(UserEnabled,C)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(UserEnabled,HGOM,C)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(UserEnabled,D)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(UserEnabled,HGOM,D)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateControlMode(status)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.hasMultiSetPoint()
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(ControlMode,U)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(ControlMode,HGOM,U)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateScheduleOverride(status)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.hasMultiSetPoint()
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(ScheduleOverride,U)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(ScheduleOverride,HGOM,U)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updatePumpState(status)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getState(PumpState,)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] StateService.getPath(PumpState,HGOM,)
e[37m[7/3/2020, 2:34:53 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.mode()
e[37m[7/3/2020, 2:34:54 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchRepository.dataHandler(N000001[{"SYST": {"CFG": {"MTSP": "N", "NC": "00", "DF": "N", "TU": "C", "CF": "1", "VR": "0181", "CV": "0008", "CC": "043", "ZA": "                ", "ZB": "                ", "ZC": "                ", "ZD": "                " }, "AVM": {"HG": "Y", "EC": "Y", "CG": "N", "RA": "N", "RH": "N", "RC": "N" }, "OSS": {"DY": "FRI", "TM": "12:32", "BP": "Y", "RG": "Y", "ST": "N", "MD": "H", "DE": "N", "DU": "N", "AT": "999", "LO": "N" }, "FLT": {"AV": "N", "C3": "000" } } },{"HGOM": {"CFG": {"ZUIS": "Y", "ZAIS": "N", "ZBIS": "N", "ZCIS": "N", "ZDIS": "N", "CF": "N", "PS": "Y", "DG": "W" }, "OOP": {"ST": "N", "CF": "N", "FL": "00", "SN": "Y" }, "GSO": {"OP": "A", "SP": "18", "AO": "O" }, "GSS": {"HC": "N", "FS": "N", "GV": "N", "PH": "N", "AT": "L", "AZ": "L" }, "APS": {"AV": "N" }, "ZUO": {"UE": "Y" }, "ZAO": {"UE": "N" }, "ZBO": {"UE": "N" }, "ZCO": {"UE": "N" }, "ZDO": {"UE": "N" }, "ZUS": {"AE": "N", "MT": "999" }, "ZAS": {"AE": "N", "MT": "999" }, "ZBS": {"AE": "N", "MT": "999" }, "ZCS": {"AE": "N", "MT": "999" }, "ZDS": {"AE": "N", "MT": "999" } } }])
e[37m[7/3/2020, 2:34:54 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[DEBUG] RinnaiTouchService.updateAll(status)

My config is:

        {
            "controllerType": "H",
            "zoneType": "N",
            "showFan": true,
            "showAuto": true,
            "showAdvanceSwitches": true,
            "showManualSwitches": true,
            "clearCache": false,
            "debug": true,
            "mqtt": {
                "host": "mqtt://homeassistant",
                "username": "mqtt",
                "password": "mqtt",
                "topicPrefix": "hassio",
                "formatHomeAssistant": true,
                "publishStatusChanged": true,
                "publishIntervals": true,
                "publishFrequency": 10,
                "subscribeTemperature": {
                    "U": "hassio/sensor/0x00158d0002273997"
                }
            },
            "platform": "RinnaiTouchPlatform"
        }
    ]

When I subscribe to hassio/# in MQTT, the only entry I see that looks relevant is:

Message 64 received on hassio/hvac/action/get at 5:03 PM:
{
    "U": "idle"
}

Shouldn’t I see more? What haven’t I done?

What do you see using the “Home” app on iPhone?

Hi Chris, here’s a screenshot.

What do you see on both Home and MQTT when you manually turn on/off and change temperature? (Just trying to establish what works/what doesn’t …)

Also, can you confirm that you publish temp updates to hassio/sensor/0x00158d0002273997?

@tortfeaser, can you turn off the debug logging. There’s a bit too much information there, it’s useful for finding bugs but there should be sufficient details in the normal logs to see if anything is received or sent via MQTT.

@FrontBottom I can’t see what happens in Home now, I connected the Homebridge to HA as a Homekit COntroller and now Home wants the device reset before I can add it there. Baffling I can’t add it to both at once. In MQTT I get nothing. I don’t publish updates there. I thought the plugin would parse the JSON. I’ve removed that option.

@Mantorok done. Config is now:

    "platforms": [
        {
            "name": "Config",
            "port": 8080,
            "auth": "form",
            "theme": "auto",
            "tempUnits": "c",
            "lang": "auto",
            "platform": "config"
        },
        {
            "controllerType": "T",
            "zoneType": "H",
            "showFan": true,
            "showAuto": true,
            "showAdvanceSwitches": true,
            "showManualSwitches": true,
            "clearCache": false,
            "debug": false,
            "mqtt": {
                "host": "mqtt://homeassistant",
                "username": "mqtt",
                "password": "mqtt",
                "topicPrefix": "rinnai",
                "formatHomeAssistant": true,
                "publishStatusChanged": true,
                "publishIntervals": true,
                "publishFrequency": 10
            },
            "platform": "RinnaiTouchPlatform"
        }
    ]
}

Log coming.

OK. Seems to think its doing the right thing:

e[37m[7/3/2020, 7:49:11 AM] e[39mHomebridge is running on port 51558.
e[37m[7/3/2020, 7:49:12 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Found Rinnai Touch module at 192.168.1.171:27847
e[37m[7/3/2020, 7:49:12 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Open
e[37m[7/3/2020, 7:49:14 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Found Heater
e[37m[7/3/2020, 7:49:14 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Found Evaporative Cooler
e[37m[7/3/2020, 7:49:14 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Found Zone(s): Common
e[37m[7/3/2020, 7:49:14 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Operation Mode: Single Temperature Set Point
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Publish: rinnai/hvac/action/get, Payload: {"U":"heating"}
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[ERROR] Cannot read property 'publish' of undefined
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Publish: rinnai/hvac/fan_mode/get, Payload: low
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[ERROR] Cannot read property 'publish' of undefined
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Publish: rinnai/hvac/mode/get, Payload: heat
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[ERROR] Cannot read property 'publish' of undefined
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Publish: rinnai/hvac/temperature/get, Payload: 19
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[ERROR] Cannot read property 'publish' of undefined
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Publish: rinnai/switch/heat/get, Payload: on
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[ERROR] Cannot read property 'publish' of undefined
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Publish: rinnai/switch/cool/get, Payload: off
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[ERROR] Cannot read property 'publish' of undefined
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Publish: rinnai/switch/evap/get, Payload: off
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[ERROR] Cannot read property 'publish' of undefined
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Publish: rinnai/switch/fan/get, Payload: off
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[ERROR] Cannot read property 'publish' of undefined
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Publish: rinnai/switch/manual/get, Payload: off
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[ERROR] Cannot read property 'publish' of undefined
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Connected to MQTT broker at mqtt://homeassistant:1883
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/hvac/fan_mode/set
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/hvac/mode/set
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/hvac/temperature/set
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/switch/zone/a/set
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/switch/zone/b/set
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/switch/zone/c/set
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/switch/zone/d/set
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/switch/heat/set
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/switch/cool/set
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/switch/evap/set
e[37m[7/3/2020, 7:49:15 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/switch/fan/set
e[37m[7/3/2020, 7:49:16 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/switch/manual/set
e[37m[7/3/2020, 7:49:16 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/switch/manual/a/set
e[37m[7/3/2020, 7:49:16 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/switch/manual/b/set
e[37m[7/3/2020, 7:49:16 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/switch/manual/c/set
e[37m[7/3/2020, 7:49:16 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] Subscribe: rinnai/switch/manual/d/set
e[37m[7/3/2020, 7:49:19 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Closed
e[37m[7/3/2020, 7:49:24 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] MQTT Publish Event: Scheduled Interval
e[37m[7/3/2020, 7:49:24 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Open
e[37m[7/3/2020, 7:49:31 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Closed
e[37m[7/3/2020, 7:49:34 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] MQTT Publish Event: Scheduled Interval
e[37m[7/3/2020, 7:49:34 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Open
e[37m[7/3/2020, 7:49:41 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Closed
e[37m[7/3/2020, 7:49:44 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] MQTT Publish Event: Scheduled Interval
e[37m[7/3/2020, 7:49:44 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Open
e[37m[7/3/2020, 7:49:51 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Closed
e[37m[7/3/2020, 7:49:54 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] MQTT Publish Event: Scheduled Interval
e[37m[7/3/2020, 7:49:54 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Open
e[37m[7/3/2020, 7:50:01 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Closed
e[37m[7/3/2020, 7:50:04 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] MQTT Publish Event: Scheduled Interval
e[37m[7/3/2020, 7:50:04 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Open
e[37m[7/3/2020, 7:50:11 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Closed
e[37m[7/3/2020, 7:50:14 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] MQTT Publish Event: Scheduled Interval
e[37m[7/3/2020, 7:50:14 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Open
e[37m[7/3/2020, 7:50:21 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Closed
e[37m[7/3/2020, 7:50:24 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] MQTT Publish Event: Scheduled Interval
e[37m[7/3/2020, 7:50:24 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Open
e[37m[7/3/2020, 7:50:31 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Closed
e[37m[7/3/2020, 7:50:34 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] MQTT Publish Event: Scheduled Interval
e[37m[7/3/2020, 7:50:34 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Open
e[37m[7/3/2020, 7:50:41 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Closed
e[37m[7/3/2020, 7:50:44 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] MQTT Publish Event: Scheduled Interval
e[37m[7/3/2020, 7:50:44 AM] e[39me[36m[RinnaiTouchPlatform] e[39m[INFO] TCP Connection: Open

[ERROR] Cannot read property 'publish' of undefined

That error is a bit of a worry. Let me see if I can replicate. Seems to be trying to publish before its connected to the broker

Thanks @Mantorok. Let me know if I can give more logs/configs/whatever.

OK, I deleted accessories and persist folders in …/homebridge and restarted everything. MQTT giving useful info now. Dunno what happened.

Message 9 received on rinnai/switch/manual/get at 6:11 PM:
off
QoS: 0 - Retain: false
Message 8 received on rinnai/switch/fan/get at 6:11 PM:
off
QoS: 0 - Retain: false
Message 7 received on rinnai/switch/evap/get at 6:11 PM:
off
QoS: 0 - Retain: false
Message 6 received on rinnai/switch/cool/get at 6:11 PM:
off
QoS: 0 - Retain: false
Message 5 received on rinnai/switch/heat/get at 6:11 PM:
on
QoS: 0 - Retain: false
Message 4 received on rinnai/hvac/temperature/get at 6:11 PM:
19
QoS: 0 - Retain: false
Message 3 received on rinnai/hvac/mode/get at 6:11 PM:
heat
QoS: 0 - Retain: false
Message 2 received on rinnai/hvac/fan_mode/get at 6:11 PM:
low
QoS: 0 - Retain: false
Message 1 received on rinnai/hvac/action/get at 6:11 PM:
{
    "U": "heating"
}
QoS: 0 - Retain: false
Message 0 received on rinnai/hvac/action/get at 6:08 PM:
{
    "U": "heating"
}
QoS: 0 - Retain: true

I think I know what the problem is. The plugin will wait 1 sec before performing the initial MQTT publication. I suspect that it’s taking longer than that to establish a connection to your MQTT broker. I’ll try to get a fix out shortly.

Version 2.5.2 of the plugin has been released. This should fix the issue where the initial publish could occur before the broker connection is established.

Unbelievable @Mantorok. Thanks.

Hi Mantorok,

This was working great previously, just updated to 2.5.2 but getting the logs which were already posted:

[7/6/2020, 6:44:37 AM] [RinnaiTouchPlatform] [INFO] Publish: brivis/hvac/action/get, Payload: {"U":"heating"}
[7/6/2020, 6:44:37 AM] [RinnaiTouchPlatform] [ERROR] Cannot read property 'publish' of undefined
[7/6/2020, 6:44:37 AM] [RinnaiTouchPlatform] [INFO] Publish: brivis/hvac/mode/get, Payload: heat
[7/6/2020, 6:44:37 AM] [RinnaiTouchPlatform] [ERROR] Cannot read property 'publish' of undefined
[7/6/2020, 6:44:37 AM] [RinnaiTouchPlatform] [INFO] Publish: brivis/hvac/temperature/get, Payload: 22
[7/6/2020, 6:44:37 AM] [RinnaiTouchPlatform] [ERROR] Cannot read property 'publish' of undefined
[7/6/2020, 6:44:37 AM] [RinnaiTouchPlatform] [INFO] Publish: brivis/switch/heat/get, Payload: on
[7/6/2020, 6:44:37 AM] [RinnaiTouchPlatform] [ERROR] Cannot read property 'publish' of undefined
[7/6/2020, 6:44:37 AM] [RinnaiTouchPlatform] [INFO] Publish: brivis/switch/manual/get, Payload: on
[7/6/2020, 6:44:37 AM] [RinnaiTouchPlatform] [ERROR] Cannot read property 'publish' of undefined

Can’t seem to MQTT to HA either.

@Hass10, when you upgraded did you restart Homebridge when the upgrade was finished?

Also, in the logs does it show that the plugin connected to the MQTT Broker? Perhaps after those errors?