PDA

View Full Version : [VU+ Ultimo4K] ABM scans after running DVB-T frequency finder.



ccs
24-06-21, 12:18
You really should start another thread as this is not a Py3 problem.

DVB standard says all sections of "SDT actual" must be transmitted at least once every 2 seconds, and, all sections of "SDT other" must be transmitted at least once every 15 seconds, so a 20 second timeout is good for any mux that complies with the standard, but obviously yours doesn't, or is broken.

Please get a debug log of the scan with extra debug activated.

End of original thread - https://www.world-of-satellite.com/showthread.php?64435-Testers-required-for-OpenViX-Python-3-images&p=514976&viewfull=1#post514976


Running DVB-T frequency finder (UK freeview) on Python P2 and P3 images produces different terrestrial_finder.xml files - the same expected data, but in a different order.

This means that the mux chosen by ABM to run a "scan" is different from P2 and doesn't (for some unknown reason) find the correct number of channels in P3.

(If the same mux is forced onto P2, it fails in the same way.)

So the mux chosen is critical, increasing the SDT_TIMEOUT in dvbscanner.py fixes it, but breaks the rules.

Here are 3 sets of logs, a working mux, a non working mux, and a non working mux which works when the timeout is increased....

ccs
24-06-21, 15:32
DVBsnoops for working and non working mux's...

ccs
25-06-21, 10:47
Using a "problem" mux in terrestrial_finder.xml, with an SDT timeout of 20 seconds in dvbscanner.py, 6 out of 8 mux's are missing.


[ABM-DvbScanner] Timed out reading SDT
[ABM-DvbScanner] Cannot fetch SDT for the following TSID_ONID list: ['104f:233a', '201b:233a', '3006:233a', '4089:233a', '5040:233a', '6040:233a']

With an SDT timeout of 40 seconds, 4 out of 8 mux's are missing.


