Mibakus Smartmeter-Server

Hausverwaltung für private Vermieter

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:

Die folgenden Operatoren sind erlaubt:

Operationen mit Strings können eingesetzt werden, wenn der JSON-Decoder einen String als Ausgabe erzeugt.