{"id":20548573,"url":"https://github.com/benleb/ad-notifreeze","last_synced_at":"2025-04-14T10:53:10.333Z","repository":{"id":46953239,"uuid":"200034955","full_name":"benleb/ad-notifreeze","owner":"benleb","description":"❄️ AppDaemon app which reminds to close windows if temperature difference inside/outside exceeds a specified threshold","archived":false,"fork":false,"pushed_at":"2022-11-08T14:08:58.000Z","size":71,"stargazers_count":19,"open_issues_count":12,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-28T00:07:14.706Z","etag":null,"topics":["app","appdaemon","appdaemon-apps","close-windows","door","hacs","home-assistant","notifreeze","python","room","sensor","temperature","temperature-difference"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/benleb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":"benleb"}},"created_at":"2019-08-01T11:06:01.000Z","updated_at":"2024-12-06T19:47:13.000Z","dependencies_parsed_at":"2023-01-21T16:01:29.874Z","dependency_job_id":null,"html_url":"https://github.com/benleb/ad-notifreeze","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benleb%2Fad-notifreeze","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benleb%2Fad-notifreeze/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benleb%2Fad-notifreeze/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benleb%2Fad-notifreeze/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/benleb","download_url":"https://codeload.github.com/benleb/ad-notifreeze/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248868779,"owners_count":21174755,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["app","appdaemon","appdaemon-apps","close-windows","door","hacs","home-assistant","notifreeze","python","room","sensor","temperature","temperature-difference"],"created_at":"2024-11-16T02:13:55.185Z","updated_at":"2025-04-14T10:53:10.307Z","avatar_url":"https://github.com/benleb.png","language":"Python","funding_links":["https://github.com/sponsors/benleb"],"categories":[],"sub_categories":[],"readme":"# NotiFreeze 🥶 🥵\n\n[![python_badge](https://img.shields.io/static/v1?label=python\u0026message=3.8%20|%203.9\u0026color=blue\u0026style=flat)](https://www.python.org) [![hacs_badge](https://img.shields.io/badge/HACS-Default-orange.svg)](https://github.com/hacs/integration)\n\n\u003e News ✌️ **NotiFreeze** **v0.5.0** contains **new features** and **breaking changes!** 🥶 Check below for more info about new config format!\n\n---\n\n[NotiFreeze](https://github.com/benleb/ad-notifreeze) is an [AppDaemon](https://github.com/appdaemon/appdaemon) app which reminds to close windows if temperature difference between inside/outside exceeds a specified threshold.*  \n\nThis works for every **`room`** separately e.g. an open window in the bathroom checks outside temperate against the bathroom temperature sensor. Useful in winter to remind you to close the bathroom windows after airing 🥶 but also in the summer when you do not want that hot outside air inside 🥵\n\n\u003e **Note:** In **NotiFreeze** you configure just **one App for all your rooms** in contrast to separate apps/configurations per room like in [AutoMoLi](https://github.com/benleb/ad-automoli).\n\n## Installation\n\nUse [HACS](https://github.com/hacs/integration) or [download](https://github.com/benleb/ad-notifreeze/releases) the `notifreeze` directory from inside the `apps` directory here to your local `apps` directory, then add the configuration to enable the `notifreeze` module.\n\n## Auto-Discovery of Entities/Sensors\n\nIf sensors entities have an ***entity id*** matching:\n\n* ***binary_sensor.door_window_`*`***  \n  **or**\n* ***sensor.temperature_`*`***\n\n**and**\n\n* an ***entity id*** or ***friendly name*** containing the **`room`**/**`room`** name\n\n**NotiFreeze** will detect them automatically. (Manually configured entities will take precedence.)\n\n## Configuration Example\n\n```yaml\nnotifreeze:\n  module: notifreeze\n  class: NotiFreeze\n  locale: de_DE\n  notify_service: notify.mobile_app_ben\n  always_notify: true\n  outdoor: sensor.temperature_outdoor\n  max_difference: 4.2\n  delays:\n    initial: 3\n    reminder: 7\n  rooms:\n    - Schlafzimmer\n    - Bad\n    - name: Wohnzimmer\n      alias: livingroom  # entity ids contain *livingroom* but not *wohnzimmer*\n    - name: Keller\n      door_window: binary_sensor.door_window_sensor_basement_window\n      indoor:\n        - sensor.temperature_basement\n        - sensor.temperature_basement_front\n```\n\n### Available Options\n\nkey | optional | type | default | description\n-- | -- | -- | -- | --\n`module` | False | string | notifreeze | The module name of the app.\n`class` | False | string | Notifreeze | The name of the Class.\n`class` | True | string | en_US | Language! Available `en_US`, `de_DE` - contribute your language! 🤓 check below the code in [`notifreeze.py`](apps/notifreeze/notifreeze.py)!\n`notify_service` | False | string | | Home Assistant notification service\n`always_notify` | True | bool | false | Send notifications even when the indoor temperature is unchanged (compared to before the door/windows was open)\n`outdoor` | False | string | | Sensor for outside temperature 🥵 🥶\n`max_difference` | True | float | 5 | Maximum tolerated tmperature difference\n`rooms` | False | list\u003cstring, [**room**](#room)\u003e | | List of [**rooms**](#room) or simple *room* names NotiFreeze will monitor. Users of the famous [AutoMoLi](https://github.com/benleb/ad-automoli) may already by familiar with the *rooms* concept.\n`delays` | True | [**delay**](#delays) | [**see below**](#delays) | Delays NotiFreeze will use.\n`messages` | True | [**message**](#messages) | default english | Custom notification messages\n~~`locale`~~ | ~~True~~ | ~~string~~ | ~~`en_US`~~ | **replaced by `messages`** ~~Locale for notifications in native language. See bottom of [`notifreeze.py`](apps/notifreeze/notifreeze.py) for available ones or add one yourself~~\n\n## room\n\nkey | optional | type | default | description\n-- | -- | -- | -- | --\n`name` | True | string | | Name of the room (used for auto-discovery if no *alias* is set)\n`alias` | True | string | | Alias used for auto-discovery of sensors (if your entity IDs not contain your *room*, this *alias* can be used)\n`indoor` | True | string, list[string] | | Temperature sensor Entity ID(s)\n`door_window` | True | string, list[string] | | Door/Windows sensor Entity ID(s)\n\n## messages\n\nkey | optional | type | default | description\n-- | -- | -- | -- | --\n`since` | True | string | {room_name} {entity_name} open since {open_since}: {initial}°C | sent when temperature **did not change** since the door/windows was opened\n`change` | True | string | {room_name} {entity_name} open since {open_since}: {initial}°C → {indoor}°C ({indoor_difference}°C) | sent when temperature **has changed** since the door/windows was opened\n\n### variables\n\nvar | description | not available in message\n-- | -- | --\n`room_name` | name of the room\n`entity_name` | name of the door/windows\n`open_since` | time since opened\n`initial` | indoor temperature when door/windows was opened\n`indoor` | current indoor temperature | **since**, use `initial` for indoor temperate\n\n## delays\n\nkey | optional | type | default | description\n-- | -- | -- | -- | --\n`initial` | True | integer | 5 | Time in minutes before sending first notification\n`reminder` | True | integer | 3 | Time in minutes until next notification is send\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenleb%2Fad-notifreeze","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbenleb%2Fad-notifreeze","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenleb%2Fad-notifreeze/lists"}