[ABM-DvbScanner] Timed out reading SDT
[ABM-DvbScanner] Cannot fetch SDT for the following TSID_ONID list: ['5040:233a', '6040:233a', '3006:233a', '4089:233a'

With an SDT timeout of 60 seconds, 3 out of 8 mux's are missing.


[ABM-DvbScanner] Timed out reading SDT
[ABM-DvbScanner] Cannot fetch SDT for the following TSID_ONID list: ['3006:233a', '4089:233a', '5040:233a']

With an SDT timeout of 120 seconds, all 8 mux's are found.

Looks to me like "SDT Other" come through every 15 seconds or so, containing details for just one mux.

Huevos
25-06-21, 12:49
So in your "long" timeout log, 11:36:16.5068 to 11:36:18.7158 is your SDT read time.

ccs
25-06-21, 12:55
So in your "long" timeout log, 11:36:16.5068 to 11:36:18.7158 is your SDT read time.

I've not looked at the debug logs, all I noticed was that with an increased timeout of 120, an abm scan on a "suspect" mux took much longer to finish, probably about 80 seconds, compared with 30 seconds with a "good" mux running with a 20 second default timeout.

A "good" mux scan with a 120 second timeout still ran for about 30 seconds, the same as with the default of 20.

Huevos
25-06-21, 14:35
Well for sure in you your log the SDT read took 2 seconds.

ccs
25-06-21, 15:07
Well for sure in you your log the SDT read took 2 seconds.

The abm scan started at 11:35:04, and finished at 11:36:19, a bit longer than 2 seconds.

It "normally" takes around 30 seconds, what it does during that time, I haven't a clue.

This is where it slows down.....



11:35:14.6136 [ABM-DvbScanner] Reading services (LCN)...
11:35:16.4187 [ABM-DvbScanner] SDT raw section header {'table_id': 66, 'transport_stream_id': 32769, 'version_number': 0, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:16.4190 [ABM-DvbScanner] SDT raw section content [{'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 32833, 'service_type': 1, 'free_ca': 0, 'service_name': "That's TV", 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 33472, 'service_type': 1, 'free_ca': 0, 'service_name': 'Tiny Pop', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 33664, 'service_type': 1, 'free_ca': 0, 'service_name': 'GREAT! movies +1', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 33984, 'service_type': 1, 'free_ca': 0, 'service_name': 'GREAT! tv', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 34048, 'service_type': 1, 'free_ca': 0, 'service_name': 'GREAT! movies classic', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 34112, 'service_type': 1, 'free_ca': 0, 'service_name': 'Ideal Extra', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}]
11:35:17.3219 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 24640, 'version_number': 1, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 1, 'original_network_id': 9018}


Chopped a big chunk out.


11:36:16.5068 [ABM-DvbScanner] SDT raw section header {'table_id': 66, 'transport_stream_id': 32769, 'version_number': 0, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:36:16.5071 [ABM-DvbScanner] SDT raw section content [{'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 32833, 'service_type': 1, 'free_ca': 0, 'service_name': "That's TV", 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 33472, 'service_type': 1, 'free_ca': 0, 'service_name': 'Tiny Pop', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 33664, 'service_type': 1, 'free_ca': 0, 'service_name': 'GREAT! movies +1', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 33984, 'service_type': 1, 'free_ca': 0, 'service_name': 'GREAT! tv', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 34048, 'service_type': 1, 'free_ca': 0, 'service_name': 'GREAT! movies classic', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 34112, 'service_type': 1, 'free_ca': 0, 'service_name': 'Ideal Extra', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}]
11:36:18.5128 [ABM-DvbScanner] SDT raw section header {'table_id': 66, 'transport_stream_id': 32769, 'version_number': 0, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:36:18.5131 [ABM-DvbScanner] SDT raw section content [{'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 32833, 'service_type': 1, 'free_ca': 0, 'service_name': "That's TV", 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 33472, 'service_type': 1, 'free_ca': 0, 'service_name': 'Tiny Pop', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 33664, 'service_type': 1, 'free_ca': 0, 'service_name': 'GREAT! movies +1', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 33984, 'service_type': 1, 'free_ca': 0, 'service_name': 'GREAT! tv', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 34048, 'service_type': 1, 'free_ca': 0, 'service_name': 'GREAT! movies classic', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 32769, 'original_network_id': 9018, 'service_id': 34112, 'service_type': 1, 'free_ca': 0, 'service_name': 'Ideal Extra', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}]
11:36:18.7140 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 16521, 'version_number': 24, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
nknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 20544, 'original_network_id': 9018, 'service_id': 24128, 'service_type': 1, 'free_ca': 0, 'service_name': 'ADULT Xpanded TV', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 20544, 'original_network_id': 9018, 'service_id': 24192, 'service_type': 1, 'free_ca': 0, 'service_name': 'Together TV', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 20544, 'original_network_id': 9018, 'service_id': 24448, 'service_type': 1, 'free_ca': 0, 'service_name': 'Gems TV', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 20544, 'original_network_id': 9018, 'service_id': 24500, 'service_type': 1, 'free_ca': 0, 'service_name': '697', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}]



SDT raw section much quicker in the working mux...


11:26:32.2600 [ABM-DvbScanner] Reading services (LCN)...
11:26:33.7647 [ABM-DvbScanner] SDT raw section header {'table_id': 66, 'transport_stream_id': 8219, 'version_number': 14, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:26:33.7652 [ABM-DvbScanner] SDT raw section content [{'transport_stream_id': 8219, 'original_network_id': 9018, 'service_id': 8283, 'service_type': 1, 'free_ca': 0, 'service_name': 'ITV', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 8219, 'original_network_id': 9018, 'service_id': 8294, 'service_type': 1, 'free_ca': 0, 'service_name': 'ITV3', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 8219, 'original_network_id': 9018, 'service_id': 8325, 'service_type': 1, 'free_ca': 0, 'service_name': 'ITV2', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 8219, 'original_network_id': 9018, 'service_id': 8330, 'service_type': 1, 'free_ca': 0, 'service_name': 'ITV4', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 8219, 'original_network_id': 9018, 'service_id': 8381, 'service_type': 1, 'free_ca': 0, 'service_name': 'ITV +1', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 8219, 'original_network_id': 9018, 'service_id': 8384, 'service_type': 1, 'free_ca': 0, 'service_name': 'Channel 4', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 8219, 'original_network_id': 9018, 'service_id': 8385, 'service_type': 1, 'free_ca': 0, 'service_name': 'Film4', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 8219, 'original_network_id': 9018, 'service_id': 8442, 'service_type': 1, 'free_ca': 0, 'service_name': 'More 4', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 8219, 'original_network_id': 9018, 'service_id': 8448, 'service_type': 1, 'free_ca': 0, 'service_name': 'E4', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id':

Chopped out

ogical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 4169, 'original_network_id': 9018, 'service_id': 5824, 'service_type': 2, 'free_ca': 0, 'service_name': 'BBC Radio 4 Ex', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 4169, 'original_network_id': 9018, 'service_id': 5888, 'service_type': 2, 'free_ca': 0, 'service_name': 'BBC R1X', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 4169, 'original_network_id': 9018, 'service_id': 5952, 'service_type': 2, 'free_ca': 0, 'service_name': 'BBC Asian Net.', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 4169, 'original_network_id': 9018, 'service_id': 6016, 'service_type': 2, 'free_ca': 0, 'service_name': 'BBC World Sv.', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 4169, 'original_network_id': 9018, 'service_id': 6153, 'service_type': 2, 'free_ca': 0, 'service_name': 'BBC Newcastle', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 4169, 'original_network_id': 9018, 'service_id': 6217, 'service_type': 2, 'free_ca': 0, 'service_name': 'BBC Cumbria', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 4169, 'original_network_id': 9018, 'service_id': 6281, 'service_type': 2, 'free_ca': 0, 'service_name': 'BBC Tees', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 4169, 'original_network_id': 9018, 'service_id': 6282, 'service_type': 2, 'free_ca': 0, 'service_name': 'BBC York', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 4169, 'original_network_id': 9018, 'service_id': 6720, 'service_type': 2, 'free_ca': 0, 'service_name': 'BBC Radio 1', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 4169, 'original_network_id': 9018, 'service_id': 6784, 'service_type': 2, 'free_ca': 0, 'service_name': 'BBC Radio 2', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 4169, 'original_network_id': 9018, 'service_id': 6848, 'service_type': 2, 'free_ca': 0, 'service_name': 'BBC Radio 3', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 4169, 'original_network_id': 9018, 'service_id': 6912, 'service_type': 2, 'free_ca': 0, 'service_name': 'BBC Radio 4', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 4169, 'original_network_id': 9018, 'service_id': 7168, 'service_type': 1, 'free_ca': 0, 'service_name': 'BBC RB 1', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}]
11:26:41.9073 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 24640, 'version_number': 1, 'current_next_indicator': 1, 'section_number': 1, 'last_section_number': 1, 'original_network_id': 9018}
11:26:41.9077 [ABM-DvbScanner] SDT raw section content [{'transport_stream_id': 24640, 'original_network_id': 9018, 'service_id': 28224, 'service_type': 1, 'free_ca': 0, 'service_name': 'TalkingPictures TV', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 24640, 'original_network_id': 9018, 'service_id': 28256, 'service_type': 1, 'free_ca': 0, 'service_name': 'QVC Style', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 24640, 'original_network_id': 9018, 'service_id': 28288, 'service_type': 1, 'free_ca': 0, 'service_name': 'QVC Beauty', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 24640, 'original_network_id': 9018, 'service_id': 28520, 'service_type': 1, 'free_ca': 0, 'service_name': '698', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}]
11:26:42.1084 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 16521, 'version_number': 24, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:26:42.1088 [ABM-DvbScanner] SDT raw section content [{'transport_stream_id': 16521, 'original_network_id': 9018, 'service_id': 17472, 'service_type': 25, 'free_ca': 0, 'service_name': 'BBC TWO HD', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 16521, 'original_network_id': 9018, 'service_id': 17540, 'service_type': 25, 'free_ca': 0, 'service_name': 'BBC ONE HD', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 16521, 'original_network_id': 9018, 'service_id': 17609, 'service_type': 25, 'free_ca': 0, 'service_name': 'ITV HD', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 16521, 'original_network_id': 9018, 'service_id': 17664, 'service_type': 25, 'free_ca': 0, 'service_name': 'Channel 4 HD', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 16521, 'original_network_id': 9018, 'service_id': 17728, 'service_type': 25, 'free_ca': 0, 'service_name': 'Channel 5 HD', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 16521, 'original_network_id': 9018, 'service_id': 18112, 'service_type': 25, 'free_ca': 0, 'service_name': 'CBBC HD', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}, {'transport_stream_id': 16521, 'original_network_id': 9018, 'service_id': 20160, 'service_type': 22, 'free_ca': 0, 'service_name': 'TBN UK', 'provider_name': 'Unknown', 'logical_channel_number': 0, 'bouquets_id': 0, 'service_group_id': 0, 'category_id': 0, 'region_code': 0, 'city_code': 0}]

ccs
25-06-21, 15:57
Debug log entries with SDT raw section header only appear for slightly less than 20 seconds in the "failing" mux, timeout=20.

Debug log entries with SDT raw section header appear for 62 seconds in the "failing" mux, timeout=120, all channels found.

ccs
25-06-21, 16:38
FWIW, SDT raw section header entries appear for 9 seconds with the "working" mux.

Huevos
25-06-21, 17:07
Debug log entries with SDT raw section header only appear for slightly less than 20 seconds in the "failing" mux, timeout=20.

Debug log entries with SDT raw section header appear for 62 seconds in the "failing" mux, timeout=120, all channels found.
Yes, 1 minute and 2 seconds, not 2 seconds.

Huevos
25-06-21, 17:21
11:35:17.3219 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 24640, 'version_number': 1, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 1, 'original_network_id': 9018}
11:35:21.1339 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 8210, 'version_number': 10, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:25.1463 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 4175, 'version_number': 0, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:27.5546 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 4167, 'version_number': 2, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:30.5639 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 12294, 'version_number': 19, 'current_next_indicator': 1, 'section_number': 1, 'last_section_number': 1, 'original_network_id': 9018}
11:35:34.7770 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 8193, 'version_number': 10, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:37.3853 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 40960, 'version_number': 28, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:44.1057 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 4169, 'version_number': 10, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:50.9263 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 8219, 'version_number': 14, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:52.7325 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 4166, 'version_number': 1, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:54.1371 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 24640, 'version_number': 1, 'current_next_indicator': 1, 'section_number': 1, 'last_section_number': 1, 'original_network_id': 9018}
11:35:55.7425 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 8217, 'version_number': 2, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:36:00.5572 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 8200, 'version_number': 1, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:36:07.7786 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 12294, 'version_number': 19, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 1, 'original_network_id': 9018}
11:36:13.1964 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 4170, 'version_number': 6, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:36:18.7140 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 16521, 'version_number': 24, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:36:18.7149 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 20544, 'version_number': 24, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}


What are all those muxes?

Can you post your Py3 finder xml again.

Huevos
25-06-21, 17:29
Here is the "good" transponder:


11:26:34.0665 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 4166, 'version_number': 1, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:26:34.5691 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 20544, 'version_number': 24, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:26:35.0717 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 40960, 'version_number': 28, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:26:35.9764 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 12294, 'version_number': 19, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 1, 'original_network_id': 9018}
11:26:36.2790 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 4175, 'version_number': 0, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:26:36.8820 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 24640, 'version_number': 1, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 1, 'original_network_id': 9018}
11:26:37.2844 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 8200, 'version_number': 1, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:26:37.9882 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 4167, 'version_number': 2, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:26:37.9897 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 4170, 'version_number': 6, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:26:38.7929 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 32769, 'version_number': 0, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:26:40.9997 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 12294, 'version_number': 19, 'current_next_indicator': 1, 'section_number': 1, 'last_section_number': 1, 'original_network_id': 9018}
11:26:41.2011 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 8193, 'version_number': 10, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:26:41.3024 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 8210, 'version_number': 10, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:26:41.8058 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 4169, 'version_number': 10, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:26:41.9073 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 24640, 'version_number': 1, 'current_next_indicator': 1, 'section_number': 1, 'last_section_number': 1, 'original_network_id': 9018}
11:26:42.1084 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 16521, 'version_number': 24, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}


