Posts by noisefloor

    Hallo,


    Quote

    Jetzt wird die letzte Nachricht aber nicht überschrieben, sondern in eine neue Zeile angehängt:

    Das ist ein eine Sache der Shell und nicht von MQTT. Das von dir gezeigte Verhalten sollten aber nicht sein, weil die Umleitung mit `>` die Datei neu anlegt falls nicht existent und überschreibt falls existent. Es sein denn, deine Bash wird mit der Option `-C` (noclobber) aufgerufen.


    Gruß, noisefloor

    Hallo,


    Quote

    aber wo finde ich den Body der Anfrage?

    Den müsstest du generieren. Wobei ich glaube ich zu schnell war: im `scr` Attribut geht das ja gar nicht, da kann "nur" eine URL stehen.


    Plan C: du nutzt ja scheinbar MariaDB oder MySQL. Du könntest noch eine Master-Slave Replikation für die DB bauen, wobei dein Pi der Master und der VServer der Slave der DB ist. Und dann Grafana auch auf dem VServer installieren.


    Gruß, noisefloor

    Hallo,


    Quote

    Auf den ersten Blick war bin ich noch total überfordert.

    Ja, ich auch ;) Wobei es glaube ich gar nicht so kompliziert ist, wie es ausschaut, weil du die URL ja "nur" an einer Stelle teilen musst und dann alles "rechts" davon brauchst.


    Plan B: die Parameter nicht als GET-Parameter in die URL packen, sondern in den Body des Requests. Sofern Grafana damit umgehen kann.


    Gruß, noisefloor

    Hallo,


    Quote

    Ich möchte das, wenn die Sensoren 1 bis 7, auf GPIO.HIGH stehen die Pumpe auch auf GPIO.HIGH geschaltet wird.

    Dann musst du die Sensoren auch abfragen - tust du nämlich in Zeile 192 nicht. `SENSOR1`, `SENSOR2` etc. sind Integer-Werte und nicht Funktionsaufrufe. Da muss dann sowas die `if GPIO.input(SENSOR1) ...` hin.


    Wenn man eine Reihe von Wahrheitswerten abfragen will und alle müssen wahr sein, dann kann man einfach die `any()` Funktion nehmen.


    Ein paar generellen Anmerkungen:

    * das Rpi.GPIO Modul ist veraltet. Stand der Dinge ist das gpiozero-Modul. Was auch eine bessere API hat.

    * Bei einem Aufruf einer Funktion oder Methode kommt zwischen den Namen und die Klammer kein Leerzeichen.

    * In den Zielen 86 bis 126 steht sehr ähnlicher Code -> sollte man bessere eine Funktion für Schreiben, statt Code zu wiederholen.

    * Wenn man anfängt, Variablenamen zu nummerieren sollte man sich überlegen, ob man nicht besser eine Liste zum Speichern der Informationen nimmt.


    Gruß, noisefloor

    Hallo,


    dann stimmt die Konfiguration nicht, also die vorgeschlagene ProxyPass Konfig.


    IMHO reicht die Konfig auch so nicht, weil die GET-Parameter und die anderen Teile der URL nicht weitergegeben sondern abgeschnitten werden (also das `d-solo/jsed0Ukgz/temperatur?orgId=1&refresh=1m&theme=light&panelId=2" frameborder="0"`.

    IMHO musst du noch eine Rewrite-Rule definieren, damit das durch geht.


    100% sicher bin ich da aber nichts, weil ich a) das noch nie gemacht habe und b) nginx als ReverseProxy für meine Python-Apps nutze.


    Gruß, noisefloor

    Hallo,


    weißt du, wie ein Reverse Proxy funktioniert? Du leitest auf dem Webserver im Moment alle Anfrage auf / (also die "Hauptseite" des Servers) an die IP-Adresse 192.168.200.2 weiter. D.h. dein Raspi müsste für den VServer unter 192.168.200.2 erreichbar sein. Ist er aber ziemlich sicher nicht, da 192.168.x.x eine IP-Adresse für private / interne Netzwerke ist.


    Ist dein Pi überhaupt von außerhalb erreichbar? Sonst funktioniert deine Konstellation sowie so nicht.


    Gruß, noisefloor

    Hallo,


    warum willst du denn Nachrichten hier low-level über einen Socket und nimmst nicht ein fertiges und bewährtes Protokoll wie z.B. http(s)? Dann hast du was, was trilliardenfach funktioniert und über Python über div. Webframeworks sehr gut unterstützt wird und auch JSON kann. So sparst du dir die fehleranfällige Selbstimplentierung von Errorhandling, Nachrichtenvalidierung etc.


    Gruß, noisefloor

    Hallo,


    Quote

    Das macht er jetzt sekündlich und ab und zu stürzt dann das Programm ab. Ich vermutet dass das permanete einlesen nicht gut ist. Vermutlich wird der Buffer zu sehr belastet.

    Na ja - was soll denn da überlastest werden? Du liest 1 Byte ein... Wenn das alles richtig programmiert ist, kannst du das schon beliebig oft machen.


    Wenn du Datenpersistenz brauchst, also den letzten Zustand auch noch eine Neustart / Crash / ... des Raspi brauchst, dann musst du halt irgendwie speichern. Ob Datei oder Datenbank oder ...


    Wenn du das nicht brauchst und die Pumpe nach einem Neustart des Pi auch über z.B. über ein Queue oder so was kommunizieren lassen.


    Gruß, noisefloor

    Hallo,


    welchen Fehler bekommst du und wo? IMHO sollte in Zeile 17 ein Fehler kommen, weil `clientsocket` nicht definiert ist.


    Und warum bist du der Meinung, dass du socket-Programmierung brauchst bzw. was hast du vor? socket Programmierung ist a) super low level und b) darum gibt es für viele Fälle besser Lösungen mit fertigen Protokollen.


    Gruß, noisefloor

    Hallo,

    Quote

    Könnte ich eventuell mehrere SD-Karten mit Betriebssystemen bereit halten, um gegebenenfalls zu wechseln - z.B. wenn eine App nicht mit Anbox funktionieren würde, dann auf Android wechseln

    Ja, kannst du. Wenn du den Pi runterfährst kannst du die SD-Karte wechseln und damit auch das Betriebssystem. Multiboot geht nicht so ohne weitere, DeaD_EyE ja schon erklärt hat.


    Gruß, noisefloor