File: README.md

package info (click to toggle)
python-iometer 0.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 152 kB
  • sloc: python: 591; makefile: 3
file content (100 lines) | stat: -rw-r--r-- 2,974 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# IOmeter Python Client

A Python client for interacting with [IOmeter](https://iometer.de/) devices over HTTP. This client provides an async interface for reading energy consumption/production data and monitoring device status.

## Features

- 🔌 Asynchronous communication with IOmeter bridge over HTTP
- 📊 Read energy consumption and energy production data
- 🔋 Monitor device status including battery level and signal strength

## Quick Start

### Installation

```bash
pip install iometer
```

### Basic Usage

```python
from iometer import IOmeterClient

async def check_meter_reading():
    async with IOmeterClient("192.168.1.100") as client:
        # Get current reading
        reading = await client.get_current_reading()
        
        # Access basic metrics
        consumption = reading.get_total_consumption()
        production = reading.get_total_production()
        power = reading.get_current_power()
        
        print(f"Meter: {reading.meter.number}")
        print(f"Time: {reading.meter.reading.time}")
        print(f"Consumption: {consumption} Wh")
        print(f"Production: {production} Wh")
        print(f"Current Power: {power} W")
```

### Continuous Monitoring

```python
import asyncio
from iometer import IOmeterClient

async def monitor_readings(interval: int = 300):
    """Monitor readings every 5 minutes."""
    async with IOmeterClient("192.168.1.100") as client:
        while True:
            try:
                reading = await client.get_current_reading()
                print(f"Time: {reading.meter.reading.time}")
                print(f"Consumption: {reading.get_total_consumption()} Wh")
                await asyncio.sleep(interval)
            except Exception as e:
                print(f"Error: {e}")
                await asyncio.sleep(60)  # Wait before retry
```
### Device Status Information

```python
from iometer import IOmeterClient

async def check_device_status():
    async with IOmeterClient("192.168.1.100") as client:
        # Get current status
        status = await client.get_current_status()
        
        # Bridge information
        print(f"Bridge Version: {status.device.bridge.version}")
        print(f"Bridge Signal: {status.device.bridge.rssi} dBm")
        
        # Core information
        core = status.device.core
        print(f"Connection: {core.connection_status}")
        print(f"Power Mode: {core.power_status}")
        
        if core.power_status.value == "battery":
            print(f"Battery Level: {core.battery_level}%")
```

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## Setting up a dev environment
We use [Poetry](https://python-poetry.org/) for dependency management and testing. Install everything with:
```bash
poetry install
```

To run the Python tests use:
```bash
poetry run pytest tests/test.py
```

## License

This project is licensed under the MIT License - see the LICENSE file for details.