🎉 Initial version

This commit is contained in:
Franck Nijhof 2017-09-23 15:45:05 +02:00
parent 297e0f83d2
commit 2829026a66
No known key found for this signature in database
GPG key ID: D62583BA8AB11CA3
16 changed files with 789 additions and 0 deletions

95
.circleci/config.yml Normal file
View file

@ -0,0 +1,95 @@
version: 2
defaults: &defaults
machine:
image: circleci/classic:edge
steps:
- run:
name: Check docker is running
command: docker info
- run:
name: Pull Community Hass.io Add-ons build environment
command: docker pull hassioaddons/build-env:latest
- run:
name: Log in to Docker Hub
command: |
if [[ "${CIRCLE_BRANCH}" = "master" || ! -z "${CIRCLE_TAG:-}" ]];
then
docker login -u ${DOCKER_LOGIN} -p ${DOCKER_PASSWORD}
fi
- checkout
- deploy:
name: Build and (maybe) deploy
command: |
if [[ "${CIRCLE_BRANCH}" = "master" || ! -z "${CIRCLE_TAG:-}" ]];
then
docker run \
--privileged \
-v ~/.docker:/root/.docker \
-v "$PWD":/docker \
hassioaddons/build-env:latest \
--git \
--image "hassioaddons/example-{arch}" \
--target example \
--${ARCH} \
--push
else
docker run \
--privileged \
-v ~/.docker:/root/.docker \
-v "$PWD":/docker \
hassioaddons/build-env:latest \
--git \
--image "hassioaddons/example-{arch}" \
--target example \
--${ARCH}
fi
- deploy:
name: Send notification to Microbadger
command: |
if [[ "${CIRCLE_BRANCH}" = "master" || ! -z "${CIRCLE_TAG:-}" ]];
then
curl -X POST https://hooks.microbadger.com/images/${MICROBADGER_WEBHOOK}
fi
jobs:
aarch64:
<<: *defaults
environment:
ARCH: aarch64
MICROBADGER_WEBHOOK: hassioaddons/base-aarch64/xPXzVNfmlHE-TbnO6_v2_G5XVt4=
amd64:
<<: *defaults
environment:
ARCH: amd64
MICROBADGER_WEBHOOK: hassioaddons/base-amd64/9VpSGXcF3-G8pL-mKXq-0WWvG3g=
armhf:
<<: *defaults
environment:
ARCH: armhf
MICROBADGER_WEBHOOK: hassioaddons/base-armhf/PzdnuORNZ7a76EmFKI1mrby2p74=
i386:
<<: *defaults
environment:
ARCH: i386
MICROBADGER_WEBHOOK: hassioaddons/base-i386/te8Hu20AiumjGJbSK0Bf99iivhI=
workflows:
version: 2
build_and_maybe_deploy:
jobs:
- aarch64:
filters:
tags:
only: /.*/
- amd64:
filters:
tags:
only: /.*/
- armhf:
filters:
tags:
only: /.*/
- i386:
filters:
tags:
only: /.*/

13
.codeclimate.yml Normal file
View file

@ -0,0 +1,13 @@
---
engines:
fixme:
enabled: true
shellcheck:
enabled: true
markdownlint:
enabled: true
ratings:
paths:
- "**.sh"
- "**.md"
exclude_paths: []

19
.editorconfig Executable file
View file

@ -0,0 +1,19 @@
root = true
[*]
charset = utf-8
end_of_line = lf
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
ident_size = 4
[*.md]
ident_size = 2
trim_trailing_whitespace = false
[*.json]
ident_size = 2
[{.gitignore,.gitkeep,.editorconfig}]
ident_size = 2

20
.github/ISSUE_TEMPLATE.md vendored Executable 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 Executable 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/

0
.gitignore vendored Normal file
View file

1
.mdlrc Normal file
View file

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

20
CHANGELOG.md Normal file
View file

