How to integrate Daikin Altherma LT heat pump?

I did a man in the middle capture and found the following end points:

/[0]
/[0]/MNAE/0
/[0]/MNAE/0/DateTime/la
/[0]/MNAE/0/Error/la
/[0]/MNAE/0/UnitProfile/la
/[0]/MNAE/1
/[0]/MNAE/1/ChildLock/LockedState/la
/[0]/MNAE/1/ChildLock/PinCode/la
/[0]/MNAE/1/Consumption/la
/[0]/MNAE/1/Holiday/EndDate/la
/[0]/MNAE/1/Holiday/HolidayState/la
/[0]/MNAE/1/Holiday/StartDate/la
/[0]/MNAE/1/Operation/OperationMode/la
/[0]/MNAE/1/Operation/Power/la
/[0]/MNAE/1/Operation/TargetTemperature/la
/[0]/MNAE/1/Schedule/Next/la
/[0]/MNAE/1/Sensor/IndoorTemperature/la
/[0]/MNAE/1/Sensor/OutdoorTemperature/la
/[0]/MNAE/1/UnitIdentifier/Icon/la
/[0]/MNAE/1/UnitIdentifier/Name/la
/[0]/MNAE/1/UnitProfile/la
/[0]/MNAE/1/UnitStatus/EmergencyState/la
/[0]/MNAE/1/UnitStatus/ErrorState/la
/[0]/MNAE/1/UnitStatus/InstallerState/la
/[0]/MNAE/1/UnitStatus/TargetTemperatureOverruledState/la
/[0]/MNAE/1/UnitStatus/WarningState/la
/[0]/MNAE/2
/[0]/MNAE/2/ChildLock/LockedState/la
/[0]/MNAE/2/ChildLock/PinCode/la
/[0]/MNAE/2/Consumption/la
/[0]/MNAE/2/Holiday/EndDate/la
/[0]/MNAE/2/Holiday/HolidayState/la
/[0]/MNAE/2/Holiday/StartDate/la
/[0]/MNAE/2/Operation/OperationMode/la
/[0]/MNAE/2/Operation/Power/la
/[0]/MNAE/2/Operation/Powerful/la
/[0]/MNAE/2/Operation/TargetTemperature/la
/[0]/MNAE/2/Schedule/Next/la
/[0]/MNAE/2/Sensor/TankTemperature/la
/[0]/MNAE/2/UnitIdentifier/Icon/la
/[0]/MNAE/2/UnitIdentifier/Name/la
/[0]/MNAE/2/UnitInfo/UnitType/la
/[0]/MNAE/2/UnitProfile/la
/[0]/MNAE/2/UnitStatus/EmergencyState/la
/[0]/MNAE/2/UnitStatus/ErrorState/la
/[0]/MNAE/2/UnitStatus/InstallerState/la
/[0]/MNAE/2/UnitStatus/ReheatState/la
/[0]/MNAE/2/UnitStatus/TargetTemperatureOverruledState/la
/[0]/MNAE/2/UnitStatus/WarningState/la
/[0]/MNAE/2/UnitStatus/WeatherDependentState/la
/[0]/MNAE/3
/[0]/MNCSE-node/deviceInfo
/[0]/MNCSE-node/firmware

You can do a discovery of your device by asking for the [0]/MNAE/ and then a number. This will give you a response of what unit you are talking to:

{"m2m:rsp":{"rsc":2000,"rqi":"lcmsd","to":"/S","fr":"/[0]/MNAE/0","pc":{"m2m:cnt":{"rn":"0","ri":"006a","pi":"C0003","ty":3,"ct":"20000000T000000Z","lt":"20000000T000000Z","st":11,"lbl":"function/Adapter"}}}}
{"m2m:rsp":{"rsc":2000,"rqi":"lnjnp","to":"/S","fr":"/[0]/MNAE/2","pc":{"m2m:cnt":{"rn":"2","ri":"003c","pi":"C0003","ty":3,"ct":"20000000T000000Z","lt":"20000000T000000Z","st":13,"lbl":"function/DomesticHotWaterTank"}}}}

