This commit is contained in:
2021-06-29 12:37:08 +03:00
commit 12fdc96d20
282 changed files with 13627 additions and 0 deletions

157
.README.j2 Normal file
View 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
View 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
View File

@@ -0,0 +1 @@
.github/* @frenck

133
.github/CODE_OF_CONDUCT.md vendored Normal file
View 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
View 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
View 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
View 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

File diff suppressed because it is too large Load Diff

13
.github/dependabot.yaml vendored Normal file
View 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
View 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
View 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
View 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
View 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: ""

View 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
View 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.

View 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 }}

View 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
View 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
View 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
View 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>

View 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>

View 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
View 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
View 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
View 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
View 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>

1
.mdlrc Normal file
View File

@@ -0,0 +1 @@
rules "~MD024"

66
.yamllint Normal file
View 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
View 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
View File

1046
README.md Normal file

File diff suppressed because it is too large Load Diff

15
aircast/CHANGELOG.md Normal file
View File

@@ -0,0 +1,15 @@
## Whats 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
View 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
View 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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
aircast/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View 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
View File

@@ -0,0 +1,15 @@
## Whats 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
View 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
View 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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
airsonos/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View 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
View File

@@ -0,0 +1,11 @@
## Whats 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
View 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
View 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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

BIN
appdaemon/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View 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'

View 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

View 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
View File

@@ -0,0 +1,3 @@
## 1.0.0 - 2021-05-09
* Add Asterisk server `0.20.21`

19
asterisk/DOCS.md Normal file
View 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
View 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
View 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
View 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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
asterisk/logo.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View 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

View File

@@ -0,0 +1,5 @@
[internal]
exten = 100,1,Answer()
same = n,Wait(1)
same = n,Playback(test)
same = n,Hangup()

View 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

View 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

View 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

View File

@@ -0,0 +1 @@
/var/lib/asterisk/sounds/test.wav false asterisk:asterisk 0640 0640

View 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
View 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
View File

@@ -0,0 +1,15 @@
## Whats 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
View 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
View 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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
chrony/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

View 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
View 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
View 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

View 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,
}

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
cloudcommander/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

134
cloudcommander/run.sh Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
emby/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View 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

View 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

View 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

View 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

View 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
View File

@@ -0,0 +1 @@
See https://esphome.io/changelog/index.html

81
esphome/DOCS.md Normal file
View 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
View File

@@ -0,0 +1,40 @@
# ESPHome Home Assistant Add-On
[![ESPHome logo](https://raw.githubusercontent.com/esphome/hassio/master/esphome-dev/logo.png)](https://esphome.io/)
[![GitHub stars](https://img.shields.io/github/stars/esphome/esphome.svg?style=social&label=Star&maxAge=2592000)](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

Some files were not shown because too many files have changed in this diff Show More