Skip to content

Commit

Permalink
🚀 RELEASE: 2.11.35-dev
Browse files Browse the repository at this point in the history
  • Loading branch information
unl0ck committed Dec 27, 2024
1 parent 5933a1b commit 56616d5
Show file tree
Hide file tree
Showing 13 changed files with 121 additions and 31 deletions.
60 changes: 60 additions & 0 deletions GridboxConnectorAddon-dev/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,70 @@
<!-- https://developers.home-assistant.io/docs/add-ons/presentation#keeping-a-changelog -->

## 2.11.35

### 🔨 Fixed

- logfire

### 🔄 Changed

- bump viessmann-gridbox-connector 1.6.0

## 2.11.33

### 🔨 Fixed

- logfire

### 🔄 Changed

- bump viessmann-gridbox-connector 1.7.0

## 2.11.31

### 🚀 Added

- make possible the disable and enable telemetry

### 🔨 Fixed

- sensitive filter fixed

## 2.11.28

### 🔨 Fixed

- sensitive filter fixed

## 2.11.26

### 🚀 Added

- start with logfire implementation

## 2.11.25

### 🔨 Fixed

- historical devices revert last_update

## 2.11.24

### 🔨 Fixed

- historical devices added last_update

### 🔄 Changed

- bump requests 2.32.3
- bump ha-mqtt-discoverable 0.16.3

## 2.11.23

### 🔨 Fixed

- historical devices added state_class

## 2.11.22

