init
157
.README.j2
Normal file
@@ -0,0 +1,157 @@
|
||||
# Home Assistant Community Add-ons
|
||||
|
||||
![Project Stage][project-stage-shield]
|
||||
![Maintenance][maintenance-shield]
|
||||
[![License][license-shield]](LICENSE.md)
|
||||
|
||||
[![Discord][discord-shield]][discord]
|
||||
[![Community Forum][forum-shield]][forum]
|
||||
|
||||
## About
|
||||
|
||||
Home Assistant allows anyone to create add-on repositories to share their
|
||||
add-ons for Home Assistant easily. This repository is one of those repositories,
|
||||
providing extra Home Assistant add-ons for your installation.
|
||||
|
||||
The primary goal of this project is to provide you (as a Home Assistant user)
|
||||
with additional, high quality, add-ons that allow you to take your automated
|
||||
home to the next level.
|
||||
|
||||
## Installation
|
||||
|
||||
In general, there is no need to install this repository on your
|
||||
Home Assistant instance. It is activated and added by Home Assistant
|
||||
by default.
|
||||
|
||||
However, if the repository is missing on your setup, adding this add-ons
|
||||
repository to your Home Assistant instance is pretty easy. In the
|
||||
Home Assistant add-on store, a possibility to add a repository is provided.
|
||||
|
||||
Use the following URL to add this repository:
|
||||
|
||||
```txt
|
||||
{{ repo }}
|
||||
```
|
||||
|
||||
## Add-ons provided by this repository
|
||||
|
||||
{% for addon in addons %}
|
||||
### ✓ [{{ addon.name }}][addon-{{ addon.target }}]
|
||||
|
||||
![Latest Version][{{ addon.target }}-version-shield]
|
||||
![Supports armhf Architecture][{{ addon.target }}-armhf-shield]
|
||||
![Supports armv7 Architecture][{{ addon.target }}-armv7-shield]
|
||||
![Supports aarch64 Architecture][{{ addon.target }}-aarch64-shield]
|
||||
![Supports amd64 Architecture][{{ addon.target }}-amd64-shield]
|
||||
![Supports i386 Architecture][{{ addon.target }}-i386-shield]
|
||||
|
||||
{{ addon.description }}
|
||||
|
||||
[:books: {{ addon.name }} add-on documentation][addon-doc-{{ addon.target }}]
|
||||
|
||||
{% endfor %}
|
||||
## Releases
|
||||
|
||||
Releases are based on [Semantic Versioning][semver], and use the format
|
||||
of ``MAJOR.MINOR.PATCH``. In a nutshell, the version will be incremented
|
||||
based on the following:
|
||||
|
||||
- ``MAJOR``: Incompatible or major changes.
|
||||
- ``MINOR``: Backwards-compatible new features and enhancements.
|
||||
- ``PATCH``: Backwards-compatible bugfixes and package updates.
|
||||
|
||||
## Support
|
||||
|
||||
Got questions?
|
||||
|
||||
You have several options to get them answered:
|
||||
|
||||
- The Home Assistant Community Add-ons [Discord Chat Server][discord]
|
||||
- The Home Assistant [Community Forum][forum].
|
||||
- The Home Assistant [Discord Chat Server][discord-ha].
|
||||
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
|
||||
|
||||
You could also open an issue here on GitHub. Note, we use a separate
|
||||
GitHub repository for each add-on. Please ensure you are creating the issue
|
||||
on the correct GitHub repository matching the add-on.
|
||||
|
||||
{% for addon in addons %}
|
||||
- [Open an issue for the add-on: {{ addon.name }}][{{ addon.target }}-issue]
|
||||
{% endfor %}
|
||||
|
||||
For a general repository issue or add-on ideas [open an issue here][issue]
|
||||
|
||||
## Contributing
|
||||
|
||||
This is an active open-source project. We are always open to people who want to
|
||||
use the code or contribute to it.
|
||||
|
||||
We have set up a separate document containing our
|
||||
[contribution guidelines](CONTRIBUTING.md).
|
||||
|
||||
Thank you for being involved! :heart_eyes:
|
||||
|
||||
## Adding a new add-on
|
||||
|
||||
We are currently not accepting third party add-ons to this repository.
|
||||
|
||||
For questions, please contact [Franck Nijhof][frenck]:
|
||||
|
||||
- Drop him an email: frenck@addons.community
|
||||
- Chat with him on [Discord Chat][discord]
|
||||
- Message him via the forums: [frenck][forum-frenck]
|
||||
|
||||
## License
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017-2021 Franck Nijhof
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
{% for addon in addons %}
|
||||
[addon-{{ addon.target }}]: {{ addon.repo }}/tree/{{ addon.version }}
|
||||
[addon-doc-{{ addon.target}}]: {{ addon.repo }}/blob/{{ addon.version }}/README.md
|
||||
[{{ addon.target }}-issue]: {{ addon.repo }}/issues
|
||||
[{{ addon.target }}-version-shield]: https://img.shields.io/badge/version-{{ addon.version }}-blue.svg
|
||||
{% for arch in ['aarch64', 'amd64', 'armhf', 'armv7', 'i386'] %}
|
||||
{% if arch in addon.archs %}
|
||||
[{{ addon.target }}-{{ arch }}-shield]: https://img.shields.io/badge/{{ arch }}-yes-green.svg
|
||||
{% else %}
|
||||
[{{ addon.target }}-{{ arch }}-shield]: https://img.shields.io/badge/{{ arch }}-no-red.svg
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
[awesome-shield]: https://img.shields.io/badge/awesome%3F-yes-brightgreen.svg
|
||||
[awesome]: https://awesome-ha.com
|
||||
[discord-ha]: https://discord.gg/c5DvZ4e
|
||||
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[forum-frenck]: https://community.home-assistant.io/u/frenck/?u=frenck
|
||||
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
|
||||
[forum]: https://community.home-assistant.io?u=frenck
|
||||
[frenck]: https://github.com/frenck
|
||||
[gitlabci-shield]: https://gitlab.com/{{ name }}/badges/master/pipeline.svg
|
||||
[gitlabci]: https://gitlab.com/{{ name }}/pipelines
|
||||
[issue]: https://github.com/{{ name }}/issues
|
||||
[license-shield]: https://img.shields.io/github/license/{{ name }}.svg
|
||||
[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
|
||||
[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
|
||||
[reddit]: https://reddit.com/r/homeassistant
|
||||
[semver]: http://semver.org/spec/v2.0.0.html
|
||||
163
.addons.yml
Normal file
@@ -0,0 +1,163 @@
|
||||
---
|
||||
channel: stable
|
||||
addons:
|
||||
adguard:
|
||||
repository: hassio-addons/addon-adguard-home
|
||||
target: adguard
|
||||
image: ghcr.io/hassio-addons/adguard/{arch}
|
||||
aircast:
|
||||
repository: hassio-addons/addon-aircast
|
||||
target: aircast
|
||||
image: ghcr.io/hassio-addons/aircast/{arch}
|
||||
airsonos:
|
||||
repository: hassio-addons/addon-airsonos
|
||||
target: airsonos
|
||||
image: ghcr.io/hassio-addons/airsonos/{arch}
|
||||
appdaemon:
|
||||
repository: hassio-addons/addon-appdaemon
|
||||
target: appdaemon
|
||||
image: ghcr.io/hassio-addons/appdaemon/{arch}
|
||||
bitwarden:
|
||||
repository: hassio-addons/addon-bitwarden
|
||||
target: bitwarden
|
||||
image: ghcr.io/hassio-addons/bitwarden/{arch}
|
||||
bookstack:
|
||||
repository: hassio-addons/addon-bookstack
|
||||
target: bookstack
|
||||
image: ghcr.io/hassio-addons/bookstack/{arch}
|
||||
chrony:
|
||||
repository: hassio-addons/addon-chrony
|
||||
target: chrony
|
||||
image: ghcr.io/hassio-addons/chrony/{arch}
|
||||
esphome:
|
||||
repository: esphome/hassio
|
||||
target: esphome
|
||||
image: esphome/esphome-hassio-{arch}
|
||||
example:
|
||||
repository: hassio-addons/addon-example
|
||||
target: example
|
||||
image: ghcr.io/hassio-addons/example/{arch}
|
||||
foldingathome:
|
||||
repository: hassio-addons/addon-foldingathome
|
||||
target: foldingathome
|
||||
image: ghcr.io/hassio-addons/foldingathome/{arch}
|
||||
ftp:
|
||||
repository: hassio-addons/addon-ftp
|
||||
target: ftp
|
||||
image: ghcr.io/hassio-addons/ftp/{arch}
|
||||
glances:
|
||||
repository: hassio-addons/addon-glances
|
||||
target: glances
|
||||
image: ghcr.io/hassio-addons/glances/{arch}
|
||||
grafana:
|
||||
repository: hassio-addons/addon-grafana
|
||||
target: grafana
|
||||
image: ghcr.io/hassio-addons/grafana/{arch}
|
||||
grocy:
|
||||
repository: hassio-addons/addon-grocy
|
||||
target: grocy
|
||||
image: ghcr.io/hassio-addons/grocy/{arch}
|
||||
home-panel:
|
||||
repository: hassio-addons/addon-home-panel
|
||||
target: home-panel
|
||||
image: ghcr.io/hassio-addons/home-panel/{arch}
|
||||
influxdb:
|
||||
repository: hassio-addons/addon-influxdb
|
||||
target: influxdb
|
||||
image: ghcr.io/hassio-addons/influxdb/{arch}
|
||||
jupyterlab:
|
||||
repository: hassio-addons/addon-jupyterlab
|
||||
target: jupyterlab
|
||||
image: ghcr.io/hassio-addons/jupyterlab/{arch}
|
||||
log-viewer:
|
||||
repository: hassio-addons/addon-log-viewer
|
||||
target: log-viewer
|
||||
image: ghcr.io/hassio-addons/log-viewer/{arch}
|
||||
matrix:
|
||||
repository: hassio-addons/addon-matrix
|
||||
target: matrix
|
||||
image: ghcr.io/hassio-addons/matrix/{arch}
|
||||
motioneye:
|
||||
repository: hassio-addons/addon-motioneye
|
||||
target: motioneye
|
||||
image: ghcr.io/hassio-addons/motioneye/{arch}
|
||||
mqtt:
|
||||
repository: hassio-addons/addon-mqtt
|
||||
target: mqtt
|
||||
image: hassioaddons/mqtt
|
||||
node-red:
|
||||
repository: hassio-addons/addon-node-red
|
||||
target: node-red
|
||||
image: ghcr.io/hassio-addons/node-red/{arch}
|
||||
nginxproxymanager:
|
||||
repository: hassio-addons/addon-nginx-proxy-manager
|
||||
target: proxy-manager
|
||||
image: ghcr.io/hassio-addons/nginxproxymanager/{arch}
|
||||
nut:
|
||||
repository: hassio-addons/addon-nut
|
||||
target: nut
|
||||
image: ghcr.io/hassio-addons/nut/{arch}
|
||||
phpmyadmin:
|
||||
repository: hassio-addons/addon-phpmyadmin
|
||||
target: phpmyadmin
|
||||
image: ghcr.io/hassio-addons/phpmyadmin/{arch}
|
||||
plex:
|
||||
repository: hassio-addons/addon-plex
|
||||
target: plex
|
||||
image: ghcr.io/hassio-addons/plex/{arch}
|
||||
portainer:
|
||||
repository: hassio-addons/addon-portainer
|
||||
target: portainer
|
||||
image: ghcr.io/hassio-addons/portainer/{arch}
|
||||
spotify:
|
||||
repository: hassio-addons/addon-spotify-connect
|
||||
target: spotify
|
||||
image: ghcr.io/hassio-addons/spotify/{arch}
|
||||
tasmoadmin:
|
||||
repository: hassio-addons/addon-tasmoadmin
|
||||
target: tasmoadmin
|
||||
image: ghcr.io/hassio-addons/tasmoadmin/{arch}
|
||||
tautulli:
|
||||
repository: hassio-addons/addon-tautulli
|
||||
target: tautulli
|
||||
image: ghcr.io/hassio-addons/tautulli/{arch}
|
||||
thelounge:
|
||||
repository: hassio-addons/addon-thelounge
|
||||
target: thelounge
|
||||
image: ghcr.io/hassio-addons/thelounge/{arch}
|
||||
ssh:
|
||||
repository: hassio-addons/addon-ssh
|
||||
target: ssh
|
||||
image: ghcr.io/hassio-addons/ssh/{arch}
|
||||
sqlite-web:
|
||||
repository: hassio-addons/addon-sqlite-web
|
||||
target: sqlite-web
|
||||
image: ghcr.io/hassio-addons/sqlite-web/{arch}
|
||||
tor:
|
||||
repository: hassio-addons/addon-tor
|
||||
target: tor
|
||||
image: ghcr.io/hassio-addons/tor/{arch}
|
||||
traccar:
|
||||
repository: hassio-addons/addon-traccar
|
||||
target: traccar
|
||||
image: ghcr.io/hassio-addons/traccar/{arch}
|
||||
unifi:
|
||||
repository: hassio-addons/addon-unifi
|
||||
target: unifi
|
||||
image: ghcr.io/hassio-addons/unifi/{arch}
|
||||
vscode:
|
||||
repository: hassio-addons/addon-vscode
|
||||
target: vscode
|
||||
image: ghcr.io/hassio-addons/vscode/{arch}
|
||||
wireguard:
|
||||
repository: hassio-addons/addon-wireguard
|
||||
target: wireguard
|
||||
image: ghcr.io/hassio-addons/wireguard/{arch}
|
||||
zerotier:
|
||||
repository: hassio-addons/addon-zerotier
|
||||
target: zerotier
|
||||
image: ghcr.io/hassio-addons/zerotier/{arch}
|
||||
zwavejs2mqtt:
|
||||
repository: hassio-addons/addon-zwavejs2mqtt
|
||||
target: zwavejs2mqtt
|
||||
image: ghcr.io/hassio-addons/zwavejs2mqtt/{arch}
|
||||
1
.github/CODEOWNERS
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.github/* @frenck
|
||||
133
.github/CODE_OF_CONDUCT.md
vendored
Normal file
@@ -0,0 +1,133 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
- Demonstrating empathy and kindness toward other people
|
||||
- Being respectful of differing opinions, viewpoints, and experiences
|
||||
- Giving and gracefully accepting constructive feedback
|
||||
- Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
- Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
- The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
- Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
- Public or private harassment
|
||||
- Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
- Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
frenck@frenck.dev.
|
||||
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
|
||||
|
||||
Community Impact Guidelines were inspired by
|
||||
[Mozilla's code of conduct enforcement ladder][mozilla coc].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
[https://www.contributor-covenant.org/faq][faq]. Translations are available
|
||||
at [https://www.contributor-covenant.org/translations][translations].
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
|
||||
[mozilla coc]: https://github.com/mozilla/diversity
|
||||
[faq]: https://www.contributor-covenant.org/faq
|
||||
[translations]: https://www.contributor-covenant.org/translations
|
||||
29
.github/CONTRIBUTING.md
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
# Contributing
|
||||
|
||||
When contributing to this repository, please first discuss the change you wish
|
||||
to make via issue, email, or any other method with the owners of this repository
|
||||
before making a change.
|
||||
|
||||
Please note we have a code of conduct, please follow it in all your interactions
|
||||
with the project.
|
||||
|
||||
## Issues and feature requests
|
||||
|
||||
You've found a bug in the source code, a mistake in the documentation or maybe
|
||||
you'd like a new feature? You can help us by submitting an issue to our
|
||||
[GitHub Repository][github]. Before you create an issue, make sure you search
|
||||
the archive, maybe your question was already answered.
|
||||
|
||||
Even better: You could submit a pull request with a fix / new feature!
|
||||
|
||||
## Pull request process
|
||||
|
||||
1. Search our repository for open or closed [pull requests][prs] that relates
|
||||
to your submission. You don't want to duplicate effort.
|
||||
|
||||
1. You may merge the pull request in once you have the sign-off of two other
|
||||
developers, or if you do not have permission to do that, you may request
|
||||
the second reviewer to merge it for you.
|
||||
|
||||
[github]: https://github.com/hassio-addons/repository/issues
|
||||
[prs]: https://github.com/hassio-addons/repository/pulls
|
||||
20
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
# Problem/Motivation
|
||||
|
||||
> (Why the issue was filed)
|
||||
|
||||
## Expected behavior
|
||||
|
||||
> (What you expected to happen)
|
||||
|
||||
## Actual behavior
|
||||
|
||||
> (What actually happened)
|
||||
|
||||
## Steps to reproduce
|
||||
|
||||
> (How can someone else make/see it happen)
|
||||
|
||||
## Proposed changes
|
||||
|
||||
> (If you have a proposed change, workaround or fix,
|
||||
> describe the rationale behind it)
|
||||
9
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
# Proposed Changes
|
||||
|
||||
> (Describe the changes and rationale behind them)
|
||||
|
||||
## Related Issues
|
||||
|
||||
> ([Github link][autolink-references] to related issues or pull requests)
|
||||
|
||||
[autolink-references]: https://help.github.com/articles/autolinked-references-and-urls/
|
||||
1839
.github/SECURITY.md
vendored
Normal file
13
.github/dependabot.yaml
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: daily
|
||||
time: "06:00"
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: daily
|
||||
time: "06:00"
|
||||
85
.github/labels.yml
vendored
Normal file
@@ -0,0 +1,85 @@
|
||||
---
|
||||
- name: "breaking-change"
|
||||
color: ee0701
|
||||
description: "A breaking change for existing users."
|
||||
- name: "bugfix"
|
||||
color: ee0701
|
||||
description: "Inconsistencies or issues which will cause a problem for users or implementors."
|
||||
- name: "documentation"
|
||||
color: 0052cc
|
||||
description: "Solely about the documentation of the project."
|
||||
- name: "enhancement"
|
||||
color: 1d76db
|
||||
description: "Enhancement of the code, not introducing new features."
|
||||
- name: "refactor"
|
||||
color: 1d76db
|
||||
description: "Improvement of existing code, not introducing new features."
|
||||
- name: "performance"
|
||||
color: 1d76db
|
||||
description: "Improving performance, not introducing new features."
|
||||
- name: "new-feature"
|
||||
color: 0e8a16
|
||||
description: "New features or options."
|
||||
- name: "maintenance"
|
||||
color: 2af79e
|
||||
description: "Generic maintenance tasks."
|
||||
- name: "ci"
|
||||
color: 1d76db
|
||||
description: "Work that improves the continue integration."
|
||||
- name: "dependencies"
|
||||
color: 1d76db
|
||||
description: "Upgrade or downgrade of project dependencies."
|
||||
|
||||
- name: "in-progress"
|
||||
color: fbca04
|
||||
description: "Issue is currently being resolved by a developer."
|
||||
- name: "stale"
|
||||
color: fef2c0
|
||||
description: "There has not been activity on this issue or PR for quite some time."
|
||||
- name: "no-stale"
|
||||
color: fef2c0
|
||||
description: "This issue or PR is exempted from the stable bot."
|
||||
|
||||
- name: "security"
|
||||
color: ee0701
|
||||
description: "Marks a security issue that needs to be resolved asap."
|
||||
- name: "incomplete"
|
||||
color: fef2c0
|
||||
description: "Marks a PR or issue that is missing information."
|
||||
- name: "invalid"
|
||||
color: fef2c0
|
||||
description: "Marks a PR or issue that is missing information."
|
||||
|
||||
- name: "beginner-friendly"
|
||||
color: 0e8a16
|
||||
description: "Good first issue for people wanting to contribute to the project."
|
||||
- name: "help-wanted"
|
||||
color: 0e8a16
|
||||
description: "We need some extra helping hands or expertise in order to resolve this."
|
||||
|
||||
- name: "hacktoberfest"
|
||||
description: "Issues/PRs are participating in the Hacktoberfest."
|
||||
color: fbca04
|
||||
- name: "hacktoberfest-accepted"
|
||||
description: "Issues/PRs are participating in the Hacktoberfest."
|
||||
color: fbca04
|
||||
|
||||
- name: "priority-critical"
|
||||
color: ee0701
|
||||
description: "This should be dealt with ASAP. Not fixing this issue would be a serious error."
|
||||
- name: "priority-high"
|
||||
color: b60205
|
||||
description: "After critical issues are fixed, these should be dealt with before any further issues."
|
||||
- name: "priority-medium"
|
||||
color: 0e8a16
|
||||
description: "This issue may be useful, and needs some attention."
|
||||
- name: "priority-low"
|
||||
color: e4ea8a
|
||||
description: "Nice addition, maybe... someday..."
|
||||
|
||||
- name: "major"
|
||||
color: b60205
|
||||
description: "This PR causes a major version bump in the version number."
|
||||
- name: "minor"
|
||||
color: 0e8a16
|
||||
description: "This PR causes a minor version bump in the version number."
|
||||
22
.github/workflows/labels.yaml
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
---
|
||||
name: Sync labels
|
||||
|
||||
# yamllint disable-line rule:truthy
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- .github/labels.yml
|
||||
|
||||
jobs:
|
||||
labels:
|
||||
name: ♻️ Sync labels
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: ⤵️ Check out code from GitHub
|
||||
uses: actions/checkout@v2.3.4
|
||||
- name: 🚀 Run Label Syncer
|
||||
uses: micnncim/action-label-syncer@v1.3.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
33
.github/workflows/lint.yaml
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
---
|
||||
name: Lint
|
||||
|
||||
# yamllint disable-line rule:truthy
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
- synchronize
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
json:
|
||||
name: JSON Lint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: ⤵️ Check out code from GitHub
|
||||
uses: actions/checkout@v2.3.4
|
||||
- name: 🚀 Run JQ
|
||||
run: |
|
||||
shopt -s globstar
|
||||
cat **/*.json | jq '.'
|
||||
|
||||
yamllint:
|
||||
name: YAMLLint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: ⤵️ Check out code from GitHub
|
||||
uses: actions/checkout@v2.3.4
|
||||
- name: 🚀 Run YAMLLint
|
||||
uses: frenck/action-yamllint@v1.1
|
||||
21
.github/workflows/lock.yaml
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
name: Lock
|
||||
|
||||
# yamllint disable-line rule:truthy
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 9 * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
lock:
|
||||
name: 🔒 Lock closed issues and PRs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: dessant/lock-threads@v2.0.3
|
||||
with:
|
||||
github-token: ${{ github.token }}
|
||||
issue-lock-inactive-days: "30"
|
||||
issue-lock-reason: ""
|
||||
pr-lock-inactive-days: "1"
|
||||
pr-lock-reason: ""
|
||||
54
.github/workflows/repository-updater.yaml
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
---
|
||||
name: Repository Updater
|
||||
|
||||
# yamllint disable-line rule:truthy
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: ["update"]
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
name: Publish add-on update
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 🚀 Run Repository Updater
|
||||
uses: hassio-addons/repository-updater@v1.1
|
||||
with:
|
||||
addon: ${{ github.event.client_payload.addon }}
|
||||
repository: ${{ github.repository }}
|
||||
token: ${{ secrets.UPDATER_TOKEN }}
|
||||
|
||||
announce:
|
||||
name: Announce add-on update
|
||||
needs: publish
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 📢 Announce on Discord server
|
||||
uses: sarisia/actions-status-discord@v1.8.6
|
||||
with:
|
||||
webhook: ${{ secrets.DISCORD_WEBHOOK }}
|
||||
nodetail: true
|
||||
username: ${{ github.event.client_payload.name }}
|
||||
avatar_url: |
|
||||
https://raw.githubusercontent.com/${{ github.repository }}/master/${{ github.event.client_payload.addon }}/icon.png
|
||||
title: ":arrow_up: ${{ github.event.client_payload.name }} ${{ github.event.client_payload.version }}"
|
||||
image: |
|
||||
https://raw.githubusercontent.com/${{ github.repository }}/master/${{ github.event.client_payload.addon }}/logo.png
|
||||
description: |
|
||||
A new version of the ${{ github.event.client_payload.name }} add-on has been published.
|
||||
|
||||
**Version**: `${{ github.event.client_payload.version }}`
|
||||
**Release notes**:
|
||||
<https://github.com/${{ github.event.client_payload.repository }}/releases/tag/${{ github.event.client_payload.version }}>
|
||||
|
||||
- name: 📢 Announce on Twitter
|
||||
uses: devigned/go-twitter-action@v1.0.2
|
||||
with:
|
||||
apiKey: ${{ secrets.TWITTER_API_KEY }}
|
||||
apiKeySecret: ${{ secrets.TWITTER_API_SECRET }}
|
||||
accessToken: ${{ secrets.TWITTER_ACCESS_TOKEN }}
|
||||
accessTokenSecret: ${{ secrets.TWITTER_ACCESS_SECRET }}
|
||||
message: |
|
||||
⬆️ ${{ github.event.client_payload.name }} ${{ github.event.client_payload.version }}
|
||||
|
||||
https://github.com/${{ github.event.client_payload.repository }}/releases/tag/${{ github.event.client_payload.version }}
|
||||
40
.github/workflows/stale.yaml
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
---
|
||||
name: Stale
|
||||
|
||||
# yamllint disable-line rule:truthy
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 8 * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
name: 🧹 Clean up stale issues and PRs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 🚀 Run stale
|
||||
uses: actions/stale@v3.0.19
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
days-before-stale: 30
|
||||
days-before-close: 7
|
||||
remove-stale-when-updated: true
|
||||
stale-issue-label: "stale"
|
||||
exempt-issue-labels: "no-stale,help-wanted"
|
||||
stale-issue-message: >
|
||||
There hasn't been any activity on this issue recently, so we
|
||||
clean up some of the older and inactive issues.
|
||||
|
||||
Please make sure to update to the latest version and
|
||||
check if that solves the issue. Let us know if that works for you
|
||||
by leaving a comment 👍
|
||||
|
||||
This issue has now been marked as stale and will be closed if no
|
||||
further activity occurs. Thanks!
|
||||
stale-pr-label: "stale"
|
||||
exempt-pr-labels: "no-stale"
|
||||
stale-pr-message: >
|
||||
There hasn't been any activity on this pull request recently. This
|
||||
pull request has been automatically marked as stale because of that
|
||||
and will be closed if no further activity occurs within 7 days.
|
||||
Thank you for your contributions.
|
||||
75
.github/workflows/translations-download.yaml
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
---
|
||||
name: Translations Download
|
||||
|
||||
# yamllint disable-line rule:truthy
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 8 * * *"
|
||||
workflow_dispatch:
|
||||
workflow_run:
|
||||
workflows: ["Translations Upload"]
|
||||
branches: [master]
|
||||
types:
|
||||
- completed
|
||||
|
||||
jobs:
|
||||
json:
|
||||
name: Download Translations
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: ⤵️ Check out code from GitHub
|
||||
uses: actions/checkout@v2.3.4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: 🏗 Set up yq
|
||||
uses: frenck/action-setup-yq@v1.0.0
|
||||
- name: 🏗 Set up the Lokalise CLI
|
||||
uses: frenck/action-setup-lokalise@v1.0.0
|
||||
- name: ⤵️ Download translations
|
||||
run: |
|
||||
echo "Downloading translations to lokalise"
|
||||
lokalise2 file download \
|
||||
--token "${LOKALISE_TOKEN}" \
|
||||
--project-id "${LOKALISE_PROJECT}" \
|
||||
--format yaml \
|
||||
--original-filenames=false \
|
||||
--export-empty-as base \
|
||||
--bundle-structure ".translations/%LANG_ISO%.yaml"
|
||||
env:
|
||||
LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }}
|
||||
LOKALISE_PROJECT: ${{ secrets.LOKALISE_PROJECT }}
|
||||
- name: 🚀 Process translations
|
||||
run: |
|
||||
addons=$(yq e '.addons | keys | .[]' .addons.yml)
|
||||
mkdir -p .translations
|
||||
for file in .translations/*.yaml;
|
||||
do
|
||||
filename=$(basename "${file}")
|
||||
language="${filename%.*}"
|
||||
if [[ "${language}" == "en" ]]; then
|
||||
continue
|
||||
fi
|
||||
echo "Processing downloaded translations in ${language}..."
|
||||
while read addon;
|
||||
do
|
||||
if [[ -f "${addon}/translations/en.yaml" ]];
|
||||
then
|
||||
echo "Processing downloaded translations in ${language} for ${addon}..."
|
||||
yq e ".${addon}" "${file}" \
|
||||
> "${addon}/translations/${filename}"
|
||||
fi
|
||||
done <<<"${addons}"
|
||||
done
|
||||
- name: 🚀 Commit changes
|
||||
continue-on-error: true
|
||||
run: |
|
||||
git config --local user.email "action@github.com"
|
||||
git config --local user.name "${GITHUB_ACTOR}"
|
||||
git add .
|
||||
git commit -m "🌍 Updating translations" -a
|
||||
- name: 🚀 Push changes
|
||||
uses: ad-m/github-push-action@v0.6.0
|
||||
continue-on-error: true
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
branch: ${{ github.ref }}
|
||||
53
.github/workflows/translations-upload.yaml
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
---
|
||||
name: Translations Upload
|
||||
|
||||
# yamllint disable-line rule:truthy
|
||||
on:
|
||||
workflow_dispatch:
|
||||
workflow_run:
|
||||
workflows: ["Repository Updater"]
|
||||
branches: [master]
|
||||
types:
|
||||
- completed
|
||||
|
||||
jobs:
|
||||
upload:
|
||||
name: Upload Translations
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: ⤵️ Check out code from GitHub
|
||||
uses: actions/checkout@v2.3.4
|
||||
- name: 🏗 Set up yq
|
||||
uses: frenck/action-setup-yq@v1.0.0
|
||||
- name: 🏗 Set up the Lokalise CLI
|
||||
uses: frenck/action-setup-lokalise@v1.0.0
|
||||
- name: 🚀 Combine translations
|
||||
run: |
|
||||
addons=$(yq e '.addons | keys | .[]' .addons.yml)
|
||||
mkdir -p .translations
|
||||
while read addon;
|
||||
do
|
||||
if [[ -f "${addon}/translations/en.yaml" ]];
|
||||
then
|
||||
echo "Prepping translation upload for $addon..."
|
||||
ADDON="${addon}" \
|
||||
yq e '{env(ADDON): .}' "${addon}/translations/en.yaml" \
|
||||
> ".translations/${addon}.yaml"
|
||||
fi
|
||||
done <<<"${addons}"
|
||||
|
||||
echo "Combining translation files..."
|
||||
yq ea '. as $item ireduce ({}; . * $item)' ./.translations/*.yaml > translations.yaml
|
||||
- name: 🚀 Upload translations
|
||||
run: |
|
||||
echo "Uploading translations to lokalise"
|
||||
lokalise2 file upload \
|
||||
--apply-tm \
|
||||
--lang-iso en \
|
||||
--poll \
|
||||
--token "${LOKALISE_TOKEN}" \
|
||||
--project-id "${LOKALISE_PROJECT}" \
|
||||
--file translations.yaml
|
||||
env:
|
||||
LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }}
|
||||
LOKALISE_PROJECT: ${{ secrets.LOKALISE_PROJECT }}
|
||||
14
.gitignore
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
bin/*
|
||||
!bin/create_all.sh
|
||||
!bin/create_hassio_addon.sh
|
||||
!bin/travis_build.sh
|
||||
*.do
|
||||
bin/*
|
||||
docs/*
|
||||
site/*
|
||||
pip-selfcheck.json
|
||||
pyvenv.cfg
|
||||
include/
|
||||
lib/
|
||||
venv/
|
||||
.translations
|
||||
8
.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
11
.idea/gitlab-quickmr.xml
generated
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="gitlab-quickmr">
|
||||
<option name="gitLabUri" value="https://git.van.work/api/v4" />
|
||||
<option name="defaultTargetBranch" value="master" />
|
||||
<option name="defaultTitle" value="Запрос на слияние из {{sourceBranch}} в {{targetBranch}}" />
|
||||
<option name="defaultDescription" value="" />
|
||||
<option name="defaultLabels" value="" />
|
||||
<option name="assigneesEnabled" value="false" />
|
||||
</component>
|
||||
</project>
|
||||
27
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
@@ -0,0 +1,27 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="ignoredPackages">
|
||||
<value>
|
||||
<list size="3">
|
||||
<item index="0" class="java.lang.String" itemvalue="django_filters" />
|
||||
<item index="1" class="java.lang.String" itemvalue="psycopg2-binary" />
|
||||
<item index="2" class="java.lang.String" itemvalue="Pillow" />
|
||||
</list>
|
||||
</value>
|
||||
</option>
|
||||
</inspection_tool>
|
||||
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="ignoredIdentifiers">
|
||||
<list>
|
||||
<option value="django.contrib.auth.models.User.verified_phone_number" />
|
||||
<option value="accounts.CustomUser" />
|
||||
<option value="tuple.is_found" />
|
||||
<option value="tuple.items" />
|
||||
</list>
|
||||
</option>
|
||||
</inspection_tool>
|
||||
</profile>
|
||||
</component>
|
||||
6
.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<settings>
|
||||
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||
<version value="1.0" />
|
||||
</settings>
|
||||
</component>
|
||||
7
.idea/misc.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (repository-master)" project-jdk-type="Python SDK" />
|
||||
<component name="SvnConfiguration">
|
||||
<configuration>$USER_HOME$/.subversion</configuration>
|
||||
</component>
|
||||
</project>
|
||||
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/repository-master.iml" filepath="$PROJECT_DIR$/.idea/repository-master.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
10
.idea/repository-master.iml
generated
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
6
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
66
.yamllint
Normal file
@@ -0,0 +1,66 @@
|
||||
---
|
||||
ignore: |
|
||||
*/translations/*.yaml
|
||||
rules:
|
||||
braces:
|
||||
level: error
|
||||
min-spaces-inside: 0
|
||||
max-spaces-inside: 1
|
||||
min-spaces-inside-empty: -1
|
||||
max-spaces-inside-empty: -1
|
||||
brackets:
|
||||
level: error
|
||||
min-spaces-inside: 0
|
||||
max-spaces-inside: 0
|
||||
min-spaces-inside-empty: -1
|
||||
max-spaces-inside-empty: -1
|
||||
colons:
|
||||
level: error
|
||||
max-spaces-before: 0
|
||||
max-spaces-after: 1
|
||||
commas:
|
||||
level: error
|
||||
max-spaces-before: 0
|
||||
min-spaces-after: 1
|
||||
max-spaces-after: 1
|
||||
comments:
|
||||
level: error
|
||||
require-starting-space: true
|
||||
min-spaces-from-content: 2
|
||||
comments-indentation:
|
||||
level: error
|
||||
document-end:
|
||||
level: error
|
||||
present: false
|
||||
document-start:
|
||||
level: error
|
||||
present: true
|
||||
empty-lines:
|
||||
level: error
|
||||
max: 1
|
||||
max-start: 0
|
||||
max-end: 1
|
||||
hyphens:
|
||||
level: error
|
||||
max-spaces-after: 1
|
||||
indentation:
|
||||
level: error
|
||||
spaces: 2
|
||||
indent-sequences: true
|
||||
check-multi-line-strings: false
|
||||
key-duplicates:
|
||||
level: error
|
||||
line-length:
|
||||
level: warning
|
||||
max: 120
|
||||
allow-non-breakable-words: true
|
||||
allow-non-breakable-inline-mappings: true
|
||||
new-line-at-end-of-file:
|
||||
level: error
|
||||
new-lines:
|
||||
level: error
|
||||
type: unix
|
||||
trailing-spaces:
|
||||
level: error
|
||||
truthy:
|
||||
level: error
|
||||
21
LICENSE.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# MIT License
|
||||
|
||||
Copyright (c) 2017-2021 Franck Nijhof <frenck@addons.community>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
0
READM1E.md
Normal file
15
aircast/CHANGELOG.md
Normal file
@@ -0,0 +1,15 @@
|
||||
## What’s changed
|
||||
|
||||
## ⬆️ Dependency updates
|
||||
|
||||
- ⬆️ Bump brpaz/hadolint-action from v1.4.0 to v1.5.0 @dependabot (#74)
|
||||
- ⬆️ Bump frenck/action-addon-linter from 2 to 2.1 @dependabot (#75)
|
||||
- ⬆️ Bump actions/stale from 3.0.18 to 3.0.19 @dependabot (#76)
|
||||
- ⬆️ Bump frenck/action-addon-information from 1.0.0 to 1.1 @dependabot (#77)
|
||||
- ⬆️ Bump micnncim/action-label-syncer from 1.2.0 to 1.3.0 @dependabot (#78)
|
||||
- ⬆️ Bump docker/build-push-action from 2.4.0 to 2.5.0 @dependabot (#79)
|
||||
- ⬆️ Bump docker/setup-qemu-action from 1.1.0 to 1.2.0 @dependabot (#80)
|
||||
- ⬆️ Bump actions/cache from 2.1.5 to 2.1.6 @dependabot (#81)
|
||||
- ⬆️ Bump frenck/action-addon-information from 1.1 to 1.2 @dependabot (#82)
|
||||
- ⬆️ Upgrades add-on base image to v4.2.1 @frenck (#84)
|
||||
- ⬆️ Upgrades AirConnect to 0.2.50.5 @frenck (#85)
|
||||
231
aircast/DOCS.md
Normal file
@@ -0,0 +1,231 @@
|
||||
# Home Assistant Community Add-on: AirCast
|
||||
|
||||
Apple devices use AirPlay to send audio to other devices, but this is not
|
||||
compatible with Google's Chromecast. This add-on tries to solve this
|
||||
compatibility gap.
|
||||
|
||||
It detects Chromecast players in your network and creates virtual AirPlay
|
||||
devices for each of them. It acts as a bridge between the AirPlay client
|
||||
and the real Chromecast player.
|
||||
|
||||
## Installation
|
||||
|
||||
The installation of this add-on is pretty straightforward and not different in
|
||||
comparison to installing any other Home Assistant add-on.
|
||||
|
||||
1. Search for the “AirCast” add-on in the Supervisor add-on store
|
||||
and install it.
|
||||
1. Install the "AirCast" add-on.
|
||||
1. Start the "AirCast" add-on
|
||||
1. Check the logs of the "AirCast" add-on to see if everything went well.
|
||||
|
||||
After ~30 seconds you should see some log messages appear in the add-on log.
|
||||
Using your iOS/Mac/iTunes/Airfoil/other clients, you should now see new AirPlay
|
||||
devices and can try to play audio to them.
|
||||
|
||||
## Configuration
|
||||
|
||||
**Note**: _Remember to restart the add-on when the configuration is changed._
|
||||
|
||||
Example add-on configuration:
|
||||
|
||||
```yaml
|
||||
log_level: info
|
||||
address: 192.168.1.234
|
||||
latency_rtp: 5000
|
||||
latency_http: 0
|
||||
drift: true
|
||||
```
|
||||
|
||||
**Note**: _This is just an example, don't copy and past it! Create your own!_
|
||||
|
||||
### Option: `log_level`
|
||||
|
||||
The `log_level` option controls the level of log output by the addon and can
|
||||
be changed to be more or less verbose, which might be useful when you are
|
||||
dealing with an unknown issue. Possible values are:
|
||||
|
||||
- `trace`: Show every detail, like all called internal functions.
|
||||
- `debug`: Shows detailed debug information.
|
||||
- `info`: Normal (usually) interesting events.
|
||||
- `warning`: Exceptional occurrences that are not errors.
|
||||
- `error`: Runtime errors that do not require immediate action.
|
||||
- `fatal`: Something went terribly wrong. Add-on becomes unusable.
|
||||
|
||||
Please note that each level automatically includes log messages from a
|
||||
more severe level, e.g., `debug` also shows `info` messages. By default,
|
||||
the `log_level` is set to `info`, which is the recommended setting unless
|
||||
you are troubleshooting.
|
||||
|
||||
These log level also affects the log levels of AirCast server.
|
||||
|
||||
### Option: `address`
|
||||
|
||||
This option allows you to specify the IP address the AirCast server needs to
|
||||
bind to. It will automatically detect the interface to use when this option is
|
||||
left empty. Nevertheless, it might get detected wrong (e.g., in case you have
|
||||
multiple network interfaces).
|
||||
|
||||
### Option: `latency_rtp`
|
||||
|
||||
Allows you to tweak the buffering, which is needed when the audio is stuttering
|
||||
(e.g., low-quality network). This option specifies the number of ms the addon
|
||||
has to buffer the RTP audio (AirPlay). Setting this value below 500ms is not
|
||||
recommended! Setting the value to `0` causes the addon the get the value from
|
||||
AirPlay.
|
||||
|
||||
### Option: `latency_http`
|
||||
|
||||
Allows you to tweak the buffering, which is needed when the audio is stuttering
|
||||
(e.g., low-quality network). This option specifies the number of ms the addon
|
||||
has to buffer the HTTP audio.
|
||||
|
||||
**Note**: This option usually is not needed and can be left to `0` in most
|
||||
cases.
|
||||
|
||||
### Option: `drift`
|
||||
|
||||
Set to `true` to let timing reference drift (no click).
|
||||
|
||||
## Latency options explained
|
||||
|
||||
These bridges receive real-time "synchronous" audio from the AirPlay controller
|
||||
in the format of RTP frames and forward it to the Chromecast player in an HTTP
|
||||
"asynchronous" continuous audio binary format. In other words,
|
||||
the AirPlay clients "push" the audio using RTP and the Chromecast players
|
||||
"pull" the audio using an HTTP GET request.
|
||||
|
||||
A player using HTTP to get its audio expects to receive an initial large
|
||||
portion of audio as the response to its GET and this creates a large enough
|
||||
buffer to handle most further network congestion/delays. The rest of the audio
|
||||
transmission is regulated by the player using TCP flow control. However, when
|
||||
the source is an AirPlay RTP device, there is no such significant portion of
|
||||
audio available in advance to be sent to the Player, as the audio comes to the
|
||||
bridge in real time. Every 8ms, an RTP frame is received and is immediately
|
||||
forwarded as the continuation of the HTTP body. If the Chromecast players
|
||||
start to play immediately the first received audio sample, expecting an initial
|
||||
burst to follow, then any network congestion delaying RTP audio will starve
|
||||
the player and create shuttering.
|
||||
|
||||
The `latency_http` option allows a certain amount of silence frames to be sent
|
||||
to the Chromecast player, in a burst at the beginning. Then, while this
|
||||
"artificial" silence is being played, it is possible for the bridge to build
|
||||
a buffer of RTP frames that will then hide network delays that might happen
|
||||
in further RTP frames transmission. This delays the start of the playback
|
||||
by `latency_http` ms.
|
||||
|
||||
However, RTP frames are transmitted using UDP, which means there is no guarantee
|
||||
of delivery, so frames might be lost from time to time
|
||||
(often happens on WiFi networks). To allow detection of lost frames, they are
|
||||
numbered sequentially (1,2 ... n) so every time two received frames are not
|
||||
consecutive, the missing ones can be asked again by the AirPlay receiver.
|
||||
|
||||
Typically, the bridge forwards immediately every RTP frame using HTTP and again,
|
||||
in HTTP, the notion of frame numbers does not exist, it is just the continuous
|
||||
binary audio. So it is not possible to send audio non-sequentially when using
|
||||
HTTP.
|
||||
|
||||
For example, if received RTP frames are numbered 1,2,3,6, this bridge will
|
||||
forward (once decoded and transformed into raw audio) 1,2,3 immediately using
|
||||
HTTP but when it receives 6, it will re-ask for 4 and 5 to be resent and
|
||||
hold 6 while waiting (if 6 was transmitted immediately, the Chromecast
|
||||
will play 1,2,3,6 ... not nice).
|
||||
|
||||
The `latency_rtp` option sets for how long frame 6 shall be held before adding
|
||||
two silence frames for 4 and 5 and send sending 4,5,6. Obviously, if this delay
|
||||
is larger than the buffer in the Chromecast player, playback will stop by
|
||||
lack of audio. Note that `latency_rtp` does not delay playback start.
|
||||
|
||||
> **Note**: `latency_rtp` and `latency_http` could have been merged into a
|
||||
> single `latency` parameter which would have set the max RTP frames holding time
|
||||
> as well as the duration of the initial additional silence (delay),
|
||||
> however, all Chromecast devices do properly their own buffering of HTTP audio
|
||||
> (i.e., they wait until they have received a certain amount of audio before
|
||||
> starting to play), then adding silence would have introduced an extra
|
||||
> unnecessary delay in playback.
|
||||
|
||||
## Tweaking Aircast
|
||||
|
||||
Aircast creates a configuration file called `aircast.xml` in your Home
|
||||
Assistant configuration directory. This file allows you to tweak each device
|
||||
separately. Every time it finds a new device, it will be added to that file.
|
||||
|
||||
> **NOTE**: It is HIGHLY recommended to stop the addon before making changes
|
||||
> to the configuration file manually.
|
||||
|
||||
## Known issues and limitations
|
||||
|
||||
- This add-on does support ARM-based devices, nevertheless, they must
|
||||
at least be an ARMv7 device. (Raspberry Pi 1 and Zero is not supported).
|
||||
- The configuration file of AirConnect (used by this add-on) is not
|
||||
exposed to the user. We plan on adding that feature in a future release.
|
||||
|
||||
## Changelog & Releases
|
||||
|
||||
This repository keeps a change log using [GitHub's releases][releases]
|
||||
functionality.
|
||||
|
||||
Releases are based on [Semantic Versioning][semver], and use the format
|
||||
of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
|
||||
based on the following:
|
||||
|
||||
- `MAJOR`: Incompatible or major changes.
|
||||
- `MINOR`: Backwards-compatible new features and enhancements.
|
||||
- `PATCH`: Backwards-compatible bugfixes and package updates.
|
||||
|
||||
## Support
|
||||
|
||||
Got questions?
|
||||
|
||||
You have several options to get them answered:
|
||||
|
||||
- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
|
||||
support and feature requests.
|
||||
- The [Home Assistant Discord chat server][discord-ha] for general Home
|
||||
Assistant discussions and questions.
|
||||
- The Home Assistant [Community Forum][forum].
|
||||
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
|
||||
|
||||
You could also [open an issue here][issue] GitHub.
|
||||
|
||||
## Authors & contributors
|
||||
|
||||
The original setup of this repository is by [Franck Nijhof][frenck].
|
||||
|
||||
For a full list of all authors and contributors,
|
||||
check [the contributor's page][contributors].
|
||||
|
||||
## License
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017-2021 Franck Nijhof
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
[contributors]: https://github.com/hassio-addons/addon-aircast/graphs/contributors
|
||||
[discord-ha]: https://discord.gg/c5DvZ4e
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[docs]: https://github.com/hassio-addons/addon-aircast/blob/main/aircast/DOCS.md
|
||||
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-aircast/36742?u=frenck
|
||||
[frenck]: https://github.com/frenck
|
||||
[issue]: https://github.com/hassio-addons/addon-aircast/issues
|
||||
[reddit]: https://reddit.com/r/homeassistant
|
||||
[releases]: https://github.com/hassio-addons/addon-aircast/releases
|
||||
[semver]: http://semver.org/spec/v2.0.0.htm
|
||||
34
aircast/README.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# Home Assistant Community Add-on: AirCast
|
||||
|
||||
[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
|
||||
|
||||
[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
|
||||
|
||||
[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
|
||||
|
||||
[![Support Frenck on Patreon][patreon-shield]][patreon]
|
||||
|
||||
AirPlay capabilities for your Chromecast players.
|
||||
|
||||
## About
|
||||
|
||||
Apple devices use AirPlay to send audio to other devices, but this is not
|
||||
compatible with Google's Chromecast. This add-on tries to solve this
|
||||
compatibility gap.
|
||||
|
||||
It detects Chromecast players in your network and creates virtual AirPlay
|
||||
devices for each of them. It acts as a bridge between the AirPlay client
|
||||
and the real Chromecast player.
|
||||
|
||||
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
|
||||
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-aircast/36742?u=frenck
|
||||
[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
|
||||
[github-sponsors]: https://github.com/sponsors/frenck
|
||||
[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
|
||||
[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
|
||||
[patreon]: https://www.patreon.com/frenck
|
||||
[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
|
||||
[release-shield]: https://img.shields.io/badge/version-v3.1.1-blue.svg
|
||||
[release]: https://github.com/hassio-addons/addon-aircast/tree/v3.1.1
|
||||
33
aircast/config.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"name": "AirCast",
|
||||
"version": "3.1.1",
|
||||
"slug": "aircast",
|
||||
"description": "AirPlay capabilities for your Chromecast devices.",
|
||||
"url": "https://github.com/hassio-addons/addon-aircast",
|
||||
"startup": "services",
|
||||
"init": false,
|
||||
"arch": [
|
||||
"aarch64",
|
||||
"amd64",
|
||||
"armv7",
|
||||
"i386"
|
||||
],
|
||||
"hassio_api": true,
|
||||
"host_network": true,
|
||||
"map": [
|
||||
"config:rw"
|
||||
],
|
||||
"options": {
|
||||
"latency_rtp": 0,
|
||||
"latency_http": 0,
|
||||
"drift": false
|
||||
},
|
||||
"schema": {
|
||||
"log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
|
||||
"address": "str?",
|
||||
"latency_rtp": "int",
|
||||
"latency_http": "int",
|
||||
"drift": "bool"
|
||||
},
|
||||
"image": "ghcr.io/hassio-addons/aircast/{arch}"
|
||||
}
|
||||
BIN
aircast/icon.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
aircast/logo.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
29
aircast/translations/en.yaml
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
configuration:
|
||||
log_level:
|
||||
name: Log level
|
||||
description: >-
|
||||
Controls the level of log details the add-on provides.
|
||||
address:
|
||||
name: Address
|
||||
description: >-
|
||||
Allows you to specify the IP address the AirCast server needs to
|
||||
bind to.
|
||||
latency_rtp:
|
||||
name: RTP Latency
|
||||
description: >-
|
||||
Allows you to tweak the buffering, which is needed when the audio is
|
||||
stuttering (e.g., low-quality network). This option specifies the number
|
||||
of ms the add-on has to buffer the RTP audio (AirPlay). Setting this value
|
||||
below 500ms is not recommended! Setting the value to 0 makes the add-on
|
||||
to get the value from AirPlay.
|
||||
latency_http:
|
||||
name: HTTP Latency
|
||||
description: >-
|
||||
Allows you to tweak the buffering, which is needed when the audio is
|
||||
stuttering (e.g., low-quality network). This option specifies the number
|
||||
of ms the add-on has to buffer the HTTP audio.
|
||||
drift:
|
||||
name: Drift
|
||||
description: >-
|
||||
Allow to let timing reference drift (no click).
|
||||
15
airsonos/CHANGELOG.md
Normal file
@@ -0,0 +1,15 @@
|
||||
## What’s changed
|
||||
|
||||
## ⬆️ Dependency updates
|
||||
|
||||
- ⬆️ Bump brpaz/hadolint-action from v1.4.0 to v1.5.0 @dependabot (#58)
|
||||
- ⬆️ Bump frenck/action-addon-linter from 2 to 2.1 @dependabot (#59)
|
||||
- ⬆️ Bump actions/stale from 3.0.18 to 3.0.19 @dependabot (#60)
|
||||
- ⬆️ Bump frenck/action-addon-information from 1.0.0 to 1.1 @dependabot (#61)
|
||||
- ⬆️ Bump micnncim/action-label-syncer from 1.2.0 to 1.3.0 @dependabot (#62)
|
||||
- ⬆️ Bump docker/build-push-action from 2.4.0 to 2.5.0 @dependabot (#63)
|
||||
- ⬆️ Bump actions/cache from 2.1.5 to 2.1.6 @dependabot (#65)
|
||||
- ⬆️ Bump docker/setup-qemu-action from 1.1.0 to 1.2.0 @dependabot (#64)
|
||||
- ⬆️ Bump frenck/action-addon-information from 1.1 to 1.2 @dependabot (#66)
|
||||
- ⬆️ Upgrades add-on base image to v4.2.1 @frenck (#70)
|
||||
- ⬆️ Upgrades AirConnect to 0.2.50.5 @frenck (#71)
|
||||
245
airsonos/DOCS.md
Normal file
@@ -0,0 +1,245 @@
|
||||
# Home Assistant Community Add-on: AirSonos
|
||||
|
||||
Apple devices use AirPlay to send audio to other devices, but this is not
|
||||
compatible with Sonos players. This add-on tries to solve this
|
||||
compatibility gap.
|
||||
|
||||
It detects Sonos players in your network and creates virtual AirPlay
|
||||
devices for each of them. It acts as a bridge between the AirPlay client
|
||||
and the real Sonos device.
|
||||
|
||||
Since Sonos uses UPnP, the add-on might also work for other UPnP players
|
||||
(e.g., newer Samsung televisions).
|
||||
|
||||
## Installation
|
||||
|
||||
The installation of this add-on is pretty straightforward and not different in
|
||||
comparison to installing any other Home Assistant add-on.
|
||||
|
||||
1. Search for the “AirSonos” add-on in the Supervisor add-on store
|
||||
and install it.
|
||||
1. Start the "AirSonos" add-on
|
||||
1. Check the logs of the "AirSonos" add-on to see if everything went well.
|
||||
|
||||
After ~30 seconds you should see some log messages appear in the add-on log.
|
||||
Using your iOS/Mac/iTunes/Airfoil/other clients, you should now see new AirPlay
|
||||
devices and can try to play audio to them.
|
||||
|
||||
## Configuration
|
||||
|
||||
**Note**: _Remember to restart the add-on when the configuration is changed._
|
||||
|
||||
Example add-on configuration:
|
||||
|
||||
```yaml
|
||||
log_level: info
|
||||
address: 192.168.1.234
|
||||
port: 49152
|
||||
latency_rtp: 1000
|
||||
latency_http: 2000
|
||||
drift: true
|
||||
```
|
||||
|
||||
**Note**: _This is just an example, don't copy and past it! Create your own!_
|
||||
|
||||
### Option: `log_level`
|
||||
|
||||
The `log_level` option controls the level of log output by the addon and can
|
||||
be changed to be more or less verbose, which might be useful when you are
|
||||
dealing with an unknown issue. Possible values are:
|
||||
|
||||
- `trace`: Show every detail, like all called internal functions.
|
||||
- `debug`: Shows detailed debug information.
|
||||
- `info`: Normal (usually) interesting events.
|
||||
- `warning`: Exceptional occurrences that are not errors.
|
||||
- `error`: Runtime errors that do not require immediate action.
|
||||
- `fatal`: Something went terribly wrong. Add-on becomes unusable.
|
||||
|
||||
Please note that each level automatically includes log messages from a
|
||||
more severe level, e.g., `debug` also shows `info` messages. By default,
|
||||
the `log_level` is set to `info`, which is the recommended setting unless
|
||||
you are troubleshooting.
|
||||
|
||||
These log level also affects the log levels of AirSonos server.
|
||||
|
||||
### Option: `address`
|
||||
|
||||
This option allows you to specify the IP address the AirSonos server needs to
|
||||
bind to. It will automatically detect the interface to use when this option is
|
||||
left empty. Nevertheless, it might get detected wrong (e.g., in case you have
|
||||
multiple network interfaces).
|
||||
|
||||
### Option: `port`
|
||||
|
||||
The port the AirSonos server will expose itself on. The default `49152` should
|
||||
be fine in most cases. Only change this if you really have to.
|
||||
|
||||
### Option: `latency_rtp`
|
||||
|
||||
Allows you to tweak the buffering, which is needed when the audio is stuttering
|
||||
(e.g., low-quality network). This option specifies the number of ms the addon
|
||||
has to buffer the RTP audio (AirPlay). Setting this value below 500ms is not
|
||||
recommended!
|
||||
|
||||
### Option: `latency_http`
|
||||
|
||||
Allows you to tweak the buffering, which is needed when the audio is stuttering
|
||||
(e.g., low-quality network). This option specifies the number of ms the addon
|
||||
has to buffer the HTTP audio.
|
||||
|
||||
### Option: `drift`
|
||||
|
||||
Set to `true` to let timing reference drift (no click).
|
||||
|
||||
## Sonos hints and limitations
|
||||
|
||||
When a Sonos group is created, only the master of that group will appear as
|
||||
an AirPlay player and others will be removed if they were already detected.
|
||||
If the group is later split, then individual players will re-appear.
|
||||
Each detection cycle takes ~30 seconds.
|
||||
|
||||
Volume is set for the whole group, but the same level applies to all members.
|
||||
If you need to change individual volumes, you need to use a Sonos native
|
||||
controller. **Note**: these will be overridden if the group volume is later
|
||||
changed again from an AirPlay device.
|
||||
|
||||
## Latency options explained
|
||||
|
||||
These bridges receive real-time "synchronous" audio from the AirPlay controller
|
||||
in the format of RTP frames and forward it to the Sonos player in an HTTP
|
||||
"asynchronous" continuous audio binary format. In other words,
|
||||
the AirPlay clients "push" the audio using RTP and the Sonos players
|
||||
"pull" the audio using an HTTP GET request.
|
||||
|
||||
A player using HTTP to get its audio expects to receive an initial large
|
||||
portion of audio as the response to its GET and this creates a large enough
|
||||
buffer to handle most further network congestion/delays. The rest of the audio
|
||||
transmission is regulated by the player using TCP flow control. However, when
|
||||
the source is an AirPlay RTP device, there is no such significant portion of
|
||||
audio available in advance to be sent to the Player, as the audio comes to the
|
||||
bridge in real time. Every 8ms, an RTP frame is received and is immediately
|
||||
forwarded as the continuation of the HTTP body. If the Sonos player
|
||||
starts to play immediately the first received audio sample, expecting an initial
|
||||
burst to follow, then any network congestion delaying RTP audio will starve
|
||||
the player and create shuttering.
|
||||
|
||||
The `latency_http` option allows a certain amount of silence frames to be sent
|
||||
to the Sonos player, in a burst at the beginning. Then, while this
|
||||
"artificial" silence is being played, it is possible for the bridge to build
|
||||
a buffer of RTP frames that will then hide network delays that might happen
|
||||
in further RTP frames transmission. This delays the start of the playback
|
||||
by `latency_http` ms.
|
||||
|
||||
However, RTP frames are transmitted using UDP, which means there is no guarantee
|
||||
of delivery, so frames might be lost from time to time
|
||||
(often happens on WiFi networks). To allow detection of lost frames, they are
|
||||
numbered sequentially (1,2 ... n) so every time two received frames are not
|
||||
consecutive, the missing ones can be asked again by the AirPlay receiver.
|
||||
|
||||
Typically, the bridge forwards immediately every RTP frame using HTTP and again,
|
||||
in HTTP, the notion of frame numbers does not exist, it is just the continuous
|
||||
binary audio. So it is not possible to send audio non-sequentially when using
|
||||
HTTP.
|
||||
|
||||
For example, if received RTP frames are numbered 1,2,3,6, this bridge will
|
||||
forward (once decoded and transformed into raw audio) 1,2,3 immediately using
|
||||
HTTP but when it receives 6, it will re-ask for 4 and 5 to be resent and
|
||||
hold 6 while waiting (if 6 was transmitted immediately, the Sonos
|
||||
will play 1,2,3,6 ... not nice).
|
||||
|
||||
The `latency_rtp` option sets for how long frame 6 shall be held before adding
|
||||
two silence frames for 4 and 5 and send sending 4,5,6. Obviously, if this delay
|
||||
is larger than the buffer in the Sonos player, playback will stop by
|
||||
lack of audio. Note that `latency_rtp` does not delay playback start.
|
||||
|
||||
> **Note**: `latency_rtp` and `latency_http` could have been merged into a
|
||||
> single `latency` parameter which would have set the max RTP frames holding time
|
||||
> as well as the duration of the initial additional silence (delay),
|
||||
> however, all Sonos devices do properly their own buffering of HTTP audio
|
||||
> (i.e., they wait until they have received a certain amount of audio before
|
||||
> starting to play), then adding silence would have introduced an extra
|
||||
> unnecessary delay in playback.
|
||||
|
||||
## Tweaking AirSonos
|
||||
|
||||
AirSonos creates a configuration file called `airsonos.xml` in your Home
|
||||
Assistant configuration directory. This file allows you to tweak each device
|
||||
separately. Every time it finds a new device, it will be added to that file.
|
||||
|
||||
> **NOTE**: It is HIGHLY recommended to stop the addon before making changes
|
||||
> to the configuration file manually.
|
||||
|
||||
## Known issues and limitations
|
||||
|
||||
- This add-on does support ARM-based devices, nevertheless, they must
|
||||
at least be an ARMv7 device. (Raspberry Pi 1 and Zero is not supported).
|
||||
|
||||
## Changelog & Releases
|
||||
|
||||
This repository keeps a change log using [GitHub's releases][releases]
|
||||
functionality.
|
||||
|
||||
Releases are based on [Semantic Versioning][semver], and use the format
|
||||
of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
|
||||
based on the following:
|
||||
|
||||
- `MAJOR`: Incompatible or major changes.
|
||||
- `MINOR`: Backwards-compatible new features and enhancements.
|
||||
- `PATCH`: Backwards-compatible bugfixes and package updates.
|
||||
|
||||
## Support
|
||||
|
||||
Got questions?
|
||||
|
||||
You have several options to get them answered:
|
||||
|
||||
- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
|
||||
support and feature requests.
|
||||
- The [Home Assistant Discord chat server][discord-ha] for general Home
|
||||
Assistant discussions and questions.
|
||||
- The Home Assistant [Community Forum][forum].
|
||||
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
|
||||
|
||||
You could also [open an issue here][issue] GitHub.
|
||||
|
||||
## Authors & contributors
|
||||
|
||||
The original setup of this repository is by [Franck Nijhof][frenck].
|
||||
|
||||
For a full list of all authors and contributors,
|
||||
check [the contributor's page][contributors].
|
||||
|
||||
## License
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017-2021 Franck Nijhof
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
[commits]: https://github.com/hassio-addons/addon-airsonos/commits/main
|
||||
[contributors]: https://github.com/hassio-addons/addon-airsonos/graphs/contributors
|
||||
[discord-ha]: https://discord.gg/c5DvZ4e
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-airsonos/36796?u=frenck
|
||||
[frenck]: https://github.com/frenck
|
||||
[issue]: https://github.com/hassio-addons/addon-airsonos/issues
|
||||
[reddit]: https://reddit.com/r/homeassistant
|
||||
[releases]: https://github.com/hassio-addons/addon-airsonos/releases
|
||||
[semver]: http://semver.org/spec/v2.0.0.htm
|
||||
37
airsonos/README.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# Home Assistant Community Add-on: AirSonos
|
||||
|
||||
[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
|
||||
|
||||
[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
|
||||
|
||||
[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
|
||||
|
||||
[![Support Frenck on Patreon][patreon-shield]][patreon]
|
||||
|
||||
AirPlay capabilities for your Sonos (and UPnP) players.
|
||||
|
||||
## About
|
||||
|
||||
Apple devices use AirPlay to send audio to other devices, but this is not
|
||||
compatible with Sonos players. This add-on tries to solve this
|
||||
compatibility gap.
|
||||
|
||||
It detects Sonos players in your network and creates virtual AirPlay
|
||||
devices for each of them. It acts as a bridge between the AirPlay client
|
||||
and the real Sonos device.
|
||||
|
||||
Since Sonos uses UPnP, the add-on might also work for other UPnP players
|
||||
(e.g., newer Samsung televisions).
|
||||
|
||||
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
|
||||
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-airsonos/36796?u=frenck
|
||||
[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
|
||||
[github-sponsors]: https://github.com/sponsors/frenck
|
||||
[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
|
||||
[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
|
||||
[patreon]: https://www.patreon.com/frenck
|
||||
[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
|
||||
[release-shield]: https://img.shields.io/badge/version-v3.1.1-blue.svg
|
||||
[release]: https://github.com/hassio-addons/addon-airsonos/tree/v3.1.1
|
||||
35
airsonos/config.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "AirSonos",
|
||||
"version": "3.1.1",
|
||||
"slug": "airsonos",
|
||||
"description": "AirPlay capabilities for your Sonos (and UPnP) devices.",
|
||||
"url": "https://github.com/hassio-addons/addon-airsonos",
|
||||
"startup": "services",
|
||||
"init": false,
|
||||
"arch": [
|
||||
"aarch64",
|
||||
"amd64",
|
||||
"armv7",
|
||||
"i386"
|
||||
],
|
||||
"hassio_api": true,
|
||||
"host_network": true,
|
||||
"map": [
|
||||
"config:rw"
|
||||
],
|
||||
"options": {
|
||||
"port": 49152,
|
||||
"latency_rtp": 1000,
|
||||
"latency_http": 2000,
|
||||
"drift": false
|
||||
},
|
||||
"schema": {
|
||||
"log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
|
||||
"address": "str?",
|
||||
"port": "port",
|
||||
"latency_rtp": "int",
|
||||
"latency_http": "int",
|
||||
"drift": "bool"
|
||||
},
|
||||
"image": "ghcr.io/hassio-addons/airsonos/{arch}"
|
||||
}
|
||||
BIN
airsonos/icon.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
airsonos/logo.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
33
airsonos/translations/en.yaml
Normal file
@@ -0,0 +1,33 @@
|
||||
---
|
||||
configuration:
|
||||
log_level:
|
||||
name: Log level
|
||||
description: >-
|
||||
Controls the level of log details the add-on provides.
|
||||
port:
|
||||
name: Port
|
||||
description: >-
|
||||
The port to run on, the default of 49152 should be good for most cases.
|
||||
address:
|
||||
name: Address
|
||||
description: >-
|
||||
Allows you to specify the IP address the AirCast server needs to
|
||||
bind to.
|
||||
latency_rtp:
|
||||
name: RTP Latency
|
||||
description: >-
|
||||
Allows you to tweak the buffering, which is needed when the audio is
|
||||
stuttering (e.g., low-quality network). This option specifies the number
|
||||
of ms the add-on has to buffer the RTP audio (AirPlay). Setting this value
|
||||
below 500ms is not recommended! Setting the value to 0 makes the add-on
|
||||
to get the value from AirPlay.
|
||||
latency_http:
|
||||
name: HTTP Latency
|
||||
description: >-
|
||||
Allows you to tweak the buffering, which is needed when the audio is
|
||||
stuttering (e.g., low-quality network). This option specifies the number
|
||||
of ms the add-on has to buffer the HTTP audio.
|
||||
drift:
|
||||
name: Drift
|
||||
description: >-
|
||||
Allow to let timing reference drift (no click).
|
||||
11
appdaemon/CHANGELOG.md
Normal file
@@ -0,0 +1,11 @@
|
||||
## What’s changed
|
||||
|
||||
## ⬆️ Dependency updates
|
||||
|
||||
- ⬆️ Bump frenck/action-addon-information from 1.0.0 to 1.1 @dependabot (#122)
|
||||
- ⬆️ Bump micnncim/action-label-syncer from 1.2.0 to 1.3.0 @dependabot (#123)
|
||||
- ⬆️ Bump docker/setup-qemu-action from 1.1.0 to 1.2.0 @dependabot (#125)
|
||||
- ⬆️ Bump actions/cache from 2.1.5 to 2.1.6 @dependabot (#126)
|
||||
- ⬆️ Bump docker/build-push-action from 2.4.0 to 2.5.0 @dependabot (#124)
|
||||
- ⬆️ Bump frenck/action-addon-information from 1.1 to 1.2.2 @dependabot (#128)
|
||||
- ⬆️ Upgrades add-on base image to v9.2.2 @frenck (#130)
|
||||
221
appdaemon/DOCS.md
Normal file
@@ -0,0 +1,221 @@
|
||||
# Home Assistant Community Add-on: AppDaemon 4
|
||||
|
||||
AppDaemon is a loosely coupled, multithreaded, sandboxed python execution
|
||||
environment for writing automation apps for Home Assistant home automation
|
||||
software. It also provides a configurable dashboard (HADashboard) suitable
|
||||
for wall mounted tablets.
|
||||
|
||||
## Installation
|
||||
|
||||
The installation of this add-on is pretty straightforward and not different in
|
||||
comparison to installing any other Home Assistant add-on.
|
||||
|
||||
1. Search for the "AppDaemon 4" add-on in the Supervisor add-on store and
|
||||
install it.
|
||||
1. Start the "AppDaemon 4" add-on
|
||||
1. Check the logs of the "AppDaemon 4" add-on to see if everything went well.
|
||||
|
||||
:information_source: Please note, the add-on is pre-configured to connect with
|
||||
Home Assistant. There is no need to create access tokens or to set your
|
||||
Home Assistant URL in the AppDaemon configuration.
|
||||
|
||||
This automatic handling of the URL and token conflicts with the AppDaemon
|
||||
official documentation. The official documentation will state `ha_url` and
|
||||
`token` options are required. For the add-on, however, this isn't needed.
|
||||
|
||||
## Configuration
|
||||
|
||||
**Note**: _Remember to restart the add-on when the configuration is changed._
|
||||
|
||||
Example add-on configuration:
|
||||
|
||||
```yaml
|
||||
log_level: info
|
||||
system_packages:
|
||||
- ffmpeg
|
||||
python_packages:
|
||||
- PyMySQL
|
||||
- Pillow
|
||||
```
|
||||
|
||||
**Note**: _This is just an example, don't copy and past it! Create your own!_
|
||||
|
||||
### Option: `log_level`
|
||||
|
||||
The `log_level` option controls the level of log output by the addon and can
|
||||
be changed to be more or less verbose, which might be useful when you are
|
||||
dealing with an unknown issue. Possible values are:
|
||||
|
||||
- `trace`: Show every detail, like all called internal functions.
|
||||
- `debug`: Shows detailed debug information.
|
||||
- `info`: Normal (usually) interesting events.
|
||||
- `warning`: Exceptional occurrences that are not errors.
|
||||
- `error`: Runtime errors that do not require immediate action.
|
||||
- `fatal`: Something went terribly wrong. Add-on becomes unusable.
|
||||
|
||||
Please note that each level automatically includes log messages from a
|
||||
more severe level, e.g., `debug` also shows `info` messages. By default,
|
||||
the `log_level` is set to `info`, which is the recommended setting unless
|
||||
you are troubleshooting.
|
||||
|
||||
These log level also affects the log levels of the AppDaemon.
|
||||
|
||||
### Option: `system_packages`
|
||||
|
||||
Allows you to specify additional [Alpine packages][alpine-packages] to be
|
||||
installed to your AppDaemon setup (e.g., `g++`. `make`, `ffmpeg`).
|
||||
|
||||
**Note**: _Adding many packages will result in a longer start-up time
|
||||
for the add-on._
|
||||
|
||||
### Option: `python_packages`
|
||||
|
||||
Allows you to specify additional [Python packages][python-packages] to be
|
||||
installed to your AppDaemon setup (e.g., `PyMySQL`. `Requests`, `Pillow`).
|
||||
|
||||
**Note**: _Adding many packages will result in a longer start-up time
|
||||
for the add-on._
|
||||
|
||||
#### Option: `init_commands`
|
||||
|
||||
Customize your environment even more with the `init_commands` option.
|
||||
Add one or more shell commands to the list, and they will be executed every
|
||||
single time this add-on starts.
|
||||
|
||||
## AppDaemon and HADashboard configuration
|
||||
|
||||
This add-on does not configure the AppDaemon or HADashboard for you.
|
||||
It does, however, create some sample files to get you started on the first run.
|
||||
|
||||
The configuration of the AppDaemon can be found in the `/config/appdaemon`
|
||||
directory.
|
||||
|
||||
For more information about configuring AppDaemon, please refer to the
|
||||
extensive documentation they offer:
|
||||
|
||||
<http://appdaemon.readthedocs.io/en/latest/>
|
||||
|
||||
## Home Assistant access tokens and ha_url settings
|
||||
|
||||
By default, this add-on ships without a `token` and without the `ha_url`
|
||||
in the `appdaemon.yaml` config file. **This is not an error!**
|
||||
|
||||
The add-on takes care of these settings for you and you do not need to provide
|
||||
or set these in the AppDaemon configuration.
|
||||
|
||||
This automatic handling of the URL and token conflicts with the AppDaemon
|
||||
official documentation. The official documentation will state `ha_url` and
|
||||
`token` options are required. For the add-on, these aren't needed.
|
||||
|
||||
However, you are free to set them if you want to override, however, in
|
||||
general usage, that should not be needed and is not recommended for this add-on.
|
||||
|
||||
## Upgrading from AppDaemon 3.x
|
||||
|
||||
If you have previously ran AppDaemon 3.x (e.g., via an add-on), these steps
|
||||
will help you getting upgraded to AppDaemon 4.x.
|
||||
|
||||
- After installing this add-on, stop the current running AppDaemon 3.x add-on.
|
||||
- Open your `/config/appdaemon/appdaemon.yaml` file in an editor.
|
||||
- Remove the `log`.
|
||||
- Remove`threads`, `api_port`, `app_dir`, `ha_url` and `token`.
|
||||
- Add the following to the `appdaemon` section: `latitude`, `longitude`,
|
||||
`elevation` and `time_zone`.
|
||||
- Add a `http` section with `url: http://127.0.0.1:5050` in it.
|
||||
- At the end of the file add `admin:` and `api:`.
|
||||
- Remove everthing under `hadashboard:`, leaving just that.
|
||||
|
||||
The result should look something like this:
|
||||
|
||||
```yaml
|
||||
---
|
||||
secrets: /config/secrets.yaml
|
||||
appdaemon:
|
||||
latitude: 52.379189
|
||||
longitude: 4.899431
|
||||
elevation: 2
|
||||
time_zone: Europe/Amsterdam
|
||||
plugins:
|
||||
HASS:
|
||||
type: hass
|
||||
http:
|
||||
url: http://127.0.0.1:5050
|
||||
hadashboard:
|
||||
admin:
|
||||
api:
|
||||
```
|
||||
|
||||
Be sure to check the "Upgrading from 3.x" on the AppDaemon website:
|
||||
|
||||
<https://appdaemon.readthedocs.io/en/latest/UPGRADE_FROM_3.x.html>
|
||||
|
||||
## Changelog & Releases
|
||||
|
||||
This repository keeps a change log using [GitHub's releases][releases]
|
||||
functionality.
|
||||
|
||||
Releases are based on [Semantic Versioning][semver], and use the format
|
||||
of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
|
||||
based on the following:
|
||||
|
||||
- `MAJOR`: Incompatible or major changes.
|
||||
- `MINOR`: Backwards-compatible new features and enhancements.
|
||||
- `PATCH`: Backwards-compatible bugfixes and package updates.
|
||||
|
||||
## Support
|
||||
|
||||
Got questions?
|
||||
|
||||
You have several options to get them answered:
|
||||
|
||||
- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
|
||||
support and feature requests.
|
||||
- The [Home Assistant Discord chat server][discord-ha] for general Home
|
||||
Assistant discussions and questions.
|
||||
- The Home Assistant [Community Forum][forum].
|
||||
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
|
||||
|
||||
You could also [open an issue here][issue] GitHub.
|
||||
|
||||
## Authors & contributors
|
||||
|
||||
The original setup of this repository is by [Franck Nijhof][frenck].
|
||||
|
||||
For a full list of all authors and contributors,
|
||||
check [the contributor's page][contributors].
|
||||
|
||||
## License
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 Franck Nijhof
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
[alpine-packages]: https://pkgs.alpinelinux.org/packages
|
||||
[contributors]: https://github.com/hassio-addons/addon-appdaemon/graphs/contributors
|
||||
[discord-ha]: https://discord.gg/c5DvZ4e
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-appdaemon-4/163259?u=frenck
|
||||
[frenck]: https://github.com/frenck
|
||||
[issue]: https://github.com/hassio-addons/addon-appdaemon/issues
|
||||
[python-packages]: https://pypi.org/
|
||||
[reddit]: https://reddit.com/r/homeassistant
|
||||
[releases]: https://github.com/hassio-addons/addon-appdaemon/releases
|
||||
[semver]: http://semver.org/spec/v2.0.0.htm
|
||||
34
appdaemon/README.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# Home Assistant Community Add-on: AppDaemon 4
|
||||
|
||||
[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
|
||||
|
||||
[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
|
||||
|
||||
[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
|
||||
|
||||
[![Support Frenck on Patreon][patreon-shield]][patreon]
|
||||
|
||||
Python Apps and HADashboard for Home Assistant
|
||||
|
||||
## About
|
||||
|
||||
AppDaemon is a loosely coupled, multithreaded, sandboxed python execution
|
||||
environment for writing automation apps for Home Assistant home automation
|
||||
software. It also provides a configurable dashboard (HADashboard) suitable
|
||||
for wall mounted tablets.
|
||||
|
||||
![HADashboard screenshot][screenshot]
|
||||
|
||||
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
|
||||
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-appdaemon-4/163259?u=frenck
|
||||
[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
|
||||
[github-sponsors]: https://github.com/sponsors/frenck
|
||||
[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
|
||||
[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
|
||||
[patreon]: https://www.patreon.com/frenck
|
||||
[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg
|
||||
[release-shield]: https://img.shields.io/badge/version-v0.6.2-blue.svg
|
||||
[release]: https://github.com/hassio-addons/addon-appdaemon/tree/v0.6.2
|
||||
[screenshot]: https://github.com/hassio-addons/addon-appdaemon/raw/main/images/screenshot.png
|
||||
47
appdaemon/config.json
Normal file
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"name": "AppDaemon 4",
|
||||
"version": "0.6.2",
|
||||
"slug": "appdaemon",
|
||||
"description": "Python Apps and Dashboard using AppDaemon 4.x for Home Assistant",
|
||||
"url": "https://github.com/hassio-addons/addon-appdaemon",
|
||||
"webui": "http://[HOST]:[PORT:5050]",
|
||||
"arch": [
|
||||
"aarch64",
|
||||
"amd64",
|
||||
"armhf",
|
||||
"armv7",
|
||||
"i386"
|
||||
],
|
||||
"init": false,
|
||||
"homeassistant_api": true,
|
||||
"uart": true,
|
||||
"ports": {
|
||||
"5050/tcp": 5050
|
||||
},
|
||||
"ports_description": {
|
||||
"5050/tcp": "AppDaemon"
|
||||
},
|
||||
"map": [
|
||||
"config:rw",
|
||||
"share:rw",
|
||||
"ssl"
|
||||
],
|
||||
"options": {
|
||||
"system_packages": [],
|
||||
"python_packages": [],
|
||||
"init_commands": []
|
||||
},
|
||||
"schema": {
|
||||
"log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
|
||||
"system_packages": [
|
||||
"str"
|
||||
],
|
||||
"python_packages": [
|
||||
"str"
|
||||
],
|
||||
"init_commands": [
|
||||
"str"
|
||||
]
|
||||
},
|
||||
"image": "ghcr.io/hassio-addons/appdaemon/{arch}"
|
||||
}
|
||||
BIN
appdaemon/icon.png
Normal file
|
After Width: | Height: | Size: 562 B |
BIN
appdaemon/logo.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
15
appdaemon/translations/de.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
configuration:
|
||||
init_commands:
|
||||
description: 'Allows you to specificy a list of custom shell commands that are ran before AppDaemon starts.'
|
||||
name: 'Init commands'
|
||||
log_level:
|
||||
description: 'Controls the level of log details the add-on provides.'
|
||||
name: 'Log level'
|
||||
python_packages:
|
||||
description: 'Allows you to specificy a list of additional Python packages to be installed before AppDaemon starts.'
|
||||
name: 'Python packages'
|
||||
system_packages:
|
||||
description: 'Allows you to specificy a list of additional Alpine Linux packages to be installed before AppDaemon starts.'
|
||||
name: 'System packages'
|
||||
network:
|
||||
5050/tcp: 'The AppDaemon webserver'
|
||||
23
appdaemon/translations/en.yaml
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
configuration:
|
||||
log_level:
|
||||
name: Log level
|
||||
description: >-
|
||||
Controls the level of log details the add-on provides.
|
||||
system_packages:
|
||||
name: System packages
|
||||
description: >-
|
||||
Allows you to specificy a list of additional Alpine Linux packages to be
|
||||
installed before AppDaemon starts.
|
||||
python_packages:
|
||||
name: Python packages
|
||||
description: >-
|
||||
Allows you to specificy a list of additional Python packages to be
|
||||
installed before AppDaemon starts.
|
||||
init_commands:
|
||||
name: Init commands
|
||||
description: >-
|
||||
Allows you to specificy a list of custom shell commands that are ran
|
||||
before AppDaemon starts.
|
||||
network:
|
||||
5050/tcp: The AppDaemon webserver
|
||||
15
appdaemon/translations/nl.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
configuration:
|
||||
init_commands:
|
||||
description: 'Allows you to specificy a list of custom shell commands that are ran before AppDaemon starts.'
|
||||
name: 'Init commands'
|
||||
log_level:
|
||||
description: 'Bepaalt het niveau van de logs die de add-on toont.'
|
||||
name: 'Log niveau'
|
||||
python_packages:
|
||||
description: 'Allows you to specificy a list of additional Python packages to be installed before AppDaemon starts.'
|
||||
name: 'Python packages'
|
||||
system_packages:
|
||||
description: 'Allows you to specificy a list of additional Alpine Linux packages to be installed before AppDaemon starts.'
|
||||
name: 'System packages'
|
||||
network:
|
||||
5050/tcp: 'De AppDaemon webserver'
|
||||
3
asterisk/CHANGELOG.md
Normal file
@@ -0,0 +1,3 @@
|
||||
## 1.0.0 - 2021-05-09
|
||||
|
||||
* ➕ Add Asterisk server `0.20.21`
|
||||
19
asterisk/DOCS.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# Configuration
|
||||
|
||||
```yaml
|
||||
config_files:
|
||||
- /config/asterisk/sip.conf
|
||||
```
|
||||
|
||||
### `config_files`
|
||||
|
||||
A list of paths to your configuration files of asterisk.
|
||||
Every listed file will overwrite the template config file at `/etc/asterisk` on each addon start.
|
||||
The config files can be located on `/config` or`/share`.
|
||||
|
||||
For the sample files take a look at the [official asterisk repository](https://github.com/asterisk/asterisk/blob/master/configs/samples).
|
||||
|
||||
## Testing
|
||||
|
||||
As default there is a test sip phone setup. With user `1001` and password `1234` the number `100` can be called.
|
||||
A sound should confirm the working state.
|
||||
10
asterisk/Dockerfile
Normal file
@@ -0,0 +1,10 @@
|
||||
ARG BUILD_FROM
|
||||
FROM $BUILD_FROM
|
||||
|
||||
RUN apk add --no-cache \
|
||||
asterisk=18.2.1-r1 \
|
||||
asterisk-sample-config=18.2.1-r1
|
||||
|
||||
ENTRYPOINT [ "/init" ]
|
||||
CMD []
|
||||
COPY root /
|
||||
26
asterisk/README.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# Asterisk
|
||||
|
||||
[Asterisk](https://www.asterisk.org/) is an open source framework for building communications applications. Asterisk turns an ordinary computer into a communications server.
|
||||
|
||||
![Addon Stage][stage-badge]
|
||||
![Supports aarch64 Architecture][aarch64-badge]
|
||||
![Supports amd64 Architecture][amd64-badge]
|
||||
![Supports armhf Architecture][armhf-badge]
|
||||
![Supports armv7 Architecture][armv7-badge]
|
||||
![Supports i386 Architecture][i386-badge]
|
||||
|
||||
[![Install on my Home Assistant][install-badge]][install-url]
|
||||
[![Donate][donation-badge]][donation-url]
|
||||
|
||||
|
||||
[aarch64-badge]: https://img.shields.io/badge/aarch64-yes-green.svg?style=for-the-badge
|
||||
[amd64-badge]: https://img.shields.io/badge/amd64-yes-green.svg?style=for-the-badge
|
||||
[armhf-badge]: https://img.shields.io/badge/armhf-yes-green.svg?style=for-the-badge
|
||||
[armv7-badge]: https://img.shields.io/badge/armv7-yes-green.svg?style=for-the-badge
|
||||
[i386-badge]: https://img.shields.io/badge/i386-yes-green.svg?style=for-the-badge
|
||||
[install-url]: https://my.home-assistant.io/redirect/supervisor_addon?addon=243ffc37_asterisk
|
||||
[stage-badge]: https://img.shields.io/badge/Addon%20stage-stable-green.svg?style=for-the-badge
|
||||
|
||||
[install-badge]: https://img.shields.io/badge/Install%20on%20my-Home%20Assistant-41BDF5?logo=home-assistant&style=for-the-badge
|
||||
[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=for-the-badge&logoColor=white
|
||||
[donation-url]: https://www.buymeacoffee.com/Poeschl
|
||||
9
asterisk/build.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"build_from": {
|
||||
"armhf": "ghcr.io/home-assistant/armhf-base:3.13",
|
||||
"armv7": "ghcr.io/home-assistant/armv7-base:3.13",
|
||||
"aarch64": "ghcr.io/home-assistant/aarch64-base:3.13",
|
||||
"amd64": "ghcr.io/home-assistant/amd64-base:3.13",
|
||||
"i386": "ghcr.io/home-assistant/i386-base:3.13"
|
||||
}
|
||||
}
|
||||
36
asterisk/config.json
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"name": "Asterisk",
|
||||
"version": "1.0.0",
|
||||
"slug": "asterisk",
|
||||
"description": "Asterisk is an open source framework for building communications applications. Asterisk turns an ordinary computer into a communications server",
|
||||
"url": "https://github.com/Poeschl/Hassio-Addons/tree/master/asterisk",
|
||||
"arch": [
|
||||
"armv7",
|
||||
"armhf",
|
||||
"aarch64",
|
||||
"amd64",
|
||||
"i386"
|
||||
],
|
||||
"startup": "application",
|
||||
"boot": "auto",
|
||||
"image": "ghcr.io/poeschl/ha-asterisk-{arch}",
|
||||
"map": ["share","config"],
|
||||
"ports": {
|
||||
"5060/tcp": 5060,
|
||||
"5060/udp": 5060,
|
||||
"4569/udp": 4569,
|
||||
"2727/udp": 2727
|
||||
},
|
||||
"ports_description": {
|
||||
"5060/tcp": "Port for SIP",
|
||||
"5060/udp": "Port for SIP",
|
||||
"4569/udp": "Port for IAX2",
|
||||
"2727/udp": "Port for MGCP"
|
||||
},
|
||||
"options": {
|
||||
"config_files": []
|
||||
},
|
||||
"schema": {
|
||||
"config_files": ["match(/(share|config)/.+)"]
|
||||
}
|
||||
}
|
||||
BIN
asterisk/icon.png
Executable file
|
After Width: | Height: | Size: 13 KiB |
BIN
asterisk/logo.png
Executable file
|
After Width: | Height: | Size: 40 KiB |
13
asterisk/root/etc/asterisk/asterisk.conf
Normal file
@@ -0,0 +1,13 @@
|
||||
[directories]
|
||||
astcachedir => /var/cache/asterisk
|
||||
astetcdir => /etc/asterisk
|
||||
astmoddir => /usr/lib/asterisk/modules
|
||||
astvarlibdir => /var/lib/asterisk
|
||||
astdbdir => /var/lib/asterisk
|
||||
astkeydir => /var/lib/asterisk
|
||||
astdatadir => /var/lib/asterisk
|
||||
astagidir => /var/lib/asterisk/agi-bin
|
||||
astspooldir => /var/spool/asterisk
|
||||
astrundir => /var/run/asterisk
|
||||
astlogdir => /var/log/asterisk
|
||||
astsbindir => /usr/sbin
|
||||
5
asterisk/root/etc/asterisk/extensions.conf
Normal file
@@ -0,0 +1,5 @@
|
||||
[internal]
|
||||
exten = 100,1,Answer()
|
||||
same = n,Wait(1)
|
||||
same = n,Playback(test)
|
||||
same = n,Hangup()
|
||||
56
asterisk/root/etc/asterisk/modules.conf
Normal file
@@ -0,0 +1,56 @@
|
||||
;
|
||||
; Asterisk configuration file
|
||||
;
|
||||
; Module Loader configuration file
|
||||
;
|
||||
|
||||
[modules]
|
||||
autoload=yes
|
||||
;
|
||||
; Any modules that need to be loaded before the Asterisk core has been
|
||||
; initialized (just after the logger initialization) can be loaded
|
||||
; using 'preload'. 'preload' forces a module and the modules it
|
||||
; is known to depend upon to be loaded earlier than they normally get
|
||||
; loaded.
|
||||
;
|
||||
; NOTE: There is no good reason left to use 'preload' anymore. It was
|
||||
; historically required to preload realtime driver modules so you could
|
||||
; map Asterisk core configuration files to Realtime storage.
|
||||
; This is no longer needed.
|
||||
;
|
||||
;preload = your_special_module.so
|
||||
;
|
||||
; If you want Asterisk to fail if a module does not load, then use
|
||||
; the "require" keyword. Asterisk will exit with a status code of 2
|
||||
; if a required module does not load.
|
||||
;
|
||||
;require = chan_pjsip.so
|
||||
;
|
||||
; If you want you can combine with preload
|
||||
; preload-require = your_special_module.so
|
||||
;
|
||||
;load = res_musiconhold.so
|
||||
;
|
||||
; Load one of: chan_oss, alsa, or console (portaudio).
|
||||
; By default, load chan_oss only (automatically).
|
||||
;
|
||||
noload = chan_alsa.so
|
||||
noload = chan_console.so
|
||||
;noload = chan_oss.so
|
||||
;
|
||||
; Do not load res_hep and kin unless you are using HEP monitoring
|
||||
; <http://sipcapture.org> in your network.
|
||||
;
|
||||
noload = res_hep.so
|
||||
noload = res_hep_pjsip.so
|
||||
noload = res_hep_rtcp.so
|
||||
;
|
||||
; Do not load chan_sip by default, it may conflict with res_pjsip.
|
||||
noload = chan_sip.so
|
||||
;
|
||||
; Load one of the voicemail modules as they are mutually exclusive.
|
||||
; By default, load app_voicemail only (automatically).
|
||||
;
|
||||
;noload = app_voicemail.so
|
||||
noload = app_voicemail_imap.so
|
||||
noload = app_voicemail_odbc.so
|
||||
22
asterisk/root/etc/asterisk/pjsip.conf
Normal file
@@ -0,0 +1,22 @@
|
||||
[general]
|
||||
type=transport
|
||||
protocol=udp
|
||||
bind=0.0.0.0
|
||||
|
||||
[1001]
|
||||
type = endpoint
|
||||
context = internal
|
||||
disallow=all
|
||||
allow=ulaw
|
||||
aors = 1001
|
||||
auth = auth1001
|
||||
|
||||
[1001]
|
||||
type = aor
|
||||
max_contacts = 1
|
||||
|
||||
[auth1001]
|
||||
type=auth
|
||||
auth_type=userpass
|
||||
password=1234
|
||||
username=1001
|
||||
13
asterisk/root/etc/cont-init.d/setup-config-files.sh
Normal file
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# shellcheck shell=bash
|
||||
set -e
|
||||
|
||||
CONFIG_FILES=$(bashio::config 'config_files')
|
||||
|
||||
for config in $CONFIG_FILES; do
|
||||
bashio::log.info "Apply '$config'"
|
||||
cp "$config" '/etc/asterisk/'
|
||||
done
|
||||
|
||||
chown -R asterisk:asterisk /etc/asterisk
|
||||
chmod 640 -R /etc/asterisk
|
||||
1
asterisk/root/etc/fix-attrs.d/sample-sound
Normal file
@@ -0,0 +1 @@
|
||||
/var/lib/asterisk/sounds/test.wav false asterisk:asterisk 0640 0640
|
||||
8
asterisk/root/etc/services.d/asterisk/run
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
set -e
|
||||
|
||||
# Enable Jemalloc for better memory handling
|
||||
export LD_PRELOAD="/usr/local/lib/libjemalloc.so.2"
|
||||
|
||||
bashio::log.info 'Start Asterisk'
|
||||
asterisk -T -W -p -f -dd
|
||||
33
build-site.sh
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env bash
|
||||
# ==============================================================================
|
||||
# Community Hass.io Add-ons for Home Assistant
|
||||
# This script builds a small little website
|
||||
# ==============================================================================
|
||||
set -o errexit # Exit script when a command exits with non-zero status
|
||||
set -o errtrace # Exit on error inside any functions or sub-shells
|
||||
set -o nounset # Exit script on use of an undefined variable
|
||||
set -o pipefail # Return exit status of the last command in the pipe that failed
|
||||
|
||||
# Switch to the root of the repository.
|
||||
cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")"
|
||||
|
||||
# Create a documentation folder
|
||||
mkdir -p docs
|
||||
|
||||
# Install requirements
|
||||
pip install -r requirements.txt
|
||||
|
||||
# Download Beta page
|
||||
curl https://raw.githubusercontent.com/hassio-addons/repository-beta/master/README.md --output docs/beta.md
|
||||
|
||||
# Download Edge page
|
||||
curl https://raw.githubusercontent.com/hassio-addons/repository-edge/master/README.md --output docs/edge.md
|
||||
|
||||
# Get the pages into the docs folder
|
||||
ln -sf ../README.md docs/index.md
|
||||
ln -sf ../LICENSE.md docs/license.md
|
||||
ln -sf ../.github/CONTRIBUTING.md docs/contributing.md
|
||||
ln -sf ../.github/CODE_OF_CONDUCT.md docs/code-of-conduct.md
|
||||
|
||||
# Build!
|
||||
mkdocs build
|
||||
15
chrony/CHANGELOG.md
Normal file
@@ -0,0 +1,15 @@
|
||||
## What’s changed
|
||||
|
||||
## ⬆️ Dependency updates
|
||||
|
||||
- Bump brpaz/hadolint-action from v1.4.0 to v1.5.0 @dependabot (#61)
|
||||
- Bump frenck/action-addon-linter from 2 to 2.1 @dependabot (#62)
|
||||
- Bump actions/stale from 3.0.18 to 3.0.19 @dependabot (#63)
|
||||
- Bump frenck/action-addon-information from 1.0.0 to 1.1 @dependabot (#64)
|
||||
- Bump micnncim/action-label-syncer from 1.2.0 to 1.3.0 @dependabot (#65)
|
||||
- Bump docker/build-push-action from 2.4.0 to 2.5.0 @dependabot (#67)
|
||||
- Bump docker/setup-qemu-action from 1.1.0 to 1.2.0 @dependabot (#66)
|
||||
- Bump actions/cache from 2.1.5 to 2.1.6 @dependabot (#68)
|
||||
- Bump frenck/action-addon-information from 1.1 to 1.2.2 @dependabot (#70)
|
||||
- ⬆️ Upgrades add-on base image to v9.2.2 @frenck (#72)
|
||||
- ⬆ Update base image to v10.0.0 and chrony to v4.1-r0 @sinclairpaul (#73)
|
||||
144
chrony/DOCS.md
Normal file
@@ -0,0 +1,144 @@
|
||||
# Home Assistant Community Add-on: chrony
|
||||
|
||||
An NTP server accessible by all hosts on the local network, useful for setting
|
||||
time on devices with controlled internet access (such as cameras).
|
||||
The addon can also be used to set the system clock.
|
||||
|
||||
## Installation
|
||||
|
||||
The installation of this add-on is pretty straightforward and not different in
|
||||
comparison to installing any other Home Assistant add-on.
|
||||
|
||||
1. Search for the "chrony" add-on in the add-on store and install it.
|
||||
1. Start the "chrony" add-on
|
||||
1. Check the logs of the "chrony" add-on to see if everything went well.
|
||||
|
||||
## Configuration
|
||||
|
||||
**Note**: _Remember to restart the add-on when the configuration is changed._
|
||||
|
||||
Example add-on configuration:
|
||||
|
||||
```yaml
|
||||
set_system_clock: true
|
||||
mode: pool
|
||||
ntp_pool: pool.ntp.org
|
||||
ntp_server:
|
||||
- 54.39.13.155
|
||||
- briareus.schulte.org
|
||||
```
|
||||
|
||||
**Note**: _This is just an example, don't copy and paste it! Create your own!_
|
||||
|
||||
### Option: `log_level`
|
||||
|
||||
The `log_level` option controls the level of log output by the addon and can
|
||||
be changed to be more or less verbose, which might be useful when you are
|
||||
dealing with an unknown issue. Possible values are:
|
||||
|
||||
- `trace`: Show every detail, like all called internal functions.
|
||||
- `debug`: Shows detailed debug information.
|
||||
- `info`: Normal (usually) interesting events.
|
||||
- `warning`: Exceptional occurrences that are not errors.
|
||||
- `error`: Runtime errors that do not require immediate action.
|
||||
- `fatal`: Something went terribly wrong. Add-on becomes unusable.
|
||||
|
||||
Please note that each level automatically includes log messages from a
|
||||
more severe level, e.g., `debug` also shows `info` messages. By default,
|
||||
the `log_level` is set to `info`, which is the recommended setting unless
|
||||
you are troubleshooting.
|
||||
|
||||
### Option: `set_system_clock`
|
||||
|
||||
The `set_system_clock` option configures chrony to set the local system clock.
|
||||
For some systems it may be preferable to use a different mechanism for
|
||||
setting the system time.
|
||||
|
||||
### Option: `mode`
|
||||
|
||||
The `mode` option configures chrony to use either `pool` or `server` mode.
|
||||
These options are:
|
||||
|
||||
- `pool`: References a pool of servers such as pool.ntp.org (Recommended).
|
||||
- `server`: References a list of specific names or addresses.
|
||||
|
||||
Based on the mode the `ntp_pool` or `ntp_server` option will be used.
|
||||
|
||||
### Option: `ntp_pool`
|
||||
|
||||
Used by pool mode and configures the pool name to be used, should be a DNS
|
||||
record with multiple entries. The application will select which to reference.
|
||||
|
||||
### Option: `ntp_server`
|
||||
|
||||
Used by server mode, an array of server names or IP Addresses used as the
|
||||
time source. The application will select which to reference.
|
||||
|
||||
## Changelog & Releases
|
||||
|
||||
This repository keeps a change log using [GitHub's releases][releases]
|
||||
functionality.
|
||||
|
||||
Releases are based on [Semantic Versioning][semver], and use the format
|
||||
of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
|
||||
based on the following:
|
||||
|
||||
- `MAJOR`: Incompatible or major changes.
|
||||
- `MINOR`: Backwards-compatible new features and enhancements.
|
||||
- `PATCH`: Backwards-compatible bugfixes and package updates.
|
||||
|
||||
## Support
|
||||
|
||||
Got questions?
|
||||
|
||||
You have several options to get them answered:
|
||||
|
||||
- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
|
||||
support and feature requests.
|
||||
- The [Home Assistant Discord chat server][discord-ha] for general Home
|
||||
Assistant discussions and questions.
|
||||
- The Home Assistant [Community Forum][forum].
|
||||
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
|
||||
|
||||
You could also [open an issue here][issue] GitHub.
|
||||
|
||||
## Authors & contributors
|
||||
|
||||
The original setup of this repository is by [Paul Sinclair][sinclairpaul].
|
||||
|
||||
For a full list of all authors and contributors,
|
||||
check [the contributor's page][contributors].
|
||||
|
||||
## License
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2019-2021 Paul Sinclair
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
[contributors]: https://github.com/hassio-addons/addon-chrony/graphs/contributors
|
||||
[discord-ha]: https://discord.gg/c5DvZ4e
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[forum]: https://community.home-assistant.io/t/community-hass-io-xxxxx/xxxxx
|
||||
[sinclairpaul]: https://github.com/sinclairpaul
|
||||
[issue]: https://github.com/hassio-addons/addon-chrony/issues
|
||||
[reddit]: https://reddit.com/r/homeassistant
|
||||
[releases]: https://github.com/hassio-addons/addon-chrony/releases
|
||||
[semver]: http://semver.org/spec/v2.0.0.htm
|
||||
25
chrony/README.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Home Assistant Community Add-on: chrony
|
||||
|
||||
[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
|
||||
|
||||
[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
|
||||
|
||||
[![Buy me a coffee][buymeacoffee-shield]][buymeacoffee]
|
||||
|
||||
chrony NTP Server.
|
||||
|
||||
## About
|
||||
|
||||
An NTP server accesible by all hosts on the local network, useful for setting
|
||||
time on devices with controlled internet access (such as cameras).
|
||||
|
||||
[buymeacoffee-shield]: https://www.buymeacoffee.com/assets/img/guidelines/download-assets-sm-2.svg
|
||||
[buymeacoffee]: https://www.buymeacoffee.com/sinclairpaul
|
||||
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
|
||||
[forum]: https://community.home-assistant.io/?u=frenck
|
||||
[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
|
||||
[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
|
||||
[release-shield]: https://img.shields.io/badge/version-v2.2.0-blue.svg
|
||||
[release]: https://github.com/hassio-addons/addon-chrony/tree/v2.2.0
|
||||
45
chrony/config.json
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"name": "chrony",
|
||||
"version": "2.2.0",
|
||||
"slug": "chrony",
|
||||
"description": "A local NTP (Network Time Protocol) server for cameras etc.",
|
||||
"url": "https://github.com/hassio-addons/addon-chrony",
|
||||
"startup": "system",
|
||||
"arch": [
|
||||
"aarch64",
|
||||
"amd64",
|
||||
"armhf",
|
||||
"armv7",
|
||||
"i386"
|
||||
],
|
||||
"hassio_api": true,
|
||||
"init": false,
|
||||
"privileged": [
|
||||
"SYS_TIME"
|
||||
],
|
||||
"ports": {
|
||||
"123/udp": 123
|
||||
},
|
||||
"ports_description": {
|
||||
"123/udp": "NTP; Network Time Protocol"
|
||||
},
|
||||
"options": {
|
||||
"set_system_clock": true,
|
||||
"mode": "pool",
|
||||
"ntp_pool": "pool.ntp.org",
|
||||
"ntp_server": [
|
||||
"54.39.13.155",
|
||||
"briareus.schulte.org"
|
||||
]
|
||||
},
|
||||
"schema": {
|
||||
"log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
|
||||
"set_system_clock": "bool",
|
||||
"ntp_pool": "str?",
|
||||
"ntp_server": [
|
||||
"str?"
|
||||
],
|
||||
"mode": "list(pool|server)"
|
||||
},
|
||||
"image": "ghcr.io/hassio-addons/chrony/{arch}"
|
||||
}
|
||||
BIN
chrony/icon.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
chrony/logo.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
42
cloudcommander/CHANGELOG.md
Normal file
@@ -0,0 +1,42 @@
|
||||
|
||||
## 15.9.7 (28-06-2021)
|
||||
- Update to latest version from coderaiser/cloudcmd
|
||||
- Allow mounting SMB shares
|
||||
- Allow mounting local drives
|
||||
|
||||
## 15.9.6 (14-06-2021)
|
||||
- Update to latest version from coderaiser/cloudcmd
|
||||
|
||||
## 15.9.5 (09-06-2021)
|
||||
- Update to latest version from coderaiser/cloudcmd
|
||||
|
||||
## 15.9.4 (23-05-2021)
|
||||
- Update to latest version from coderaiser/cloudcmd
|
||||
|
||||
## 15.9.4
|
||||
- Update to latest version from coderaiser/cloudcmd
|
||||
|
||||
## 15.9.3
|
||||
- Update to latest version from coderaiser/cloudcmd
|
||||
|
||||
## 15.9.2
|
||||
- Update to latest version from coderaiser/cloudcmd
|
||||
|
||||
## 15.9.1
|
||||
- Update to latest version from coderaiser/cloudcmd
|
||||
|
||||
## 15.9.0
|
||||
- Update to latest version from coderaiser/cloudcmd
|
||||
|
||||
## 15.8.1
|
||||
- Update to latest version from coderaiser/cloudcmd
|
||||
|
||||
## 15.8.0
|
||||
- Update to latest version from coderaiser/cloudcmd
|
||||
|
||||
## 15.7.1
|
||||
- Update to latest version from coderaiser/cloudcmd
|
||||
|
||||
## 15.7.0
|
||||
- Update to latest version from coderaiser/cloudcmd
|
||||
|
||||
39
cloudcommander/Dockerfile
Normal file
@@ -0,0 +1,39 @@
|
||||
ARG BUILD_VERSION
|
||||
ARG BUILD_UPSTREAM="15.9.7"
|
||||
FROM coderaiser/cloudcmd:$BUILD_UPSTREAM
|
||||
|
||||
COPY run.sh /
|
||||
|
||||
ARG BASHIO_VERSION=0.13.0
|
||||
|
||||
RUN \
|
||||
################
|
||||
# Install apps #
|
||||
################
|
||||
apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
jq \
|
||||
cifs-utils \
|
||||
keyutils \
|
||||
\
|
||||
##################
|
||||
# Install bashio #
|
||||
##################
|
||||
&& mkdir -p /tmp/bashio \
|
||||
&& curl -L -f -s "https://github.com/hassio-addons/bashio/archive/v${BASHIO_VERSION}.tar.gz" \
|
||||
| tar -xzf - --strip 1 -C /tmp/bashio \
|
||||
&& mv /tmp/bashio/lib /usr/lib/bashio \
|
||||
&& ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
|
||||
&& rm -rf /tmp/bashio \
|
||||
\
|
||||
/var/{cache,log}/* \
|
||||
/var/lib/apt/lists/* \
|
||||
\
|
||||
###############
|
||||
# Permissions #
|
||||
###############
|
||||
&& chmod 777 /run.sh
|
||||
|
||||
ENTRYPOINT [ "/run.sh" ]
|
||||
|
||||
VOLUME [ "/data" ]
|
||||
28
cloudcommander/README.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# Home assistant add-on: Cloudcommander
|
||||
![Supports aarch64 Architecture][aarch64-shield] ![Supports amd64 Architecture][amd64-shield] ![Supports armhf Architecture][armhf-shield] ![Supports armv7 Architecture][armv7-shield]
|
||||
|
||||
## About
|
||||
|
||||
Cloud Commander a file manager for the web with console and editor.
|
||||
This addon is based on the [docker image](https://hub.docker.com/r/coderaiser/cloudcmd).
|
||||
|
||||
## Installation
|
||||
|
||||
The installation of this add-on is pretty straightforward and not different in
|
||||
comparison to installing any other Hass.io add-on.
|
||||
|
||||
1. [Add my Hass.io add-ons repository][repository] to your Hass.io instance.
|
||||
1. Install this add-on.
|
||||
1. Click the `Save` button to store your configuration.
|
||||
1. Start the add-on.
|
||||
1. Check the logs of the add-on to see if everything went well.
|
||||
|
||||
## Configuration
|
||||
|
||||
Webui can be found at `<your-ip>:8000`.
|
||||
|
||||
[repository]: https://github.com/alexbelgium/hassio-addons
|
||||
[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
|
||||
[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
|
||||
[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg
|
||||
[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg
|
||||
48
cloudcommander/apparmor.txt
Normal file
@@ -0,0 +1,48 @@
|
||||
#include <tunables/global>
|
||||
|
||||
profile cloudcommander_addon flags=(attach_disconnected,mediate_deleted) {
|
||||
#include <abstractions/base>
|
||||
|
||||
capability,
|
||||
file,
|
||||
mount,
|
||||
umount,
|
||||
remount,
|
||||
|
||||
capability setgid,
|
||||
capability setuid,
|
||||
capability sys_admin,
|
||||
capability dac_read_search,
|
||||
# capability dac_override,
|
||||
# capability sys_rawio,
|
||||
|
||||
# S6-Overlay
|
||||
/bin/** ix,
|
||||
/usr/bin/** ix,
|
||||
/usr/lib/bashio/** ix,
|
||||
/etc/s6/** rix,
|
||||
/run/s6/** rix,
|
||||
/etc/services.d/** rwix,
|
||||
/etc/cont-init.d/** rwix,
|
||||
/etc/cont-finish.d/** rwix,
|
||||
/init rix,
|
||||
/var/run/** mrwkl,
|
||||
/var/run/ mrwkl,
|
||||
/dev/i2c-1 mrwkl,
|
||||
# Files required
|
||||
/dev/sda1 mrwkl,
|
||||
/dev/sdb1 mrwkl,
|
||||
/dev/mmcblk0p1 mrwkl,
|
||||
/dev/* mrwkl,
|
||||
/tmp/** mrkwl,
|
||||
|
||||
# Data access
|
||||
/data/** rw,
|
||||
|
||||
# suppress ptrace denials when using 'docker ps' or using 'ps' inside a container
|
||||
ptrace (trace,read) peer=docker-default,
|
||||
|
||||
# docker daemon confinement requires explict allow rule for signal
|
||||
signal (receive) set=(kill,term) peer=/usr/bin/docker,
|
||||
|
||||
}
|
||||
38
cloudcommander/config.json
Normal file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"name": "Cloudcommander",
|
||||
"version": "15.9.7",
|
||||
"upstream": "15.9.7",
|
||||
"slug": "cloudcommander",
|
||||
"description": "Cloud Commander a file manager for the web with console and editor",
|
||||
"url": "https://github.com/alexbelgium/hassio-addons/tree/master/cloudcommander#readme",
|
||||
"arch": [
|
||||
"aarch64",
|
||||
"amd64",
|
||||
"armv7",
|
||||
"armhf"
|
||||
],
|
||||
"ports": {
|
||||
"8000/tcp": 8000
|
||||
},
|
||||
"ports_description": {
|
||||
"8000/tcp": "Web UI port (required)"
|
||||
},
|
||||
"map": [
|
||||
"ssl"
|
||||
],
|
||||
"webui": "http://[HOST]:[PORT:8000]",
|
||||
"privileged": [
|
||||
"SYS_ADMIN",
|
||||
"DAC_READ_SEARCH"
|
||||
],
|
||||
"full_access": true,
|
||||
"environment": {},
|
||||
"options": {},
|
||||
"schema": {
|
||||
"localdisks": "str?",
|
||||
"networkdisks": "str?",
|
||||
"cifsusername": "str?",
|
||||
"cifspassword": "str?",
|
||||
"smbv1": "bool?"
|
||||
}
|
||||
}
|
||||
BIN
cloudcommander/icon.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
cloudcommander/logo.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
134
cloudcommander/run.sh
Normal file
@@ -0,0 +1,134 @@
|
||||
#!/usr/bin/env bashio
|
||||
|
||||
##########
|
||||
# BANNER #
|
||||
##########
|
||||
|
||||
if bashio::supervisor.ping; then
|
||||
bashio::log.blue \
|
||||
'-----------------------------------------------------------'
|
||||
bashio::log.blue " Add-on: $(bashio::addon.name)"
|
||||
bashio::log.blue " $(bashio::addon.description)"
|
||||
bashio::log.blue \
|
||||
'-----------------------------------------------------------'
|
||||
|
||||
bashio::log.blue " Add-on version: $(bashio::addon.version)"
|
||||
if bashio::var.true "$(bashio::addon.update_available)"; then
|
||||
bashio::log.magenta ' There is an update available for this add-on!'
|
||||
bashio::log.magenta \
|
||||
" Latest add-on version: $(bashio::addon.version_latest)"
|
||||
bashio::log.magenta ' Please consider upgrading as soon as possible.'
|
||||
else
|
||||
bashio::log.green ' You are running the latest version of this add-on.'
|
||||
fi
|
||||
|
||||
bashio::log.blue " System: $(bashio::info.operating_system)" \
|
||||
" ($(bashio::info.arch) / $(bashio::info.machine))"
|
||||
bashio::log.blue " Home Assistant Core: $(bashio::info.homeassistant)"
|
||||
bashio::log.blue " Home Assistant Supervisor: $(bashio::info.supervisor)"
|
||||
|
||||
bashio::log.blue \
|
||||
'-----------------------------------------------------------'
|
||||
bashio::log.blue \
|
||||
' Please, share the above information when looking for help'
|
||||
bashio::log.blue \
|
||||
' or support in, e.g., GitHub, forums or the Discord chat.'
|
||||
bashio::log.green \
|
||||
' https://github.com/alexbelgium/hassio-addons'
|
||||
bashio::log.blue \
|
||||
'-----------------------------------------------------------'
|
||||
fi
|
||||
|
||||
######################
|
||||
# MOUNT LOCAL SHARES #
|
||||
######################
|
||||
|
||||
# Mount local Share if configured and if Protection Mode is active
|
||||
if bashio::config.has_value 'localdisks'; then
|
||||
bashio::log.info 'Mounting local hdd...'
|
||||
bashio::require.unprotected
|
||||
MOREDISKS=$(bashio::config 'localdisks')
|
||||
bashio::log.info "Local Disks mounting.. ${MOREDISKS}" && \
|
||||
for disk in ${MOREDISKS//,/ } # Separate comma separated values
|
||||
do
|
||||
bashio::log.info "Mount ${disk}"
|
||||
mkdir -p /share/$disk && \
|
||||
if [ ! -d /share/$disk ]; then
|
||||
echo "Creating /share/$disk"
|
||||
mkdir -p /share/$disk
|
||||
chown -R abc:abc /share/$disk
|
||||
fi
|
||||
mount /dev/$disk /mnt && \
|
||||
bashio::log.info "Success! Mounted to /nmt/$disk"
|
||||
done || \
|
||||
bashio::log.warning "Error, /dev/$disk couldn't be mounted. Is priviledged mode on?"
|
||||
fi || true
|
||||
|
||||
####################
|
||||
# MOUNT SMB SHARES #
|
||||
####################
|
||||
if bashio::config.has_value 'networkdisks'; then
|
||||
# Mount CIFS Share if configured and if Protection Mode is active
|
||||
bashio::log.info 'Mounting smb share(s)...'
|
||||
|
||||
# Define variables
|
||||
MOREDISKS=$(bashio::config 'networkdisks')
|
||||
CIFS_USERNAME=$(bashio::config 'cifsusername')
|
||||
CIFS_PASSWORD=$(bashio::config 'cifspassword')
|
||||
MOUNTED=false
|
||||
SMBVERS=""
|
||||
SECVERS=""
|
||||
|
||||
if bashio::config.has_value 'cifsdomain'; then
|
||||
DOMAIN=",domain=$(bashio::config 'cifsdomain')"
|
||||
else
|
||||
DOMAIN=""
|
||||
fi
|
||||
|
||||
# Mounting disks
|
||||
for disk in ${MOREDISKS//,/ } # Separate comma separated values
|
||||
do
|
||||
# Clean name of network share
|
||||
disk=$(echo $disk | sed "s,/$,,") # Remove / at end of name
|
||||
diskname=${disk//\\//} #replace \ with /
|
||||
diskname=${diskname##*/} # Get only last part of the name
|
||||
# Prepare mount point
|
||||
mkdir -p /mnt/$diskname
|
||||
chown -R root:root /mnt/$diskname
|
||||
|
||||
#Tries to mount with default options
|
||||
mount -t cifs -o rw,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$DOMAIN $disk /mnt/$diskname 2>ERRORCODE && MOUNTED=true || MOUNTED=false
|
||||
|
||||
# if Fail test different smb and sec versions
|
||||
if [ $MOUNTED = false ]; then
|
||||
for SMBVERS in ",vers=3" ",vers=1.0" ",vers=2.1" ",vers=3.0" ",nodfs" ",uid=0,gid=0,forceuid,forcegid" ",noforceuid,noforcegid" ",${DOMAIN}"
|
||||
do
|
||||
mount -t cifs -o rw,iocharset=utf8,file_mode=0777,dir_mode=0777,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$SMBVERS $disk /mnt/$diskname 2>/dev/null && MOUNTED=true && break || MOUNTED=false
|
||||
for SECVERS in ",sec=ntlmi" ",sec=ntlmv2" ",sec=ntlmv2i" ",sec=ntlmssp" ",sec=ntlmsspi" ",sec=ntlm" ",sec=krb5i" ",sec=krb5"
|
||||
do
|
||||
mount -t cifs -o rw,iocharset=utf8,file_mode=0777,dir_mode=0777,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$SMBVERS$SECVERS $disk /mnt/$disk name 2>/dev/null && MOUNTED=true && break 2 && break || MOUNTED=false
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
# Messages
|
||||
if [ $MOUNTED = true ]; then
|
||||
#Test write permissions
|
||||
touch /mnt/$diskname/testaze && rm /mnt/$diskname/testaze && bashio::log.info "... $disk successfully mounted to /mnt/$diskname with options $SMBVERS$SECVERS" || bashio::log.fatal "Disk is mounted, however unable to write in the shared disk. Please check UID/GID for permissions, and if the share is rw"
|
||||
else
|
||||
# message if still fail
|
||||
bashio::log.fatal "Unable to mount $disk to /mnt/$diskname with username $CIFS_USERNAME, $CIFS_PASSWORD. Please check your remote share path, username, password, domain, try putting 0 in UID and GID" # Mount share
|
||||
bashio::log.fatal "Error read : $(<ERRORCODE)" # Mount share
|
||||
rm ERRORCODE
|
||||
fi
|
||||
|
||||
done
|
||||
fi || true
|
||||
|
||||
###############
|
||||
# LAUNCH APPS #
|
||||
###############
|
||||
|
||||
bashio::log.info "The server will start. Please wait 30 seconds before the web UI is available. Enjoy !"
|
||||
|
||||
./usr/src/app/bin/cloudcmd.mjs
|
||||
94
emby/CHANGELOG.md
Normal file
@@ -0,0 +1,94 @@
|
||||
|
||||
## 4.6.3.0 (19-06-2021)
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.2.0 (04-06-2021)
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.1.0 (25-05-2021)
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.51 (23-05-2021)
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.51 (23-05-2021)
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.51 (23-05-2021)
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.51 (23-05-2021)
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.50 (20-05-2021)
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.48 (19-05-2021)
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.47 (18-05-2021)
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.46 (15-05-2021)
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
- Add banner to log
|
||||
|
||||
## 4.6.0.45 (13-05-2021)
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.44 (12-05-2021)
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.43 (04-05-2021)
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.41 (28-04-2021)
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.40
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.39
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.38
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.37
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.36
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.35
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.34
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.33
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.32
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.31
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.30
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.29
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.28
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
|
||||
## 4.6.0.26
|
||||
- Update to latest version from linuxserver/docker-emby
|
||||
- Enables PUID/GUID options
|
||||
- New feature : mount smb share in protected mode
|
||||
- New feature : mount multiple smb shares
|
||||
- New config/feature : mount smbv1
|
||||
- Changed path : changed smb mount path from /storage/externalcifs to /mnt/$NAS name
|
||||
- Removed feature : ability to remove protection and mount local hdd, to increase the addon score
|
||||
80
emby/Dockerfile
Normal file
@@ -0,0 +1,80 @@
|
||||
ARG BUILD_FROM
|
||||
ARG BUILD_VERSION
|
||||
ARG BUILD_UPSTREAM="4.6.3.0"
|
||||
|
||||
FROM ${BUILD_FROM}${BUILD_UPSTREAM}
|
||||
ARG BASHIO_VERSION=0.13.0
|
||||
ARG TEMPIO_VERSION=2021.01.0
|
||||
|
||||
# Set shell
|
||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||
|
||||
RUN \
|
||||
################
|
||||
# Install apps #
|
||||
################
|
||||
apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
jq \
|
||||
cifs-utils \
|
||||
keyutils \
|
||||
\
|
||||
##################
|
||||
# Install bashio #
|
||||
##################
|
||||
&& mkdir -p /tmp/bashio \
|
||||
&& curl -L -f -s "https://github.com/hassio-addons/bashio/archive/v${BASHIO_VERSION}.tar.gz" \
|
||||
| tar -xzf - --strip 1 -C /tmp/bashio \
|
||||
&& mv /tmp/bashio/lib /usr/lib/bashio \
|
||||
&& ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
|
||||
&& rm -rf /tmp/bashio \
|
||||
\
|
||||
/var/{cache,log}/* \
|
||||
/var/lib/apt/lists/* \
|
||||
\
|
||||
#############################
|
||||
# Allow UID and GID setting #
|
||||
#############################
|
||||
\
|
||||
&& sed -i 's/bash/bashio/g' /etc/cont-init.d/10-adduser \
|
||||
&& sed -i 's/{PUID:-911}/(bashio::config "PUID")/g' /etc/cont-init.d/10-adduser \
|
||||
&& sed -i 's/{PGID:-911}/(bashio::config "PGID")/g' /etc/cont-init.d/10-adduser \
|
||||
&& sed -i "s|chown abc:abc /config||g" /etc/cont-init.d/10-adduser \
|
||||
\
|
||||
###########
|
||||
# FOLDERS #
|
||||
###########
|
||||
\
|
||||
&& sed -i "s|/config|/emby|g" /etc/services.d/emby/run \
|
||||
&& sed -i "s|/config|/emby|g" /etc/cont-init.d/30-config
|
||||
|
||||
# copy local files
|
||||
COPY root/ /
|
||||
|
||||
### LABELS
|
||||
ARG BUILD_ARCH
|
||||
ARG BUILD_DATE
|
||||
ARG BUILD_DESCRIPTION
|
||||
ARG BUILD_NAME
|
||||
ARG BUILD_REF
|
||||
ARG BUILD_REPOSITORY
|
||||
ARG BUILD_VERSION
|
||||
|
||||
LABEL \
|
||||
io.hass.name="${BUILD_NAME}" \
|
||||
io.hass.description="${BUILD_DESCRIPTION}" \
|
||||
io.hass.arch="${BUILD_ARCH}" \
|
||||
io.hass.type="addon" \
|
||||
io.hass.version=${BUILD_VERSION} \
|
||||
maintainer="alexbelgium (https://github.com/alexbelgium)" \
|
||||
org.opencontainers.image.title="${BUILD_NAME}" \
|
||||
org.opencontainers.image.description="${BUILD_DESCRIPTION}" \
|
||||
org.opencontainers.image.vendor="Home Assistant Add-ons" \
|
||||
org.opencontainers.image.authors="alexbelgium (https://github.com/alexbelgium)" \
|
||||
org.opencontainers.image.licenses="MIT" \
|
||||
org.opencontainers.image.url="https://github.com/alexbelgium" \
|
||||
org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \
|
||||
org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \
|
||||
org.opencontainers.image.created=${BUILD_DATE} \
|
||||
org.opencontainers.image.revision=${BUILD_REF} \
|
||||
org.opencontainers.image.version=${BUILD_VERSION}
|
||||
38
emby/README.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# Home assistant add-on: emby
|
||||
![Supports aarch64 Architecture][aarch64-shield] ![Supports amd64 Architecture][amd64-shield] ![Supports armhf Architecture][armhf-shield] ![Supports armv7 Architecture][armv7-shield]
|
||||
|
||||
## About
|
||||
|
||||
Forked to add latest beta versions, smb and local hdd mount.
|
||||
- Inital version : https://github.com/petersendev/hassio-addons
|
||||
- CIFS code : https://github.com/dianlight/hassio-addons
|
||||
|
||||
[emby](https://emby.media/) organizes video, music, live TV, and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone emby Media Server.
|
||||
|
||||
This addon is based on the [docker image](https://github.com/linuxserver/docker-emby) from linuxserver.io.
|
||||
|
||||
## Installation
|
||||
|
||||
The installation of this add-on is pretty straightforward and not different in
|
||||
comparison to installing any other Hass.io add-on.
|
||||
|
||||
1. [Add my Hass.io add-ons repository][repository] to your Hass.io instance.
|
||||
1. Install this add-on.
|
||||
1. Click the `Save` button to store your configuration.
|
||||
1. Start the add-on.
|
||||
1. Check the logs of the add-on to see if everything went well.
|
||||
1. Carefully configure the add-on to your preferences, see the official documentation for for that.
|
||||
|
||||
|
||||
## Configuration
|
||||
|
||||
Webui can be found at `<your-ip>:8096`.
|
||||
|
||||
[smb-shield]: https://img.shields.io/badge/SMB--green?style=plastic.svg
|
||||
|
||||
|
||||
[repository]: https://github.com/alexbelgium/hassio-addons
|
||||
[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
|
||||
[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
|
||||
[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg
|
||||
[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg
|
||||
49
emby/apparmor.txt
Normal file
@@ -0,0 +1,49 @@
|
||||
#include <tunables/global>
|
||||
|
||||
profile addon_db21ed7f_emby_nas flags=(attach_disconnected,mediate_deleted) {
|
||||
#include <abstractions/base>
|
||||
|
||||
capability,
|
||||
file,
|
||||
mount,
|
||||
umount,
|
||||
remount,
|
||||
|
||||
capability setgid,
|
||||
capability setuid,
|
||||
capability sys_admin,
|
||||
capability dac_read_search,
|
||||
# capability dac_override,
|
||||
# capability sys_rawio,
|
||||
|
||||
# S6-Overlay
|
||||
/bin/** ix,
|
||||
/usr/bin/** ix,
|
||||
/usr/lib/bashio/** ix,
|
||||
/etc/s6/** rix,
|
||||
/run/s6/** rix,
|
||||
/etc/services.d/** rwix,
|
||||
/etc/cont-init.d/** rwix,
|
||||
/etc/cont-finish.d/** rwix,
|
||||
/init rix,
|
||||
/var/run/** mrwkl,
|
||||
/var/run/ mrwkl,
|
||||
/dev/i2c-1 mrwkl,
|
||||
# Files required
|
||||
/dev/sda1 mrwkl,
|
||||
/dev/sdb1 mrwkl,
|
||||
/dev/mmcblk0p1 mrwkl,
|
||||
/dev/ttyUSB0 mrwkl,
|
||||
/dev/* mrwkl,
|
||||
/tmp/** mrkwl,
|
||||
|
||||
# Data access
|
||||
/data/** rw,
|
||||
|
||||
# suppress ptrace denials when using 'docker ps' or using 'ps' inside a container
|
||||
ptrace (trace,read) peer=docker-default,
|
||||
|
||||
# docker daemon confinement requires explict allow rule for signal
|
||||
signal (receive) set=(kill,term) peer=/usr/bin/docker,
|
||||
|
||||
}
|
||||
8
emby/build.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"build_from": {
|
||||
"armv7": "linuxserver/emby:arm32v7-version-",
|
||||
"armhf": "linuxserver/emby:arm32v7-version-",
|
||||
"aarch64": "linuxserver/emby:arm64v8-version-",
|
||||
"amd64": "linuxserver/emby:amd64-version-"
|
||||
}
|
||||
}
|
||||
60
emby/config.json
Normal file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"name": "Emby NAS",
|
||||
"version": "4.6.3.0",
|
||||
"upstream": "4.6.3.0",
|
||||
"slug": "emby_nas",
|
||||
"description": "A Free Software Media System that puts you in control of managing and streaming your media.",
|
||||
"url": "https://github.com/alexbelgium/hassio-addons",
|
||||
"startup": "services",
|
||||
"arch": [
|
||||
"aarch64",
|
||||
"amd64",
|
||||
"armv7",
|
||||
"armhf"
|
||||
],
|
||||
"ports": {
|
||||
"8096/tcp": 8096,
|
||||
"8920/tcp": null,
|
||||
"7359/udp": null,
|
||||
"1900/udp": null
|
||||
},
|
||||
"ports_description": {
|
||||
"8096/tcp": "web interface",
|
||||
"8920/tcp": "https web interface (optional)",
|
||||
"7359/udp": "udp server discover (optional)",
|
||||
"1900/udp": "dlna (optional)"
|
||||
},
|
||||
"map": [
|
||||
"config:rw",
|
||||
"share:rw",
|
||||
"media:rw",
|
||||
"ssl"
|
||||
],
|
||||
"webui": "http://[HOST]:[PORT:8096]",
|
||||
"boot": "auto",
|
||||
"apparmor": "true",
|
||||
"privileged": [
|
||||
"SYS_ADMIN",
|
||||
"DAC_READ_SEARCH"
|
||||
],
|
||||
"devices": [
|
||||
"/dev/ttyUSB0",
|
||||
"/dev/*",
|
||||
"/dev/sda1"
|
||||
],
|
||||
"full_access": true,
|
||||
"options": {
|
||||
"PUID": 0,
|
||||
"PGID": 0
|
||||
},
|
||||
"schema": {
|
||||
"PUID": "int",
|
||||
"PGID": "int",
|
||||
"TZ": "str?",
|
||||
"localdisks": "str?",
|
||||
"networkdisks": "str?",
|
||||
"cifsusername": "str?",
|
||||
"cifspassword": "str?",
|
||||
"smbv1": "bool?"
|
||||
}
|
||||
}
|
||||
BIN
emby/icon.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
emby/logo.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
39
emby/root/etc/cont-init.d/00-banner.sh
Normal file
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: Base Images
|
||||
# Displays a simple add-on banner on startup
|
||||
# ==============================================================================
|
||||
if bashio::supervisor.ping; then
|
||||
bashio::log.blue \
|
||||
'-----------------------------------------------------------'
|
||||
bashio::log.blue " Add-on: $(bashio::addon.name)"
|
||||
bashio::log.blue " $(bashio::addon.description)"
|
||||
bashio::log.blue \
|
||||
'-----------------------------------------------------------'
|
||||
|
||||
bashio::log.blue " Add-on version: $(bashio::addon.version)"
|
||||
if bashio::var.true "$(bashio::addon.update_available)"; then
|
||||
bashio::log.magenta ' There is an update available for this add-on!'
|
||||
bashio::log.magenta \
|
||||
" Latest add-on version: $(bashio::addon.version_latest)"
|
||||
bashio::log.magenta ' Please consider upgrading as soon as possible.'
|
||||
else
|
||||
bashio::log.green ' You are running the latest version of this add-on.'
|
||||
fi
|
||||
|
||||
bashio::log.blue " System: $(bashio::info.operating_system)" \
|
||||
" ($(bashio::info.arch) / $(bashio::info.machine))"
|
||||
bashio::log.blue " Home Assistant Core: $(bashio::info.homeassistant)"
|
||||
bashio::log.blue " Home Assistant Supervisor: $(bashio::info.supervisor)"
|
||||
|
||||
bashio::log.blue \
|
||||
'-----------------------------------------------------------'
|
||||
bashio::log.blue \
|
||||
' Please, share the above information when looking for help'
|
||||
bashio::log.blue \
|
||||
' or support in, e.g., GitHub, forums or the Discord chat.'
|
||||
bashio::log.green \
|
||||
' https://github.com/alexbelgium/hassio-addons'
|
||||
bashio::log.blue \
|
||||
'-----------------------------------------------------------'
|
||||
fi
|
||||
5
emby/root/etc/cont-init.d/00-ha-env
Normal file
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
|
||||
for k in $(bashio::jq "${__BASHIO_ADDON_CONFIG}" 'keys | .[]'); do
|
||||
printf "$(bashio::config $k)" > /var/run/s6/container_environment/$k
|
||||
done
|
||||
82
emby/root/etc/cont-init.d/20-folders
Normal file
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
|
||||
if [ ! -d /emby ]; then
|
||||
echo "Creating /emby"
|
||||
mkdir -p /emby
|
||||
chown -R abc:abc /emby
|
||||
fi
|
||||
|
||||
if [ ! -d /share/storage/tv ]; then
|
||||
echo "Creating /share/storage/tv"
|
||||
mkdir -p /share/storage/tv
|
||||
chown -R abc:abc /share/storage/tv
|
||||
fi
|
||||
|
||||
if [ ! -d /share/storage/movies ]; then
|
||||
echo "Creating /share/storage/movies"
|
||||
mkdir -p /share/storage/movies
|
||||
chown -R abc:abc /share/storage/movies
|
||||
fi
|
||||
|
||||
if [ ! -d /share/emby ]; then
|
||||
echo "Creating /share/emby"
|
||||
mkdir -p /share/emby
|
||||
chown -R abc:abc /share/emby
|
||||
fi
|
||||
|
||||
if [ ! -d /config/emby ]; then
|
||||
echo "Creating /config/emby"
|
||||
mkdir -p /config/emby
|
||||
chown -R abc:abc /config/emby
|
||||
fi
|
||||
|
||||
# links
|
||||
|
||||
if [ ! -d /emby/cache ]; then
|
||||
echo "Creating link for /emby/cache"
|
||||
mkdir -p /share/emby/cache
|
||||
chown -R abc:abc /share/emby/cache
|
||||
ln -s /share/emby/cache /emby/cache
|
||||
fi
|
||||
|
||||
if [ ! -d /emby/config ]; then
|
||||
echo "Creating link for /emby/config"
|
||||
mkdir -p /config/emby
|
||||
chown -R abc:abc /config/emby
|
||||
ln -s /config/emby /emby/config
|
||||
fi
|
||||
|
||||
if [ ! -d /emby/data ]; then
|
||||
echo "Creating link for /emby/data"
|
||||
mkdir -p /share/emby/data
|
||||
chown -R abc:abc /share/emby/data
|
||||
ln -s /share/emby/data /emby/data
|
||||
fi
|
||||
|
||||
if [ ! -d /emby/logs ]; then
|
||||
echo "Creating link for /emby/logs"
|
||||
mkdir -p /share/emby/logs
|
||||
chown -R abc:abc /share/emby/logs
|
||||
ln -s /share/emby/logs /emby/logs
|
||||
fi
|
||||
|
||||
if [ ! -d /emby/metadata ]; then
|
||||
echo "Creating link for /emby/metadata"
|
||||
mkdir -p /share/emby/metadata
|
||||
chown -R abc:abc /share/emby/metadata
|
||||
ln -s /share/emby/metadata /emby/metadata
|
||||
fi
|
||||
|
||||
if [ ! -d /emby/plugins ]; then
|
||||
echo "Creating link for /emby/plugins"
|
||||
mkdir -p /share/emby/plugins
|
||||
chown -R abc:abc /share/emby/plugins
|
||||
ln -s /share/emby/plugins /emby/plugins
|
||||
fi
|
||||
|
||||
if [ ! -d /emby/root ]; then
|
||||
echo "Creating link for /emby/root"
|
||||
mkdir -p /share/emby/root
|
||||
chown -R abc:abc /share/emby/root
|
||||
ln -s /share/emby/root /emby/root
|
||||
fi
|
||||
27
emby/root/etc/cont-init.d/92-local_mounts_v1.2.sh
Normal file
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
|
||||
######################
|
||||
# MOUNT LOCAL SHARES #
|
||||
######################
|
||||
|
||||
bashio::log.info 'Mounting external hdd...'
|
||||
|
||||
# Mount local Share if configured and if Protection Mode is active
|
||||
if bashio::config.has_value 'localdisks'; then
|
||||
bashio::require.unprotected
|
||||
MOREDISKS=$(bashio::config 'localdisks')
|
||||
bashio::log.info "Local Disks mounting.. ${MOREDISKS}" && \
|
||||
for disk in ${MOREDISKS//,/ } # Separate comma separated values
|
||||
do
|
||||
bashio::log.info "Mount ${disk}"
|
||||
mkdir -p /share/$disk && \
|
||||
if [ ! -d /share/$disk ]; then
|
||||
echo "Creating /share/$disk"
|
||||
mkdir -p /share/$disk
|
||||
chown -R abc:abc /share/$disk
|
||||
fi
|
||||
mount /dev/$disk /share/$disk && \
|
||||
bashio::log.info "Success! Mounted to /nmt/$disk"
|
||||
done || \
|
||||
bashio::log.warning "Protection mode is ON. Unable to mount local drives!"
|
||||
fi
|
||||
62
emby/root/etc/cont-init.d/92-smb_mounts_v1.3.sh
Normal file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
|
||||
####################
|
||||
# MOUNT SMB SHARES #
|
||||
####################
|
||||
if bashio::config.has_value 'networkdisks'; then
|
||||
# Mount CIFS Share if configured and if Protection Mode is active
|
||||
bashio::log.info 'Mounting smb share(s)...'
|
||||
|
||||
# Define variables
|
||||
MOREDISKS=$(bashio::config 'networkdisks')
|
||||
CIFS_USERNAME=$(bashio::config 'cifsusername')
|
||||
CIFS_PASSWORD=$(bashio::config 'cifspassword')
|
||||
MOUNTED=false
|
||||
SMBVERS=""
|
||||
SECVERS=""
|
||||
|
||||
if bashio::config.has_value 'cifsdomain'; then
|
||||
DOMAIN=",domain=$(bashio::config 'cifsdomain')"
|
||||
else
|
||||
DOMAIN=""
|
||||
fi
|
||||
|
||||
# Mounting disks
|
||||
for disk in ${MOREDISKS//,/ } # Separate comma separated values
|
||||
do
|
||||
# Clean name of network share
|
||||
disk=$(echo $disk | sed "s,/$,,") # Remove / at end of name
|
||||
diskname=${disk//\\//} #replace \ with /
|
||||
diskname=${diskname##*/} # Get only last part of the name
|
||||
# Prepare mount point
|
||||
mkdir -p /mnt/$diskname
|
||||
chown -R root:root /mnt/$diskname
|
||||
|
||||
#Tries to mount with default options
|
||||
mount -t cifs -o rw,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$DOMAIN $disk /mnt/$diskname 2>ERRORCODE && MOUNTED=true || MOUNTED=false
|
||||
|
||||
# if Fail test different smb and sec versions
|
||||
if [ $MOUNTED = false ]; then
|
||||
for SMBVERS in ",vers=3" ",vers=1.0" ",vers=2.1" ",vers=3.0" ",nodfs" ",uid=0,gid=0,forceuid,forcegid" ",noforceuid,noforcegid" ",${DOMAIN}"
|
||||
do
|
||||
mount -t cifs -o rw,iocharset=utf8,file_mode=0777,dir_mode=0777,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$SMBVERS $disk /mnt/$diskname 2>/dev/null && MOUNTED=true && break || MOUNTED=false
|
||||
for SECVERS in ",sec=ntlmi" ",sec=ntlmv2" ",sec=ntlmv2i" ",sec=ntlmssp" ",sec=ntlmsspi" ",sec=ntlm" ",sec=krb5i" ",sec=krb5"
|
||||
do
|
||||
mount -t cifs -o rw,iocharset=utf8,file_mode=0777,dir_mode=0777,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$SMBVERS$SECVERS $disk /mnt/$disk name 2>/dev/null && MOUNTED=true && break 2 && break || MOUNTED=false
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
# Messages
|
||||
if [ $MOUNTED = true ]; then
|
||||
#Test write permissions
|
||||
touch /mnt/$diskname/testaze && rm /mnt/$diskname/testaze && bashio::log.info "... $disk successfully mounted to /mnt/$diskname with options $SMBVERS$SECVERS" || bashio::log.fatal "Disk is mounted, however unable to write in the shared disk. Please check UID/GID for permissions, and if the share is rw"
|
||||
else
|
||||
# message if still fail
|
||||
bashio::log.fatal "Unable to mount $disk to /mnt/$diskname with username $CIFS_USERNAME, $CIFS_PASSWORD. Please check your remote share path, username, password, domain, try putting 0 in UID and GID" # Mount share
|
||||
bashio::log.fatal "Error read : $(<ERRORCODE)" # Mount share
|
||||
rm ERRORCODE
|
||||
fi
|
||||
|
||||
done
|
||||
fi
|
||||
1
esphome/CHANGELOG.md
Normal file
@@ -0,0 +1 @@
|
||||
See https://esphome.io/changelog/index.html
|
||||
81
esphome/DOCS.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# Home Assistant Community Add-on: ESPHome
|
||||
|
||||
## Installation
|
||||
|
||||
The installation of this add-on is pretty straightforward and not different in comparison to installing any other Home Assistant add-on.
|
||||
|
||||
1. Search for the “ESPHome” add-on in the Supervisor add-on store.
|
||||
2. Press install to download the add-on and unpack it on your machine. This can take some time.
|
||||
3. Optional: If you're using SSL/TLS certificates and want to encrypt your communication to this add-on, please enter `true` into the `ssl` field and set the `fullchain` and `certfile` options accordingly.
|
||||
4. Start the add-on, check the logs of the add-on to see if everything went well.
|
||||
5. Click "OPEN WEB UI" to open the ESPHome dashboard. You will be asked for your Home Assistant credentials - ESPHome uses Home Assistant's authentication system to log you in.
|
||||
|
||||
You can view the ESPHome documentation at https://esphome.io/
|
||||
|
||||
## Configuration
|
||||
|
||||
**Note**: _Remember to restart the add-on when the configuration is changed._
|
||||
|
||||
Example add-on configuration:
|
||||
|
||||
```json
|
||||
{
|
||||
"ssl": false,
|
||||
"certfile": "fullchain.pem",
|
||||
"keyfile": "privkey.pem"
|
||||
}
|
||||
```
|
||||
|
||||
### Option: `ssl`
|
||||
|
||||
Enables or disables encrypted SSL/TLS (HTTPS) connections to the web server of this add-on.
|
||||
Set it to `true` to encrypt communications, `false` otherwise.
|
||||
Please note that if you set this to `true` you must also generate the key and certificate
|
||||
files for encryption. For example using [Let's Encrypt](https://www.home-assistant.io/addons/lets_encrypt/)
|
||||
or [Self-signed certificates](https://www.home-assistant.io/docs/ecosystem/certificates/tls_self_signed_certificate/).
|
||||
|
||||
### Option: `certfile`
|
||||
|
||||
The certificate file to use for SSL. If this file doesn't exist, the add-on start will fail.
|
||||
|
||||
**Note**: The file MUST be stored in `/ssl/`, which is the default for Home Assistant
|
||||
|
||||
### Option: `keyfile`
|
||||
|
||||
The private key file to use for SSL. If this file doesn't exist, the add-on start will fail.
|
||||
|
||||
**Note**: The file MUST be stored in `/ssl/`, which is the default for Home Assistant
|
||||
|
||||
### Option: `leave_front_door_open`
|
||||
|
||||
Adding this option to the add-on configuration allows you to disable
|
||||
authentication by setting it to `true`.
|
||||
|
||||
### Option: `esphome_version`
|
||||
|
||||
Manually override which ESPHome version to use in the add-on.
|
||||
For example to install the latest development version, use `"esphome_version": "dev"`,
|
||||
or for version 1.14.0: `"esphome_version": "v1.14.0""`.
|
||||
|
||||
Please note that this does not always work and is only meant for testing, usually the
|
||||
ESPHome add-on and dashboard version must match to guarantee a working system.
|
||||
|
||||
### Option: `relative_url`
|
||||
|
||||
Host the ESPHome dashboard under a relative URL, so that it can be integrated
|
||||
into existing web proxies like NGINX under a relative URL. Defaults to `/`.
|
||||
|
||||
### Option: `status_use_ping`
|
||||
|
||||
By default the dashboard uses mDNS to check if nodes are online. This does
|
||||
not work across subnets unless your router supports mDNS forwarding or avahi.
|
||||
|
||||
Setting this to `true` will make ESPHome use ICMP ping requests to get the node status. Use this if all nodes always have offline status even when they're connected.
|
||||
|
||||
### Option: `streamer_mode`
|
||||
|
||||
If set to `true`, this will enable streamer mode, which makes ESPHome hide all
|
||||
potentially private information. So for example WiFi (B)SSIDs (which could be
|
||||
used to find your location), usernames, etc. Please note that you need to use
|
||||
the `!secret` tag in your YAML file to also prevent these from showing up
|
||||
while editing and validating.
|
||||
40
esphome/README.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# ESPHome Home Assistant Add-On
|
||||
|
||||
[](https://esphome.io/)
|
||||
|
||||
[](https://github.com/esphome/esphome)
|
||||
[![GitHub Release][releases-shield]][releases]
|
||||
[![Discord][discord-shield]][discord]
|
||||
|
||||
## About
|
||||
|
||||
This add-on allows you to manage and program your ESP8266 and ESP32 based microcontrollers
|
||||
directly through Home Assistant **with no programming experience required**. All you need to do
|
||||
is write YAML configuration files; the rest (over-the-air updates, compiling) is all
|
||||
handled by ESPHome.
|
||||
|
||||
<p align="center">
|
||||
<img title="ESPHome dashboard screenshot" src="https://raw.githubusercontent.com/esphome/hassio/master/esphome-dev/images/screenshot.png" width="700px"></img>
|
||||
</p>
|
||||
|
||||
[View the ESPHome documentation](https://esphome.io/)
|
||||
|
||||
## Example
|
||||
|
||||
With ESPHome, you can go from a few lines of YAML straight to a custom-made
|
||||
firmware. For example, to include a [DHT22][dht22].
|
||||
temperature and humidity sensor, you just need to include 8 lines of YAML
|
||||
in your configuration file:
|
||||
|
||||
<img title="ESPHome DHT configuration example" src="https://raw.githubusercontent.com/esphome/hassio/master/esphome-dev/images/dht-example.png" width="500px"></img>
|
||||
|
||||
Then just click UPLOAD and the sensor will magically appear in Home Assistant:
|
||||
|
||||
<img title="ESPHome Home Assistant MQTT discovery" src="https://raw.githubusercontent.com/esphome/hassio/master/esphome-dev/images/temperature-humidity.png" width="600px"></img>
|
||||
|
||||
[discord-shield]: https://img.shields.io/discord/429907082951524364.svg
|
||||
[dht22]: https://esphome.io/components/sensor/dht.html
|
||||
[discord]: https://discord.gg/KhAMKrd
|
||||
[releases-shield]: https://img.shields.io/github/release/esphome/esphome.svg
|
||||
[releases]: https://esphome.io/changelog/index.html
|
||||
[repository]: https://github.com/esphome/esphome
|
||||