Вернуться   DreamBox Satellite Forum > Обсуждение > Dreambox DM 5xxx/7xxx/8xxx/9xxx > Developer board

Developer board Раздел для разработчиков софта

Ответ
 
Опции темы

Старый 03.01.2012, 23:11   #16
Эксперт
 
Аватар для Ligioner
 
Ligioner вне форума
Регистрация: 04.01.2010
Сообщений: 137
По умолчанию

Цитата:
Сообщение от vlamo Посмотреть сообщение
Не знаю, кто вам сказал про мусор и что он имел в виду?
Раз работает, то уже неплохо.
Может имелось ввиду использование сенсоров, но с ними я не знаком?
Если они не нужны, выбросьте этот кусок кода - строки 23 - 36 (включительно) + строка 6 + строки 16 - 19 (включительно).

А вот я б что сделал, так это изменил бы строку 37 вот так:
loada = "0"

Т.е. ноль заключить в кавычки, чтоб это была строка, а не число. Иначе произойдет сбой, если вдруг у конечного пользователя не будет установлен hddtemp.
Спасибо исправил
А со строками сенсора завтра поколдую коментами
  Ответить с цитированием

Старый 03.01.2012, 23:17   #17
Специалист
 
Аватар для vlamo
 
vlamo вне форума
Регистрация: 01.11.2007
Сообщений: 2,321
Отправить сообщение для vlamo с помощью ICQ
По умолчанию

Цитата:
Сообщение от 2boom
я тут со скуки баловался накропал конвертер инфа о диске, если кому пригодится...
А чего? Очень даже хорошо. Простенько и со вкусом.
__________________
  • DM600PVR: Gemini 4.70, mgcamd_1.35/mpcs_16e, HDD 160GB
  • ET9200: Image: OpenPLi 3.0; oscam 1830; HDD 160GB
  Ответить с цитированием

Старый 03.01.2012, 23:30   #18
Эксперт
 
Аватар для Ligioner
 
Ligioner вне форума
Регистрация: 04.01.2010
Сообщений: 137
По умолчанию

vlamo
И ещё к Вам вопрос, как убрать пробелы что только не пробовал не получилось


Код:
<widget  source="session.CurrentService" render="RendCaids" backgroundColor="transparent2" ecmColor="green" emmColor="yellow" font="Regular;14" nocColor="grey" position="630,589" size="437,16" transparent="1" zPosition="10" alphatest="blend">
  <convert type="CaidDisplay">Default</convert>
</widget>
Код:
from Renderer import Renderer
from enigma import eCanvas, eRect, gFont
from skin import parseColor, parseFont

class RendCaids(Renderer):
    GUI_WIDGET = eCanvas

    def __init__(self):
        Renderer.__init__(self)
        self.backgroundColor = parseColor("#ff000000")
        self.nocColor = parseColor("#00aaaaaa")
        self.emmColor = parseColor("#00aaaaaa")
        self.ecmColor = parseColor("#0056c856")
        self.font = gFont("Regular", 20)

    def pull_updates(self):
        if self.instance is None:
            return
        self.instance.clear(self.backgroundColor)
        caidlist = self.source.getCaidlist
        if caidlist is None:
            return
        self.draw(caidlist)

    def draw(self, caidlist):
        offset = 0
        pointSize = self.font.pointSize
        for key in caidlist:
            if caidlist[key][0]:
                if caidlist[key][1] == 0:
                                     foregroundColor = self.nocColor                     
                elif caidlist[key][1] == 1:
                                     foregroundColor = self.emmColor
                else:
                                     foregroundColor = self.ecmColor
                length = len(caidlist[key][0]) * (pointSize)
                self.instance.writeText(eRect(offset, 0, length, pointSize), foregroundColor, self.backgroundColor, self.font, caidlist[key][0], 2)
                offset = offset +  length

    def changed(self, what):
        self.pull_updates()

    def applySkin(self, desktop, parent):

        attribs = [ ]
        from enigma import eSize

        def parseSize(str):
            x, y = str.split(',')
            return eSize(int(x), int(y))

        for (attrib, value) in self.skinAttributes:
            if attrib == "size":
                self.instance.setSize(parseSize(value))
                attribs.append((attrib,value))
            elif attrib == "nocColor":
                    self.nocColor = parseColor(value)
            elif attrib == "emmColor":
                self.emmColor = parseColor(value)
            elif attrib == "ecmColor":
                self.ecmColor = parseColor(value)
            elif attrib == "font":
                self.font = parseFont(value, ((1,1),(1,1)))
            elif attrib == "backgroundColor":
                self.backgroundColor = parseColor(value)
                self.instance.clear(self.backgroundColor)
                attribs.append((attrib,value))
            else:
                attribs.append((attrib,value))
        self.skinAttributes = attribs
        return Renderer.applySkin(self, desktop, parent)