Only takes 8 seconds, and one mux less?

Doesn't look like ABM is doing anything wrong. The repeat interval of the table is broken.

ccs
25-06-21, 18:34
11:35:17.3219 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 24640, 'version_number': 1, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 1, 'original_network_id': 9018}
11:35:21.1339 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 8210, 'version_number': 10, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:25.1463 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 4175, 'version_number': 0, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:27.5546 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 4167, 'version_number': 2, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:30.5639 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 12294, 'version_number': 19, 'current_next_indicator': 1, 'section_number': 1, 'last_section_number': 1, 'original_network_id': 9018}
11:35:34.7770 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 8193, 'version_number': 10, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:37.3853 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 40960, 'version_number': 28, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:44.1057 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 4169, 'version_number': 10, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:50.9263 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 8219, 'version_number': 14, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:52.7325 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 4166, 'version_number': 1, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:35:54.1371 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 24640, 'version_number': 1, 'current_next_indicator': 1, 'section_number': 1, 'last_section_number': 1, 'original_network_id': 9018}
11:35:55.7425 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 8217, 'version_number': 2, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:36:00.5572 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 8200, 'version_number': 1, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:36:07.7786 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 12294, 'version_number': 19, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 1, 'original_network_id': 9018}
11:36:13.1964 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 4170, 'version_number': 6, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:36:18.7140 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 16521, 'version_number': 24, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}
11:36:18.7149 [ABM-DvbScanner] SDT raw section header {'table_id': 70, 'transport_stream_id': 20544, 'version_number': 24, 'current_next_indicator': 1, 'section_number': 0, 'last_section_number': 0, 'original_network_id': 9018}


