OWL Intuition Home Assistant Integration

Are you able to boost the heating and set timers?? If so I would be very grateful if you would be able to me understand how to achieve this?

Many thanks

I have been able to boost heating…
For setting timer, UI is too complicated lol. I have the set of command and the java program that I can run to do so. let me know if you would be intereted?

I would absolutely be very interested in the boost command, I am not very technical though so may need a little help guiding how to get this sorted :+1:

Many thanks

First you need to create the custom sensors and switches

- platform: command_line
  name: Hot Water State
  command: /home/homeassistant/.homeassistant/scripts/hotwater_state.sh
- platform: command_line
  name: Hot Water Temperature
  command: xmllint --xpath "string(//current)" /home/homeassistant/.homeassistant/owl/
xmlOutput/hot_water.xml
  value_template: '{{ value | round(1) }}'
  unit_of_measurement: "°C"
- platform: command_line
  name: Outside Temperature
  command: xmllint --xpath "string(//ambient)" /home/homeassistant/.homeassistant/owl/
xmlOutput/hot_water.xml
  value_template: '{{ value | round(1) }}'
  unit_of_measurement: "°C"
- platform: command_line
  name: Downstairs Temperature
  command: xmllint --xpath "string(//zone[2]/temperature/current)" /home/homeassistant
/.homeassistant/owl/xmlOutput/heating.xml
  value_template: '{{ value | round(1) }}'
  unit_of_measurement: "°C"
- platform: command_line
  name: Upstairs Temperature
  command: xmllint --xpath "string(//zone[1]/temperature/current)" /home/homeassistant
/.homeassistant/owl/xmlOutput/heating.xml
  value_template: '{{ value | round(1) }}'
  unit_of_measurement: "°C"
- platform: command_line
  name: Current Electricity Consumption
  command: xmllint --xpath "string(/electricity/chan[1]/curr)" /home/homeassistant/.ho
meassistant/owl/xmlOutput/electricity.xml
  value_template: '{{ value | round(0) }}'
  unit_of_measurement: "w"
- platform: command_line
  name: Today Electricity Consumption
  command: xmllint --xpath "string(/electricity/chan[1]/day)" /home/homeassistant/.hom
eassistant/owl/xmlOutput/electricity.xml
  value_template: '{{ (value|float / 1000)| round(1) }}'
  unit_of_measurement: "kwh"
- platform: command_line
  name: Downstairs State
  command: /home/homeassistant/.homeassistant/scripts/heating_downstairs_state.sh
- platform: command_line
  name: Upstairs State
  command: /home/homeassistant/.homeassistant/scripts/heating_upstairs_state.sh
- platform: command_line
  name: Hot Water State Until
  command: date +%R", %d/%m/%y" -ud @$(xmllint --xpath "string(//temperature/@until)"
/home/homeassistant/.homeassistant/owl/xmlOutput/hot_water.xml)

- platform: command_line
  switches:
    morehw:
      command_on: /home/homeassistant/.homeassistant/scripts/morehw.sh
      command_off: /home/homeassistant/.homeassistant/scripts/morehw.sh
      command_state: /home/homeassistant/.homeassistant/scripts/morehw_status.sh
      friendly_name: Hot Water
    away:
      command_on: /home/homeassistant/.homeassistant/scripts/away.sh
      command_off: /home/homeassistant/.homeassistant/scripts/away.sh
      command_state: /home/homeassistant/.homeassistant/scripts/away_status.sh
      friendly_name: Away
    comfort_down:
      command_on: /home/homeassistant/.homeassistant/scripts/comfort_downstairs.sh
      command_off: /home/homeassistant/.homeassistant/scripts/standby_downstairs.sh
      command_state: /home/homeassistant/.homeassistant/scripts/comfort_downstairs_sta
tus.sh
      friendly_name: Heating Downstairs
    comfort_up:
      command_on: /home/homeassistant/.homeassistant/scripts/comfort_upstairs.sh
      command_off: /home/homeassistant/.homeassistant/scripts/standby_upstairs.sh
      command_state: /home/homeassistant/.homeassistant/scripts/comfort_upstairs_statu
