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.