@ -0,0 +1,20 @@
# Community Hass.io Add-ons: Example
All notable changes to this add-on will be documented in this file.
The format is based on [Keep a Changelog][keep-a-changelog]
and this project adheres to [Semantic Versioning][semantic-versioning].
## Unreleased
No changes yet
## [v0.0.1] (2017-09-23)
### Added
- Initial version, first release.
[keep-a-changelog]: http://keepachangelog.com/en/1.0.0/
[semantic-versioning]: http://semver.org/spec/v2.0.0.html
[v0.0.1]: https://github.com/hassio-addons/addon-example/tree/v0.0.1

74
CODE_OF_CONDUCT.md Normal file
View file

@ -0,0 +1,74 @@
# Code of conduct
## Our pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
nationality, personal appearance, race, religion, or sexual identity and
orientation.
## Our standards
Examples of behavior that contributes to creating a positive environment
include:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
- The use of sexualized language or imagery and unwelcome sexual attention
or advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or
electronic address, without explicit permission
- Other conduct which could reasonably be considered inappropriate
in a professional setting
## Our responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers 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, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project lead at frenck@addons.community. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project lead is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/

29
CONTRIBUTING.md 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/addon-example/issues
[prs]: https://github.com/hassio-addons/addon-example/pulls

21
LICENSE.md Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017 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.

165
README.md Normal file
View file