Код:
from Components.Converter.Converter import Converter
from enigma import iServiceInformation, iPlayableService
from Components.Element import cached
from Poll import Poll

class CaidDisplay(Poll, Converter, object):
    def __init__(self, type):
        Poll.__init__(self)
        Converter.__init__(self, type)
        self.type = type
        self.systemCaids = {
            "26" : "BiSS",
                        "01" : "SEC",
            "06" : "IRD",
            "17" : "BET",
            "05" : "VIA",
            "18" : "NAG",
            "09" : "NDS",
            "0B" : "CON",
            "0D" : "CRW",
            "4A" : "DRE" }

        self.poll_interval = 2000
        self.poll_enabled = True

    @cached
    def get_caidlist(self):
        caidlist = {}
        service = self.source.service
        if service:
            info = service and service.info()
            if info:        
                caids = info.getInfoObject(iServiceInformation.sCAIDs)
                if caids:
                        for cs in self.systemCaids:
                                    caidlist[cs] = (self.systemCaids.get(cs),0)
                            
                    for caid in caids:
                        c = "%x" % int(caid)
                        if len(c) == 3:
                            c = "0%s" % c
                        c = c[:2].upper()
                        if self.systemCaids.has_key(c):
                            caidlist[c] = (self.systemCaids.get(c),1)
                            
                    ecm_info = self.ecmfile()
                    if ecm_info:
                        emu_caid = ecm_info.get("caid", "")
                        if emu_caid and emu_caid != "0x000":
                            c = emu_caid.lstrip("0x")
                            if len(c) == 3:
                                c = "0%s" % c
                            c = c[:2].upper()
                            caidlist[c] = (self.systemCaids.get(c),2)
        return caidlist

    getCaidlist = property(get_caidlist)

    @cached
    def getText(self):
        textvalue = ""
        service = self.source.service
        if service:
            info = service and service.info()
            if info:
                if info.getInfoObject(iServiceInformation.sCAIDs):
                    ecm_info = self.ecmfile()
                    if ecm_info:
                        # caid
                        caid = ecm_info.get("caid", "")
                        caid = caid.lstrip("0x")
                        caid = caid.upper()
                        caid = caid.zfill(4)
                        caid = "CAID: %s" % caid
                        # hops
                        hops = ecm_info.get("hops", None)
                                                hops = "HOPS: %s" % hops
                        # ecm time    
                        ecm_time = ecm_info.get("ecm time", None)
                        if ecm_time:
                            if "msec" in ecm_time:
                                ecm_time = "ECM: %s " % ecm_time                        
                            else:
                                ecm_time = "ECM: %s s" % ecm_time
                        # address
                        address = ecm_info.get("address", "")                                
                        # source    
                        using = ecm_info.get("using", "")
                        if using:
                            if using == "emu":
                                textvalue = "(EMU) %s - %s" % (caid, ecm_time)
                            elif using == "CCcam-s2s":
                                textvalue = "(NET) %s - %s - %s - %s" % (caid, address, hops, ecm_time)                            
                            else:
                                textvalue = "%s - %s - %s - %s" % (caid, address, hops, ecm_time)        
                        else:
                            # mgcamd
                            source = ecm_info.get("source", None)
                            if source:
                                if source == "emu":
                                    textvalue = "(EMU) %s" % (caid)
                                else:
                                    textvalue = "%s - %s - %s" % (caid, source, ecm_time)
                            # oscam
                            oscsource = ecm_info.get("from", None)
                            if oscsource:
                                textvalue = "%s - %s - %s - %s" % (caid, oscsource, hops, ecm_time)
                            # gbox
                            decode = ecm_info.get("decode", None)
                            if decode:
                                if decode == "Internal":
                                    textvalue = "(EMU) %s" % (caid)
                                else:
                                    textvalue = "%s - %s" % (caid, decode)
                            
        return textvalue 

    text = property(getText)

    def ecmfile(self):
        ecm = None
        info = {}
        service = self.source.service
        if service:
            frontendInfo = service.frontendInfo()
            if frontendInfo:
                try:
                    ecmpath = "/tmp/ecm%s.info" % frontendInfo.getAll(False).get("tuner_number")
                    ecm = open(ecmpath, "rb").readlines()
                except:
                    try:
                        ecm = open("/tmp/ecm.info", "rb").readlines()
                    except: pass
            if ecm:
                for line in ecm:
                    x = line.lower().find("msec")
                    if x != -1:
                        info["ecm time"] = line[0:x+4]
                    else:
                        item = line.split(":", 1)
                        if len(item) > 1:
                            info[item[0].strip().lower()] = item[1].strip()
                        else:
                            if not info.has_key("caid"):
                                x = line.lower().find("caid")
                                if x != -1:
                                    y = line.find(",")
                                    if y != -1:
                                        info["caid"] = line[x+5:y]

        return info

    def changed(self, what):
        if (what[0] == self.CHANGED_SPECIFIC and what[1] == iPlayableService.evUpdatedInfo) or what[0] == self.CHANGED_POLL:
            Converter.changed(self, what)
  Ответить с цитированием

