1Wire Temp auslesen und via Internet senden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
elektrobot74
User
Beiträge: 5
Registriert: Freitag 20. Oktober 2017, 12:05

Hallo,

bin neu hier und neu bei Python.

Ich würde gern mit dem RPI 3 eine externe Temperatur über 1Wire-Sensor (DS18B20) aufnehmen und an Thingspeak senden.
Ich habe zwar beides separat schon ausführen können, aber zusammen wollen die einfach nicht. Vielleicht kann mal ein Erfahrener Pythonier drüber schauen und mir helfen.

Hier der Code zum auslesen:

#!/usr/bin/python
# coding=utf-8
# messprogramm.py
#----------------
import os, sys, time
def aktuelleTemperatur():
# 1-wire Slave Datei lesen
file = open('/sys/bus/w1/devices/28-000005d2e508/w1_slave')
filecontent = file.read()
file.close()
# Temperaturwerte auslesen und konvertieren
stringvalue = filecontent.split("\n")[1].split(" ")[9]
temperature = float(stringvalue[2:]) / 1000
# Temperatur ausgeben
rueckgabewert = '%6.2f' % temperature
return(rueckgabewert)
#schleifenZaehler = 0
#schleifenAnzahl = 20
#schleifenPause = 1
#print "Temperaturabfrage für ", schleifenAnzahl,
# " Messungen alle ", schleifenPause ," Sekunden gestartet"
print(temperature)
#while schleifenZaehler <= schleifenAnzahl:
# messdaten = aktuelleTemperatur()
# print "Aktuelle Temperatur : ", messdaten, "°C",
# "in der ", schleifenZaehler, ". Messabfrage"
# time.sleep(schleifenPause)
#schleifenZaehler = schleifenZaehler + 1
print("Temperaturabfrage beendet")
elektrobot74
User
Beiträge: 5
Registriert: Freitag 20. Oktober 2017, 12:05

Und den folgenden Code wollte ich so abändern, dass nur die 1Wire-Temp gesendet wird.

Hier der Sende Code:

#!/home/pi/Schreibtisch/
#
#
from __future__ import print_function
import paho.mqtt.publish as publish
import psutil


# The ThingSpeak Channel ID
# Replace <YOUR-CHANNEL-ID> with your channel ID
channelID = "339864"

# The Write API Key for the channel
# Replace <YOUR-CHANNEL-WRITEAPIKEY> with your write API key
apiKey = "9N3W0XT64YCH5IRN"

# The Hostname of the ThinSpeak MQTT broker
mqttHost = "mqtt.thingspeak.com"

# Set the transport mode to WebSockets
tTransport = "websockets"
tPort = 80

# Create the topic string
topic = "channels/" + channelID + "/publish/" + apiKey

while(1):
# get the system performance data
cpuPercent = psutil.cpu_percent(interval=15)
ramPercent = psutil.virtual_memory().percent

print (" CPU =",cpuPercent," RAM =", ramPercent)

# build the payload string
payload = "field1=" + str(cpuPercent) + "&field2=" + str(ramPercent)

# attempt to publish this data to the topic
try:
publish.single(topic, payload, hostname=mqttHost, transport=tTransport, port=tPort)

except (KeyboardInterrupt):
break

except:
print ("There was an error while publishing the data.")
elektrobot74
User
Beiträge: 5
Registriert: Freitag 20. Oktober 2017, 12:05

Ja, also es wäre gut wenn ich noch halbwegs wüsste was da passiert. Weil ich das beim Studium präsentieren soll und evtl. bis fast sicher Fragen beantworten muss.

Also Büdeeee hilft mir jemand. :K
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@elektrobot74: wo ist Dein konkretes Problem? Deine Skripte tuten nicht, weil die Einrückungen fehlen. Und ist das im zweiten Skript Dein echter API-Key? Dort ist auch die Shebang-Zeile kaputt. `return` und `while` sind keine Funktionen, sollte man also auch nicht mit Klammern schreiben. Nakte Excepts sollte man nie verwenden, weil die wirklich jeden Fehler (auch manche Programmierfehler) abfangen; immer die konkreten Exceptions angeben. Benutze Stringformatierung, statt Strings mit + zusammenzustückeln.
elektrobot74
User
Beiträge: 5
Registriert: Freitag 20. Oktober 2017, 12:05

Danke Sirius 3,

die Codes sind nicht von mir, die habe ich im Internet gefunden. Könntest Du mir bei dem zusammenstückeln helfen? Ich habe auch nicht ganz verstanden wie ich das was du gesagt hast korrigieren soll.
elektrobot74
User
Beiträge: 5
Registriert: Freitag 20. Oktober 2017, 12:05

Ok - anscheinend sind Einrückungen wichtig.
Wie rückt man eigentlich richtig ein - gibt es da eine Hilfestellung?
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das offizielle Python Tutorial. Das erklärt sämtliche Sprachgrundlagen. https://docs.python.org/3/tutorial/
Benutzeravatar
noisefloor
User
Beiträge: 3829
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

exakt den gleichen Thread gibt's übirgens auch im Raspi-Forum: https://forum-raspberrypi.de/forum/thre ... et-senden/

Der 'Tenor docht ist der gleiche wie hier...

Gruß, noisefloor
Antworten