Uutiset:

Ei uusia uutisia.

Main Menu

Lisäanturi WeeWx:ään

Aloittaja weatherc, maanantai, 13.07.2020, 22:14

« edellinen - seuraava »

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

weatherc

Eli kyseessä toisessa ketjussa olevan SHT31+Raspi-anturin datan saaminen WeeWx:ään.

Eipä ollut vaikeata käyttäen seuraavaa ohjetta:
https://github.com/weewx/weewx/wiki/add-sensor
Oman asennuksen oikea kansio tosin on /usr/share/weewx/user/ eikä /home/weewx/bin/user/

Lyhyesti:
- Lisäanturi tallentaa halutut arvot filuun, lämpötilan kohdalla WeeWX lukee arvon Fahreheitinä josta muuttaa sen Celsiuksi joten arvo sen mukaan.
- Kyseinen filu pitää siirtää WeeWX-purkille, tyyli vapaa. Omalla kohdalla lisäanturin Raspissa Nginx, WeeWX-raspi hakee sen ajastuksella
- Muokkasin yllä olevaa pond.py:tä niin että lukee sekä lämpötilan että kosteuden

                line = f.read()
                value = line.split(' ')
            syslog.syslog(syslog.LOG_DEBUG, "pond: found value of %s" % value)
            event.record['extraTemp1'] = float(value[0])
            event.record['extraHumid1'] = float(value[1])

- Tämän jälkeen arvot löytyy WeeWX:stä nimillä extraTemp1 sekä extraHumid1  :)

    [extraTemp1] => 12.655555555556
    [extraHumid1] => 84.6


Jos ja kun tuosta tehdään pääanturi lämpötilalle ja kun käytössä on "Cumulus realtime.txt"-palikka pitää puukottaa hiukan crt.py:tä mutta ainakin pikaisella vilkaisulla näyttää ihan simppeliltä sekin, palataan siihen kun siihen asti päästään  ;D

weatherc

#1
Realtime.txt palikan puukottaminen

Tämä oli itse asiassa hyvinkin helppoa, tee se Windowsilla tahikka WD:llä  :P

Eli kyseessa palikan crt.py-filu

Ihan ylös laitetaan oletuslukema SHT-arvoille jos filun luku jostain syystä epäoonistuu käynnistäessä


sht_temp = -100
sht_hum = -100


def calculate

...
        # MODS
        v, t = calc_minmax('rainRate', dbm, ts, 'MAX')
        data['rainRate_max'] = v
        v, t = calc_minmax('UV', dbm, ts, 'MAX')
        data['UV_max'] = v
        v, t = calc_minmax('radiation', dbm, ts, 'MAX')
        data['radiation_max'] = v

        v, t = calc_minmax('extraTemp1', dbm, ts, 'MAX')
        data['extraTemp1_max'] = self._cvt(
            v, t_u, 'extraTemp1', 'group_temperature')
        v, t = calc_minmax('extraTemp1', dbm, ts, 'MIN')
        data['extraTemp1_min'] = self._cvt(
            v, t_u, 'extraTemp1', 'group_temperature')
        v, t = calc_minmax('extraHumid1', dbm, ts, 'MAX')
        data['extraHumid1_max'] = v
        v, t = calc_minmax('extraHumid1', dbm, ts, 'MIN')
        data['extraHumid1_min'] = v

        global sht_temp, sht_hum
        try:
           with open('/dev/shm/sht31.txt', 'r') as s_file:
              line = s_file.read()
              shtv = line.split(' ')
              sht_temp = shtv[0]
              sht_hum = shtv[1]
        except:
           pass
        data['extraTemp1'] = sht_temp
        data['extraHumid1'] = sht_hum


def create_realtime_string

...
        fields.append(self.format(data, 'rainRate_max', r_dp))
        fields.append(self.format(data, 'UV_max', 1))
        fields.append(self.format(data, 'radiation_max', 0))
        fields.append(self.format(data, 'extraTemp1', 1))             # 59
        fields.append(self.format(data, 'extraTemp1_max', 1))         # 60
        fields.append(self.format(data, 'extraTemp1_min', 1))         # 61
        fields.append(self.format(data, 'extraHumid1', 1))            # 62
        fields.append(self.format(data, 'extraHumid1_max', 1))        # 63
        fields.append(self.format(data, 'extraHumid1_min', 1))        # 64


Tuloksena realtime.txt loppupäähän

...35.4 4.1 722 14.0 14.5 10.1 79.4 97.2 79.4


Realtime.txt:ä puukottaessa täytyy muistaa se että arvojen sijannit ovat vakioita, eli nykysten sijantia ei saa mennä muuttamaan, loppuun voi toki lisätä mitä haluaa :)
Samalla tuli laitettua max-arvot UV:lle, auringolle ja sateen voimakkuudelle mitkä uupuvat realtime.txt:stä.
Omalla kohdalla, kunhan sinne päästään, ei tuo järjestys ole vielä lopullinen. Muutetaan mm vielä extra*-arvojen sijantia niihin "oletus-lokeroihin" jotta tulevat oletusarvoiksi esim FinWX:lle, EWN:ään ym.

weatherc

Kokeilussa toinen hakusuunta, eli että WeeWX hakee arvot suoraan anturilta. Näin säästyy filun generoinnit/haut :)

Koehäkkyrä WeeWX-raspilla:

import os
from subprocess import Popen, PIPE

print os.getuid()
print os.getgid()

def demote(user_uid, user_gid):
        def set_ids():
                os.setgid(user_gid)
                os.setuid(user_uid)
        return set_ids

p = Popen(['ssh', '-l', 'pi', 'pi@192.168.0.55', 'python', '/home/pi/sht31_2.py'], preexec_fn=demote(1000, 1000), stdin=PIPE, stdout=PIPE, stderr=PIPE)
output, err = p.communicate()

sht = output.split('\n')[0]
line = sht.split(' ');


Koska WeeWX ajaa itsensä sudona eikä sudo-haku kysyi vaan salasanaa (pi-käyttäjä ei kysynyt koska sillä avainfilu) niin siksi preexec_fn.
sht31_s.py ulosanti on seuraavanlainen:
19.49 67.05 67.08
eli sama mikä alkuperäinen sht31.py tallensi filuun.