Re: [weewx-user] Help creating a service to import data from file

2019-04-23 Thread Colin Larsen
With help from a friend I've got the data txt file sorted into the right
format so hopefully this will be easy from here.

I assume I still need some 'units' detail somewhere along the line in the
[FilePile] stanza?

Cheers
Colin

On Wed, Apr 24, 2019 at 7:48 AM Colin Larsen  wrote:

> This is how the data is constructed and sent in Arduino, it's sent as a
> complete line of ascii data
>
> // - AQI Data for Weewx -
>
> Data = F("AQI25=");
> Data += String(AQI_Monitor.AQI_PM2_5 / 10.0);
> Data += F(",AQI100=");
> Data += String(AQI_Monitor.AQI_PM10_0 / 10.0);
> Data += F(",AQIIndex=");
> Data += String(AQI_Monitor.AQI_Index / 10);
> Data += F(",AQICO2=");
> Data += String(AQI_Monitor.GAS_1);
>
> Then sent using
>
> //  Send AQI Datapacket 
>  udp1.beginPacket(broadcastIP, AQI_BROADCAST_PORT);
>  udp1.write((const uint8_t*)Data.c_str(), strlen(Data.c_str()));
>  udp1.endPacket();
>  udp1.stop();
>
> So I'm unsure how to get line feeds in there instead of the comma
> delimiter.
>
> Seems it would be easier to look for the comma in the txt file :)
>
> Cheers
> Colin
>
> On Wed, Apr 24, 2019 at 7:31 AM Colin Larsen 
> wrote:
>
>> Ok that sure looks like it would do the job but with my file format I
>> would need to use "," as a delimiter between records rather than a new line
>> something like (borrowed from another similar utility). I have never done
>> Python so I'm a little lost on how to change this sorry
>>
>> with open(self.filename) as f:
>> for line,row in enumerate(f.readlines()):
>> if line == 0:
>> names = row.strip().split(",")
>> if line == 0:
>> units = row.strip().split(",")
>>
>>
>>
>>
>>
>>
>>
>> On Wed, Apr 24, 2019 at 1:40 AM Thomas Keffer  wrote:
>>
>>> Because of the syntax, it's tempting to look at a ConfigObj file and
>>> think of it as assigning the right hand side to the left hand side. But,
>>> it's really not. It's a mapping. The left hand side *maps to* the right
>>> hand side.
>>>
>>> As a key:value comes in from the file, we need to know what to do with
>>> the key. Given a key, what WeeWX name do we assign it to? With a mapping,
>>> we look it up, then do the assignment to the value. If we did it the other
>>> way around, we'd have to search all the *values* in the mapping to find
>>> what it should be mapped to. That's backwards from the way dictionaries
>>> work.
>>>
>>> -tk
>>>
>>> On Tue, Apr 23, 2019 at 5:51 AM Andrew Milner <
>>> andrew.s.r.mil...@gmail.com> wrote:
>>>
 Tom
 Forgive me for being a pedant - but shouldn't the label map for
 filepile have the arguments the other way round
 ie rather than
  myVoltage = Supply Voltage
 it should be
  SupplyVoltage = myVoltage
 ie
   weewx destination field = source data field

 normally left of equals sign is the result of operations right of
 equals sign
 eg
   a = 3 + 2 would put 5 into a



 On Tuesday, 23 April 2019 14:45:38 UTC+3, Thomas Keffer wrote:
