TuyaHotel is a first version prototype and study project, created as a learning tool to support the development of a larger hotel automation and management system.
This initial version aims to explore the integration of a smart hotel environment using the Tuya Cloud API, with a full-stack architecture designed to simulate room and device control in real-time.
This project helps validate technical decisions, test cloud-based IoT integration, and understand the workflow between frontend, backend, and the Tuya ecosystem.
Note: This is an early-stage, experimental version, not intended for production.
- Technologies Used
- Main Features
- Prerequisites
- Installation
- Configuration
- Usage
- Project Structure
- API Documentation
- Troubleshooting
- Contributing
- License
- Português
- Backend: Python (FastAPI)
- Frontend: React with TypeScript
- Database: MongoDB (Motor AsyncIO)
- APIs: Tuya Cloud APIs
- Authentication: Tuya OAuth 2.0 (token-based)
- Real-time Communication: WebSocket (native WebSocket API)
- UI Framework: Material-UI (MUI)
- HTTP Client: Axios
- Data Format: JSON for API communication
- Execution Environment: Localhost (development setup)
- Authentication using Tuya OAuth 2.0 (client credentials)
- Token lifecycle management (access/refresh)
- Requests for retrieving, listing, and managing IoT devices
- Real-time device status updates via WebSocket
- Hotel room registration and management
- Device association per room
- Basic state control (on/off, dimming, etc.)
- Device activity logging
- Built with React and TypeScript for modular and responsive UI
- Material-UI components for modern design
- Real-time device updates via WebSocket
- Communication with FastAPI backend via HTTP
- Visual interface for listing rooms and controlling devices
Before you begin, ensure you have the following installed:
- Node.js (v16 or higher) and npm
- Python (v3.8 or higher)
- MongoDB (local or cloud instance)
- Tuya Developer Account with API credentials
- Access ID
- Access Key
- API Endpoint
- MQ Endpoint (for real-time updates)
git clone https://github.com/JONTK123/TuyaHotel.git
cd TuyaHotel# Install Python dependencies
pip install fastapi uvicorn motor python-dotenv tuya-connector-pythonNote: Consider creating a requirements.txt file for better dependency management.
# Navigate to client directory
cd client
# Install npm packages
npm install
# Return to root directory
cd ..Create a .env file in the root directory with the following variables:
# Tuya API Credentials
ACCESS_ID=your_tuya_access_id
ACCESS_KEY=your_tuya_access_key
API_ENDPOINT=https://openapi.tuyaus.com
MQ_ENDPOINT=wss://mqe.tuyaus.com:8285/
# MongoDB Configuration
MONGO_URI=mongodb://localhost:27017
DATABASE_NAME=tuya_hotel
COLLECTION_ROOMS=rooms
COLLECTION_DEVICE_LOGS=device_logs- Create an account at Tuya IoT Platform
- Create a new Cloud Project
- Subscribe to required APIs (Device Management, Device Control)
- Copy your Access ID and Access Key
- Link your Tuya devices to the project
Ensure MongoDB is running locally or update the MONGO_URI in your .env file with your MongoDB connection string.
# From the root directory
uvicorn server.main:app --reload --host 0.0.0.0 --port 8000The backend will be available at http://localhost:8000
# In a new terminal, navigate to client directory
cd client
# Start the React development server
npm startThe frontend will be available at http://localhost:3000
The project includes a mock Tuya API for testing without actual devices. In server/main.py, you'll find two lines near the top of the file:
# openapi = initialize_tuya_openapi()
openapi = MockTuyaAPI()- To use the mock API (default), keep it as shown above
- To use the real Tuya API, swap the comments (uncomment the first line and comment the second)
TuyaHotel/
├── client/ # React frontend application
│ ├── public/ # Static files
│ ├── src/ # Source code
│ │ ├── components/ # React components
│ │ ├── pages/ # Page components
│ │ ├── App.tsx # Main app component
│ │ └── index.tsx # Entry point
│ ├── package.json # Frontend dependencies
│ └── tsconfig.json # TypeScript configuration
├── server/ # Python backend application
│ ├── main.py # FastAPI main application
│ ├── tuya_setup.py # Tuya API initialization
│ ├── database.py # MongoDB connection
│ ├── models.py # Data models
│ ├── device_control.py # Device control routes
│ └── websocket_manager.py # WebSocket management
├── tests/ # Test files
│ └── MockTuyaAPI.py # Mock Tuya API for testing
├── .env # Environment variables (create this)
├── .gitignore # Git ignore rules
├── package.json # Root package configuration
└── README.md # This file
GET /api/rooms- List all hotel roomsPOST /api/rooms- Create a new roomGET /api/rooms/{room_id}- Get room detailsPUT /api/rooms/{room_id}- Update room informationDELETE /api/rooms/{room_id}- Delete a room
GET /api/devices- List all devicesGET /api/devices/{device_id}- Get device statusPOST /api/devices/{device_id}/control- Control device stateGET /api/rooms/{room_id}/devices- List devices in a room
WS /ws- WebSocket connection for real-time updates
The frontend uses Axios to communicate with the backend. All API calls are made to http://localhost:8000/api.
Backend won't start:
- Ensure all Python dependencies are installed
- Check that MongoDB is running and accessible
- Verify
.envfile exists with correct credentials
Frontend won't start:
- Delete
node_modulesandpackage-lock.json, then runnpm installagain - Clear npm cache:
npm cache clean --force - Ensure Node.js version is 16 or higher
Devices not responding:
- Verify Tuya API credentials are correct
- Check that devices are linked to your Tuya project
- Ensure devices are online in the Tuya app
- Check API endpoint matches your region (US, EU, CN, IN)
CORS errors:
- Ensure the frontend port is listed in the CORS origins in
server/main.py - Clear browser cache and restart both servers
WebSocket connection fails:
- Check that both servers are running
- Verify firewall settings allow WebSocket connections
- Check browser console for error messages
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Serve as a technical exploration of Tuya's APIs
- Prototype a full-stack architecture suitable for smart hotel control
- Build a foundation to scale into a more complex and professional solution
TuyaHotel é um protótipo em primeira versão e projeto de estudo, criado como ferramenta de aprendizado para dar suporte ao desenvolvimento de um sistema maior de automação e gerenciamento hoteleiro.
Esta versão tem como foco explorar a integração de um ambiente hoteleiro inteligente utilizando a Tuya Cloud API, com uma arquitetura full-stack que simula o controle de quartos e dispositivos em tempo real.
O projeto ajuda a validar decisões técnicas, testar a integração com infraestrutura IoT baseada em nuvem, e entender o fluxo entre frontend, backend e o ecossistema da Tuya.
Nota: Esta é uma versão experimental e inicial, sem fins de uso em produção.
- Tecnologias Utilizadas
- Funcionalidades Principais
- Pré-requisitos
- Instalação
- Configuração
- Como Usar
- Estrutura do Projeto
- Documentação da API
- Solução de Problemas
- Como Contribuir
- Licença
- Backend: Python (FastAPI)
- Frontend: React com TypeScript
- Banco de Dados: MongoDB (Motor AsyncIO)
- APIs: Tuya Cloud APIs
- Autenticação: OAuth 2.0 da Tuya (baseada em token)
- Comunicação em Tempo Real: WebSocket (API WebSocket nativa)
- Framework UI: Material-UI (MUI)
- Cliente HTTP: Axios
- Formato de Dados: JSON (para comunicação via API)
- Ambiente de Execução: Localhost (modo de desenvolvimento)
- Autenticação usando OAuth 2.0 da Tuya (credenciais de cliente)
- Gerenciamento do ciclo de vida de tokens (acesso/renovação)
- Requisições para recuperar, listar e gerenciar dispositivos IoT
- Atualizações de status de dispositivos em tempo real via WebSocket
- Registro e gerenciamento de quartos de hotel
- Associação de dispositivos por quarto
- Controle básico de estado (ligar/desligar, dimerização, etc.)
- Registro de atividades dos dispositivos
- Construída com React e TypeScript para UI modular e responsiva
- Componentes Material-UI para design moderno
- Atualizações de dispositivos em tempo real via WebSocket
- Comunicação com backend FastAPI via HTTP
- Interface visual para listagem de quartos e controle de dispositivos
Antes de começar, certifique-se de ter instalado:
- Node.js (v16 ou superior) e npm
- Python (v3.8 ou superior)
- MongoDB (instância local ou na nuvem)
- Conta de Desenvolvedor Tuya com credenciais de API
- Access ID
- Access Key
- API Endpoint
- MQ Endpoint (para atualizações em tempo real)
git clone https://github.com/JONTK123/TuyaHotel.git
cd TuyaHotel# Instalar dependências Python
pip install fastapi uvicorn motor python-dotenv tuya-connector-pythonNota: Considere criar um arquivo requirements.txt para melhor gerenciamento de dependências.
# Navegar para o diretório do cliente
cd client
# Instalar pacotes npm
npm install
# Retornar ao diretório raiz
cd ..Crie um arquivo .env no diretório raiz com as seguintes variáveis:
# Credenciais da API Tuya
ACCESS_ID=seu_access_id_tuya
ACCESS_KEY=sua_access_key_tuya
API_ENDPOINT=https://openapi.tuyaus.com
MQ_ENDPOINT=wss://mqe.tuyaus.com:8285/
# Configuração do MongoDB
MONGO_URI=mongodb://localhost:27017
DATABASE_NAME=tuya_hotel
COLLECTION_ROOMS=rooms
COLLECTION_DEVICE_LOGS=device_logs- Crie uma conta na Plataforma IoT Tuya
- Crie um novo Projeto Cloud
- Inscreva-se nas APIs necessárias (Gerenciamento de Dispositivos, Controle de Dispositivos)
- Copie seu Access ID e Access Key
- Vincule seus dispositivos Tuya ao projeto
Certifique-se de que o MongoDB está em execução localmente ou atualize o MONGO_URI no arquivo .env com sua string de conexão MongoDB.
# Do diretório raiz
uvicorn server.main:app --reload --host 0.0.0.0 --port 8000O backend estará disponível em http://localhost:8000
# Em um novo terminal, navegue até o diretório client
cd client
# Iniciar o servidor de desenvolvimento React
npm startO frontend estará disponível em http://localhost:3000
O projeto inclui uma API Tuya mock para testes sem dispositivos reais. No arquivo server/main.py, você encontrará duas linhas no início do arquivo:
# openapi = initialize_tuya_openapi()
openapi = MockTuyaAPI()- Para usar a API mock (padrão), mantenha como mostrado acima
- Para usar a API Tuya real, troque os comentários (descomente a primeira linha e comente a segunda)
TuyaHotel/
├── client/ # Aplicação frontend React
│ ├── public/ # Arquivos estáticos
│ ├── src/ # Código fonte
│ │ ├── components/ # Componentes React
│ │ ├── pages/ # Componentes de páginas
│ │ ├── App.tsx # Componente principal da app
│ │ └── index.tsx # Ponto de entrada
│ ├── package.json # Dependências do frontend
│ └── tsconfig.json # Configuração TypeScript
├── server/ # Aplicação backend Python
│ ├── main.py # Aplicação principal FastAPI
│ ├── tuya_setup.py # Inicialização da API Tuya
│ ├── database.py # Conexão MongoDB
│ ├── models.py # Modelos de dados
│ ├── device_control.py # Rotas de controle de dispositivos
│ └── websocket_manager.py # Gerenciamento WebSocket
├── tests/ # Arquivos de teste
│ └── MockTuyaAPI.py # API Tuya mock para testes
├── .env # Variáveis de ambiente (criar este arquivo)
├── .gitignore # Regras do Git ignore
├── package.json # Configuração do pacote raiz
└── README.md # Este arquivo
GET /api/rooms- Listar todos os quartos do hotelPOST /api/rooms- Criar um novo quartoGET /api/rooms/{room_id}- Obter detalhes do quartoPUT /api/rooms/{room_id}- Atualizar informações do quartoDELETE /api/rooms/{room_id}- Deletar um quarto
GET /api/devices- Listar todos os dispositivosGET /api/devices/{device_id}- Obter status do dispositivoPOST /api/devices/{device_id}/control- Controlar estado do dispositivoGET /api/rooms/{room_id}/devices- Listar dispositivos em um quarto
WS /ws- Conexão WebSocket para atualizações em tempo real
O frontend usa Axios para se comunicar com o backend. Todas as chamadas de API são feitas para http://localhost:8000/api.
Backend não inicia:
- Certifique-se de que todas as dependências Python estão instaladas
- Verifique se o MongoDB está em execução e acessível
- Verifique se o arquivo
.envexiste com as credenciais corretas
Frontend não inicia:
- Delete
node_modulesepackage-lock.json, depois executenpm installnovamente - Limpe o cache do npm:
npm cache clean --force - Certifique-se de que a versão do Node.js é 16 ou superior
Dispositivos não respondem:
- Verifique se as credenciais da API Tuya estão corretas
- Verifique se os dispositivos estão vinculados ao seu projeto Tuya
- Certifique-se de que os dispositivos estão online no app Tuya
- Verifique se o endpoint da API corresponde à sua região (US, EU, CN, IN)
Erros de CORS:
- Certifique-se de que a porta do frontend está listada nas origens CORS em
server/main.py - Limpe o cache do navegador e reinicie ambos os servidores
Conexão WebSocket falha:
- Verifique se ambos os servidores estão em execução
- Verifique as configurações do firewall para permitir conexões WebSocket
- Verifique o console do navegador para mensagens de erro
Contribuições são bem-vindas! Por favor, siga estes passos:
- Faça um fork do repositório
- Crie uma branch de feature (
git checkout -b feature/NovaFuncionalidade) - Commit suas mudanças (
git commit -m 'Adiciona nova funcionalidade') - Push para a branch (
git push origin feature/NovaFuncionalidade) - Abra um Pull Request
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
- Explorar tecnicamente as APIs da Tuya
- Prototipar uma arquitetura full-stack para controle hoteleiro inteligente
- Criar uma base para expansão futura com funcionalidades mais robustas
Funcionalidades como banco de dados, autenticação de usuários e deploy em produção foram deixadas de fora intencionalmente, para focar no objetivo principal: criar uma conexão ponta-a-ponta entre interface web e dispositivos inteligentes via Tuya Cloud.