@ -0,0 +1,165 @@
# Community Hass.io Add-ons: Example
![Project Stage][project-stage-shield]
![Maintenance][maintenance-shield]
![Awesome][awesome-shield]
[![License][license-shield]](LICENSE.md)
[![Code Climate][codeclimate-shield]][codeclimate]
[![CircleCI][circleci-shield]][circleci]
Example add-on by Community Hass.io add-ons.
## Docker status
[![Docker Architecture][armhf-arch-shield]][armhf-dockerhub]
[![Docker Version][armhf-version-shield]][armhf-microbadger]
[![Docker Layers][armhf-layers-shield]][armhf-microbadger]
[![Docker Pulls][armhf-pulls-shield]][armhf-dockerhub]
[![Docker Architecture][aarch64-arch-shield]][aarch64-dockerhub]
[![Docker Version][aarch64-version-shield]][aarch64-microbadger]
[![Docker Layers][aarch64-layers-shield]][aarch64-microbadger]
[![Docker Pulls][aarch64-pulls-shield]][aarch64-dockerhub]
[![Docker Architecture][amd64-arch-shield]][amd64-dockerhub]
[![Docker Version][amd64-version-shield]][amd64-microbadger]
[![Docker Layers][amd64-layers-shield]][amd64-microbadger]
[![Docker Pulls][amd64-pulls-shield]][amd64-dockerhub]
[![Docker Architecture][i386-arch-shield]][i386-dockerhub]
[![Docker Version][i386-version-shield]][i386-microbadger]
[![Docker Layers][i386-layers-shield]][i386-microbadger]
[![Docker Pulls][i386-pulls-shield]][i386-dockerhub]
## About
This is an example add-on for Hass.io. When started, it will display a
random quote every 5 seconds.
It shows off several features and structures like:
- Full blown GitHub repository.
- General Dockerfile structure and setup.
- The use of the `config.json` file.
- General shell scripting structure (`run.sh`).
- Quality assurance using CodeClimate.
- Continuous integration and deployment using CircleCI.
- Usage of the Community Hass.io Add-ons build environment.
## Stuff not yet in this example
We are still working on adding more cases and examples to this addon.
Things on the short list:
- Add TravisCI example
- Read and use variables from configuration
## Changelog
This repository keeps a [change log](CHANGELOG.md) and adhere to
[Semantic Versioning][semver]. The format of the log is based on
[Keep a Changelog][keepchangelog].
## Support
Got questions?
You have several options to get them answered:
- The Home Assistant [Community Forums][forums], we have a
[dedicated topic][forums] on that forum regarding this repository.
- The Home Assistant [Discord Chat Server][discord] for general Home Assistant
discussions and questions.
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
You could also [open an issue here][issue] GitHub.
## 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've set up a separate document for our [contribution guidelines](CONTRIBUTING.md).
Thank you for being involved! :heart_eyes:
## 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].
## We've got some Hass.io add-ons for you
Want some more functionality to your Hass.io Home Assistant instance?
We have created multiple add-ons for Hass.io. For a full list, check out
our [GitHub Repository][repository].
## License
MIT License
Copyright (c) 2017 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.
[aarch64-arch-shield]: https://img.shields.io/badge/architecture-aarch64-blue.svg
[aarch64-dockerhub]: https://hub.docker.com/r/hassioaddons/example-aarch64
[aarch64-layers-shield]: https://images.microbadger.com/badges/image/hassioaddons/example-aarch64.svg
[aarch64-microbadger]: https://microbadger.com/images/hassioaddons/example-aarch64
[aarch64-pulls-shield]: https://img.shields.io/docker/pulls/hassioaddons/example-aarch64.svg
[aarch64-version-shield]: https://images.microbadger.com/badges/version/hassioaddons/example-aarch64.svg
[amd64-arch-shield]: https://img.shields.io/badge/architecture-amd64-blue.svg
[amd64-dockerhub]: https://hub.docker.com/r/hassioaddons/example-amd64
[amd64-layers-shield]: https://images.microbadger.com/badges/image/hassioaddons/example-amd64.svg
[amd64-microbadger]: https://microbadger.com/images/hassioaddons/example-amd64
[amd64-pulls-shield]: https://img.shields.io/docker/pulls/hassioaddons/example-amd64.svg
[amd64-version-shield]: https://images.microbadger.com/badges/version/hassioaddons/example-amd64.svg
[armhf-arch-shield]: https://img.shields.io/badge/architecture-armhf-blue.svg
[armhf-dockerhub]: https://hub.docker.com/r/hassioaddons/example-armhf
[armhf-layers-shield]: https://images.microbadger.com/badges/image/hassioaddons/example-armhf.svg
[armhf-microbadger]: https://microbadger.com/images/hassioaddons/example-armhf
[armhf-pulls-shield]: https://img.shields.io/docker/pulls/hassioaddons/example-armhf.svg
[armhf-version-shield]: https://images.microbadger.com/badges/version/hassioaddons/example-armhf.svg
[awesome-shield]: https://img.shields.io/badge/awesome%3F-yes-brightgreen.svg
[circleci-shield]: https://img.shields.io/circleci/project/github/hassio-addons/addon-example.svg
[circleci]: https://circleci.com/gh/hassio-addons/addon-example
[codeclimate-shield]: https://img.shields.io/codeclimate/github/hassio-addons/addon-example.svg
[codeclimate]: https://codeclimate.com/github/hassio-addons/addon-example
[contributors]: https://github.com/hassio-addons/addon-example/graphs/contributors
[discord]: https://discord.gg/c5DvZ4e
[forums]: https://community.home-assistant.io/t/repository-community-hass-io-add-ons/24705?u=frenck
[frenck]: https://github.com/frenck
[i386-arch-shield]: https://img.shields.io/badge/architecture-i386-blue.svg
[i386-dockerhub]: https://hub.docker.com/r/hassioaddons/example-i386
[i386-layers-shield]: https://images.microbadger.com/badges/image/hassioaddons/example-i386.svg
[i386-microbadger]: https://microbadger.com/images/hassioaddons/example-i386
[i386-pulls-shield]: https://img.shields.io/docker/pulls/hassioaddons/example-i386.svg
[i386-version-shield]: https://images.microbadger.com/badges/version/hassioaddons/example-i386.svg
[issue]: https://github.com/hassio-addons/addon-example/issues
[keepchangelog]: http://keepachangelog.com/en/1.0.0/
[license-shield]: https://img.shields.io/github/license/hassio-addons/addon-example.svg
[maintenance-shield]: https://img.shields.io/maintenance/yes/2017.svg
[project-stage-shield]: https://img.shields.io/badge/Project%20Stage-Experimental-yellow.svg
[reddit]: https://reddit.com/r/homeassistant
[repository]: https://github.com/hassio-addons/repository
[semver]: http://semver.org/spec/v2.0.0.html

40
example/Dockerfile Normal file
View file

