5 Commits

Author SHA1 Message Date
a5f9527f4d read coils 4
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2025-12-15 11:20:46 +01:00
08c1faf606 read coils 3
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2025-12-15 11:09:21 +01:00
00afad4a3d read coils 2 2025-12-15 11:07:41 +01:00
086c240638 read coils 2025-12-15 11:06:36 +01:00
93bbccf5c3 fix typo in configuration
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2024-01-11 15:32:32 +01:00
6 changed files with 28 additions and 16 deletions

View File

@@ -4,21 +4,21 @@ steps:
settings: settings:
repo: gitea.hottis.de/wn/digitaltwin1 repo: gitea.hottis.de/wn/digitaltwin1
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
deploy: deploy:
image: portainer/kubectl-shell:latest image: portainer/kubectl-shell:latest
secrets: environment:
- source: kube_config KUBE_CONFIG_CONTENT:
target: KUBE_CONFIG_CONTENT from_secret: kube_config
commands: commands:
- export IMAGE_TAG=$CI_COMMIT_TAG - export IMAGE_TAG=$CI_COMMIT_TAG
- printf "$KUBE_CONFIG_CONTENT" > /tmp/kubeconfig - printf "$KUBE_CONFIG_CONTENT" > /tmp/kubeconfig

View File

@@ -11,7 +11,7 @@ ARG CONF_DIR="${APP_DIR}/config"
RUN \ RUN \
apt update && \ apt update && \
pip3 install loguru && \ pip3 install loguru && \
pip3 install pymodbus && \ pip3 install pymodbus==3.6.3 && \
pip3 install paho-mqtt pip3 install paho-mqtt
RUN \ RUN \

View File

@@ -12,9 +12,10 @@ data:
MQTT__BROKER: "emqx01-anonymous-cluster-internal.broker.svc.cluster.local" MQTT__BROKER: "emqx01-anonymous-cluster-internal.broker.svc.cluster.local"
MQTT__DIGITALOUTPUTTOPICPREFIX: "dt1/coil" MQTT__DIGITALOUTPUTTOPICPREFIX: "dt1/coil"
MQTT__DIGITALINPUTTOPICPREFIX: "dt1/di" MQTT__DIGITALINPUTTOPICPREFIX: "dt1/di"
MQTT__COILINPUTTOPICPREFIX: "dt1/ci"
MQTT__ANALOGINPUTEVENTTOPICPREFIX: "dt1/ai/event" MQTT__ANALOGINPUTEVENTTOPICPREFIX: "dt1/ai/event"
MQTT__ANALOGINPUTPERIODICTOPICPREFIX: "dt1/ai/periodic" MQTT__ANALOGINPUTPERIODICTOPICPREFIX: "dt1/ai/periodic"
MQTT__ANALOGPUBLISHPERIOD: "60.0" MQTT__ANALOGINPUTPUBLISHPERIOD: "60.0"
MQTT__DISABLEANALOGINPUTEVENTPUBLISHING: "true" MQTT__DISABLEANALOGINPUTEVENTPUBLISHING: "true"
MODBUS__CLIENT: "172.16.2.31" MODBUS__CLIENT: "172.16.2.31"
MODBUS__SCANRATE: "0.25" MODBUS__SCANRATE: "0.25"

View File

@@ -22,6 +22,7 @@ class MqttEventPublisher(AbstractMqttPublisher):
continue continue
discreteInputChangeset = self.processImage.getChangedDiscreteInputs() discreteInputChangeset = self.processImage.getChangedDiscreteInputs()
coilInputChangeset = self.processImage.getChangedCoils()
if not self.disableAnalogInputEventPublishing: if not self.disableAnalogInputEventPublishing:
analogInputChangeset = self.processImage.getChangedAnalogsInputs() analogInputChangeset = self.processImage.getChangedAnalogsInputs()
@@ -34,6 +35,15 @@ class MqttEventPublisher(AbstractMqttPublisher):
str(discreteInputChangeItem[1][0]), str(discreteInputChangeItem[1][0]),
retain=True) retain=True)
for coilInputChangeItem in coilInputChangeset:
logger.debug("Coil input {} changed from {} to {}"
.format(coilInputChangeItem[0],
coilInputChangeItem[1][1],
coilInputChangeItem[1][0]))
self.client.publish("{}/{}".format(self.config["coilInputTopicPrefix"], str(coilInputChangeItem[0])),
str(coilInputChangeItem[1][0]),
retain=True)
if not self.disableAnalogInputEventPublishing: if not self.disableAnalogInputEventPublishing:
for analogInputChangeItem in analogInputChangeset: for analogInputChangeItem in analogInputChangeset:
logger.debug("Analog input {} changed from {} to {}" logger.debug("Analog input {} changed from {} to {}"

View File

@@ -64,12 +64,12 @@ class ProcessImage(Condition):
self.coils[coilNum] = value self.coils[coilNum] = value
self.coilEvent.set() self.coilEvent.set()
# def getChangedCoils(self): def getChangedCoils(self):
# if not self.initialized: if not self.initialized:
# raise NotInitializedException raise NotInitializedException
# changedCoils = zippingFilter(self.coils, self.shadowCoils) changedCoils = zippingFilter(self.coils, self.shadowCoils)
# self.shadowCoils = self.coils # self.shadowCoils = self.coils
# return changedCoils return changedCoils
def getCoils(self): def getCoils(self):
if not self.initialized: if not self.initialized:

View File

@@ -4,8 +4,9 @@ from loguru import logger
class Config: class Config:
OPTIONS = { OPTIONS = {
'mqtt': [ 'broker', 'mqtt': [ 'broker',
'digitalOutputTopicPrefix',
'digitalInputTopicPrefix', 'digitalInputTopicPrefix',
'digitalInputTopicPrefix', 'coilInputTopicPrefix',
'analogInputEventTopicPrefix', 'analogInputEventTopicPrefix',
'analogInputPeriodicTopicPrefix', 'analogInputPeriodicTopicPrefix',
'analogInputPublishPeriod', 'analogInputPublishPeriod',