Bitte um Hilfe bei Datenabfrage

  • Hallo,
    seit rund 8 Monaten erfasse ich bei uns einige Temperaturen. Dazu nutze ich den 1-wire-Bus mit GPIO4 und ein Skript von Martin Kompf. Das hat mir so gefallen, dass ich das System erweitern möchte.
    Allerdings wird das System jetzt instabil. Der Aufbau am Tisch mit einer aufgewickelten 20m-Leitung ist halt doch was Anderes, als eine gestückelte Fenster zu Fenster Verbindung.
    Eine Lösung könnte der Einsatz eines Busmasters sein. Zumindest am Tisch funktioniert es schon mal mit der Temperaturabfrage nach diesem Tutorial.
    Das Ergebnis sieht so aus:

    Code
    pi@test / $ /home/pi/skripte/temperatur/./owtemp.py
          24.625C
          24.625C
         24.5625C
          24.6C
          24.625C
         24.5625C
          24.625C
              85C
         24.5625C


    Es fehlen rechts die Nullen und auch die Fehlmessung (vorletzter Wert) wird akzeptiert.


    Nun habe ich aber das Problem, dass ich kein Programmierer bin und froh bin, wenn ich so einigermaßen verstehe, was die Profis hier herzaubern können. Ich möchte schon, dass ich meine bisherige Datenbank beibehalte und "nur" die Datenquelle ändere.
    Bisher wird die Datei /sys/bus/w1/devices/**/w1/slave

    Code
    20 01 4b 46 7f ff 10 10 fc : crc=fc YES
    20 01 4b 46 7f ff 10 10 fc t=18000


    abgefragt


    zugeordnet und in die RRD-Datenbank eingetragen.


    Nach dem neuen Tutorial wird so abgefragt:

    und die Datendatei sieht so aus: /mnt/28.***/1wire/temperature

    Code
    25.375


    Aber wie ich das jetzt zusammenbringen kann, habe ich keine Idee.

    Ich habe mehrere Temperatursensoren und möchte in einer späteren Ausbaustufe weitere andere Sensoren abfragen, also nur deren Vorhandensein prüfen.
    Könnt ihr mir helfen?

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,

    Einmal editiert, zuletzt von docadams (13. September 2014 um 14:26)

  • würde

    find /sys/bus/w1/devices/28*

    helfen ?, gibt dir zumindest alle Sensoren aus die mit 28 beginnen

    Idee, find in ein Textfile listen
    Textfile öffnen, path mit ID auslesen

    und dann zugreifen

    aber schlange kann ich nicht programmieren, in batch sind andere besser, ich glaube ich würde das in C machen

    system find > ergebnis.txt
    open ergebnis.txt
    while ! EOF
    read line; parse line; auswerten, was tun;

    Ende

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Leider nein.
    Mein Problem ist, dass dieser Busmaster nicht die bewährte Struktur /sys/bus/w1/devices/28-00123../w1_slave mit dem bekannten Inhalt erzeugt.

    Statt dessen erzeugt er (als USB-Busmaster darf er das ja auch) 2 neue Ordner in /sys/bus/usb/devices, nämlich 1-1.2 und 1-1.2:1.0. und das mit jeder Menge Unterordnern, in denen ich mich nicht zurecht finde.

    Na gut, dann habe ich gefunden, dass OWFS wohl in diesen Ordnern doch die Temperatur auslesen kann und entsprechend dem Tutorial in eine Datei Namens Temperatur schreibt. In dieser Datei steht der nackte Zahlenwert, aber schon mit Kommastelle.

    Eigentlich gefällt das mir nicht, weil nun noch ein Programm mitmischt, obwohl ich ja schon für die Temperaturspeicherung die Round Robin Database nutze. Aber was hilfts.

    Mein jetziges Problem ist, die unten gezeigte Abfrageroutine so zu ändern, dass nur der Zahlenwert in die RRD eingetragen wird.
    Als Laie denke ich mal, dass es dieser Teil der Routine ist:


    Die if-Abfrage

    Code
    if re.match(r"([0-9a-f]{2} ){9}: crc=[0-9a-f]{2} YES", line):
          line = f.readline()


    muss raus, weil es je kein YES gibt,
    die Zeile muss angepasst werden:

    Code
    m = re.match(r"([0-9a-f]{2} ){9}t=([+-]?[0-9]+)", line)


    und das wieder raus, weil der Wert schon korrekt ist:

    Code
    if m:
            value = str(float(m.group(2)) / 1000.0)

    Aber wie gesagt, habe keinen wirklichen Plan...

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,

  • Meinst du den Inhalt der Datei temperature? So wie im ersten Post dargestellt, nur ohne das "C", das von dem Abfrageprogramm drangehängt wird.
    In der Datei steht nur die nackte Zahl, ohne eventuelle letzte Null:

    Code
    24.625
           24.625
          24.5625
           24.6
           24.625
          24.5625
           24.625
               85
          24.5625


    Ich kann es im Moment nicht testen, ich vermute aber mal, im einstelligen Bereich wird keine Null oder Leerzeichen eingefügt. Auch weiß ich nicht, wo ein eventuelles Minuszeichen steht. Das könnte ich aber spätestens morgen wissen.

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,

  • Warum willst Du das Programm welches den ganzen Kram mit hex Werten und CRC parsed nehmen? Nimm doch das zweite Programm. Das macht doch schon alles.

    Irgendwie verstehe ich wohl Dein Problem nicht :s


  • Nimm doch das zweite Programm. Das macht doch schon alles.

    Irgendwie verstehe ich wohl Dein Problem nicht :s

    Meinst du damit OWSF?
    Weil ich mit RRD schon eine nicht uninteressante Messperiode habe und auch, weil ich so einigermaßen verstehe, wie es funktioniert. Und es ja ansonsten auch funktioniert und die Temperaturmessung als solche das "Versuchsstadium" verlassen hat.

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,

Jetzt mitmachen!

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