s.sh
      friendly_name: Heating Upstairs
    boost_down:
      command_on: /home/homeassistant/.homeassistant/scripts/boost_on_downstairs.sh
      command_off: /home/homeassistant/.homeassistant/scripts/boost_off_downstairs.sh
      command_state: /home/homeassistant/.homeassistant/scripts/boost_downstairs_statu
s.sh
      friendly_name: Boost Heating Downstairs
    boost_up:
      command_on: /home/homeassistant/.homeassistant/scripts/boost_on_upstairs.sh
      command_off: /home/homeassistant/.homeassistant/scripts/boost_off_upstairs.sh
      command_state: /home/homeassistant/.homeassistant/scripts/boost_upstairs_status.
sh
      friendly_name: Boost Heating Upstairs



Then you need to go the corresponding folders and create the shell scripts as indicated to the switches and sensors.

Then you need the various commands to start/stop owl in different modes.

Comfort: echo "COMFORT,“zoneid”,“udp_code” > /dev/udp/networkowl/“port”
Boost: echo "BOOST,ON/OFF,“zoneid”,“udp_code” > /dev/udp/networkowl/“port”
More Hot Water: echo “MOREHW,“udp_code”” > /dev/udp/networkowl/“port”
Standby: echo "STANDBY,“zoneid”,“udp_code” > /dev/udp/networkowl/“port”

At last you need to create the listener server.php

root@raspberrypi4:/home/homeassistant/.homeassistant/owl# more server.php
<?php
/**
 * Configuration class
 */
class Config
{
    /**
     * Get configuration file and read contents
     *
     * @return object
     */
    public static function getConfigFile()
    {
        $config_file_name = __DIR__.'/config.json';
        if (!is_file($config_file_name)) {
            die('Missing config file');
        }

        $config = file_get_contents($config_file_name);

        if (!$config = json_decode($config)) {
            die('Invalid config json format');
        }

        return $config;
    }
}

$config = Config::getConfigFile();

$xml_output_folder = $config->server_export_path;


if( !is_dir($xml_output_folder) ){
    if (!@mkdir($xml_output_folder, 0777, true)) {
        die("Failed to create folder. Please create it manually\n");
    }
}

//Reduce errors
error_reporting(~E_WARNING);

//Create a UDP socket
if(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0)))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Couldn't create socket: [$errorcode] $errormsg \n");
}

if ($config->debug) {
    echo "Socket created \n";
}

// Bind the source address
if( !socket_bind($sock, $config->server_ip, $config->server_port) )
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not bind socket : [$errorcode] $errormsg \n");
}

if ($config->debug) {
    echo "Socket bind OK \n";
}

//Do some communication, this loop can handle multiple clients
while(1)
{
    if ($config->debug) {
        echo "Waiting for data ... \n\n";
    }

    //Receive some data
    $r = socket_recvfrom($sock, $buf, 1024, 0, $remote_ip, $remote_port);
    if ($config->debug) {
        echo "$remote_ip : $remote_port -- " . $buf."\n";
    }

    //Read the data and partse them as xml
    $xml = simplexml_load_string($buf);

    //Get the time of the event
    $timestamp = $xml->timestamp->__toString();
    //Get the type of the xml
    $xml_type = $xml->getName();
        //Get current datetime
    $date = new DateTime();
    $date->setTimestamp($timestamp);
    $date->format('U = Y-m-d H:i:s');

    //filename for supporting multiple gateways and files
    // $file_name = $remote_ip.'-'.$xml_type.'-'.$date->format('YmdHis').'.xml';
    //In case you want the same name for every type of xml
    $file_name = $xml_type.'.xml';

    file_put_contents($xml_output_folder.$file_name, $xml->asXml());
}

socket_close($sock);

root@raspberrypi4:/home/homeassistant/.homeassistant/owl# more config.json
{
“server_ip”: “0.0.0.0”,
“server_port”: “port”,
“server_export_path”: “/home/homeassistant/.homeassistant/owl/xmlOutput/”,
“debug”: false
}
I hope I did not forget anything.

Thank you that is very kind of you!!

Looks a little overwhelming for me just gonna take my time and work through it :+1:

Again, thank you for sharing

Craig

@bluraytommo
If you need any help you can let me know

you may regret offering that haha however thank you kindly really appreciate the help and support!!

@03397

