Alamos-MQTT Anbindung an Alarmiator - ERH

Nur hier kurz zur Info.

Die Kreisbrandinspektion Erlangen-Höchstadt bietet die Statusausleitung an Drittsysteme in naher Zukunft nur noch über die MQTT Schnittstelle von Alamos an.

Ein passendes Plugin für den Alarmiator ist in der Entwicklung.

Sobald die Anbindung auf unserem System läuft, folgt eine Anleitung über die erforderliche Installation und Konfiguration.

Hallo,

bei uns (Lkr. Haßberge) wir auch gerade auf Alamos umgestellt. Wie ist der Stand mit dem Plugin?

Wäre schön, wenn ich den aktuellen Stand vorab schon mal zum basteln/testen haben könnte.

Gruß Patrick

Hallo zusammen,

wir haben jetzt ein Plugin hierfür in der beta Version released. alarmiator/alarmiator - Docker Image

Wenn ihr Docker nutzt mit latest tag oder Versionstag des Release könnt ihr auf latest-beta umstellen, um das Image zu nutzen.

Viele Grüße

Edit: Falls jemand nativ unterwegs ist hier ein Weg wie man Sachen leicht aus dem latest-beta Docker Container kriegt:

docker create --name alarmiator-temp alarmiator/alarmiator:latest-beta

Das erstellt den Container ohne ihn aber zu starten.

docker cp alarmiator-temp://alarmiatorserver/plugins/inbound/alamos ./alamos-plugin

Kopiert den Ordner für z.B das Alamos Plugin aus dem Container auf dein lokales Filesystem.

docker rm alarmiator-temp

Damit kannst du den temp container wieder entfernen. Das ist generell für alles möglich.

Falls du nicht weißt wo der Ordner oder das File ist das du suchst musst du den Container starten:

docker run --rm -it --entrypoint /bin/bash alarmiator/alarmiator:latest-beta

Hiermit wird der Container gestartet, dir ein Bash Terminal aufgemacht indem du mit ls und cd suchen kannst. Tippst du dann exit um das Terminal zu verlassen wird dieser Container auch direkt wieder entfernt durch das –rm Flag.

Wir haben unseren Server gestern von KatSys auf den ALAMOS MQTT Connector umgestellt. Anbei unsere Konfig:

Hinweis: Die folgende Konfig wurde für einen Raspi unter DietPi erstellt.
Bei Installationen zB. auf einem vServer kann es erforderlich sein, die Konfig anzupassen.

/home/alarmiator/alarmiatorserver/docker-compose.yaml:

networks:
  alarmiator-network:
    name: alarmiator-network
    driver: bridge

services:
  alarmiator_service:
    networks:
      - alarmiator-network
    restart: always
    image: alarmiator/alarmiator:latest-beta
    healthcheck:
      test: curl --fail http://localhost:5000 || exit 1
      interval: 20s
      retries: 5
      start_period: 600s
      timeout: 10s
    volumes:
      - alarm-db:/alarmiatorserver/store
      - alarm-katsys-uploads:/alarmiatorserver/plugins/inbound/katsys/uploads
      - alarm-public-img:/alarmiatorserver/public/assets/img
      - alarm-uploads:/alarmiatorserver/uploads
      - alarm-logs:/alarmiatorserver/logs
      - alarm-backups:/alarmiatorserver/backup

  caddy:
    networks:
      - alarmiator-network
    image: vnxme/caddy:2.10
    restart: always
    depends_on:
      alarmiator_service:
        condition: service_healthy
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
      - "8883:8883"
    healthcheck:
      test: wget -q -O /dev/null http://localhost || exit 1
      interval: 20s
      retries: 5
      start_period: 15s
      timeout: 10s
    volumes:
      - /home/alarmiator/alarmiatorserver/caddy:/etc/caddy
      - caddy_data:/data
      - caddy_config:/config

  mosquitto:
    networks:
      - alarmiator-network
    restart: always
    image: eclipse-mosquitto:latest
    volumes:
      - /home/alarmiator/alarmiatorserver/mosquitto/config:/mosquitto/config
      - /home/alarmiator/alarmiatorserver/mosquitto/certs:/mosquitto/certs
      - /home/alarmiator/alarmiatorserver/mosquitto/data:/mosquitto/data
      - /home/alarmiator/alarmiatorserver/mosquitto/log:/mosquitto/log

volumes:
  alarm-db:
  alarm-katsys-uploads:
  alarm-public-img:
  alarm-uploads:
  alarm-logs:
  alarm-backups:
  caddy_data:
  caddy_config:

/home/alarmiator/alarmiatorserver/caddy/Caddyfile:

{
  email ${caddy_email}
  layer4 {
    :8883 {
      @dot tls sni ${caddy_domain}
      route @dot {
        tls
        proxy mosquitto:1883
      }
    }
  }
}

localhost:80 {
  respond 80
}

