The split-system heat pump consists of an indoor and outdoor unit, which communicate via CAN bus. The outdoor unit runs a bare-metal application on a micro-controller to control a ventilator.
The indoor unit runs the HMI and heating control applications on an embedded Linux system powered by a micro-processor. It is connected to the local network in the home via WiFi or Ethernet. The indoor unit has a private class-C IP address and no public IP address. Port forwarding from the home's modem plus router to the heat pump is disabled.
On startup, the heat pump establishes an MQTT connection to the manufacturer's server. It continuously sends operational data to the server and receives commands from the server. The server relays data and commands between the heat pump and the homeowner's phone. For example, the homeowners can start heating up the water for the shower from remote, because they will come home two hours earlier from their trip.
When commissioning, a technician registers the heat pump with the server. The homeowners create an account on the manufacturer's website. They can use the same account for the app. They authenticate with their username and password.
Service technicians have access to all heat pumps. They log in to the admin panel with their username and password. When they connect to a heat pump, the server sends a command to enable the diagnostic mode. The heat pump sends more parameters. The technicians have a large set of special diagnostic commands at their disposal.
When the service technicians can't solve the problem, the developers will be the last resort. Developers can log in with ssh to each heat pump and debug the hard problems from the comfort of their office. If developers can't solve the problems from remote, they can travel to the home, open the front cover of the heat pump and connect their laptop to the serial port on the main board with a custom-made USB-to-serial cable.