Page 2 of 2
Re: Myenergi Zappi automation to protect hybrid battery during Eco Tariff
Posted: Sat Jan 25, 2025 4:56 pm
by HughInDevon
Oops!!
I spoke too soon. I must have selected the working version (AutomationOne) not the trial version (AutomationTest). I'm afraid AutomationTest doesn't work. I get the first notification that the automation has triggered but nowt else.
Again for reference, this is the code for the working version.
Code: Select all
alias: FD_AutomationOne
description: Triggers when fixed low tariff period starts.
triggers:
- trigger: time
at: input_datetime.fd_setlowtariffstart
conditions: []
actions:
- action: notify.persistent_notification
metadata: {}
data:
message: FD_AutomationOne has triggered
- variables: {}
- action: timer.start
metadata: {}
data:
duration:
hours: "{{ states('input_number.fd_waithours')}}"
target:
entity_id: timer.fd_timerone
- action: notify.persistent_notification
metadata: {}
data:
message: FD_TimerOne has started
mode: single
Regards, Hugh
Re: Myenergi Zappi automation to protect hybrid battery during Eco Tariff
Posted: Sat Jan 25, 2025 5:11 pm
by Dave Foster
I've not used the timer.start etc.. function - my reading of the timer is that it will start the timer fd_timerone and that should start timerone counting down with the duration you've just set.
So looking at your automation when the time is fd_setlowtariffstart
- you would expect to get a notification
- then your timer start
- then another notification
and at some point I guess in another automation you catch timerone finish ?
But as you are only getting one notification the timer 'action' must have had an error ?
Do you see anything in your logs (Settings, System, Logs) or when in the automation you can click on 'TRACES' in the top right hand corner and that shows you what happened when it last triggered (I guess the trace timeline will probably show an error)
Re: Myenergi Zappi automation to protect hybrid battery during Eco Tariff
Posted: Sat Jan 25, 2025 7:13 pm
by HughInDevon
You are right, there is an error flagged in Traces.
Notifications 'Send a persistent notification'
Timer 'Start' on FD_TimerOne
Stopped because an error was encountered at 25 January 2025 at 16:51:37 (runtime: 0.00 seconds)
offset 2.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.12.1 should be format 'HH:MM', 'HH:MM:SS' or 'HH:MM:SS.F' for dictionary value @ data['duration']
I have no idea what the sequence of numbers is about but perhaps you do? Actually on checking, the value of FD_TimerDuration at 16:51 it will have been very close to 2.12 hours. Why it repeats is still a mystery. Looking for a string terminator? Dunno.
I will have another go and try parsing the output of FD_TimerDuration into integer hours and integer minutes and passing these as strings. Can you give me an idea how to make sure the output is made into a string?
Thanks again. Hugh
Re: Myenergi Zappi automation to protect hybrid battery during Eco Tariff
Posted: Sun Jan 26, 2025 9:19 am
by Dave Foster
ok, i've just had a crash course on timers and this is what i've found.
Firstly despite the documentation not mentioning it, it does support the member keys `hours:, minutes:, seconds:` so you can do exactly what you are doing and it should work so we're into the wonderful world of template conversions and how objects convert in real time.
The second thing to mention is that the template test tool isn't the best in that it's an interactive line by line interpreter, it doesn't always resolve as you would expect when it appears to work here - largely depending on how it is interpreted by the real time object when doing the conversion in your code.
I've written a timer and used a number to set it just as you did and it works fine - so I am sure that your syntax is correct. What must not be correct is the contents of the number or the type or the step doesn't match the type which is upsetting the conversion, whatever it is, it is upsetting the interpreter used when the template resolves the hours: {{ }}
So I suspect this might work as it relies on a type conversion being handled outside of the template and then simply resolves a variable in the template and doesn't have to face the complexity of converting a number. (The default=0 just forces the return of 0 if the number is unavailable so that it doesn't generate an error if the number isn't available ~ startup for example).
Code: Select all
action: timer.start
metadata: {}
data:
duration:
hours: "{% set myVar=states('number.fd_timerduration')|round(2,default=0) %}{{ myVar }}"
But I also think modifying your number template to convert the result of the template with a final round(2) might also fix this - if you are specifying a step make sure it is '0.01' i.e. 2 decimal places (i'm assuming you want that for accuracy), obviously if you want it to 1 decimal place then keep the round(s) at 1.
Code: Select all
{# Read target end time in decimal hours #}
{% set EndHours = states('number.fd_windowstarttime') %}
{# Read target begin time in decimal hours #}
{% set BeginHours = states('number.fd_timenowasdh') %}
{# Calculated timer duration in decimal hours #}
{% set myDuration = (((EndHours | float ) - (BeginHours | float)) | round(2)) %}
{# Adjust if duration is negative #}
{% if myDuration < 0 %}
{% set myDuration = (myDuration + 24) %}
{% endif %}
{{ myDuration|round(2) }}
Re: Myenergi Zappi automation to protect hybrid battery during Eco Tariff
Posted: Sun Jan 26, 2025 10:51 am
by HughInDevon
Hi Dave,
Bingo! For sure this time. With your modified code in AutomationTest, triggering it produces both notifications including the all important 'FD_TimerOne has started'.
That device of defining a variable in the jinja line and then passing the variable back to yaml is inspired! Most of my difficulties come about because of confusing jinja and yaml. Jinja I can just about cope with, it is more similar to the old style programming like C that I am - or used to be - familiar with. Yaml is something else entirely!
Thank you so much for all the trouble you have taken. I also think that your technique should be publicised in some way. I have no idea how but it opens up lots of possibilities having, in effect, a recursive timer.
Impressed and grateful.
Hugh
Re: Myenergi Zappi automation to protect hybrid battery during Eco Tariff
Posted: Sun Jan 26, 2025 12:52 pm
by Dave Foster
great, glad it's working !
Must admit I really like the way that timer works, it's very efficient - i'm going to have to find some ways to use it
Re: Myenergi Zappi automation to protect hybrid battery during Eco Tariff
Posted: Thu Jan 30, 2025 1:59 pm
by HughInDevon
Hi Dave,
More questions I'm afraid. I have made a little progress with my ongoing automation saga but once again run up against the brick wall of my ignorance of yaml and jinja.
This is the code I have that isn't working:
Code: Select all
alias: FD_AutoTwoTest
description: ""
triggers:
- trigger: state
entity_id:
- timer.fd_timerone
from: active
to: idle
conditions:
- condition: state
entity_id: input_boolean.fd_onoffswitch
state: "on"
- condition: numeric_state
entity_id: number.fd_energyforexport
attribute: min
above: 1
- condition: template
value_template: >-
{{((states('number.fd_expwinmaxduration') | float(2)) -
states('number.fd_expwinminduration') | float(2)) >= 0.5 }}
actions:
- action: >
{% if states('number.fd_expwinmaxduration') | float(2)) - states('number.fd_expwinminduration') | float(2)) <= 0.5 %}
notify.persistent_notification
metadata: {}
data:
message: FD_AutomationTwo has triggered.Start Exporting!
{% else %}
notify.persistent_notification
metadata: {}
data:
message: FD_AutomationTwo has triggered. Not ready to export
{% endif %}
mode: single
And this is the error message it generates.
Message malformed: Service {% if states('number.fd_expwinmaxduration') | float(2)) - states('number.fd_expwinminduration') | float(2)) <= 0.5 %} notify.persistent_notification metadata: {} data: message: FD_AutomationTwo has triggered.Start Exporting! {% else %} notify.persistent_notification metadata: {} data: message: FD_AutomationTwo has triggered. Not ready to export {% endif %} does not match format <domain>.<name> for dictionary value @ data['actions'][0]['action']
If you wouldn't mind having a look and finding my mistakes.
Many thanks, Hugh
Re: Myenergi Zappi automation to protect hybrid battery during Eco Tariff
Posted: Thu Jan 30, 2025 3:16 pm
by Dave Foster
I don't think that would work, you can't have multiple data: elements in an action the interpreter will get very upset (and you've a problem with the number of brackets), but you should be able to do it like this by modifying the data you return in the message:
Code: Select all
alias: FD_AutoTwoTest
description: ""
triggers:
- trigger: state
entity_id:
- timer.fd_timerone
from: active
to: idle
conditions:
- condition: state
entity_id: input_boolean.fd_onoffswitch
state: "on"
- condition: numeric_state
entity_id: number.fd_energyforexport
attribute: min
above: 1
- condition: template
value_template: >-
{{((states('number.fd_expwinmaxduration') | float(2)) -
states('number.fd_expwinminduration') | float(2)) >= 0.5 }}
actions:
- action: >
notify.persistent_notification
metadata: {}
data:
message: >
{% if (states('number.fd_expwinmaxduration') | float(2) - states('number.fd_expwinminduration') | float(2)) <= 0.5 %}
FD_AutomationTwo has triggered.Start Exporting!
{% else %}
FD_AutomationTwo has triggered. Not ready to export
{% endif %}
mode: single
Re: Myenergi Zappi automation to protect hybrid battery during Eco Tariff
Posted: Thu Jan 30, 2025 3:58 pm
by HughInDevon
Hi Dave,
Many thanks for your help again. I think I should have explained a bit more what I'm actually trying to achieve.
The code I sent shouldn't have included the 3rd condition. That test is actually the test for whether or not to start forced discharge and should be in the if then else bit.
The notifications are just there to act as placeholders while I test the logic.
The actual flow is meant to be:
Automation is triggered by my timer
Uses conditions to check if the on/off switch is on and that the amount of stored energy is over a minimum.
Then the meaty bit,
If the max export window duration <= (min export window duration + 0.5)
then
set max battery discharge current
set inverter work mode to forced discharge
else
start my timer and set duration to a specified time.
So I don't really care about the notification messages, they are just to help me check each time I make a change to the code. I think from looking at the code you wrote earlier in this thread it should be possible to use logbook entries in place of the messages?
The key thing I am trying to understand is how to use if then else conditional statements within the automation to control which actions occur.
Regards, Hugh
Re: Myenergi Zappi automation to protect hybrid battery during Eco Tariff
Posted: Thu Jan 30, 2025 4:59 pm
by Dave Foster
The timer state change will trigger the automation
Conditions only give you basic tests, so it is best to use the initial conditions for only the basic stop / go things like your on_off switch and minimum energy
You then do all the meaty stuff in the actions, but using the action
‘if-then’
within that ‘if then’ you set the conditions for the ‘if’ such as ‘
If the max export window duration <= (min export window duration + 0.5)’
And your actions would then be
Set max battery discharge current (number:set)
Code: Select all
action: number.set_value
metadata: {}
data:
value: "5"
target:
entity_id: number.force_discharge_power
Set inverter work mode to force discharge
Code: Select all
data:
option: Feed-in First
target:
entity_id: select.work_mode
action: select.select_option
Then ‘Add else’ to add and else to the ‘if’
And add the action to start your timer in there.
You can nest ‘If then / else’ by adding more of them within the IF’s actions as needed.
Also because single conditions don’t give you enough flexibility you can add an OR or AND conditions and then have multiple conditions within where they only need 1 to be true for the OR or all need to be true for the AND.