Старый 04.01.2012, 02:03   #19
Эксперт
 
Аватар для maigais
 
maigais вне форума
Регистрация: 12.12.2008
Адрес: latvija
Сообщений: 2,120
Отправить сообщение для maigais с помощью Skype™
По умолчанию

Цитата:
Сообщение от 2boom Посмотреть сообщение
я тут со скуки баловался накропал конвертер инфа о диске, если кому пригодится...
Код:
#<widget source="session.CurrentService" render="Label" position="189,397" zPosition="4" size="350,20" noWrap="1" valign="center" halign="center" font="Regular;14" foregroundColor="clText" transparent="1"  backgroundColor="#20002450">
    <convert type="DiskInfo">xALL</convert>
</widget>
чегото уменя неотоброжает , текст есть но цыфров нету

добавлено через 1 час 1 минуту
Цитата:
Сообщение от vlamo Посмотреть сообщение
Не знаю, кто вам сказал про мусор и что он имел в виду?
Раз работает, то уже неплохо.
Может имелось ввиду использование сенсоров, но с ними я не знаком?
Если они не нужны, выбросьте этот кусок кода - строки 23 - 36 (включительно) + строка 6 + строки 16 - 19 (включительно).

А вот я б что сделал, так это изменил бы строку 37 вот так:
loada = "0"

Т.е. ноль заключить в кавычки, чтоб это была строка, а не число. Иначе произойдет сбой, если вдруг у конечного пользователя не будет установлен hddtemp.
только вапрос правильно ли работает что то
сравнил с етого рендерана инфобара и Deliteинфо разница было на 10 градусов
__________________
BlackHole-OE2.0,Tuner + ALINK DTU и Digital USB DVB-T HDTV TV Tuner Recorder Receiver , HDD TOSHIBA MK2552GSX 250gb,

Последний раз редактировалось maigais; 04.01.2012 в 09:23. Причина: Добавлено сообщение
  Ответить с цитированием

Старый 04.01.2012, 09:28   #20
Эксперт
 
Аватар для 2boom
 
2boom вне форума
Регистрация: 29.01.2010
Сообщений: 225
По умолчанию

maigais, неотображвть может только в случае если винт меньше 100 гиг и больше тера, исправлю....
  Ответить с цитированием

