Hi Thomas

Thanks for the quick reply. It was just the format, it needs the spaces so
each line in the text file is


AQI25 = 1.60

AQI100 = 3.30

AQIIndex = 6

AQICO2 = 683


Once I did that and checked the database after an archive period the fields
were populated

Does my section with the units look valid? I've borrowed that from a
similar service but I can't wrap my head around how the relationship
between those and the data in the txt file get joined together


Thanks again

Colin



On Tue, May 7, 2019 at 3:13 PM Thomas Keffer <[email protected]> wrote:

> Hi, Colin
>
> Does your text file use newlines ('\n') as line delineators? Perhaps it is
> using the MS-DOS standard of '\n\r'? Examine the file carefully and make
> sure it contains what you think it contains.
>
> -tk
>
> On Mon, May 6, 2019 at 8:05 PM Colin Larsen <[email protected]>
> wrote:
>
>> Hi all
>>
>> I'm trying to get Filepile working but have come across an error that I
>> don't understand. Any help appreciated. The database has been extended with
>> fields to match those below in the data file - am I just missing spaces in
>> the layout? Should it be AQI25 = 1.60 etc etc
>>
>> Many thanks
>>
>> This is my data file;
>>
>> AQI25=1.60
>>
>> AQI100=3.30
>>
>> AQIIndex=6
>>
>> AQICO2=683
>>
>>
>> This is my stanza in weewx.conf
>>
>>
>> ##############################################################################
>>
>>
>> #       This section is for FilePile
>>
>>
>> [FilePile]
>>
>>
>>         filename = /home/pi/AQIData.txt
>>
>>         unit_system = METRIC
>>
>>
>>
>> ##############################################################################
>>
>>
>> This is my filepile.py (modified from original to suit)
>>
>>
>> *import* syslog
>>
>> *import* weewx
>>
>> *import* weewx.units
>>
>> *from* weewx.wxengine *import* StdService
>>
>> *from* weeutil.weeutil *import* to_float
>>
>>
>> weewx.units.USUnits[*'group_gas_concentration'*] = *'ppm'*
>>
>> weewx.units.MetricUnits[*'group_gas_concentration'*] = *'ppm'*
>>
>> weewx.units.MetricWXUnits[*'group_gas_concentration'*] = *'ppm'*
>>
>> weewx.units.default_unit_format_dict[*'ppm'*]  = *'%.0f'*
>>
>> weewx.units.default_unit_label_dict[*'ppm'*]  = *' ppm'*
>>
>>
>> weewx.units.USUnits[*'group_dust'*] = *'microgramm_per_meter_cubic'*
>>
>> weewx.units.MetricUnits[*'group_dust'*] = *'microgramm_per_meter_cubic'*
>>
>> weewx.units.MetricWXUnits[*'group_dust'*] =
>> *'microgramm_per_meter_cubic'*
>>
>> weewx.units.default_unit_format_dict[*'microgramm_per_meter_cubic'*]  =
>> *'%.1f'*
>>
>> weewx.units.default_unit_label_dict[*'microgramm_per_meter_cubic'*]  = *'
>> \xce\xbcg/m\xc2\xb3'*
>>
>>
>> *class* FilePile(StdService):
>>
>>     *"""WeeWX service for augmenting a record with data parsed from a
>> file."""*
>>
>>
>>     *def** __init__*(self, engine, config_dict):
>>
>>        * # Initialize my superclass:*
>>
>>         super(FilePile, self).__init__(engine, config_dict)
>>
>> *        # Extract our stanza from the configuration dicdtionary*
>>
>>         filepile_dict = config_dict.get(*'FilePile'*, {})
>>
>>        * # Get the location of the file ...*
>>
>>         self.filename = filepile_dict.get(*'filename'*,
>> *'/var/tmp/filepile.txt'*)
>>
>>        * # ... and the unit system it will use*
>>
>>         unit_system_name = filepile_dict.get(*'unit_system'*,
>> *'METRICWX'*).strip().upper()
>>
>>        * # Make sure we know about the unit system. If not, raise an
>> exception.*
>>
>>         *if* unit_system_name *not* *in* weewx.units.unit_constants:
>>
>>             *raise* ValueError(*"FilePile: Unknown unit system: %s"* %
>> unit_system_name)
>>
>>        * # Use the numeric code for the unit system*
>>
>>         self.unit_system = weewx.units.unit_constants[unit_system_name]
>>
>>
>>        * # Mapping from variable names to weewx names*
>>
>>         self.label_map = filepile_dict.get(*'label_map'*, {})
>>
>>         syslog.syslog(syslog.LOG_INFO, *"filepile: Using %s with the
>> '%s' unit system"*
>>
>>                       % (self.filename, unit_system_name))
>>
>>         syslog.syslog(syslog.LOG_INFO, *"filepile: Label map is %s"* %
>> self.label_map)
>>
>>
>>        * # Bind to the NEW_ARCHIVE_RECORD event*
>>
>>         self.bind(weewx.NEW_ARCHIVE_RECORD, self.new_archive_record)
>>
>>
>>     *def** new_archive_record*(self, event):
>>
>>         new_record_data = {}
>>
>>         *try*:
>>
>>             *with* open(self.filename, *'r'*) *as* fd:
>>
>>                 *for* line *in* fd:
>>
>>                     eq_index = line.find(*'='*)
>>
>> *                # Ignore all lines that do not have an equal sign*
>>
>>                     *if* eq_index == -1:
>>
>>                         *continue*
>>
>>                     name = line[:eq_index].strip()
>>
>>                     value = line[eq_index + 1:].strip()
>>
>>                     new_record_data[self.label_map.get(name, name)] =
>> to_float(value)
>>
>>                * # Supply a unit system if one wasn't included in the
>> file*
>>
>>                 *if* *'usUnits'* *not* *in* new_record_data:
>>
>>                     new_record_data[*'usUnits'*] = self.unit_system
>>
>>                * # Convert the new values to the same unit system as the
>> record*
>>
>>                 target_data = weewx.units.to_std_system(new_record_data,
>> event.record[*'usUnits'*])
>>
>>                * # Add the converted values to the record:*
>>
>>                 event.record.update(target_data)
>>
>>                 *except* IOError *as* e:
>>
>>        syslog.syslog(syslog.LOG_ERR, *"FilePile: Cannot open file.
>> Reason: %s"* % e)
>>
>> This is the syslog error;
>>
>> May  7 14:50:16 raspberrypi weewx[6605]: engine: Caught unrecoverable
>> exception in engine:
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****  invalid literal for
>> float(): 1.60#015AQI100=3.30#015AQIIndex=6#015AQICO2=683
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****  Traceback (most
>> recent call last):
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****    File
>> "/usr/share/weewx/weewx/engine.py", line 890, in main
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****      engine.run()
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****    File
>> "/usr/share/weewx/weewx/engine.py", line 202, in run
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****
>> self.dispatchEvent(weewx.Event(weewx.POST_LOOP))
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****    File
>> "/usr/share/weewx/weewx/engine.py", line 224, in dispatchEvent
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****      callback(event)
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****    File
>> "/usr/share/weewx/weewx/engine.py", line 574, in post_loop
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****
>> self._software_catchup()
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****    File
>> "/usr/share/weewx/weewx/engine.py", line 646, in _software_catchup
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****      
>> self.engine.dispatchEvent(weewx.Event(weewx.NEW_ARCHIVE_RECORD,
>> record=record, origin='software'))
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****    File
>> "/usr/share/weewx/weewx/engine.py", line 224, in dispatchEvent
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****      callback(event)
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****    File
>> "/usr/share/weewx/user/filepile.py", line 91, in new_archive_record
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****      
>> new_record_data[self.label_map.get(name,
>> name)] = to_float(value)
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****    File
>> "/usr/share/weewx/weeutil/weeutil.py", line 1280, in to_float
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****      return float(x)
>> if x is not None else None
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****  ValueError: invalid
>> literal for float(): 1.60#015AQI100=3.30#015AQIIndex=6#015AQICO2=683
>>
>> May  7 14:50:16 raspberrypi weewx[6605]:     ****  Exiting.
>>
>> --
>> 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 [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/weewx-user/CACjxfUvKW4goXJ9TZYUWkDm4YdxLqpeP_Ez1EzRheJyJ5_h4ew%40mail.gmail.com
>> <https://groups.google.com/d/msgid/weewx-user/CACjxfUvKW4goXJ9TZYUWkDm4YdxLqpeP_Ez1EzRheJyJ5_h4ew%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>> 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 [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/weewx-user/CAPq0zEB0Tn%2B2q2sei37n%2BrTGO4pqq8cGL-5zF_E4dpMMEJzyiQ%40mail.gmail.com
> <https://groups.google.com/d/msgid/weewx-user/CAPq0zEB0Tn%2B2q2sei37n%2BrTGO4pqq8cGL-5zF_E4dpMMEJzyiQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
> 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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/weewx-user/CACjxfUs3hrP_2UYsNtNbUoNPeS0oeyEDnea%2BCJh5BgeBqUufJQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to