Simplest method to read in an external data element and apply it to an existing Archive type

53 views
Skip to first unread message

Messy Potamia

unread,
Apr 13, 2020, 7:35:04 AM4/13/20
to weewx-user
I want to read in a single %2.2f  from a file "special.dat" and store it in something I'll never otherwise use, "leafTemp1".

My weewx is 3.6.2.  I have read the suggestion to use a 2nd database, however I do not want to do that. I have written a custom .py before to read data from a 2-element data file, but I extended the schema to do that (and I remember Tom asking why, and it was because I thought that was the thing to do, anyway I don't want to do that this time)

pi@RPI3:~ $ cat /home/weewx/special.dat
32.67
pi@RPI3
:~ $

Here is the python I copied & modified a few years ago, which works for that system:
#!/usr/bin/env python

#file user/lakedata.py
import weewx
from weewx.engine import StdService

class AddLakedata(StdService):

   
def __init__(self, engine, config_dict):
     
# Initialize my superclass first:
     
super(AddLakedata, self).__init__(engine, config_dict)
     
# Bind to any new archive record events:
     
self.bind(weewx.NEW_ARCHIVE_RECORD, self.new_archive_packet)

   
def new_archive_packet(self, event):

       
#(code that reads two measurements from a file)
       
with open("/mnt/wxdata/weewxmbdata.dat") as f:
               
for line in f:
                        numbers_str
= line.split()
                        numbers_float
= [float(x) for x in numbers_str]
                        value1
= numbers_float[0]
                        value2
= numbers_float[1]

       
event.record['lakeElevation'] = value1
       
event.record['lakeWaveheight'] = value2

import schemas.wview
schema_with_lakedata
= schemas.wview.schema + [('lakeElevation', 'REAL')] + [('lakeWaveheight', 'REAL')] + [('lightning', 'REAL')]

#

The above code works fine on a previous installation and I'm not going to mess with it. This install however, I will be reading a single value, and applying it into an existing field in the default existing database. My concern is, in the above lakedata.py, which represents an extended schema, what changes when I'm using the existing schema?

Thanks for clarifying this for me.

Phil 

Thomas Keffer

unread,
Apr 13, 2020, 8:42:05 AM4/13/20
to weewx-user
You want something like:

    with open('/path/to/file') as f:
        value = f.readline().strip()
        event.record['leafTemp1'] = float(value) if value != '' else None

Or, use filepile, although that would require you to change the format of your data file.

-tk

--
You received this message because you are subscribed to the Google Groups "weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to weewx-user+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/weewx-user/a7495c2d-f450-46cf-a88f-c75e696f1940%40googlegroups.com.

Messy Potamia

unread,
Apr 13, 2020, 9:51:39 AM4/13/20
to weewx-user
I didn't have any problem reading the data in via my existing python code (although I suspect your sample may be cleaner, I'll try that too).
What I was concerned with is the schema ***  =  schema *** + schema ***.  Since I'm not extending this schema, I commented out that line. Added the service to weewx.conf, restarted weewx w/ debug=1, saw it add the service (and now the new .pyc exists in user), and it's reading the data into weewx.sdb.  Now it's a simple matter of editing my skins to add the parameter. 
Thanks  --Phil
To unsubscribe from this group and stop receiving emails from it, send an email to weewx...@googlegroups.com.

Thomas Keffer

unread,
Apr 13, 2020, 10:45:54 AM4/13/20
to weewx-user
I see.

The schema is only used when the database is created. So, if you're using an existing database, it doesn't matter what you put there.

If you do not have an existing database, then it will be used. However, because you're using a type that's already in the wview schema, leafTemp1, then there is no need to add a new type. Personally, if I didn't have an existing database, I would add the new type: it's easier to tell what that observation type is, rather than remembering that leafTemp1 is actually, say, "tank level."

Where it is really useful to recycle a name such as leafTemp1 is if you have an existing database and you don't want  to go to the trouble of rebuilding it with a new type. Then reusing a name is a lot easier.

Hope that's clear.

-tk


To unsubscribe from this group and stop receiving emails from it, send an email to weewx-user+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/weewx-user/72175d38-5066-4fc8-94fe-51ceba7af339%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages