Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 16 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,14 @@ sb_pass = 'Password'
# Init class, establish connection
sb = sonnenbatterie(sb_host, sb_user, sb_pass)

print(sb.get_status()) # retrieve general information
print(sb.get_powermeters()) # retrieive power meter details
print(sb.get_batterysystem()) # retrieve battery system data
print(sb.get_inverter()) # retrieve inverter status
print(sb.get_systemdata()) # retrieve system data
print(sb.get_battery()) # get battery information
print(sb.get_status()) # retrieve general information
print(sb.get_powermeter()) # retrieive power meter details
print(sb.get_batterysystem()) # retrieve battery system data
print(sb.get_inverter()) # retrieve inverter status
print(sb.get_systemdata()) # retrieve system data
print(sb.get_battery()) # get battery information
print(sb.get_api_configuration()) # get api configuration
print(sb.get_commissioning_settings()) # get commissioning settings
```

### SonnenAPI v1 - async
Expand All @@ -66,13 +68,14 @@ sb_pass = 'Password'
# Init class, establish connection
sb = AsyncSonnenBatterie(sb_host, sb_user, sb_pass)

print(await sb.get_status()) # retrieve general information
print(await sb.get_powermeters()) # retrieive power meter details
print(await sb.get_batterysystem()) # retrieve battery system data
print(await sb.get_inverter()) # retrieve inverter status
print(await sb.get_systemdata()) # retrieve system data
print(await sb.get_battery()) # get battery information

print(await sb.get_status()) # retrieve general information
print(await sb.get_powermeter()) # retrieive power meter details
print(await sb.get_batterysystem()) # retrieve battery system data
print(await sb.get_inverter()) # retrieve inverter status
print(await sb.get_systemdata()) # retrieve system data
print(await sb.get_battery()) # get battery information
print(await sb.get_api_configuration()) # get api configuration
print(await sb.get_commissioning_settings()) # get commissioning settings
# Async needs to close the connection!
await sb.logout()
```
Expand Down
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[metadata]
name = sonnenbatterie
version = 0.5.2
version = 0.6.0
author = Jan Weltmeyer
description = "Access Sonnenbatterie REST API"
long_description = file: README.md
Expand Down
2 changes: 2 additions & 0 deletions sonnenbatterie/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
SONNEN_API_PATH_SYSTEM_DATA="system_data"
SONNEN_API_PATH_STATUS="v1/status"
SONNEN_API_PATH_BATTERY="battery"
SONNEN_API_PATH_API_CONFIGURATION="json_api/json_api_configuration"
SONNEN_API_COMMISSIONING_SETTINGS="v1/commissioning_assistant/special_function"

SONNEN_CHARGE_PATH="charge"
SONNEN_DISCHARGE_PATH="discharge"
16 changes: 14 additions & 2 deletions sonnenbatterie/sonnenbatterie.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from .const import *


# noinspection PyPep8Naming
class sonnenbatterie:
# noinspection HttpUrlsUsage
def __init__(self,username,password,ipaddress):
Expand Down Expand Up @@ -130,6 +131,13 @@ def get_status(self):
def get_battery(self):
return self._get(SONNEN_API_PATH_BATTERY)

def get_api_configuration(self):
return self._get(SONNEN_API_PATH_API_CONFIGURATION)

def get_commissioning_settings(self):
return self._get(SONNEN_API_COMMISSIONING_SETTINGS)


# API v2 calls
def set_configuration(self, name, value):
return self.sb2.set_config_item(name, value)
Expand Down Expand Up @@ -352,10 +360,14 @@ async def get_status(self) -> json:
async def get_battery(self) -> json:
return await self._get(SONNEN_API_PATH_BATTERY)

async def get_api_configuration(self) -> json:
return await self._get(SONNEN_API_PATH_API_CONFIGURATION)

""" API v2 calls """
async def get_commissioning_settings(self):
return await self._get(SONNEN_API_COMMISSIONING_SETTINGS)


""" API v2 calls """
async def set_configuration(self, name, value) -> json:
if self.sb2 is None:
await self.login()
Expand All @@ -378,7 +390,6 @@ async def get_config_item(self, name) -> json:


""" Special functions """

# GET
async def get_current_charge_level(self) -> int:
result = await self.get_latest_data()
Expand Down Expand Up @@ -417,6 +428,7 @@ async def set_battery_reserve(self, battery_reserve) -> json:
raise Exception(f"Reserve must be between 0 and 100, you spcified {reserve}")
return await self.set_configuration(SONNEN_CONFIGURATION_BACKUP_RESERVE, reserve)

# noinspection DuplicatedCode
async def set_battery_reserve_relative_to_current_charge(self, offset=0, min_res=0) -> json:
current_level = await self.get_current_charge_level()
target_level = current_level + offset
Expand Down
3 changes: 2 additions & 1 deletion sonnenbatterie2/sonnenbatterie2.py
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ async def set_battery_reserve(self, battery_reserve) -> json:
raise Exception(f"Reserve must be between 0 and 100, you spcified {reserve}")
return await self.set_config_item(SONNEN_CONFIGURATION_BACKUP_RESERVE, reserve)

# noinspection DuplicatedCode
async def set_battery_reserve_relative_to_current_charge(self, offset=0, min_res=0) -> json:
current_level = await self.get_current_charge_level()
target_level = current_level + offset
Expand Down Expand Up @@ -404,4 +405,4 @@ async def clear_tou_schedule_string(self) -> json:
return await self.set_tou_schedule_string("[]")

async def clear_tou_schedule_json(self) -> json:
return await self.set_tou_schedule_string("[]")
return await self.set_tou_schedule_string("[]")
2 changes: 1 addition & 1 deletion timeofuse/timeofuse.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ def __init__(self, start_time:time, stop_time:time, max_power:int=20000):
if stop_time == MIDNIGHT:
stop_time = time.max
self.stop_time = stop_time
self.max_power = max_power if max_power < 22000 else 22000
self.max_power = max_power

def __eq__(self, other) -> bool :
if not isinstance(other, type(self)):
Expand Down