MQTT: Difference between revisions
mNo edit summary |
(knmi2mqtt) |
||
(19 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
== | == Brokers == | ||
In MQTT-land heet een server een "broker" en een verbinding tussen twee servers heet een "bridge". We gebruiken 4 brokers (allemaal mosquitto) met daartussen bridges: | |||
=== intern: mosquitto.space.revspace.nl (op gateway) === | |||
Op de server gateway draait de primaire broker. Alle payloads worden hierop gepublisht, en dan met uitgaande en inkomende bridge-verbindingen met brokers gedeeld. Vrijwel alle scripts zouden deze server moeten gebruiken, zowel voor subscriben als voor publishen. | |||
Toegestane topics zijn: | |||
; revspace/# | |||
: Vergaarbak van allerhande sensors, knopjes, etc. Alles binnen dit topic wordt via de bridges gedeeld met brokers binnen en buiten het RevSpace-LAN. | |||
; revspace-local/# | |||
: Dingen die lokaal moeten blijven ivm privacy. Alles binnen dit topic wordt via de bridges gedeeld met brokers binnen het RevSpace-LAN. | |||
; shellies/# | |||
: In apparaatjes van het merk Shelly dit helaas hardcoded. We gebruiken scripts om de data te boetseren en te her-publishen naar handigere dingen onder revspace/#. | |||
; revdebug/#, zandbak/# | |||
: Bruikbaar voor debugdumps en projecten in test- of aanklootfase | |||
; zigbee2mqtt/# | |||
: In gebruik voor zigbee2mqtt. Deze dingen spreken een eigen JSON-gebaseerd protocol. Dit topic is read-only voor anonieme users om totale chaos te voorkomen | |||
; bambu/# | |||
: Direct gebridged naar de mosquitto broker van de [[Bambu_Lab_X1_Carbon]], gooit een berg JSON op bambu/<ID>/report | |||
=== intern: ledbanner === | |||
De mosquitto op ledbanner maakt een enkele uitgaande bridge-verbinding naar gateway, zodat alle scripts op de Raspberry Pi gewoon met localhost kunnen verbinden. Dat gaat sneller en werkt ook als de ledbanner op reis is (gebeurt vrijwel niet meer) en dus niet in het RevSpace-LAN zit. | |||
=== extern: revspace.nl === | |||
Krijgt een inkomende verbinding vanaf gateway en geeft openbaar readonly toegang op revspace/# zodat iedereen kan meegenieten. Draait ook mqtt2web voor wat dynamische aanduidingen op de wiki. | |||
=== extern: test.mosquitto.org === | |||
Krijgt een inkomende verbinding vanaf gateway en geeft ook toegang op revspace/#, omdat het kan. Er is geen enkele zinnige reden om dit te doen, anders dan bijdragen aan de continue praktijktest van het mosquitto-project. Voor extern uitlezen van onze sensors e.d. kun je beter niet deze server gebruiken, hoewel het voor een totaal yoloding met een heleboel baggerdata erop een verbazingwekkend goede uptime heeft. | |||
== | == Topics == | ||
Subscribers alleen vermelden als het voor spacegebruik relevant is. Grafiekjes kunnen hier worden weggelaten. | |||
Deze lijst is incompleet; graag aanvullen :) | |||
{|class=wikitable | |||
! topic !! publishers/subscribers !! omschrijving | |||
|- | |||
| revspace/telefoon || pub: [[Telefoon2.0]] (revphone.flimpie.net)<br>sub: [[ledbanner]] || kondigt telefoonnummer aan van beller naar de spacetelefoon, altijd icm cam4-censuur | |||
|- | |||
| revspace/bambu/+ || pub: f0x@gateway:bambu-mqtt/ || Specifieke data van de [[Bambu_Lab_X1_Carbon]]: name, gcode_state, layer, layer_total, progress, remaining | |||
|- | |||
| revspace/bank/+ || pub: bar@gateway:plugins/revspace_mqtt || verkoopteller per revbank product_id | |||
|- | |||
| revspace/button/doorbell || pub: deurbel-esp op basis van 24V AC input<br>sub: mqtt2irc@gateway, [[ledspace]], [[ledbanner]] || deurbel bij gagaredeur | |||
|- | |||
| revspace/button/nomz || pub: nomzknop-esp's<br>sub: mqtt2irc@gateway, [[ledspace]], [[ledbanner]] || aan tafel! | |||
|- | |||
| revspace/button/skip, stop, shuffle, vol_up, vol_down || pub: skipknop<br>sub: ? || afstandbediening voor muzieksysteem | |||
|- | |||
| revspace/cams || pub: count-mqtt@pov<br>sub: [[ledspace]] || spatiegescheiden aantal kijkers, [0] is totaal, [1] is cam1, etc. | |||
|- | |||
| revspace/doorduino || pub: doorduino-mqtt@gateway<br>sub: mqtt2irc@gateway || "$deur unlocked by $naam"-berichten, [[Doorduino opt-in|gepseudonimiseerd]] waar nodig. NB: ledbanner gebruikt een andere! | |||
|- | |||
| revspace/doorduino/checked-in || pub: doorduino-mqtt@gateway<br>sub: mqtt2irc@gateway, [[revfan]], [[extradoei]], [[doorduino]], [[vollamp]] || aantal ingecheckte mensen | |||
|- | |||
| revspace/doorduino/count, count-since, last, unique || pub: doorduino-mqtt@gateway || | |||
|- | |||
| revspace/fan || pub: [[revfan]] || of de fan vindt dat ie aanstaat | |||
|- | |||
| revspace/flipdot || pub: doorduino-mqtt@gateway<br>sub: [[flipdot]] || flipdot laat zien wat je hier publisht | |||
|- | |||
| revspace/intakefan/state || pub: [[intakefancontroller]] || of de fan vindt dat ie aanstaat | |||
|- | |||
| revspace/lasercutter || pub: lasercutter-pc<br>sub: <s>[[revfan]]</s> || of de lasercutter aanstaat (wordt dit nog gebruikt?) | |||
|- | |||
| revspace/lichtgordijn || pub: lichtgordijn<br>sub: mqtt2irc@gateway || bewegingsdetectie bij garagedeur | |||
|- | |||
| revspace/lightstate/+ || pub: [https://github.com/revspace/lichtknop diverse esp's] <br>sub: power-mqtt@gateway:powerconverter, licht-mqtt@gateway || of het licht aan staat, "on"/"off" | |||
|- | |||
| revspace/lightstate/hoofdruimte_{bar,tv}/set || pub: licht-mqtt@gateway<br>sub: esp bij lichtsysteem || zet licht aan/uit | |||
|- | |||
| revspace/lightstate/minderlicht + /set || psub: licht-mqtt@gateway<br>spub: zigbee-minderlicht@gateway || ledlamp hoofdruimte | |||
|- | |||
| revspace/n_max || pub: juerd@gateway:static_max_n.pl (cron) <br>sub: [[vollamp]], pi@doorduino:max_n || huidig maximum aantal toegestane mensen op de space | |||
|- | |||
| revspace/photo || pub: photos2mqtt@mediaserver<br>sub: mqtt2irc@gateway || URL van nieuwste kiekje | |||
|- | |||
| revspace/sensors/ac/frequency || pub: ? || ongeveer 50 Hz | |||
|- | |||
| revspace/sensors/bliksem/+/bliksem, status || pub: [[bliksem]] || bliksemdetectie | |||
|- | |||
| revspace/sensors/co2/+ || pub: diverse esp's, operames || CO2-concentratie div. ruimtes | |||
|- | |||
| revspace/sensors/co2 || pub: [[CO2MeterHacking]]<br>sub: [[revfan]] || CO2-concentratie hoofdruimte volgens de oude voltcraftmeter | |||
|- | |||
| revspace/sensors/geiger || pub: [[geigercounter]] || aantal geigers per minuut :P | |||
|- | |||
| revspace/sensors/humidity || pub: [[CO2MeterHacking]] || luchtvochtigheid hoofdruimte | |||
|- | |||
| revspace/sensors/knmi/# || pub: [https://github.com/revspace/knmi2mqtt/ knmi2mqtt]@shell-bookworm:peetz0r || Temperatuur en luchtvochtigheid van 3 weerstations in de buurt | |||
|- | |||
| revspace/sensors/netvuil/peak, peak_time || pub: ? || | |||
|- | |||
| revspace/sensors/power/# || pub: power-mqtt@gateway:powerconverter || re-published data op basis van shellies/# en revspace/lightstate/+ | |||
|- | |||
| revspace/sensors/pir/+ || pub: zigbee-alarm@gateway<br>sub: mqtt2irc@gateway || bewegingssensors | |||
|- | |||
| revspace/sensors/snuffelaar/+/# || pub: div. [[snuffelaar]] || luchtkwaliteit in div. ruimtes, soms ook CO2 | |||
|- | |||
| revspace/sensors/temperature/+/+ || pub: [[spaceloop]] || temperatuur, veelal op onhandige plaatsen gemeten | |||
|- | |||
| revspace/sensors/temperature || pub: [[CO2MeterHacking]] || temperatuur hoofdruimte | |||
|- | |||
| revspace/state || pub: spaceloop@gateway:slmonitor<br>sub: heel erg veel || of de space open of dicht is; scriptje monitort seriële output van arduino die spanning van de [[space state|schakelaar]] krijgt. | |||
|- | |||
| revspace/weather/clouds, code || pub: ? || | |||
|- | |||
| revspace/wifi/# || pub: ? || wifi-statistieken | |||
|- | |||
| revspace-local/doorduino/checked-in || pub: doorduino-mqtt@gateway<br>sub: pi@doorduino:max_n || spatiegescheiden nicknames, met evt diverse prefixes | |||
|- | |||
| revspace-local/doorduino-checked-in/unixtime || pub: doorduino-mqtt@gateway<br>sub: [[doei]] || spatiegescheiden afgewisseld nickname en tijdstip van inchecken | |||
|- | |||
| revspace-local/doorduino/autodoei/unlocked || pub: doorduino-mqtt@gateway || bericht bevat nickname | |||
|- | |||
| revspace-local/doorduino/extradoei/+/unlocked || pub: [[extradoei]]<br>sub: doorduino-mqtt@gateway || topic bevat id van extradoei, bericht bevat id van ibutton | |||
|- | |||
| revspace-local/doorduino/extradoei/unlocked || pub: doorduino-mqtt@gateway || bericht bevat nickname | |||
|- | |||
| revspace-local/doorduino/opt-in/unlock || pub: doorduino-mqtt@gateway<br>sub: pi@doorduino:unlock-via-mqtt || om groen ledje te laten branden | |||
|- | |||
| revspace-local/doorduino/opt-out/unlock || pub: doorduino-mqtt@gateway<br>sub: pi@doorduino:unlock-via-mqtt || om groen ledje te laten branden | |||
|- | |||
| revspace-local/doorduino/+/unlocked || pub: pi@[[doorduino]]:granted.d<br>sub: doorduino-mqtt@gateway || topic bevat naam van deur, bericht bevat nickname | |||
|- | |||
| revspace-local/ledbanner/doorduino || pub: doorduino-mqtt@gateway<br>sub: [[ledbanner]], constatus@pov || net als revspace/doorduino, maar dan zonder pseudonimisatie, en met opt-in-aanduiding | |||
|- | |||
| revspace-local/ledbanner/cam4overlay || pub: [[ledbanner]]<br>sub: constatus@pov || activeert overlay op cam4 om ledbanner af te dekken bij doorduinomelding van iemand zonder opt-in | |||
|- | |||
| revspace-local/spacevredebreuk/# || pub: zigbee-alarm@gateway<br>sub: ledbanner, ledspace, mediaplayer || [[alarm]] | |||
|- | |||
| shellies/# || pub: [[elektra|Shelly 3EM]]<br>sub: power-mqtt@revgateway:powerconverter || rauwe data van shelly device(s) | |||
|- | |||
| zigbee2mqtt/# || pub: zigbee2mqtt raspberry pi<br>sub: zigbee@revgateway:trv-guard || o.a. verwarming | |||
|- | |||
| zigbee2mqtt/#/set || pub: zigbee@revgateway:trv-setpoint || o.a. verwarming | |||
|} | |||
== Live sensortjes gluren == | |||
https://revspace.nl/maquette/ | |||
To receive/subscribe to these messages, download mosquitto-clients, or | == How to == | ||
To receive/subscribe to these messages, install mqtt-simple using "cpan Net::MQTT::Simple" or "yum install perl-Net-MQTT-Simple", or download mosquitto-clients, or another MQTT library and write your own client. | |||
For mosquitto-clients, use: | For mosquitto-clients, use: | ||
(public server) | (public server) | ||
mosquitto_sub -h | mqtt-simple -h revspace.nl -s "revspace/#" | ||
# Alternatively: mosquitto_sub -h revspace.nl -t "revspace/#" -v | |||
or: | or: | ||
(revspace internal or ipv6 server) | (revspace internal or ipv6 server) | ||
mqtt-simple -h mosquitto.space.revspace.nl -s "revspace/#" | |||
# Alternatively: mosquitto_sub -h mosquitto.space.revspace.nl -t "revspace/#" -v | |||
== Server Side Events == | == Server Side Events == | ||
Line 61: | Line 172: | ||
== Scripts == | == Scripts == | ||
* The power monitoring script is ' | * The power monitoring script is 'powerconverter' and runs as 'power-mqtt' user on gateway | ||
* The music related events come from '/home/bar/squeezen/now-playing.pl' running as 'spaceloop' on gateway (klopt dit nog?) | |||
* The music related events come from '/home/bar/squeezen/now-playing.pl' running as 'spaceloop' on gateway | * The spacestate messages come from 'slmonitor', running as 'spaceloop' on gateway | ||
* The spacestate | * The KNMI weather data comes from '[https://github.com/revspace/knmi2mqtt/ knmi2mqtt]', running as peetz0r on shell-bookworm | ||
* The |
Latest revision as of 18:16, 24 May 2024
Brokers
In MQTT-land heet een server een "broker" en een verbinding tussen twee servers heet een "bridge". We gebruiken 4 brokers (allemaal mosquitto) met daartussen bridges:
intern: mosquitto.space.revspace.nl (op gateway)
Op de server gateway draait de primaire broker. Alle payloads worden hierop gepublisht, en dan met uitgaande en inkomende bridge-verbindingen met brokers gedeeld. Vrijwel alle scripts zouden deze server moeten gebruiken, zowel voor subscriben als voor publishen.
Toegestane topics zijn:
- revspace/#
- Vergaarbak van allerhande sensors, knopjes, etc. Alles binnen dit topic wordt via de bridges gedeeld met brokers binnen en buiten het RevSpace-LAN.
- revspace-local/#
- Dingen die lokaal moeten blijven ivm privacy. Alles binnen dit topic wordt via de bridges gedeeld met brokers binnen het RevSpace-LAN.
- shellies/#
- In apparaatjes van het merk Shelly dit helaas hardcoded. We gebruiken scripts om de data te boetseren en te her-publishen naar handigere dingen onder revspace/#.
- revdebug/#, zandbak/#
- Bruikbaar voor debugdumps en projecten in test- of aanklootfase
- zigbee2mqtt/#
- In gebruik voor zigbee2mqtt. Deze dingen spreken een eigen JSON-gebaseerd protocol. Dit topic is read-only voor anonieme users om totale chaos te voorkomen
- bambu/#
- Direct gebridged naar de mosquitto broker van de Bambu_Lab_X1_Carbon, gooit een berg JSON op bambu/<ID>/report
intern: ledbanner
De mosquitto op ledbanner maakt een enkele uitgaande bridge-verbinding naar gateway, zodat alle scripts op de Raspberry Pi gewoon met localhost kunnen verbinden. Dat gaat sneller en werkt ook als de ledbanner op reis is (gebeurt vrijwel niet meer) en dus niet in het RevSpace-LAN zit.
extern: revspace.nl
Krijgt een inkomende verbinding vanaf gateway en geeft openbaar readonly toegang op revspace/# zodat iedereen kan meegenieten. Draait ook mqtt2web voor wat dynamische aanduidingen op de wiki.
extern: test.mosquitto.org
Krijgt een inkomende verbinding vanaf gateway en geeft ook toegang op revspace/#, omdat het kan. Er is geen enkele zinnige reden om dit te doen, anders dan bijdragen aan de continue praktijktest van het mosquitto-project. Voor extern uitlezen van onze sensors e.d. kun je beter niet deze server gebruiken, hoewel het voor een totaal yoloding met een heleboel baggerdata erop een verbazingwekkend goede uptime heeft.
Topics
Subscribers alleen vermelden als het voor spacegebruik relevant is. Grafiekjes kunnen hier worden weggelaten.
Deze lijst is incompleet; graag aanvullen :)
topic | publishers/subscribers | omschrijving |
---|---|---|
revspace/telefoon | pub: Telefoon2.0 (revphone.flimpie.net) sub: ledbanner |
kondigt telefoonnummer aan van beller naar de spacetelefoon, altijd icm cam4-censuur |
revspace/bambu/+ | pub: f0x@gateway:bambu-mqtt/ | Specifieke data van de Bambu_Lab_X1_Carbon: name, gcode_state, layer, layer_total, progress, remaining |
revspace/bank/+ | pub: bar@gateway:plugins/revspace_mqtt | verkoopteller per revbank product_id |
revspace/button/doorbell | pub: deurbel-esp op basis van 24V AC input sub: mqtt2irc@gateway, ledspace, ledbanner |
deurbel bij gagaredeur |
revspace/button/nomz | pub: nomzknop-esp's sub: mqtt2irc@gateway, ledspace, ledbanner |
aan tafel! |
revspace/button/skip, stop, shuffle, vol_up, vol_down | pub: skipknop sub: ? |
afstandbediening voor muzieksysteem |
revspace/cams | pub: count-mqtt@pov sub: ledspace |
spatiegescheiden aantal kijkers, [0] is totaal, [1] is cam1, etc. |
revspace/doorduino | pub: doorduino-mqtt@gateway sub: mqtt2irc@gateway |
"$deur unlocked by $naam"-berichten, gepseudonimiseerd waar nodig. NB: ledbanner gebruikt een andere! |
revspace/doorduino/checked-in | pub: doorduino-mqtt@gateway sub: mqtt2irc@gateway, revfan, extradoei, doorduino, vollamp |
aantal ingecheckte mensen |
revspace/doorduino/count, count-since, last, unique | pub: doorduino-mqtt@gateway | |
revspace/fan | pub: revfan | of de fan vindt dat ie aanstaat |
revspace/flipdot | pub: doorduino-mqtt@gateway sub: flipdot |
flipdot laat zien wat je hier publisht |
revspace/intakefan/state | pub: intakefancontroller | of de fan vindt dat ie aanstaat |
revspace/lasercutter | pub: lasercutter-pc sub: |
of de lasercutter aanstaat (wordt dit nog gebruikt?) |
revspace/lichtgordijn | pub: lichtgordijn sub: mqtt2irc@gateway |
bewegingsdetectie bij garagedeur |
revspace/lightstate/+ | pub: diverse esp's sub: power-mqtt@gateway:powerconverter, licht-mqtt@gateway |
of het licht aan staat, "on"/"off" |
revspace/lightstate/hoofdruimte_{bar,tv}/set | pub: licht-mqtt@gateway sub: esp bij lichtsysteem |
zet licht aan/uit |
revspace/lightstate/minderlicht + /set | psub: licht-mqtt@gateway spub: zigbee-minderlicht@gateway |
ledlamp hoofdruimte |
revspace/n_max | pub: juerd@gateway:static_max_n.pl (cron) sub: vollamp, pi@doorduino:max_n |
huidig maximum aantal toegestane mensen op de space |
revspace/photo | pub: photos2mqtt@mediaserver sub: mqtt2irc@gateway |
URL van nieuwste kiekje |
revspace/sensors/ac/frequency | pub: ? | ongeveer 50 Hz |
revspace/sensors/bliksem/+/bliksem, status | pub: bliksem | bliksemdetectie |
revspace/sensors/co2/+ | pub: diverse esp's, operames | CO2-concentratie div. ruimtes |
revspace/sensors/co2 | pub: CO2MeterHacking sub: revfan |
CO2-concentratie hoofdruimte volgens de oude voltcraftmeter |
revspace/sensors/geiger | pub: geigercounter | aantal geigers per minuut :P |
revspace/sensors/humidity | pub: CO2MeterHacking | luchtvochtigheid hoofdruimte |
revspace/sensors/knmi/# | pub: knmi2mqtt@shell-bookworm:peetz0r | Temperatuur en luchtvochtigheid van 3 weerstations in de buurt |
revspace/sensors/netvuil/peak, peak_time | pub: ? | |
revspace/sensors/power/# | pub: power-mqtt@gateway:powerconverter | re-published data op basis van shellies/# en revspace/lightstate/+ |
revspace/sensors/pir/+ | pub: zigbee-alarm@gateway sub: mqtt2irc@gateway |
bewegingssensors |
revspace/sensors/snuffelaar/+/# | pub: div. snuffelaar | luchtkwaliteit in div. ruimtes, soms ook CO2 |
revspace/sensors/temperature/+/+ | pub: spaceloop | temperatuur, veelal op onhandige plaatsen gemeten |
revspace/sensors/temperature | pub: CO2MeterHacking | temperatuur hoofdruimte |
revspace/state | pub: spaceloop@gateway:slmonitor sub: heel erg veel |
of de space open of dicht is; scriptje monitort seriële output van arduino die spanning van de schakelaar krijgt. |
revspace/weather/clouds, code | pub: ? | |
revspace/wifi/# | pub: ? | wifi-statistieken |
revspace-local/doorduino/checked-in | pub: doorduino-mqtt@gateway sub: pi@doorduino:max_n |
spatiegescheiden nicknames, met evt diverse prefixes |
revspace-local/doorduino-checked-in/unixtime | pub: doorduino-mqtt@gateway sub: doei |
spatiegescheiden afgewisseld nickname en tijdstip van inchecken |
revspace-local/doorduino/autodoei/unlocked | pub: doorduino-mqtt@gateway | bericht bevat nickname |
revspace-local/doorduino/extradoei/+/unlocked | pub: extradoei sub: doorduino-mqtt@gateway |
topic bevat id van extradoei, bericht bevat id van ibutton |
revspace-local/doorduino/extradoei/unlocked | pub: doorduino-mqtt@gateway | bericht bevat nickname |
revspace-local/doorduino/opt-in/unlock | pub: doorduino-mqtt@gateway sub: pi@doorduino:unlock-via-mqtt |
om groen ledje te laten branden |
revspace-local/doorduino/opt-out/unlock | pub: doorduino-mqtt@gateway sub: pi@doorduino:unlock-via-mqtt |
om groen ledje te laten branden |
revspace-local/doorduino/+/unlocked | pub: pi@doorduino:granted.d sub: doorduino-mqtt@gateway |
topic bevat naam van deur, bericht bevat nickname |
revspace-local/ledbanner/doorduino | pub: doorduino-mqtt@gateway sub: ledbanner, constatus@pov |
net als revspace/doorduino, maar dan zonder pseudonimisatie, en met opt-in-aanduiding |
revspace-local/ledbanner/cam4overlay | pub: ledbanner sub: constatus@pov |
activeert overlay op cam4 om ledbanner af te dekken bij doorduinomelding van iemand zonder opt-in |
revspace-local/spacevredebreuk/# | pub: zigbee-alarm@gateway sub: ledbanner, ledspace, mediaplayer |
alarm |
shellies/# | pub: Shelly 3EM sub: power-mqtt@revgateway:powerconverter |
rauwe data van shelly device(s) |
zigbee2mqtt/# | pub: zigbee2mqtt raspberry pi sub: zigbee@revgateway:trv-guard |
o.a. verwarming |
zigbee2mqtt/#/set | pub: zigbee@revgateway:trv-setpoint | o.a. verwarming |
Live sensortjes gluren
How to
To receive/subscribe to these messages, install mqtt-simple using "cpan Net::MQTT::Simple" or "yum install perl-Net-MQTT-Simple", or download mosquitto-clients, or another MQTT library and write your own client.
For mosquitto-clients, use:
(public server) mqtt-simple -h revspace.nl -s "revspace/#" # Alternatively: mosquitto_sub -h revspace.nl -t "revspace/#" -v
or:
(revspace internal or ipv6 server) mqtt-simple -h mosquitto.space.revspace.nl -s "revspace/#" # Alternatively: mosquitto_sub -h mosquitto.space.revspace.nl -t "revspace/#" -v
Server Side Events
JavaScript example, see for example https://bewaar.me/mqtt/#
var stream = new EventSource('https://revspace.nl/mqtt?revspace%2F%23='); stream.onmessage = function(e) { var data = JSON.parse(e.data); if (data.length !== 3) throw 'invalid data'; }
Scripts
- The power monitoring script is 'powerconverter' and runs as 'power-mqtt' user on gateway
- The music related events come from '/home/bar/squeezen/now-playing.pl' running as 'spaceloop' on gateway (klopt dit nog?)
- The spacestate messages come from 'slmonitor', running as 'spaceloop' on gateway
- The KNMI weather data comes from 'knmi2mqtt', running as peetz0r on shell-bookworm