Pushing saves
This commit is contained in:
parent
27329d3afa
commit
3342a3620f
161
README.md
161
README.md
@ -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
|
||||
```
|
||||
|
||||
Loading…
Reference in New Issue
Block a user