Старый 04.01.2012, 09:39   #21
Эксперт
 
Аватар для maigais
 
maigais вне форума
Регистрация: 12.12.2008
Адрес: latvija
Сообщений: 2,120
Отправить сообщение для maigais с помощью Skype™
По умолчанию

да вот так всо выгледит
вроде у меня HDD TOSHIBA MK2552GSX 250gb
Изображения
Тип файла: jpg DiskInfo.jpg (140.3 Кб, 40 просмотров)
__________________
BlackHole-OE2.0,Tuner + ALINK DTU и Digital USB DVB-T HDTV TV Tuner Recorder Receiver , HDD TOSHIBA MK2552GSX 250gb,

Последний раз редактировалось maigais; 04.01.2012 в 09:57.
  Ответить с цитированием

Старый 04.01.2012, 10:36   #22
Эксперт
 
Аватар для Ligioner
 
Ligioner вне форума
Регистрация: 04.01.2010
Сообщений: 137
По умолчанию

Цитата:
Сообщение от 2boom Посмотреть сообщение
maigais, неотображвть может только в случае если винт меньше 100 гиг и больше тера, исправлю....
У меня диск 500 гиг на ВуДуо имидж BH 1.6.6 не выводит этот конвертор инфу
А вот в дриме 800 150 гиг имидж домика9 выводит
Только показывает свободное пространство в скобках и не после free: а до неё и проценты желательно тоже бы прикрутить как команда в телнете показывает
Изображения
Тип файла: jpg 64f1d8669633.jpg (160.7 Кб, 40 просмотров)
Тип файла: jpg b6162f0692e8.jpg (142.3 Кб, 35 просмотров)

Последний раз редактировалось Ligioner; 04.01.2012 в 11:16.
  Ответить с цитированием

Старый 04.01.2012, 12:08   #23
Эксперт
 
Аватар для Ligioner
 
Ligioner вне форума
Регистрация: 04.01.2010
Сообщений: 137
По умолчанию

2boom
Спасибо разобрался подредактировал под себя теперь показывает, как надо

  Ответить с цитированием

Старый 04.01.2012, 12:35   #24
Специалист
 
Аватар для vlamo
 
vlamo вне форума
Регистрация: 01.11.2007
Сообщений: 2,321
Отправить сообщение для vlamo с помощью ICQ
По умолчанию

2boom
Вместо:
Код:
line.split(" ")
используйте:
Код:
line.split()
Например:
Код:
fd = os.popen("df -h | grep /media/hdd")
data = fd.readline()
list = data.split()
Тогда вернется список из шести элементов, где:
list[0] - device
list[1] - size
list[2] - used
list[3] - free
list[4] - used in percent
list[5] - mount point

А сейчас у вас из-за того, что вы разделяете строку по символу пробела ( split(" ") ), число элементов в возвращаемом список всегда зависит от количества пробелов в строке.
Надеюсь, понятно объяснил?
__________________
  • DM600PVR: Gemini 4.70, mgcamd_1.35/mpcs_16e, HDD 160GB
  • ET9200: Image: OpenPLi 3.0; oscam 1830; HDD 160GB
  Ответить с цитированием

Старый 04.01.2012, 12:39   #25
Специалист
 
Аватар для vlamo
 
vlamo вне форума
Регистрация: 01.11.2007
Сообщений: 2,321
Отправить сообщение для vlamo с помощью ICQ
По умолчанию

Цитата:
Сообщение от maigais
только вапрос правильно ли работает что то
сравнил с етого рендерана инфобара и Deliteинфо разница было на 10 градусов
Осталось только тепловизором проверить кто врет.

Цитата:
Сообщение от Ligioner
И ещё к Вам вопрос, как убрать пробелы что только не пробовал не получилось
Посмотрю. Так с наскока не разберешься.
__________________
  • DM600PVR: Gemini 4.70, mgcamd_1.35/mpcs_16e, HDD 160GB
  • ET9200: Image: OpenPLi 3.0; oscam 1830; HDD 160GB
  Ответить с цитированием