>
> Take a look at Filepile . It may
> do what you want, or help you write your own.
>
> -tk
>
> On Mon, Apr 22, 2019 at 7:43 PM  wrote:
>
>> Hi all
>>
>> I have devised a method to export my Air Quality Data (AQI) from my
>> Arduino based weather station to Weewx (it can't be sent via the usb port
>> with the rest of the data). It involves sending the data via a UDP
>> broadcast packet from the station, this is then captured by a small 
>> Python
>> script on my Weewx Pi and written to a txt file.
>>
>> The txt file data looks like this
>> AQI25=5.50,AQI100=4.10,AQIIndex=22,AQICO2=967
>>
>> From the Weewx wiki I have crafted the beginning of a service to
>> import the data to my Wewwx database (extended with the 4 new data 
>> fields)
>> but I'm not sure how to complete that task. So far I have this, which I
>> think will grab the first value - how do I parse the other 3? Is it as
>> simple as just adding more lines such as event.record['AQI100'] =
>> float(value) etc?
>>
>> *import* syslog
>>
>> *import* weewx
>>
>> *from* weewx.wxengine *import* StdService
>>
>>
>> *class* WDAQIService(StdService):
>>
>> *def** __init__*(self, engine, config_dict):
>>
>> super(WDAQIService, self).__init__(engine, config_dict)
>>
>> d = config_dict.get(*'WDAQIService'*, {})
>>
>> self.filename = d.get(*'filename'*, *'/home/pi/AQIData.txt'*)
>>
>> syslog.syslog(syslog.LOG_INFO, *"WDAQIImport: using %s"* %
>> self.filename)
>>
>> self.bind(weewx.NEW_ARCHIVE_RECORD, self.read_file)
>>
>>
>> *def** read_file*(self, event):
>>
>> *try*:
>>
>> *with* open(self.filename) *as* f:
>>
>> value = f.read()

Re: [weewx-user] Help creating a service to import data from file

2019-04-23 Thread Colin Larsen
This is how the data is constructed and sent in Arduino, it's sent as a
complete line of ascii data

// - AQI Data for Weewx -

Data = F("AQI25=");
Data += String(AQI_Monitor.AQI_PM2_5 / 10.0);
Data += F(",AQI100=");
Data += String(AQI_Monitor.AQI_PM10_0 / 10.0);
Data += F(",AQIIndex=");
Data += String(AQI_Monitor.AQI_Index / 10);
Data += F(",AQICO2=");
Data += String(AQI_Monitor.GAS_1);

Then sent using

//  Send AQI Datapacket 
 udp1.beginPacket(broadcastIP, AQI_BROADCAST_PORT);
 udp1.write((const uint8_t*)Data.c_str(), strlen(Data.c_str()));
 udp1.endPacket();
 udp1.stop();

So I'm unsure how to get line feeds in there instead of the comma delimiter.

Seems it would be easier to look for the comma in the txt file :)

Cheers
Colin

On Wed, Apr 24, 2019 at 7:31 AM Colin Larsen  wrote:

> Ok that sure looks like it would do the job but with my file format I
> would need to use "," as a delimiter between records rather than a new line
> something like (borrowed from another similar utility). I have never done
> Python so I'm a little lost on how to change this sorry
>
> with open(self.filename) as f:
> for line,row in enumerate(f.readlines()):
> if line == 0:
> names = row.strip().split(",")
> if line == 0:
> units = row.strip().split(",")
>
>
>
>
>
>
>
> On Wed, Apr 24, 2019 at 1:40 AM Thomas Keffer  wrote:
>
>> Because of the syntax, it's tempting to look at a ConfigObj file and
>> think of it as assigning the right hand side to the left hand side. But,
>> it's really not. It's a mapping. The left hand side *maps to* the right
>> hand side.
>>
>> As a key:value comes in from the file, we need to know what to do with
>> the key. Given a key, what WeeWX name do we assign it to? With a mapping,
>> we look it up, then do the assignment to the value. If we did it the other
>> way around, we'd have to search all the *values* in the mapping to find
>> what it should be mapped to. That's backwards from the way dictionaries
>> work.
>>
>> -tk
>>
>> On Tue, Apr 23, 2019 at 5:51 AM Andrew Milner <
>> andrew.s.r.mil...@gmail.com> wrote:
>>
>>> Tom
>>> Forgive me for being a pedant - but shouldn't the label map for filepile
>>> have the arguments the other way round
>>> ie rather than
>>>  myVoltage = Supply Voltage
>>> it should be
>>>  SupplyVoltage = myVoltage
>>> ie
>>>   weewx destination field = source data field
>>>
>>> normally left of equals sign is the result of operations right of equals
>>> sign
>>> eg
>>>   a = 3 + 2 would put 5 into a
>>>
>>>
>>>
>>> On Tuesday, 23 April 2019 14:45:38 UTC+3, Thomas Keffer wrote:

 Take a look at Filepile . It may
 do what you want, or help you write your own.

 -tk

 On Mon, Apr 22, 2019 at 7:43 PM  wrote:

