ich habe in Python ein kleines Programm geschrieben, durch dass
ein RevPi Core 3 Werte per MQTT an die Cloud eines Drittanbieters senden soll.
Damit die Autentifizierung an der Cloud funktioniert, sind zusätzlich
zu dem Programm auch Zertifikat-Dateien notwendig.
Das Programm wurde auf einem Windows 10 Rechner erfolgreich ausgeführt
(Werte sind in der Cloud angekommen).
Auf dem RevPi Core 3 funktioniert das Programm nicht, obwohl eine
Internetverbindung besteht, die Zertifikatdateien vorhanden sind und
das Packet paho-mqtt installiert ist.
Auf dem RevPi Core erhalte ich folgende Fehlermeldung, wenn ich dass
Programm im Python IDLE 3.4.2 ausfuehre:
>>>
Traceback (most recent call last):
File "/home/pi/Test/test.py", line 117, in <module>
client.connect(broker, broker_port, 60)
File "/usr/local/lib/python3.4/dist-packages/paho/mqtt/client.py", line 839, in connect
return self.reconnect()
File "/usr/local/lib/python3.4/dist-packages/paho/mqtt/client.py", line 994, in reconnect
sock.do_handshake()
File "/usr/lib/python3.4/ssl.py", line 804, in do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:600)
Code: Select all
[code]
>>>
Wenn ich das Programm auf dem RevPi Core3 mit Python IDLE 2.7.9 ausführe, gibt es die selbe Fehlermeldung
wie oben, bis auf das die Pfade natürlich auf 2.7 verweisen und _ssl.c:581 anstatt 600 ist.
Ich habe zunächst als Ursache die Pythonversionen im Verdacht gehabt, weil auf dem Windows PC
Python IDLE 3.6.5 und Eclipse mit Python 3.6.5 installiert sind.
Ein Test mit Python 3.4.2 auf dem Windows PC führt zu dem selben Fehler wie RevPi Core 3 mit
Python 3.4.2.
Mittlerweile schließe ich aber die unterschiedlichen Pythonversionen als Ursache aus, weil:
1. Das Script funktioniert auf einem virtuellen Suse Linux mit Python 2.7.15 und 3.6.5
2. Das Script funktioniert auf einem Raspberry Pi mit Python 3.5.3.
Auffällig ist noch folgendes: Mit den Browers des Windows PC (Mozilla) und des
Raspberry Pi (Chromium 60...) öffnet sich die entsprechende Internetnetseite
des Cloud Drittanbieters, wenn die URL, die sich in der Variabel "broker" befindet,
in die Adresszeile des Browsers mit https:// eingeben wird.
Auf dem RevPi Core 3 (Webbrowers Web 3.8.2) wird die Internetseite nicht geöffnet,
sondern nur in der URL-Zeile das Logo des Drittanbieters angezeigt. Es gibt keine
Fehlermeldung; der Inhalt des Webbrowser bleibt einfach leer.
Das Python Programm möchte ich hier nicht posten, da es die URL des Drittanbieters
beinhaltet und das Programm ohne die Zertifikat-Dateien nicht getest werden kann.
Was könnte die Ursache sein, dass das Programm auf dem RevPi Core 3 mit
dem obigen Fehler abbricht?