Старый 04.01.2012, 13:24   #26
Специалист
 
Аватар для vlamo
 
vlamo вне форума
Регистрация: 01.11.2007
Сообщений: 2,321
Отправить сообщение для vlamo с помощью ICQ
По умолчанию

Ligioner
Тут весьма запутанная ситуация, но если не ошибаюсь, то...
В рендере RendCaids, функция draw, переменная pointSize:
Код:
        pointSize = self.font.pointSize
Вот именно она и отвечает за ширину одного текстового символа текущего шрифта.
Т.е. попробовать ее значение несколько уменьшить, например, на два пиксела:
Код:
        pointSize = self.font.pointSize - 2
А вообще в энигма2, насколько я заметил, очень тяжеловато и почти всегда неверно определяются размеры текста и шрифта. Очевидно, берутся усредненные данные и разумеется с некоторым запасом.
__________________
  • DM600PVR: Gemini 4.70, mgcamd_1.35/mpcs_16e, HDD 160GB
  • ET9200: Image: OpenPLi 3.0; oscam 1830; HDD 160GB
  Ответить с цитированием

Старый 04.01.2012, 13:47   #27
Эксперт
 
Аватар для 2boom
 
2boom вне форума
Регистрация: 29.01.2010
Сообщений: 225
По умолчанию

vlamo, спасибо, все понятно, до меня дошло, что могут быть траблы еще вчера)))) там получается форматирование по правому краю и переменная длина в зависмости от объема, короче получается так

Код:
size = line[20:30].split()
PS. может кроме точки монтирования добавить еще модель винта?
  Ответить с цитированием

Старый 04.01.2012, 13:50   #28
Эксперт
 
Аватар для Ligioner
 
Ligioner вне форума
Регистрация: 04.01.2010
Сообщений: 137
По умолчанию

Цитата:
Сообщение от vlamo Посмотреть сообщение
Код:
line.split()
list[0] - device
list[1] - size
list[2] - used
list[3] - free
list[4] - used in percent
list[5] - mount point
Спасибо уважаемый классно получилось с вашей подсказки
Только я это дело сделал для внутренней флешь ресивера вудуо



Спасибо попробую в рендере
pointSize = self.font.pointSize - 2

Последний раз редактировалось Ligioner; 04.01.2012 в 13:52.
  Ответить с цитированием

Старый 04.01.2012, 14:12   #29
Специалист
 
Аватар для vlamo
 
vlamo вне форума
Регистрация: 01.11.2007
Сообщений: 2,321
Отправить сообщение для vlamo с помощью ICQ
По умолчанию

Цитата:
Сообщение от 2boom Посмотреть сообщение
PS. может кроме точки монтирования добавить еще модель винта?
Ну а почему бы и нет?
Конвертер называется - DiskInfo, вот и валите туда всю инфо.
Скинеры, пользователи уже сами разберутся, что им надо, а что нет.
__________________
  • DM600PVR: Gemini 4.70, mgcamd_1.35/mpcs_16e, HDD 160GB
  • ET9200: Image: OpenPLi 3.0; oscam 1830; HDD 160GB
  Ответить с цитированием

Старый 04.01.2012, 14:24   #30
Эксперт
 
Аватар для Ligioner
 
Ligioner вне форума
Регистрация: 04.01.2010
Сообщений: 137
По умолчанию

Сделал два конвертора для внутренней флешки ресивера и для харда


Теперь бы ещё додуматься, как их в один конвертор объединить

Получилось с рендером RendCaids.py поставил pointSize = self.font.pointSize - 4
И в конверторе CaidDisplay.py прописал маленькими буквами
Стало компактно и мало места занимает теперь

vlamo
огромное спасибо


Последний раз редактировалось Ligioner; 04.01.2012 в 14:43.
  Ответить с цитированием
Ответ

Закладки


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход




Часовой пояс GMT +3, время: 08:17.


vBulletin skin developed by: eXtremepixels
Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot


Спутниковое телевидение, оборудование для прима. Ресиверы Dreanbox Multimedia.
Самые актуальные обзоры новейших спутниковых ресиверов.