Standalone with https

This commit is contained in:
Devmel Apps
2025-10-09 14:18:37 +02:00
parent c5f99dae9b
commit 04a0bef826
4 changed files with 100 additions and 18 deletions
+51 -12
View File
@@ -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.
+12 -1
View File
@@ -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
+16
View File
@@ -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;
}
}
}
+20 -4
View File
@@ -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
# 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