This program connect to the myuplink.com and adjust the schedule of Høiax CONNECTED hot water heaters, and adjust the schedule so that it uses electricity when the price is lowest. This is done by fetching price information on a pr hour basic, for today and tomorrow and building the schedule It also allows you to periodicity publish current values from the heater via mqtt to your home automation of choice. When changing the schedule it gets the price information for your region from transparency.entsoe.eu or other 3d parti API.
Water heater will heat water when its bellow a certain temprature, without considering price. Considering alot of showing and cooking happens around the same time, this means heating water at peak electricity price.
This schedule builder simply uses cost, and will schedule heating the water (Consider charging a batteri) when the prices are low. The main issue with this method is that water heaters loose a fair bit of heat over time, and having realy hot water at 02:00 may not be productive. The heat thats lost in the water, basicly gets added to the house as heat ( Simular cost effect as regualar electric heater)
This schedule builder is provided configured peak times, and will attemt to use cheapest posible electricity to heat the tank to reach a target energi level in the tank. This will use less electricity then Price based rules, but may use it at bit higher price.
This is a 3d party program made to work against myuplink, and not afflilated with them in any way.
1) Download the program. 2) Configure the application.json 3) Install with myuplink install (Or you can just run it) 4) Start the service or reboot ( MyUplink-smartconnect.exe start )
Deploy via docker: https://hub.docker.com/r/erlingsaeterdal/myuplinksmartconnect
How far this is taken depends alot of to what degree others use it
This works for my famility, with 1 adult male and a wife. Both taking showers that last 10+ min pr day.
EnergiBasedPeakTimes takes a commma seperated list of weekdays with clock at the end. Example pr monday21 or weekday21.
Heater should be in schedule mode. If your wondering how many hours pr day the water heater is potensialy on, please combine the 2 above numbers.
Q) What are the different scheduling rules
Simple price based ( Default) - This rule is very simple we use the WaterHeaterMaxPowerInHours/WaterHeaterMediumPowerInHours and run the heater in the cheapest hours. Energi based - In this mode, we attemt to use WaterHeaterMaxPowerInHours/WaterHeaterMediumPowerInHours to make sure we reach a target energi at targeted times.
Q) What are modes and how are they used?
The heater has 5 different modes ( Mode is a combination of target temperature for water and how much power to use to heat it.), this program uses 3 of them ( And will automaticly configure this) M6: Target temp 70c ( 2000w) M5: Target temp 50c ( 700w) M4: Target temp 50c ( 0w) It will then use these modes based on electricity price.
Q) When does the application change the schedule?
The application will change the schedule at a set thats different for each user. You will see you time in the logs ( [16:47:05 INF] Target Schedule change time is 15:17 ) We spread out the load of when to change the schedule, simply because having all heaters >attemting to do it at the same is bad practice and might overload the remote apis.
Q) When the heater is set to start heating at XX:YY it starts an hour earlier/later then desired.
There is a hidden Timezone setting on myuplink.com -> System Menu -> Settings -> Timezone offset
Q) Can i force it to update the schedule?
Yes, if you restart the service/docker after the target schedule change time ( But before midnight), it will force a schedule update.
Please note from my personal experimentation most of the values that the heater is reporting is best case just guessing. You can trust how much energi its using or has used.
heater/boost - This will trigger a boost now, that will add maximum heating for 1 hour timeslot. heater/reset_schedule - This will reset and rebuild schedule ( And will remove any scheduled boosts or vacation mode).
Sample command for homeassistant.
alias: TriggerWaterheaterBoost sequence: - service: mqtt.publish data: topic: heater/boost payload: "{ \"msg\": \"hello\" }" mode: single
Paylog for setting vacation
alias: SetWaterHeaterVacation sequence: - service: mqtt.publish data: topic: heater/set_vacation payload: "{"start":"2022-12-01T00:00:00.000Z","end":"2022-12-22T02:00:00.000Z"}" mode: single
18760NE2240322014631 needs to be replaced with the ID of your hotwater heater, simplest way to find out is to just read the console output of this application*
mqtt: sensor: - name: "Waterheater current temprature" state_topic: "heater/18760NE2240322014631/CurrentTemprature" unique_id: "Waterheater.CurrentTemprature" state_class: measurement unit_of_measurement: "°C" - name: "Waterheater current Watt" state_topic: "heater/18760NE2240322014631/EstimatedPower" unique_id: "Waterheater.EstimatedPower" device_class: power state_class: measurement unit_of_measurement : W - name: "Target temprature" state_topic: "heater/18760NE2240322014631/TargetTemprature" unique_id: "Waterheater.TargetTemprature" unit_of_measurement: "°C" - name: "Energy Total(Waterheater)" state_topic: "heater/18760NE2240322014631/EnergyTotal" unique_id: "Waterheater.EnergyTotal" device_class: energy state_class: total_increasing unit_of_measurement : kWh - name: "Energi in tank" state_topic: "heater/18760NE2240322014631/EnergiStored" unique_id: "Waterheater.EnergiStored" device_class: energy unit_of_measurement : kWh - name: "Tank fill level" state_topic: "heater/18760NE2240322014631/FillLevel" unique_id: "Waterheater.FillLevel" unit_of_measurement: '%' - name: "Last schedule change" state_topic: "heater/18760NE2240322014631/LastScheduleChangeInHours" unique_id: "Waterheater.LastScheduleChange" unit_of_measurement: "Hours ago" - name: "MyUplinkSmartConnectLogs" state_topic: "heater/LogEntry" unique_id: "MyUplinkSmartConnectLogs" - name: "MyUplinkSmartConnect status" state_topic: "heater/ServiceStatus" unique_id: "MyUplinkSmartConnectStatus"