Intro

On a random rainy day I was browsing the web and some rabit hole led me to calisthenics and eventually made me end up at DAREBEE. Here I discovered a wide range of fitness workout programs.

Their site also features a daily challenge, which is great to keep yourself challenged and your workouts varied.

I thought it’d be a nice addition to my Home Assistant dashboard to include this daily challenge. Especially if you have a wall-mounted tablet or some other clearly visible dashboard display.

Getting to work

All we need to do is (a) grab the image of the DAREBEE site and (b) display it on our dashboard. Sounds simple, right?

Scrape

First I need to get to the image of the daily workout. Looking at the page’s source, I can see the link looks like https://darebee.com/images/exercise/2023/july18.gif, which means it changes daily with the challenge.

I could write a template that automatically changes daily. However, this could become somewhat sizeable, parsing a datetime object 2 or 3 times. But also, timezone difference may result in the link not (yet) working, especially if your timezone is ahead of DAREBEE’s.

So I opted to go for scraping instead.

The following snippet will give you the full URL of the image as a sensor (as long as the layout of the site doesn’t change):

scrape:
  - resource: https://darebee.com/
    scan_interval: 3600 # Every hour, just to be sure we get it quickly once it updates
    sensor:
      - name: Darebee daily challenge
        unique_id: darebee_daily
        icon: mdi:weight-lifter
        select: "#exercise > div:nth-child(1) > p:nth-child(1) > a:nth-child(1) > img:nth-child(1)"
        attribute: src
        value_template: "https://darebee.com{{ value }}"

Image

Home Assistant’s 2023.7 release introduces the concept of image entities. No more hassling with a Generic Camera to display a (static) image on our dashboard 🎉

Using a template, we can grab the image URL from our scrape sensor and turn it into an image entity:

template:
  - image:
      - name: Darebee daily challenge
        unique_id: darebee_daily_img
        icon: mdi:weight-lifter
        url: "{{ states('sensor.darebee_daily_challenge') }}"

Display on dashboard

Now all that’s left, is adding a picture card to our dashboard and we’re done!

cards:
- type: picture
  image_entity: image.darebee_daily_challenge
  alt_text: Darebee Daily Challenge
Darebee daily challenge displayed on a Home Assistant dashboard
Darebee daily challenge

Closing thoughts

DAREBEE is a crowd-funded non-profit resource. If you find their collection of workouts useful to you, consider supporting them by donating or purchasing one of their books.