I think it might be worth taking a couple of steps back here and having a 
look at what you are trying to do, if not for your benefit then for mine. 
As I understand it you have started with a weatherflow driver that picks up 
UDP packets and emits that data in loop packets for WeeWX to ingest. This 
driver requires WeeWX to operate with software record generation as the 
driver only emits loop packets. You have taken that driver and extended it 
to pick up historical data via a REST interface. The aim of this is to give 
the driver the ability to emit historical archive records so that if WeeWX 
loses connection to the UDP packets WeeWX can catchup when connection is 
restored. When I became involved in the conversation you were working on 
implementing the genArchiveRecords() method in your driver, presumably as a 
path to being able to have WeeWX backfill/catchup if WeeWX loses the UDP 
connection. Do I have this correct?

I gave some earlier advice that in order to be able to catchup/backfill you 
need implement genArchiveRecords(), that is not strictly true. In order for 
WeeWX to be able to catchup the driver needs to have a genStartupRecords() 
method. It so happens that if you look at the base class of your driver, 
weewx.drivers.AbstractDevice 
<https://github.com/weewx/weewx/blob/master/bin/weewx/drivers/__init__.py#L12>, 
you will see that your driver will have inherited a genStartupRecords() 
method from the base class but it simply calls the genArchiveRecords() 
method. So by implementing your genArchiveRecords() method you have 
automatically given your driver a (functional) genStartupRecords() method. 
Nothing wrong with that but as you have found with the type of station the 
weatherflow is (there are no explicit archive records available, you need 
to construct them) you get some odd behaviour when genArchiveRecords() is 
implemented. What I suspect your really want is to implement 
genStartupRecords() and genLoopPackets() but NOT implement 
genArchiveRecords() and operate WeeWX with software record generation. To 
do this all you would do is move your genArchiveRecords() code to 
genStartupRecords() and remove the genArchiveRecords() class definition 
from your driver (just let it inherit the genArchiveRecords() method from 
the base class). This will result in the driver emitting loop packets (as 
the original driver does) and WeeWX accumulating these loop packets, 
synthesising archive records  and saving the archive records to the 
database archive table. No archive records are emitted by the driver during 
normal operation. If the UDP connection is lost and later restored then 
when WeeWX restarts it will call the genStartupRecords() method with the 
last known timestamp in the archive table and the genStartupRecords() 
method will then emit all archive records since this timestamp. WeeWX will 
store these archive records in the database archive table. Once the catchup 
is completed normal driver operation resumes and WeeWX continues processing 
loop packets.

Does that make sense?

Gary

-- 
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/1415d8ec-644e-4216-9a21-4a36f71a27d5n%40googlegroups.com.

Reply via email to