Python Programm per Befehl beenden

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Denke ich auch, dass das dann passt ... ich mein' - ich hab' von MQTT keine Ahnung und bin habe das verlinkte Zeugs vorhin auch nur kurz überflogen ...

    Aber ich denke, da findest Du eine Menge Hinweise zum Ablauf und zum Abfangen von disconnects.

    Diese LWT-message könnte da auch eine Möglichkeit darstellen.

    //EDIT: Und dieser timeout lädt doch geradezu zum experimentieren ein ... einfach mal auf 1 setzen und schauen was passiert, wenn Du 2 oder mehr Sekunden keine Nachricht schickst ...

    Würde mich schwer wundern, wenn das nicht möglich wäre ... mir ist bisher noch keine Client-Server Anwendung untergekommen, bei der das nicht möglich ist. Selbst bei "connectionless" Verbindungen kennen beide Seiten stets den Status ...

    cu,

    -ds-

  • Ich bin jetzt doch mal neugierig geworden und muss feststellen, daß ich das Problem nicht nachvollziehen kann. Mit diesem simplen Code:

    verbindet sich der client sauber wieder mit mosquitto, wenn ich das stoppe und wieder starte. Während mosquitto down ist, meckert er auch brav die Probleme an. Kann es sein, daß Du es Dir zu kompliziert gemacht hast?

    Nachtrag: In mosquitto kommen mit qos=1 übrigens auch tatsächlich alle veröffentlichten Nachrichten an.

    Den simplen mit loop_start() ohne irgendwelche weiteren Versuche Fehler im loop abzufangen habe ich so garnicht versucht, (glaube ich).

    Möglich dass ich mit irgendeinem handling meinen loop zerschossen habe.

    Ich versuch das mal so, und geb morgen früh bescheid, ob das läuft! (Falls nicht, kann ich euch jedoch leider nicht sagen, wo der fehler liegt...)

    Natürlich mache ich Fehler :stumm:

  • Hallo,

    meine Vermutung ist nach wie vor (auch) falsches ExceptionHandling und / oder unnötig komplizierte Programmierung. Aber TE ist bis jetzt meinem obigen Wunsch, den kompletten Code zu posten (und nicht nur den "ich denke das hier der Fehler ist" Teil zu posten), nicht nachgekommen...

    Gruß, noisefloor

    Das einzige was ich raus genommen habe waren Teile wie

    Wenn daher Fehler kommen sollten, würde mich das stark wundern.

    Meine Ursprünglichen Versuche habe ich nicht mehr alle, da ich das Programm wenn etwas nicht lief umgeschrieben habe und nicht jede Version gespeichert habe, kann ich leider nicht mit allem dienen.


    Außerdem brauche ich sowieso noch bestimmt zwei Wochen, um alle Tips, die hier gegeben wurden auszuuprobieren, (da der Server/Host nur einmal täglich neu startet und ich nur dann schauen kann, ob mein aktueller Ansatz funktioniert.

    Darum habe ich den Beitrag (eigentlich) vor zwei Tagen schon als erledigt markiert.

    Ist nicht böse gemeint, ich bin euch allen wirklich sehr dankbar für die Hilfe!!

    Aber ich komm nicht hinterher das alles umzusetzen (und wenn das alles nicht läuft eröffne ich lieber in zwei wochen ein Thema mit dem Title "Mein MQTT funktioniert nicht" oder so, damit die Diskussion auch zum Thema passt...)

    Natürlich mache ich Fehler :stumm:

  • Hallo,

    Zitat

    Wenn daher Fehler kommen sollten, würde mich das stark wundern.

    a) sind nackte `try... except` _immer_ ein Fehler, b) es ist in der Regel auch ein Fehler, wenn man für sich selber bestimmt Codeteile kategorisch als Fehlerursache ausschließt.

    BTW: für das Logging kann man das `logging` Modul nehmen, was braucht man über File I/O nicht selber nachbauen. Zumal das logging-Modul deutlich flexibler ist.

    Und wenn du trotzdem bei deiner Lösung bleibst: die Datei solltest du mit dem with-Statement öffnen - dann hast du die Garantie, dass die Datei auch geschlossen wird. Selbst dann, wenn dein Prog bei `obj.write(..)`crashen sollte.

    Bzgl. des Testens: kannst du dir nicht selber testweise eine MQTT Server aufsetzen? Immer 24 h warten und bestimmte Serverausfälle nicht selber "provozieren" können ist ja auch nicht gerade hilfreich...

    Gruß, noisefloor

  • BTW: für das Logging kann man das `logging` Modul nehmen, was braucht man über File I/O nicht selber nachbauen. Zumal das logging-Modul deutlich flexibler ist.

    kannte ich noch nicht, werde ich mir anschauen! Danke

    Und wenn du trotzdem bei deiner Lösung bleibst: die Datei solltest du mit dem with-Statement öffnen - dann hast du die Garantie, dass die Datei auch geschlossen wird. Selbst dann, wenn dein Prog bei `obj.write(..)`crashen sollte.

    Ja, da hast du recht! einen crash bei write() hatte ich nicht bedacht.

    Bzgl. des Testens: kannst du dir nicht selber testweise eine MQTT Server aufsetzen? Immer 24 h warten und bestimmte Serverausfälle nicht selber "provozieren" können ist ja auch nicht gerade hilfreich...

    Ich habe einen lokalen Server, auf dem ich auch Tests mache, da ich jedoch nicht die exakten Einstellungen des eigentlichen Servers kenne, kann ich ihn natürlich nicht zu 100% nachbauen. Auf meinem lokalen Server funktioniert fast alles, was ich ausprobiert habe. Mein Mosquitto verhält sich so, wie man es erwartet.
    Leider kann ich meinen Server nicht anstelle des "fremden" Servers nutzen, da mein Server nur lokal erreichbar ist. Ich habe mich noch nicht genug mit IT-Sicherheit (allgemein) befasst, als dass ich es mir zutraue alles so einzurichten, dass ich mir keine Sorgen machen muss wenn ich den Server übers Internet zugänglich mache.

    Natürlich mache ich Fehler :stumm:

  • Außerdem brauche ich sowieso noch bestimmt zwei Wochen, um alle Tips, die hier gegeben wurden auszuuprobieren, (da der Server/Host nur einmal täglich neu startet und ich nur dann schauen kann, ob mein aktueller Ansatz funktioniert.

    Deshalb hatte ich ja hier geschrieben

    //EDIT: Und dieser timeout lädt doch geradezu zum experimentieren ein ... einfach mal auf 1 setzen und schauen was passiert, wenn Du 2 oder mehr Sekunden keine Nachricht schickst ...

    cu,

    -ds-

  • Hallo,

    Wurzelbert: mal so rein Interesse halber - warum nutzt du gerade diesen exteren MQTT-Server? Der ist ja im Prinzip eine große Blackbox.

    Wenn du keine Erfahrung mit der Serveradministration und Absicherung hast ist ein externen Server natürlich besser, als den eigenen, eventuell schelcht / falsch konfigurierten Server im Internet zu exponieren.

    Was ich für private / Hobbyprojekte ja immer brauchbar finde (und aktiv nutze), ist AWS. Wenn du nicht einen Berg Traffic generiest, bleibt man meistens unter der Grenze, wo es was kostet. AWS hat auch einen MQ-Server namens Amazon MQ, wo du Zugriff auf Teile der Konfig, den Logs etc hat.

    Gruß, noisefloor

  • Wurzelbert: mal so rein Interesse halber - warum nutzt du gerade diesen exteren MQTT-Server? Der ist ja im Prinzip eine große Blackbox.

    Ich nutze diesen Server, weil ich mal mit nem bekannten drüber gesprochen habe, dass ich meine Sensordaten gerne Streamen würde, um Sie überall zu empfangen, und er meinte bei ihm in der Firma steht noch ein alter Server rum, den eigentlich keiner mehr nutzt, außer um Daten in Datenbanken abzulegen, da könne ich den MQTT Broker gerne nutzen, das ist dann auch schon die ganze Geschichte :blush:

    Was ich für private / Hobbyprojekte ja immer brauchbar finde (und aktiv nutze), ist AWS. Wenn du nicht einen Berg Traffic generiest, bleibt man meistens unter der Grenze, wo es was kostet. AWS hat auch einen MQ-Server namens Amazon MQ, wo du Zugriff auf Teile der Konfig, den Logs etc hat.

    Perfekt, das werde ich mal ausprobieren!!

    :danke_ATDE::danke_ATDE::danke_ATDE:

    Natürlich mache ich Fehler :stumm:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!