diff --git a/src/README.md b/src/README.md index 2134996..2eecee8 100644 --- a/src/README.md +++ b/src/README.md @@ -47,6 +47,11 @@ Wymagane parametry: * ENERGA_USERNAME - nazwa użytkownika w aplikacji Energa Mój licznik * ENERGA_PASSWORD - hasło użytkownika w aplikacji Energa Mój licznik +Opcjonalne parametry: + +* POSTGRESQL_CONNSTRING - namiar na bazę PostgreSQL do przechowywania odczytów; +format opisany w [dokumentacji PGSQL](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING-URIS) +(przykładowo `postgresql://uzytkownik:haslo@serwer/mojlicznik`) ## Konfiguracja sensorów Do HA możesz dodać sensory, które zawierają informacje udostępniane przez API diff --git a/src/api.py b/src/api.py index 9fc5920..1f63f8c 100644 --- a/src/api.py +++ b/src/api.py @@ -1,4 +1,4 @@ -from peewee import SqliteDatabase +from peewee import SqliteDatabase, PostgresqlDatabase from flask import Flask, jsonify, request, redirect, url_for, abort from waitress import serve #from datetime @@ -9,10 +9,14 @@ import urllib.parse logger = logging.getLogger("energaMeter.api") - -path = os.path.dirname(os.path.abspath(__file__)) -db_file = 'data/database.sqlite' -db = SqliteDatabase(os.path.join(path, db_file)) +if postgresql_connstring := os.getenv("POSTGRESQL_CONNSTRING"): + from psycopg2.extensions import parse_dsn + db_name = parse_dsn(postgresql_connstring)['dbname'] + db = PostgresqlDatabase(db_name, dsn=postgresql_connstring) +else: + path = os.path.dirname(os.path.abspath(__file__)) + db_file = 'data/database.sqlite' + db = SqliteDatabase(os.path.join(path, db_file)) app = Flask(__name__) diff --git a/src/moj_licznik.py b/src/moj_licznik.py index 7ecfdc0..be11550 100644 --- a/src/moj_licznik.py +++ b/src/moj_licznik.py @@ -1,4 +1,4 @@ -from peewee import SqliteDatabase +from peewee import SqliteDatabase, PostgresqlDatabase from datetime import datetime, timedelta, date import calendar, requests, re, time, json, os, logging import http.cookiejar as cookiejar @@ -10,9 +10,16 @@ import urllib.parse logger = logging.getLogger("energaMeter") -path = os.path.dirname(os.path.abspath(__file__)) -db_file = 'data/database.sqlite' -db = SqliteDatabase(os.path.join(path, db_file)) +if postgresql_connstring := os.getenv("POSTGRESQL_CONNSTRING"): + from psycopg2.extensions import parse_dsn + db_name = parse_dsn(postgresql_connstring)['dbname'] + db_host = parse_dsn(postgresql_connstring)['host'] + db = PostgresqlDatabase(db_name, dsn=postgresql_connstring) + logger.info(f"Używam bazy PostgreSQL „{db_name}” na {db_host}") +else: + path = os.path.dirname(os.path.abspath(__file__)) + db_file = 'data/database.sqlite' + db = SqliteDatabase(os.path.join(path, db_file)) class ChartType(Enum): DAY = "DAY" diff --git a/src/requirements.txt b/src/requirements.txt index d10d411..7533201 100644 Binary files a/src/requirements.txt and b/src/requirements.txt differ