1 diff -urN LCD4linux_ori/plugin.py LCD4linux/plugin.py
2 --- LCD4linux_ori/plugin.py 2013-05-24 12:11:59.390217149 +0200
3 +++ LCD4linux/plugin.py 2013-05-31 07:22:41.221330788 +0200
6 from twisted.web.client import getPage
7 from xml.dom.minidom import parse, parseString
8 -from urllib import urlencode
9 +from urllib import urlencode, quote
10 import xml.etree.cElementTree
12 +from fcntl import ioctl
13 +from socket import create_connection as socket_create_connection
16 DPFrefreshrate="/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux/refreshrate"
17 WetterPath = "/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux/wetter/"
19 BilderIndexStandby = 0
22 +WetterThreadRunning = 0
24 DemonPID = ["","","",""]
27 config.plugins.LCD4linux.TimerColor = ConfigSelection(choices = Farbe, default="white")
28 config.plugins.LCD4linux.Wetter = ConfigSelection(choices = ScreenSelect, default="0")
29 config.plugins.LCD4linux.WetterLCD = ConfigSelection(choices = LCDSelect, default="1")
30 -config.plugins.LCD4linux.WetterPos = ConfigSlider(default = 50, increment = 2, limits = (0, 600))
31 -config.plugins.LCD4linux.WetterType = ConfigSelection(choices = [("1", _("4 Days small")), ("2", _("4 Days big")), ("3", _("Current big")), ("4", _("Current full"))], default="1")
32 -config.plugins.LCD4linux.OSCAM = ConfigSelection(choices = ScreenSelect, default="0")
33 -config.plugins.LCD4linux.OSCAMLCD = ConfigSelection(choices = LCDSelect, default="1")
34 -config.plugins.LCD4linux.OSCAMFile = ConfigText(default="/tmp/.oscam/oscam.lcd", fixed_size=False)
35 -config.plugins.LCD4linux.OSCAMSize = ConfigSlider(default = 10, increment = 1, limits = (9, 20))
36 -config.plugins.LCD4linux.OSCAMPos = ConfigSlider(default = 20, increment = 2, limits = (0, 600))
37 -config.plugins.LCD4linux.OSCAMAlign = ConfigSelection(choices = [("0", _("left")), ("2", _("right"))], default="0")
38 -config.plugins.LCD4linux.OSCAMSplit = ConfigYesNo(default = False)
39 -config.plugins.LCD4linux.OSCAMColor = ConfigSelection(choices = Farbe, default="white")
40 -config.plugins.LCD4linux.OSCAMBackColor = ConfigSelection(choices = [("0", _("off"))] + Farbe, default="black")
41 +config.plugins.LCD4linux.WetterPosX = ConfigSlider(default = 0, increment = 2, limits = (0, 600))
42 +config.plugins.LCD4linux.WetterPosY = ConfigSlider(default = 0, increment = 2, limits = (0, 600))
43 +config.plugins.LCD4linux.WetterType = ConfigSelection(choices = [("1", _("2 Days")), ("2", _("4 Days")), ("3", _("4 Days big")), ("4", _("4 Days only")), ("5", _("2 Days vertical"))], default="1")
44 +config.plugins.LCD4linux.WetterColor = ConfigSelection(choices = Farbe, default="white")
45 +config.plugins.LCD4linux.WetterColorLow = ConfigSelection(choices = Farbe, default="aquamarine")
46 +config.plugins.LCD4linux.WetterColorHigh = ConfigSelection(choices = Farbe, default="violet")
47 +config.plugins.LCD4linux.WetterColorLine = ConfigSelection(choices = Farbe, default="white")
48 +config.plugins.LCD4linux.WetterColorDay = ConfigSelection(choices = Farbe, default="white")
49 +config.plugins.LCD4linux.WetterColorCity = ConfigSelection(choices = Farbe, default="white")
50 +config.plugins.LCD4linux.WetterColorSky = ConfigSelection(choices = Farbe, default="silver")
51 config.plugins.LCD4linux.WetterCity = ConfigText(default="Berlin", fixed_size=False)
52 config.plugins.LCD4linux.Text = ConfigSelection(choices = ScreenSelect, default="0")
53 config.plugins.LCD4linux.TextLCD = ConfigSelection(choices = LCDSelect, default="1")
55 config.plugins.LCD4linux.StandbyTimerColor = ConfigSelection(choices = Farbe, default="white")
56 config.plugins.LCD4linux.StandbyWetter = ConfigSelection(choices = ScreenSelect, default="0")
57 config.plugins.LCD4linux.StandbyWetterLCD = ConfigSelection(choices = LCDSelect, default="1")
58 -config.plugins.LCD4linux.StandbyWetterPos = ConfigSlider(default = 50, increment = 2, limits = (0, 600))
59 +config.plugins.LCD4linux.StandbyWetterPosX = ConfigSlider(default = 0, increment = 2, limits = (0, 600))
60 +config.plugins.LCD4linux.StandbyWetterPosY = ConfigSlider(default = 50, increment = 2, limits = (0, 600))
61 config.plugins.LCD4linux.StandbyWetterType = ConfigSelection(choices = [("1", _("4 Days small")), ("2", _("4 Days big")), ("3", _("Current big")), ("4", _("Current full"))], default="1")
62 -config.plugins.LCD4linux.StandbyOSCAM = ConfigSelection(choices = ScreenSelect, default="0")
63 -config.plugins.LCD4linux.StandbyOSCAMLCD = ConfigSelection(choices = LCDSelect, default="1")
64 -config.plugins.LCD4linux.StandbyOSCAMSize = ConfigSlider(default = 10, increment = 1, limits = (9, 20))
65 -config.plugins.LCD4linux.StandbyOSCAMPos = ConfigSlider(default = 20, increment = 2, limits = (0, 600))
66 -config.plugins.LCD4linux.StandbyOSCAMAlign = ConfigSelection(choices = [("0", _("left")), ("2", _("right"))], default="0")
67 -config.plugins.LCD4linux.StandbyOSCAMSplit = ConfigYesNo(default = False)
68 -config.plugins.LCD4linux.StandbyOSCAMColor = ConfigSelection(choices = Farbe, default="white")
69 -config.plugins.LCD4linux.StandbyOSCAMBackColor = ConfigSelection(choices = [("0", _("off"))] + Farbe, default="black")
70 config.plugins.LCD4linux.StandbyText = ConfigSelection(choices = ScreenSelect, default="0")
71 config.plugins.LCD4linux.StandbyTextLCD = ConfigSelection(choices = LCDSelect, default="1")
72 config.plugins.LCD4linux.StandbyTextFile = ConfigText(default="/tmp/lcd4linux.txt", fixed_size=False)
74 self.list2.append(getConfigListEntry(_("Weather"), config.plugins.LCD4linux.Wetter))
75 if config.plugins.LCD4linux.Wetter.value != "0":
76 self.list2.append(getConfigListEntry(_("- which LCD"), config.plugins.LCD4linux.WetterLCD))
77 - self.list2.append(getConfigListEntry(_("- Position"), config.plugins.LCD4linux.WetterPos))
78 + self.list2.append(getConfigListEntry(_("- Position X"), config.plugins.LCD4linux.WetterPosX))
79 + self.list2.append(getConfigListEntry(_("- Position Y"), config.plugins.LCD4linux.WetterPosY))
80 self.list2.append(getConfigListEntry(_("- Weather Type"), config.plugins.LCD4linux.WetterType))
81 - self.list2.append(getConfigListEntry(_("Show oscam.lcd"), config.plugins.LCD4linux.OSCAM))
82 - if config.plugins.LCD4linux.OSCAM.value != "0":
83 - self.list2.append(getConfigListEntry(_("- which LCD"), config.plugins.LCD4linux.OSCAMLCD))
84 - self.list2.append(getConfigListEntry(_("- File"), config.plugins.LCD4linux.OSCAMFile))
85 - self.list2.append(getConfigListEntry(_("- Font Size"), config.plugins.LCD4linux.OSCAMSize))
86 - self.list2.append(getConfigListEntry(_("- Position"), config.plugins.LCD4linux.OSCAMPos))
87 - self.list2.append(getConfigListEntry(_("- Alignment"), config.plugins.LCD4linux.OSCAMAlign))
88 - self.list2.append(getConfigListEntry(_("- Split Screen"), config.plugins.LCD4linux.OSCAMSplit))
89 - self.list2.append(getConfigListEntry(_("- Color"), config.plugins.LCD4linux.OSCAMColor))
90 - self.list2.append(getConfigListEntry(_("- Background Color"), config.plugins.LCD4linux.OSCAMBackColor))
91 + self.list2.append(getConfigListEntry(_("- Color"), config.plugins.LCD4linux.WetterColor))
92 + self.list2.append(getConfigListEntry(_("- Color Low"), config.plugins.LCD4linux.WetterColorLow))
93 + self.list2.append(getConfigListEntry(_("- Color High"), config.plugins.LCD4linux.WetterColorHigh))
94 + self.list2.append(getConfigListEntry(_("- Color Line"), config.plugins.LCD4linux.WetterColorLine))
95 + self.list2.append(getConfigListEntry(_("- Color Day"), config.plugins.LCD4linux.WetterColorDay))
96 + self.list2.append(getConfigListEntry(_("- Color City"), config.plugins.LCD4linux.WetterColorCity))
97 + self.list2.append(getConfigListEntry(_("- Color Sky"), config.plugins.LCD4linux.WetterColorSky))
98 self.list2.append(getConfigListEntry(_("Show Textfile") , config.plugins.LCD4linux.Text))
99 if config.plugins.LCD4linux.Text.value != "0":
100 self.list2.append(getConfigListEntry(_("- which LCD"), config.plugins.LCD4linux.TextLCD))
102 self.list4.append(getConfigListEntry(_("Standby - Weather"), config.plugins.LCD4linux.StandbyWetter))
103 if config.plugins.LCD4linux.StandbyWetter.value != "0":
104 self.list4.append(getConfigListEntry(_("- which LCD"), config.plugins.LCD4linux.StandbyWetterLCD))
105 - self.list4.append(getConfigListEntry(_("- Position"), config.plugins.LCD4linux.StandbyWetterPos))
106 + self.list4.append(getConfigListEntry(_("- Position X"), config.plugins.LCD4linux.StandbyWetterPosX))
107 + self.list4.append(getConfigListEntry(_("- Position Y"), config.plugins.LCD4linux.StandbyWetterPosY))
108 self.list4.append(getConfigListEntry(_("- Weather Type"), config.plugins.LCD4linux.StandbyWetterType))
109 - self.list4.append(getConfigListEntry(_("Standby - Show oscam.lcd"), config.plugins.LCD4linux.StandbyOSCAM))
110 - if config.plugins.LCD4linux.StandbyOSCAM.value != "0":
111 - self.list4.append(getConfigListEntry(_("- which LCD"), config.plugins.LCD4linux.StandbyOSCAMLCD))
112 - self.list4.append(getConfigListEntry(_("- Font Size"), config.plugins.LCD4linux.StandbyOSCAMSize))
113 - self.list4.append(getConfigListEntry(_("- Position"), config.plugins.LCD4linux.StandbyOSCAMPos))
114 - self.list4.append(getConfigListEntry(_("- Alignment"), config.plugins.LCD4linux.StandbyOSCAMAlign))
115 - self.list4.append(getConfigListEntry(_("- Split Screen"), config.plugins.LCD4linux.StandbyOSCAMSplit))
116 - self.list4.append(getConfigListEntry(_("- Color"), config.plugins.LCD4linux.StandbyOSCAMColor))
117 - self.list4.append(getConfigListEntry(_("- Background Color"), config.plugins.LCD4linux.StandbyOSCAMBackColor))
118 self.list4.append(getConfigListEntry(_("Standby - Show Textfile"), config.plugins.LCD4linux.StandbyText))
119 if config.plugins.LCD4linux.StandbyText.value != "0":
120 self.list4.append(getConfigListEntry(_("- which LCD"), config.plugins.LCD4linux.StandbyTextLCD))
121 @@ -998,11 +984,18 @@
122 self.SavePicon = config.plugins.LCD4linux.PiconType.value
123 self.SaveAspectRatio = config.plugins.LCD4linux.PiconAspectRatio.value
124 os.system("rm -f %s" % config.plugins.LCD4linux.PiconCache.value + "*.png")
125 - if self.SaveWetter != config.plugins.LCD4linux.WetterCity.value or self.SaveWetterType != config.plugins.LCD4linux.WetterType.value or self.SaveStandbyWetterType != config.plugins.LCD4linux.StandbyWetterType.value:
126 +# if self.SaveWetter != config.plugins.LCD4linux.WetterCity.value or self.SaveWetterType != config.plugins.LCD4linux.WetterType.value or self.SaveStandbyWetterType != config.plugins.LCD4linux.StandbyWetterType.value:
127 +# self.SaveWetter = config.plugins.LCD4linux.WetterCity.value
128 +# self.SaveWetterType = config.plugins.LCD4linux.WetterType.value
129 +# self.SaveStandbyWetterType = config.plugins.LCD4linux.StandbyWetterType.value
131 + if self.SaveWetter != config.plugins.LCD4linux.WetterCity.value:
132 self.SaveWetter = config.plugins.LCD4linux.WetterCity.value
133 - self.SaveWetterType = config.plugins.LCD4linux.WetterType.value
134 - self.SaveStandbyWetterType = config.plugins.LCD4linux.StandbyWetterType.value
137 + elif config.plugins.LCD4linux.WetterColor.isChanged() or config.plugins.LCD4linux.WetterColorLow.isChanged() or config.plugins.LCD4linux.WetterColorHigh.isChanged() or config.plugins.LCD4linux.WetterColorLine.isChanged() or config.plugins.LCD4linux.WetterColorDay.isChanged() or config.plugins.LCD4linux.WetterColorCity.isChanged() or config.plugins.LCD4linux.WetterColorSky.isChanged():
138 + if os.path.isfile(PICwetter):
139 + os.system("rm -f %s" % PICwetter)
140 if self.SaveScreenActive != config.plugins.LCD4linux.ScreenActive.value:
141 self.SaveScreenActive = config.plugins.LCD4linux.ScreenActive.value
142 ScreenActive = self.SaveScreenActive
143 @@ -1101,6 +1094,7 @@
145 self.StandbyChanged = False
147 + self.WetterCheckMin = ""
150 self.StatusTimer = eTimer()
151 @@ -1210,10 +1204,15 @@
152 self.StandbyChanged = Standby.inStandby
154 if config.plugins.LCD4linux.StandbyWetter.value != "0" or config.plugins.LCD4linux.Wetter.value != "0":
155 - if strftime("%M") == "15" or strftime("%M") == "45" or wwwWetter.find("forecast_information") < 1:
156 - self.downloadWetter()
157 + if strftime("%M") != self.WetterCheckMin:
158 + self.WetterCheckMin = strftime("%M")
159 + if strftime("%M") == "15" or strftime("%M") == "45" or wwwWetter.find("forecast") < 1:
160 + self.downloadWetter()
161 if ConfigMode == True:
162 - self.StatusTimer.startLongTimer(2)
163 + if config.plugins.LCD4linux.Bild.value.find(ScreenActive) >= 0:
164 + self.StatusTimer.startLongTimer(5)
166 + self.StatusTimer.startLongTimer(3)
168 self.StatusTimer.startLongTimer(5)
170 @@ -1377,23 +1376,68 @@
174 + def cannotConnect(self, port = 80, url = "74.125.71.94", timeout = 5):
176 + sock = socket_create_connection((url, port), timeout)
177 +# print "Can be connected to [%s:%d]."%(url,port)
178 + except Exception, ErrMsg:
179 + print "Can't be connected to [%s:%d]. (%s)"%(url, port, ErrMsg)
180 + print " >> Cause: ",ErrMsg
183 +# print " >> sock close, sock : ",sock
184 + if sock is not None:
185 + print "socket close : ",sock.close()
188 def downloadWetter(self):
189 + global WetterThreadRunning
190 + if WetterThreadRunning > 0:
191 + print "[LCD4linux] downloadWetter already running"
193 + WetterThreadRunning += 1
194 + from threading import Thread
195 + t = Thread(target=self.downloadWetterThread)
198 + def downloadWetterThread(self):
200 +# if self.cannotConnect(80, "173.194.72.94", 1): # www.google.de
201 + if self.cannotConnect(80, "173.194.72.99", 1): # www.google.com
202 + self.downloadWetterThreadEnd()
204 print "[LCD4linux] Wetterdownloadstart"
205 - self.feedurl = "http://www.google.com/ig/api?weather=%s&oe=utf-8&hl=%s" % (config.plugins.LCD4linux.WetterCity.value,language.getLanguage()[:2])
206 -# self.feedurl = "http://www.google.com/ig/api?weather=%s&oe=utf-8&hl=%s" % (config.plugins.LCD4linux.WetterCity.value,"de")
207 + wetterCity = config.plugins.LCD4linux.WetterCity.value
208 + lang = language.getLanguage().replace("_","-")
209 + if lang in ["no-NO","ca-AD","sr-YU","en-EN"]:
211 + if wetterCity.startswith("wc:"):
212 + self.feedurl = "http://weather.service.msn.com/data.aspx?src=vista&weadegreetype=C&culture=%s&wealocations=%s" %(lang,wetterCity)
214 + self.feedurl = "http://weather.service.msn.com/data.aspx?src=vista&weadegreetype=C&culture=%s&weasearchstr=%s" %(lang,quote(wetterCity))
215 getPage(self.feedurl).addCallback(self.downloadListCallback).addErrback(self.downloadListError)
216 + self.downloadWetterThreadEnd()
218 def downloadListError(self, error=""):
220 + print "download wetter error : ", str(error)
221 # self.session.open(MessageBox, "Error downloading Feed:\n%s" % str(error), type=MessageBox.TYPE_ERROR)
222 + self.downloadWetterThreadEnd()
224 def downloadListCallback(self, page=""):
227 wwwWetter = wwwWetter.replace('\xc2\x86', '').replace('\xc2\x87', '').replace('\n','').decode("utf-8", "ignore").encode("utf-8") or ""
228 wwwWetter=codecs.decode(wwwWetter, 'UTF-8')
230 if os.path.isfile(PICwetter):
231 os.system("rm -f %s" % PICwetter)
232 +# print " >> downloadListCallback updated.."
233 + self.downloadWetterThreadEnd()
234 + self.restartTimer()
236 + def downloadWetterThreadEnd(self):
237 + global WetterThreadRunning
238 + WetterThreadRunning = 0
240 def LCD4linuxPICThread(self,session):
242 @@ -1530,116 +1574,174 @@
247 - def putWetter(ConfigPos, ConfigType, draw, im):
249 + def putWetter((ConfigPosX, ConfigPosY, ConfigType, ConfigColor,
250 + ConfigColorLow, ConfigColorHigh, ConfigColorLine, ConfigColorDay, ConfigColorCity, ConfigColorSky), draw, im):
253 + global WetterThreadRunning
254 + if WetterThreadRunning:
255 + print " Download Wetter thread is running"
257 if os.path.isfile(PICwetter) and ConfigType == WetterType:
258 pil_image = Image.open(PICwetter)
259 - im.paste(pil_image,(0,ConfigPos))
260 + im.paste(pil_image,(ConfigPosX,ConfigPosY))
262 WetterType=ConfigType
264 - MAX_W,MAX_H = 320,80
265 - Wmulti = 1.4 if ConfigType != "1" else 1
266 - if ConfigType == "2":
270 + if ConfigType == "1":
271 + MAX_W,MAX_H = 260,110
272 + elif ConfigType == "2":
273 + MAX_W,MAX_H = 400,110
274 elif ConfigType == "3":
276 - POSY = POSY-(20*Wmulti)+1
277 - elif ConfigType == "4":
280 - POSY = POSY-(20*Wmulti)+1
281 + MAX_W,MAX_H = 400,240
282 + elif ConfigType == "4" or ConfigType == "5":
283 + MAX_W,MAX_H = 180,240
284 imW = Image.new('RGB', (MAX_W, MAX_H), (0, 0, 0, 0))
285 drawW = ImageDraw.Draw(imW)
286 dom = parseString(wwwWetter)
287 - for node in dom.getElementsByTagName('forecast_information'):
288 - for unitsystem in node.getElementsByTagName('unit_system'):
289 - UnitSystem = unitsystem.getAttribute('data')
290 - if ConfigType != "3" and ConfigType != "4":
291 - font = ImageFont.truetype(FONT,20*Wmulti, encoding='unic')
296 - for node in dom.getElementsByTagName('forecast_conditions'):
297 - for day_of_week in node.getElementsByTagName('day_of_week'):
298 - Day = day_of_week.getAttribute('data')
299 - for high in node.getElementsByTagName('high'):
300 - High = high.getAttribute('data')
301 - if UnitSystem == "US":
302 - High = str(int((int(High)-32)*5/9))
303 - for low in node.getElementsByTagName('low'):
304 - Low = low.getAttribute('data')
305 - if UnitSystem == "US":
306 - Low = str(int((int(Low)-32)*5/9))
307 - for icon in node.getElementsByTagName('icon'):
308 - Icon = os.path.basename(icon.getAttribute('data'))
309 -# print "WetterData", Day, Low, High, Icon
310 - if os.path.isfile(WetterPath + Icon) and Icon.find("gif") > 1:
311 - pil_image = Image.open(WetterPath + Icon)
313 - pil_image = pil_image.resize((int(40*Wmulti), int(40*Wmulti)), Image.ANTIALIAS) #BILINEAR)
314 -# x,y=pil_image.size
315 - imW.paste(pil_image,(POSX,POSY+(20*Wmulti)))
316 - w,h = drawW.textsize(Day, font=font)
317 - drawW.text((POSX, POSY), Day, font=font)
318 - drawW.text((POSX, POSY+(60*Wmulti)), Low, font=font, fill="aquamarine")
319 - drawW.text((POSX+(25*Wmulti), POSY+(60*Wmulti)), High, font=font, fill="violet")
321 - POSX += (54*Wmulti)
330 - for node in dom.getElementsByTagName('current_conditions'):
331 - for temp_c in node.getElementsByTagName('temp_c'):
332 - Temp_c = temp_c.getAttribute('data') + "\xc2\xb0C"
333 - for hum in node.getElementsByTagName('humidity'):
334 - Hum1 = hum.getAttribute('data').replace("\xc2\xa0","").replace(" ","")
335 - Hum1 = Hum1.split(":")
337 - Hum = Hum1[len(Hum1)-1].lstrip()
338 - for wind in node.getElementsByTagName('wind_condition'):
339 - Wind = wind.getAttribute('data')
340 - Wind = Wind.split(":")
342 - Wind = Wind[len(Wind)-1].lstrip()
343 - for icon in node.getElementsByTagName('icon'):
344 - Icon = os.path.basename(icon.getAttribute('data'))
345 -# print "Temp, Hum", Temp_c, Hum, Wind, Icon
346 - if os.path.isfile(WetterPath + Icon) and Icon.find("gif") > 1:
347 - pil_image = Image.open(WetterPath + Icon)
349 - pil_image = pil_image.resize((int(40*Wmulti), int(40*Wmulti)), Image.ANTIALIAS) #BILINEAR)
350 -# x,y=pil_image.size
351 - if ConfigType == "4":
353 - imW.paste(pil_image,(POSX,POSY+(20*Wmulti)))
354 - if ConfigType == "4":
355 - font = ImageFont.truetype(FONT,(10*Wmulti), encoding='unic')
357 - font = ImageFont.truetype(FONT,(15*Wmulti), encoding='unic')
358 - minus5 = 0 if Wmulti != 1 else 5
359 - drawW.text((POSX-minus5, POSY+(64*Wmulti)), Wind, font=font, fill="silver")
360 - if ConfigType == "4":
361 - font = ImageFont.truetype(FONT,(20*Wmulti), encoding='unic')
363 - font = ImageFont.truetype(FONT,(25*Wmulti), encoding='unic')
364 - drawW.text((POSX+(45*Wmulti), POSY+(16*Wmulti)), Temp_c, font=font, fill="violet")
366 - if ConfigType == "4":
367 - font = ImageFont.truetype(FONT,(16*Wmulti), encoding='unic')
368 + weather = dom.getElementsByTagName("weather")
369 + if len(weather) == 0:
370 + print "get weather failed"
373 + weather = weather[0]
376 + return ImageFont.truetype(FONT, size, encoding='unic')
378 + if ConfigType in ("1","2","3","4","5"):
380 + if ConfigType in ("1","2"):
381 + Day="?"; High="?"; Low="?"; Icon=""
383 + drawW.line((POSX, POSY, POSX, MAX_H), fill=ConfigColorLine)
385 + for node in weather.getElementsByTagName('forecast'):
387 + if ConfigType == "1" and forecast_num > 2:
389 + elif ConfigType == "2" and forecast_num > 4:
391 + Day = node.getAttribute('shortday')
392 + High = node.getAttribute('high')
393 + Low = node.getAttribute('low')
394 + Icon = node.getAttribute('skycodeday')
395 + Skytextday = node.getAttribute('skytextday')
396 + Precip = node.getAttribute('precip')
397 + iconpath = WetterPath + Icon+'.png'
398 + if os.path.isfile(iconpath):
399 + pil_image = Image.open(iconpath)
400 + imW.paste(pil_image,(POSX+5,POSY+25), pil_image)
401 + drawW.text((POSX+13, POSY), Day, font=font, fill=ConfigColorDay)
402 + drawW.text((POSX+10, POSY+71), Low, font=font, fill=ConfigColorLow)
403 + drawW.text((POSX+37, POSY+71), High, font=font, fill=ConfigColorHigh)
404 + drawW.line((POSX+65, POSY, POSX+65, MAX_H), fill=ConfigColorLine)
406 + elif ConfigType in ("3", "4", "5"):
407 + Day="?"; High="?"; Low="?"; Icon=""
408 + if ConfigType == "5":
410 +# if ConfigType in ("3"):
411 +# drawW.line((0, 0, MAX_W/2, 0), fill=ConfigColorLine)
412 +# elif ConfigType in ("4"):
413 +# drawW.line((0, 0, MAX_W, 0), fill=ConfigColorLine)
414 + if ConfigType in ("5"):
415 + drawW.line((0, POSY, MAX_W, POSY), fill=ConfigColorLine)
417 + for node in weather.getElementsByTagName('forecast'):
419 + if ConfigType in ("3", "4") and forecast_num > 4:
421 + elif ConfigType == "5" and forecast_num > 2:
423 + Day = node.getAttribute('day')
424 + Low = node.getAttribute('low') + "\xc2\xb0"
425 + High = node.getAttribute('high') + "\xc2\xb0"
426 + Icon = node.getAttribute('skycodeday')
427 + Skytextday = node.getAttribute('skytextday')
428 + Precip = node.getAttribute('precip')
429 + iconpath = WetterPath + Icon+'.png'
430 + if os.path.isfile(iconpath):
431 + pil_image = Image.open(iconpath)
432 +# icon_w, icon_h = 55,45
433 + icon_w, icon_h = int(55*1.2), int(45*1.2)
434 + pil_image = pil_image.resize( (icon_w, icon_h), Image.ANTIALIAS) #BILINEAR)
435 + imW.paste(pil_image,(POSX, POSY), pil_image)
437 + drawW.text((POSX+icon_w-20, POSY-2), Precip, font=font, fill="cyan")
438 + drawW.text((POSX+icon_w+5, POSY+5), Day, font=font, fill=ConfigColorDay)
439 + drawW.text((POSX+icon_w+5, POSY+20), Low, font=font, fill=ConfigColorLow)
440 + drawW.text((POSX+icon_w+30, POSY+20), High, font=font, fill=ConfigColorHigh)
441 + drawW.text((POSX+icon_w+5, POSY+35), Skytextday, font=font, fill=ConfigColorSky)
442 + if ConfigType == "3":
443 + drawW.line((POSX, POSY+55, MAX_W/2, POSY+55), fill=ConfigColorLine)
445 + drawW.line((POSX, POSY+55, MAX_W, POSY+55), fill=ConfigColorLine)
449 + if ConfigType in ("1","2","5"):
450 + if ConfigType == "5":
452 + Hum = "?"; Wind = "?"; Temp = "?"; Icon=""
453 + current = weather.getElementsByTagName('current')
454 + if len(current) == 0:
455 + print "get current failed"
457 + current = current[0]
458 + ObservationPoint = current.getAttribute('observationpoint')
459 + ObservationTime = current.getAttribute('observationtime')
460 + Temp = current.getAttribute('temperature') + "\xc2\xb0"
461 + Hum = current.getAttribute('humidity') + "%"
462 + Wind = current.getAttribute('winddisplay')
463 + Icon = current.getAttribute("skycode")
464 + iconpath = WetterPath + Icon+'.png'
465 + if os.path.isfile(iconpath):
466 + pil_image = Image.open(iconpath)
467 + pil_image = pil_image.resize((int(55*1.4), int(45*1.4)), Image.ANTIALIAS) #BILINEAR)
468 + imW.paste(pil_image,(POSX+5, POSY+5+10), pil_image)
469 + drawW.text((POSX+5, POSY), ObservationPoint+' '+ObservationTime, font=getFont(12), fill=ConfigColorCity)
470 + drawW.text((POSX+15+62, POSY+5+15), Temp, font=getFont(25), fill=ConfigColorHigh)
471 + drawW.text((POSX+15+62, POSY+5+40), Hum, font=getFont(22), fill=ConfigColorLow)
472 + drawW.text((POSX+5, POSY+80), Wind, font=getFont(15), fill=ConfigColorSky)
474 + elif ConfigType in ("3"):
476 + drawW.line((POSX, POSY, POSX, MAX_H), fill=ConfigColorLine)
477 + Hum = "?"; Wind = "?"; Temp = "?"; Icon=""
478 + current = weather.getElementsByTagName('current')
479 + if len(current) == 0:
480 + print "get current failed"
483 - font = ImageFont.truetype(FONT,(22*Wmulti), encoding='unic')
484 - drawW.text((POSX+(45*Wmulti), POSY+(37*Wmulti)), Hum, font=font, fill="silver")
485 + current = current[0]
486 + ObservationPoint = current.getAttribute('observationpoint')
487 + ObservationTime = current.getAttribute('observationtime')
488 + Temp = 'Temp. : '+ current.getAttribute('temperature') + "\xc2\xb0"
489 + Hum = 'Hum : '+ current.getAttribute('humidity') + "%"
490 + Wind = 'Wind : '+ current.getAttribute('winddisplay')
491 + Icon = current.getAttribute("skycode")
492 + Skytext = 'Cond : ' + current.getAttribute('skytext')
493 + Feelslike = 'Feel : '+ current.getAttribute('feelslike')
494 + Date = 'Date : ' + current.getAttribute('date')
495 + iconpath = WetterPath + Icon+'.png'
496 + icon_w, icon_h = int(55*2.8), int(45*2.8)
497 + if os.path.isfile(iconpath):
498 + pil_image = Image.open(iconpath)
499 + pil_image = pil_image.resize( (icon_w, icon_h), Image.ANTIALIAS) #BILINEAR
500 + imW.paste(pil_image,(POSX+5, POSY+5), pil_image)
502 + drawW.text((POSX+20, POSY+3+icon_h), Temp, font=font, fill=ConfigColorHigh)
503 + drawW.text((POSX+20+80, POSY+3+icon_h), Hum, font=font, fill=ConfigColorLow)
504 + drawW.text((POSX+20, POSY+3+icon_h+20), Skytext, font=font, fill=ConfigColorSky)
505 + drawW.text((POSX+20, POSY+3+icon_h+40), Wind, font=font, fill=ConfigColorLow)
506 + drawW.text((POSX+20, POSY+3+icon_h+60), Date, font=font, fill=ConfigColorCity)
507 + font = ImageFont.truetype(FONT,15, encoding='unic')
508 + drawW.text((POSX+20, MAX_H-25), ObservationPoint+' '+ObservationTime, font=font, fill=ConfigColorCity)
511 - im.paste(imW,(0,ConfigPos))
512 + im.paste(imW,(ConfigPosX,ConfigPosY))
516 @@ -1977,51 +2079,6 @@
517 lx = getSplit(ConfigSplit,ConfigAlign,MAX_W,w)
518 draw.text((lx, ConfigPos), i, font=font, fill=ConfigColor)
521 - def putOSCAM(ConfigPos, ConfigSize, ConfigColor, ConfigBackColor, ConfigAlign, ConfigSplit, draw, im):
522 - MAX_W,MAX_H = im.size
523 - OSCAMrunning = False
524 - if ConfigSplit == True:
525 - MAX_W = int(MAX_W/2)
526 - POSX = getSplit(ConfigSplit,ConfigAlign,MAX_W,MAX_W)
527 - if os.path.isfile(config.plugins.LCD4linux.OSCAMFile.value):
528 - current_h=ConfigPos
529 - if time()-os.path.getmtime(config.plugins.LCD4linux.OSCAMFile.value) < 30:
530 - OSCAMrunning = True
531 - font = ImageFont.truetype(FONT, ConfigSize, encoding='unic')
532 - p=[160,12.8,3.2,2,1.78,1.6,1.45,1.33]
534 - f = open(config.plugins.LCD4linux.OSCAMFile.value,"r")
535 - for line in f.readlines():
536 - line = line.replace('\xc2\x86', '').replace('\xc2\x87', '').replace('\n','').decode("utf-8", "ignore").encode("utf-8") or ""
537 - line = codecs.decode(line, 'UTF-8')
538 - w,h = draw.textsize(line, font=font)
539 - if ConfigBackColor !="0":
540 - if line.find(" Label ") > 0:
541 - draw.rectangle((POSX, current_h, POSX+MAX_W, current_h+h),fill=ConfigColor)
543 - draw.rectangle((POSX, current_h, POSX+MAX_W, current_h+h),fill=ConfigBackColor)
544 - if line.find("|") >0:
545 - ll = line.split("|")
547 - p=[160,10.67,2.91,1.14,1.03]
549 - p=[160,10.67,2.91,1.78,1.14,1.03]
551 - p=[160,10.67,2.91,1.78,1.6,1.45,1.33,1.14,1.03]
552 - for x in range(len(ll)):
553 - if line.find(" Label ") > 0:
554 - draw.text((POSX+int(MAX_W/p[x]), current_h), ll[x].strip(), font=font, fill=ConfigBackColor)
556 - draw.text((POSX+int(MAX_W/p[x]), current_h), ll[x].strip(), font=font, fill=ConfigColor)
559 - if OSCAMrunning == False:
560 - font = ImageFont.truetype(FONT, ConfigSize+13, encoding='unic')
561 - w,h = draw.textsize(codecs.decode(_("OSCAM not running"), 'UTF-8'), font=font)
562 - draw.rectangle((POSX, ConfigPos, POSX+MAX_W, ConfigPos+h),fill=ConfigBackColor)
563 - draw.text((POSX+(MAX_W-w)/2, ConfigPos), codecs.decode(_("OSCAM not running"), 'UTF-8'), font=font, fill=ConfigColor)
566 def putTitle(ConfigPos, ConfigSize, ConfigLines, ConfigColor, ConfigAlign, ConfigSplit, draw, im):
567 MAX_W,MAX_H = im.size
568 @@ -2110,13 +2167,23 @@
569 if isOffTime(config.plugins.LCD4linux.StandbyLCDoff.value,config.plugins.LCD4linux.StandbyLCDon.value):
571 print "[LCD4linux] LCD off"
573 - if config.plugins.LCD4linux.StandbyWetter.value.find(ScreenActive) >= 0 and wwwWetter.find("forecast_information") > 1:
575 + if config.plugins.LCD4linux.StandbyWetter.value.find(ScreenActive) >= 0 and wwwWetter.find("forecast") > 1:
577 + config.plugins.LCD4linux.StandbyWetterPosX.value,
578 + config.plugins.LCD4linux.StandbyWetterPosY.value,
579 + config.plugins.LCD4linux.StandbyWetterType.value,
580 + config.plugins.LCD4linux.WetterColor.value,
581 + config.plugins.LCD4linux.WetterColorLow.value,
582 + config.plugins.LCD4linux.WetterColorHigh.value,
583 + config.plugins.LCD4linux.WetterColorLine.value,
584 + config.plugins.LCD4linux.WetterColorDay.value,
585 + config.plugins.LCD4linux.WetterColorCity.value,
586 + config.plugins.LCD4linux.WetterColorSky.value)
587 if config.plugins.LCD4linux.StandbyWetterLCD.value.find("1") >= 0:
588 - putWetter(config.plugins.LCD4linux.StandbyWetterPos.value,config.plugins.LCD4linux.StandbyWetterType.value,draw,im)
589 + putWetter(params, draw, im)
590 if config.plugins.LCD4linux.StandbyWetterLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00":
591 - putWetter(config.plugins.LCD4linux.StandbyWetterPos.value,config.plugins.LCD4linux.StandbyWetterType.value,draw2,im2)
593 + putWetter(params, draw2, im2)
595 if config.plugins.LCD4linux.StandbyClock.value.find(ScreenActive) >= 0:
596 if config.plugins.LCD4linux.StandbyClockLCD.value.find("1") >= 0:
597 @@ -2157,12 +2224,6 @@
598 putBild(config.plugins.LCD4linux.StandbyBildPos.value, config.plugins.LCD4linux.StandbyBildSize.value, config.plugins.LCD4linux.StandbyBildAlign.value, ShowPicture, im)
599 if config.plugins.LCD4linux.StandbyBildLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00":
600 putBild(config.plugins.LCD4linux.StandbyBildPos.value, config.plugins.LCD4linux.StandbyBildSize.value, config.plugins.LCD4linux.StandbyBildAlign.value, ShowPicture, im2)
602 - if config.plugins.LCD4linux.StandbyOSCAM.value.find(ScreenActive) >= 0:
603 - if config.plugins.LCD4linux.StandbyOSCAMLCD.value.find("1") >= 0:
604 - putOSCAM(config.plugins.LCD4linux.StandbyOSCAMPos.value, config.plugins.LCD4linux.StandbyOSCAMSize.value, config.plugins.LCD4linux.StandbyOSCAMColor.value, config.plugins.LCD4linux.StandbyOSCAMBackColor.value, config.plugins.LCD4linux.StandbyOSCAMAlign.value, config.plugins.LCD4linux.StandbyOSCAMSplit.value, draw, im)
605 - if config.plugins.LCD4linux.StandbyOSCAMLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00":
606 - putOSCAM(config.plugins.LCD4linux.StandbyOSCAMPos.value, config.plugins.LCD4linux.StandbyOSCAMSize.value, config.plugins.LCD4linux.StandbyOSCAMColor.value, config.plugins.LCD4linux.StandbyOSCAMBackColor.value, config.plugins.LCD4linux.StandbyOSCAMAlign.value, config.plugins.LCD4linux.StandbyOSCAMSplit.value, draw2, im2)
608 if config.plugins.LCD4linux.StandbyText.value.find(ScreenActive) >= 0:
609 if config.plugins.LCD4linux.StandbyTextLCD.value.find("1") >= 0:
610 @@ -2240,12 +2301,23 @@
611 putPicon(config.plugins.LCD4linux.PiconSize.value, config.plugins.LCD4linux.PiconType.value, config.plugins.LCD4linux.PiconAlign.value, config.plugins.LCD4linux.PiconTextSize.value, draw, im)
612 if config.plugins.LCD4linux.PiconLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00":
613 putPicon(config.plugins.LCD4linux.PiconSize.value, config.plugins.LCD4linux.PiconType.value, config.plugins.LCD4linux.PiconAlign.value, config.plugins.LCD4linux.PiconTextSize.value, draw2, im2)
615 - if config.plugins.LCD4linux.Wetter.value.find(ScreenActive) >= 0 and wwwWetter.find("forecast_information") > 1:
617 + if config.plugins.LCD4linux.Wetter.value.find(ScreenActive) >= 0 and wwwWetter.find("forecast") > 1:
619 + config.plugins.LCD4linux.WetterPosX.value,
620 + config.plugins.LCD4linux.WetterPosY.value,
621 + config.plugins.LCD4linux.WetterType.value,
622 + config.plugins.LCD4linux.WetterColor.value,
623 + config.plugins.LCD4linux.WetterColorLow.value,
624 + config.plugins.LCD4linux.WetterColorHigh.value,
625 + config.plugins.LCD4linux.WetterColorLine.value,
626 + config.plugins.LCD4linux.WetterColorDay.value,
627 + config.plugins.LCD4linux.WetterColorCity.value,
628 + config.plugins.LCD4linux.WetterColorSky.value)
629 if config.plugins.LCD4linux.WetterLCD.value.find("1") >= 0:
630 - putWetter(config.plugins.LCD4linux.WetterPos.value,config.plugins.LCD4linux.WetterType.value,draw,im)
631 + putWetter(params, draw, im)
632 if config.plugins.LCD4linux.WetterLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00":
633 - putWetter(config.plugins.LCD4linux.WetterPos.value,config.plugins.LCD4linux.WetterType.value,draw2,im2)
634 + putWetter(params, draw2, im2)
636 if config.plugins.LCD4linux.Clock.value.find(ScreenActive) >= 0:
637 if config.plugins.LCD4linux.ClockLCD.value.find("1") >= 0:
638 @@ -2259,11 +2331,11 @@
639 if config.plugins.LCD4linux.InfoLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00":
640 putInfo(config.plugins.LCD4linux.InfoPos.value, config.plugins.LCD4linux.InfoSize.value,config.plugins.LCD4linux.InfoAlign.value,config.plugins.LCD4linux.InfoSplit.value,config.plugins.LCD4linux.InfoColor.value,config.plugins.LCD4linux.InfoTuner.value+config.plugins.LCD4linux.InfoSensor.value, draw2, im2)
642 - if config.plugins.LCD4linux.Timer.value.find(ScreenActive) >= 0:
643 - if config.plugins.LCD4linux.TimerLCD.value.find("1") >= 0:
644 - putTimer(config.plugins.LCD4linux.TimerPos.value, config.plugins.LCD4linux.TimerSize.value, config.plugins.LCD4linux.TimerColor.value, draw, im)
645 - if config.plugins.LCD4linux.TimerLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00":
646 - putTimer(config.plugins.LCD4linux.TimerPos.value, config.plugins.LCD4linux.TimerSize.value, config.plugins.LCD4linux.TimerColor.value, draw2, im2)
647 + if config.plugins.LCD4linux.Timer.value.find(ScreenActive) >= 0:
648 + if config.plugins.LCD4linux.TimerLCD.value.find("1") >= 0:
649 + putTimer(config.plugins.LCD4linux.TimerPos.value, config.plugins.LCD4linux.TimerSize.value, config.plugins.LCD4linux.TimerColor.value, draw, im)
650 + if config.plugins.LCD4linux.TimerLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00":
651 + putTimer(config.plugins.LCD4linux.TimerPos.value, config.plugins.LCD4linux.TimerSize.value, config.plugins.LCD4linux.TimerColor.value, draw2, im2)
652 # aktive Sendernummer
653 if config.plugins.LCD4linux.ChannelNum.value.find(ScreenActive) >= 0:
654 if config.plugins.LCD4linux.ChannelNumLCD.value.find("1") >= 0:
655 @@ -2324,12 +2396,6 @@
656 putBild(config.plugins.LCD4linux.BildPos.value, config.plugins.LCD4linux.BildSize.value, config.plugins.LCD4linux.BildAlign.value, ShowPicture, im)
657 if config.plugins.LCD4linux.BildLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00":
658 putBild(config.plugins.LCD4linux.BildPos.value, config.plugins.LCD4linux.BildSize.value, config.plugins.LCD4linux.BildAlign.value, ShowPicture, im2)
660 - if config.plugins.LCD4linux.OSCAM.value.find(ScreenActive) >= 0:
661 - if config.plugins.LCD4linux.OSCAMLCD.value.find("1") >= 0:
662 - putOSCAM(config.plugins.LCD4linux.OSCAMPos.value, config.plugins.LCD4linux.OSCAMSize.value, config.plugins.LCD4linux.OSCAMColor.value, config.plugins.LCD4linux.OSCAMBackColor.value, config.plugins.LCD4linux.OSCAMAlign.value, config.plugins.LCD4linux.OSCAMSplit.value, draw, im)
663 - if config.plugins.LCD4linux.OSCAMLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00":
664 - putOSCAM(config.plugins.LCD4linux.OSCAMPos.value, config.plugins.LCD4linux.OSCAMSize.value, config.plugins.LCD4linux.OSCAMColor.value, config.plugins.LCD4linux.OSCAMBackColor.value, config.plugins.LCD4linux.OSCAMAlign.value, config.plugins.LCD4linux.OSCAMSplit.value, draw2, im2)
666 if config.plugins.LCD4linux.Text.value.find(ScreenActive) >= 0:
667 if config.plugins.LCD4linux.TextLCD.value.find("1") >= 0:
668 @@ -2440,3 +2506,4 @@