Selben Transponder mit getInfoObject(sRef, iServiceInformation.sTransponderData) ermitteln

  • Hallo,


    ich suche nach einer Möglichkeit (Python) um zu ermitteln ob Sendungen auf dem selben Transponder liegen. Die benötigten Informationen erhalte ich vermutlich in Form eines tuples mit getInfoObject(sRef, iServiceInformation.sTransponderData).


    Beispiel:


    ARD HD liefert:

    Code
    {'orbital_position': 192, 'inversion': 2, 'modulation': 2, 'tuner_type': 'DVB-S', 'symbol_rate': 22000000, 'system': 1, 'polarization': 0, 'fec_inner': 2, 'frequency': 11361750, 'pilot': 2, 'rolloff': 0}


    ZDF HD (selber Transponder wie ARD HD) liefert:

    Code
    {'orbital_position': 192, 'inversion': 2, 'modulation': 2, 'tuner_type': 'DVB-S', 'symbol_rate': 22000000, 'system': 1, 'polarization': 0, 'fec_inner': 2, 'frequency': 11361750, 'pilot': 2, 'rolloff': 0}


    RTL (anderer Transponder) liefert:

    Code
    {'orbital_position': 192, 'inversion': 2, 'modulation': 1, 'tuner_type': 'DVB-S', 'symbol_rate': 27500000, 'system': 0, 'polarization': 0, 'fec_inner': 3, 'frequency': 12187500}


    Nach meinen bisherigen Tests auch mit anderen Sendern würde ich sagen dass nur zwei Elemente in Frage kommen um zu ermitteln ob es sich um den selben Transponder handelt: fec_inner und frequency.


    Anhand welches oder welcher dieser tuple-Elemente kann ich bitte definitiv ermitteln ob Sender auf dem selben Transponder liegen? Reicht hier alleine die Frequenz oder spielt fec_inner (was auch immer das ist) evtl auch noch eine Rolle?


    Ich hoffe jedenfalls dass ich mit diesem Ansatz auf der richtigen Spur bin :smiling_face:


    Vielen Dank


    Shaderman

    Ich bin keine Hotline, daher kein Support per Mail oder PM.

    Einmal editiert, zuletzt von Shaderman ()

  • Vielen Dank für die schnelle Antwort!


    Es sind wohl doch mehr Kriterien als ich dachte aber das stellt ja kein Problem dar. Jedenfalls sollte mich Deine Antwort weiter bringen :smiling_face:

    Ich bin keine Hotline, daher kein Support per Mail oder PM.

  • Also im Prinzip ist der Code, den Du benötigst, in der ChannelSelection.py... :smiling_face:


    Anstelle von getCurrentlyPlayingServiceReference kannste Dir ja einen beliebigen ServiceRef nehmen....

    Code
    cur_ref = self.session.nav.getCurrentlyPlayingServiceReference()
    if cur_ref:
    pos = self.service_types.rfind(':')
    refstr = '%s (channelID == xxx) && %s ORDER BY name' %(self.service_types[:pos+1],
     cur_ref.getUnsignedData(4), # NAMESPACE
     cur_ref.getUnsignedData(2), # TSID
     cur_ref.getUnsignedData(3), # ONID
     self.service_types[pos+1:])
     ref = eServiceReference(refstr)


    Dann bauste Dir das so zusammen, wobei Du noch den entsprechenden service_typ Dir holen musst für den TV...


    Code
    service_types_tv = '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 22) || (type == 25) || (type == 134) || (type == 195)'


    Aus ref bauste Dir dann die Liste, welche Du iterieren kannst...


    Code
    servicelist = serviceHandler.list(ref)
    						if not servicelist is None:
    							while True:
    								service = servicelist.getNext()
    								if not service.valid(): #check if end of list
    									break
                                .
                                .
                                .


    Und schon haste Deine Transponderliste...also eigentlich müsste das so gehen... :smiling_face:

  • Alle Angaben wie immer ohne Gewähr (die Gültigkeit dieser Klausel wird ggf. auch gerne mit Gewehr durchgesetzt :P)!

    Klar ohne Gewähr... Hobbyprogrammierer haben doch eh keinerlei (Rechts)ansprüche, oder? :grinning_squinting_face:


    Ich habe Dr.Best's Lösung gerade getestet und muss sagen dass sie doch wesentlich professioneller und einfacher aussieht als mein Ansatz. Ich war wohl gerade wieder dabei das Rad neu zu erfinden, oder? :face_with_rolling_eyes:


    Also vielen Dank an Reichi und natürlich auch an den Doc :thumbs_up:

    Ich bin keine Hotline, daher kein Support per Mail oder PM.