{"id":20576490,"url":"https://github.com/hazarddede/appdaemon-apps","last_synced_at":"2025-09-26T01:31:24.805Z","repository":{"id":53547569,"uuid":"153901437","full_name":"HazardDede/appdaemon-apps","owner":"HazardDede","description":"AppDaemon Apps for home-assistant","archived":false,"fork":false,"pushed_at":"2021-01-16T11:09:52.000Z","size":58,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-02T04:34:17.542Z","etag":null,"topics":["appdaemon","apps","home-assistant","home-automation"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HazardDede.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-10-20T12:04:22.000Z","updated_at":"2024-10-28T22:47:02.000Z","dependencies_parsed_at":"2022-09-16T21:00:58.454Z","dependency_job_id":null,"html_url":"https://github.com/HazardDede/appdaemon-apps","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HazardDede%2Fappdaemon-apps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HazardDede%2Fappdaemon-apps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HazardDede%2Fappdaemon-apps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HazardDede%2Fappdaemon-apps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HazardDede","download_url":"https://codeload.github.com/HazardDede/appdaemon-apps/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234279035,"owners_count":18807313,"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":["appdaemon","apps","home-assistant","home-automation"],"created_at":"2024-11-16T05:45:57.009Z","updated_at":"2025-09-26T01:31:24.437Z","avatar_url":"https://github.com/HazardDede.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# appdaemon-apps\n\n\u003e AppDaemon Apps for home-assistant for my private hosted home assistant instance. Feel free to use the apps.\n\nDocker Hub: [https://cloud.docker.com/repository/docker/hazard/appdaemon-apps/](https://cloud.docker.com/repository/docker/hazard/appdaemon-apps/)\n\n## Running a demo\n\nRun the following commands (make sure that docker and docker-compose is installed) to startup a home assistent instance and a appdaemon instance for demo purpose.\n\nThere is already a pre-installed user `user` with related password `welcome`. A long lived access token for appdaemon (authentication for appdaemon @ home assistent) has already been created.\n\n```bash\ndocker-compose up -d \u0026\u0026 docker logs --tail=50 -f appdaemon\n```\n\nEnter `http://localhost:8123` to your favorite browser to access the home assistent demo application.\n\nWhen you finished `Ctrl + C` out of the logs and run:\n\n```bash\ndocker-compose down\n```\n\n## Running appdaemon\n\nJust mount your personal `apps.yaml` and inject your home assistant url and previously generated long lived access token. It is vital that a long lived access token for appdaemon has been created and supplied via environment variables. See [https://appdaemon.readthedocs.io/en/latest/CONFIGURE.html#hass-authentication](https://appdaemon.readthedocs.io/en/latest/CONFIGURE.html#hass-authentication) for reference on creating long lived access tokens.\n\n```bash\n# Adjust to your version (see https://cloud.docker.com/repository/docker/hazard/appdaemon-apps/)\ndocker run --name appdaemon-apps \\\n      -e TZ=Europe/Berlin \\\n      -e HA_URL=http://hass:8123 \\\n      -e HA_TOKEN=\u003cyour_token\u003e \\\n      -v /path/to/your/app_yaml/folder:/apps \\\n      hazard/appdaemon-apps:latest\n```\n\nIf hass itself is running as a container make sure to link it accordingly.\nHint: Have a look @ the `docker-compose.yaml` for further reference.\n\n## Apps\n\n### Climate\n\nSimple scheduler for thermostats. Is controlled by four modes: `Comfort`, `Energy Saving`, `Frost protection` and `Off`. The first three are just names that will trigger different schedules when activated. `Off` means that the scheduler will be turned off.\n\nA mode has a baseline temperature (the temperature that is active, when no schedule is running) and can have multiple schedules that will change the target temperature of the device for a well defined span of time.\n\n```yaml\nclimate:\n  module: climate\n  class: App\n  check_interval: 5m  # Checks the setpoints every interval. Adjust setpoints if necessary\n  force_set_on_interval: False  # If True will force a setpoint set for the thermostats on the check interval.\n  mode: \n    entity: input_select.heating_mode  # The mode selector in hass\n    map:  # Map the internal modes to human readable ones\n      Comfort: comfort\n      Energy saving: energy\n      Frost protection: frost\n      \"Off\": \"off\"\n    init_options: True  # Set the options of input_select.heating_mode\n  rooms:\n    bath_downstairs:  # Just a name\n      # Creates a sensor that tracks the current target temperature configured for this room\n      # Default name is: \"\u003croom_name\u003e_setpoint\"\n      # Default unit of measurement is: °C\n      setpoint_sensor:\n      thermostats:\n        - input_number.bath_heater  # One or many thermostats (input_number or climate)\n      comfort:  # Mode comfort\n        setpoint: 20  # Baseline\n        schedule:  # Heat up the bathroom in the morning\n          - start: \"06:30\"\n            end: \"09:30\"\n            weekdays: \"1-5\"  # Mon - Fri\n            setpoint: 22\n          - start: \"08:30\"  # ... but later on weekends\n            end: \"10:00\"\n            weekdays: \"6,7\"  # Sat - Sun\n            setpoint: 22\n      energy:  # Mode energy\n        setpoint: 17\n      frost:  # Mode frost\n        setpoint: 8\n    living:  # Another room\n      setpoint_sensor:  \n        name: living_setpoint  # Override name\n        attributes:  # Override attributes as you like\n          unit_of_measurement: \"Grad\"\n          friendly_name: \"Target Temp: Living room\"\n          icon: mdi:thermostat\n      thermostats:\n        - input_number.hallway_heater\n        - entity: input_number.gallery_heater\n          offset: 1  # Offset will effectively increase/decrease temperature (if target is 21 this will be set to 22)\n          force: True  # Will force to set the thermostat even when it seems it's state has not changed\n      comfort:\n        setpoint: 21\n        schedule:  # Some energy savings in the nighttime\n          - start: \"00:00\"\n            end: \"06:00\"\n            setpoint: 19\n          - start: \"06:00\"  # Heat up when input_boolean 'run_schedule' evaluates to true ('on')\n            end: \"23:59\"\n            setpoint: 24\n            constraints:\n              - input_boolean.run_schedule\n      energy:\n        setpoint: 18\n      frost:\n        setpoint: 8\n```\n\n### Motion\n\nWill turn on lights / switches (single or multiple) when motion (binary_sensor) was detected. Will turn off the lights again after a specified amount of time.\nIf a sensor is specified any contraints will be checked before turning on the lights.\n\n```yaml\nmotion_lights:\n  module: motion\n  class: App\n  for: 2m  # Turn off lights after 2 minutes\n  motion: binary_sensor.motion  # Track this motion device for motion (list is also possible)\n  lights: # Turn on / off those lights\n    - light.light1\n    - light.light2\n  sensor: # Check those sensors for constraints\n    - entity: sensor.lux_1\n      op: below  # Possible: below, above, equals (so far only numeric)\n      lux: 10\n```\n\n### Presence\n\nThe supported device_tracker from hass is quite binary: `home` or `not_home`. But I want to know if somebody just the left or just arrived or is staying away for quite some time. To realize this is what this app aims for.\n\nIf somebody transitions from `home` to `not_home` the person will be marked as `Just left`. After a defined amout of time the person will be marked as `Away`. If he stays `Away` long enough, the person will be marked as `Extended Away`. If the person transitions from `not_home` to `home` he will be marked as `Just Arrived` and after a defined amount of time (you can probably guess) he will be marked as `Home`.\n\nIdea is taken from here: [https://philhawthorne.com/making-home-assistants-presence-detection-not-so-binary/](https://philhawthorne.com/making-home-assistants-presence-detection-not-so-binary/)\n\n```yaml\npaula_state:\n  module: presence\n  class: App\n  tracker: device_tracker.paula  # The device tracker\n  state: input_select.paula_state  # The input_select that will hold the extended state\n  init_options: True  # Init the states of the input_select\n  just_arrived_delay: 10m  # When to transit from 'Just Arrived' to 'Home\n  just_left_delay: 10m  # When to transit from 'Just Left' to 'Away'\n  extended_away_delay: 24h  # When to transit from 'Away' to 'Extended Away'\n  map:  # Mapping the internal states to human friendly names for hass\n    home: \"Home\"\n    away: \"Away\"\n    extended_away: \"Extended Away\"\n    just_arrived: \"Just arrived\"\n    just_left: \"Just left\"\n```\n\n### FRITZ!Box Guest Wifi\n\nBased on a on/off switch (like entities from the switch domain or an input_boolean) the app enables / disables the guest wifi on your FRITZ!Box router.\n\n```yaml\nfritzbox:\n  module: fritzboxguestwifi\n  class: App\n  host: 169.254.1.1  # Optional: Only set it, if you have to\n  port: 49000  # Optional: Only set it, if you have to\n  user: admin  # Optional: Only set it, if you have to\n  password: your_fritzbox_pwd  # This one is mandatory\n  entity: input_boolean.guest_wifi  # The entity to listen for state changes\n  service: 'WLANConfiguration:2'  # Optional. The service to call that represents your Guest Wifi. Most probably the default.\n```\n\n## Changelog\n\n* 0.3.2: Updates appdaemon requirement to 3.0.2. Uses long lived access tokens. Introduces force setpoint set to climate app\n* 0.3.1: Adds the FRITZ!Box Guest wifi app\n* 0.3.0: Add `setpoint_sensor` to climate app to provide current room setpoint to hass\n* 0.2.1: Adds contraints to climate app schedules\n* 0.2.0: Making linter happy, pass duration in seconds as literals (e.g. 10m, 2d, ...)\n* 0.1.0: First working version","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhazarddede%2Fappdaemon-apps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhazarddede%2Fappdaemon-apps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhazarddede%2Fappdaemon-apps/lists"}