Då väcker jag liv i denna tråd då

Förlåt och/eller varsegåd
Jag är helt ny med raspberryPi, men älskar verkligen detta

hade mycket hjälp av din kod på första sidan för att få igång min logger..
men jag, nörd som man är, har redigerat den ganska brutalt, och gjort ett vad jag tycker lite mer komplett script, och i Open-Source anda, så postar jag mitt script här också, så hjälper jag kanske någon i min tur..
Denna kod, vet jag redan nu ska få lite förbättringar, som tex automatisk avläsning av ID-nummer på ansluta sensorer som ett slags settings-script..
Men tills vidare funkar denna kod mycket bra!
har inte hunnit testa triggning av för höga värden i error-checken, men bör funka

denna kod, gör även en smidig sak, den skriver en enda rad, som uppdateras, i ett dokument Cvalue1.txt, där man då alltid kan gå in och läsa senast skrivna värda utan att behöva gå på den tjocka filen..
med Fel-kods hantering och diverse debugging-loggar man kan läsa utifall saker går snett..
jag har alltså i detta script 3 värden som loggas, men man kan fylla på ID-numret till alla sina sensorer i settings raden så loggas dom också!
Har sedan ett annat script som också ligger i Crontab, som kopierar den stora loggfilen till ett anslutet USB minne vid midnatt, utifall nått skulle hända.
denna backup-funktion kommer däremot senare komma in i detta script också, så allt ligger i samma, mer komplett.
Gnuplottning är också egen körning.
glöm inte att ändra allt i Settings till önskade värden.
Kod: Markera allt
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime;
import time;
import commands;
import os;
###############
#INSTÄLLNINGAR#
###############
#Mappen där allt ska loggas
cpath = "/gt/log/"
#Sensorskip är vad som ske vid felvärde på en sensor
#1 = hela inläsningsraden skippar och går vidare
#2 = skriver en 0-nolla istället för felet
#3 = ersätter felvärdet med senaste godkända värdet, kan också bli 0 om det är första som blir fel.
sensorskip = 1
#Array med alla temps, Lägg till fler ID-nummer här för automatisk inläsning.
SensorID = ["28-0000072e5c9b","28-0000072e65c6","28-0000072e4aad"] #Inomhus, #utomhus , #Framledning
#######################
#Slut på INSTÄLLNINGAR#
#######################
RawSensor = []
def is_number(s):
try:
float(s)
return True
except ValueError:
return False
if not os.path.isdir(cpath):
os.makedirs(cpath)
def getdate():
date = datetime.datetime.now()
return(unicode(date.replace(microsecond=0)))
def readall(rlistan):
for i, rawvarde in enumerate(rlistan):
tfile = open("/sys/bus/w1/devices/" + rawvarde + "/w1_slave")
text = tfile.read()
tfile.close()
secondline = text.split("\n")[1]
temperaturedata = secondline.split(" ")[9]
temperature = float(temperaturedata[2:])
temperature = temperature / 1000
RawSensor.insert(i,temperature)
def CheckTempErrors(Tempin):
#här kan man även lägga in sina egna felkoder.
#Borde gå över till trippning av värde för å sen samla ihop alla fel till printen, men bara några få fel än så länge.
if float(Tempin) < -40 or float(Tempin) > 60 or Tempin == None:
return True
if Tempin == None:
Tempin = "None"
ErrorLogg(str(getdate()) + " Temperror värde: " + str(Tempin))
elif not is_number(Tempin):
ErrorLogg(str(getdate()) + " Tempvärde ej giltig siffervärde: " + str(Tempin))
return True
else:
return False
def ErrorLogg(TextOut):
if not TextOut == None:
Efile = open(cpath + "errorlogg.txt", "a")
Efile.write(str(TextOut))
else:
print "Nu tror jag väl, Error i error printen!\n"
def ReturnNiceValue(Tempin):
Tfile = open(cpath + "cvalue1.txt", "r")
def logg():
printresultat = ""
skipthisread = ""
for i, sob in enumerate(RawSensor):
if CheckTempErrors(sob) == False:
if printresultat == "":
printresultat = str(sob)
else:
printresultat = printresultat + " " + str(sob)
else:
ErrorLogg("Kunde inte läsa av sensor: " + SensorID(i))
if sensorskip == 1:
skipthisread = True
elif sensorskip == 2:
if printresultat == "":
printresultat = 0
else:
printresultat = printresultat + " " + 0
elif sensorskip == 3:
if os.path.isfile(fname):
Tfile = open(cpath + "cvalue1.txt", "r")
Lastmes = Tfile.read()
Tfile.close()
Lastmes = Lastmes.split(" ")[i+2]
else:
Lastmes = 0
if printresultat == "":
printresultat = Lastmes
else:
printresultat = printresultat + " " + Lastmes
#print printresultat
if not skipthisread:
Tfile = open(cpath + "cvalue1.txt", "w")
Tfile.write(str(getdate()))
Tfile.write(" " + printresultat + "\n")
file = open(cpath + "pilogger1.txt", "a")
file.write(str(getdate()))
file.write(" " + printresultat + "\n")
# Här kan vi börja ropa på allmänna kommandon nu när själva scriptet är skapat.
#Printar ID namnet på alla sensorer, bara för Debugging
# for s in SensorID:
# print s
#Läser in alla värden från sensorerna.
readall(SensorID)
logg()
#Printar värdet från respektive sensor, bara för debugging
# for s in RawSensor:
#print s