Adax Panel Heater with Wifi Thermostat connected to openHAB using the HTTP Binding

Hi,

Recently I got a bunch of Adax Neo Wifi Panel Heaters (electric radiator). These heathers come with a wifi enabled thermostat and a remote and a local api, and Adax provides some python scripts to interact with these api’s. Using those scripts makes hooking up the radiators to a wifi network and enabeling the local api quite a easy task. I’m not interested in yet an other cloud based smart thing/whatever solution, so I happily went for the local intergration.
When the radiators (thermostats) are hooked up and when the local api is enabled, the next step is to get them playing nice with openHAB. This is also quite easy, no dedicated Adax Binding is needed, the HTTP Binding is sufficient.
Below I’ll provide all the UI code that’s needed to get the whole thing going, I guess y’all know how to deduct the relevant information from it.

UID: http:url:4b5db98dd2
label: PH | HL | 02
thingTypeUID: http:url
configuration:
  authMode: BASIC_PREEMPTIVE
  headers:
    - Authorization= Basic 0123456789
  ignoreSSLErrors: true
  baseURL: https://10.47.3.242:443
  delay: 10000
  stateMethod: GET
  refresh: 60
  commandMethod: GET
  timeout: 5000
  bufferSize: 2048
channels:
  - id: adax_ph_02_temp_current
    channelTypeUID: http:number
    label: PH 02 Current Temperature
    description: null
    configuration:
      stateExtension: /api?command=stat&time=%1$ts
      stateTransformation: DSL:|(transform("JSONPATH", "$.['currTemp']",
        input.toString))∩DSL:|(Float::parseFloat(input.toString)/100)
  - id: adax_ph_02_temp_target
    channelTypeUID: http:number
    label: PH 02 Target Temperature
    description: null
    configuration:
      commandTransformation: DSL:|((Float::parseFloat(input.toString)*100).intValue)
      stateExtension: /api?command=stat&time=%1$ts
      commandExtension: /api?command=set_target&value=%2$s&time=%1$ts
      stateTransformation: DSL:|(transform("JSONPATH", "$.['targTemp']",
        input.toString))∩DSL:|(Float::parseFloat(input.toString)/100)

Some remarks:

  • This setup works quite well and is stable enough, the refresh interval is a factor that can provoke some instability, don’t set it to short.
  • Once in a while the connection chokes up, based on the http code the thermostat is returning in that case, I’ve got the impression that the api can throw a tantrum once in a while, powering the radiator off and then on again is enough to let it play nice again.
  • Little easteregg on 29/03/2028; the Adax dev people managed to sneak a leaptimebug in to the local api stack, unless they manage to remove the bug by a firmware upgrade, you’ll have to reregister/integrate the heaters, it’s a bit anoying but it’s a once in a four year chore…

Link to Adax scripts:
https://adax.no/wi-fi/api-development/

Best regards,
Jesse

1 Like