Ausgangssituation: 1. ein Raspberry-PI mit Raspbian-Linux auf SD-Karte -> SD Karte mit dem Programm rpi-imager beschreiben 2. auf dem PC sudo nat.sh ausführen. Evtl. die Interfacenamen und ip-Subnetze in nat.sh anpassen 2. per ssh mit dem Raspberry verbinden. Wer keine ipv4 vergeben hat, kann es mit ipv6 versuchen, dazu mit ping ff02::1% die ipv6 des Raspberries ermitteln. 3. ggfs. in der Datei /etc/dhcpcd.conf eine statische Adresse vergeben; Raspi und PC müssen im selben Subnetz sein, d.h. das Interface auf dem PC z.b. mit der Adresse 10.10.10.254/24 konfigurieren und den Raspi mit 10.10.10.1; siehe hierzu auch Punkt 2 oben (subnetze) nicht vergessen: in /etc/dhcpcd.conf den PC als Router eingtragen (10.10.10.254); als Nameserver 10.16.1.1 (Schulserver) eintragen 4. raspi-config aufrufen und die 1-wire-schnittstelle aktivieren und ggfs. das Dateisystem expandieren (nur bei neu beschriebener SD-Karte) 5. Die Datei /etc/modules auf dem Raspi muss so aussehen: # /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. wire w1_gpio w1_therm 5. Raspberry ausschalten und ggfs Temperatursensor anstecken; Raspberry wieder einschalten 6. per ssh auf den Raspberry verbinden 7. testweise dieses Kommando ausführen: cat /sys/bus/w1/devices//temperature die ID des Tempsensors bekommt man angezeigt, wenn man beim Eingeben des Kommandos fleissig mit der TAB-Taste arbeitet. bei mir sieht das dann so aus: cat /sys/bus/w1/devices/28-f8eccb0664ff/temperature 30312 8. Eine Shell auf dem PC starten und dort einen Satz Schlüssel erstellen, wie hier beschrieben: https://mosquitto.org/man/mosquitto-tls-7.html Achtung: den Server-Key so erstellen: Generate a server key without encryption. openssl genrsa -out server.key 2048 Alternativ, dieses 7z-Archiv mit fertigen Schlüsseln verwenden: https://dt.wara.de/pdf/its/netzwerkTechnik/mqtt/tlsDateien.7z und mit 7z x tlsDateien.7z auspacken und dann die Datei ca.crt auf den raspberry kopieren: scp ca.crt pi@10.10.10.1:~ so landet die Datei ca.crt im Heimatverzeichnis /home/pi/ca.crt 8a. ************************************************************** * Achtung NEU * ************************************************************** wenn man das Archiv tlsDateien.7z auspackt, entsteht das Verzeichnis tlsDateien/ mit den Schlüsseln. In diesem Verzeichnis muss man kontrollieren, ob Leserechte für den mosquitto-Dienst für die Datei server.key vorhanden sind. Sieht bei mir so aus, wenn man das Archiv auspackt: -rw-r--r-- 1 micha micha 1675 15. Sep 15:17 server.key Die Rechte sind so vergeben: der Besitzer der Datei (micha) darf Lesen + Schreiben: rw Die Gruppe, der die Datei gehört darf nur lesen: r Alle anderen dürfen lesen: r openssl erstellt den Schlüssel so, dass zunächst nur der Besitzer und die Gruppe Leserechte haben. der mosquitto-Dienst kann dann den Schlüssel nicht einlesen. Abhilfe: entweder Leserechte an alle (sehr, sehr schlecht, da unsicher) vergeben VIEL BESSER: die Datei server.key dem Benutzer mosquitto geben und die Rechte einschränken: sudo chown mosquitto server.key sudo chmod 600 server.key Erläuterung 600 ist eine Oktalzahl, binär: 110 000 000 -> rw- --- --- u g o user gruppe others 9. auf dem PC dem Broker konfigurieren, die Datei /etc/mosquitto/mosquitto.conf muss so aussehen: # Place your local configuration in /etc/mosquitto/conf.d/ # # A full description of the configuration file is at # /usr/share/doc/mosquitto/examples/mosquitto.conf.example # bei meiner installation ist es tatsächlich: # pid_file /run/mosquitto/mosquitto.pid pid_file /var/run/mosquitto/mosquitto.pid persistence true persistence_location /var/lib/mosquitto/ log_dest file /var/log/mosquitto/mosquitto.log allow_anonymous true listener 8883 tls_version tlsv1.2 cafile certfile keyfile include_dir /etc/mosquitto/conf.d dann den Broker neustarten: sudo /etc/init.d/mosquitto restart sudo /etc/init.d/mosquitto status 10. auf dem PC einen subscribe-client starten, dabei den Pfad zur ca.crt anpassen: mosquitto_sub --tls-version tlsv1.2 -t labor/temp1 -h localhost --insecure --cafile -p 8883 11. auf dem Raspberry ausführen, dabei den Pfad zur ca.crt und die 1wire-sensor-id anpassen: mosquitto_pub -h 10.10.0.1 -t labor/temp1 -p 8883 --insecure --cafile --tls-version tlsv1.2 -m $(cat /sys/bus/w1/devices/<1wireID>/temperature) 12. folgende Frage recherchieren und beantworten: was ist Kommandosubstitution und wo wird sie in Punkt 11 angewendet? 13. wenn Punkte 10 und 11 funktionieren, einen cronjob auf dem Raspberry starten, der jede Minute das Kommando aus 11 startet. ACHTUNG: im Kommando für den Cronjob unbedingt ABSOLUTE PFADE für ca.crt verwenden!!!: Editieren der cronjob-tabelle auf dem Raspberry mit: crontab -e 14. wer fertig ist, möge bitte die Zertifikate so erstellen, dass die Kommandos auch ohne --insecure funktionieren. Dazu muss beim Server-Zertifikat der CommonName = CN mit dem Hostname des Brokers übereinstimmen. Müsste irgendwas mit R023-1xx.wara.de oder vielleicht auch nur R023-1xx sein. Durch die Eingabe von hostname im Terminal wird der Hostname angezeigt,