initial commit
This commit is contained in:
commit
16b4bfdda0
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/.idea/
|
||||
/*.iml
|
||||
|
||||
27
Dockerfile
Normal file
27
Dockerfile
Normal 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
21
LICENSE
Normal 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
125
README.md
Normal 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
|
||||
|
||||
[
|
||||
](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
11
build.yaml
Normal 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
27
config.yaml
Normal 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
|
||||
29
run.sh
Normal file
29
run.sh
Normal 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
40
tuya_auth_qr.exp
Normal 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
|
||||
Loading…
x
Reference in New Issue
Block a user