From 04a0bef82621980d0393a009c2cd5e6982ef720b Mon Sep 17 00:00:00 2001 From: Devmel Apps Date: Thu, 9 Oct 2025 14:18:37 +0200 Subject: [PATCH] Standalone with https --- README.md | 63 +++++++++++++++++++++++++++++++-------- addons/airsend/Dockerfile | 13 +++++++- addons/airsend/nginx.conf | 16 ++++++++++ addons/airsend/run.sh | 26 ++++++++++++---- 4 files changed, 100 insertions(+), 18 deletions(-) create mode 100644 addons/airsend/nginx.conf diff --git a/README.md b/README.md index 85b38b2..438ec3a 100644 --- a/README.md +++ b/README.md @@ -11,21 +11,60 @@ Home Assistant Addon to control an AirSend device in a local network. ## Manual Installation -1. Into the terminal, run `wget -q -O - https://raw.githubusercontent.com/devmel/hass_airsend-addon/master/install | bash -` - OR copy the `airsend` folder into your [addon folder](https://developers.home-assistant.io/docs/creating_integration_file_structure/#where-home-assistant-looks-for-integrations). -2. In Supervisor -> Add-on store -> Local add-ons, refresh, install and start AirSend addon +#### 1. Install the Add-on +Run the following command in your terminal: +```bash +wget -q -O - https://raw.githubusercontent.com/devmel/hass_airsend-addon/master/install bash - +``` +**OR** +Manually copy the `airsend` folder into your [Home Assistant addons directory](https://developers.home-assistant.io/docs/creating_integration_file_structure/#where-home-assistant-looks-for-integrations). + +#### 2. Start the Add-on +1. Go to **Supervisor** → **Add-on Store** → **Local add-ons**. +2. Refresh the list, then install and start the **AirSend** add-on. ## Install on an external machine -1. Clone repository -2. Generate your API key: [link to your profile](https://my.home-assistant.io/redirect/profile/) (security tab, long-lived access tokens) -3. Go to addons/airsend folder -4. Depending on your machine architecture, run in a terminal. Example with amd64: `docker build --build-arg "BUILD_FROM=ghcr.io/home-assistant/amd64-base:3.22" -t hass_airsend-addon .` -5. Depending on your home assistant server and your token, run in a terminal. Example with homeassistant.local:8123: +#### 1. Clone the Repository +```bash +git clone https://github.com/devmel/hass_airsend-addon +cd hass_airsend-addon/addons/airsend +``` + +#### 2. Generate a Home Assistant API Key +1. Go to your [Home Assistant profile](https://my.home-assistant.io/redirect/profile/). +2. Navigate to the **Security** tab. +3. Generate a **long-lived access token** (use this as `HASS_TOKEN`). + +--- + +#### 3. Build the Docker Image +Replace `amd64` with your machine's architecture if needed (`armhf`, `armv7`, `aarch64`, etc.): +```bash +docker build --build-arg "BUILD_FROM=ghcr.io/home-assistant/amd64-base:3.22" -t hass_airsend-addon . +``` + +--- + +#### 4. Run the Docker Container +Adjust the environment variables according to your setup: ```bash docker run -dp 33863:33863 \ --e HASS_HOST='homeassistant.local:8123' \ --e HASS_TOKEN='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJiZDg1MWJlNjE1NmM0Zjc4YTRiNzhjZjRlMDc4MWZiMCIsImlhdCI6MTY5MTIyOTg5MCwiZXhwIjoyMDA2NTg5ODkwfQ._ECys-uPkM8fn1W2wvjzIJ9HLJcI7RHmZmix_2C9QgU' \ --e HASS_AUTOINCLUDE=0 \ -hass_airsend-addon + -e HTTPS=1 \ + -e HASS_HOST='homeassistant.local:8123' \ + -e HASS_TOKEN='your_token_here' \ + -e HASS_AUTOINCLUDE=0 \ + hass_airsend-addon ``` + +##### Environment Variables: +- HTTPS=1: Enables HTTPS. Use HTTPS=0 if you cannot handle self-signed certificates. +- HASS_HOST: Your Home Assistant server address and port (e.g., homeassistant.local:8123). +- HASS_TOKEN: The long-lived access token you generated. +- HASS_AUTOINCLUDE: Set to 0 to disable auto-inclusion of the add-on in Home Assistant. + +--- + +### Important Notes +- **Security**: Never share your `HASS_TOKEN`. +- **HTTPS**: If `HTTPS=0`, ensure your network is secure. diff --git a/addons/airsend/Dockerfile b/addons/airsend/Dockerfile index f47433e..b418a58 100644 --- a/addons/airsend/Dockerfile +++ b/addons/airsend/Dockerfile @@ -4,8 +4,10 @@ FROM $BUILD_FROM ENV HASS_HOST= ENV HASS_TOKEN= ENV HASS_AUTOINCLUDE=0 +ENV HTTPS=1 # Copy data for add-on +COPY nginx.conf /etc/nginx/nginx.conf COPY hassapi.class.php /home COPY hass_cb.php /home COPY state_post.sh /home @@ -18,7 +20,16 @@ RUN chmod a+x /run.sh # Install AirSendWebService RUN mkdir -p /home && cd /home && wget http://devmel.com/dl/AirSendWebService.tgz && tar -zxvf AirSendWebService.tgz && chmod -R 777 bin -RUN apk add php php-curl +# Install Services +RUN apk add php php-curl nginx openssl + +# Generate self-signed certificate +RUN mkdir -p /etc/nginx/ssl +RUN openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ + -subj "/C=FR/ST=France/L=Paris/O=AirSendWebService/CN=localhost" \ + -keyout /etc/nginx/ssl/selfsigned.key \ + -out /etc/nginx/ssl/selfsigned.crt + # Start AirSendWebService CMD [ "/run.sh" ] EXPOSE 33863 diff --git a/addons/airsend/nginx.conf b/addons/airsend/nginx.conf new file mode 100644 index 0000000..ea4762d --- /dev/null +++ b/addons/airsend/nginx.conf @@ -0,0 +1,16 @@ +events {} +http { + server { + listen 33863 ssl; + server_name _; + + ssl_certificate /etc/nginx/ssl/selfsigned.crt; + ssl_certificate_key /etc/nginx/ssl/selfsigned.key; + + location / { + proxy_pass http://127.0.0.1:33864; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + } +} diff --git a/addons/airsend/run.sh b/addons/airsend/run.sh index 9a90b05..97326e0 100644 --- a/addons/airsend/run.sh +++ b/addons/airsend/run.sh @@ -9,11 +9,8 @@ case "$arch" in \ amd64) arch='x86_64' ;; \ i386) arch='x86' ;; \ esac; -echo "AirSendWebService arch: ${arch}" - -# Start AirSendWebService ulimit -n 4096 -./bin/unix/${arch}/AirSendWebService 99399 +echo "AirSendWebService arch: ${arch}" CALLBACK_PID= if [ -n "${SUPERVISOR_TOKEN:-}" ] @@ -21,14 +18,33 @@ then hname="$(hostname -i)" echo "internal_url: http://${hname}:33863/" echo $(bashio::config 'auto_include') > auto_include.cfg + # Start AirSendWebService + ./bin/unix/${arch}/AirSendWebService 99399 # Start hass callback service php -S 127.0.0.1:80 hass_cb.php & CALLBACK_PID=$! elif [ -n "${HASS_HOST:-}" ] && [ -n "${HASS_TOKEN:-}" ] then - echo "internal_url: http://{YOUR_DOCKER_MACHINE_IP}:33863/" + # Start AirSendWebService + if [ "${HTTPS:-0}" -eq 1 ]; then + ./bin/unix/${arch}/AirSendWebService 33864 + nginx + echo "internal_url: https://{YOUR_DOCKER_MACHINE_IP}:33863/" + else + ./bin/unix/${arch}/AirSendWebService 99399 + echo "internal_url: http://{YOUR_DOCKER_MACHINE_IP}:33863/" + fi # Start hass callback service php -S 127.0.0.1:80 hass_cb.php & CALLBACK_PID=$! else + # Start AirSendWebService + if [ "${HTTPS:-0}" -eq 1 ]; then + ./bin/unix/${arch}/AirSendWebService 33864 + nginx + echo "example: curl -k https://{YOUR_DOCKER_MACHINE_IP}:33863/" + else + ./bin/unix/${arch}/AirSendWebService 99399 + echo "example: curl http://{YOUR_DOCKER_MACHINE_IP}:33863/" + fi echo "Running the AirSendWebService only..." fi