Thanks again for your help.
I’ve looked into the steps you’ve provided which I am incredibly grateful for however unfortunately I’m stumped at what to do, feel like a dumbass :confused: as I say not technical in the slightest however I have genuinely tried.
Essentially my main goal is to boost the heating and link this to the amazon alexa integration HA has so I can boost it using voice commands.

I only have one thermostat and as such one zone, however, if its possible would you be able to help provide an idiot proof step by step to help with this. I would be beyond grateful! :slight_smile:

@sanyamkaushik

Hello, hope you are well during these uncertain times

Would you be able to share how you are able to boost the heating with me please?

Regards

Hello Good working good on here,
i have been trying to get my Owl system working with Home assistant,
i have been using nodered and have managed to collect the data for making the Temp gauges, Solar use , Electic use by using a udp node but i want to use the Udp node to send the on and off comands needed to control Owl can any one help with how i set the node up please.

Thank James

I’m trying to do set up Node Red Dashboard to control my Owl Heating and single phase Electricity monitor. Not doing too badly atm but struggling with the Boost and Away states as I cannot find where I can read those states from to get the buttons to display correctly. I’ve discovered the Boost command acts like a toggle and if done from the Standby state, will return it to that state. If done from the Comfort state, sending the Comfort command does nothing; the Boost has to be pressed again to get back to Comfort. The logic is quite confusing and without knowing the state precisely, I think it’s impossible to code. ie things can go out of synch if someone uses the main panel as opposed to the Dashboard.
Does anyone know any better?
Here’s what I’ve got so far (it’s still work in progress as I learn Node-Red and Javascript! (along with Arduino speak, Home Assistant and Tasmota)

This looks amazing!!! not technical in the slightest if you know of an easy way to boost the heating I would be very interested in understanding how.

The dashboard looks just incredible really well done!!

I’ve added a lot more functionality now and split the Heating and Electricity menus onto different tabs. Been a bit distracted of late with another project but my intention is to finish off by testing the commands to change heating times, set Holiday dates and change some other heating parameters like Standby Temperature. When done I intend to post the whole flow it in the projects area or somewhere appropriate.
To do a Boost, you need to send the UDP command to the IP of your Owl hub and Port 5100 using Node-Red or a UDP app (I use UDP Sender / Receiver) on your phone. The command is ‘BOOST,ABCD1234’ where ABCD1234 is your own UDP key which can be found using the Owl dashboard System (scroll down) Set Data Push.
I’ll post again here when I publish.

Hello Wingnut.
You seem to know what your doing and amazing work so far, i have managed to get data from Owl using Node-Reds udp in node and this Owl Intuition SolarPV - multicast reader
( https://flows.nodered.org/flow/03575ef8114cbe7d2667e350e4178e3e ), but have not managed to control the heating or hotwater using udp out, can you by any chance tell me how to do that.

Thanks James

Actually, It’s quite easy to have a text input node so you can enter a command like <get,device> and have that passed to a change node that puts it into a global. Then a button node (Commit) triggers a function to read the global, turn it to upper case if necessary and add your specific UDP code to the end. The message then gets passed to a UDP out node with your Owl’s IP address and port 5100. It also needs a local port to bind to for the response (I use 8887). That’s it, your command will get sent.
What you then need is something to listen for the response. This would be a UDP in node listening for UDP messages (not multicast) on the port that you specified as the local port on the UDP out node (ie 8887). The output string just needs displaying in a text node. That’s it.
You need to know how to create a Dashboard and access it (I assume you do).
You also need to know what the commands are. They are all given in the Owl Intuition API documents which you find here https://theowl.zendesk.com/hc/en-gb/articles/201284603-Multicast-UDP-API-Information. All commands must be in upper case and have your unique UDP code at the end. That code is got from your proper Owl dashboard as I mentioned above.
I will be publishing my complete dashboard flow at some point when I am happy with it. I just don’t get a lot of time and am having issues with my router atm that lock up my Owl hub.

1 Like

I’ve just posted a simple flow for entering commands. Give it a go and let me know how you get on.

https://flows.nodered.org/flow/9de1840f1b293f1ed6640b55e0ec9020

Wow that has help me a lot Thank you so much, i have been trying for a long time to link my owl system to Home Assistant and Alexa. I now can control my heating and hot water by voice.
Here is how i used your code.

[{“id”:“622f8b16.c193c4”,“type”:“tab”,“label”:“Flow 1”,“disabled”:false,“info”:""},{“id”:“d3f9f0de.29d2f”,“type”:“udp in”,“z”:“622f8b16.c193c4”,“name”:“Get Owl UDP Response”,“iface”:"",“port”:“8888”,“ipv”:“udp4”,“multicast”:“false”,“group”:"",“datatype”:“utf8”,“x”:1410,“y”:840,“wires”:[[“5e86dfdf.4372b”,“7ec95167.6fcba”]]},{“id”:“5e86dfdf.4372b”,“type”:“ui_text”,“z”:“622f8b16.c193c4”,“group”:“c3865cc7.64f53”,“order”:8,“width”:16,“height”:1,“name”:“Responses”,“label”:“Response -->”,“format”:"{{msg.payload}}",“layout”:“row-left”,“x”:1710,“y”:840,“wires”:[]},{“id”:“9086023c.62512”,“type”:“ui_text_input”,“z”:“622f8b16.c193c4”,“name”:"",“label”:"",“tooltip”:"",“group”:“c3865cc7.64f53”,“order”:3,“width”:16,“height”:1,“passthru”:true,“mode”:“text”,“delay”:“0”,“topic”:"",“x”:1160,“y”:520,“wires”:[[“dadb4b4e.43d928”]]},{“id”:“5c45d98.840a428”,“type”:“ui_text”,“z”:“622f8b16.c193c4”,“group”:“c3865cc7.64f53”,“order”:1,“width”:16,“height”:2,“name”:"",“label”:"",“format”:“Manual commands may be entered below. Leave out the UDP Code. No checking for valid commands is performed! Commands will be converted to upper case. Erroneous commands are usually ignored or return “ERROR”. However, be careful…”,“layout”:“row-spread”,“x”:1130,“y”:460,“wires”:[]},{“id”:“29251179.a4e3ce”,“type”:“function”,“z”:“622f8b16.c193c4”,“name”:“get global.Command”,“func”:“msg.payload = global.get(“Command”)\nreturn msg;”,“outputs”:1,“noerr”:0,“initialize”:"",“finalize”:"",“x”:1340,“y”:680,“wires”:[[“30421405.dac79c”]]},{“id”:“54f13ef0.cbd78”,“type”:“ui_button”,“z”:“622f8b16.c193c4”,“name”:"",“group”:“c3865cc7.64f53”,“order”:5,“width”:4,“height”:1,“passthru”:false,“label”:“Send”,“tooltip”:"",“color”:"",“bgcolor”:"",“icon”:"",“payload”:"",“payloadType”:“str”,“topic”:"",“x”:1110,“y”:600,“wires”:[[“29251179.a4e3ce”]]},{“id”:“dadb4b4e.43d928”,“type”:“change”,“z”:“622f8b16.c193c4”,“name”:"",“rules”:[{“t”:“set”,“p”:“Command”,“pt”:“global”,“to”:“payload”,“tot”:“msg”}],“action”:"",“property”:"",“from”:"",“to”:"",“reg”:false,“x”:1380,“y”:520,“wires”:[[“e4d229e9.ff8118”]]},{“id”:“e81cc2cc.85c3e”,“type”:“ui_text”,“z”:“622f8b16.c193c4”,“group”:“c3865cc7.64f53”,“order”:6,“width”:0,“height”:0,“name”:“Commands”,“label”:“Sent -->”,“format”:"{{msg.payload}}",“layout”:“row-left”,“x”:1890,“y”:640,“wires”:[]},{“id”:“30421405.dac79c”,“type”:“function”,“z”:“622f8b16.c193c4”,“name”:“Amend to include your UDP Code”,“func”:"// Replace ABCD1234 with your unique UDP code\nmsg.payload += “,xxxxxxx” // Add UDP code (don’t delete the comma)\nreturn msg;",“outputs”:1,“noerr”:0,“initialize”:"",“finalize”:"",“x”:1620,“y”:680,“wires”:[[“e81cc2cc.85c3e”,“16186ecd.a64ff1”,“6ee95921.7ecdd8”]]},{“id”:“16186ecd.a64ff1”,“type”:“udp out”,“z”:“622f8b16.c193c4”,“name”:“Send UDP Command to the Owl”,“addr”:“192.168.0.110”,“iface”:"",“port”:“5100”,“ipv”:“udp4”,“outport”:“8888”,“base64”:false,“multicast”:“false”,“x”:1950,“y”:680,“wires”:[]},{“id”:“4d123d41.19b6f4”,“type”:“inject”,“z”:“622f8b16.c193c4”,“name”:“STANDBY,2002538”,“props”:[{“p”:“payload”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:“STANDBY,2002538”,“payloadType”:“str”,“x”:630,“y”:360,“wires”:[[“9086023c.62512”]]},{“id”:“82126fb2.ae10e”,“type”:“inject”,“z”:“622f8b16.c193c4”,“name”:“BOOST,OFF,2002538”,“props”:[{“p”:“payload”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:“BOOST,OFF,2002538”,“payloadType”:“str”,“x”:660,“y”:280,“wires”:[[“9086023c.62512”]]},{“id”:“5dc8d926.341008”,“type”:“inject”,“z”:“622f8b16.c193c4”,“name”:“BOOST,ON,2002538”,“props”:[{“p”:“payload”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:“BOOST,ON,2002538”,“payloadType”:“str”,“x”:680,“y”:240,“wires”:[[“9086023c.62512”]]},{“id”:“a35724f9.78a3f8”,“type”:“inject”,“z”:“622f8b16.c193c4”,“name”:"",“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:670,“y”:940,“wires”:[[“29251179.a4e3ce”]]},{“id”:“6ee95921.7ecdd8”,“type”:“debug”,“z”:“622f8b16.c193c4”,“name”:“MMMM”,“active”:false,“tosidebar”:true,“console”:false,“tostatus”:false,“complete”:“payload”,“targetType”:“msg”,“statusVal”:"",“statusType”:“auto”,“x”:1980,“y”:760,“wires”:[]},{“id”:“7ec95167.6fcba”,“type”:“debug”,“z”:“622f8b16.c193c4”,“name”:"####",“active”:false,“tosidebar”:true,“console”:false,“tostatus”:false,“complete”:“payload”,“targetType”:“msg”,“statusVal”:"",“statusType”:“auto”,“x”:1750,“y”:900,“wires”:[]},{“id”:“e4d229e9.ff8118”,“type”:“debug”,“z”:“622f8b16.c193c4”,“name”:“xxxx”,“active”:false,“tosidebar”:true,“console”:false,“tostatus”:false,“complete”:“payload”,“targetType”:“msg”,“statusVal”:"",“statusType”:“auto”,“x”:1590,“y”:520,“wires”:[]},{“id”:“40383db5.05d7d4”,“type”:“inject”,“z”:“622f8b16.c193c4”,“name”:“MOREHW,2100A24”,“props”:[{“p”:“payload”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:“MOREHW,2100A24”,“payloadType”:“str”,“x”:630,“y”:320,“wires”:[[“9086023c.62512”]]},{“id”:“a5d86e02.be78”,“type”:“ha-entity”,“z”:“622f8b16.c193c4”,“name”:“Hot water”,“server”:“41628434.d937dc”,“version”:1,“debugenabled”:false,“outputs”:2,“entityType”:“switch”,“config”:[{“property”:“name”,“value”:“Hot Water”},{“property”:“device_class”,“value”:""},{“property”:“icon”,“value”:“mdi:thermometer”},{“property”:“unit_of_measurement”,“value”:""}],“state”:“payload”,“stateType”:“msg”,“attributes”:[],“resend”:true,“outputLocation”:"",“outputLocationType”:“none”,“inputOverride”:“allow”,“outputOnStateChange”:true,“outputPayload”:“MOREHW,2100A24”,“outputPayloadType”:“str”,“x”:200,“y”:680,“wires”:[[“407d574b.fa6ee8”],[“407d574b.fa6ee8”]]},{“id”:“407d574b.fa6ee8”,“type”:“trigger”,“z”:“622f8b16.c193c4”,“name”:“MOREHW,2100A24”,“op1”:“MOREHW,2100A24”,“op2”:“0”,“op1type”:“str”,“op2type”:“str”,“duration”:“1”,“extend”:false,“overrideDelay”:false,“units”:“s”,“reset”:"",“bytopic”:“topic”,“topic”:“topic”,“outputs”:2,“x”:540,“y”:680,“wires”:[[“9086023c.62512”],[“29251179.a4e3ce”]]},{“id”:“272bdd85.f60032”,“type”:“inject”,“z”:“622f8b16.c193c4”,“name”:"",“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:220,“y”:760,“wires”:[[“407d574b.fa6ee8”]]},{“id”:“8a2c39db.6ad528”,“type”:“ha-entity”,“z”:“622f8b16.c193c4”,“name”:“Heating”,“server”:“41628434.d937dc”,“version”:1,“debugenabled”:false,“outputs”:2,“entityType”:“switch”,“config”:[{“property”:“name”,“value”:“Heating”},{“property”:“device_class”,“value”:""},{“property”:“icon”,“value”:""},{“property”:“unit_of_measurement”,“value”:""}],“state”:“payload”,“stateType”:“msg”,“attributes”:[],“resend”:true,“outputLocation”:"",“outputLocationType”:“none”,“inputOverride”:“allow”,“outputOnStateChange”:true,“outputPayload”:"",“outputPayloadType”:“str”,“x”:200,“y”:520,“wires”:[[“c4e09cd4.097bb”],[“2903a8d0.755178”]]},{“id”:“c4e09cd4.097bb”,“type”:“trigger”,“z”:“622f8b16.c193c4”,“name”:“BOOST,ON,2002538”,“op1”:“BOOST,ON,2002538”,“op2”:“0”,“op1type”:“str”,“op2type”:“str”,“duration”:“1”,“extend”:false,“overrideDelay”:false,“units”:“s”,“reset”:"",“bytopic”:“topic”,“topic”:“topic”,“outputs”:2,“x”:520,“y”:500,“wires”:[[“9086023c.62512”],[“29251179.a4e3ce”]]},{“id”:“2903a8d0.755178”,“type”:“trigger”,“z”:“622f8b16.c193c4”,“name”:“BOOST,OFF,2002538”,“op1”:“BOOST,OFF,2002538”,“op2”:“0”,“op1type”:“str”,“op2type”:“str”,“duration”:“1”,“extend”:false,“overrideDelay”:false,“units”:“s”,“reset”:"",“bytopic”:“topic”,“topic”:“topic”,“outputs”:2,“x”:520,“y”:560,“wires”:[[“9086023c.62512”],[“29251179.a4e3ce”]]},{“id”:“c3865cc7.64f53”,“type”:“ui_group”,“name”:“Owl Command Editor”,“tab”:“89b18fa3.2e862”,“order”:1,“disp”:true,“width”:16,“collapse”:false},{“id”:“41628434.d937dc”,“type”:“server”,“name”:“Home Assistant”,“addon”:true},{“id”:“89b18fa3.2e862”,“type”:“ui_tab”,“name”:“Owl Command Input”,“icon”:“dashboard”,“disabled”:false,“hidden”:false}]

Glad it was of some use.

I don’t have Hot Water so it’s not clear to me why you have a different UDP code for that.

My system doesn’t work with BOOST,ON or BOOST,OFF. I found that the ON/OFF bit just got ignored and it toggled the setting. Finding the State the BOOST was was tricky; the BOOST could be toggled by the wall thermostat. Eventually, I found that one of the Flags in the Multicast Heating message carried the information.

Interesting that you didn’t put you UDP code in the function (presumably because you have 2), but the function is still active (you could delete it). Yet, I’m guessing, it still works!

I use a different method to get Alexa to toggle the BOOST or switch between Comfort and Standby; mine does not make use of a HA Entity. I’ll have to explore your method.

I struggled to Import your flow because the double quotes were different and some needed a \ in front where they were part of a string field! Got there in the end though.

My (almost) fully functional Owl Intuition Heating and Electricity Node-Red Control Dashboard is now in a public gist on GitHub. Here’s the link…

Here are some screen shots.

1 Like

Hi Graham

This is fantastic and must have taken you some time!

I’m in the process of adapting it to add hot water and was wondering if I could reach out to you with any questions?

Many thanks

Rob