10 Temperatursensoren mit Raspberry pi

die 5 Minuten Wartezeit zur aktualisierung der HM Temperaturmessungen hat mich nicht immer glücklich gemacht. Da kam der Raspi gelegen.

Hardware:

Nachdem nun alles verkabelt ist müssen die benötigten Module noch geladen werden.

modprobe w1-gpio
modprobe w1-therm

damit die Module dann immer beim Start geladen werden muss man diese einfach in der modules Datei eintragen:
/etc/modules

Wenn alles richtig angeschlossen ist, befinden sich im Ordner ("/sys/bus/w1/devices/w1_bus_master1") für jeden Fühler ein Verzeichnis mit den Daten. Dieses Verzeichnis im Script anpassen - zB „28-000003bad286“
Software:
Webserver auf Raspi

Script zum auslesen der Temperaturen: (vielleicht kann da ein Linux-Pro noch dran arbeiten)
abgelegt in „/home/pi/temps.py“

#!/usr/bin/env python
tfile = open("/sys/bus/w1/devices/w1_bus_master1/28-000003bad286/w1_slave")
text1 = tfile.read()
tfile.close()
tempdata1 = text1.split()[-1]
temp1 = float(tempdata1[2:])
temp1 = temp1 / 1000

tfile2 = open("/sys/bus/w1/devices/w1_bus_master1/28-000003bad0b2/w1_slave")
text2 = tfile2.read()
tfile2.close()
tempdata2 = text2.split()[-1]
temp2 = float(tempdata2[2:])
temp2 = temp2 / 1000

tfile3 = open("/sys/bus/w1/devices/w1_bus_master1/28-000003bac591/w1_slave")
text3 = tfile3.read()
tfile3.close()
tempdata3 = text3.split()[-1]
temp3 = float(tempdata3[2:])
temp3 = temp3 / 1000

print 'Bad', temp1
print 'Buero',temp2
print 'Aussen',temp3
bad = temp1
buero = temp2
gang = temp3

f = open("/var/www/ausgabe.php", "w")
#f.seek (10)
f.write(str(bad))
f.seek (10)
f.write(str(buero))
f.seek (20)
f.write(str(gang))
f.close ()

Script in IPS: (ich lass es jede Minute laufen)

<?
$temp    = file("http://192.168.1.241/ausgabe.php");
$bad      = substr($temp[0] , 0,4);
$buero   = substr($temp[0] , 10,4);
$aussen = substr($temp[0], 20,4);

?>

Auf dem Raspi in crontab folgenden Eintrag erstellen (die 5 Sterne lassen das Script jede Minute laufen. */2 * * * * = alle 2 Minuten)

* * * * * python /home/pi/temps.py >>/tmp/out.txt 2>&1

GrößenänderungP2260035.JPG

Hallo Jürg,

toll das sich jemand schon mal damit beschäftigt hat!:smiley:

Mir steht das auch demnächst bevor…

Ich habe mal ein paar Fragen, vielleicht kannst Du die ja (oder auch jemand anders) beantworten.

  • Bei der 1-Wire-Schnittstelle am Raspberry Pi wird ja statt der mir sonst bekannten 5V der Pin mit den 3,3 V genutzt. Wird man diese Schnittstelle auch nutzen können um ihn an den 1-Wire-Hub von Eservice-online anzuschließen?

  • Es gibt ja für den Raspberry Pi auch den OneWireFileServer (owfs). Hast Du den benutzt?

  • Werden mit der 1-Wire-Schnittstelle wie Du sie umgesetzt hast auch andere 1-Wire-Bauteile erkannt?

Joachim

  • Es gibt ja für den Raspberry Pi auch den OneWireFileServer (owfs). Hast Du den benutzt?

nein habe den Lighttpd im Einsatz

  • Werden mit der 1-Wire-Schnittstelle wie Du sie umgesetzt hast auch andere 1-Wire-Bauteile erkannt?

ich hab da auch Neuland betreten. Habe aber glaube ich irgendwo was gelesen mit anderen Bauteilen.

da mich das ganze nicht so befriedigt hat, bin ich nochmals über die Bücher, und habe den Raspi mal aufgefrischt. Nun werden die Daten in eine mySql geschrieben, Google-Graph werden direkt auf dem Raspi erstellt. Die Daten müssen somit in IPS nicht mehr geloggt werden.

Hier die Anleitung

Leider ist das ganze ein wenig „halbherzig“, das heisst, es werden DB-Name, DB-Feldernamen, Host-Name usw. nicht überall übernommen. Also nach dem aufsetzen wartet noch ziemlich Arbeit.

Hier noch der Scriptteil zum Einlesen in IPS:

$host="192.168.1.242"; // Host name
$username="xxxxx"; // Mysql username
$password="xxxxx"; // Mysql password
$db_name="dlog"; // Database name
$tbl_name="dlogtab"; // Table name

//-------------- SQL-Connect und Datenbank auswählen ---------------------------
 mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

