The good news is I have reverse engineered the USB interface to this 
weather station, and while there are still nuances and additional commands 
to be understood I have a test program running reliably.

As there has been no interest here I'll probably write my own solution for 
this rather than go down the weewx route, but once polished I'll make my 
solution available (but I could still be persuaded to go down the weewx 
route).

The only other weather station interface that I am familiar with is the 
ws2300 - compared to that this weather station interface is orders of 
magnitude simpler and more reliable

Not expecting any responses, but if there is any interest let me know

Bob

On Friday, 3 January 2020 18:20:49 UTC, Bob Atchley wrote:
>
> Hi,
>
> Has anyone had any luck interfacing weewx (on a rpi) to this weather 
> station (which is identical to the Bresser 6 in 1) and if so could you give 
> me any pointers ?
> https://youshiko.co.uk/collections/digital-weather-stations/products/yc9388
>
> My basic assumption is that this is a Fine Offset clone.
>
> The fundamental problem I'm having is with the USB interface
>
> $ lsusb  -v -d 1941:8021
>
> *Bus 001 Device 004: ID 1941:8021 Dream Link WH1080 Weather Station / USB 
> Missile Launcher*
> *Device Descriptor:*
> *  bLength                18*
> *  bDescriptorType         1*
> *  bcdUSB               2.00*
> *  bDeviceClass            0 *
> *  bDeviceSubClass         0 *
> *  bDeviceProtocol         0 *
> *  bMaxPacketSize0        64*
> *  idVendor           0x1941 Dream Link*
> *  idProduct          0x8021 WH1080 Weather Station / USB Missile Launcher*
> *  bcdDevice            0.00*
> *  iManufacturer           1 Silicon Laboratories Inc.*
> *  iProduct                2 CCLEL C8488*
> *  iSerial                 3 CCLEL c8488*
> *  bNumConfigurations      1*
> *  Configuration Descriptor:*
> *    bLength                 9*
> *    bDescriptorType         2*
> *    wTotalLength       0x0022*
> *    bNumInterfaces          1*
> *    bConfigurationValue     1*
> *    iConfiguration          0 *
> *    bmAttributes         0xc0*
> *      Self Powered*
> *    MaxPower              100mA*
> *    Interface Descriptor:*
> *      bLength                 9*
> *      bDescriptorType         4*
> *      bInterfaceNumber        0*
> *      bAlternateSetting       0*
> *      bNumEndpoints           1*
> *      bInterfaceClass         3 Human Interface Device*
> *      bInterfaceSubClass      0 *
> *      bInterfaceProtocol      1 Keyboard*
> *      iInterface              0 *
> *        HID Device Descriptor:*
> *          bLength                 9*
> *          bDescriptorType        33*
> *          bcdHID               1.11*
> *          bCountryCode            0 Not supported*
> *          bNumDescriptors         1*
> *          bDescriptorType        34 Report*
> *          wDescriptorLength      36*
> *          Report Descriptor: (length is 36)*
> *            Item(Global): Usage Page, data= [ 0x00 0xff ] 65280*
> *                            (null)*
> *            Item(Local ): Usage, data= [ 0x01 ] 1*
> *                            (null)*
> *            Item(Main  ): Collection, data= [ 0x01 ] 1*
> *                            Application*
> *            Item(Local ): Usage Minimum, data= [ 0x01 ] 1*
> *                            (null)*
> *            Item(Local ): Usage Maximum, data= [ 0x08 ] 8*
> *                            (null)*
> *            Item(Global): Logical Minimum, data= [ 0x00 ] 0*
> *            Item(Global): Logical Maximum, data= [ 0xff ] 255*
> *            Item(Global): Report Count, data= [ 0x40 ] 64*
> *            Item(Global): Report Size, data= [ 0x08 ] 8*
> *            Item(Main  ): Input, data= [ 0x02 ] 2*
> *                            Data Variable Absolute No_Wrap Linear*
> *                            Preferred_State No_Null_Position Non_Volatile 
> Bitfield*
> *            Item(Local ): Usage Minimum, data= [ 0x01 ] 1*
> *                            (null)*
> *            Item(Local ): Usage Maximum, data= [ 0x08 ] 8*
> *                            (null)*
> *            Item(Global): Logical Minimum, data= [ 0x00 ] 0*
> *            Item(Global): Logical Maximum, data= [ 0xff ] 255*
> *            Item(Global): Report Count, data= [ 0x08 ] 8*
> *            Item(Global): Report Size, data= [ 0x08 ] 8*
> *            Item(Main  ): Output, data= [ 0x02 ] 2*
> *                            Data Variable Absolute No_Wrap Linear*
> *                            Preferred_State No_Null_Position Non_Volatile 
> Bitfield*
> *            Item(Main  ): End Collection, data=none*
> *      Endpoint Descriptor:*
> *        bLength                 7*
> *        bDescriptorType         5*
> *        bEndpointAddress     0x81  EP 1 IN*
> *        bmAttributes            3*
> *          Transfer Type            Interrupt*
> *          Synch Type               None*
> *          Usage Type               Data*
> *        wMaxPacketSize     0x0040  1x 64 bytes*
> *        bInterval               1*
> *can't get device qualifier: Resource temporarily unavailable*
> *can't get debug descriptor: Resource temporarily unavailable*
> *Device Status:     0x0001*
> *  Self Powered*
>
>
> Running wee_ device works, but the values returned are all defaults not 
> what the console is displaying.
>
> $ sudo bin/wee_device --info
>
> *Using configuration file /home/weewx/weewx.conf*
> *Using FineOffsetUSB driver version 1.20 (weewx.drivers.fousb)*
> *Querying the station...*
> *Fine Offset station settings:*
> *                    local time: 2020.01.03 17:47:03 GMT*
> *                  polling mode: PERIODIC*
>
> *                  abs_pressure: 0*
> *                   current_pos: 0*
> *                  data_changed: 0*
> *                    data_count: 0*
> *                     date_time: 2000-00-00 00:00*
> *                 hum_in_offset: 0*
> *                hum_out_offset: 0*
> *                            id: 0*
> *                 lux_wm2_coeff: 0*
> *                       magic_1: 0xfa*
> *                       magic_2: 0x 3*
> *                         model: 0*
> *                     rain_coef: 0*
> *                   read_period: 0*
> *                  rel_pressure: 101.8*
> *                temp_in_offset: 0*
> *               temp_out_offset: 0*
> *                      timezone: 0*
> *                    unknown_01: 0*
> *                    unknown_18: 3*
> *                       version: 0*
> *                     wind_coef: 0*
> *                     wind_mult: 0*
>
> *         max.abs_pressure.date: 2000-00-00 00:00*
> *          max.abs_pressure.val: 0*
> *             max.dewpoint.date: 2000-160-03 00:00*
> *              max.dewpoint.val: 0*
>
>               .... (cut similar)
>
> and the log file shows :
>
> *Jan  3 17:45:28 rpi2 wee_device[2565] INFO weewx.drivers.fousb: driver 
> version is 1.20*
> *Jan  3 17:45:28 rpi2 wee_device[2565] INFO weewx.drivers.fousb: polling 
> mode is PERIODIC*
> *Jan  3 17:45:28 rpi2 wee_device[2565] INFO weewx.drivers.fousb: polling 
> interval is 60*
> *Jan  3 17:45:28 rpi2 wee_device[2565] INFO weewx.drivers.fousb: found 
> station on USB bus= device=*
> *Jan  3 17:45:28 rpi2 wee_device[2565] INFO weewx.drivers.fousb: unstable 
> read: blocks differ for ptr 0x000000*
> *Jan  3 17:45:30 rpi2 wee_device[2565] INFO weewx.drivers.fousb: unstable 
> read: blocks differ for ptr 0x000000*
> *Jan  3 17:45:32 rpi2 wee_device[2565] INFO weewx.drivers.fousb: unstable 
> read: blocks differ for ptr 0x000000*
> *.... (many similar cut)*
> *Jan  3 17:46:53 rpi2 wee_device[2565] INFO weewx.drivers.fousb: unstable 
> read: blocks differ for ptr 0x0000e0*
> *Jan  3 17:46:55 rpi2 wee_device[2565] INFO weewx.drivers.fousb: unstable 
> read: blocks differ for ptr 0x0000e0*
> *Jan  3 17:46:57 rpi2 wee_device[2565] INFO weewx.drivers.fousb: unstable 
> read: blocks differ for ptr 0x0000e0*
> *Jan  3 17:46:59 rpi2 wee_device[2565] INFO weewx.drivers.fousb: unstable 
> read: blocks differ for ptr 0x0000e0*
> *Jan  3 17:47:01 rpi2 wee_device[2565] INFO weewx.drivers.fousb: unstable 
> read: blocks differ for ptr 0x0000e0*
> *Jan  3 17:47:03 rpi2 wee_device[2565] ERROR weewx.drivers.fousb: 
> unrecognised magic number fa03*
>
>
> I've cycled through the model numbers in the weewx.conf [FineOffsetUSB] 
> settings but this has made no difference.
>
> I should say I was using the latest stable version on a rpi4 but 
> wee_device crashes with this on the first usb block read (errno 75, 
> Overflow).  I am now using  4.0.0b6 on an rpi2 which at least doesn't crash.
>
> I have attached a laptop running windows with the manufacturers software - 
> this works perfectly (but the software is very limited) so at least I know 
> the weather station is fully functional
>
> Thanks
>
> Bob
>

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/weewx-user/99c989b3-0028-40d4-9836-8e5ea0df2ea8%40googlegroups.com.

Reply via email to