Multiple full sensor data with one SDR-Stick

317 views
Skip to first unread message

f4n...@gmail.com

unread,
Feb 26, 2022, 3:51:21 AM2/26/22
to weewx-user
Would it be possible to record data from two or more full sensor arrays (including wind and rain) in one weewx instance? Or record the data in multiple weewx instances with only one SDR-stick? 

I know multiple SDR sticks to multiple weewx instances is possible, but how could it be done with just one stick? 

I already achieved to get the temperature from a second sensor with the extraTempSensor value in the sensor map, but i guess this wouldn't work for wind and rain? It seems like it would need basically only an adaption to the schema and database, but to edit these seems a bit complex for me, has anyone ever done this?

an oldman

unread,
Feb 26, 2022, 10:41:11 AM2/26/22
to weewx-user
I have
here is my sdr from weewx.conf
extraTemp, batteryStatus, extraHumid1 - 8 are in the wview_extended.py schema.
I had to add to the schema extrawindSpeed, extrawindDir, lightning_distance15, lightning_strike_count15 and extraTemp, batteryStatus, extraHumid 9 - 16.
Had a 3rd 5n1 but a hail storm took out 2 5n1s, had to combine them to get 1 working 5n1.
sdr.txt

f4n...@gmail.com

unread,
Feb 26, 2022, 11:53:58 AM2/26/22
to weewx-user
Now that's really great, thanks for the config. Where or how exactly do i have to add the entrys in the schema file?

an oldman

unread,
Feb 26, 2022, 12:27:03 PM2/26/22
to weewx-user
that config won't work with your set up, had to add a lot to the sdr driver for sensors, make some extension, add to the schema and user/extensions.py file and change some weewx core files.
look in the wiki under data management Switching to the new, extended schema wview_extended.

an oldman

unread,
Feb 26, 2022, 5:47:49 PM2/26/22
to weewx-user
you could try something like in this if
soilMoist1, soilMoist2, extraTemp1, extraHumid1, windBatteryStatus and hail are unsed

in weewx.conf
[SDR]
    [[sensor_map]]
        soilMoist1 = wind_speed.1276.Acurite5n1PacketV2
        soilMoist2 = wind_dir.1276.Acurite5n1PacketV2
        extraTemp1 = temperature.1276.Acurite5n1PacketV2
        extraHumid1 = humidity.1276.Acurite5n1PacketV2
        windBatteryStatus = battery.1276.Acurite5n1PacketV2
        hail_total = rain_total.1276.Acurite5n1PacketV2
    [[deltas]]
        hail = hail_total

[Accumulator]
    [[hail]]
        extractor = sum

and in extensions.py
import weewx.units
weewx.units.obs_group_dict['soilMoist1'] = 'group_speed'
weewx.units.obs_group_dict['soilMoist2'] = 'group_direction'

then to display wind speed you would use $current.soilMoist1 in a template
and for wind dir $current.soilMoist2 and/or $current.soilMoist2.ordinal_compass

not shure where to change the labels at but i think in 4.6.2 it is in the lang files
say in en.conf
[Labels]
    [[Generic]]
        soilMoist1 = Wind Speed (5n1)
        soilMoist2 = Wind Direction (5n1)
        windBatteryStatus = Battery (5n1)
        hail = Rain (5n1)
$obs.label.soilMoist1 should show Wind Speed (5n1) and so on.

f4n...@gmail.com

unread,
Feb 27, 2022, 2:33:17 AM2/27/22
to weewx-user
That would be a good and much simpler solution if it works, will definitely try this. Is there some unit remaining which i could use for wind_gust?

Thanks a lot!

an oldman

unread,
Feb 27, 2022, 3:11:24 AM2/27/22
to weewx-user
there are other units.  just look at the schema file to see what there is.
if your station sends wind gust you could one that's not in use.
acurite 5n1 do not send wind gust just wind speed and dir.  to get the extra wind stuff i have to hack weewx files for every weewx update.