What are all those muxes?

Can you post your Py3 finder xml again.

https://www.world-of-satellite.com/showthread.php?64435-Testers-required-for-OpenViX-Python-3-images&p=514826&viewfull=1#post514826

ccs
25-06-21, 19:08
Ignore the last post, I'm rerunning frequency finder again on P3......

ccs
26-06-21, 12:10
DVBsnoop with (SDT) - other transport stream and (SDT) - actual transport stream packets on the "problem" mux.

Huevos
26-06-21, 14:10
You've already found the problem. The repeat interval of the table is non-standard.

Where do you want to go from here?

ccs
26-06-21, 14:28
You've already found the problem. The repeat interval of the table is non-standard.

Where do you want to go from here?

It's entirely up to you, it's easy for me to use a "working" mux, maybe not so simple for others who hit the problem.

Increasing the timeout works, doesn't slow down a "working" mux, but is probably a hack.

I still don't understand why P2 and P3 produce different xml files, maybe choosing the lowest frequency rather than the highest might reduce the chances of a broken mux?

Huevos
26-06-21, 15:32
So the problem is the SDT other is incomplete on some providers... so we use 20 seconds because that complies with the standard plus some spare time. If we change the timeout those providers would take a lot longer for no benefit.

So the problem is how you can get an increased timeout with out affecting the performance for other users/providers.

ccs
26-06-21, 15:48
So the problem is the SDT other is incomplete on some providers... so we use 20 seconds because that complies with the standard plus some spare time. If we change the timeout those providers would take a lot longer for no benefit.

So the problem is how you can get an increased timeout with out affecting the performance for other users/providers.

I'm losing the plot again, increasing the timeout has one benefit for "faulty" mux's - they scan ok.

"Working" mux's don't take any longer than they ever did.

I think the best solution is to do nothing.

Huevos
26-06-21, 20:45
Some muxes are incomplete, so they will always run to the timeout.

That is not the case with either of your examples, but is with some other providers.

ccs
26-06-21, 20:48
Some muxes are incomplete, so they will always run to the timeout.

That is not the case with either of your examples, but is with some other providers.

Do you mean providers other than freeview?

The other possible solution which I've mentioned a few times now, is for DVB-T frequency finder to select the lowest frequency mux, rather than the highest.

bbc1 sd tends to broadcast on the low frequencies.

Huevos
26-06-21, 20:50
Yes, the SDT timeout is used by all providers.

ccs
26-06-21, 20:54
.... edited my previous post.

Huevos
26-06-21, 21:12
The other possible solution which I've mentioned a few times now, is for DVB-T frequency finder to select the lowest frequency mux, rather than the highest.That is a hack, because...


We don't know for sure BBC mux will always be on a lower frequency (now or at any point in the future).
We don't know if BBC mux might have faulty tables at some point in the future.
We are no longer choosing the strongest mux so may choose a mux that belongs to another region.

ccs
26-06-21, 21:16
That is a hack, because...


We don't know for sure BBC mux will always be on a lower frequency (now or at any point in the future).
We don't know if BBC mux might have faulty tables at some point in the future.
We are no longer choosing the strongest mux so may choose a mux that belongs to another region.


It's no more of a hack than choosing the highest frequency.

I wish I'd included "with the highest signal quality" in that last post, I have every time before.

So, the highest frequency doesn't work for me, the lowest frequency does, but can't possibly be selected because ...

1) it might not be the bbc mux in the future
2) it might have faulty tables in the future
3) I never suggested using a weaker mux in the first place.

Let's forget I ever started this thread.

Huevos
27-06-21, 08:23
It's no more of a hack than choosing the highest frequency. The sort is by SNR, not frequency. There is no logic in the code to force to the highest frequency.
https://github.com/oe-alliance/AutoBouquetsMaker/blob/master/AutoBouquetsMaker/src/scanner/frequencyfinder.py#L621

As the SNR is the same for all members of the dict the output will remain the same as the input. Please remember Python dicts are not ordered, so any order is possible for the input.

You could see the order of the input like this...

def iterateUniqueTranspondersBySignalQuality(self):
# returns an iterator list for self.transponders_unique in SignalQuality order ascending
sort_list = [(x[0], x[1]["signalQuality"]) for x in list(self.transponders_unique.items())]
return [x[0] for x in sorted(sort_list, key=self.sortitem]

def sortitem(self, x):
print(self.transponders_unique[x[0]])
return x[1]

ccs
27-06-21, 09:03
I'd seen this line which I assumed was called at some point to put the list in frequency order, low to high, so the mux eventually chosen would always be the highest frequency.

https://github.com/oe-alliance/AutoBouquetsMaker/blob/master/AutoBouquetsMaker/src/scanner/frequencyfinder.py#L614


def iterateUniqueTranspondersByFrequency(self):
# returns an iterator list for self.transponders_unique in frequency order ascending
sort_list = [(x[0], x[1]["frequency"]) for x in list(self.transponders_unique.items())]
return [x[0] for x in sorted(sort_list, key=lambda listItem: listItem[1])]

ccs
27-06-21, 11:55
The sort is by SNR, not frequency.

SNR wouldn't be an issue, as the "problem" mux SNR is lower than the others, but doesn't it use signal quality, which is the same for all mux's (which becomes a subtle issue when sorting).

ccs
27-06-21, 13:54
You could see the order of the input like this...

def iterateUniqueTranspondersBySignalQuality(self):
# returns an iterator list for self.transponders_unique in SignalQuality order ascending
sort_list = [(x[0], x[1]["signalQuality"]) for x in list(self.transponders_unique.items())]
return [x[0] for x in sorted(sort_list, key=self.sortitem)]

def sortitem(self, x):
print(self.transponders_unique[x[0]])
return x[1]

Thanks, I managed to get that working, handy as it happens.:)

