9 Commits
0.0.1 ... 0.1.3

Author SHA1 Message Date
955b528dd0 fix
Some checks failed
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline failed
2025-12-15 17:47:58 +01:00
95cef39b1d car values 2
Some checks failed
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/manual/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline failed
2025-12-15 17:43:18 +01:00
d499d451ba car values
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-12-15 17:42:36 +01:00
2a4452e67f drop some obsolete files
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2025-01-24 16:29:20 +01:00
71d347632c once per hour
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2025-01-24 16:24:22 +01:00
33c5205ea6 fix schedule
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2025-01-24 14:18:21 +01:00
6a82c30db7 fix
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2025-01-24 14:02:17 +01:00
cc0068647b fix
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2025-01-24 14:00:31 +01:00
8f9669a829 fix
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2025-01-24 13:58:44 +01:00
7 changed files with 78 additions and 65 deletions

View File

@@ -4,23 +4,25 @@ steps:
settings: settings:
repo: ${FORGE_NAME}/${CI_REPO} repo: ${FORGE_NAME}/${CI_REPO}
registry: registry:
from_secret: container_registry from_secret: local_registry
tags: latest,${CI_COMMIT_SHA},${CI_COMMIT_TAG} tags: latest,${CI_COMMIT_TAG}
username: username:
from_secret: container_registry_username from_secret: local_username
password: password:
from_secret: container_registry_password from_secret: local_password
dockerfile: Dockerfile dockerfile: Dockerfile
when: when:
- event: [push, tag] - event: tag
scan_image: scan_image:
image: aquasec/trivy image: aquasec/trivy
commands: commands:
- trivy image $FORGE_NAME/$CI_REPO:$CI_COMMIT_SHA --quiet --exit-code 1 - trivy image $FORGE_NAME/$CI_REPO:$CI_COMMIT_TAG --quiet --exit-code 1
when: when:
- event: [push, tag] - event: tag
deploy: deploy:
image: quay.io/wollud1969/k8s-admin-helper:0.1.3 image: quay.io/wollud1969/k8s-admin-helper:0.4.1
environment: environment:
KUBE_CONFIG_CONTENT: KUBE_CONFIG_CONTENT:
from_secret: kube_config from_secret: kube_config

View File

@@ -3,11 +3,12 @@ kind: CronJob
metadata: metadata:
name: pv-energy-calculator name: pv-energy-calculator
spec: spec:
schedule: "1 1 * * *" schedule: "15 * * * *"
jobTemplate: jobTemplate:
spec: spec:
template: template:
spec: spec:
restartPolicy: OnFailure
containers: containers:
- name: pv-energy-calculator - name: pv-energy-calculator
image: %IMAGE% image: %IMAGE%

View File

@@ -31,7 +31,7 @@ kubectl create secret generic pv-energy-calculator \
--dry-run=client \ --dry-run=client \
-o yaml \ -o yaml \
--save-config \ --save-config \
--from-literal=PGPASSWORD="$PGPASSWORD" \ --from-literal=PGPASSWORD="$PGPASSWORD" | \
kubectl apply -f - -n $NAMESPACE kubectl apply -f - -n $NAMESPACE
cat $DEPLOYMENT_DIR/deploy-yml.tmpl | \ cat $DEPLOYMENT_DIR/deploy-yml.tmpl | \

View File

@@ -12,3 +12,16 @@ CREATE TABLE pv_energy_by_month (
); );
CREATE TABLE car_energy_by_month (
id serial NOT NULL PRIMARY KEY,
month integer NOT NULL,
year integer NOT NULL,
created_at timestamp NOT NULL DEFAULT now(),
last_changed timestamp,
update_counter integer NOT NULL DEFAULT 0,
baseline_energy real NOT NULL,
current_energy real NOT NULL DEFAULT 0.0,
CONSTRAINT car_energy_by_month__month_year_unique UNIQUE(month, year)
);

View File

@@ -51,3 +51,55 @@ INSERT INTO pv_energy_by_month
update_counter = pv_energy_by_month.update_counter + 1, update_counter = pv_energy_by_month.update_counter + 1,
current_energy = (SELECT e FROM last_pv_energy_of_yesterday) - pv_energy_by_month.baseline_energy; current_energy = (SELECT e FROM last_pv_energy_of_yesterday) - pv_energy_by_month.baseline_energy;
WITH
today AS (
SELECT now() AS d
),
yesterday AS (
SELECT date_trunc('day', today.d - '1 day'::interval) AS d,
extract(month from today.d - '1 day'::interval) AS m,
extract(year from today.d - '1 day'::interval) AS y
FROM today
),
first_car_of_yesterday AS (
SELECT min(measurements.time) as t
FROM measurements,
yesterday
WHERE time >= yesterday.d AND
time < yesterday.d + '1 day'::interval AND
measurements.application = 'Car'
),
last_car_of_yesterday AS (
SELECT max(measurements.time) as t
FROM measurements,
yesterday
WHERE time >= yesterday.d AND
time < yesterday.d + '1 day'::interval AND
measurements.application = 'Car'
),
first_car_energy_of_yesterday AS (
SELECT cast(measurements.values->'TotalImportEnergy'->>'value' AS real) AS e
FROM measurements,
first_car_of_yesterday
WHERE measurements.time = first_car_of_yesterday.t AND
measurements.application = 'Car'
),
last_car_energy_of_yesterday AS (
SELECT cast(measurements.values->'TotalImportEnergy'->>'value' AS real) AS e
FROM measurements,
last_car_of_yesterday
WHERE measurements.time = last_car_of_yesterday.t AND
measurements.application = 'Car'
)
INSERT INTO car_energy_by_month
(month, year, baseline_energy)
VALUES(
(SELECT m FROM yesterday),
(SELECT y FROM yesterday),
(SELECT e FROM first_car_energy_of_yesterday)
)
ON CONFLICT ON CONSTRAINT car_energy_by_month__month_year_unique
DO UPDATE
SET last_changed = now(),
update_counter = car_energy_by_month.update_counter + 1,
current_energy = (SELECT e FROM last_car_energy_of_yesterday) - car_energy_by_month.baseline_energy;

View File

@@ -1,10 +0,0 @@
#!/bin/bash
sv() {
cat pvec.sql | sed 's/%Y%/'$1'/' | sed 's/%M%/'$2'/' | sed 's/%D%/'$3'/' | psql -d udi-hottis
}
sv 2025 01 02

View File

@@ -1,45 +0,0 @@
import psycopg
from loguru import logger
def main():
try:
conn = psycopg.connect()
logger.info("Database connection opened")
except Exception as e:
logger.error(f"Error when opening database connection {e}"(
return
try:
with conn.cursor(cursor_factory=psycopg.extras.DictCursor) as cursor:
select_stmt = psycopg.sql.SQL("""
SELECT ...
""")
cursor.execute(select_stmt, (...))
row = cursor.fetchone()
if not row:
logger.error(f"No data found")
return
value = row["bla"]
# calculation
insert_stmt = psycopg.sql.SQL("""
INSERT ...
""")
cursor.execute(insert_stmt, (...))
conn.commit()
logger.info(f"Data successfully written to database")
except Exception as e:
logger.error(f"Error when selecting or writing database {e}")
conn.rollback()
finally:
conn.close()
logger.info("Database connection closed")
if __name__ == "__main__":
main()