Python Temperaturauslese

Moin, ich versuche aktuell mit einem Python Programm einen DS18B20 Temperatursensor auszulesen. Das funktioniert auch schon. Jetzt will ich aber die Daten auf Sensemap hochladen und das IOS 14 Widget nutzen. Ich habe mich mal erkundigt und folgenden Code erstellt:

import os, sys, time
import time
from datetime import datetime
import sys
import numpy as np
import os
import time
import random
import json
import pytz
import requests
#Modul 1 Einlesen des DS18B20
# Global für vorhandene Temperatursensoren
tempSensorBezeichnung = [] #Liste mit den einzelnen Sensoren-Kennungen
tempSensorAnzahl = 0 #INT für die Anzahl der gelesenen Sensoren
tempSensorWert = [] #Liste mit den einzelnen Sensor-Werten

# Global für Programmstatus
programmStatus = 1

#Sensemap
headers = {'content-type': 'application/json'}
url = 'https://api.opensensemap.org/boxes/:SenseboxID/data'

def ds1820einlesen():
    global tempSensorBezeichnung, tempSensorAnzahl, programmStatus
    #Verzeichnisinhalt auslesen mit allen vorhandenen Sensorbezeichnungen 28-xxxx
    try:
        for x in os.listdir("/sys/bus/w1/devices"):
            if (x.split("-")[0] == "28") or (x.split("-")[0] == "10"):
                tempSensorBezeichnung.append(x)
                tempSensorAnzahl = tempSensorAnzahl + 1
    except:
        # Auslesefehler
        print ("Der Verzeichnisinhalt konnte nicht ausgelesen werden.")
        programmStatus = 0

#Modul 2 DS18B20 auslesen
def ds1820auslesen():
    global tempSensorBezeichnung, tempSensorAnzahl, tempSensorWert, programmStatus
    x = 0
    try:
        # 1-wire Slave Dateien gem. der ermittelten Anzahl auslesen 
        #while x < tempSensorAnzahl:
            dateiName = "/sys/bus/w1/devices/" + tempSensorBezeichnung[x] + "/w1_slave"
            file = open(dateiName)
            filecontent = file.read()
            file.close()
            # Temperaturwerte auslesen und konvertieren
            stringvalue = filecontent.split("\n")[1].split(" ")[9]
            sensorwert = float(stringvalue[2:]) / 1000
            temperatur = '%6.2f' % sensorwert #Sensor- bzw. Temperaturwert auf 2 Dezimalstellen formatiert
            tempSensorWert.insert(x,temperatur) #Wert in Liste aktualisieren
            x = x + 1
            
#Modul 3 Sensemap
            
            data = {"sensordatavalues": [
              {
              "value_type": "DS18B20_1",
              "value": "5.38"
              },
              {
              "value_type": "DS18B20_2",
              "value": "4.98"
              }
              ]
            }
            params = {'Temperatur': 1}

            r = requests.post(url, params=params, json=data, headers=headers)

            print(r.status_code)

Ich habe die Fehlermeldung das die „params…“ Zeile einen Syntax Fehler hat. Kann mir jemand helfen?

Hi @OCISLY,

bei Syntax Fehlern hilft es immer wieder sich mal die vorherige oder spätere Codezeile anzuschauen. Es sieht für mich so aus, als würde noch eine } vom vorherigen data Objekt fehlen. Die müsstest du also noch darüber hinzufügen.
Wenn du die Daten aber zur openSenseMap schicken möchtest, solltest du noch einen Blick auf die API Dokumentation werfen: https://docs.opensensemap.org/#api-Measurements-postNewMeasurement. So wie du es aktuell implementiert hast würde es nicht mit der openSenseMap funktionieren.

Viele Grüße
Felix

1 Like

Hi @OCISLY,

du kannst dir auch mal folgendes Python Package angucken: https://gitlab.com/tue-umphy/co2mofetten/software/python3-sensemapi

Viele Grüße
Mario

Danke @Felix die Klammer wurde eingefügt habe ich übersehen. Die API Sensemap Struktur die ich hier angewendet habe habe ich aus: Hilfe bei der Programmierung der API. Die Dokumentation von dir habe ich mir angeschaut und es mit der URL: https://api.opensensemap.org/boxes/:senseBoxId/:sensorId versucht aber ich habe einen EOF Syntax Fehler. Ich habe keine Ahnung wie ich das löse.