Temperatur – Chicken Pi
Tags: Chicken, Chicken Pi, openHAB, Raspberry Pi, Sensor, Smart Home, Temperatur
Weiter geht es im Hobby-Bau! Nach dem Basis-Konzept und der Integration des Lichts wurden nun zwei Temperatur-Sensoren montiert. Dabei habe ich mich an zwei Tutorials entlanggehangelt. Details zu den Tutorials findet ihr hier und hier. Dennoch kurz ein paar Eindrücke, was wichtig bei der Schaltung und Einrichtung ist.
Aufbau
Gekauft habe ich damals zwei digitale Temperatur-Sensoren, welche auf dem DS18B20 IC aufbauen (Beispiel). Je nach Version können die Kabel unterschiedliche Farben haben. Somit darauf achten, wo GND, DATA und 3V liegen. In meinem Fall siehst du unten im Schaubild die “Schwarz, Gelb, Rot”-Variante. Dabei ist Schwarz GND, Gelb der digitale Data Channel und Rot die Spannung. Darüber hinaus befindet sich ein 4.7 kΩ Pull-up-Widerstand in der Schaltung. Aufgrund des digitalen Eingangs können mehrere Sensoren einfach in Reihe geschaltet werden. Als Daten-Pin wurde der PIN4 vorgesehen (Erklärung). Schaltplan anbei.
Somit steht auch nicht viel auf dem Einkaufzettel:
- 2x DS18B20 1-Wire Temperatur Sensor
- 1x Widerstand – Widerstand 4.7 kΩ
- Ein wenig Schrumpfschlauch und Klingeldraht
Software
Natürlich habe ich das ganze auch wieder in Python integriert, sodass ich die Temperaturen auch im openHAB auslesen kann. Der komplette Stand des Chicken Pi Projektes ist hier zu finden:: https://github.com/lochmueller/chicken-pi. Anbei wieder die entscheidenden Zeilen, sodass die Temperatur via Flask/HTTP ausgelesen werden kann. ACHTUNG: Im Code Beispiel ist kein GPIO-PIN zu sehen, da der Data GPIO außerhalb konfiguriert ist (siehe Tutorials oben). Es gibt einen “GET /info” Endpunkt, welcher die Temperatur von der CPU und der beiden angeschlossenen Sensoren ausgibt. Dafür muss nur die passende device-ID im Code hinterlegt werden.
from flask import Flask, jsonify
import subprocess
import os
import re
app = Flask(__name__)
def getTemperature(device: str) -> float:
filePath = "/sys/bus/w1/devices/"+device+"/w1_slave"
if os.path.isfile(filePath) == False:
return 0.0
file = open(filePath)
filecontent = file.read()
file.close()
return float(re.search('t=(\d*)', filecontent).group(1)) / 1000
@app.route('/info', methods=['GET'])
def get_info():
output = subprocess.check_output("vcgencmd measure_temp | grep -o -E '[[:digit:].]*'", shell=True)
result = {
'temperature_cpu': float(output),
'temperature_1': getTemperature('28-xxxx'),
'temperature_2': getTemperature('28-yyyy')
}
return jsonify(result)
openHAB
Nebenbei habe ich nun auch schon angefangen, den Chicken Pi in das openHAB zu integrieren. Hier schon die passende Thing Konfiguration, welche auf den oben definierten Endpunkt zugreift und die drei Temperaturen als Channels zur Verfügung stellt.
UID: http:url:chickenpi
label: Chicken Pi
thingTypeUID: http:url
configuration:
authMode: BASIC
ignoreSSLErrors: false
baseURL: http://DEINE-INTERNE-IP-HIER:5000/
delay: 0
stateMethod: GET
refresh: 300
commandMethod: POST
timeout: 3000
bufferSize: 2048
channels:
- id: temperature_cpu
channelTypeUID: http:number
label: Temperature CPU
description: ""
configuration:
mode: READONLY
stateExtension: info
stateTransformation: JSONPATH:$.temperature_cpu
- id: temperature_1
channelTypeUID: http:number
label: Temperature 1
description: null
configuration:
mode: READONLY
stateExtension: info
stateTransformation: JSONPATH:$.temperature_1
- id: temperature_2
channelTypeUID: http:number
label: Temperature 2
description: null
configuration:
mode: READONLY
stateExtension: info
stateTransformation: JSONPATH:$.temperature_2
Fazit
Langsam, aber sicher geht es voran. Licht und Temperatur sind schon verbaut und im openHAB zu sehen bzw. zu steuern. Als Nächstes kommt der Motor für die Türklappe. Seit gespannt :-)
Hinterlasse einen Kommentar/Leserbrief!