> Hi all
>
> I have devised a method to export my Air Quality Data (AQI) from my
> Arduino based weather station to Weewx (it can't be sent via the usb port
> with the rest of the data). It involves sending the data via a UDP
> broadcast packet from the station, this is then captured by a small Python
> script on my Weewx Pi and written to a txt file.
>
> The txt file data looks like this
> AQI25=5.50,AQI100=4.10,AQIIndex=22,AQICO2=967
>
> From the Weewx wiki I have crafted the beginning of a service to
> import the data to my Wewwx database (extended with the 4 new data fields)
> but I'm not sure how to complete that task. So far I have this, which I
> think will grab the first value - how do I parse the other 3? Is it as
> simple as just adding more lines such as event.record['AQI100'] =
> float(value) etc?
>
> *import* syslog
>
> *import* weewx
>
> *from* weewx.wxengine *import* StdService
>
>
> *class* WDAQIService(StdService):
>
> *def** __init__*(self, engine, config_dict):
>
> super(WDAQIService, self).__init__(engine, config_dict)
>
> d = config_dict.get(*'WDAQIService'*, {})
>
> self.filename = d.get(*'filename'*, *'/home/pi/AQIData.txt'*)
>
> syslog.syslog(syslog.LOG_INFO, *"WDAQIImport: using %s"* %
> self.filename)
>
> self.bind(weewx.NEW_ARCHIVE_RECORD, self.read_file)
>
>
> *def** read_file*(self, event):
>
> *try*:
>
> *with* open(self.filename) *as* f:
>
> value = f.read()
>
> syslog.syslog(syslog.LOG_DEBUG, *"WDAQIImport: found
> value of %s"* % value)
>
> event.record[*'AQI25'*] = float(value)
>
> *except* Exception *as* e:
>
> syslog.syslog(syslog.LOG_ERR, *"WDAQIImport: cannot read
> value: %s"* % e)
>
> Thanks
> Colin
>
> --
> You received this message because you are subscribed to the Google
> Groups "weewx-user" group.

Re: [weewx-user] Help creating a service to import data from file

2019-04-23 Thread Colin Larsen
Ok that sure looks like it would do the job but with my file format I would
need to use "," as a delimiter between records rather than a new line
something like (borrowed from another similar utility). I have never done
Python so I'm a little lost on how to change this sorry

with open(self.filename) as f:
for line,row in enumerate(f.readlines()):
if line == 0:
names = row.strip().split(",")
if line == 0:
units = row.strip().split(",")







On Wed, Apr 24, 2019 at 1:40 AM Thomas Keffer  wrote:

> Because of the syntax, it's tempting to look at a ConfigObj file and think
> of it as assigning the right hand side to the left hand side. But, it's
> really not. It's a mapping. The left hand side *maps to* the right hand
> side.
>
> As a key:value comes in from the file, we need to know what to do with the
> key. Given a key, what WeeWX name do we assign it to? With a mapping, we
> look it up, then do the assignment to the value. If we did it the other way
> around, we'd have to search all the *values* in the mapping to find what
> it should be mapped to. That's backwards from the way dictionaries work.
>
> -tk
>
> On Tue, Apr 23, 2019 at 5:51 AM Andrew Milner 
> wrote:
>
>> Tom
>> Forgive me for being a pedant - but shouldn't the label map for filepile
>> have the arguments the other way round
>> ie rather than
>>  myVoltage = Supply Voltage
>> it should be
>>  SupplyVoltage = myVoltage
>> ie
>>   weewx destination field = source data field
>>
>> normally left of equals sign is the result of operations right of equals
>> sign
>> eg
>>   a = 3 + 2 would put 5 into a
>>
>>
>>
>> On Tuesday, 23 April 2019 14:45:38 UTC+3, Thomas Keffer wrote:
>>>
>>> Take a look at Filepile . It may
>>> do what you want, or help you write your own.
>>>
>>> -tk
>>>
>>> On Mon, Apr 22, 2019 at 7:43 PM  wrote:
>>>
 Hi all

 I have devised a method to export my Air Quality Data (AQI) from my
 Arduino based weather station to Weewx (it can't be sent via the usb port
 with the rest of the data). It involves sending the data via a UDP
 broadcast packet from the station, this is then captured by a small Python
 script on my Weewx Pi and written to a txt file.

 The txt file data looks like this
 AQI25=5.50,AQI100=4.10,AQIIndex=22,AQICO2=967

 From the Weewx wiki I have crafted the beginning of a service to import
 the data to my Wewwx database (extended with the 4 new data fields) but I'm
 not sure how to complete that task. So far I have this, which I think will
 grab the first value - how do I parse the other 3? Is it as simple as just
 adding more lines such as event.record['AQI100'] = float(value) etc?

 *import* syslog

 *import* weewx

 *from* weewx.wxengine *import* StdService


 *class* WDAQIService(StdService):

 *def** __init__*(self, engine, config_dict):

 super(WDAQIService, self).__init__(engine, config_dict)

 d = config_dict.get(*'WDAQIService'*, {})

 self.filename = d.get(*'filename'*, *'/home/pi/AQIData.txt'*)

 syslog.syslog(syslog.LOG_INFO, *"WDAQIImport: using %s"* %
 self.filename)

 self.bind(weewx.NEW_ARCHIVE_RECORD, self.read_file)


 *def** read_file*(self, event):

 *try*:

 *with* open(self.filename) *as* f:

 value = f.read()

 syslog.syslog(syslog.LOG_DEBUG, *"WDAQIImport: found value
 of %s"* % value)

 event.record[*'AQI25'*] = float(value)

 *except* Exception *as* e:

 syslog.syslog(syslog.LOG_ERR, *"WDAQIImport: cannot read
 value: %s"* % e)

 Thanks
 Colin

 --
 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...@googlegroups.com.
 For more options, visit https://groups.google.com/d/optout.

>>> --
>> 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+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>>
> --
> 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+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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+unsubscr...@googlegroups.com.
For more options, visit 

Re: [weewx-user] Help creating a service to import data from file

2019-04-23 Thread Thomas Keffer
Because of the syntax, it's tempting to look at a ConfigObj file and think
of it as assigning the right hand side to the left hand side. But, it's
really not. It's a mapping. The left hand side *maps to* the right hand
side.

As a key:value comes in from the file, we need to know what to do with the
key. Given a key, what WeeWX name do we assign it to? With a mapping, we
look it up, then do the assignment to the value. If we did it the other way
around, we'd have to search all the *values* in the mapping to find what it
should be mapped to. That's backwards from the way dictionaries work.

-tk

On Tue, Apr 23, 2019 at 5:51 AM Andrew Milner 
wrote:

> Tom
> Forgive me for being a pedant - but shouldn't the label map for filepile
> have the arguments the other way round
> ie rather than
>  myVoltage = Supply Voltage
> it should be
>  SupplyVoltage = myVoltage
> ie
>   weewx destination field = source data field
>
> normally left of equals sign is the result of operations right of equals
> sign
> eg
>   a = 3 + 2 would put 5 into a
>
>
>
> On Tuesday, 23 April 2019 14:45:38 UTC+3, Thomas Keffer wrote:
>>
>> Take a look at Filepile . It may do
>> what you want, or help you write your own.
>>
>> -tk
>>
>> On Mon, Apr 22, 2019 at 7:43 PM  wrote:
>>
>>> Hi all
>>>
>>> I have devised a method to export my Air Quality Data (AQI) from my
>>> Arduino based weather station to Weewx (it can't be sent via the usb port
>>> with the rest of the data). It involves sending the data via a UDP
>>> broadcast packet from the station, this is then captured by a small Python
>>> script on my Weewx Pi and written to a txt file.
>>>
>>> The txt file data looks like this
>>> AQI25=5.50,AQI100=4.10,AQIIndex=22,AQICO2=967
>>>
>>> From the Weewx wiki I have crafted the beginning of a service to import
>>> the data to my Wewwx database (extended with the 4 new data fields) but I'm
>>> not sure how to complete that task. So far I have this, which I think will
>>> grab the first value - how do I parse the other 3? Is it as simple as just
>>> adding more lines such as event.record['AQI100'] = float(value) etc?
>>>
>>> *import* syslog
>>>
>>> *import* weewx
>>>
>>> *from* weewx.wxengine *import* StdService
>>>
>>>
>>> *class* WDAQIService(StdService):
>>>
>>> *def** __init__*(self, engine, config_dict):
>>>
>>> super(WDAQIService, self).__init__(engine, config_dict)
>>>
>>> d = config_dict.get(*'WDAQIService'*, {})
>>>
>>> self.filename = d.get(*'filename'*, *'/home/pi/AQIData.txt'*)
>>>
>>> syslog.syslog(syslog.LOG_INFO, *"WDAQIImport: using %s"* %
>>> self.filename)
>>>
>>> self.bind(weewx.NEW_ARCHIVE_RECORD, self.read_file)
>>>
>>>
>>> *def** read_file*(self, event):
>>>
>>> *try*:
>>>
>>> *with* open(self.filename) *as* f:
>>>
>>> value = f.read()
>>>
>>> syslog.syslog(syslog.LOG_DEBUG, *"WDAQIImport: found value
>>> of %s"* % value)
>>>
>>> event.record[*'AQI25'*] = float(value)
>>>
>>> *except* Exception *as* e:
>>>
>>> syslog.syslog(syslog.LOG_ERR, *"WDAQIImport: cannot read
>>> value: %s"* % e)
>>>
>>> Thanks
>>> Colin
>>>
>>> --
>>> 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...@googlegroups.com.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>> --
> 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+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [weewx-user] Help creating a service to import data from file

2019-04-23 Thread Andrew Milner
Tom
Forgive me for being a pedant - but shouldn't the label map for filepile 
have the arguments the other way round
ie rather than 
 myVoltage = Supply Voltage
it should be
 SupplyVoltage = myVoltage
ie
  weewx destination field = source data field

normally left of equals sign is the result of operations right of equals 
sign
eg
  a = 3 + 2 would put 5 into a



On Tuesday, 23 April 2019 14:45:38 UTC+3, Thomas Keffer wrote:
>
> Take a look at Filepile . It may do 
> what you want, or help you write your own.
>
> -tk
>
> On Mon, Apr 22, 2019 at 7:43 PM > wrote:
>
>> Hi all
>>
>> I have devised a method to export my Air Quality Data (AQI) from my 
>> Arduino based weather station to Weewx (it can't be sent via the usb port 
>> with the rest of the data). It involves sending the data via a UDP 
>> broadcast packet from the station, this is then captured by a small Python 
>> script on my Weewx Pi and written to a txt file.
>>
>> The txt file data looks like this 
>> AQI25=5.50,AQI100=4.10,AQIIndex=22,AQICO2=967
>>
>> From the Weewx wiki I have crafted the beginning of a service to import 
>> the data to my Wewwx database (extended with the 4 new data fields) but I'm 
>> not sure how to complete that task. So far I have this, which I think will 
>> grab the first value - how do I parse the other 3? Is it as simple as just 
>> adding more lines such as event.record['AQI100'] = float(value) etc?
>>
>> *import* syslog
>>
>> *import* weewx
>>
>> *from* weewx.wxengine *import* StdService
>>
>>
>> *class* WDAQIService(StdService):
>>
>> *def** __init__*(self, engine, config_dict):
>>
>> super(WDAQIService, self).__init__(engine, config_dict)  
>>
>> d = config_dict.get(*'WDAQIService'*, {})
>>
>> self.filename = d.get(*'filename'*, *'/home/pi/AQIData.txt'*)
>>
>> syslog.syslog(syslog.LOG_INFO, *"WDAQIImport: using %s"* % 
>> self.filename)
>>
>> self.bind(weewx.NEW_ARCHIVE_RECORD, self.read_file)
>>
>>
>> *def** read_file*(self, event):
>>
>> *try*:
>>
>> *with* open(self.filename) *as* f:
>>
>> value = f.read()
>>
>> syslog.syslog(syslog.LOG_DEBUG, *"WDAQIImport: found value 
>> of %s"* % value)
>>
>> event.record[*'AQI25'*] = float(value)
>>
>> *except* Exception *as* e:
>>
>> syslog.syslog(syslog.LOG_ERR, *"WDAQIImport: cannot read 
>> value: %s"* % e)
>>
>> Thanks
>> Colin
>>
>> -- 
>> 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...@googlegroups.com .
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
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+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [weewx-user] Help creating a service to import data from file

2019-04-23 Thread Thomas Keffer
Take a look at Filepile . It may do
what you want, or help you write your own.

-tk

On Mon, Apr 22, 2019 at 7:43 PM  wrote:

> Hi all
>
> I have devised a method to export my Air Quality Data (AQI) from my
> Arduino based weather station to Weewx (it can't be sent via the usb port
> with the rest of the data). It involves sending the data via a UDP
> broadcast packet from the station, this is then captured by a small Python
> script on my Weewx Pi and written to a txt file.
>
> The txt file data looks like this
> AQI25=5.50,AQI100=4.10,AQIIndex=22,AQICO2=967
>
> From the Weewx wiki I have crafted the beginning of a service to import
> the data to my Wewwx database (extended with the 4 new data fields) but I'm
> not sure how to complete that task. So far I have this, which I think will
> grab the first value - how do I parse the other 3? Is it as simple as just
> adding more lines such as event.record['AQI100'] = float(value) etc?
>
> *import* syslog
>
> *import* weewx
>
> *from* weewx.wxengine *import* StdService
>
>
> *class* WDAQIService(StdService):
>
> *def** __init__*(self, engine, config_dict):
>
> super(WDAQIService, self).__init__(engine, config_dict)
>
> d = config_dict.get(*'WDAQIService'*, {})
>
> self.filename = d.get(*'filename'*, *'/home/pi/AQIData.txt'*)
>
> syslog.syslog(syslog.LOG_INFO, *"WDAQIImport: using %s"* %
> self.filename)
>
> self.bind(weewx.NEW_ARCHIVE_RECORD, self.read_file)
>
>
> *def** read_file*(self, event):
>
> *try*:
>
> *with* open(self.filename) *as* f:
>
> value = f.read()
>
> syslog.syslog(syslog.LOG_DEBUG, *"WDAQIImport: found value of
> %s"* % value)
>
> event.record[*'AQI25'*] = float(value)
>
> *except* Exception *as* e:
>
> syslog.syslog(syslog.LOG_ERR, *"WDAQIImport: cannot read
> value: %s"* % e)
>
> Thanks
> Colin
>
> --
> 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+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[weewx-user] Help creating a service to import data from file

2019-04-22 Thread colin . larsen
Hi all

I have devised a method to export my Air Quality Data (AQI) from my Arduino 
based weather station to Weewx (it can't be sent via the usb port with the 
rest of the data). It involves sending the data via a UDP broadcast packet 
from the station, this is then captured by a small Python script on my 
Weewx Pi and written to a txt file.

The txt file data looks like this 
AQI25=5.50,AQI100=4.10,AQIIndex=22,AQICO2=967

>From the Weewx wiki I have crafted the beginning of a service to import the 
data to my Wewwx database (extended with the 4 new data fields) but I'm not 
sure how to complete that task. So far I have this, which I think will grab 
the first value - how do I parse the other 3? Is it as simple as just 
adding more lines such as event.record['AQI100'] = float(value) etc?

*import* syslog

*import* weewx

*from* weewx.wxengine *import* StdService


*class* WDAQIService(StdService):

*def** __init__*(self, engine, config_dict):

super(WDAQIService, self).__init__(engine, config_dict)  

d = config_dict.get(*'WDAQIService'*, {})

self.filename = d.get(*'filename'*, *'/home/pi/AQIData.txt'*)

syslog.syslog(syslog.LOG_INFO, *"WDAQIImport: using %s"* % 
self.filename)

self.bind(weewx.NEW_ARCHIVE_RECORD, self.read_file)


*def** read_file*(self, event):

*try*:

*with* open(self.filename) *as* f:

value = f.read()

syslog.syslog(syslog.LOG_DEBUG, *"WDAQIImport: found value of 
%s"* % value)

event.record[*'AQI25'*] = float(value)

*except* Exception *as* e:

syslog.syslog(syslog.LOG_ERR, *"WDAQIImport: cannot read value: 
%s"* % e)

Thanks
Colin

-- 
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+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.