f4n...@gmail.com

unread,
Mar 1, 2022, 7:37:09 AM3/1/22
to weewx-user
That's good to know, so I have to repeat these steps after a weewx update?

I have it now running with the additional sensors: http://meteo.fankyy.ch/WsDi1c_sdr/
Not sure if the rain graph will only appear after it begins with rain count? 

I used soilMoist 1-3 for Wind, Gust and Direction, but it put all in one graph, with the highest number 360 for wind direction, the speed is barely visible. So i use soiltemp4 for the wind direction now and hope, the back-to-normal named soilMoist3 will go out of the daily graph after 24h? Is there an easy way to delete it out of the database, without having to examine/stopping the database for a long time?

I couldn't find where tho do this step:
then to display wind speed you would use $current.soilMoist1 in a template
and for wind dir $current.soilMoist2 and/or $current.soilMoist2.ordinal_compass

in the seasons skin

f4n...@gmail.com

unread,
Mar 1, 2022, 11:25:22 AM3/1/22
to weewx-user
As the database is quite new i just deleted the few soilMost3 entries out and made a 

sudo wee_database --rebuild-daily --from=2022-03-01 --to=2022-03-01 --config=/etc/weewx/weewx-sdr.conf

and started weewx-sdr again, now it's looking quite good. I'm still trying to figure out how to change the wind direction lines to dots?

an oldman

unread,
Mar 1, 2022, 12:57:42 PM3/1/22
to weewx-user
in Seasons/skin.conf
plot_groups list the plots to show

moistsoil shows the plots for soilMoist1-4
tempsoil for soilTemp1-4

if you remove moistsoil, tempsoil from the list will stop showing the plots

you would have to add to plot_groups the extra wind stuff say extrawind, extrawinddir, then under [ImageGenerator] section you would have to something like

[[[dayextrawind]]]
    [[[[soilMoist1]]]]
    [[[[soilMoist2]]]]

to do it for week, month, and year for week, month and year add aggregate_type = max for week plot something like

[[[weekextrawind]]]
    [[[[soilMoist1]]]]
    [[[[soilMoist2]]]]
        aggregate_type = max

for direction an agian for week, month and year
[[[dayextrawinddir]]]
    yscale = 0.0, 360.0, 45.0
    line_type = None
    marker_type = box
    marker_size = 2
    [[[[soilTemp4]]]]

in Seasons/current.inc file after the last #end for and before </tbody> add something like

<tr>
  <td class="label">Wind Speed</td>
  <td class="data">$current.soilMoist1 $current.soilTemp1.ordinal_compass ($current.soilTemp1)</td>
<tr>

no restart is needed for that just the next report cycle
Message has been deleted

an oldman

unread,
Mar 1, 2022, 5:34:06 PM3/1/22
to weewx-user
i do not have public access to my weather page so if you want to see some of it these are about a 3rd of it starting at the top
Untitled2.png
Untitled3.png
Untitled1.png

f4n...@gmail.com

unread,
Mar 3, 2022, 5:21:32 AM3/3/22
to weewx-user
Thanks it worked! 

But the <td> tables somehow broke the 2-row listing of the graphs so i left it out for now. As i already got all the graphs i need. 

Will I have to do modify these files (including skin.conf, extensions.py) again after the update to weewx 4.7?

Your SDR setup looks very nicely tweaked. How did you get the snr/noise/rssi and signal quality info and how to put them into weewx? 

an oldman

unread,
Mar 3, 2022, 7:43:42 AM3/3/22
to weewx-user
I do know about the skin.conf and Seasons files, but the extensions.py and weewx.conf should be ok.
I backup all of weewx before any upgrade, then check the files i modified

for snr/noise/rssi rtl_433 use the -M level switch here is the command i use
/usr/local/bin/rtl_433 -M utc -M protocol -M level -F json

