Kalibrointi moduli

Aloittaja angle, keskiviikko, 13.06.2012, 18:43

« edellinen - seuraava »

0 Jäsenet ja 1 Vieras katselee tätä aihetta.

oldpet

Huomasin tänään sattumoisin kun tuo widget päivittelee, niin ko ajankohtana herjaa "Parse error". Ilmeisesti johtuu tuosta None:sta. Mitähän tapahtuu, jos muutan sen "-"-arvoksi? Meneekö kastepiste yms arvot metsään?

Lisätään vielä että tuo androidin widget lukee tuota clientraw.txt-fileä.

angle

Semmoinen ajatus on ennenkin käynyt mielessä, että none pitäisi korvata edellisen tunnin tai viimeisimmällä mittausarvolla. Eli ikäänkuin jäädyttää mittaus halutuksi ajaksi.

oldpet

Tein tuohon tommosen -3 asteen korjauksen. Eli korjaus lähtee klo 13 lineaarisesti vähentämään lämpötila-arvoa, ja klo 14 korjaus on -3astetta. Siitä sitten taas lineaarisesti korjaus pienenee klo 15 asti. Näin ainakin keskilämpötila pysyy suht koht oikeessa. Tämäkin tosin pilvisenä päivänä toimii huonommin kuin aurinkoisena.

Lainaa
from datetime import datetime, time

class Calib(object):
    def __init__(self, params):
        self.pressure_offset = eval(params.get('fixed', 'pressure offset'))
        # temp sensor sun effect time zone 13:00-15:00
        self.temp_start_fault = time(11, 0, 0)
        self.temp_stop_fault = time(13, 0, 0)
    def calib(self, raw):
        result = dict(raw)
        # sanitise data
        if result['wind_dir'] is not None and result['wind_dir'] >= 16:
            result['wind_dir'] = None
        if (raw['idx'].strftime("%H, %M")  > self.temp_start_fault.strftime("%H, %M") and raw['idx'].strftime("%H, %M")  < self.temp_stop_fault.strftime("%H, %M")):
            # sun effect correction
            (hours, minutes) = raw['idx'].strftime("%H, %M").split(',')
            result['temp_out'] = float(0 if raw['temp_out'] is None else raw['temp_out']) -(3*(1-abs(720-(60*float(hours) + float(minutes)))/60))
        else:
            result['temp_out'] = raw['temp_out']
        # calculate relative pressure
        result['rel_pressure'] = raw['abs_pressure'] + self.pressure_offset
        return result

Tuohon joutui tuommosen None-tarkistuksen laittaa kun jostain syystä sieltä tulee ilmeisesti joskus Nonea kun herjas ilman sitä.

Jos jollain välähtää joku parempi korjauskeino, niin otetaan kiitollisena vastaan.

oldpet

Lainaus käyttäjältä: angle - tiistai, 22.01.2013, 21:09
Semmoinen ajatus on ennenkin käynyt mielessä, että none pitäisi korvata edellisen tunnin tai viimeisimmällä mittausarvolla. Eli ikäänkuin jäädyttää mittaus halutuksi ajaksi.
Onkos sulla tietoa, miten tuon mittauksen saisi jäädytettyä?

Tällä hetkellä tuossa on eksponentiaalinen korjaus käytössä. Aurinkoisena päivänä toimii hyvin, mutta nyt kun on pilvistä niin korjausta ei tarvisi ollenkaan. Mietin että saisko tuosta webkameran kuvasta kirkkausarvot jotenkin ulos jonka mukaan korjaus tehtäisi. Ei luulisi olevan amerikan temppu?

angle

#14
Just tässä pohdiskelin tätä ja jotain ajatuksen tynkää tuli mieleen. Koitin sitä muuttaa koodiksikin, mutta se ei ole oikein mun hallussa. Koitin siis muokkailla tuota sinun aiempaa koodia, jossa pukkasi ulos nonea tietyllä ajalla.
Koitin lisätä siihen vielä yhden ehdon joka vertaa tulosta tietyn kellon ajan tulokseen. Jos ylempi niin ulos se tietty kellonajan tulos tai alempi niin ulostaa raw arvon

from datetime import datetime, time

class Calib(object):
   def __init__(self, params):
       self.pressure_offset = eval(params.get('fixed', 'pressure offset'))
       # temp sensor sun effect time zone 13:00-15:00
       self.temp_start_fault = time(13, 0, 0)
       self.temp_stop_fault = time(15, 0, 0)
   def calib(self, raw):
       result = dict(raw)
       # sanitise data
       if result['wind_dir'] is not None and result['wind_dir'] >= 16:
           result['wind_dir'] = None
       # sun effect fix
       if (raw['idx'].strftime("%H, %M")  > self.temp_start_fault.strftime("%H, %M") and raw['idx'].strftime("%H, %M")  < self.temp_stop_fault.strftime("%H, %M") and raw['temp_out'] =< [idx "13, 0, 0"] ['temp_out']):
           result['temp_out'] = [idx "13, 0, 0"] ['temp_out']
       else:
           result['temp_out'] = raw['temp_out']
       # calculate relative pressure
       result['rel_pressure'] = raw['abs_pressure'] + self.pressure_offset
       return result

Tuossa on varmaan jotain virheitä mutta ajatus selvinnee.
Mulla ei ole nyt oikein mahdollisuutta testailla näitä. Pitäisi varmaan tehdä erillinen PyWW testialusta pienellä tietokannalla.

Edit. Varmaa tuohon lämpötilan ehtoihin kannattaa myös lisätä ehto and not none jos sattuu hetkiä ettei saa luettua ulkolämpötilaa.