//-------------- letzte ID erkennen und Daten in array schreiben ---------------
$query_LOG = mysql_query("SELECT * FROM dlogtab ORDER BY id DESC LIMIT 1");
$lastlog = mysql_fetch_array($query_LOG);
//print_r ($lastlog);
MYSQL_CLOSE();

$zeit 		= $lastlog[1];
$zeit_min 	= substr($zeit, 14, 2);
$schlafen 	= floatval($lastlog[2]);
$dusche 		= floatval($lastlog[3]);
$eschrank 	= floatval($lastlog[4]);
$balkon 		= floatval($lastlog[5]);
$reserve 	              = floatval($lastlog[6]);
$fumoir 		= floatval($lastlog[7]);
$hangar 		= floatval($lastlog[8]);
$essen 		= floatval($lastlog[9]);

Aktuell hab ich noch das Problem, das die Sensoren zwischendurch einen Nuller reinhauen. Das heisst, zwischendurch wird ein Wert mit -0.062 in die DB geschrieben.
Ich habe an jedem ds18b20 einen Wiederstand dran. Irgendwo hab ich gelesen, dass es nur einen bräuchte im „Bus“.
Kann dies ein 1-Wire-Kenner bestätigen und könnte dies der Grund für die Nuller sein?

Einen Pull-up ja aber an jedem Sensor hab ich noch nie gehört.
Hast Du vielleicht verwechselt mit dem Kondensator.

Demzufolge wäre das so richtig?

Kabel vom Raspi -> dann der Wiederstand -> Sensoren.

Der Widerstand ist der Bus-Abschlußwiderstand.

Ist nur ein 18B20 vorhanden und Der ist kurz angelötet, kann Der auch mal entfallen.

Wenn aber ein wenig Leitung dazwischen ist, braucht es einen Pullup.

Boui denkt sicher an parisitärer Versorgung, da gibt es ihn in der Form nicht.

Beim Pokey56E ist es so um 3,3kOhm, muß man probieren.

Gruß Helmut

Sitze gerade in der SAP-Arena und sag mal ja.

Helmut hat mir inzwischen eine Lernstunde in 1-Wire gegeben. :slight_smile: Danke. Ich behalte es jetzt noch ein wenig im Auge und werde dann mal Resultate veröffentlichen.

Hallo Jürg,

nachdem ich heute recht erfolgreich nach Deiner Anleitung (musste nur die Berechtigung von /ausgabe.php ändern) das auch so umgesetzt habe (wie in Post 1) wollte ich gerne wissen, wie denn so die Langzeiterfahrung ist ? Und: was hatte Dich denn an der Lösung in Post#1 gestört ?

Und: hast Du die Sensoren nun so umgebaut wie Helmut und Boui vorgeschlagen hatten ?

Viele Grüße
Martin

Bin zur Zeit in den Ferien und habe mir den Zugang zum iFront abgeschnitten. Schaue dann nächste Woche mal nach.

Juhh JBU das wäre ein Alptraum für mich:-))) genieß die Ferien trotzdem.

So nachdem ich mich jetzt auch damit beschäftigt habe hier einmal meine ersten Tests (siehe Steckboard Bilder mit 2 Stück bevor ich alle 7 entsprechend löten werde; Ziel ist es im Heizraum entsprechend diverse Temperaturen mit zu loggen)

Ich mache es allerdings nicht über den Webserver auf dem Raspberry sondern via ssh Aufruf mit folgendem Skript da ich alle 30sec den Status lesen will und nicht nur 1x pro Minute (Anzeige Temperatur entsprechend auf 3 Nachkomma Stellen eingestellt über entsprechendes eigenes Profil der IP-Symcon Variablen)

<?

//SSH Login : Beginn
include('Net/SSH2.php');

// IP vom Raspberry
$ssh = new Net_SSH2('10.0.0.22');

//Anmeldeuser und Passwort für Raspberry nach UFT8 konvertieren
//nur mit UTF8 Einstellung klappt auch ein putty login
//ohne diese Konvertierung erscheint immer "Login Failed" auch hier per ssh->login
$username = utf8_encode( 'pi' );
$password = utf8_encode( 'hiermeinpasswort' );

if (!$ssh->login($username, $password)) // Hier der echte Login
{
  exit('Login Failed');
}
//SSH Login: Ende

//GPIO Temperaturen holen
$temp = $ssh->exec("python /home/pi/temps.py");

//Alle Zeilen von String in Array splitten
$temparray = explode("
",$temp);

//Durch Leerzeichen getrennt pro Array Eintrag erneut in eigenes Array splitten
$tempgpio1array = explode(" ",$temparray[0]);
$tempgpio1 = $tempgpio1array[1];
$tempgpio1 = str_replace('.', ',', $tempgpio1);
$tempgpio2array = explode(" ",$temparray[1]);
$tempgpio2 = $tempgpio2array[1];
$tempgpio2 = str_replace('.', ',', $tempgpio2);

SetValue(45078 /*[Monitoring\RaspberryGPIO\TempGPIO1]*/  , $tempgpio1);
SetValue(47793 /*[Monitoring\RaspberryGPIO\TempGPIO2]*/  , $tempgpio2);

?>