initial commit

This commit is contained in:
kvanzuijlen 2025-06-29 23:13:20 +02:00
commit 16b4bfdda0
No known key found for this signature in database
GPG Key ID: F6E2BB1491382385
10 changed files with 283 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
/.idea/
/*.iml

27
Dockerfile Normal file
View File

@ -0,0 +1,27 @@
# Dockerfile for Tuya IPC Terminal Add-on
ARG BUILD_FROM
FROM golang:1.24-bookworm AS builder
# Set up environment
ENV LANG=C.UTF-8
# Clone the tuya-ipc-terminal repository and install dependencies
RUN git clone https://github.com/seydx/tuya-ipc-terminal.git /usr/src/app
WORKDIR /usr/src/app
RUN chmod +x build.sh && ./build.sh
FROM ${BUILD_FROM}
COPY --from=builder /usr/src/app/tuya-ipc-terminal /usr/bin/
# Copy run script
COPY run.sh /
COPY tuya_auth_qr.exp /
RUN chmod a+x /run.sh && chmod +x /tuya_auth_qr.exp && chmod a+x /usr/bin/tuya-ipc-terminal
RUN apt-get update && apt-get install -y expect && apt-get clean
RUN mkdir -p /config
WORKDIR /config
# Start the application
CMD [ "/run.sh" ]

21
LICENSE Normal file
View File

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

125
README.md Normal file
View File

@ -0,0 +1,125 @@
# Home Assistant Add-on: Tuya IPC Terminal
!license: MIT
Expose your Tuya-based security cameras as standard RTSP streams within your local network.
This addon builds on the awesome work of @seydx on [Tuya IPC Terminal](https://github.com/seydx/tuya-ipc-terminal)
and makes integration with Home Assistant a little bit easier.
## About
This addon integrates the tuya-ipc-terminal application into Home Assistant. It authenticates with your Tuya account,
discovers your compatible IP cameras, and creates a local RTSP stream for each one.
This allows you to use your Tuya cameras with any RTSP-compatible software, including Home Assistant's camera
integrations, VLC, Frigate, or other NVR systems, without relying on cloud-based P2P connections for viewing.
## Features
- **Local RTSP Streams**: Keeps video traffic on your local network for lower latency and improved privacy.
- **Simple Authentication**: Uses a one-time QR code login process with your Tuya/Smart Life mobile app.
- **Auto-Discovery**: Automatically discovers and refreshes your camera list on startup.
- **Wide Compatibility**: Works with any RTSP-compatible client or NVR software.
## Installation
### Automatic
[![Open your Home Assistant instance and show the add add-on repository dialog with a specific repository URL
pre-filled.](https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg)
](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Fkvanzuijlen%2Fhomeassistant-tuya-ipc-terminal-addon)
1. Click on the button above (see the official [docs](https://my.home-assistant.io/) for more information)
2. Click Add
3. Close the dialog and refresh the page. The "Tuya IPC Terminal" addon will now appear in the store.
4. Click on the "Tuya IPC Terminal" addon and then click Install.
### Manual
1. Navigate to your Home Assistant instance.
2. Go to Settings > Add-ons > Add-on Store.
3. Click the 3-dots menu in the top-right corner and select Repositories.
4. Add the URL of this repository and click Add.
5. Close the dialog and refresh the page. The "Tuya IPC Terminal" addon will now appear in the store.
6. Click on the "Tuya IPC Terminal" addon and then click Install.
## Configuration
### Step 1: Add-on Options
Before starting the addon, you must configure it with your Tuya account details.
1. On the addon page, go to the Configuration tab.
2. Set the following options:
- **TUYA_EMAIL**: The email address associated with your Tuya Smart or Smart Life account.
- **TUYA_REGION**: The cloud region your account is registered in. Common values are:
- eu-central
- eu-east
- us-west
- us-east
- china
- india
- See [this list](https://github.com/seydx/tuya-ipc-terminal#-authentication-management)
3. Click Save.
### Step 2: First-Time Authentication (QR Code)
The addon uses a one-time QR code process to securely log into your account. This QR will be valid for 20 seconds,
after which the addon will need to be restarted.
1. Open the Tuya or Smart Life app on your smartphone.
2. Click Start to run the addon for the first time.
3. Go to the addon's Log tab on your desktop/laptop or another separate device.
4. The logs will refresh, and you will see a large QR code appear.
5. In the app, go to your profile tab and then find the Scan button (usually in the top-right corner).
6. Scan the QR code displayed in the addon logs.
7. Confirm the login on your phone.
8. The addon will automatically detect the successful login and proceed. On success, it creates a `.tuya-data` folder in
9. the `/addon_configs/966623c8_tuya_ipc_terminal` directory to store authentication tokens, so you only need to do this once.
### Step 3: Finding Your Camera Streams
Once authentication is complete, the addon will start the RTSP server and list the URLs for your cameras.
1. Look at the logs again. After the authentication messages, you will see entries for each camera, like this:
```log
22:53:35.138 INF Available endpoints:
22:53:35.139 INF rtsp://localhost:8554/Front_Door_Cam (Front Door Cam)
22:53:35.139 INF rtsp://localhost:8554/Backyard_Cam (Backyard Cam)
22:53:35.139 INF RTSP server is running. Press Ctrl+C to stop.
```
2. Copy the RTSP URL for the camera you wish to add to Home Assistant or another client.
## Usage in Home Assistant
The easiest way to add your camera to the Home Assistant dashboard is by using the Generic Camera integration.
1. Go to Settings > Devices & Services.
2. Click Add Integration and search for Generic Camera.
3. Fill out the configuration:
- Stream Source URL: Paste the RTSP URL you copied from the addon logs.
- Authentication: Select None, as authentication is not required for the local stream.
4. Click Submit, and your camera feed should now be available as an entity in Home Assistant.
Other ways to add your camera to Home Assistant are via integrations like Frigate or MotionEye.
## Re-authenticating
If your authentication token expires or you change your password, you may need to re-authenticate.
1. Stop the Tuya IPC Terminal addon.
2. Use the File editor, Samba, or Terminal addon to access your Home Assistant configuration files.
3. Navigate to the `/addon_configs/966623c8_tuya_ipc_terminal` directory.
4. Delete the entire `.tuya-data` folder.
5. Start the Tuya IPC Terminal addon again and follow the QR code authentication steps from above.
## Troubleshooting
- QR Code Expired: The authentication process has a 20 second timeout. Be ready to scan the QR code as soon as it
appears in the logs. If you miss it, simply restart the addon to generate a new one.
- No Cameras Found:
- Verify that your cameras are online and visible in your Tuya Smart/Smart Life app.
- Double-check that the `TUYA_EMAIL` and `TUYA_REGION` in the addon configuration are correct.
- RTSP Stream Not Working:
- Ensure the RTSP URL is correct.
- Verify that port `8554` is correctly mapped in the addon's Network configuration section.
- Check the addon logs for any error messages related to the RTSP server.
- See the [Tuya IPC Terminal docs](https://github.com/seydx/tuya-ipc-terminal#-complete-documentation)

11
build.yaml Normal file
View File

@ -0,0 +1,11 @@
build_from:
aarch64: "homeassistant/aarch64-base-debian:bookworm"
amd64: "homeassistant/amd64-base-debian:bookworm"
armhf: "homeassistant/armhf-base-debian:bookworm"
armv7: "homeassistant/armv7-base-debian:bookworm"
i386: "homeassistant/i386-base-debian:bookworm"
labels:
org.opencontainers.image.title: "Home Assistant Add-on: Tuya IPC Terminal"
org.opencontainers.image.description: "Tuya IPC Terminal"
org.opencontainers.image.source: "https://github.com/seydx/tuya-ipc-terminal"
org.opencontainers.image.licenses: "MIT"

27
config.yaml Normal file
View File

@ -0,0 +1,27 @@
# Home Assistant add-on configuration for Tuya IPC Terminal
name: Tuya IPC Terminal
version: "1.0.0"
slug: tuya_ipc_terminal
description: "Exposes Tuya camera streams as RTSP feeds"
arch:
- aarch64
- amd64
- armhf
- armv7
- i386
init: false
startup: "application"
boot: "auto"
options:
TUYA_EMAIL: ""
TUYA_REGION: "eu-central"
schema:
TUYA_EMAIL: "email"
TUYA_REGION: "str"
ports:
8554/tcp: 8554
ports_description:
8554/tcp: "RTSP stream"
map:
- type: addon_config
read_only: False

BIN
icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

29
run.sh Normal file
View File

@ -0,0 +1,29 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Home Assistant Add-on: Tuya IPC Terminal
#
# This script starts the Tuya IPC Terminal application with the configured
# options.
# ==============================================================================
# Read configuration options
readonly TUYA_EMAIL=$(bashio::config 'TUYA_EMAIL')
readonly TUYA_REGION=$(bashio::config 'TUYA_REGION')
# Check if required options are set
if [[ -z "${TUYA_EMAIL}" ]]; then
bashio::log.fatal "Please configure your Tuya email in the addon options."
exit 1
fi
# Authenticate with Tuya
bashio::log.info "Authenticating with Tuya..."
printf "%s\n%s\n" "${TUYA_REGION}" "${TUYA_EMAIL}" | /tuya_auth_qr.exp
# Refresh camera list
bashio::log.info "Refreshing camera list..."
tuya-ipc-terminal cameras refresh
# Start the RTSP server
bashio::log.info "Starting RTSP server on port 8554..."
tuya-ipc-terminal rtsp start --port 8554

40
tuya_auth_qr.exp Normal file
View File

@ -0,0 +1,40 @@
#!/usr/bin/expect -f
# Check if the config directory already exists.
set config_dir "/config/.tuya-data"
if { [file isdirectory $config_dir] } {
# If it exists, print a message and exit successfully.
puts "Skipping authentication: Configuration directory '$config_dir' already exists. To re-authenticate, delete the folder from the addon config folder."
exit 0
}
# If the directory does not exist, proceed with authentication.
puts "Configuration directory not found. Proceeding with authentication..."
# Set a timeout for the expect command to wait for a response.
set timeout 20
# Read the region from the first line of standard input.
gets stdin region
if { [eof stdin] || $region eq "" } {
puts stderr "Error: Could not read region from stdin or region is empty."
exit 1
}
# Read the email from the second line of standard input.
gets stdin email
if { [eof stdin] || $email eq "" } {
puts stderr "Error: Could not read email from stdin or email is empty."
exit 1
}
# Spawn the tuya-ipc-terminal command, using the email variable.
spawn tuya-ipc-terminal auth add $region $email --qr
expect "Press Enter after scanning to continue"
# Send the Enter key
send "\r"
expect eof
wait