JSON API Help

Hi, I am trying to call an API from https://api-open.data.gov.sg/v2/real-time/api/rainfall

I am having a really hard time getting the data from the JSON format and I was wondering whether anybody can help me with it:

- platform: rest
  resource: "https://api-open.data.gov.sg/v2/real-time/api/rainfall"
  name: "NEA Real-time Rainfall"
  scan_interval: 300
  headers:
    content-type: "application/json"
  json_attributes_path: "$.data[1].readings.['data']"
  json_attributes:
    - stationId
    - value

- platform: template
  sensors:
    datasg_rainfall:
      friendly_name: "Rainfall Data"
      value_template: >-
        {% if reading.stationId == 'S218' %}
          {% set readings = state_attr('sensor.nea_real_time_rainfall', 'value') %}
          {% if state == '0'%} No Rain
          {% else %} Raining{% endif %}
        {% endfor %}
        {% else %}
          "No data"
        {% endif %}
      unit_of_measurement: "mm"


Basically, I am trying to find the rainfall value for stationId ‘S218’ every 5 minute and automate my windows using that information. Unfortunately, I cant seem to get the syntax right.

I think all you need is a Restful sensor that looks something like:

sensor:
  - platform: rest
    name: "Rainfall Data"
    resource: "https://api-open.data.gov.sg/v2/real-time/api/rainfall"
    value_template: "{{ value_json.X }}"

So next is the question, what is “X”?

If you go to your UI->Developers tools->Template, you can set it up like the following where I copy pasted an actual output:

{% set value_template = {"code":0,"data":{"stations":[{"id":"S218","deviceId":"S218","name":"Bukit Batok Street 34","location":{"latitude":1.36491,"longitude":103.75065}},{"id":"S219","deviceId":"S219","name":"Yio Chu Kang Road","location":{"latitude":1.37999,"longitude":103.87643}},{"id":"S216","deviceId":"S216","name":"Ang Mo Kio Avenue 10","location":{"latitude":1.36019,"longitude":103.85335}},{"id":"S217","deviceId":"S217","name":"Bishan Street 13","location":{"latitude":1.35041,"longitude":103.85526}},{"id":"S214","deviceId":"S214","name":"Tanjong Rhu","location":{"latitude":1.29911,"longitude":103.88289}},{"id":"S215","deviceId":"S215","name":"Geylang East Central","location":{"latitude":1.32785,"longitude":103.88899}},{"id":"S213","deviceId":"S213","name":"Coronation Walk","location":{"latitude":1.32427,"longitude":103.8097}},{"id":"S81","deviceId":"S81","name":"Punggol Central","location":{"latitude":1.4029,"longitude":103.9092}},{"id":"S40","deviceId":"S40","name":"Mandai Lake Road","location":{"latitude":1.4044,"longitude":103.78962}},{"id":"S84","deviceId":"S84","name":"Simei Avenue","location":{"latitude":1.3437,"longitude":103.9444}},{"id":"S44","deviceId":"S44","name":"Nanyang Avenue","location":{"latitude":1.34583,"longitude":103.68166}},{"id":"S88","deviceId":"S88","name":"Toa Payoh North","location":{"latitude":1.3427,"longitude":103.8482}},{"id":"S43","deviceId":"S43","name":"Kim Chuan Road","location":{"latitude":1.3399,"longitude":103.8878}},{"id":"S06","deviceId":"S06","name":"Paya Lebar","location":{"latitude":1.3524,"longitude":103.9007}},{"id":"S221","deviceId":"S221","name":"Hougang Avenue 1","location":{"latitude":1.35691,"longitude":103.89088}},{"id":"S222","deviceId":"S222","name":"Henderson Road","location":{"latitude":1.28987,"longitude":103.82364}},{"id":"S08","deviceId":"S08","name":"Upper Thomson Road","location":{"latitude":1.3701,"longitude":103.8271}},{"id":"S07","deviceId":"S07","name":"Lornie Road","location":{"latitude":1.3415,"longitude":103.8334}},{"id":"S220","deviceId":"S220","name":"Compassvale Lane","location":{"latitude":1.38666,"longitude":103.89797}},{"id":"S207","deviceId":"S207","name":"Bedok Road","location":{"latitude":1.32485,"longitude":103.95836}},{"id":"S208","deviceId":"S208","name":"Changi East Close","location":{"latitude":1.3136,"longitude":104.00317}},{"id":"S203","deviceId":"S203","name":"Pasir Panjang","location":{"latitude":1.29164,"longitude":103.7702}},{"id":"S201","deviceId":"S201","name":"Clementi Park","location":{"latitude":1.32311,"longitude":103.76714}},{"id":"S90","deviceId":"S90","name":"Bukit Timah Road","location":{"latitude":1.3191,"longitude":103.8191}},{"id":"S92","deviceId":"S92","name":"South Buona Vista Road","location":{"latitude":1.2841,"longitude":103.7886}},{"id":"S209","deviceId":"S209","name":"Yishun Ring Road","location":{"latitude":1.42111,"longitude":103.84472}},{"id":"S50","deviceId":"S50","name":"Clementi Road","location":{"latitude":1.3337,"longitude":103.7768}},{"id":"S94","deviceId":"S94","name":"Pasir Ris Street 51","location":{"latitude":1.3662,"longitude":103.9528}},{"id":"S210","deviceId":"S210","name":"Woodlands Centre","location":{"latitude":1.44003,"longitude":103.76904}},{"id":"S211","deviceId":"S211","name":"Kranji Road","location":{"latitude":1.42918,"longitude":103.75711}},{"id":"S119","deviceId":"S119","name":"Nicoll Highway","location":{"latitude":1.30105,"longitude":103.8666}},{"id":"S117","deviceId":"S117","name":"Banyan Road","location":{"latitude":1.256,"longitude":103.679}},{"id":"S115","deviceId":"S115","name":"Tuas South Avenue 3","location":{"latitude":1.29377,"longitude":103.61843}},{"id":"S116","deviceId":"S116","name":"West Coast Highway","location":{"latitude":1.281,"longitude":103.754}},{"id":"S113","deviceId":"S113","name":"Marine Parade Road","location":{"latitude":1.30648,"longitude":103.9104}},{"id":"S60","deviceId":"S60","name":"Sentosa","location":{"latitude":1.25,"longitude":103.8279}},{"id":"S64","deviceId":"S64","name":"Bukit Panjang Road","location":{"latitude":1.3824,"longitude":103.7603}},{"id":"S66","deviceId":"S66","name":"Kranji Way","location":{"latitude":1.4387,"longitude":103.7363}},{"id":"S24","deviceId":"S24","name":"Upper Changi Road North","location":{"latitude":1.3678,"longitude":103.9826}},{"id":"S69","deviceId":"S69","name":"Upper Peirce Reservoir Park","location":{"latitude":1.37,"longitude":103.805}},{"id":"S123","deviceId":"S123","name":"Towner Road","location":{"latitude":1.3214,"longitude":103.8577}},{"id":"S29","deviceId":"S29","name":"Pasir Ris Drive 12","location":{"latitude":1.387,"longitude":103.935}},{"id":"S121","deviceId":"S121","name":"Old Choa Chu Kang Road","location":{"latitude":1.37288,"longitude":103.72244}},{"id":"S229","deviceId":"S229","name":"Jurong West Street 42","location":{"latitude":1.35167,"longitude":103.72195}},{"id":"S900","deviceId":"S900","name":"Seletar Aerospace View","location":{"latitude":1.41284,"longitude":103.86922}},{"id":"S109","deviceId":"S109","name":"Ang Mo Kio Avenue 5","location":{"latitude":1.3764,"longitude":103.8492}},{"id":"S106","deviceId":"S106","name":"Pulau Ubin","location":{"latitude":1.4168,"longitude":103.9673}},{"id":"S227","deviceId":"S227","name":"Woodlands Drive 62","location":{"latitude":1.43944,"longitude":103.80389}},{"id":"S107","deviceId":"S107","name":"East Coast Parkway","location":{"latitude":1.3135,"longitude":103.9625}},{"id":"S228","deviceId":"S228","name":"Jurong West Street 73","location":{"latitude":1.34703,"longitude":103.70073}},{"id":"S104","deviceId":"S104","name":"Woodlands Avenue 9","location":{"latitude":1.44387,"longitude":103.78538}},{"id":"S226","deviceId":"S226","name":"Malan Road","location":{"latitude":1.27472,"longitude":103.80389}},{"id":"S223","deviceId":"S223","name":"Margaret Drive","location":{"latitude":1.29984,"longitude":103.80264}},{"id":"S224","deviceId":"S224","name":"Airport Boulevard","location":{"latitude":1.34392,"longitude":103.98409}},{"id":"S71","deviceId":"S71","name":"Kent Ridge Road","location":{"latitude":1.2923,"longitude":103.7815}},{"id":"S33","deviceId":"S33","name":"Jurong Pier Road","location":{"latitude":1.3081,"longitude":103.71}},{"id":"S77","deviceId":"S77","name":"Alexandra Road","location":{"latitude":1.2937,"longitude":103.8125}},{"id":"S79","deviceId":"S79","name":"Somerset Road","location":{"latitude":1.3004,"longitude":103.8372}},{"id":"S112","deviceId":"S112","name":"Lim Chu Kang Road","location":{"latitude":1.43854,"longitude":103.70131}},{"id":"S230","deviceId":"S230","name":"West Coast Road","location":{"latitude":1.30167,"longitude":103.76444}}],"readings":[{"timestamp":"2025-02-03T02:45:00+08:00","data":[{"stationId":"S218","value":0},{"stationId":"S219","value":0},{"stationId":"S216","value":0},{"stationId":"S217","value":0},{"stationId":"S214","value":0},{"stationId":"S215","value":0},{"stationId":"S213","value":0},{"stationId":"S81","value":0},{"stationId":"S40","value":0},{"stationId":"S84","value":0},{"stationId":"S44","value":0},{"stationId":"S88","value":0},{"stationId":"S43","value":0},{"stationId":"S06","value":0},{"stationId":"S221","value":0},{"stationId":"S222","value":0},{"stationId":"S08","value":0},{"stationId":"S07","value":0},{"stationId":"S220","value":0},{"stationId":"S207","value":0},{"stationId":"S208","value":0},{"stationId":"S203","value":0},{"stationId":"S201","value":0},{"stationId":"S90","value":0},{"stationId":"S92","value":0},{"stationId":"S209","value":0},{"stationId":"S50","value":0},{"stationId":"S94","value":0},{"stationId":"S210","value":0},{"stationId":"S211","value":0},{"stationId":"S119","value":0},{"stationId":"S117","value":0},{"stationId":"S115","value":0},{"stationId":"S116","value":0},{"stationId":"S113","value":0},{"stationId":"S60","value":0},{"stationId":"S64","value":0},{"stationId":"S66","value":0},{"stationId":"S24","value":0},{"stationId":"S69","value":0},{"stationId":"S123","value":0},{"stationId":"S29","value":0},{"stationId":"S121","value":0},{"stationId":"S229","value":0},{"stationId":"S900","value":0},{"stationId":"S109","value":0},{"stationId":"S106","value":0},{"stationId":"S227","value":0},{"stationId":"S107","value":0},{"stationId":"S228","value":0},{"stationId":"S104","value":0},{"stationId":"S226","value":0},{"stationId":"S223","value":0},{"stationId":"S224","value":0},{"stationId":"S71","value":0},{"stationId":"S33","value":0},{"stationId":"S77","value":0},{"stationId":"S79","value":0},{"stationId":"S112","value":0},{"stationId":"S230","value":0}]}],"readingType":"TB1 Rainfall 5 Minute Total F","readingUnit":"mm"},"errorMsg":""} %}

And now you can play with how to format for “X”.
As an example:

{{ value_template.data.readings[0].data[0] }}

This should produce the results: {'stationId': 'S218', 'value': 0}
Anyway, it should help you get started.