@ -0,0 +1,40 @@
ARG BUILD_FROM=hassioaddons/base-amd64
FROM ${BUILD_FROM}
# Copy root filesystem
COPY rootfs /
RUN \
apk add --no-cache coreutils wget \
&& chmod a+x /run.sh
CMD [ "/run.sh" ]
# Build arugments
ARG BUILD_ARCH
ARG BUILD_DATE
ARG BUILD_DESCRIPTION
ARG BUILD_DOC_URL
ARG BUILD_GIT_URL
ARG BUILD_MAINTAINER
ARG BUILD_NAME
ARG BUILD_REF
ARG BUILD_URL
ARG BUILD_VENDOR
ARG BUILD_VERSION
# Labels
LABEL \
io.hass.arch="${BUILD_ARCH}" \
io.hass.type="addon" \
io.hass.version=${BUILD_VERSION} \
maintainer="${BUILD_MAINTAINER}" \
org.label-schema.description="${BUILD_DESCRIPTION}" \
org.label-schema.build-date=${BUILD_DATE} \
org.label-schema.name="${BUILD_NAME} for ${BUILD_ARCH}" \
org.label-schema.schema-version="1.0" \
org.label-schema.url="${BUILD_URL}" \
org.label-schema.usage="${BUILD_DOC_URL}" \
org.label-schema.vcs-ref=${BUILD_REF} \
org.label-schema.vcs-url="${BUILD_GIT_URL}" \
org.label-schema.vendor="${BUILD_VENDOR}"

27
example/config.json Normal file
View file

@ -0,0 +1,27 @@
{
"name": "Example",
"slug": "example",
"version": "1.0",
"type": "addon",
"description": "Example add-on for Hass.io",
"maintainer": "Franck Nijhof <frenck@addon.community>",
"vendor": "Community Hass.io Addons",
"url": "https://addons.community",
"source": "https://github.com/hassio-addons/addon-example",
"documentation": "https://github.com/hassio-addons/addon-example/tree/master/README.md",
"arch": [
"aarch64",
"amd64",
"armhf",
"i386"
],
"from": "hassioaddons/base-{arch}",
"squashs": true,
"startup": "application",
"boot": "auto",
"image": "hassioaddons/example-{arch}"
}

251
example/rootfs/run.sh Normal file
View file