A non existing unit will give you a rsc:4004. The next step would then be to request the unit profile: /[0]/MNAE/2/UnitProfile/la which gives you a map of the end points that can be talked to and some information about what answers to expect (only the con part shown here):

{  
   "Sensor":[  
      "IndoorTemperature",
      "OutdoorTemperature"
   ],
   "UnitStatus":[  
      "ErrorState",
      "InstallerState",
      "WarningState",
      "EmergencyState",
      "TargetTemperatureOverruledState"
   ],
   "Operation":{  
      "Power":[  
         "on",
         "standby"
      ],
      "OperationMode":[  
         "heating"
      ],
      "TargetTemperature":{  
         "heating":{  
            "maxValue":30.0000000000000000,
            "minValue":12.0000000000000000,
            "stepValue":1.0000000000000000
         }
      }
   },
   "Schedule":{  
      "Base":"action",
      "defaultScheduleAvailable":"true",
      "NameAdjustable":"false",
      "List":{  
         "heating":[  
            {  
               "StartTime":{  
                  "stepValue":10.0000000000000000,
                  "unit":"minutes"
               },
               "TargetTemperature":{  
                  "heating":{  
                     "maxValue":30.0000000000000000,
                     "minValue":12.0000000000000000,
                     "stepValue":1.0000000000000000
                  }
               },
               "Actions":[  
                  "StartTime",
                  "TargetTemperature"
               ],
               "maxActionsAllowed":6
            },
            [  
               "monday",
               "tuesday",
               "wednesday",
               "thursday",
               "friday",
               "saturday",
               "sunday"
            ],
            [  
               "monday",
               "tuesday",
               "wednesday",
               "thursday",
               "friday",
               "saturday",
               "sunday"
            ],
            [  
               "monday",
               "tuesday",
               "wednesday",
               "thursday",
               "friday",
               "saturday",
               "sunday"
            ],
            [  

            ]
         ]
      }
   },
   "Consumption":{  
      "Electrical":{  
         "unit":"kWh",
         "Heating":{  
            "Daily":{  
               "contentCount":24,
               "resolution":2
            },
            "Weekly":{  
               "contentCount":14,
               "resolution":1
            },
            "Monthly":{  
               "contentCount":24,
               "resolution":1
            }
         }
      }
   }
}{  
   "Sensor":[  
      "TankTemperature"
   ],
   "UnitStatus":[  
      "ErrorState",
      "InstallerState",
      "WeatherDependentState",
      "WarningState",
      "EmergencyState"
   ],
   "Operation":{  
      "Power":[  
         "on",
         "standby"
      ],
      "OperationMode":[  
         "reheat_only"
      ],
      "TargetTemperature":{  
         "reheat_only":{  
            "maxValue":60.0000000000000000,
            "minValue":30.0000000000000000,
            "stepValue":1.0000000000000000
         }
      },
      "powerful":[  
         "0",
         "1"
      ]
   },
   "Schedule":{  

   },
   "Consumption":{  
      "Electrical":{  
         "unit":"kWh",
         "Heating":{  
            "Daily":{  
               "contentCount":24,
               "resolution":2
            },
            "Weekly":{  
               "contentCount":14,
               "resolution":1
            },
            "Monthly":{  
               "contentCount":24,
               "resolution":1
            }
         }
      }
   }
}

Notably interesting is the response to consumption:

{"Electrical":{"Heating":{"D":[0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,3,null],"W":[1,1,2,2,1,0,1,1,2,null,null,null,null,null],"M":[null,null,null,null,null,null,null,null,null,null,null,null,null,0,82,23,100,null,null,null,null,null,null,null]}}}

Unfortunately I don’t have my heating on long enough to get some more interesting data. But I consider writing a proper Daikin adapter bundle as there is some interesting data on these.

1 Like