A GenAI assistant-enabled Python framework for bridging IoT devices with voice assistants
Project description
SmartHomeHarmonizer
A lightweight Python framework for bridging IoT devices with voice assistants (Amazon Alexa, Google Assistant, and Apple HomeKit).
🎯 Overview
SmartHomeHarmonizer simplifies the integration of custom IoT devices with popular voice assistants by providing:
- Unified API: Single RESTful interface for all voice assistant platforms
- Modular Architecture: Easy-to-implement device adapters
- Lightweight Design: Minimal resource footprint suitable for Raspberry Pi
- Platform Agnostic: Works with Alexa, Google Assistant, and HomeKit
- Research Friendly: Designed for experimentation and education
🚀 Quick Start
Installation
pip install smarthomeharmonizer
Basic Usage
from smarthomeharmonizer import create_app, DeviceManager
from smarthomeharmonizer.adapters.smart_light import SmartLightAdapter
# Create device manager
manager = DeviceManager()
# Register a smart light
light = SmartLightAdapter('light1', 'Living Room Light')
manager.register_device(light)
# Create Flask app
app = create_app(manager)
# Run the server
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Control Your Device
# Turn on the light
curl -X POST http://localhost:5000/api/v1/devices/light1/command \
-H "Content-Type: application/json" \
-d '{"command": "turnOn"}'
# Set brightness
curl -X POST http://localhost:5000/api/v1/devices/light1/command \
-H "Content-Type: application/json" \
-d '{"command": "setBrightness", "parameters": {"brightness": 75}}'
# Get device state
curl http://localhost:5000/api/v1/devices/light1/state
📚 Documentation
Full documentation is available at https://smarthomeharmonizer.readthedocs.io
Key Features
- Device Adapters: Implement custom adapters for any IoT device
- Voice Assistant Integration: Step-by-step guides for Alexa, Google, and HomeKit
- RESTful API: Well-documented endpoints for device control
- Error Handling: Comprehensive error handling and logging
- Thread Safety: Safe concurrent access to device states
- Extensible: Easy to add new device types and platforms
🛠️ Creating Custom Device Adapters
from smarthomeharmonizer.adapters.base import DeviceAdapter
from typing import Dict, Any, List, Optional
class MyCustomDeviceAdapter(DeviceAdapter):
"""Adapter for my custom IoT device."""
def _initialize_state(self) -> Dict[str, Any]:
return {
'power': False,
'mode': 'auto'
}
def get_supported_commands(self) -> List[str]:
return ['turnOn', 'turnOff', 'setMode', 'getStatus']
def execute_command(self, command: str, parameters: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
if command == 'turnOn':
self._state['power'] = True
elif command == 'turnOff':
self._state['power'] = False
elif command == 'setMode':
mode = parameters.get('mode', 'auto')
if mode in ['auto', 'manual', 'eco']:
self._state['mode'] = mode
else:
raise ValueError(f"Invalid mode: {mode}")
return self.get_state()
🧪 Testing
Run the test suite:
# Install development dependencies
pip install -e ".[dev]"
# Run tests with coverage
pytest --cov=smarthomeharmonizer
# Run linting
flake8 smarthomeharmonizer tests
# Run type checking
mypy smarthomeharmonizer
🤝 Contributing
We welcome contributions! Please see our Contributing Guidelines for details.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
📊 Performance
SmartHomeHarmonizer is designed for efficiency:
- Memory Usage: ~50MB base footprint
- Response Time: <10ms for local commands
- Concurrent Devices: Tested with 100+ simultaneous devices
- Platform Support: Runs on Raspberry Pi 3B+ and newer
🔒 Security Considerations
- Always use HTTPS in production
- Implement proper authentication for cloud deployments
- Follow voice assistant platform security guidelines
- Keep dependencies updated
📜 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Thanks to all contributors and early adopters
- Inspired by the open-source home automation community
- Built with Flask and the Python ecosystem
📖 Citation
If you use SmartHomeHarmonizer in your research, please cite:
@article{YourName2025,
title = {SmartHomeHarmonizer: A Lightweight Python Framework for Bridging IoT Devices with Voice Assistants},
author = {Your Name and Collaborators},
journal = {Journal of Open Source Software},
year = {2025},
volume = {X},
number = {X},
pages = {XXXX},
doi = {10.21105/joss.XXXXX}
}
🐛 Found a Bug?
Please open an issue with a detailed description and steps to reproduce.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file smarthomeharmonizer-0.1.0.tar.gz.
File metadata
- Download URL: smarthomeharmonizer-0.1.0.tar.gz
- Upload date:
- Size: 16.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
baf68fb08f2e96a390a914e17c18881c37a67c9a58048628238b36344f7501ca
|
|
| MD5 |
957e5e8f7688054113308374bf29ab2e
|
|
| BLAKE2b-256 |
28fd5eddde86b069c5d58307388e7467d05955b612fc9fcf7d8c3fbbb025b08c
|
File details
Details for the file smarthomeharmonizer-0.1.0-py3-none-any.whl.
File metadata
- Download URL: smarthomeharmonizer-0.1.0-py3-none-any.whl
- Upload date:
- Size: 16.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a307ef9e2cd6bf6fc068d573621a131901546ce46f00add89483e90d81f55b5c
|
|
| MD5 |
9716c8164a48f0f32dfc905b2381f5db
|
|
| BLAKE2b-256 |
6bfc77f137dee1bee4f0fa2c938401f807e75128a6eae8da7c14bcbb9afd5f20
|