(proxy_options) {
  header_down Strict-Transport-Security "max-age=31536000"
  header_down Content-Security-Policy "upgrade-insecure-requests"
  header_down Referrer-Policy "strict-origin-when-cross-origin"
  header_down X-Content-Type-Options "nosniff"
  header_down Permissions-Policy "geolocation=(self \"https://${caddy_domain}\"), microphone=()"
}

${caddy_domain} {
  log {
    output file /etc/caddy/caddy.log
    format json
  }
  header {
    -Server
  }
  handle_path /api/* {
    reverse_proxy alarmiator_service:5010 {
      import proxy_options
    }
  }
  handle /socket.io/* {
    reverse_proxy alarmiator_service:5020 {
      import proxy_options
    }
  }
  handle /spaceport/socket.io/* {
    reverse_proxy alarmiator_service:5555 {
      import proxy_options
    }
  }
  handle {
    reverse_proxy alarmiator_service:5000 {
      import proxy_options
    }
  }
}

/home/alarmiator/alarmiatorserver/mosquitto/config/mosquitto.conf

plugin_load pwd /usr/lib/mosquitto_password_file.so
plugin_opt_password_file /mosquitto/config/passwd

plugin_load acl /usr/lib/mosquitto_acl_file.so
plugin_opt_acl_file /mosquitto/config/aclfile

# External listener configuration
listener 1883
listener_allow_anonymous false
plugin_use pwd
plugin_use acl

# Internal listener configuration
listener 1884
listener_allow_anonymous false
plugin_use pwd

# Persistence
persistence true
persistence_location /mosquitto/data/

# Logging
log_dest file /mosquitto/log/mosquitto.log
#log_type error
#log_type warning
#log_type notice
log_type information
#log_type subscribe
#log_type unsubscribe
#log_type all

/home/alarmiator/alarmiatorserver/mosquitto/config/aclfile

user statusausleitung
topic write alamos/alarmiator

user alarmiator
topic read alamos/alarmiator

/home/alarmiator/alarmiatorserver/mosquitto/config/passwd

alarmiator:$7$1000$0xhRdgLHXLeqgMYzSFTKbkOJi1VSbux3mS2ylDqIplpVVCjqkgwBrlmknH9roaFI3CsMZ3F8tS99mmSRcDnEhw==$ySuO02IltqVfYlTRq/4LXV1A3r8TSwCcbAu6YcKlcRNuRFfJbIpSBFkMq+Zv/zVWY4D7iiq4qy3gUzL/EvWVvA==
statusausleitung:$7$1000$qtrvMIlOtjZE/GD4x3juvylINcRs1CbIRUUzoeRqulv0Wtmy4BdXl05d1CbkzGTPjqMqFWcPNfcXm8SbGR5vlw==$Wy8poJaXCE5p55Cz93eNtHWlNk17rJaz00W4Ke5sWEd2AriZKn/N1BOaFA5yiRoVpzx4UaA88328ONeH4b3wXQ==

Der mosquitto ist etwas wählerisch mit den Dateirechten, folgende Anpassungen sind nötig in der Shell:

chown alarmiator:1883 /home/alarmiator/alarmiatorserver/mosquitto/config
chown alarmiator:1883 /home/alarmiator/alarmiatorserver/mosquitto/log
chmod 775 /home/alarmiator/alarmiatorserver/mosquitto/config
chmod 775 /home/alarmiator/alarmiatorserver/mosquitto/log
chown 1883:1883 /home/alarmiator/alarmiatorserver/mosquitto/config/aclfile
chmod 660 /home/alarmiator/alarmiatorserver/mosquitto/config/aclfile
chown 1883:1883 /home/alarmiator/alarmiatorserver/mosquitto/config/passwd
chmod 660 /home/alarmiator/alarmiatorserver/mosquitto/config/passwd

Das passwd File für Mosquitto definiert die User statusauslietung und alarmiator mit dem Default Passwort feuer. Um dieses zu ändern kann man folgenden Befehl in der Shell verwenden:

docker exec -it alarmiatorserver-mosquitto-1 /bin/su -l mosquitto -s /bin/sh -c "/usr/bin/mosquitto_passwd -b /mosquitto/config/passwd ${mqtt_user} ${mqtt_password}"

Wenn das Ganze gestartet wird, dann haben wir neben dem Alarmiator einen MQTT Broker laufen, der von außen per SSL über Port 8883 (Routerweiterleitung nicht vergessen) erreichbar ist. Der User statusausleitung kann in das Topic alamos/alarmiator schreiben, der User alarmiator kann das Topic lesen. Intern ist der Broker über Port 1883 erreichbar. In der Konfig ist auch der Port 1884 definiert, wo beide User lesen und schreiben können.

Im Alamos MQTT-Connector muss man folgende Werte eingeben:

  • Broker URL: mqtt://mosquitto
  • Broker Port: 1883
  • Username: alarmiator
  • Password: feuer (oder neu definiertes Passwort)
  • Topic: alamos/alarmiator

Im Container befinden sich die Parser im Verzeichnis

/alarmiatorserver/plugins/inbound/alamos/parsers

Einen Parser für die Statusausleitung der Kreisbrandinspektion ERH kann ich auf persönliche Nachricht gerne weitergeben.