Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
86139754bd
|
|||
6127129b03
|
|||
6564722727
|
|||
a65b991307
|
|||
4ea8a3688b
|
|||
0eace0be7c
|
|||
88c442697f
|
|||
c2053acee3
|
|||
827ebdadad
|
|||
3d28188833
|
|||
52d690c382
|
|||
44d5118411
|
29
.woodpecker.yml
Normal file
29
.woodpecker.yml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
steps:
|
||||||
|
build:
|
||||||
|
image: plugins/kaniko
|
||||||
|
settings:
|
||||||
|
repo: gitea.hottis.de/wn/pv-controller
|
||||||
|
registry:
|
||||||
|
from_secret: container_registry
|
||||||
|
tags: latest,${CI_COMMIT_SHA},${CI_COMMIT_TAG}
|
||||||
|
username:
|
||||||
|
from_secret: container_registry_username
|
||||||
|
password:
|
||||||
|
from_secret: container_registry_password
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
when:
|
||||||
|
- event: [push, tag]
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
image: portainer/kubectl-shell:latest
|
||||||
|
secrets:
|
||||||
|
- source: kube_config
|
||||||
|
target: KUBE_CONFIG_CONTENT
|
||||||
|
commands:
|
||||||
|
- export IMAGE_TAG=$CI_COMMIT_TAG
|
||||||
|
- printf "$KUBE_CONFIG_CONTENT" > /tmp/kubeconfig
|
||||||
|
- export KUBECONFIG=/tmp/kubeconfig
|
||||||
|
- cat ./deployment/install-yml.tmpl | sed -e 's,%IMAGETAG%,'$IMAGE_TAG','g | kubectl apply -f -
|
||||||
|
when:
|
||||||
|
- event: tag
|
||||||
|
|
13
Dockerfile
13
Dockerfile
@ -2,11 +2,17 @@ FROM python:latest
|
|||||||
|
|
||||||
LABEL Maintainer="Wolfgang Hottgenroth wolfgang.hottgenroth@icloud.com"
|
LABEL Maintainer="Wolfgang Hottgenroth wolfgang.hottgenroth@icloud.com"
|
||||||
LABEL ImageName="registry.hottis.de/dockerized/pv-controller"
|
LABEL ImageName="registry.hottis.de/dockerized/pv-controller"
|
||||||
|
LABEL HubImageName="wollud1969/pv-controller"
|
||||||
|
|
||||||
ARG APP_DIR="/opt/app"
|
ARG APP_DIR="/opt/app"
|
||||||
ARG CONF_DIR="${APP_DIR}/config"
|
|
||||||
|
|
||||||
|
|
||||||
|
ENV MQTT__BROKER ""
|
||||||
|
ENV MQTT__PORT "1883"
|
||||||
|
ENV MQTT__METERPUBLISHTOPIC "IoT/PV/Values"
|
||||||
|
ENV MQTT__METERPUBLISHPERIOD "15"
|
||||||
|
ENV MQTT__RELAISSUBSCRIBETOPIC "IoT/PV/Cmd"
|
||||||
|
ENV MODBUS__GATEWAY ""
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
apt update && \
|
apt update && \
|
||||||
@ -16,18 +22,15 @@ RUN \
|
|||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
mkdir -p ${APP_DIR} && \
|
mkdir -p ${APP_DIR} && \
|
||||||
mkdir -p ${CONF_DIR} && \
|
|
||||||
useradd -d ${APP_DIR} -u 1000 user
|
useradd -d ${APP_DIR} -u 1000 user
|
||||||
|
|
||||||
COPY ./src/pv_controller/*.py ${APP_DIR}/
|
COPY ./src/pv_controller/*.py ${APP_DIR}/
|
||||||
COPY config.ini ${CONF_DIR}/
|
|
||||||
|
|
||||||
USER 1000:1000
|
USER 1000:1000
|
||||||
WORKDIR ${APP_DIR}
|
WORKDIR ${APP_DIR}
|
||||||
VOLUME ${CONF_DIR}
|
|
||||||
|
|
||||||
|
|
||||||
CMD [ "python", "pvc.py", "-f", "/opt/app/config/config.ini" ]
|
CMD [ "python", "pvc.py" ]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
14
config.ini
14
config.ini
@ -1,14 +0,0 @@
|
|||||||
[mqtt]
|
|
||||||
broker = 172.16.2.16
|
|
||||||
port = 1883
|
|
||||||
# login =
|
|
||||||
# password =
|
|
||||||
# ca =
|
|
||||||
# cert =
|
|
||||||
# key =
|
|
||||||
relaisSubscribeTopic = IoT/PV/Cmd
|
|
||||||
meterPublishTopic = IoT/PV/Values
|
|
||||||
meterPublishPeriod = 15
|
|
||||||
|
|
||||||
[modbus]
|
|
||||||
gateway = 172.16.2.42
|
|
@ -1,13 +1,13 @@
|
|||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: namespace
|
kind: Namespace
|
||||||
metadata:
|
metadata:
|
||||||
name: pv-controller
|
name: homea
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: ConfigMap
|
kind: ConfigMap
|
||||||
metadata:
|
metadata:
|
||||||
name: pv-controller
|
name: pv-controller
|
||||||
namespace: pv-controller
|
namespace: homea
|
||||||
data:
|
data:
|
||||||
MQTT__BROKER: "emqx01-anonymous-cluster-internal.broker.svc.cluster.local"
|
MQTT__BROKER: "emqx01-anonymous-cluster-internal.broker.svc.cluster.local"
|
||||||
MQTT__PORT: "1883"
|
MQTT__PORT: "1883"
|
||||||
@ -20,7 +20,7 @@ apiVersion: apps/v1
|
|||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: pv-controller
|
name: pv-controller
|
||||||
namespace: pv-controller
|
namespace: homea
|
||||||
labels:
|
labels:
|
||||||
app: pv-controller
|
app: pv-controller
|
||||||
spec:
|
spec:
|
||||||
@ -35,7 +35,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: pv-controller
|
- name: pv-controller
|
||||||
image: wollud1969/sinkserver:e5f9d3e3
|
image: gitea.hottis.de/wn/pv-controller:%IMAGETAG%
|
||||||
envFrom:
|
envFrom:
|
||||||
- configMapRef:
|
- configMapRef:
|
||||||
name: pv-controller
|
name: pv-controller
|
@ -37,7 +37,7 @@ class ModbusHandler:
|
|||||||
def readInputRegister(self, slave, addr):
|
def readInputRegister(self, slave, addr):
|
||||||
res = self.client.read_input_registers(addr, 2, slave=slave)
|
res = self.client.read_input_registers(addr, 2, slave=slave)
|
||||||
if (isinstance(res, ReadInputRegistersResponse)):
|
if (isinstance(res, ReadInputRegistersResponse)):
|
||||||
v = BinaryPayloadDecoder.fromRegisters(res.registers, byteorder=Endian.Big, wordorder=Endian.Big).decode_32bit_float()
|
v = BinaryPayloadDecoder.fromRegisters(res.registers, byteorder=Endian.BIG, wordorder=Endian.BIG).decode_32bit_float()
|
||||||
return v
|
return v
|
||||||
elif (isinstance(res, LocalModbusException)):
|
elif (isinstance(res, LocalModbusException)):
|
||||||
msg = f"Error: {type(res)}, Content: {res}"
|
msg = f"Error: {type(res)}, Content: {res}"
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
|
from loguru import logger
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
OPTIONS = {
|
OPTIONS = {
|
||||||
@ -17,15 +18,16 @@ class Config:
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.values = {}
|
self.values = {}
|
||||||
for section, keys in OPTIONS:
|
for section, keys in Config.OPTIONS.items():
|
||||||
self.values[section] = {}
|
self.values[section] = {}
|
||||||
for key in keys:
|
for key in keys:
|
||||||
varname = f"{section}__{key}".upper()
|
varname = f"{section}__{key}".upper()
|
||||||
try:
|
try:
|
||||||
self.values[section][key] = os.environ[varname]
|
self.values[section][key] = os.environ[varname]
|
||||||
|
logger.info(f"Config: {section} {key} -> {self.values[section][key]}")
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def __getitem__(self, section):
|
def __getitem__(self, section):
|
||||||
return self.values[index]
|
return self.values[section]
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user