@ -0,0 +1,251 @@
#!/usr/bin/env bash
# ==============================================================================
#
# Community Hass.io Add-ons: Example
#
# Example add-on for Hass.io.
# This add-on displays a random quote every 5 seconds.
#
# ==============================================================================
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
# ==============================================================================
# GLOBALS
# ==============================================================================
readonly EX_OK=0 # Successful termination
readonly EX_UNKNOWN=1 # Unknown error occured
# Global variables
declare TRAPPED
# Default values
TRAPPED=false
# ==============================================================================
# UTILITY
# ==============================================================================
# ------------------------------------------------------------------------------
# Displays a simple program header
#
# Globals:
# None
# Arguments:
# None
# Returns:
# None
# ------------------------------------------------------------------------------
display_banner() {
echo '---------------------------------------------------------'
echo 'Community Hass.io Add-ons: Example'
echo '---------------------------------------------------------'
}
# ------------------------------------------------------------------------------
# Displays a error message and is able to terminate te script execution
#
# Globals:
# None
# Arguments:
# $1 Error message
# $2 Exit code, script will continue execution when omitted
# Returns:
# None
# ------------------------------------------------------------------------------
display_error_message() {
local status=${1}
local exitcode=${2:-0}
echo >&2
echo " ! ERROR: ${status}"
echo >&2
if [[ ${exitcode} -ne 0 ]]; then
exit "${exitcode}"
fi
}
# ------------------------------------------------------------------------------
# Displays a notice
#
# Globals:
# None
# Arguments:
# $* Notice message to display
# Returns:
# Exit code
# ------------------------------------------------------------------------------
display_notice_message() {
local status=$*
echo
echo "NOTICE: ${status}"
echo
}
# ------------------------------------------------------------------------------
# Displays a status message
#
# Globals:
# None
# Arguments:
# $* Status message to display
# Returns:
# Exit code
# ------------------------------------------------------------------------------
display_status_message() {
local status=$*
echo
echo "-----> ${status}"
echo
}
# ==============================================================================
# SCRIPT LOGIC
# ==============================================================================
# ------------------------------------------------------------------------------
# Cleanup function after execution is of the script is stopped. (trap)
#
# Globals:
# EX_OK
# TRAPPED
# Arguments:
# $1 Exit code
# Returns:
# None
# ------------------------------------------------------------------------------
cleanup_on_exit() {
local exit_code=${1}
# Prevent double cleanup. Thx Bash :)
if [[ "${TRAPPED}" != true ]]; then
# Add your cleanup logic here
display_notice_message "Doing a fake cleanup... ;)"
fi
exit "${exit_code}"
}
# ------------------------------------------------------------------------------
# Get a random quote from quotationspage.com
#
# Globals:
# None
# Arguments:
# None
# Returns:
# None
# ------------------------------------------------------------------------------
get_quote_online() {
local number
local html
local quote
number=$(( ( RANDOM % 999 ) + 1 ))
html=$(wget -q -O - "http://www.quotationspage.com/quote/${number}.html")
quote=$(grep -e "<dt>" -e "</dd>" <<< "${html}" \
| awk -F'[<>]' '{
if($2 ~ /dt/)
{ print $3 }
else if($4 ~ /b/)
{ print "-- " $7 " n(" $19 ")"}
}'
)
echo "${quote}"
}
# ------------------------------------------------------------------------------
# Get a random quote from a prefined set of quotes
#
# Globals:
# None
# Arguments:
# None
# Returns:
# None
# ------------------------------------------------------------------------------
get_quote_offline() {
local -i number
local -a quotes
quotes+=("Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.\n -Samuel Beckett")
quotes+=("Never give up, for that is just the place and time that the tide will turn.\n -Harriet Beecher Stowe")
quotes+=("Our greatest weakness lies in giving up. The most certain way to succeed is always to try just one more time.\n -Thomas A. Edison")
quotes+=("Life isn't about getting and having, it's about giving and being.\n -Kevin Kruse")
quotes+=("Strive not to be a success, but rather to be of value.\n -Albert Einstein")
quotes+=("You miss 100% of the shots you don't take.\n -Wayne Gretzky")
quotes+=("People who are unable to motivate themselves must be content with mediocrity, no matter how impressive their other talents. \n -Andrew Carnegie")
quotes+=("Design is not just what it looks like and feels like. Design is how it works.\n -Steve Jobs")
quotes+=("Only those who dare to fail greatly can ever achieve greatly.\n -Robert F. Kennedy")
quotes+=("All our dreams can come true, if we have the courage to pursue them.\n -Walt Disney")
quotes+=("Success consists of going from failure to failure without loss of enthusiasm.\n -Winston Churchill")
number=$(( ( RANDOM % 11 ) + 1 ))
echo "${quotes[$number]}"
}
# ------------------------------------------------------------------------------
# Displays a random quote
#
# Globals:
# None
# Arguments:
# None
# Returns:
# None
# -----------------------------------------------------------------------------
display_quote() {
local quote
local timestamp
if wget -q --spider http://www.quotationspage.com; then
quote=$(get_quote_online)
else
display_notice_message \
'Could not connect to quotationspage.com, using an offline quote'
quote=$(get_quote_offline)
fi
quote=$(sed 's/n()//g' <<< "${quote}" | xargs -0 echo | fmt -40)
timestamp=$(date +"%T")
display_status_message "Random quote loaded @ ${timestamp}"
echo -e "${quote}"
}
# ==============================================================================
# RUN LOGIC
# ------------------------------------------------------------------------------
# Globals:
# EX_OK
# Arguments:
# None
# Returns:
# None
# ------------------------------------------------------------------------------
main() {
trap 'cleanup_on_exit $?' EXIT SIGINT SIGTERM
# Display program banner
display_banner
# Display a quote every 5 seconds
while true; do
display_quote
sleep 5
done
# Fin
exit "${EX_OK}"
}
# Bootstrap
if [ "${BASH_SOURCE[0]}" = "${0}" ]; then
# Direct call to file
main "$@"
fi # Else file is included from another script

5
repository.json Normal file
View file

@ -0,0 +1,5 @@
{
"name": "Development - Community Hass.io add-on: Example",
"url": "https://github.com/hassio-addons/addon-example",
"maintainer": "Franck Nijhof <frenck@addons.community>"
}