Konfiguration des Smartmeter-Servers
Die Konfiguration des Mibakus Smartmeter-Servers erfolgt durch einen Konfigurationsfile im Format YAML.
Beim Start durch Docker liegt der File im Verzeichnis config und hat den Namen mibasmserver.conf.yaml.
Beim Start als System-Service wird der Pfad des Files im Service-Skript angegeben.
Beispielfile
# Konfigurationsfile für den Mibakus Smartmeter Server
#
# Der File besteht aus mehreren Abschnitten, die jeweils mit zwei Leerzeichen eingerückt sind.
# Teilweise gibt es auch mehrere Ebenen.
# Zeilen die mit einem # beginnen, sind Kommentare und ohne Funktion
# (Voreinstellungen in Klammern)
# Generelle Optionen
general:
# Name eines Verzeichnisses, in dem alle Daten abgelegt werden (/data)
dataDirectory: /path/to/storage
# Email-Adresse des Administrators. An diese Adresse werden von mibasmserver Statusmails versendet
adminMailAddress: admin@provider.de
# Zeitzone. Diese Angabe ist nur notwendig, denn auf dem Rechner eine falsche Zeitzone eingerichtet ist
zoneId: Europe/Berlin
# Uhrzeit, um die die Verbrauchsabrechnungen und der Versand der Status-Nachrichten durchgeführt werden sollen (08:00)
actionTime: "08:00"
# Tag des Monats, an dem die Verbrauchsabrechnungen durchgeführt werden sollen. Es muss sichergestellt werden,
# dass die Daten des Vormonats zu dem Zeitpunkt vorliegen (2)
actionDay: 2
# Zählerbezeichnung des Außentemperatursensors. Wenn dieser vorhanden ist, wird er zur Berechnung
# der witterungsangepassten Verbrauchsvergleiche benutzt. Ohne werden Standardwerte benutzt
outdoorTemperature: lorawan-id.temperature
# Wenn dieser Parameter gesetzt ist, wird die Adresse als replyTo in die Verbrauchmails gesetzt.
# Im Normalfall sollte hier die Mailadresse des Vermieters gesetzt werden.
replyTo: vermieter@provider.de
# An die im nächsten Parameter gesetzte E-Mail-Adresse werden die Verbrauchsmitteilungen zusätzlich gesendet.
# Das kann zu Beginn zur Kontrolle verwendet werden
bcc: vermieter@provider.de
# Mit diesem Parameter wird angegeben, wann planmäßig die Statusmail gesendet werden soll. Die Voreinstellung ist ein
# täglicher Versand (m1/1). Mit der Angabe "w1" würde die Mail jeden Montag gesendet werden, mit "w3"
# jeden Mittwoch. Es sind auch Kombinationen möglich, z.B. "w1,w15,w6" versendet immer am 1. und 16. eines Monats und
# an jedem Samstag. Mit einem Zusatz können auch Reihen eingestellt werden, z.B. versendet "m1/3" eine Mail am
# 1., 4., 7., 10. u.s.w.
statusMailSchedule: m1/1
# Mit dem nächsten Parameter wird zunächst ein Test-Modus eingeschaltet. "mail-to-admin" verhindert, dass E-Mails
# an Mieter versendet werden, stattdessen werden sie an die Administrator-Adresse gesendet. Wenn alles funktioniert,
# kann der Wert auf "normal" geändert werden (normal)
operationMode: mail-to-admin
# Optionen für die HTTP-Schnittstelle für den Webbrowser
gui:
# Passwort für den Login auf der GUI
adminPassword: admin
# Passwort für den Login des Mibakus-Programms
mibakusPassword: geheim
# Portnummer des HTTP-Servers. Kann entfallen, wenn HTTP nicht benutzt werden soll. Ein Port ist Pflicht
httpPort: 8081
# Portnummer des HTTPS-Servers. Kann entfallen, wenn HTTPS nicht benutzt werden soll. Ein Port ist Pflicht
httpsPort: 8041
# Filename des Keystore Files für das HTTPS Server Zertifikat.
# Wenn nicht angegeben, wird der File https-key.pkcs12 im Data Directory verwendet.
# Es kann ein absoluter Pfad angegeben werden oder nur ein Dateiname, der daa im Data Directory erwartet wird
httpsKeystore: /path/to/keystore
# Passwort für den Keystore
httpsKeystorePassword: password
# Ein Keystore ist für den Betrieb von HTTPS notwendig, weil es das Server-Zertifikat enthält.
# Wenn kein Keystore bereitgestellt wird, erzeugt mibasmserver ein selbst signiertes Zertifikat.
# Es benutzt dazu das Programm keytool aus der Java-Runtime mit folgender Kommandozeile
#
# keytool -genkey -alias server -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -storetype PKCS12 -keystore <filename>
# -storepass <password> -keypass <password> -dname <dname> -ext <extensions> -validity 3660
#
# <dname> ist ein String, der unter anderem den Hostnamen enthält: "CN=<hostname>, O=mibasmserver, C=DE"
# <extensions> wird aus dem Hostnamen und weiteren gefundenen Namen und IP-Adressen erzeugt:
# "SAN=dns:<hostname>,dns:<hostname2>,ip:<ip1>,ip:<ip2>"
#
# Wenn mehrere Instanzen des mibasmserver auf einem Rechner aktiv sind, empfiehlt es sich, dasselbe Zertifikat für alle
# HTTPS-Server zu verwenden
# Optionen für den E-Mail-Versand.
# Hier müssen die vom E-Mail-Provider angegebenen Daten eingetragen werden
smtp:
# Daten zum SMTP-Server des Providers
server:
# Adresse des SMTP-Servers
host: smtp.provider.de
# Portnummer des SMTP-Servers
port: 25
# Wenn eine Verschlüsselung durch STARTTLS stattfinden soll, muss dieser Parameter true sein (false)
starttls: true
# auth muss false sein, wenn eine Authentifizierung des Anwenders nicht notwendig ist (true)
# auth: true
# Für den Server zu benutzende SSL-Versionen (TLSv1.2)
# sslProtocols: TLSv1.2
# Mit dem folgenden Parameter kann ein spezieller Hostname eingestellt werden, dem im SSL-Protokoll vertraut
# werden soll. Normalerweise ist dieser Parameter unnötig
# sslTrust: host.name.to.trust
# Daten zum E-Mail-Konto
account:
# E-Mail-Adresse des Kontos
address: name@provider.de
# Benutzername für die Authentifizierung
username: name
# Passwort für die Authentifizierung
password: password
chirpStack:
# Es sind beliebig viele Unterabschnitte für MQTT-Verbindungen möglich. Die Namen können frei gewählt werden.
chirp:
# Je nach Konfiguration muss die Verbindung mit oder ohne Verschlüsselung durch SSL aufgebaut werden (true)
ssl: false
# Die IP-Adresse des ChirpStack Servers
address: <ip-address>
# Portnummer des Servers (1883 ohne SSL, 8883 mit SSL)
port: 1883
# Der folgende Parameter ist nur nötig, wenn nur auf die LoRaWAN-Geräte einer bestimmten im ChirpStack-Server
# definierten Applikation zugegriffen werden soll. Dann muss die im Kopf der Applikationsansicht gezeigte
# application id eingetragen werden, nicht der Applikationsname. Wenn der Parameter nicht angegeben wird,
# sind alle LoRaWAN-Geräte des ChirpStack-Servers sichtbar, unabhängig von der zugeordneten Applikation
# applicationId: "f68b9125-5252-4c0f-b1e2-d02149b6eb37"
# Abschnitt für The-Things-network
ttn:
# Es sind beliebig viele Unterabschnitte für MQTT-Verbindungen möglich. Die Namen können frei gewählt werden.
# Die Inhalte für Verbindungen zum öffentlichen oder zu eigenen Servern unterscheiden sich leicht.
# Dieses ist ein Beispiel für eine Verbindung zu einem privaten Server
private-ttn:
# Je nach Konfiguration muss die Verbindung mit oder ohne Verschlüsselung durch SSL aufgebaut werden (true)
ssl: false
# Die IP-Adresse des TTN-Servers
address: <ip-adresse>
# Portnummer des Servers (1883 ohne SSL, 8883 mit SSL)
port: 1883
# Die Application-ID muss wie bei der Anlage angegeben werden
applicationId: my-application-id
# Als username wird der Name des Users angegeben, unter der die Konfiguration im TTN-Server angelegt worden ist
username: admin
# API-Key, wie er bei der Anlage des Keys im TTN-Server erzeugt worden ist
apiKey: NNSXS.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
# Dieser Abschnitt beschreibt eine Verbindung zum öffentlichen Server
public-ttn:
# SSL ist immer eingeschaltet und die Portnummer ist Standard. Diese Elemente können deshalb entfallen
# Die IP-Adresse ist immer eu1.cloud.thethings.network
address: eu1.cloud.thethings.network
# Die Application-ID muss wie bei der Anlage angegeben werden
applicationId: my-application-id
# Der Username besteht immer aus der Application-ID und "@ttn"
username: my-application-id@ttn
# API-Key, wie er bei der Anlage des Keys im TTN-Server erzeugt worden ist
apiKey: NNSXS.CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
# Abschnitt zur Definition von Sensoren.
# Ein Sensor für die Außentemperatur wird automatisch angelegt, wenn er im Abschnitt general angegeben wurde
sensors:
# Die Namen der Sensoren können frei gewählt werden
Temperatur-Innen:
# Adresse des Sensors. Diese Angabe ist notwendig
device: lht65-1.TempC_SHT
# Einheit. Sie wird nur für Anzeigezwecke benutzt und kann auch entfallen
unit: "°C"
Feuchte-Innen:
# Adresse eines weiteren Sensors
device: lht65-1.Hum_SHT
unit: "%"
Feuchte-Außen:
# Der vierte Messpunkt des LHT65
device: lht65-1.Ext_Hum_SHT
unit: "%"
# Abschnitt zur Definition von Alarmen
# Alarme prüfen ständig die Werte von Sensoren auf die Einhaltung einer Bedingung.
# Wenn die Bedingung nicht mehr erfüllt ist, wird eine E-Mail gesendet, ebenso wenn sie wieder erfüllt ist
alarms:
# Die Namen der Alarme können frei gewählt werden
Schimmelgefahr:
# In diesem Feld wird die Bedingung angegeben
condition: "Feuchte-Innen > 65"
# Ein zweiter Alarm
Frost:
# Die Bedingung
condition: "Feuchte-Außen < 0"
# Die Liste der Empfänger der E-Mail. Ohne Angabe wird sie an den Administrator gesendet
recipients: "name1@provider1.de, name2@provider2.com"
Bedingungen
In Bedingungen für Alarme können beliebige Ausdrücke eingetragen werden. Als Variablen sind alle Sensornamen möglich. Zwischen einem Sensornamen und einem Rechenzeichen muss ein Leerzeichen stehen, weil die Sensornamen auch ‘-’ enthalten können.
Als Konstanten sind erlaubt:
- Zahlwerte mit oder ohne Dezimalpunkt
- Strings, eingeschlossen in ‘"’
Die folgenden Operatoren sind erlaubt:
- ‘+’, ‘-’ als Vorzeichen
- ‘+’, ‘-’, ‘*’, ‘/’ für arithmetische Berechnung
- ‘<’, ‘<=’, ‘>’, ‘>=’, ‘==’, ‘!=’ für Vergleiche
- ‘!’ als logisches NOT
- ‘&’, ‘|’ für logische Operationen
- ‘~’, ‘!~’ zum Match eines Strings mit einem regulären Ausdruck
- ‘(’, ‘)’ zum Klammern
Operationen mit Strings können eingesetzt werden, wenn der JSON-Decoder einen String als Ausgabe erzeugt.