Use "protocol" / "noprotocol" to output the decoder protocol number meta data.
Use "level" to add Modulation, Frequency, RSSI, SNR, and Noise meta data.
but i don't know if sdr.py puts them in the loop data for all sensors.
snr/noise/rssi/frequency are not saved to the database so only the current tag works for them and to get them formated added to extensions.py
weewx.units.obs_group_dict['noise'] = 'group_db'
weewx.units.obs_group_dict['rssi'] = 'group_db'
weewx.units.obs_group_dict['snr'] = 'group_db'

to get the signal in weewx.conf i have this

[StdCalibrate]
    [[Corrections]]
        rxCheckPercent = rssi + 100
        signal1 = rssi1 + 100

f4n...@gmail.com

unread,
Mar 3, 2022, 9:12:42 AM3/3/22
to weewx-user
They don't seem to be in sdr.py for my stations. Would it work to add it manually to sdr.py for the wh65b and whx080?
And do I have to add these to the sensor map?

an oldman

unread,
Mar 3, 2022, 1:26:26 PM3/3/22
to weewx-user
this is the output for rtl_433 -M utc -M protocol -M level -F json command for acurite atlas sensor

{"time" : "2022-03-03 18:16:57", "protocol" : 40, "model" : "Acurite-Atlas", "id" : 494, "channel" : "B", "sequence_num" : 0, "battery_ok" : 1, "message_type" : 39, "wind_avg_mi_h" : 3.000, "uv" : 2, "lux" : 45830, "strike_count" : 3, "strike_distance" : 10, "exception" : 0, "raw_msg" : "81eee78142a3e7006a0d", "mod" : "ASK", "freq" : 433.946, "rssi" : -4.499, "snr" : 28.102, "noise" : -32.602}
{"time" : "2022-03-03 18:16:57", "protocol" : 40, "model" : "Acurite-Atlas", "id" : 494, "channel" : "B", "sequence_num" : 1, "battery_ok" : 1, "message_type" : 39, "wind_avg_mi_h" : 3.000, "uv" : 2, "lux" : 45830, "strike_count" : 3, "strike_distance" : 10, "exception" : 0, "raw_msg" : "85eee78142a3e7006a11", "mod" : "ASK", "freq" : 433.946, "rssi" : -4.499, "snr" : 28.102, "noise" : -32.602}
{"time" : "2022-03-03 18:16:57", "protocol" : 40, "model" : "Acurite-Atlas", "id" : 494, "channel" : "B", "sequence_num" : 2, "battery_ok" : 1, "message_type" : 39, "wind_avg_mi_h" : 3.000, "uv" : 2, "lux" : 45830, "strike_count" : 3, "strike_distance" : 10, "exception" : 0, "raw_msg" : "89eee78142a3e7006a15", "mod" : "ASK", "freq" : 433.946, "rssi" : -4.499, "snr" : 28.102, "noise" : -32.602}
{"time" : "2022-03-03 18:17:07", "protocol" : 40, "model" : "Acurite-Atlas", "id" : 494, "channel" : "B", "sequence_num" : 0, "battery_ok" : 1, "message_type" : 37, "wind_avg_mi_h" : 5.000, "temperature_F" : 14.600, "humidity" : 69, "strike_count" : 3, "strike_distance" : 10, "exception" : 0, "raw_msg" : "81ee65824422c5006aeb", "mod" : "ASK", "freq" : 433.947, "rssi" : -5.061, "snr" : 27.083, "noise" : -32.144}
{"time" : "2022-03-03 18:17:07", "protocol" : 40, "model" : "Acurite-Atlas", "id" : 494, "channel" : "B", "sequence_num" : 1, "battery_ok" : 1, "message_type" : 37, "wind_avg_mi_h" : 5.000, "temperature_F" : 14.600, "humidity" : 69, "strike_count" : 3, "strike_distance" : 10, "exception" : 0, "raw_msg" : "85ee65824422c5006aef", "mod" : "ASK", "freq" : 433.947, "rssi" : -5.061, "snr" : 27.083, "noise" : -32.144}
{"time" : "2022-03-03 18:17:07", "protocol" : 40, "model" : "Acurite-Atlas", "id" : 494, "channel" : "B", "sequence_num" : 2, "battery_ok" : 1, "message_type" : 37, "wind_avg_mi_h" : 5.000, "temperature_F" : 14.600, "humidity" : 69, "strike_count" : 3, "strike_distance" : 10, "exception" : 0, "raw_msg" : "89ee65824422c5006af3", "mod" : "ASK", "freq" : 433.947, "rssi" : -5.061, "snr" : 27.083, "noise" : -32.144}
{"time" : "2022-03-03 18:17:18", "protocol" : 40, "model" : "Acurite-Atlas", "id" : 494, "channel" : "B", "sequence_num" : 0, "battery_ok" : 1, "message_type" : 38, "wind_avg_mi_h" : 5.000, "wind_dir_deg" : 94.000, "rain_in" : 1.140, "strike_count" : 3, "strike_distance" : 10, "exception" : 0, "raw_msg" : "81ee6682427872006aed", "mod" : "ASK", "freq" : 433.948, "rssi" : -3.818, "snr" : 28.326, "noise" : -32.144}
{"time" : "2022-03-03 18:17:18", "protocol" : 40, "model" : "Acurite-Atlas", "id" : 494, "channel" : "B", "sequence_num" : 1, "battery_ok" : 1, "message_type" : 38, "wind_avg_mi_h" : 5.000, "wind_dir_deg" : 94.000, "rain_in" : 1.140, "strike_count" : 3, "strike_distance" : 10, "exception" : 0, "raw_msg" : "85ee6682427872006af1", "mod" : "ASK", "freq" : 433.948, "rssi" : -3.818, "snr" : 28.326, "noise" : -32.144}

