Pushing saves

This commit is contained in:
Mike Geppert 2025-07-19 15:49:53 -05:00
parent 27329d3afa
commit 3342a3620f

161
README.md
View File

@ -1,8 +1,159 @@
# Sample GitLab Project
# Tasmota Device Manager
This sample project shows how a project in GitLab looks for demonstration purposes. It contains issues, merge requests and Markdown files in many branches,
named and filled with lorem ipsum.
A tool for discovering, configuring, and managing Tasmota devices on a network.
You can look around to get an idea how to structure your project and, when done, you can safely delete this project.
## Device Discovery Script
[Learn more about creating GitLab projects.](https://docs.gitlab.com/ee/gitlab-basics/create-project.html)
The `discover_devices.py` script implements the Device Discovery process for Tasmota devices on a network. It connects to a Unifi Switch, retrieves a list of connected devices, and filters for potential Tasmota devices based on network_filter information in the config file.
### Features
- Connects to Unifi Switch using configured credentials
- Retrieves list of all connected devices
- Filters devices based on network and subnet configuration
- Classifies devices into three categories:
- Valid hostname devices (ready for configuration)
- Default hostname devices (need proper naming)
- Deprecated devices (no longer available)
- Generates JSON files for each device category
- Provides detailed logging
- Supports debug mode for troubleshooting
### Prerequisites
- Python 3.8+
- Network access to Unifi Switch
- API Key for the Unifi Switch
- Network access to all potential Tasmota devices
### Installation
1. Clone this repository
2. Create and activate a virtual environment:
```
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
```
3. Install dependencies:
```
pip install -r requirements.txt
```
4. Configure access credentials in `config.yaml` (see Configuration section)
### Configuration
Create a `config.yaml` file with the following structure:
```yaml
unifi:
type: UDMSE # Unifi Dream Machine SE
host: https://192.168.6.1
port: 8443 # Default Unifi Controller port
API_Key: "nIfTdZAXVUGQgyNqsATluTja-noaNLAk" # API Key for Unifi Controller
network_filter:
NoT_network:
name: "NoT"
subnet: "192.168.8"
exclude_patterns:
- "homeassistant*"
- "*sonos*"
default_name_patterns:
- "tasmota*"
- "ESP-*"
tasmota:
mqtt_settings:
host: "homeassistant.NoT.mgeppert.com"
port: 1883
user: "mgeppert"
password: "mgeppert"
topic: "%hostname_base%"
full_topic: "%prefix%/%topic%/"
no_retain: false
other_settings: # Yet to be defined
```
### Usage
Run the device discovery script:
```
python discover_devices.py
```
#### Command-line Options
- `-h, --help`: Show help message and exit
- `-d, --debug`: Enable debug mode with verbose logging
- `-c, --config`: Specify a custom config file path (default: config.yaml)
### Output Files
The script generates the following JSON files:
- `valid_hostnames.json`: Devices with valid hostnames that can be configured
- `default_hostnames.json`: Devices with default hostnames that need proper naming
- `deprecated_hostnames.json`: Devices that were previously valid but are no longer available
### Logging
Logs are stored in the `logs/` directory:
- `discovery.log`: Device discovery process logs
Log level is set to INFO by default, or DEBUG when using the `-d` flag.
## Next Steps
After running the device discovery script:
1. For devices with default hostnames, assign proper hostnames based on location and function
2. For devices with valid hostnames, proceed with configuration auditing and standardization
## Testing
The project includes scripts to verify and test the device discovery functionality without requiring the actual dependencies to be installed.
### Syntax Verification
To verify the syntax of the device discovery script without running it:
```
python verify_syntax.py
```
This will check that the script has valid Python syntax without executing it or requiring any dependencies.
### Functional Testing
To test the core functionality of the device discovery script with mocked dependencies:
```
python test_discovery.py
```
This script mocks the external dependencies (yaml, requests, urllib3) and tests:
- Pattern matching functionality
- Device filtering based on network and subnet
- Device classification into valid and default hostname groups
The test script uses sample device data to simulate the discovery process and verify that the filtering and classification logic works correctly.
## Troubleshooting
### Common Issues
- **No devices retrieved from Unifi Controller**: Check Unifi credentials and network connectivity
- **No devices match the filter criteria**: Check network_filter configuration in config.yaml
- **Error loading configuration**: Verify config.yaml syntax and structure
- **Missing dependencies**: Make sure to install all required packages from requirements.txt
### Debug Mode
Run the script with the `-d` flag to enable debug mode with verbose logging:
```
python discover_devices.py -d
```