Package: pykumo
pykumoPython library to interact with Mitsubishi Kumo Cloud devices via their local API.The hard work of generating the security token was done byhttps://github.com/sushilks/kumojs, and that part of pykumo is based heavily on sushilks's code, translated to Python by me. pykumo has no dependency on kumojs.Kumo System ComponentsOutdoor UnitThe outdoor unit houses the compressor and the outdoor coil. Each indoor unit connects to its outdoor unit via a pair of refrigerant lines and an electric power supply and communication cable. (Collectively this connection is called a lineset.) Kumo Cloud does not appear to be able to communicate directly with an outdoor unit.Indoor UnitIndoor units, also called air handlers, are in the conditioned space, and contain the indoor fan and heat exchanger coil, providing either cooling or heating. An indoor unit can be connected to some or all of the following:WiFi adapter (e.g. PAC-USWHS002-WF-2) (via CN105 connector)Wall-mounted controller MHK2 (via CN105 connector)Wireless remote sensor (via Bluetooth to the WiFi adapter)An indoor unit with a WiFi adapter has its own IP address on your local network.Pykumo communicates with an indoor unit via its WiFi adapter, using an API exposed by the adapter.MHK2The MHK2 wall-mounted controller, if present, acts like a traditional thermostat for a single indoor unit, while also providing other controls. It also contains its own temperature and humidity sensors.Kumo StationKumo Station allows controlling traditional HVAC equipment via the Kumo Cloud app, managing switchover between Kumo and external equipment. It also provides an outdoor temperature sensor. A Kumo Station has its own IP address.TroubleshootingWiFiThe most common cause of flaky behavior is weak WiFi signal at the indoor unit. Try measuring WiFi strength (2.4 GHz only) with a phone app. Also try repositioning the Mitsubishi WiFi adapter within the unit, positioning it close to the plastic exterior rather than metal interior components.API errorsIn early 2023 Mitsubishi appears to have made some change that makes the WiFi adapter less reliable. My educated guess is that it has a memory leak. SeeIssue 105in the hass-kumo repository for discussion.As a result of this issue, if you are seeingserializer_erroror (especially)__no_memoryerrors consistently when performing operations, it's likely that your indoor unit needs power-cycling. Unfortunately the easiest way is probably at the circuit breaker for the entire mini-split system.Interactive UseIt's possible to use pykumo in an interactive shell to do debugging, investigation of possible new features, and so on.I recommend doing this work in avirtualenv. If you're not familiar with these, search the web for "python virtualenv" for details specific to your preferred operating system.Start an Interactive Python Shellpip3 install pykumo
python3Set Up KumoCloudAccountInside the Python shell:import pykumo
account = pykumo.KumoCloudAccount.Factory()This will prompt for your KumoCloud username and password.account.get_indoor_units()If successful,get_indoor_unitsprints a list of your indoor units' serial numbers.Get Indoor Unitskumos = account.make_pykumos()
unit = kumos['<indoor unit name>']
unit.update_status()The indoor unit name is the human-readable name. If successful,update_statusprintsTrue. You can then make various API calls on theunitobject.Get Raw Information from Indoor UnitYou can print the internal state of the indoor unit object, which includes the JSON information fetched from the unit itself. This is a good place to look when requesting support for additional pykumo features.import pprint
pp = pprint.PrettyPrinter()
pp.pprint(unit.__dict__)Query or Command an Indoor Unit DirectlyIndoor units speak a simple protocol of nested JSON. I'm not documenting the protocol here (though documentation patches would be welcome!), but if you look through thepykumo.pycode for calls toself._requestyou can see the queries and commands that are already enabled. For example:query = '{"c":{"indoorUnit":{"status":{}}}}'.encode('utf-8')
unit._request(query)This prints the primary record, thestatusobject. Most of the valid queries and commands were discovered by snooping the traffic between the Kumo Cloud app and the indoor unit. A few were determined by experimentation. It's possible that additional values and controls are available beyond those already discovered, especially on indoor units newer than those owned by this author. I welcome details on these via pull requests or issues on this repo.