you could add them to sdr.py i added them for some acurite sensors that did not have them it looks something like
# connection diagnostics (-M level)
if 'mod' in obj:
    pkt['mod'] = obj.get('mod')
if 'freq' in obj:
    pkt['freq'] = Packet.get_float(obj, 'freq')
if 'rssi' in obj:
    pkt['rssi'] = Packet.get_float(obj, 'rssi')
if 'snr' in obj:
    pkt['snr'] = obj.get('snr')
if 'noise' in obj:
    pkt['noise'] = obj.get('noise')

yes must be in the sensor map

here is what is in my for my acurite atlas [sensor_map] for rssi, freq, snr, noise, protocol
rssi = rssi.494.AcuriteAtlasPacket
freq = freq.494.AcuriteAtlasPacket
snr = snr.494.AcuriteAtlasPacket
noise = noise.494.AcuriteAtlasPacket
protocol = protocol.494.AcuriteAtlasPacket

p q

unread,
Mar 3, 2022, 1:36:39 PM3/3/22
to weewx...@googlegroups.com
Have you considered using Python's JSON function to put the whole thing into a dictionary so there's no need for all the if statements?

--
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+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/weewx-user/db3dab70-ffa9-412d-8d8b-1ddddd8dbddcn%40googlegroups.com.

an oldman

unread,
Mar 3, 2022, 2:25:55 PM3/3/22
to weewx-user
it's matthewwall weewx-sdr driver
i just copied and pasted the parts i needed

f4n...@gmail.com

unread,
Mar 10, 2022, 2:16:19 AM3/10/22
to weewx-user
Thanks I will definitely try it out. 

In the meantime I discovered, in an other weewx instance where the WH65 is the secondary/extra sensor, which sends 3 to 4 packets per minute, that the plots daily to monthly only contain the current wind gust after each 60 seconds, while the statistics sucessfully keep the max gust of the full minute. (as shown in my other thread)

I'm using soilMoist for that sensor and aggregate type = max is already set for weekly and mothly in skin.conf. Is there anything else I could try to fix this?

Reply all
Reply to author
Forward
0 new messages