tonydow
1
AI Write gave me this but getting error.
Try this.
By the way, this can be a good fit for the marketplace. Please consider publishing it.
Product code: {formtext: name=product; default=AGILE-24-10-01; cols=24}
Tariff code: {formtext: name=tariff; default=E-1R-AGILE-24-10-01-B; cols=24}
Date: {formdate: YYYY-MM-DD; name=day; default={time: YYYY-MM-DD}}
{run: loading = yes
status = 0
rates = {{^^%5B%5D^^}}; trim=right}
{next=datetimeformat(datetimeadd(day, 1, "D"), "YYYY-MM-DD"); trim=right}
{from_ts=day & "T00:00" & urlencode({time: Z; at={=day}}); trim=right}
{to_ts=next & "T00:00" & urlencode({time: Z; at={=next}}); trim=right}
{urlload: https://api.octopus.energy/v1/products/{=product}/electricity-tariffs/{=tariff}/standard-unit-rates/?period_from={=from_ts}&period_to={=to_ts}; debounce=0.5s; start=() -> ["loading": yes]; done=(res, status) -> ["loading": no, "status": status, "rates": sort(catch(fromjson(res).results, {{^^%5B%5D^^}}), (a, b) -> comparestrings(a.valid_from, b.valid_from))]}
Octopus Agile rates for {=datetimeformat(day, "dddd D MMMM YYYY")} ({=tariff}), pence per kWh inc. VAT
{if: loading; trim=right}
Loading rates...
{elseif: status <> 200; trim=yes}
Could not load rates (HTTP {=status}). Check the product and tariff codes.
{elseif: count(rates) = 0; trim=yes}
No rates published for this date yet. Octopus usually publishes the next day's Agile rates around 4pm.
{else: trim=yes}
{repeat: for r in rates; trim=yes}
{=datetimeformat(r.valid_from, "HH:mm")}–{=datetimeformat(r.valid_to, "HH:mm")} {=r.value_inc_vat; format=.2f}p
{endrepeat}
{prices=map(rates, r -> r.value_inc_vat); trim=right}
{cheapest=find(rates, r -> r.value_inc_vat = reduce(prices, prices[1], (a, v) -> min(a, v))); trim=right}
{priciest=find(rates, r -> r.value_inc_vat = reduce(prices, prices[1], (a, v) -> max(a, v))); trim=right}
Cheapest: {=cheapest.value_inc_vat; format=.2f}p at {=datetimeformat(cheapest.valid_from, "HH:mm")}
Most expensive: {=priciest.value_inc_vat; format=.2f}p at {=datetimeformat(priciest.valid_from, "HH:mm")}
Average: {=sum(prices) / count(prices); format=.2f}p
{endif: trim=yes}
tonydow
3
Thanks Dan, just what I wanted.