Skip to main content

Tells if, and how hard, it's raining at any location in Singapore

Project description

sgrain

Tells if it's currently raining at a given latitude and longitude in Singapore, or if there's rain nearbie. The data comes from rain radar images at https://www.weather.gov.sg/weather-rain-area-50km/. The image are updated every 5 minutes.

Link to project: https://github.com/nlannuzel/sgrain

Package installation

From PyPI

pip3 install nlannuzel.sgrain

Package usage

With the built-in script:

LAT=1.313383
LONG=103.815203
# shows rain here:
rain-intensity-at -a $LAT -o $LONG -n
# shows distance to nearest rain spot:
nearest-rain -a $LAT -o $LONG -c $(pwd) -n
# shows location of nearest rain spot:
nearest-rain -a $LAT -o $LONG -c $(pwd) -n -l
# shows location of nearest rain spot of significant size (count of 20 pixels on the rain map):
nearest-rain -a $LAT -o $LONG -c $(pwd) -s 20 -l

With a custom script:

#!/usr/bin/env python3

from nlannuzel.sgrain.rain import RainAreas
from nlannuzel.sgrain.geo import Location

rain = RainAreas()

# Download the latest radar image from https://www.weather.gov.sg/weather-rain-area-50km/
rain.load_image()

# https://maps.app.goo.gl/9aA7i8chryYwuhUT8
picnic_spot = Location(1.313383, 103.815203)

# Returns a number from 0 to 31
intensity = rain.intensity_at(picnic_spot)

message = f"At location {picnic_spot}, time {rain.image_time}: "
if intensity == 0:
    nearest_rain = rain.nearest_rain_location(picnic_spot, min_size = 10)
    if nearest_rain is None:
        msg += "it's not raining around here."
    else:
        d = picnic_spot.distance_to(nearest_rain)
        message += f"it's not raining, but there's rain about {d:.2f}km away."
elif intensity < 10:
	msg += "it's raining a little bit ({intensity}), bring a umbrella."
else:
	msg += "it's raining a lot ({intensity}), cancel the picnic."
print(message)

In home-assistant

Log into the home-assistant box, for example by connecting to the console of the VM where HA is installed and running. Then, attach the the homeasistant container:

docker exec -ti homeassistant bash

You are now inside the homeassistant container. Create a new venv under /config.

cd /config
python3 -m venv python_venv

Install this package inside the venv

cd python_venv
./bin/pip3 install nlannuzel.sgrain

Verify that the module works, this command should display between 0 and 31:

./bin/rain-intensity-at -a 1.313383 -o 103.815203 -p 1

Open the home-assistant GUI in a browser. If not already done, install the File Editor add-on. Open the configuration.yaml file (/homeassistant/configuration.yaml), and add a section like below:

command_line:
  - sensor:
      command: sleep 5 && /config/venv/bin/python3 /config/venv/bin/rain-intensity-at -a LATITUDE -o LONGITUDE -p 1 -n
      name: rain-sensor
      unique_id: rain
      scan_interval: 300
      icon: mdi:weather-pouring
      availability: 1
      #device_class: None
      state_class: MEASUREMENT
      value_template: '{{ value | float | round(2) }}'
  - sensor:
      command: /config/venv/bin/python3 /config/venv/bin/nearest-rain -a LATITUDE -o LONGITUDE -n -s 10
      name: rain-sensor-distance
      unique_id: rain-distance
      scan_interval: 300
      icon: mdi:weather-pouring
      availability: 1
      device_class: distance
      unit_of_measurement: km
      state_class: MEASUREMENT
      value_template: '{{ value | float | round(2) }}'

Be sure to replace LATITUDE and LONGITUDE by the the actual coordinates. Finally, in the "developer tools", validate and then reload the config. You should have a new sensor available in Home Assistant.

Command line sensors are explained in HA website: https://www.home-assistant.io/integrations/command_line/

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nlannuzel_sgrain-1.0.7.tar.gz (37.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nlannuzel_sgrain-1.0.7-py3-none-any.whl (25.1 kB view details)

Uploaded Python 3

File details

Details for the file nlannuzel_sgrain-1.0.7.tar.gz.

File metadata

  • Download URL: nlannuzel_sgrain-1.0.7.tar.gz
  • Upload date:
  • Size: 37.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.2

File hashes

Hashes for nlannuzel_sgrain-1.0.7.tar.gz
Algorithm Hash digest
SHA256 7ca9022c88b504c9b75dc92344345ca194e65640223c23c8dec0a6c0681c21e5
MD5 9f21dc52aa1abdb42d7d2433b3d5e67f
BLAKE2b-256 c0512d04e81604d2e5cabd758a6fba56474e90cecb87d8957a9c9fb2c935f31c

See more details on using hashes here.

File details

Details for the file nlannuzel_sgrain-1.0.7-py3-none-any.whl.

File metadata

File hashes

Hashes for nlannuzel_sgrain-1.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 271941f84b6a3e134892628ce2897591c5da8aa67e9efbd529c9508ddd030c01
MD5 17c20b04a6e4844a9c830d2b83d93b01
BLAKE2b-256 c89a7ccc0042c6b7b7dfb15fa571a6a77d028333072cb09aa4c0b4479cf06e6b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page