Danke erstmal für deine ausführliche Antwort...
Leider tue ich mich mit 58 Jahren in der Materie etwas schwer. Ich wollte auch nicht das komplette Python erlernen.
Mir geht es nur um folgendes. Ich bin Skinner in einem Enigma2 Board und beschäftige mich auch mit Renderer und Convertern. Kleinigkeiten bekommt man dann schon hin.
Nun werden die beiden Sensoren in einem Receiver so ungenau ausgelesen, das mich die Info in der Infobar auf die Palme bringt.
Dieses wollte ich in dem Converter gerade biegen....Da bei uns die Leute der Zeit nicht erreichbar sind (Urlaubszeit) habe ich mich hier nach euch gewandt.
Hier nochmal der relevante Code...
Code: Alles auswählen
from Components.Converter.Converter import Converter
from Components.Element import cached
from Poll import Poll
from os import popen, statvfs
SIZE_UNITS = ['B',
'KB',
'MB',
'GB',
'TB',
'PB',
'EB']
class STBInfo(Poll, Converter):
CPUTEMP = 0
LOADAVG = 1
MEMTOTAL = 2
MEMFREE = 3
SWAPTOTAL = 4
SWAPFREE = 5
USBINFO = 6
HDDINFO = 7
FLASHINFO = 8
DRIVERINFO = 9
SYSTEMTEMP = 10
def __init__(self, type):
Converter.__init__(self, type)
Poll.__init__(self)
type = type.split(',')
self.shortFormat = 'Short' in type
self.fullFormat = 'Full' in type
if 'CPUTemp' in type:
self.type = self.CPUTEMP
elif 'LoadAvg' in type:
self.type = self.LOADAVG
elif 'MemTotal' in type:
self.type = self.MEMTOTAL
elif 'MemFree' in type:
self.type = self.MEMFREE
elif 'SwapTotal' in type:
self.type = self.SWAPTOTAL
elif 'SwapFree' in type:
self.type = self.SWAPFREE
elif 'UsbInfo' in type:
self.type = self.USBINFO
elif 'HddInfo' in type:
self.type = self.HDDINFO
elif 'DriverInfo' in type:
self.type = self.DRIVERINFO
elif 'SystemTemp' in type:
self.type = self.SYSTEMTEMP
else:
self.type = self.FLASHINFO
if self.type in (self.FLASHINFO, self.HDDINFO, self.USBINFO):
self.poll_interval = 5000
else:
self.poll_interval = 30000
self.poll_enabled = True
def doSuspend(self, suspended):
if suspended:
self.poll_enabled = False
else:
self.downstream_elements.changed((self.CHANGED_POLL,))
self.poll_enabled = True
@cached
def getText(self):
text = 'N/A'
if self.type == self.CPUTEMP:
text = self.getCPUTemp()
elif self.type == self.SYSTEMTEMP:
text = self.getSystemTemp()
elif self.type == self.LOADAVG:
text = self.getLoadAvg()
elif self.type == self.DRIVERINFO:
text = self.getDriverInfo()
else:
entry = {self.MEMTOTAL: ('Mem', 'Ram'),
self.MEMFREE: ('Mem', 'Ram'),
self.SWAPTOTAL: ('Swap', 'Swap'),
self.SWAPFREE: ('Swap', 'Swap'),
self.USBINFO: ('/media/usb', 'USB'),
self.HDDINFO: ('/media/hdd', 'HDD'),
self.FLASHINFO: ('/', 'Flash')}[self.type]
if self.type in (self.USBINFO, self.HDDINFO, self.FLASHINFO):
list = self.getDiskInfo(entry[0])
else:
list = self.getMemInfo(entry[0])
if list[0] == 0:
text = '%s: Not Available' % entry[1]
elif self.shortFormat:
text = '%s: Total %s, in use %s%%' % (entry[1], self.getSizeStr(list[0]), list[3])
elif self.fullFormat:
text = '%s: Total %s Free %s Used %s (%s%%)' % (entry[1],
self.getSizeStr(list[0]),
self.getSizeStr(list[2]),
self.getSizeStr(list[1]),
list[3])
else:
text = '%s: Total %s Used %s Free %s' % (entry[1],
self.getSizeStr(list[0]),
self.getSizeStr(list[1]),
self.getSizeStr(list[2]))
return text
@cached
def getValue(self):
result = 0
if self.type in (self.MEMTOTAL,
self.MEMFREE,
self.SWAPTOTAL,
self.SWAPFREE):
entry = {self.MEMTOTAL: 'Mem',
self.MEMFREE: 'Mem',
self.SWAPTOTAL: 'Swap',
self.SWAPFREE: 'Swap'}[self.type]
result = self.getMemInfo(entry)[3]
elif self.type in (self.USBINFO, self.HDDINFO, self.FLASHINFO):
path = {self.USBINFO: '/media/usb',
self.HDDINFO: '/media/hdd',
self.FLASHINFO: '/'}[self.type]
result = self.getDiskInfo(path)[3]
return result
text = property(getText)
value = property(getValue)
range = 100
def getCPUTemp(self):
textvalue = 'No info'
info = '0'
try:
out_line = popen('cat /proc/stb/fp/avs_temperature').readline().strip()
info = '' + out_line[:3] + ' C'
textvalue = info
except:
pass
return textvalue
def getSystemTemp(self):
textvalue = 'No info'
info = '0'
try:
out_line = popen('cat /proc/stb/fp/temp_sensor').readline().strip()
info = '' + out_line[:4] + ' C'
textvalue = info
except:
pass
return textvalue
Warum 3 Zeichen in der avs_temperature, weil hier sonst alles angezeigt wird. z. B. +45.76C
Im anderen nur 2 Stellig ohne + und C. z.B. 27
Zusätzlich wird im oberen immer + angezeigt, das habe ich aber im Skin gelöst.
Die Funktion "Short" funktioniert bei CPUTemp nicht.
Ich brauche aber nur 2 Zeichen. Das C wird oben im Code erzeugt und das Grad Zeichen dazu im Skin.
CPUTemp und SystemTemp sind jeweils Aufrufe im Skin.
Beispiel: <convert type="STBInfo">SystemTemp,Short</convert>
Grüße
Dirk
btw....das ist nicht der komplette Code.