Raspi-globale-Variable

  • Moin Experten,

    nach etwas Raspi-Leerlauf hat es mich wieder voll gepackt.

    Es geht um folgendes:

    Ich habe mehrere Python-Programme, die gleichzeitig laufen, bzw. angestoßen werden. Darüber ist eine php- Oberfläche mit Buttons angelegt, die Schaltvorgänge auslösen können. Das funktioniert alles prima.

    Nun möchte ich beispielsweise die Außentemperatur, die ein RTL433- Stick mittels Python aufgereitet auf der Weboberfläche darstellen.

    Ich möchte also in dem RTL433-Programm die aktuelle Temperatur in eine Variable schreiben, die ich im php einfach aufrufen kann.

    Etwas vergleichbar mit 'date' das kann ich auch überall aufrufen und ich erhalte Datum und Uhrzeit.

    Für zweckdienliche Hinweise wäre ich dankbar. Dank im voraus !!

  • Warum schreibst Du das nicht nach /tmp?

    Da kannst Du dir den Variablennamen letztendlich aussuchen:

    Code
            op = open ('/tmp/Test-Variable', 'w')
            op.write ('{0:0.0f}\n'.format (Deine-Variable))
            op.close ()

    Hier wird einfach nur eine Integerzahl in /tmp/Test-Varable abgespeichert.

    MfG

    Jürgen

  • Mach doch einfach mal ein touch /tmp/Test

    Und ja, Du kannst auch in Deinem Home-Verzeichnis ein weiteres Verzeichnis anlegen.

    Genauer, Du kannst in Deinem Home-Verzeichnis so ziemlich alles machen was Du willst..

    Aber Vorsicht, Linux verzeiht keine Fehler. Man geht davon aus, das Du weißt was Du tust.

    Das Beispiel oben schreibt einen Wert in eine Datei in /tmp, die ich irgendwann mit einem Bash-Script wieder auslese.

    Ich bin an diesem Python3-Script, aus dem dieses Beispiel stammt, noch ein bißchen am tüfteln.

    Wird demnächst hier erscheinen.

    MfG

    Jürgen

  • Hallo,

    noch ein bißchen am tüfteln.

    wenn du da gerade dran bist, dann vermeide am besten 'open' und 'close' und nehm stattdessen das 'with'-Statement. Dann wird die Datei wieder geschlossen, egal aus welchem Grund der 'with'-Block verlassen wird. Es kommt also nicht vor, dass eine Datei nicht wieder geschlossen wird.

    Wenn du dann noch mit Pfaden arbeitest, dann bietet sich 'pathlib' an. Die Bibliothek unterstützt auch das schreiben in Dateien und das ziemlich komfortabel, 'with' ist hier nicht notwendig:

    Python
    from pathlib import Path
    
    TEXT_FILE = Path('/home/pi/text_file.txt')
    
    def main():
        TEXT_FILE.write_text('Hallo')
    
    
    if __name__ == '__main__':
        main()

    Wenn du allerdings eine Option wie 'a' oder 'w' nutzen willst, musst du 'with' verwenden:

    Wenn es sich, wie in meinem Beispiel, um Textdateien handelt, sollte man das 'encoding' beim öffnen der Datei immer setzen.

    Ohne 'pathlib':


    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Ich hab mal mein Geschreibsel vorab online gestellt:

    Jürgen Böhm
    21. Dezember 2021 um 15:39

    Falls es Kritik daran gibt, dort weiterdiskutieren, ich möchte diesen Thread nicht kapern.

    MfG

    Jürgen

  • Ich habe mir meinen bisher python/php Kram noch einmal angeschaut und festgestellt,

    daß ich die von Euch genannten Versionen, etwas in eine Datei zu schreiben und mit dem

    anderen Programm wieder auszulesen erfolgreich hinbekommen habe.

    jetzt kommt aber das ABER.

    Im html/php nützt mir das nicht viel. Es geht ja nicht nur um Temperaturen, sondern auch die

    Meldung vom GPIO- Skript, daß wirklich von Null auf Eins geschalten wurde.

    Da hatte ich eine Variante bei der jeweils zwei kleine Bildchen für 1/0 rüberkopiert wurden um

    den Zustand anzuzeigen. Das hat zwar funktioniert, aber ziemlich träge und unzuverlässig trotz

    periodischem refresh der php- Seite.

    Falls sich die Sache mit dem Vorschlag von noisefloor entschärft, würde ich mich da mal reinknien.

    Da "date", auch zerpflückt, im php gut funktioniert, dachte ich daß es hier eine vergleichbare Variante geben könnte.

  • Nochmals herzlichen Dank an alle.

    Mir ist eingefallen, daß ich die Sache schon einmal am Laufen hatte.

    Habe die alte Datei gefunden. So sieht es aus:

    a) ich schreibe den aktuellen Temperaturwert mit dem

    rtl433- Programm in eine Datei "/home/pi/Tempa.txt"

    b) auf der php- Seite steht dann:

    <?php

    try {

    $Tempa = "/home/pi/Tempa.txt";

    $data = file_get_contents($Tempa);

    }

    catch(Exception $e) {

    echo "<p>Es ist ein Fehler aufgetreten.</p>";

    }

    ?>

    Im html- Teil weiter unten steht dann:

    <td>

    <p class="txtbox1">ta: &nbsp;

    <?php echo "$data"; ?>&nbsp;°C

    </p>

    </td>

    Der ganze Kram muß noch kräftig überarbeitet werden.

    Bitte Schnappatmung vermeiden.

    Ich bin auch nach Jahren noch ein chaotischer Anfänger

Jetzt mitmachen!

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