Shelly humidity too high notifications on your phone.

Get a low-priority push notification when a Shelly humidity sensor rises above a limit you choose, so you know when to air a room.

humidity.changeSmart homeMonitoring
How it works

Three steps to your first push

STEP 01

Install the recipe

One click in Studio gives you a personal webhook URL.

STEP 02

Paste your URL into Shelly

Add it as a webhook for Humidity change.

STEP 03

Get a push on your phone

With the text, sound and buttons from the recipe.

Setup

How to set up the Shelly humidity change webhook

  1. Click Install in Studio and sign in. The recipe is added to your account and you get a personal webhook URL.
  2. Open your Shelly device's web interface (browse to its IP address) or the Shelly Smart Control app and go to Actions.
  3. Add a webhook action for the Humidity change event.
  4. Use the URL from the setup notes below. Shelly fills in the ${…} parts itself when it calls it.
  5. Save, then trigger the device once to send a real event.
  6. Use this as the action URL:
  7. ```
  8. your webhook URL?event=humidity.change&device=${config.sys.device.name}&rh=${ev.rh}&limit=70https://••••••••/•••••••• your personal URL, shown after install
  9. ```
  10. Set the action's condition to `event.rh > 70` and its repeat period to **-1**, which makes it fire once each time the reading crosses the limit instead of on every reading while it stays past it.
  11. If your device's action editor doesn't offer those settings, create the webhook from a terminal instead (replace `<shelly-ip>` with the device's IP address):
  12. ```
  13. curl -X POST http://<shelly-ip>/rpc -d '{"id": 1, "method": "Webhook.Create", "params": {"cid": 0, "enable": true, "event": "humidity.change", "condition": "event.rh > 70", "repeat_period": -1, "urls": ["your webhook URL?event=humidity.change&device=${config.sys.device.name}&rh=${ev.rh}&limit=70"]}}'
  14. ```
  15. Change `70` in both the condition and the URL to your own limit.
The code

What runs when the webhook arrives

Studio calls handleRequest(request) with the incoming webhook and sends the message it returns. It's yours after install; change anything.

transform.js
1// Shelly → humidity too high
2// Fires when a Shelly humidity sensor (H&T, BLU H&T via a gateway, …) reads above
3// the limit you set.
4//
5// Add a webhook action for the "humidity.change" event with the condition
6// "event.rh > <limit>" and repeat period -1 (fire once each time it crosses), calling:
7// <integration URL>?event=humidity.change&device=${config.sys.device.name}&rh=${ev.rh}&limit=<limit>
8
9// Shelly webhooks are GET requests, so the data arrives as query parameters.
10// Fall back to a JSON body so the recipe also works when POSTed (and in the Test runner).
11function readParams(request) {
12 const body = request.body && typeof request.body === "object" ? request.body : {}
13 return { ...body, ...(request.query || {}) }
14}
15
16// Shelly fills an unset name in as "null"; treat that (and blanks) as missing.
17function text(value) {
18 const s = value == null ? "" : String(value).trim()
19 return s === "" || s === "null" || s === "undefined" ? null : s
20}
21
22function handleRequest(request) {
23 const params = readParams(request)
24
25 // Guard: only handle humidity readings, so other Shelly hooks stay quiet.
26 if (params.event !== "humidity.change") {
27 console.log(`Ignoring Shelly event "${params.event ?? "unknown"}" — not a humidity change`)
28 return null
29 }
30
31 const rh = Number.parseFloat(params.rh)
32
33 if (!Number.isFinite(rh)) {
34 console.log("Humidity event without a reading — skipping")
35 return null
36 }
37
38 // The Shelly condition does the filtering; this is a second check in case the
39 // hook was saved without one.
40 const limit = Number.parseFloat(params.limit)
41
42 if (Number.isFinite(limit) && !(rh > limit)) {
43 console.log(`${rh} % is within the ${limit} % limit — skipping`)
44 return null
45 }
46
47 const device = text(params.device) ?? "Your Shelly sensor"
48
49 return {
50 title: "💦 Humidity high",
51 message:
52 `${device} is at ${Math.round(rh)} %` +
53 (Number.isFinite(limit) ? ` (limit ${limit} %)` : ""),
54 topic: "Shelly",
55 priority: -1, // Low — time to open a window, not to drop everything
56 }
57}
Payload

The Shelly humidity.change webhook

This is what Shelly sends to your URL for humidity change. It is a sample, trimmed to the fields recipes use.

humidity.change · sample.json
1{
2 "rh": "74",
3 "event": "humidity.change",
4 "limit": "70",
5 "device": "Bathroom"
6}
FAQ

Shelly humidity too high notifications: questions

Does this work on iPhone and Android?

Yes. Install the JustPush app from the App Store or Google Play and sign in. Every phone signed in to your account gets the notification.

Do I need to write code?

No. Install the recipe in Studio, paste your webhook URL into Shelly and you are done. The code is there if you want to change the text, the sound or the buttons.

Can I change what the notification says?

Yes. After install the recipe's code is yours. Edit it in Studio and test it against the sample payload before you save.

What does it cost?

JustPush is free for 30 days. After that it's $19.99 a year, or $39.99 once. There is no extra charge for recipes.

Ready when you are

Shelly on your phone in two minutes.

Install the recipe, paste one URL, done. Free for 30 days, no credit card required.