Since the Weatherflow Stations don't provide hardware generated records as 
far as I know, there isn't much sense of having a genArchiveRecords() in 
the driver, or may one consider the REST service as "hardware generated 
records"?

@Jan-Jaap, just to reassure where you are heading to: the goal is to 
provide a driver for Weatherflow stations, that lets weewx generate archive 
records from loop data, when everything is up and running. On top of that, 
if weewx didn't run for whatever reason, and is started again, the driver 
should get the missing data from the weatherflow REST service for that 
particular station, and backfill the data into the weewx database, and then 
back to generating loop packets and let weewx do the stuff, right?

gjr80 schrieb am Mittwoch, 10. Februar 2021 um 07:30:27 UTC+1:

> It might be worth revising the operation of genLoopPackets() and 
> genArchiveRecords(), in particular when running under hardware and 
> software record generation.
>
> The task of genLoopPackets() is to emit loop packets and these packets 
> are processed and accumulated by WeeWX. The accumulated loop packets can be 
> used to (1) synthesise an archive record at the end of the archive interval 
> (which is ultimately saved to database in the archive table) and (2) if 
> loop_hilo is True update the daily summary tables. On the other hand the 
> task of genArchiveRecords() is to emit, when asked,  archive records 
> which are processed by WeeWX and ultimately saved to database in the 
> archive table and used to update the daily summary tables. 
>
> If you are using software record generation then WeeWX never asks the 
> driver to emit archive records, instead WeeWX takes the accumulated loop 
> packet data received during an archive interval and synthesises an archive 
> record. This archive record is saved to database in the archive table.If 
> loop_hilo is True the daily summary tables are updated using the 
> accumulated loop data. In other words the driver just continually emits 
> loop packets and WeeWX does the rest. 
>
> When using hardware record generation the driver continues to emit loop 
> packets, and WeeWX continues to accumulate them; however, at the end of the 
> archive interval instead of synthesising an archive record WeeWX asks the 
> driver for an archive record. Since the driver has a genArchiveRecords() 
> method an archive record is emitted by the driver and WeeWX takes that 
> archive record and ultimately saves it to database in the archive table. 
> WeeWX will use the archive data and, if loop_hilo is True, the 
> accumulated loop packet data, to update the daily summary tables (note that 
> no archive record is ever synthesised by WeeWX, the only archive record 
> that exists comes from the driver). There is one more aspect to WeeWX 
> operation when hardware record generation is selected. WeeWX asks the 
> driver for an archive record by calling the genArchiveRecords() method,  
> if that call fails then WeeWX falls back to software record generation (ie 
> WeeWX synthesises an archive record from the accumulated loop packets). So 
> even though you have set hardware record generation WeeWX will still 
> function properly with a driver that does not support hardware record 
> generation (ie it has no genArchiveRecords() method).
>
> Back to your situation. When you have genArchiveRecords() enabled you say 
> that "*The driver sees the data and according to some logging it passes 
> it to weewx just fine, but for some reason weewx seems to be silently 
> ignoring the data, it is never added to the database with no indication why 
> in the logfile.*" What do you mean by this, or what are you expecting to 
> see? If you are using hardware record generation (you must be if 
> genArchiveRecords() is being called) then WeeWX will never save the loop 
> packet data to the archive table in the database, it saves the archive 
> record emitted by genArchiveRecords() to the archive table in the 
> database. WeeWX only uses the loop packet data to update the daily summary 
> tables. Did you look at the daily summary tables, are the highs and lows 
> and timestamps being updated with loop data?
>
> When you disable genArchiveRecords(), even though you have hardware 
> record generation set, the call to genArchiveRecords() fails and WeeWX 
> automatically falls back to software record generation where WeeWX 
> synthesises an archive record and saves that archive record to the archive 
> table in the database.
>
> From your description above it is quite possible that WeeWX and your 
> driver is working exactly as intended, it might not be, but I think you 
> will need to look at bit deeper to show this.
>
> Gary
>
> On Wednesday, 10 February 2021 at 07:29:28 UTC+10 Jan-Jaap van der Geer 
> wrote:
>
>> I've modified an existing driver that originally only captured LOOP data 
>> but I have added a 'genArchiveRecords()' method to it that fetches data 
>> from a REST interface. This seems to work fine and it fetches the data.
>>
>> However, since this modification it no longer fetches the LOOP data. The 
>> driver sees the data and according to some logging it passes it to weewx 
>> just fine, but for some reason weewx seems to be silently ignoring the 
>> data, it is never added to the database with no indication why in the 
>> logfile.
>>
>> I've been investigating this for some days and I don't understand why it 
>> is happening. I have found out that it is related to the 
>> genArchiveRecords() method: If I have this method like this:
>>
>>     def genArchiveRecords(self, since_ts):
>>         yield from ()
>>
>> then weewx is ignoring all values returned by genLoopPackets().
>>
>> However, if I comment out the genArchiveRecords() alltogether, then 
>> suddenly the records returned from weewx by genLoopPackets() are being 
>> inserted in the database as expected.
>>
>> This does not make any sense to me. Anybody understands what is going on?
>>
>> The code for this driver can be found here: 
>> https://github.com/jjvdgeer/weatherflow-udp
>>
>> Thanks,
>> Jan-Jaap
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"weewx-development" 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-development/274e055f-9469-4414-923d-92c9abd37ce9n%40googlegroups.com.

Reply via email to