### 🔨 Fixed
Expand Down
6 changes: 6 additions & 0 deletions GridboxConnectorAddon-dev/DOCS.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ use your credentials from the Viessmann **myGridbox** App or from the Viessmann
username: email
password: password
wait_time: timeout when will refresh
OverrideMqttUser: Mqtt user
OverrideMqttPw: Mqtt password
OverrideMqttServer: Mqtt Server
OverrideMqttPort: Mqtt Port
log_level: select one of this(TRACE|DEBUG|INFO|WARN|ERROR)
enable_telemetry: Send to logfire logs and exceptions
```
if you use an custom setup MQTT-Broker so you can add in the Addon the MQTT settings currently only support MQTT Standard Port 1833 (will fixed later)
Expand Down
2 changes: 2 additions & 0 deletions GridboxConnectorAddon-dev/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ LABEL \
org.opencontainers.image.revision=${BUILD_REF} \
org.opencontainers.image.version=${BUILD_VERSION}

ENV LOGFIRE_TOKEN=${LOGFIRE_TOKEN}

RUN \
apk add --no-cache \
python3 py3-pip
Expand Down
13 changes: 12 additions & 1 deletion GridboxConnectorAddon-dev/GridboxConnector/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from importlib.resources import files
from utils import SensitiveDataFilter, get_bool_env
import threading
import logfire
opens_file_path = '/data/options.json'
#logging.basicConfig(format='%(asctime)s %(filename)s:%(lineno)d %(levelname)s - %(message)s', level=logging.getLevelName(os.getenv('LOG_LEVEL', 'INFO')))
logger = logging.getLogger(__name__)
Expand All @@ -17,6 +18,16 @@
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
logger.addFilter(SensitiveDataFilter())
# Retrieve logfire token from environment variable
try:
logfire_token = os.getenv('LOGFIRE_TOKEN', '4nzH9rJ0GBZ4QJNY5GQM6tTh2bFTTyfrsrw6ytZ1xGT9')
enable_telemetry = os.getenv('ENABLE_TELEMETRY', False)
if logfire_token and enable_telemetry:
logfire.configure(environment='dev', token=logfire_token)
logfire.instrument_requests()
logger.addHandler(logfire.LogfireLoggingHandler())
except Exception as e:
logger.error(f"Error configuring logfire: {e}")

def load_gridbox_config():
config_file = files('viessmann_gridbox_connector').joinpath('config.json')
Expand Down Expand Up @@ -48,10 +59,10 @@ def historical_data_task(gridboxConnector:GridboxConnector, ha_viessmann_histori
from datetime import datetime, timedelta, timezone
now = datetime.now(timezone(timedelta(hours=1)))
now = now.replace(hour=0, minute=0, second=0, microsecond=0)

today = now.isoformat()
tomorrow = (now + timedelta(days=1)).isoformat()
measurement = gridboxConnector.retrieve_historical_data(today, tomorrow)
midnight_today = now.replace(hour=0, minute=0, second=0, microsecond=0)
if len(measurement) > 0:
result = measurement[0]
total = result["total"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,38 +101,38 @@ def __init__(self, mqtt_settings, device_name="Viessmann Gridbox", device_identi
self.self_consumtion_rate_sensor = Sensor(self_consumption_rate_settings)
self.self_sufficiency_rate_sensor = Sensor(self_sufficiency_rate_settings)

def update_sensors(self, measurement: dict):
def update_sensors(self, measurement: dict, last_reset: str = None):
if "production" in measurement:
self.production_sensor.set_state(measurement.get("production", ""))
self.production_sensor.set_state(measurement.get("production", ""), last_reset=last_reset)
else:
self.logger.warning("No production data received")
if "grid" in measurement:
self.grid_sensor.set_state(measurement.get("grid", ""))
self.grid_sensor.set_state(measurement.get("grid", ""), last_reset=last_reset)
else:
self.logger.warning("No grid data received")
if "photovoltaic" in measurement:
self.photovoltaic_sensor.set_state(measurement.get("photovoltaic", ""))
self.photovoltaic_sensor.set_state(measurement.get("photovoltaic", ""), last_reset=last_reset)
else:
self.logger.warning("No photovoltaic data received")
if "consumption" in measurement:
self.consumption_household_sensor.set_state(measurement.get("consumption", ""))
self.consumption_household_sensor.set_state(measurement.get("consumption", ""), last_reset=last_reset)
else:
self.logger.warning("No consumption data received")
if "totalConsumption" in measurement:
self.total_consumption_household_sensor.set_state(measurement.get("totalConsumption", ""))
self.total_consumption_household_sensor.set_state(measurement.get("totalConsumption", ""), last_reset=last_reset)
else:
self.logger.warning("No total consumption data received")
if "directConsumptionHousehold" in measurement:
self.direct_consumption_household_sensor.set_state(float(measurement.get("directConsumptionHousehold", "0")))
self.direct_consumption_household_sensor.set_state(float(measurement.get("directConsumptionHousehold", "0")), last_reset=last_reset)
if "directConsumptionHeatPump" in measurement:
self.direct_consumption_heatpump_sensor.set_state(float(measurement.get("directConsumptionHeatPump", "0")))
self.direct_consumption_heatpump_sensor.set_state(float(measurement.get("directConsumptionHeatPump", "0")), last_reset=last_reset)
if "directConsumptionEV" in measurement:
self.direct_consumption_ev_sensor.set_state(float(measurement.get("directConsumptionEV", "0")))
self.direct_consumption_ev_sensor.set_state(float(measurement.get("directConsumptionEV", "0")), last_reset=last_reset)
if "directConsumptionRate" in measurement:
self.direct_consumption_rate_sensor.set_state(round(float(measurement.get("directConsumptionRate", "0"))*100,2))

if "selfSupply" in measurement:
self.self_supply_sensor.set_state(float(measurement.get("selfSupply", "")))
self.self_supply_sensor.set_state(float(measurement.get("selfSupply", "")), last_reset=last_reset)
if "selfConsumptionRate" in measurement:
self.self_consumtion_rate_sensor.set_state(round(float(measurement.get("selfConsumptionRate", "0"))*100,2))
if "selfSufficiencyRate" in measurement:
Expand Down
14 changes: 14 additions & 0 deletions GridboxConnectorAddon-dev/GridboxConnector/main_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,5 +120,19 @@ def test_main_heater(self, mock_retrieve_live_data, mock_init, mock_init_auth,mo
viessmann_gridbox_connector.update_sensors(result[0])
mock_heater_sensor.assert_called_once_with(3676,70.9)

def test_logger(self):
import os
import logging
from utils import SensitiveDataFilter
logger = logging.getLogger(__name__)
logger.setLevel(logging.getLevelName(os.getenv('LOG_LEVEL', 'INFO')))
formatter = logging.Formatter('%(asctime)s %(filename)s:%(lineno)d %(levelname)s - %(message)s')
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
logger.addFilter(SensitiveDataFilter())
login_message = "{'grant_type': 'http://auth0.com/oauth/grant-type/password-realm', 'username': 'username@username', 'password': 'UltraSecret', 'audience': 'my.gridx', 'client_id': 'oZpr934Ikn8OZOHTJEcrgXkjio0I0Q7b', 'scope': 'email openid', 'realm': 'viessmann-authentication-db', 'client_secret': ''}"
logger.info(login_message)

if __name__ == '__main__':
unittest.main()
6 changes: 4 additions & 2 deletions GridboxConnectorAddon-dev/GridboxConnector/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
ha-mqtt-discoverable==0.16.0
requests==2.32.2
ha-mqtt-discoverable==0.16.3
requests==2.32.3
viessmann-gridbox-connector==1.6.0
logfire==2.11.0
opentelemetry-instrumentation-requests==0.50b0
23 changes: 10 additions & 13 deletions GridboxConnectorAddon-dev/GridboxConnector/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,24 @@
import logging
import ast
import os
import re
class SensitiveDataFilter(logging.Filter):
def filter(self, record):
message = record.getMessage()
try:
literal_msg = ast.literal_eval(message)
# Versuche die Nachricht als Python-Dictionary zu parsen
message_dict = ast.literal_eval(message)
# Sensible Daten filtern, falls vorhanden
if 'username' in literal_msg:
literal_msg['username'] = '***'
if 'password' in literal_msg:
literal_msg['password'] = '***'
if 'id_token' in literal_msg:
literal_msg['id_token'] = '***'
if 'access_token' in literal_msg:
literal_msg['access_token'] = '***'
if 'client_id' in literal_msg:
literal_msg['client_id'] = '***'
sensitive_keys = ['username', 'password', 'id_token', 'access_token', 'client_id', 'token']
for key in sensitive_keys:
if key in message_dict:
message_dict[key] = '***'
# Das modifizierte Dictionary zurück in einen String konvertieren
record.msg = json.dumps(literal_msg)
record.msg = str(message_dict)
except (ValueError, SyntaxError):
logging.error(f"Error parsing message: {message}")
except Exception as e:
logging.error(f"Error filtering sensitive data: {e}")
pass
return True

def get_bool_env(var, default=False):
Expand Down
2 changes: 1 addition & 1 deletion GridboxConnectorAddon-dev/cloudSettings.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"version": "2.11.23",
"version": "2.11.35",
"urls": {
"login": "https://gridx.eu.auth0.com/oauth/token",
"gateways": "https://api.gridx.de/gateways",
Expand Down
2 changes: 1 addition & 1 deletion GridboxConnectorAddon-dev/config.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-config
name: Viessmann Gridbox Connector (dev)
version: "2.11.23"
version: "2.11.35"
slug: "gridbox_connector_dev"
description: Development version of Viessmann Gridbox Connector
url: "https://github.com/unl0ck/homeassistant-addon-viessmann-gridbox/tree/main/GridboxConnectorAddon-dev"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ export USERNAME=$(bashio::config 'username')
export PASSWORD=$(bashio::config 'password')
export LOG_LEVEL=$(bashio::config 'log_level')
export ENABLE_TELEMETRY=$(bashio::config 'enable_telemetry')
export TELEMETRY_SERVER=$(bashio::config 'OverrideTelemetryUrl')
ls -lash /data
cd /build/
ls -lash
Expand Down
2 changes: 1 addition & 1 deletion GridboxConnectorAddon-dev/rootfs/share/cloudSettings.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"version": "2.11.23",
"version": "2.11.35",
"urls": {
"login": "https://gridx.eu.auth0.com/oauth/token",
"gateways": "https://api.gridx.de/gateways",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ export USERNAME=$(bashio::config 'username')
export PASSWORD=$(bashio::config 'password')
export LOG_LEVEL=$(bashio::config 'log_level')
export ENABLE_TELEMETRY=$(bashio::config 'enable_telemetry')
export TELEMETRY_SERVER=$(bashio::config 'OverrideTelemetryUrl')
ls -lash /data
cd /build/
ls -lash
Expand Down

0 comments on commit 56616d5

Please sign in to comment.