Compare commits
2 Commits
f2e1eab4c0
...
70581e700e
Author | SHA1 | Date | |
---|---|---|---|
|
70581e700e | ||
|
77fe985ff9 |
1
freqtrade-NFIx5/.README.j2
Normal file
1
freqtrade-NFIx5/.README.j2
Normal file
@ -0,0 +1 @@
|
|||||||
|
# Home Assistant Community Add-on: Freqtrade Robot NFI
|
139
freqtrade-NFIx5/DOCS.md
Normal file
139
freqtrade-NFIx5/DOCS.md
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
# Home Assistant Community Add-on: Example
|
||||||
|
|
||||||
|
This is an example add-on for Home Assistant. When started, it displays 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.yaml` and `build.yaml` files.
|
||||||
|
- General shell scripting structure (`run.sh`).
|
||||||
|
- Quality assurance using CodeClimate.
|
||||||
|
- Continuous integration and deployment using GitLab.
|
||||||
|
- Usage of the Community Home Assistant Add-ons build environment.
|
||||||
|
- Small use of the Bash function library in our base images.
|
||||||
|
- The use of Docker label schema.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
The installation of this add-on is pretty straightforward and not different in
|
||||||
|
comparison to installing any other Home Assistant add-on.
|
||||||
|
|
||||||
|
1. Click the Home Assistant My button below to open the add-on on your Home
|
||||||
|
Assistant instance.
|
||||||
|
|
||||||
|
[![Open this add-on in your Home Assistant instance.][addon-badge]][addon]
|
||||||
|
|
||||||
|
1. Click the "Install" button to install the add-on.
|
||||||
|
1. Start the "Example" add-on.
|
||||||
|
1. Check the logs of the "Example" add-on to see it in action.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Eventought this add-on is just an example add-on, it does come with some
|
||||||
|
configuration options to play around with.
|
||||||
|
|
||||||
|
**Note**: _Remember to restart the add-on when the configuration is changed._
|
||||||
|
|
||||||
|
Example add-on configuration:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
log_level: info
|
||||||
|
seconds_between_quotes: 5
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option: `log_level`
|
||||||
|
|
||||||
|
The `log_level` option controls the level of log output by the add-on 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: `seconds_between_quotes`
|
||||||
|
|
||||||
|
Sets the number of seconds between the output of each quote. The value
|
||||||
|
must be between `1` and `120` seconds. This value is set to `5` seconds by
|
||||||
|
default.
|
||||||
|
|
||||||
|
## 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-2024 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.
|
||||||
|
|
||||||
|
[addon-badge]: https://my.home-assistant.io/badges/supervisor_addon.svg
|
||||||
|
[addon]: https://my.home-assistant.io/redirect/supervisor_addon/?addon=a0d7b954_example&repository_url=https%3A%2F%2Fgithub.com%2Fhassio-addons%2Frepository
|
||||||
|
[contributors]: https://github.com/hassio-addons/addon-example/graphs/contributors
|
||||||
|
[discord-ha]: https://discord.gg/c5DvZ4e
|
||||||
|
[discord]: https://discord.me/hassioaddons
|
||||||
|
[forum]: https://community.home-assistant.io/t/repository-community-hass-io-add-ons/24705?u=frenck
|
||||||
|
[frenck]: https://github.com/frenck
|
||||||
|
[issue]: https://github.com/hassio-addons/addon-example/issues
|
||||||
|
[reddit]: https://reddit.com/r/homeassistant
|
||||||
|
[releases]: https://github.com/hassio-addons/addon-example/releases
|
||||||
|
[semver]: http://semver.org/spec/v2.0.0.html
|
60
freqtrade-NFIx5/Dockerfile
Normal file
60
freqtrade-NFIx5/Dockerfile
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
ARG BUILD_FROM=ghcr.io/hassio-addons/base:17.1.0
|
||||||
|
# hadolint ignore=DL3006
|
||||||
|
FROM ${BUILD_FROM}
|
||||||
|
|
||||||
|
ENV LANG C.UTF-8
|
||||||
|
|
||||||
|
# Build arguments
|
||||||
|
ARG BUILD_ARCH
|
||||||
|
ARG BUILD_DATE
|
||||||
|
ARG BUILD_DESCRIPTION
|
||||||
|
ARG BUILD_NAME
|
||||||
|
ARG BUILD_REF
|
||||||
|
ARG BUILD_REPOSITORY
|
||||||
|
ARG BUILD_VERSION
|
||||||
|
|
||||||
|
# Copy root filesystem
|
||||||
|
COPY rootfs /
|
||||||
|
|
||||||
|
# Install necessary dependencies
|
||||||
|
RUN apk add --no-cache git python3 py3-pip curl
|
||||||
|
|
||||||
|
# Set the working directory
|
||||||
|
WORKDIR /freq
|
||||||
|
|
||||||
|
# Clone the Freqtrade repository
|
||||||
|
RUN git clone https://github.com/freqtrade/freqtrade.git /freq
|
||||||
|
# Optionally, switch to the stable branch for novice users
|
||||||
|
ARG FREQTRADE_BRANCH=stable
|
||||||
|
RUN git checkout ${FREQTRADE_BRANCH}
|
||||||
|
|
||||||
|
# Make setup script executable
|
||||||
|
RUN chmod +x ./setup.sh
|
||||||
|
|
||||||
|
# Run the setup script to install dependencies
|
||||||
|
RUN ./setup.sh -i
|
||||||
|
|
||||||
|
# Activate the virtual environment (implicitly handled in entrypoint or CMD)
|
||||||
|
RUN echo "source /freq/.venv/bin/activate" >> ~/.bashrc
|
||||||
|
|
||||||
|
RUN source /freq/.venv/bin/activate
|
||||||
|
RUN pip install --upgrade pip && pip install --user --no-cache-dir --no-build-isolation -r /freqtrade/tests/requirements.txt
|
||||||
|
|
||||||
|
RUN chmod +x /etc/s6-overlay/s6-rc.d/fqmbotnfix5/*
|
||||||
|
|
||||||
|
# Labels
|
||||||
|
LABEL \
|
||||||
|
io.hass.name="Freqtrade NostalgiaForInfinity x5 bot" \
|
||||||
|
io.hass.description="Freqtrade NostalgiaForInfinity x5 bot" \
|
||||||
|
io.hass.arch="${BUILD_ARCH}" \
|
||||||
|
io.hass.type="addon" \
|
||||||
|
io.hass.version="v0.0.0"\
|
||||||
|
maintainer="feres mezned" \
|
||||||
|
org.opencontainers.image.title="Freqtrade NostalgiaForInfinity x5 bot" \
|
||||||
|
org.opencontainers.image.description="Freqtrade NostalgiaForInfinity x5 bot" \
|
||||||
|
org.opencontainers.image.vendor="Home Assistant Local Add-ons" \
|
||||||
|
org.opencontainers.image.authors="Feres MEZNED" \
|
||||||
|
org.opencontainers.image.licenses="NO" \
|
||||||
|
org.opencontainers.image.url="https://mezgit.duckdns.org/mezned/HAddons" \
|
||||||
|
org.opencontainers.image.source="https://mezgit.duckdns.org/mezned/HAddons/freqtrade-NFIx5"
|
||||||
|
|
8
freqtrade-NFIx5/build.yaml
Normal file
8
freqtrade-NFIx5/build.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
build_from:
|
||||||
|
aarch64: ghcr.io/hassio-addons/base:17.1.0
|
||||||
|
amd64: ghcr.io/hassio-addons/base:17.1.0
|
||||||
|
armv7: ghcr.io/hassio-addons/base:17.1.0
|
||||||
|
codenotary:
|
||||||
|
base_image: codenotary@feres.dev
|
||||||
|
signer: codenotary@feres.dev
|
64
freqtrade-NFIx5/config.yaml
Normal file
64
freqtrade-NFIx5/config.yaml
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
---
|
||||||
|
name: "Freqtrade NFI Bot Add-on"
|
||||||
|
version: "1.0.0"
|
||||||
|
slug: "afreqtrade_nfi_bot"
|
||||||
|
description: "Home Assistant add-on that runs Freqtrade NFI Bot"
|
||||||
|
url: https://mezgit.duckdns.org/mezned/HAddons/freqtrade-NFIx5
|
||||||
|
init: false
|
||||||
|
arch:
|
||||||
|
- aarch64
|
||||||
|
- amd64
|
||||||
|
- armv7
|
||||||
|
hassio_api: true
|
||||||
|
homeassistant_api: true
|
||||||
|
auth_api: true
|
||||||
|
docker_api: true
|
||||||
|
host_network: true
|
||||||
|
host_pid: true
|
||||||
|
map:
|
||||||
|
- share:rw
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:rw
|
||||||
|
- /share/fqm_bot_nfix5/user_data:/freqtrade/user_data
|
||||||
|
- /share/fqm_bot_nfix5/user_data/data:/freqtrade/user_data/data
|
||||||
|
- /share/fqm_bot_nfix5/configs:/freqtrade/configs
|
||||||
|
ports:
|
||||||
|
8989/tcp: 8989
|
||||||
|
options:
|
||||||
|
bot_name: "fqm_bot_nfix5"
|
||||||
|
max_open_trade: "4"
|
||||||
|
trading_mode: "spot"
|
||||||
|
exchange_name: "binance"
|
||||||
|
exchange_key: ""
|
||||||
|
exchange_token: ""
|
||||||
|
telegram_enabled: "true"
|
||||||
|
telegram_token: ""
|
||||||
|
telegram_chat_id: ""
|
||||||
|
api_server_enabled: "true"
|
||||||
|
api_server_port: "8989"
|
||||||
|
api_server_username: ""
|
||||||
|
api_server_password: ""
|
||||||
|
api_server_jwt_secret_key: ""
|
||||||
|
api_server_ws_token: ""
|
||||||
|
timezone: "Europe/Paris"
|
||||||
|
dry_run: "true"
|
||||||
|
strategy: "NostalgiaForInfinityX5"
|
||||||
|
log_level: "info"
|
||||||
|
schema:
|
||||||
|
bot_name: str
|
||||||
|
max_open_trade: str
|
||||||
|
trading_mode: str
|
||||||
|
exchange_name: str
|
||||||
|
exchange_key: str
|
||||||
|
exchange_token: str
|
||||||
|
telegram_enabled: str
|
||||||
|
telegram_token: str
|
||||||
|
telegram_chat_id: str
|
||||||
|
api_server_enabled: str
|
||||||
|
api_server_port: str
|
||||||
|
api_server_username: str
|
||||||
|
api_server_password: str
|
||||||
|
api_server_jwt_secret_key: str
|
||||||
|
api_server_ws_token: str
|
||||||
|
dry_run: str
|
||||||
|
strategy: str
|
||||||
|
log_level: list(trace|debug|info|notice|warning|error|fatal)?
|
@ -0,0 +1,45 @@
|
|||||||
|
#!/command/with-contenv bashio
|
||||||
|
# shellcheck shell=bash
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: Example
|
||||||
|
# ==============================================================================
|
||||||
|
declare exit_code
|
||||||
|
readonly exit_code_container=$(</run/s6-linux-init-container-results/exitcode)
|
||||||
|
readonly exit_code_service="${1}"
|
||||||
|
readonly exit_code_signal="${2}"
|
||||||
|
readonly service="fqmbotnfix5"
|
||||||
|
|
||||||
|
bashio::log.info \
|
||||||
|
"Service ${service} exited with code ${exit_code_service}" \
|
||||||
|
"(by signal ${exit_code_signal})"
|
||||||
|
|
||||||
|
# Received a signal
|
||||||
|
if [[ "${exit_code_service}" -eq 256 ]]; then
|
||||||
|
|
||||||
|
# The signal might be a result of another service crashing. Only
|
||||||
|
# overwrite the container exit code if it is not already set.
|
||||||
|
if [[ "${exit_code_container}" -eq 0 ]]; then
|
||||||
|
echo $((128 + $exit_code_signal)) > /run/s6-linux-init-container-results/exitcode
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If the signal is SIGTERM, we should halt the container and take down
|
||||||
|
# the whole process tree.
|
||||||
|
[[ "${exit_code_signal}" -eq 15 ]] && exec /run/s6/basedir/bin/halt
|
||||||
|
|
||||||
|
# The service exited with a non-zero exit code, which means it crashed.
|
||||||
|
elif [[ "${exit_code_service}" -ne 0 ]]; then
|
||||||
|
|
||||||
|
# The service might be a result of another service crashing. Only
|
||||||
|
# overwrite the container exit code if it is not already set.
|
||||||
|
if [[ "${exit_code_container}" -eq 0 ]]; then
|
||||||
|
echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We should halt the container and take down the whole process tree.
|
||||||
|
exec /run/s6/basedir/bin/halt
|
||||||
|
|
||||||
|
# The service exited with a zero exit code, which means it exited, let
|
||||||
|
# S6 supervision restart it.
|
||||||
|
else
|
||||||
|
bashio::log.info "Service ${service} restarting..."
|
||||||
|
fi
|
@ -0,0 +1,56 @@
|
|||||||
|
#!/command/with-contenv bashio
|
||||||
|
# shellcheck shell=bash
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: Example
|
||||||
|
# Example init script, runs before any other service
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
declare log_level
|
||||||
|
|
||||||
|
bashio::log.info 'Starting Freqtrade NostalgiaForInfinity x5 bot...'
|
||||||
|
|
||||||
|
journal_path='/var/log/journal'
|
||||||
|
if ! bashio::fs.directory_exists "${journal_path}" || [ -z "$(ls -A ${journal_path})" ]; then
|
||||||
|
bashio::log.info "No journal at ${journal_path}, looking for journal in /run/log/journal instead"
|
||||||
|
journal_path='/run/log/journal'
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$(bashio::config 'log_level')" in \
|
||||||
|
trace) ;& \
|
||||||
|
debug) log_level='debug' ;; \
|
||||||
|
notice) ;& \
|
||||||
|
warning) log_level='warn' ;; \
|
||||||
|
error) ;& \
|
||||||
|
fatal) log_level='error' ;; \
|
||||||
|
*) log_level='info' ;; \
|
||||||
|
esac;
|
||||||
|
bashio::log.info "Freqtrade log level set to ${log_level}"
|
||||||
|
|
||||||
|
export "JOURNAL_PATH=${journal_path}"
|
||||||
|
export "LOG_LEVEL=${log_level}"
|
||||||
|
|
||||||
|
bashio::log.info "Export Freqtrade environment variables"
|
||||||
|
|
||||||
|
export "FREQTRADE__BOT_NAME=$(bashio::config 'bot_name')"
|
||||||
|
export "FREQTRADE__MAX_OPEN_TRADES=$(bashio::config 'max_open_trade')"
|
||||||
|
export "FREQTRADE__TRADING_MODE=$(bashio::config 'trading_mode')"
|
||||||
|
export "FREQTRADE__EXCHANGE__NAME=$(bashio::config 'exchange_name')"
|
||||||
|
export "FREQTRADE__EXCHANGE__KEY=$(bashio::config 'exchange_key')"
|
||||||
|
export "FREQTRADE__EXCHANGE__SECRET=$(bashio::config 'exchange_token')"
|
||||||
|
export "FREQTRADE__TELEGRAM__ENABLED=$(bashio::config 'telegram_enabled')"
|
||||||
|
export "FREQTRADE__TELEGRAM__TOKEN=$(bashio::config 'telegram_token')"
|
||||||
|
export "FREQTRADE__TELEGRAM__CHAT_ID=$(bashio::config 'telegram_chat_id')"
|
||||||
|
export "FREQTRADE__API_SERVER__ENABLED=$(bashio::config 'api_server_enabled')"
|
||||||
|
export "FREQTRADE__API_SERVER__LISTEN_PORT=$(bashio::config 'api_server_port')"
|
||||||
|
export "FREQTRADE__API_SERVER__USERNAME=$(bashio::config 'api_server_username')"
|
||||||
|
export "FREQTRADE__API_SERVER__PASSWORD=$(bashio::config 'api_server_password')"
|
||||||
|
export "FREQTRADE__API_SERVER__JWT_SECRET_KEY=$(bashio::config 'api_server_jwt_secret_key')"
|
||||||
|
export "FREQTRADE__API_SERVER__WS_TOKEN=$(bashio::config 'api_server_ws_token')"
|
||||||
|
# Time Zone
|
||||||
|
export "TZ=$(bashio::config 'timezone')"
|
||||||
|
export "FREQTRADE__DRY_RUN=$(bashio::config 'dry_run')"
|
||||||
|
export "FREQTRADE__STRATEGY=$(bashio::config 'strategy')"
|
||||||
|
|
||||||
|
bashio::log.info "starting the bot ..."
|
||||||
|
|
||||||
|
exec /freqtrade/.venv/bin/freqtrade trade --db-url sqlite:////freqtrade/user_data/${FREQTRADE__BOT_NAME:-Example_Test_Account}_${FREQTRADE__EXCHANGE__NAME:-binance}_${FREQTRADE__TRADING_MODE:-spot}-tradesv3.sqlite --log-file /freqtrade/user_data/logs/${FREQTRADE__BOT_NAME:-Example_Test_Account}-${FREQTRADE__EXCHANGE__NAME:-binance}-${FREQTRADE__STRATEGY:-NostalgiaForInfinityX5}-${FREQTRADE__TRADING_MODE:-spot}.log
|
@ -0,0 +1 @@
|
|||||||
|
longrun
|
Loading…
x
Reference in New Issue
Block a user