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_USERNAME - nazwa użytkownika w aplikacji Energa Mój licznik
* ENERGA_PASSWORD - hasło 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 ## Konfiguracja sensorów
Do HA możesz dodać sensory, które zawierają informacje udostępniane przez API 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 flask import Flask, jsonify, request, redirect, url_for, abort
from waitress import serve from waitress import serve
#from datetime #from datetime
@@ -9,7 +9,11 @@ import urllib.parse
logger = logging.getLogger("energaMeter.api") logger = logging.getLogger("energaMeter.api")
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__)) path = os.path.dirname(os.path.abspath(__file__))
db_file = 'data/database.sqlite' db_file = 'data/database.sqlite'
db = SqliteDatabase(os.path.join(path, db_file)) db = SqliteDatabase(os.path.join(path, db_file))

View File

@@ -1,4 +1,4 @@
from peewee import SqliteDatabase from peewee import SqliteDatabase, PostgresqlDatabase
from datetime import datetime, timedelta, date from datetime import datetime, timedelta, date
import calendar, requests, re, time, json, os, logging import calendar, requests, re, time, json, os, logging
import http.cookiejar as cookiejar import http.cookiejar as cookiejar
@@ -10,6 +10,13 @@ import urllib.parse
logger = logging.getLogger("energaMeter") logger = logging.getLogger("energaMeter")
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__)) path = os.path.dirname(os.path.abspath(__file__))
db_file = 'data/database.sqlite' db_file = 'data/database.sqlite'
db = SqliteDatabase(os.path.join(path, db_file)) db = SqliteDatabase(os.path.join(path, db_file))

Binary file not shown.