Okay, now I'm beginning to understand a little bit more, I think. The meters
do indeed change their transmission frequency. To confirm this is what I was seeing, I manually ran each frequency for two minutes (to hopefully eliminate any issues with the hopping code, if any) via calls such as the following:
$ rtl_433 -M level -T 120 -f 911M -s 2048k -F kv -F json:log.911.json -v -S known
Grepping through the output of manually sweeping from 910MHz to 917MHz, I see the following for the gas meter:
$ grep '1519177' log.91*.json
log.911.json:{"time" : "2023-04-21 15:48:55", "model" : "ERT-SCM", "id" : 1519177, "physical_tamper" : 1, "ert_type" : 12, "encoder_tamper" : 0, "consumption_data" : 21478, "mic" : "CRC", "mod" : "ASK", "freq" : 910.639, "rssi" : -0.115, "snr" : 23.704, "noise" : -23.819}
log.911.json:{"time" : "2023-04-21 15:49:10", "model" : "ERT-SCM", "id" : 1519177, "physical_tamper" : 1, "ert_type" : 12, "encoder_tamper" : 0, "consumption_data" : 21478, "mic" : "CRC", "mod" : "ASK", "freq" : 910.156, "rssi" : -4.729, "snr" : 19.634, "noise" : -24.363}
log.911.json:{"time" : "2023-04-21 15:49:56", "model" : "ERT-SCM", "id" : 1519177, "physical_tamper" : 1, "ert_type" : 12, "encoder_tamper" : 0, "consumption_data" : 21478, "mic" : "CRC", "mod" : "ASK", "freq" : 911.383, "rssi" : -0.121, "snr" : 22.628, "noise" : -22.749}
log.912.json:{"time" : "2023-04-21 15:32:25", "model" : "ERT-SCM", "id" : 1519177, "physical_tamper" : 1, "ert_type" : 12, "encoder_tamper" : 0, "consumption_data" : 21478, "mic" : "CRC", "mod" : "ASK", "freq" : 911.857, "rssi" : -0.120, "snr" : 22.886, "noise" : -23.006}
log.912.json:{"time" : "2023-04-21 15:32:56", "model" : "ERT-SCM", "id" : 1519177, "physical_tamper" : 1, "ert_type" : 12, "encoder_tamper" : 0, "consumption_data" : 21478, "mic" : "CRC", "mod" : "ASK", "freq" : 911.657, "rssi" : -0.111, "snr" : 21.863, "noise" : -21.974}
log.912.json:{"time" : "2023-04-21 15:33:11", "model" : "ERT-SCM", "id" : 1519177, "physical_tamper" : 1, "ert_type" : 12, "encoder_tamper" : 0, "consumption_data" : 21478, "mic" : "CRC", "mod" : "ASK", "freq" : 912.598, "rssi" : -0.139, "snr" : 23.432, "noise" : -23.571}
log.912.json:{"time" : "2023-04-21 15:33:25", "model" : "ERT-SCM", "id" : 1519177, "physical_tamper" : 1, "ert_type" : 12, "encoder_tamper" : 0, "consumption_data" : 21478, "mic" : "CRC", "mod" : "ASK", "freq" : 911.283, "rssi" : -0.116, "snr" : 23.108, "noise" : -23.223}
log.913.json:{"time" : "2023-04-21 15:34:41", "model" : "ERT-SCM", "id" : 1519177, "physical_tamper" : 1, "ert_type" : 12, "encoder_tamper" : 0, "consumption_data" : 21478, "mic" : "CRC", "mod" : "ASK", "freq" : 913.181, "rssi" : -0.137, "snr" : 24.298, "noise" : -24.436}
log.913.json:{"time" : "2023-04-21 15:35:55", "model" : "ERT-SCM", "id" : 1519177, "physical_tamper" : 1, "ert_type" : 12, "encoder_tamper" : 0, "consumption_data" : 21478, "mic" : "CRC", "mod" : "ASK", "freq" : 913.751, "rssi" : -0.198, "snr" : 22.551, "noise" : -22.749}
log.914.json:{"time" : "2023-04-21 15:38:10", "model" : "ERT-SCM", "id" : 1519177, "physical_tamper" : 1, "ert_type" : 12, "encoder_tamper" : 0, "consumption_data" : 21478, "mic" : "CRC", "mod" : "ASK", "freq" : 914.422, "rssi" : -0.132, "snr" : 21.444, "noise" : -21.575}
log.914.json:{"time" : "2023-04-21 15:38:40", "model" : "ERT-SCM", "id" : 1519177, "physical_tamper" : 1, "ert_type" : 12, "encoder_tamper" : 0, "consumption_data" : 21478, "mic" : "CRC", "mod" : "ASK", "freq" : 914.630, "rssi" : -0.114, "snr" : 24.107, "noise" : -24.220}
log.914.json:{"time" : "2023-04-21 15:38:56", "model" : "ERT-SCM", "id" : 1519177, "physical_tamper" : 1, "ert_type" : 12, "encoder_tamper" : 0, "consumption_data" : 21478, "mic" : "CRC", "mod" : "ASK", "freq" : 913.697, "rssi" : -0.116, "snr" : 20.210, "noise" : -20.326}
log.915.json:{"time" : "2023-04-21 15:41:10", "model" : "ERT-SCM", "id" : 1519177, "physical_tamper" : 1, "ert_type" : 12, "encoder_tamper" : 0, "consumption_data" : 21478, "mic" : "CRC", "mod" : "ASK", "freq" : 914.266, "rssi" : -0.106, "snr" : 22.643, "noise" : -22.749}
And the following for the electric:
$ grep -E '1552329929' log.91*.json
log.911.json:{"time" : "2023-04-21 15:49:32", "model" : "SCMplus", "id" : 1552329929, "ProtocolID" : "0x1E", "EndpointType" : "0x07", "EndpointID" : 1552329929, "Consumption" : 924355, "Tamper" : "0x0200", "PacketCRC" : "0xFE53", "MeterType" : "Electric", "mic" : "CRC", "mod" : "ASK", "freq" : 911.622, "rssi" : -0.110, "snr" : 22.396, "noise" : -22.506}
log.912.json:{"time" : "2023-04-21 15:33:27", "model" : "SCMplus", "id" : 1552329929, "ProtocolID" : "0x1E", "EndpointType" : "0x07", "EndpointID" : 1552329929, "Consumption" : 924410, "Tamper" : "0x0200", "PacketCRC" : "0xA567", "MeterType" : "Electric", "mic" : "CRC", "mod" : "ASK", "freq" : 912.029, "rssi" : -0.104, "snr" : 22.645, "noise" : -22.749}
log.913.json:{"time" : "2023-04-21 15:34:31", "model" : "SCMplus", "id" : 1552329929, "ProtocolID" : "0x1E", "EndpointType" : "0x07", "EndpointID" : 1552329929, "Consumption" : 924410, "Tamper" : "0x0200", "PacketCRC" : "0xA567", "MeterType" : "Electric", "mic" : "CRC", "mod" : "ASK", "freq" : 913.212, "rssi" : -0.119, "snr" : 21.456, "noise" : -21.575}
log.916.json:{"time" : "2023-04-21 15:42:01", "model" : "SCMplus", "id" : 1552329929, "ProtocolID" : "0x1E", "EndpointType" : "0x07", "EndpointID" : 1552329929, "Consumption" : 924382, "Tamper" : "0x0200", "PacketCRC" : "0xFF61", "MeterType" : "Electric", "mic" : "CRC", "mod" : "ASK", "freq" : 916.216, "rssi" : -0.103, "snr" : 21.667, "noise" : -21.770}
log.917.json:{"time" : "2023-04-21 15:44:01", "model" : "SCMplus", "id" : 1552329929, "ProtocolID" : "0x1E", "EndpointType" : "0x07", "EndpointID" : 1552329929, "Consumption" : 924373, "Tamper" : "0x0200", "PacketCRC" : "0x0F90", "MeterType" : "Electric", "mic" : "CRC", "mod" : "ASK", "freq" : 917.211, "rssi" : -0.111, "snr" : 22.077, "noise" : -22.188}
So the frequencies definitely do move around, which explains why I was sometimes seeing them and sometimes not at certain frequencies.
I think I would consider this solved as the original mystery now makes sense.
As a follow up question, is there any "rule of thumb" for picking the best sampling rate for a given situation? I have just sort of been picking it at random, currently.