support PostgreSQL database

This commit is contained in:
2024-06-08 21:13:00 +02:00
parent fe6472b73d
commit ae1bcf84d5
4 changed files with 25 additions and 9 deletions

View File

@@ -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

View File

@@ -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__)

View File

@@ -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"

Binary file not shown.