This is what frequency finder comes up with, transponders in signal quality order, low to high, so the last system 0 one is selected.


12:31:21.7597 {'frequency': 482000000, 'tsid': 4175, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
12:31:21.7598 {'frequency': 490000000, 'tsid': 20544, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
12:31:21.7599 {'frequency': 506000000, 'tsid': 8219, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
12:31:21.7600 {'frequency': 514000000, 'tsid': 24640, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
12:31:21.7600 {'frequency': 530000000, 'tsid': 16521, 'onid': 9018, 'system': 1, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': True}
12:31:21.7602 {'frequency': 545833000, 'tsid': 12294, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
12:31:21.7602 {'frequency': 562000000, 'tsid': 32769, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
12:31:21.7603 {'frequency': 746000000, 'tsid': 40960, 'onid': 9018, 'system': 1, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'Com7 National', 'custom_transponder_needed': True}


If I reverse the signal quality sort order, so highest to lowest, I get this (because P3 maintains sort stability, good old google :p)



13:04:32.1077 {'frequency': 482000000, 'tsid': 4175, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:04:32.1078 {'frequency': 490000000, 'tsid': 20544, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:04:32.1078 {'frequency': 506000000, 'tsid': 8219, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:04:32.1079 {'frequency': 514000000, 'tsid': 24640, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:04:32.1080 {'frequency': 530000000, 'tsid': 16521, 'onid': 9018, 'system': 1, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': True}
13:04:32.1081 {'frequency': 545833000, 'tsid': 12294, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:04:32.1081 {'frequency': 562000000, 'tsid': 32769, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:04:32.1082 {'frequency': 746000000, 'tsid': 40960, 'onid': 9018, 'system': 1, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'Com7 National', 'custom_transponder_needed': True}

I can then select the first system 0 transponder, and everything works. Two simple changes to frequencyfinder.py.

So the highest signal quality and lowest frequency.

I'm sure you'll be able to pick holes in it.


for tsidOnidKey in self.iterateUniqueTranspondersBySignalQuality()[::-1]: # iterate in reverse order and select the first system 0 transponder

for tsidOnidKey in self.iterateUniqueTranspondersBySignalQuality(): # iterate in order and select the first system 0 transponder


def iterateUniqueTranspondersBySignalQuality(self):
# returns an iterator list for self.transponders_unique in SignalQuality order ascending
sort_list = [(x[0], x[1]["signalQuality"]) for x in list(self.transponders_unique.items())]
return [x[0] for x in sorted(sort_list, key=lambda listItem: listItem[1])]

def iterateUniqueTranspondersBySignalQuality(self):
# returns an iterator list for self.transponders_unique in SignalQuality order descending
sort_list = [(x[0], x[1]["signalQuality"]) for x in list(self.transponders_unique.items())]
return [x[0] for x in sorted(sort_list, key=lambda listItem: listItem[1], reverse=True)]

Huevos
27-06-21, 14:29
Snr and signal quality same thing.

ccs
27-06-21, 14:31
Snr and signal quality same thing.

OK, but I see a lower snr on one of the mux's (the "wrong" mux as it happens), but frequency finder comes up with the same value for all of them.

Huevos
27-06-21, 14:43
Ok. I don't get it. And in your xml file shows 65335, I.e. a 16 bit integer maxed out. But the infobar shows 50%?

ccs
27-06-21, 14:50
Ok. I don't get it. And in your xml file shows 65335, I.e. a 16 bit integer maxed out. But the infobar shows 50%?

Yes, the same on my ET10K/P2, all 65335, but snr's vary.

I have noticed one value lower than 65335, just once in about 100 creations of the file.

Huevos
27-06-21, 14:57
I'll look at this later. Probably something to do with Vu not having snrdb available.

ccs
28-06-21, 10:36
<e2frontendstatus>
<e2snrdb>15.06 dB</e2snrdb>
<e2snr>51 %</e2snr>
<e2ber>0</e2ber>
<e2acg>99 %</e2acg>
</e2frontendstatus>

Huevos
28-06-21, 10:50
I'd seen this line which I assumed was called at some point to put the list in frequency order, low to high, so the mux eventually chosen would always be the highest frequency.

https://github.com/oe-alliance/AutoBouquetsMaker/blob/master/AutoBouquetsMaker/src/scanner/frequencyfinder.py#L614


def iterateUniqueTranspondersByFrequency(self):
# returns an iterator list for self.transponders_unique in frequency order ascending
sort_list = [(x[0], x[1]["frequency"]) for x in list(self.transponders_unique.items())]
return [x[0] for x in sorted(sort_list, key=lambda listItem: listItem[1])]
That just sets the order of the custom transponders in the xml file.

<customtransponders>
<!-- customtransponder key="custom" frequency="482000000" transport_stream_id="104f" system="0"/ --><!-- original_network_id="233a" signalQuality="65535" channel="22" -->
<!-- customtransponder key="custom" frequency="490000000" transport_stream_id="5040" system="0"/ --><!-- original_network_id="233a" signalQuality="65535" channel="23" -->
<!-- customtransponder key="custom" frequency="506000000" transport_stream_id="201b" system="0"/ --><!-- original_network_id="233a" signalQuality="65535" channel="25" -->
<!-- customtransponder key="custom" frequency="514000000" transport_stream_id="6040" system="0"/ --><!-- original_network_id="233a" signalQuality="65535" channel="26" -->
<customtransponder key="custom" frequency="530000000" transport_stream_id="4089" system="1"/><!-- original_network_id="233a" signalQuality="65535" channel="28" -->
<!-- customtransponder key="custom" frequency="545833000" transport_stream_id="3006" system="0"/ --><!-- original_network_id="233a" signalQuality="65535" channel="30" -->
<!-- customtransponder key="custom" frequency="562000000" transport_stream_id="8001" system="0"/ --><!-- original_network_id="233a" signalQuality="65535" channel="32" -->
<customtransponder key="custom" frequency="746000000" transport_stream_id="a000" system="1"/><!-- original_network_id="233a" signalQuality="65535" channel="55" -->
</customtransponders>

Huevos
28-06-21, 10:51
<e2frontendstatus>
<e2snrdb>15.06 dB</e2snrdb>
<e2snr>51 %</e2snr>
<e2ber>0</e2ber>
<e2acg>99 %</e2acg>
</e2frontendstatus>

Where is that from?

ccs
28-06-21, 11:02
Where is that from?


http://vuultimo4k/web/signal?AGC=


https://dream.reichholf.net/e2web/

ccs
28-06-21, 11:03
duplicated.

Huevos
28-06-21, 11:16
Thanks, I managed to get that working, handy as it happens.:)

This is what frequency finder comes up with, transponders in signal quality order, low to high, so the last system 0 one is selected.


12:31:21.7597 {'frequency': 482000000, 'tsid': 4175, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
12:31:21.7598 {'frequency': 490000000, 'tsid': 20544, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
12:31:21.7599 {'frequency': 506000000, 'tsid': 8219, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
12:31:21.7600 {'frequency': 514000000, 'tsid': 24640, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
12:31:21.7600 {'frequency': 530000000, 'tsid': 16521, 'onid': 9018, 'system': 1, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': True}
12:31:21.7602 {'frequency': 545833000, 'tsid': 12294, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
12:31:21.7602 {'frequency': 562000000, 'tsid': 32769, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
12:31:21.7603 {'frequency': 746000000, 'tsid': 40960, 'onid': 9018, 'system': 1, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'Com7 National', 'custom_transponder_needed': True}


If I reverse the signal quality sort order, so highest to lowest, I get this (because P3 maintains sort stability, good old google :p)



13:04:32.1077 {'frequency': 482000000, 'tsid': 4175, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:04:32.1078 {'frequency': 490000000, 'tsid': 20544, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:04:32.1078 {'frequency': 506000000, 'tsid': 8219, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:04:32.1079 {'frequency': 514000000, 'tsid': 24640, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:04:32.1080 {'frequency': 530000000, 'tsid': 16521, 'onid': 9018, 'system': 1, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': True}
13:04:32.1081 {'frequency': 545833000, 'tsid': 12294, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:04:32.1081 {'frequency': 562000000, 'tsid': 32769, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:04:32.1082 {'frequency': 746000000, 'tsid': 40960, 'onid': 9018, 'system': 1, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'Com7 National', 'custom_transponder_needed': True}

I can then select the first system 0 transponder, and everything works. Two simple changes to frequencyfinder.py.

So the highest signal quality and lowest frequency.

I'm sure you'll be able to pick holes in it.


for tsidOnidKey in self.iterateUniqueTranspondersBySignalQuality()[::-1]: # iterate in reverse order and select the first system 0 transponder

for tsidOnidKey in self.iterateUniqueTranspondersBySignalQuality(): # iterate in order and select the first system 0 transponder


def iterateUniqueTranspondersBySignalQuality(self):
# returns an iterator list for self.transponders_unique in SignalQuality order ascending
sort_list = [(x[0], x[1]["signalQuality"]) for x in list(self.transponders_unique.items())]
return [x[0] for x in sorted(sort_list, key=lambda listItem: listItem[1])]

def iterateUniqueTranspondersBySignalQuality(self):
# returns an iterator list for self.transponders_unique in SignalQuality order descending
sort_list = [(x[0], x[1]["signalQuality"]) for x in list(self.transponders_unique.items())]
return [x[0] for x in sorted(sort_list, key=lambda listItem: listItem[1], reverse=True)]

So this looks like a complicated way to do this, (not tested):

-sort_list = [(x[0], x[1]["signalQuality"]) for x in list(self.transponders_unique.items())]
+sort_list = [(x[0], (x[1]["signalQuality"], x[1]["frequency"])) for x in list(self.transponders_unique.items())]

But it is a hack, because:

We don't know the BBC mux will always be at a lower frequency.
We don't know the repeat interval of the BBC mux complies with the timeout.


If you want to use logic, you could check the timeout of each SDT.

ccs
28-06-21, 12:05
But it is a hack, because:

We don't know the BBC mux will always be at a lower frequency.
We don't know the repeat interval of the BBC mux complies with the timeout.
But we do know that the highest frequency doesn't work (for me), and the chances of bbc mux's moving I would say are nil.
And if the bbc muxes become non-compliant, nothing will probably work without "hacks".

ccs
28-06-21, 12:06
deleted (site keeps freezing on me).

ccs
28-06-21, 12:11
If you want to use logic, you could check the timeout of each SDT.

Maybe the timeout could be added to the "list", and the sort you posted earlier could include that as well.

ccs
28-06-21, 13:12
So this looks like a complicated way to do this, (not tested):

-sort_list = [(x[0], x[1]["signalQuality"]) for x in list(self.transponders_unique.items())]
+sort_list = [(x[0], (x[1]["signalQuality"], x[1]["frequency"])) for x in list(self.transponders_unique.items())]

I've given it a go, it appears to work as far as it goes, the problem being that all the signalqualities are the same so the list doesn't change.

The last system=0 entry in the list is still selected.

Is the signalquality now high to low in the list?

How does 'Com7 National' get included, it should be there, but has a different network name ??


13:02:01.7877 {'frequency': 482000000, 'tsid': 4175, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:02:01.7878 {'frequency': 490000000, 'tsid': 20544, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:02:01.7879 {'frequency': 506000000, 'tsid': 8219, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:02:01.7880 {'frequency': 514000000, 'tsid': 24640, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:02:01.7880 {'frequency': 530000000, 'tsid': 16521, 'onid': 9018, 'system': 1, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': True}
13:02:01.7881 {'frequency': 545833000, 'tsid': 12294, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:02:01.7882 {'frequency': 562000000, 'tsid': 32769, 'onid': 9018, 'system': 0, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'East Yorks & Lincs', 'custom_transponder_needed': False}
13:02:01.7883 {'frequency': 746000000, 'tsid': 40960, 'onid': 9018, 'system': 1, 'bandwidth': 8, 'signalQuality': 65535, 'network_name': 'Com7 National', 'custom_transponder_needed': True}

Huevos
28-06-21, 19:16
So you want the signal quality low to high and the frequency high to low?


sort_list = [(x[0], (x[1]["signalQuality"], -x[1]["frequency"])) for x in list(self.transponders_unique.items())]

ccs
28-06-21, 19:22
So you want the signal quality low to high and the frequency high to low?


sort_list = [(x[0], (x[1]["signalQuality"], -x[1]["frequency"])) for x in list(self.transponders_unique.items())]

Yes, if you still pick the last system=0 entry in the list.

It's difficult for me to confirm it's working when all the signal qualities are the same, but that looks ok .

I'll have a go tomorrow,

Huevos
28-06-21, 19:24
But looking at the details of the muxes there are lots of examples where the BBC mux is not the lowest frequency.

ccs
28-06-21, 19:35
But looking at the details of the muxes there are lots of examples where the BBC mux is not the lowest frequency.

It always gave may the itv sd mux before, and that works ok, so it's pot luck again.

Huevos
28-06-21, 19:38
Try this...

-signalQuality = self.frontend.readFrontendData(iFrontendInformatio n.signalQuality)
+signalQuality = self.frontend.readFrontendData(iFrontendInformatio n.snrValue)
https://github.com/oe-alliance/AutoBouquetsMaker/blob/master/AutoBouquetsMaker/src/scanner/frequencyfinder.py#L395

ccs
28-06-21, 21:24
Try this...

-signalQuality = self.frontend.readFrontendData(iFrontendInformatio n.signalQuality)
+signalQuality = self.frontend.readFrontendData(iFrontendInformatio n.snrValue)
https://github.com/oe-alliance/AutoBouquetsMaker/blob/master/AutoBouquetsMaker/src/scanner/frequencyfinder.py#L395

Can't see what I've done wrong, but I'm seeing the same signal quality of 65535 in the xml file.

Maybe something to do with this .....


https://github.com/OpenViX/enigma2/blob/f0a0eb0709c0357849702e4451d6fdff28c928a5/lib/dvb/frontend.cpp#L1377

I tried signalQualitydB, but they all ended up with 305419896

ccs
29-06-21, 09:24
I tried signalQualitydB, but they all ended up with 305419896

.... which is 0x12345678.

ccs
30-06-21, 20:08
I managed to work out what's happening after a day+ getting nowhere fast.

It looks like Frequency finder uses the last tuner available (in my case tuner E, a TT3L10 ). This tuner always gives 100% SNR, unlike the BCM3466 which varies +- 50%.

So disabling tuner E forces a BCM3466 to be used, which creates this terrestrial_finder.xml...


<provider>
<name>East Yorks &amp; Lincs terrestrial</name>
<streamtype>dvbt</streamtype>
<protocol>lcn</protocol>
<dvbtconfigs>
<configuration key="custom" frequency="482000000" system="0">East Yorks &amp; Lincs terrestrial</configuration>
</dvbtconfigs>

<customtransponders>
<!-- customtransponder key="custom" frequency="482000000" transport_stream_id="104f" system="0"/ --><!-- original_network_id="233a" signalQuality="33694" channel="22" -->
<!-- customtransponder key="custom" frequency="490000000" transport_stream_id="5040" system="0"/ --><!-- original_network_id="233a" signalQuality="32338" channel="23" -->
<!-- customtransponder key="custom" frequency="506000000" transport_stream_id="201b" system="0"/ --><!-- original_network_id="233a" signalQuality="33355" channel="25" -->
<!-- customtransponder key="custom" frequency="514000000" transport_stream_id="6040" system="0"/ --><!-- original_network_id="233a" signalQuality="32338" channel="26" -->
<customtransponder key="custom" frequency="530000000" transport_stream_id="4089" system="1"/><!-- original_network_id="233a" signalQuality="32677" channel="28" -->
<!-- customtransponder key="custom" frequency="545833000" transport_stream_id="3006" system="0"/ --><!-- original_network_id="233a" signalQuality="30959" channel="30" -->
<!-- customtransponder key="custom" frequency="562000000" transport_stream_id="8001" system="0"/ --><!-- original_network_id="233a" signalQuality="30959" channel="32" -->
<customtransponder key="custom" frequency="746000000" transport_stream_id="a000" system="1"/><!-- original_network_id="233a" signalQuality="26552" channel="55" -->
</customtransponders>

<sections>
<section number="1">Entertainment</section>
<section number="100">High Definition</section>
<section number="201">Children</section>
<section number="230">News</section>
<section number="260">BBC Interactive</section>
<section number="670">Adult</section>
<section number="700">Radio</section>
</sections>

<swapchannels>
<channel number="1" with="101"/> <!-- BBC One HD -->
<channel number="2" with="102"/> <!-- BBC TWO HD -->
<channel number="3" with="103"/> <!-- ITV HD -->
<channel number="4" with="104"/> <!-- Channel 4 HD -->
<channel number="5" with="105"/> <!-- Channel 5 HD -->
<channel number="9" with="106"/> <!-- BBC FOUR HD -->
<channel number="201" with="204"/> <!-- CBBC HD -->
<channel number="202" with="205"/> <!-- CBeebies HD -->
<channel number="231" with="107"/> <!-- BBC NEWS HD -->
</swapchannels>

<servicehacks>
<![CDATA[

tsidonidlist= [
"104f:233a",
"5040:233a",
"201b:233a",
"6040:233a",
"4089:233a",
"3006:233a",
"8001:233a",
"a000:233a",
]

tsidonidkey = "%x:%x" % (service["transport_stream_id"], service["original_network_id"])
if tsidonidkey not in tsidonidlist:
add_audio_channels_to_video_bouquet=True

skip = True

]]>
</servicehacks>
</provider>

The same thing happens on my ET10K, the last is tuner D a SundTek USB DVB-T2 tuner, which again give 100% SNR's.

(No python changes, just made sure the "right" tuner was used.)

abu baniaz
30-06-21, 21:27
Which mast is your aerial pointing to? Would be an idea to update the custom transponders in the ABM file while you investigate this issue?

ccs
30-06-21, 21:29
Which mast is your aerial pointing to? Would be an idea to update the custom transponders in the ABM file while you investigate this issue?

Belmont transmitter, I'm pretty sure the custom transponder does actually work. :)

abu baniaz
30-06-21, 21:40
OK. Let us know if any changes are required.

Main scanning frequency:
<configuration key="belmont____________" frequency="506000000">Belmont</configuration>




Custom transponders:
<customtransponder key="belmont____________" frequency="482000000" transport_stream_id="104f" system="0"/>
<customtransponder key="belmont____________" frequency="490000000" transport_stream_id="5040" system="0"/>
<customtransponder key="belmont____________" frequency="506000000" transport_stream_id="201b" system="0"/>
<customtransponder key="belmont____________" frequency="514000000" transport_stream_id="6040" system="0"/>
<customtransponder key="belmont____________" frequency="530000000" transport_stream_id="4089" system="1"/>
<customtransponder key="belmont____________" frequency="546000000" transport_stream_id="3006" system="0"/>
<customtransponder key="belmont____________" frequency="562000000" transport_stream_id="8001" system="0"/>
<customtransponder key="belmont____________" frequency="746000000" transport_stream_id="a000" system="1"/>

Huevos
30-06-21, 21:43
So remove the reverse. It doesn't serve any really useful purpose these days now the tuner selection logic works 100%.
https://github.com/oe-alliance/AutoBouquetsMaker/blob/master/AutoBouquetsMaker/src/scanner/frequencyfinder.py#L292

ccs
30-06-21, 21:47
... that looks fine, the only subtle difference is C30, which shows as C30- on ukfree.tv, with a frequency of 545833000, but I think 3 significant digits is all that's needed.

adm
30-06-21, 21:52
Which mast is your aerial pointing to? Would be an idea to update the custom transponders in the ABM file while you investigate this issue?

It was established some time ago that the frequency finder gave incorrect results with the terrestrial tuners fitted to the Xtrend 10K. The problem manifested itself as values of 65535 being seen and some signals from the "wrong" transmitter being identified (in my case I can see 3 transmitters) At the time is was put down to a problem with the supplied drivers and as a result no changes were made to the Enigma/OpenVix code. If this is still happening be very wary about coming to conclusions about problems with the py3 code which is actually a problem/bug in the tuner drivers.

The (heated) discussion about the problem with the tuners is in this thread posted in 2018 (page 3 ish)
https://www.world-of-satellite.com/showthread.php?59943-ABM-(UK-Terrestrail-)-Add-HD-channels-regions-REVISTED-Bluebell-Hill

ccs
30-06-21, 22:19
So remove the reverse. It doesn't serve any really useful purpose these days now the tuner selection logic works 100%.
https://github.com/oe-alliance/AutoBouquetsMaker/blob/master/AutoBouquetsMaker/src/scanner/frequencyfinder.py#L292

That now works fine on the Ultimo4k, tuner A was in use recording, and also on live tv, so might it have used tuner B ?

Also work fine on my ET10K, using tuner A (and seemed to run a lot faster), and picks the highest signal quality....


<configuration key="custom" frequency="506000000" system="0">East Yorks &amp; Lincs terrestrial</configuration>
</dvbtconfigs>

<customtransponders>
<!-- customtransponder key="custom" frequency="482000000" transport_stream_id="104f" system="0"/ --><!-- original_network_id="233a" signalQuality="47237" channel="22" -->
<!-- customtransponder key="custom" frequency="490000000" transport_stream_id="5040" system="0"/ --><!-- original_network_id="233a" signalQuality="43803" channel="23" -->
<!-- customtransponder key="custom" frequency="506000000" transport_stream_id="201b" system="0"/ --><!-- original_network_id="233a" signalQuality="48102" channel="25" -->
<!-- customtransponder key="custom" frequency="514000000" transport_stream_id="6040" system="0"/ --><!-- original_network_id="233a" signalQuality="45520" channel="26" -->
<customtransponder key="custom" frequency="530000000" transport_stream_id="4089" system="1"/><!-- original_network_id="233a" signalQuality="48102" channel="28" -->
<!-- customtransponder key="custom" frequency="545833000" transport_stream_id="3006" system="0"/ --><!-- original_network_id="233a" signalQuality="45520" channel="30" -->
<!-- customtransponder key="custom" frequency="562000000" transport_stream_id="8001" system="0"/ --><!-- original_network_id="233a" signalQuality="28337" channel="32" -->
<customtransponder key="custom" frequency="746000000" transport_stream_id="a000" system="1"/><!-- original_network_id="233a" signalQuality="40369" channel="55" -->
</customtransponders>

Huevos
01-07-21, 00:11
... that looks fine, the only subtle difference is C30, which shows as C30- on ukfree.tv, with a frequency of 545833000, but I think 3 significant digits is all that's needed.

Frequency is in MHz.


((474 + (bandwidth * (channel - 21))) * 1000000)

Where bandwidth is 8, and channel is between 21 and 69... which is probably outside the current range of the British terrestrial TV band.

ccs
22-08-21, 09:09
So remove the reverse. It doesn't serve any really useful purpose these days now the tuner selection logic works 100%.
https://github.com/oe-alliance/AutoBouquetsMaker/blob/master/AutoBouquetsMaker/src/scanner/frequencyfinder.py#L292

Any chance of making this a permanent change (or configurable option) ?