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.6.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.6-py3-none-any.whl (25.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: nlannuzel_sgrain-1.0.6.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.6.tar.gz
Algorithm Hash digest
SHA256 9acec97166a6c46daa9f047dde70ea2e9b26b58d6b8c780ece08bc84b51eee01
MD5 113bb5bdbafd88781d2db80e485d54fe
BLAKE2b-256 d547fbe923c585d9a43543ea81c872d2ff4e7a6bcc8d66b740d8cfd10fd6dd44

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for nlannuzel_sgrain-1.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 b0498ebd60c1d4a7c5cafa4fee1cc8ddcda444d8e9edb5a185b8d45ba67245a7
MD5 1f34042b65398570e3337e62c02fabb1
BLAKE2b-256 f71ac4f4b2960dfdf0f743f0138e1e58e4e4ca719609c84c98d24fd90973d45f

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