Esempio n. 1
0
    def __init__(self, screensection, screenname):
        debugprint(config.dbgscreenbuild, "New WeatherScreenDesc ", screenname)

        screen.ScreenDesc.__init__(self, screensection, screenname,
                                   (('which', ('', )), ))
        utilities.LocalizeParams(self,
                                 screensection,
                                 WunderKey='',
                                 location='')
        self.scrlabel = screen.FlatenScreenLabel(self.label)
        # entries are (fontsize, centered, formatstring, values)
        self.conditions = [
            (2, True, "{d}", self.scrlabel),
            (1, True, "{d[0]}", ('Location', )),
            (1, False, u"Now: {d[0]} {d[1]}\u00B0F", ('Sky', 'Temp')),
            (0, False, u"  Feels like: {d[0]}\u00B0", ('Feels', )),
            (1, False, "Wind {d[0]}", ('WindStr', )),
            (1, False, "Sunrise: {d[0]:02d}:{d[1]:02d}", ('SunriseH',
                                                          'SunriseM')),
            (1, False, "Sunset:  {d[0]:02d}:{d[1]:02d}", ('SunsetH',
                                                          'SunsetM')),
            (0, False, "Moon rise: {d[0]} set: {d[1]}", ('Moonrise',
                                                         'Moonset')),
            (0, False, "     {d[0]}% illuminated", ('MoonPct', )),
            (0, False, "will be replaced", "")
        ]
        self.forecast = [
            (1, False, u"{d[0]}   {d[1]}\u00B0/{d[2]}\u00B0 {d[3]}",
             ('Day', 'High', 'Low', 'Sky')),
            (1, False, "Wind: {d[0]} at {d[1]}", ('WindDir', 'WindSpd'))
        ]
        self.Info = weatherinfo.WeatherInfo(self.WunderKey, self.location)
        utilities.register_example("WeatherScreenDesc", self)
Esempio n. 2
0
 def __init__(self, name, keys, overrides=fixedoverrides):
     screen.BaseKeyScreenDesc.__init__(self, overrides, name)
     debug.debugPrint('Screen', "Build Maintenance Screen")
     self.NavKeysShowing = False
     self.DefaultNavKeysShowing = False
     screen.AddUndefaultedParams(self,
                                 None,
                                 TitleFontSize=40,
                                 SubFontSize=25)
     for k, kt in keys.items():
         NK = toucharea.ManualKeyDesc(self,
                                      k, [kt[0]],
                                      'gold',
                                      'black',
                                      'red',
                                      KOn='black',
                                      KOff='red')
         if kt[1] is not None:
             if len(
                     kt
             ) == 3:  # need to add key reference to the proc for this key
                 NK.Proc = functools.partial(kt[1], NK)
             else:
                 NK.Proc = kt[1]
         self.Keys[k] = NK
     topoff = self.TitleFontSize + self.SubFontSize
     self.LayoutKeys(topoff, self.useablevertspacesansnav - topoff)
     self.DimTO = 60
     self.PersistTO = 1  # setting to 0 would turn off timer and stick us here
     utilities.register_example("MaintScreenDesc", self)
Esempio n. 3
0
	def __init__(self, screensection, screenname):
		debugPrint('BuildScreen', "Build House Status Screen")
		screen.ScreenDesc.__init__(self, screensection, screenname, ())  # no extra cmd keys
		utilities.LocalizeParams(self, screensection, NormalOn=[], NormalOff=[])
		checklist = [nm for nm in config.ISY.NodesByName if
					 ((nm in self.NormalOn) or (nm in self.NormalOff))]  # addr -> name
		utilities.register_example("HouseStatusScreenDesc", self)
Esempio n. 4
0
	def __init__(self, screensection, screenname, ExtraCmdButs=(), withnav=True):
		self.name = screenname
		self.keysbyord = []
		utilities.LocalizeParams(self, screensection, 'CharColor', 'DimTO', 'BackgroundColor', 'CmdKeyCol',
								 'CmdCharCol', label=[screenname])
		self.WithNav = withnav
		self.PrevScreen = self.NextScreen = None
		cbutwidth = (config.screenwidth - 2*config.horizborder)/(2 + len(ExtraCmdButs))
		cvertcenter = config.screenheight - config.botborder/2
		cbutheight = config.botborder - config.cmdvertspace*2
		# todo condition on withnav?  if False then None? if change then also fix FinishScreen not to fail on none
		self.PrevScreenKey = toucharea.ManualKeyDesc('**prev**', ['**prev**'],
													 self.CmdKeyCol, self.CmdCharCol, self.CmdCharCol,
													 center=(config.horizborder + .5*cbutwidth, cvertcenter),
													 size=(cbutwidth, cbutheight))
		self.NextScreenKey = toucharea.ManualKeyDesc('**next**', ['**next**'],
													 self.CmdKeyCol, self.CmdCharCol, self.CmdCharCol,
													 center=(
														 config.horizborder + (1 + len(ExtraCmdButs) + .5)*cbutwidth,
														 cvertcenter), size=(cbutwidth, cbutheight))
		self.ExtraCmdKeys = []
		for i in range(len(ExtraCmdButs)):
			hcenter = config.horizborder + (i + 1.5)*cbutwidth
			self.ExtraCmdKeys.append(toucharea.ManualKeyDesc(ExtraCmdButs[i][0], ExtraCmdButs[i][1],
															 self.CmdKeyCol, self.CmdCharCol, self.CmdCharCol,
															 center=(hcenter, cvertcenter),
															 size=(cbutwidth, cbutheight)))
			self.ExtraCmdKeys[-1].FinishKey((0,0),(0,0))
		utilities.register_example('ScreenDesc', self)
Esempio n. 5
0
	def __init__(self, screensection, screenname):
		debugPrint('BuildScreen', "Build Clock Screen")
		screen.ScreenDesc.__init__(self, screensection, screenname)
		utilities.LocalizeParams(self, screensection, CharSize=[20], Font='droidsansmono', OutFormat=[])
		for i in range(len(self.CharSize), len(self.OutFormat)):
			self.CharSize.append(self.CharSize[-1])
		utilities.register_example("ClockScreen", self)
Esempio n. 6
0
	def __init__(self, thisscreen, keysection, kn, keytype):
		keyname, self.Hub = _resolvekeyname(kn, thisscreen.DefaultHubObj)
		#self.ControlObj = None  # object on which to make operation calls
		self.DisplayObj = None  # object whose state is reflected in key

		debug.debugPrint('Screen', "             New ", keytype, " Key Desc ", keyname)
		ManualKeyDesc.__init__(self, thisscreen, keysection, keyname)
		screen.AddUndefaultedParams(self, keysection, SceneProxy='', NodeName='')

		if keyname == '*Action*': keyname = self.NodeName  # special case for alert screen action keys that always have same name todo - can nodename ever be explicitly set otherwise?
		self.ControlObj, self.DisplayObj = self.Hub.GetNode(keyname, self.SceneProxy)

		if self.ControlObjUndefined():
			debug.debugPrint('Screen', "Screen", keyname, "unbound")
			logsupport.Logs.Log('Key Binding missing: ' + self.name, severity=ConsoleWarning)

		if self.Verify:
			self.VerifyScreen = supportscreens.VerifyScreen(self, self.GoMsg, self.NoGoMsg, self.Verified, None,
															thisscreen, self.KeyColorOff,
															thisscreen.BackgroundColor, thisscreen.CharColor,
															self.State, thisscreen.HubInterestList)
			self.Proc = self.VerifyScreen.Invoke  # todo make this a goto key; make verify screen always do a pop and get rid of the switch screens below
		else:
			self.Proc = self.KeyPressAction
			self.ProcDblTap = self.KeyPressActionDbl

		if keytype == 'ONOFF':
			self.KeyAction = 'OnOff'
		elif keytype == 'ON':
			self.KeyAction = 'On'
		else:
			self.KeyAction = 'Off'

		utilities.register_example("OnOffKey", self)
Esempio n. 7
0
	def __init__(self, thisscreen, keysection, keyname):
		debug.debugPrint('Screen', "             New SetVar Key Desc ", keyname)
		ManualKeyDesc.__init__(self, thisscreen, keysection, keyname)
		screen.AddUndefaultedParams(self, keysection, VarType='undef', Var='', Value=0)
		try:
			self.Proc = self.SetVarKeyPressed
			if self.VarType != 'undef':  # deprecate

				if self.VarType == 'State':
					self.VarName = (hubs.hubs.defaulthub.name, 'State', self.Var)  # use default hub for each of these 2
				elif self.VarType == 'Int':
					self.VarName = (hubs.hubs.defaulthub.name, 'Int', self.Var)
				elif self.VarType == 'Local':
					self.VarName = ('LocalVars', self.Var)
				else:
					logsupport.Logs.Log('VarType not specified for key ', self.Var, ' on screen ', thisscreen.name,
										severity=ConsoleWarning)
					self.Proc = ErrorKey
				logsupport.Logs.Log('VarKey definition using depreacted VarKey ', self.VarType, ' change to ',
									valuestore.ExternalizeVarName(self.VarName), severity=ConsoleWarning)
			else:
				self.VarName = self.Var.split(':')
		except Exception as e:
			logsupport.Logs.Log('Var key error on screen: ' + thisscreen.name + ' Var: ' + self.Var,
								severity=ConsoleWarning)
			logsupport.Logs.Log('Excpt: ', str(e))
			self.Proc = ErrorKey

		utilities.register_example("SetVarKey", self)
Esempio n. 8
0
    def __init__(self, *args, **kwargs):
        self.State = True
        self.UnknownState = False
        self.KeyOnImage = None  # type: pygame.Surface
        self.KeyOffImage = None  # type: pygame.Surface
        self.KeyOnImageBase = None  # type: pygame.Surface
        self.KeyOffImageBase = None  # type: pygame.Surface
        self.KeyUnknownOverlay = None  # type: pygame.Surface
        self.userstore = None
        self.BlinkTimer = None
        self.autocolordull = True
        self.usekeygaps = True

        # alternate creation signatures
        self.ButtonFontSizes = (31, 28, 25, 22, 20, 18, 16)
        if len(args) == 3:
            # signature: ManualKeyDesc(screen, keysection, keyname)
            # initialize by reading config file
            self.dosectioninit(*args)
        else:
            # signature: ManualKeyDesc(screen, keyname, label, bcolor, charcoloron, charcoloroff, center=, size=, KOn=, KOff=, proc=)
            # initializing from program code case
            self.docodeinit(*args, **kwargs)
        # Future may need to change signature if handling "holds"?

        self.autocolordull = self.KeyColorOff == ''
        if self.KeyColorOff == '':
            self.KeyColorOff = self.KeyColor
        if self.KeyColorOn == '':
            self.KeyColorOn = self.KeyColor
        if self.Size[0] != 0:  # this key can be imaged now since it has a size
            self.FinishKey((0, 0), (0, 0))
        utilities.register_example("ManualKeyDesc", self)
Esempio n. 9
0
	def __init__(self, keysection, keyname):
		debugPrint('BuildScreen', "             New Key Desc ", keyname)
		toucharea.ManualKeyDesc.__init__(self, keysection, keyname)
		utilities.LocalizeParams(self, keysection, SceneProxy='', KeyRunThenName='', type='ONOFF')
		self.MonitorObj = None  # ISY Object monitored to reflect state in the key (generally a device within a Scene)

		# for ONOFF keys (and others later) map the real and monitored nodes in the ISY
		# map the key to a scene or device - prefer to map to a scene so check that first
		# Obj is the representation of the ISY Object itself, addr is the address of the ISY device/scene
		if self.type in ('ONOFF'):
			if keyname in config.ISY.ScenesByName:
				self.RealObj = config.ISY.ScenesByName[keyname]
				if self.SceneProxy <> '':
					# explicit proxy assigned
					if self.SceneProxy in config.ISY.NodesByAddr:
						# address given
						self.MonitorObj = config.ISY.NodesByAddr[self.SceneProxy]
						debugPrint('BuildScreen', "Scene ", keyname, " explicit address proxying with ",
								   self.MonitorObj.name, '(', self.SceneProxy, ')')
					elif self.SceneProxy in config.ISY.NodesByName:
						self.MonitorObj = config.ISY.NodesByName[self.SceneProxy]
						debugPrint('BuildScreen', "Scene ", keyname, " explicit name proxying with ",
								   self.MonitorObj.name, '(', self.MonitorObj.address, ')')
					else:
						config.Logs.Log('Bad explicit scene proxy:' + self.name, severity=ConsoleWarning)
				else:
					for i in self.RealObj.members:
						device = i[1]
						if device.enabled and device.hasstatus:
							self.MonitorObj = device
							# todo   try to status the device here to see if it will respond
							break
						else:
							config.Logs.Log('Skipping disabled/nonstatus device: ' + device.name, severity=ConsoleWarning)
					if self.MonitorObj is None:
						config.Logs.Log("No proxy for scene: " + keyname, severity=ConsoleError)
					debugPrint('BuildScreen', "Scene ", keyname, " default proxying with ",
							   self.MonitorObj.name)
			elif keyname in config.ISY.NodesByName:
				self.RealObj = config.ISY.NodesByName[keyname]
				self.MonitorObj = self.RealObj
			else:
				debugPrint('BuildScreen', "Screen", keyname, "unbound")
				config.Logs.Log('Key Binding missing: ' + self.name, severity=ConsoleWarning)
		elif self.type in ("ONBLINKRUNTHEN"):
			self.State = False
			try:
				self.RealObj = config.ISY.ProgramsByName[self.KeyRunThenName]
			except:
				self.RealObj = None
				debugPrint('BuildScreen', "Unbound program key: ", self.name)
				config.Logs.Log("Missing Prog binding: " + self.name, severity=ConsoleWarning)
		else:
			debugPrint('BuildScreen', "Unknown key type: ", self.name)
			config.Logs.Log("Bad keytype: " + self.name, severity=ConsoleWarning)

		utilities.register_example("KeyDesc", self)

		debugPrint('BuildScreen', repr(self))
Esempio n. 10
0
	def __init__(self, thisscreen, keysection, keyname):
		debug.debugPrint('Screen', "             New SetVarValue Key Desc ", keyname)
		self.Value = None
		ManualKeyDesc.__init__(self, thisscreen, keysection, keyname)
		screen.AddUndefaultedParams(self, keysection, Var='')
		self.Proc = self.SetVarValue

		utilities.register_example("SetVarValueKey", self)
Esempio n. 11
0
 def __init__(self):
     screen.BaseKeyScreenDesc.__init__(self, None, 'LOG', withnav=False)
     self.keysbyord = [
         toucharea.TouchPoint(
             (config.screenwidth / 2, config.screenheight / 2),
             (config.screenwidth, config.screenheight))
     ]
     utilities.register_example("LogDisplayScreen", self)
Esempio n. 12
0
	def __init__(self, thisscreen, keysection, keyname):
		debug.debugPrint('Screen', "             New Blank Key Desc ", keyname)
		ManualKeyDesc.__init__(self, thisscreen, keysection, keyname)
		self.Proc = ErrorKey
		self.State = False
		self.label = self.label.append('(NoOp)')

		utilities.register_example("BlankKey", self)
Esempio n. 13
0
 def __init__(self):
     screen.BaseKeyScreenDesc.__init__(self, None, "LOG", withnav=False)
     self.keysbyord = [
         toucharea.TouchPoint(
             (config.screenwidth / 2, config.screenheight / 2), (config.screenwidth, config.screenheight)
         )
     ]
     utilities.register_example("LogDisplayScreen", self)
Esempio n. 14
0
	def __init__(self, screensection, screenname, parentscreen=None):
		ScreenDesc.__init__(self, screensection, screenname, parentscreen=parentscreen)

		AddUndefaultedParams(self, screensection, KeysPerColumn=0, KeysPerRow=0)

		self.buttonsperrow = -1
		self.buttonspercol = -1
		utilities.register_example('BaseKeyScreenDesc', self)
Esempio n. 15
0
 def __init__(self, screensection, screenname):
     debugprint(config.dbgscreenbuild, "Build Clock Screen")
     screen.ScreenDesc.__init__(self, screensection, screenname)
     utilities.LocalizeParams(self,
                              screensection,
                              CharSize=[20],
                              Font='droidsansmono',
                              OutFormat=[])
     for i in range(len(self.CharSize), len(self.OutFormat)):
         self.CharSize.append(self.CharSize[-1])
     utilities.register_example("ClockScreen", self)
Esempio n. 16
0
 def __init__(self, name, Center, Size, proc=None, procdbl=None):
     self.name = name
     self.Size = Size
     self.GappedSize = Size
     self.Center = Center
     self.Screen = None
     self.ControlObj = None
     self.Proc = proc  # function that gets called on touch - expects to take a single parameter which is thee type of press
     self.ProcDblTap = procdbl
     self.Verify = False
     utilities.register_example("TouchPoint", self)
Esempio n. 17
0
 def __init__(self,
              screensection,
              screenname,
              ExtraCmdButs=(),
              withnav=True):
     ScreenDesc.__init__(self, screensection, screenname, ExtraCmdButs,
                         withnav)
     utilities.LocalizeParams(self, None)
     self.buttonsperrow = -1
     self.buttonspercol = -1
     utilities.register_example('BaseKeyScreenDesc', self)
Esempio n. 18
0
 def __init__(self, keys):
     debugPrint("BuildScreen", "Build Maintenance Screen")
     screen.BaseKeyScreenDesc.__init__(self, fixedoverrides, "Maint", withnav=False)
     utilities.LocalizeParams(self, None, TitleFontSize=40, SubFontSize=25)
     self.keysbyord = []
     for k, kt in keys.iteritems():
         self.keysbyord.append(
             toucharea.ManualKeyDesc(k, [kt[0]], "gold", "black", "white", KOn="black", KOff="white", proc=kt[1])
         )
     topoff = self.TitleFontSize + self.SubFontSize
     self.LayoutKeys(topoff, config.screenheight - 2 * config.topborder - topoff)
     utilities.register_example("MaintScreenDesc", self)
Esempio n. 19
0
    def __init__(self, screensection, screenname):
        debug.debugPrint('Screen', "New WeatherScreenDesc ", screenname)
        screen.ScreenDesc.__init__(self, screensection, screenname)

        self.fmt = WFormatter()

        butsize = self.ButSize(1, 1, 0)
        self.Keys = OrderedDict({
            'condorfcst':
            toucharea.TouchPoint('condorfcst',
                                 (self.HorizBorder + .5 * butsize[0],
                                  self.TopBorder + .5 * butsize[1]),
                                 butsize,
                                 proc=self.CondOrFcst)
        })
        self.currentconditions = True  # show conditions or forecast
        screen.AddUndefaultedParams(self,
                                    screensection,
                                    location='',
                                    LocationSize=40)

        self.SetScreenTitle(screen.FlatenScreenLabel(self.label), 50,
                            self.CharColor)

        self.condformat = u"{d[0]} {d[1]}\u00B0F", u"  Feels like: {d[2]}\u00B0", "Wind {d[3]}@{d[4]}"
        self.condfields = list(
            ((self.location, 'Cond', x)
             for x in ('Sky', 'Temp', 'Feels', 'WindDir', 'WindMPH')))

        # self.dayformat  = "Sunrise: {d[0]:02d}:{d[1]:02d}","Sunset:  {d[2]:02d}:{d[3]:02d}","Moon rise: {d[4]} set: {d[5]}","{d[6]}% illuminated"
        # self.dayfields  = list(((self.location, 'Cond', x) for x in ('SunriseH','SunriseM','SunsetH','SunsetM','Moonrise','Moonset','MoonPct')))
        self.dayformat = "Sunrise: {d[0]}", "Sunset:  {d[1]}", "Moon rise: {d[2]} set: {d[3]}"
        self.dayfields = list(
            ((self.location, 'Cond', x)
             for x in ('Sunrise', 'Sunset', 'Moonrise', 'Moonset')))

        self.footformat = "Readings as of {d[0]}",
        self.footfields = ((self.location, 'Cond', 'Age'), )

        self.fcstformat = u"{d[0]}   {d[1]}\u00B0/{d[2]}\u00B0 {d[3]}", "Wind: {d[4]}"
        self.fcstfields = list(
            ((self.location, 'Fcst', x)
             for x in ('Day', 'High', 'Low', 'Sky', 'WindSpd')))

        try:
            self.store = valuestore.ValueStores[self.location]
        except KeyError:
            logsupport.Logs.Log(
                "Weather screen {} using non-existent location {}".format(
                    screenname, self.location),
                severity=logsupport.ConsoleWarning)
            raise ValueError
        utilities.register_example("WeatherScreenDesc", self)
Esempio n. 20
0
	def __init__(self, screensection, screenname):
		debugPrint('BuildScreen', "New KeyScreenDesc ", screenname)
		screen.BaseKeyScreenDesc.__init__(self, screensection, screenname)
		self.subscriptionlist = {}

		# Build the Key objects
		for keyname in screensection:
			if isinstance(screensection[keyname], Section):
				NewKey = keydesc.KeyDesc(screensection[keyname], keyname)
				self.keysbyord.append(NewKey)

		self.LayoutKeys()
		utilities.register_example("KeyScreenDesc", self)
Esempio n. 21
0
    def __init__(self, screensection, screenname):
        debugprint(config.dbgscreenbuild, "New KeyScreenDesc ", screenname)
        screen.BaseKeyScreenDesc.__init__(self, screensection, screenname)
        self.subscriptionlist = {}

        # Build the Key objects
        for keyname in screensection:
            if isinstance(screensection[keyname], Section):
                NewKey = keydesc.KeyDesc(screensection[keyname], keyname)
                self.keysbyord.append(NewKey)

        self.LayoutKeys()
        utilities.register_example("KeyScreenDesc", self)
Esempio n. 22
0
	def __init__(self, flag, name, addr, parenttyp, parent, members):
		"""

		:rtype: Scene
		"""
		TreeItem.__init__(self, name, addr, parent)
		self.flag = flag
		self.parenttype = parenttyp
		# self.devGroup = devGroup
		self.members = members
		self.proxy = ""
		self.obj = None
		utilities.register_example("Scene", self)
Esempio n. 23
0
    def __init__(self, hub, flag, name, addr, parenttyp, parent, members):
        """

		:rtype: Scene
		"""
        TreeItem.__init__(self, hub, name, addr, parent)
        self.flag = flag
        self.parenttype = parenttyp
        # self.devGroup = devGroup
        self.members = members
        self.proxy = ""
        self.obj = None
        utilities.register_example("Scene", self)
Esempio n. 24
0
 def __init__(self, *args, **kwargs):
     # alternate creation signatures
     self.ButtonFontSizes = (31, 28, 25, 22, 20, 18, 16)
     self.DynamicLabel = False
     if len(args) == 2:
         # signature: ManualKeyDesc(keysection, keyname)
         # initialize by reading config file
         self.dosectioninit(*args)
     else:
         # signature: ManualKeyDesc(keyname, label, bcolor, charcoloron, charcoloroff, center=, size=, KOn=, KOff=, proc=)
         # initializing from program code case
         self.docodeinit(*args, **kwargs)
     utilities.register_example("ManualKeyDesc", self)
Esempio n. 25
0
 def __init__(self, screensection, screenname):
     debugprint(config.dbgscreenbuild, "Build House Status Screen")
     screen.ScreenDesc.__init__(self, screensection, screenname,
                                ())  # no extra cmd keys
     utilities.LocalizeParams(self,
                              screensection,
                              NormalOn=[],
                              NormalOff=[])
     checklist = [
         nm for nm in config.ISY.NodesByName
         if ((nm in self.NormalOn) or (nm in self.NormalOff))
     ]  # addr -> name
     utilities.register_example("HouseStatusScreenDesc", self)
Esempio n. 26
0
 def __init__(self,
              screensection,
              screenname,
              ExtraCmdButs=(),
              withnav=True):
     self.name = screenname
     self.keysbyord = []
     utilities.LocalizeParams(self,
                              screensection,
                              'CharColor',
                              'DimTO',
                              'BackgroundColor',
                              'CmdKeyCol',
                              'CmdCharCol',
                              label=[screenname])
     self.WithNav = withnav
     self.PrevScreen = self.NextScreen = None
     cbutwidth = (config.screenwidth -
                  2 * config.horizborder) / (2 + len(ExtraCmdButs))
     cvertcenter = config.screenheight - config.botborder / 2
     cbutheight = config.botborder - config.cmdvertspace * 2
     # todo condition on withnav?  if False then None? if change then also fix FinishScreen not to fail on none
     self.PrevScreenKey = toucharea.ManualKeyDesc(
         '**prev**', ['**prev**'],
         self.CmdKeyCol,
         self.CmdCharCol,
         self.CmdCharCol,
         center=(config.horizborder + .5 * cbutwidth, cvertcenter),
         size=(cbutwidth, cbutheight))
     self.NextScreenKey = toucharea.ManualKeyDesc(
         '**next**', ['**next**'],
         self.CmdKeyCol,
         self.CmdCharCol,
         self.CmdCharCol,
         center=(config.horizborder +
                 (1 + len(ExtraCmdButs) + .5) * cbutwidth, cvertcenter),
         size=(cbutwidth, cbutheight))
     self.ExtraCmdKeys = []
     for i in range(len(ExtraCmdButs)):
         hcenter = config.horizborder + (i + 1.5) * cbutwidth
         self.ExtraCmdKeys.append(
             toucharea.ManualKeyDesc(ExtraCmdButs[i][0],
                                     ExtraCmdButs[i][1],
                                     self.CmdKeyCol,
                                     self.CmdCharCol,
                                     self.CmdCharCol,
                                     center=(hcenter, cvertcenter),
                                     size=(cbutwidth, cbutheight)))
         self.ExtraCmdKeys[-1].FinishKey((0, 0), (0, 0))
     utilities.register_example('ScreenDesc', self)
Esempio n. 27
0
	def __init__(self, flag, name, addr, parenttyp, parentaddr, enabled, props):
		Folder.__init__(self, flag, name, addr, parenttyp, parentaddr)
		self.pnode = None  # for things like KPLs
		self.enabled = enabled == "true"
		self.hasstatus = False
		# props is either an OrderedDict(@id:ST,@value:val, . . .) or a list of such
		if isinstance(props, collections.OrderedDict):
			props = [props]  # make it a list so below always works
		for item in props:
			if item['@id'] == 'ST':
				if item['@value'] <> ' ':
					self.hasstatus = True
				# no use for nodetype now
				# device class -energy management
				# wattage, dcPeriod
		utilities.register_example("Node", self)
Esempio n. 28
0
 def __init__(self, flag, name, addr, parenttyp, parentaddr, enabled,
              props):
     Folder.__init__(self, flag, name, addr, parenttyp, parentaddr)
     self.pnode = None  # for things like KPLs
     self.enabled = enabled == "true"
     self.hasstatus = False
     # props is either an OrderedDict(@id:ST,@value:val, . . .) or a list of such
     if isinstance(props, collections.OrderedDict):
         props = [props]  # make it a list so below always works
     for item in props:
         if item['@id'] == 'ST':
             if item['@value'] <> ' ':
                 self.hasstatus = True
             # no use for nodetype now
             # device class -energy management
             # wattage, dcPeriod
     utilities.register_example("Node", self)
Esempio n. 29
0
	def __init__(self, screensection, screenname):
		debugPrint('BuildScreen', "New ThermostatScreenDesc ", screenname)
		screen.BaseKeyScreenDesc.__init__(self, screensection, screenname)
		utilities.LocalizeParams(self, screensection, 'KeyColor', 'KeyOffOutlineColor', 'KeyOnOutlineColor')
		self.info = {}
		self.fsize = (30, 50, 80, 160)

		if screenname in config.ISY.NodesByName:
			self.RealObj = config.ISY.NodesByName[screenname]
		else:
			self.RealObj = None
			config.Logs.Log("No Thermostat: " + screenname, severity=logsupport.ConsoleWarning)

		self.TitleRen = config.fonts.Font(self.fsize[1]).render(screen.FlatenScreenLabel(self.label), 0,
																wc(self.CharColor))
		self.TitlePos = ((config.screenwidth - self.TitleRen.get_width())/2, config.topborder)
		self.TempPos = config.topborder + self.TitleRen.get_height()
		self.StatePos = self.TempPos + config.fonts.Font(self.fsize[3]).get_linesize() - scaleH(20)
		self.SPPos = self.StatePos + scaleH(25)
		self.AdjButSurf = pygame.Surface((config.screenwidth, scaleH(40)))
		self.AdjButTops = self.SPPos + config.fonts.Font(self.fsize[2]).get_linesize() - scaleH(5)
		centerspacing = config.screenwidth/5
		self.AdjButSurf.fill(wc(self.BackgroundColor))
		arrowsize = scaleH(40)  # pixel

		for i in range(4):
			gfxdraw.filled_trigon(self.AdjButSurf, *trifromtop(centerspacing, arrowsize/2, i + 1, arrowsize,
															   wc(("red", "blue", "red", "blue")[i]), i%2 <> 0))
			self.keysbyord.append(toucharea.TouchPoint((centerspacing*(i + 1), self.AdjButTops + arrowsize/2),
													   (arrowsize*1.2, arrowsize*1.2)))
		self.ModeButPos = self.AdjButTops + scaleH(85)  # pixel

		bsize = (scaleW(100), scaleH(50))  # pixel
		self.keysbyord.append(toucharea.ManualKeyDesc("Mode", ["Mode"],
													  self.KeyColor, self.CharColor, self.CharColor,
													  center=(config.screenwidth/4, self.ModeButPos), size=bsize,
													  KOn=config.KeyOffOutlineColor))  # todo clean up
		self.keysbyord.append(toucharea.ManualKeyDesc("Fan", ["Fan"],
													  self.KeyColor, self.CharColor, self.CharColor,
													  center=(3*config.screenwidth/4, self.ModeButPos), size=bsize,
													  KOn=config.KeyOffOutlineColor))
		self.keysbyord[4].FinishKey((0,0),(0,0))
		self.keysbyord[5].FinishKey((0,0),(0,0))
		self.ModesPos = self.ModeButPos + bsize[1]/2 + scaleH(5)
		utilities.register_example("ThermostatScreenDesc", self)
Esempio n. 30
0
	def __init__(self, screensection, screenname):
		debugprint(config.dbgscreenbuild, "New ThermostatScreenDesc ", screenname)
		screen.BaseKeyScreenDesc.__init__(self, screensection, screenname)
		utilities.LocalizeParams(self, screensection, 'KeyColor', 'KeyOffOutlineColor', 'KeyOnOutlineColor')
		self.info = {}
		self.fsize = (30, 50, 80, 160)

		if screenname in config.ISY.NodesByName:
			self.RealObj = config.ISY.NodesByName[screenname]
		else:
			self.RealObj = None
			config.Logs.Log("No Thermostat: " + screenname, severity=logsupport.ConsoleWarning)

		self.TitleRen = config.fonts.Font(self.fsize[1]).render(screen.FlatenScreenLabel(self.label), 0,
																wc(self.CharColor))
		self.TitlePos = ((config.screenwidth - self.TitleRen.get_width())/2, config.topborder)
		self.TempPos = config.topborder + self.TitleRen.get_height()
		self.StatePos = self.TempPos + config.fonts.Font(self.fsize[3]).get_linesize() - scaleH(20)
		self.SPPos = self.StatePos + scaleH(25)
		self.AdjButSurf = pygame.Surface((config.screenwidth, scaleH(40)))
		self.AdjButTops = self.SPPos + config.fonts.Font(self.fsize[2]).get_linesize() - scaleH(5)
		centerspacing = config.screenwidth/5
		self.AdjButSurf.fill(wc(self.BackgroundColor))
		arrowsize = scaleH(40)  # pixel

		for i in range(4):
			gfxdraw.filled_trigon(self.AdjButSurf, *trifromtop(centerspacing, arrowsize/2, i + 1, arrowsize,
															   wc(("red", "blue", "red", "blue")[i]), i%2 <> 0))
			self.keysbyord.append(toucharea.TouchPoint((centerspacing*(i + 1), self.AdjButTops + arrowsize/2),
													   (arrowsize*1.2, arrowsize*1.2)))
		self.ModeButPos = self.AdjButTops + scaleH(85)  # pixel

		bsize = (scaleW(100), scaleH(50))  # pixel
		self.keysbyord.append(toucharea.ManualKeyDesc("Mode", ["Mode"],
													  self.KeyColor, self.CharColor, self.CharColor,
													  center=(config.screenwidth/4, self.ModeButPos), size=bsize,
													  KOn=config.KeyOffOutlineColor))  # todo clean up
		self.keysbyord.append(toucharea.ManualKeyDesc("Fan", ["Fan"],
													  self.KeyColor, self.CharColor, self.CharColor,
													  center=(3*config.screenwidth/4, self.ModeButPos), size=bsize,
													  KOn=config.KeyOffOutlineColor))
		self.keysbyord[4].FinishKey((0,0),(0,0))
		self.keysbyord[5].FinishKey((0,0),(0,0))
		self.ModesPos = self.ModeButPos + bsize[1]/2 + scaleH(5)
		utilities.register_example("ThermostatScreenDesc", self)
Esempio n. 31
0
	def __init__(self, screensection, screenname):
		screen.ScreenDesc.__init__(self, screensection, screenname)
		debug.debugPrint('Screen', "Build Clock Screen")
		screen.AddUndefaultedParams(self, screensection, CharSize=[20], Font=fonts.monofont, OutFormat=[],
									ExtraFields=[],
									ExtraSize=[0], ExtraFormat=[])
		for i in range(len(self.CharSize), len(self.OutFormat)):
			self.CharSize.append(self.CharSize[-1])
		self.KeyList = None  # no touch areas active on this screen
		utilities.register_example("ClockScreen", self)

		self.DecodedExtraFields = []
		for f in self.ExtraFields:
			if ':' in f:
				self.DecodedExtraFields.append(f.split(':'))
			else:
				logsupport.Logs.Log("Incomplete field specified on clockscreen", severity=ConsoleWarning)
		self.poster = RepeatingPost(1.0, paused=True, name=self.name, proc=self.repaintClock)
		self.poster.start()
Esempio n. 32
0
 def __init__(self, keys):
     debugprint(config.dbgscreenbuild, "Build Maintenance Screen")
     screen.BaseKeyScreenDesc.__init__(self,
                                       fixedoverrides,
                                       'Maint',
                                       withnav=False)
     utilities.LocalizeParams(self, None, TitleFontSize=40, SubFontSize=25)
     self.keysbyord = []
     for k, kt in keys.iteritems():
         self.keysbyord.append(
             toucharea.ManualKeyDesc(k, [kt[0]],
                                     'gold',
                                     'black',
                                     'black',
                                     KOn='black',
                                     KOff='black',
                                     proc=kt[1]))
     topoff = self.TitleFontSize + self.SubFontSize
     self.LayoutKeys(topoff,
                     config.screenheight - 2 * config.topborder - topoff)
     utilities.register_example("MaintScreenDesc", self)
Esempio n. 33
0
	def __init__(self, screensection, screenname):
		debugPrint('BuildScreen', "New WeatherScreenDesc ", screenname)

		screen.ScreenDesc.__init__(self, screensection, screenname, (('which',('',)),))
		utilities.LocalizeParams(self, screensection, WunderKey='', location='')
		self.scrlabel = screen.FlatenScreenLabel(self.label)
		# entries are (fontsize, centered, formatstring, values)
		self.conditions = [(2, True, "{d}", self.scrlabel),
						   (1, True, "{d[0]}", ('Location',)),
						   (1, False, u"Now: {d[0]} {d[1]}\u00B0F", ('Sky', 'Temp')),
						   (0, False, u"  Feels like: {d[0]}\u00B0", ('Feels',)),
						   (1, False, "Wind {d[0]}", ('WindStr',)),
						   (1, False, "Sunrise: {d[0]:02d}:{d[1]:02d}", ('SunriseH', 'SunriseM')),
						   (1, False, "Sunset:  {d[0]:02d}:{d[1]:02d}", ('SunsetH', 'SunsetM')),
						   (0, False, "Moon rise: {d[0]} set: {d[1]}", ('Moonrise', 'Moonset')),
						   (0, False, "     {d[0]}% illuminated", ('MoonPct',)),
						   (0, False, "will be replaced", "")]
		self.forecast = [(1, False, u"{d[0]}   {d[1]}\u00B0/{d[2]}\u00B0 {d[3]}", ('Day', 'High', 'Low', 'Sky')),
						 (1, False, "Wind: {d[0]} at {d[1]}", ('WindDir', 'WindSpd'))]
		self.Info = weatherinfo.WeatherInfo(self.WunderKey, self.location)
		utilities.register_example("WeatherScreenDesc", self)
Esempio n. 34
0
    def __init__(self, screensection, screenname):
        screen.BaseKeyScreenDesc.__init__(self, screensection, screenname)
        debug.debugPrint('Screen', "New KeyScreenDesc ", screenname)

        # Build the Key objects
        for keyname in screensection:
            if isinstance(screensection[keyname], Section):
                self.Keys[keyname] = keyspecs.CreateKey(
                    self, screensection[keyname], keyname)

        self.LayoutKeys()

        debug.debugPrint('Screen', "Active Subscription List for ", self.name,
                         " will be:")
        for h, l in self.HubInterestList.items():
            for i, j in l.items():
                debug.debugPrint(
                    'Screen',
                    "  Subscribe on hub " + h + " node: " + i + ' ' + j.name +
                    ":" + j.ControlObj.name + ' via ' + j.DisplayObj.name)

        utilities.register_example("KeyScreenDesc", self)
Esempio n. 35
0
	def __init__(self, *args, **kwargs):
		# alternate creation signatures
		self.ButtonFontSizes = (31, 28, 25, 22, 20, 18, 16)
		# self.DynamicLabel = False
		if len(args) == 2:
			# signature: ManualKeyDesc(keysection, keyname)
			# initialize by reading config file
			self.dosectioninit(*args)
		else:
			# signature: ManualKeyDesc(keyname, label, bcolor, charcoloron, charcoloroff, center=, size=, KOn=, KOff=, proc=)
			# initializing from program code case
			self.docodeinit(*args, **kwargs)

		if self.KeyColorOff == '':
			self.KeyColorOff = self.KeyColor
		if self.KeyColorOn == '':
			self.KeyColorOn = self.KeyColor
		if self.KeyLabelOn == ['', ]:
			self.KeyLabelOn = self.label
		if self.KeyLabelOff == ['', ]:
			self.KeyLabelOff = self.label
		utilities.register_example("ManualKeyDesc", self)
Esempio n. 36
0
    def __init__(self, key, gomsg, nogomsg, procyes, procno, callingscreen,
                 bcolor, keycoloroff, charcolor, state, interestlist):
        screen.BaseKeyScreenDesc.__init__(self, {},
                                          key.name + '-Verify',
                                          parentscreen=key)
        debug.debugPrint('Screen', "Build Verify Screen")
        self.NavKeysShowing = False
        self.DefaultNavKeysShowing = False
        self.HubInterestList = interestlist
        self.DimTO = 20
        self.PersistTO = 10
        self.label = screen.FlatenScreenLabel(key.label)
        self.ClearScreenTitle()  # don't use parent screen title
        self.CallingScreen = callingscreen
        screen.AddUndefaultedParams(self,
                                    None,
                                    TitleFontSize=40,
                                    SubFontSize=25)
        self.SetScreenTitle(self.label, 40, charcolor)
        self.Keys['yes'] = ManualKeyDesc(self,
                                         'yes',
                                         gomsg,
                                         bcolor,
                                         keycoloroff,
                                         charcolor,
                                         State=state)
        self.Keys['yes'].Proc = procyes  # functools.partial(proc, True)
        self.Keys['no'] = ManualKeyDesc(self,
                                        'no',
                                        nogomsg,
                                        bcolor,
                                        keycoloroff,
                                        charcolor,
                                        State=state)
        self.Keys[
            'no'].Proc = procno if procno is not None else self.DefaultNo  # functools.partial(proc, False)

        self.LayoutKeys(self.startvertspace, self.useablevertspace)
        utilities.register_example("VerifyScreen", self)
Esempio n. 37
0
 def __init__(self):
     screen.BaseKeyScreenDesc.__init__(self, None, 'LOG')
     self.NavKeysShowing = False
     self.DefaultNavKeysShowing = False
     self.state = 'init'  # init: new entry to logs; scroll: doing error scroll manual: user control
     self.startat = 0  # where in log page starts
     self.startpage = 0
     self.item = 0
     self.pageno = -1
     self.PageStartItem = [0]
     self.Keys = {
         'nextpage':
         toucharea.TouchPoint('nextpage',
                              (hw.screenwidth / 2, 3 * hw.screenheight / 4),
                              (hw.screenwidth, hw.screenheight),
                              proc=self.NextPage),
         'prevpage':
         toucharea.TouchPoint('prevpage',
                              (hw.screenwidth / 2, hw.screenheight / 4),
                              (hw.screenwidth, hw.screenheight / 2),
                              proc=self.PrevPage)
     }
     self.name = 'Log'
     utilities.register_example("LogDisplayScreen", self)
Esempio n. 38
0
	def __init__(self, ISYsession):
		"""
		Get and parse the ISY configuration to set up an internal analog of its structure
		:param ISYsession:
		:return:
		"""

		self.NodeRoot = Folder(0, '*root*', u'0', 0, u'0')
		self.ProgRoot = None
		self.NodesByAddr = {}
		self.FoldersByAddr = {'0': self.NodeRoot}
		self.ScenesByAddr = {}
		self.NodesByName = {}
		self.ScenesByName = {}
		self.FoldersByName = {}
		self.ProgramFoldersByAddr = {}
		self.ProgramsByAddr = {}
		self.ProgramsByName = {}
		self.ProgramFoldersByName = {}
		self.varsState = {}
		self.varsInt = {}

		"""
		Build the Folder/Node/Scene tree
		"""

		trycount = 20
		while True:
			try:
				r = ISYsession.get(config.ISYprefix + 'nodes', verify=False, timeout=3)
				config.Logs.Log('Successful node read: ' + str(r.status_code))
				break
			# except requests.exceptions.ConnectTimeout:
			except:
				# after total power outage ISY is slower to come back than RPi so
				# we wait testing periodically.  Eventually we try rebooting just in case our own network
				# is what is hosed
				trycount -= 1
				if trycount > 0:
					config.Logs.Log('ISY not responding')
					config.Logs.Log('-ISY (nodes): ' + config.ISYprefix)
					time.sleep(15)
				else:
					config.Logs.Log('No ISY response restart (nodes)')
					maintscreen.errorexit('reboot')
					sys.exit(10)  # should never get here

		if r.status_code <> 200:
			print 'ISY text response:'
			print '-----'
			print r.text
			print '-----'
			print 'Cannot access ISY - check username and password.  Status code: ' + str(r.status_code)
			config.Logs.Log('Cannot access ISY - check username/password')
			config.Logs.Log('Status code: ' + str(r.status_code))
			time.sleep(10)
			maintscreen.errorexit('shut')
			config.Ending = True
			sys.exit(4)

		configdict = xmltodict.parse(r.text)['nodes']

		for folder in configdict['folder']:
			addr = folder['address']
			parentaddr = str(0)
			ptyp = 3
			if 'parent' in folder:
				ptyp = int(folder['parent']['@type'])
				parentaddr = folder['parent']['#text']
			self.FoldersByAddr[addr] = Folder(folder['@flag'], folder['name'], str(addr), ptyp, parentaddr)
		self.LinkChildrenParents(self.FoldersByAddr, self.FoldersByName, self.FoldersByAddr, self.NodesByAddr)

		fixlist = []
		for node in configdict['node']:
			parentaddr = str(0)
			ptyp = 3
			if 'parent' in node:
				ptyp = int(node['parent']['@type'])
				parentaddr = node['parent']['#text']
			try:
				n = Node(node['@flag'], node['name'], node['address'], ptyp, parentaddr, node['enabled'], node['property'])
				fixlist.append((n, node['pnode']))
				self.NodesByAddr[n.address] = n
			except:
				pass # for now at least try to avoid nodes without properties which apparently Zwave devices may have
		self.LinkChildrenParents(self.NodesByAddr, self.NodesByName, self.FoldersByAddr, self.NodesByAddr)
		for fixitem in fixlist:
			fixitem[0].pnode = self.NodesByAddr[fixitem[1]]

		for scene in configdict['group']:
			memberlist = []
			if scene['members'] is not None:
				m1 = scene['members']['link']
				if isinstance(m1, list):
					for m in m1:
						memberlist.append((int(m['@type']), self.NodesByAddr[m['#text']]))
				else:
					memberlist.append((int(m1['@type']), self.NodesByAddr[m1['#text']]))
				if 'parent' in scene:
					ptyp = int(scene['parent']['@type'])
					p = scene['parent']['#text']
				else:
					ptyp = 0
					p = '0'
				self.ScenesByAddr[scene['address']] = Scene(scene['@flag'], scene['name'], str(scene['address']), ptyp,
															p, memberlist)
			else:
				if scene['name'] <> '~Auto DR':
					print 'Scene with no members', scene['name']
		self.LinkChildrenParents(self.ScenesByAddr, self.ScenesByName, self.FoldersByAddr, self.NodesByAddr)
		if config.Flags['ISY']:
			self.PrintTree(self.NodeRoot, "    ")

		"""
		Build the Program tree
		"""

		trycount = 20
		while True:
			try:
				r = ISYsession.get(config.ISYprefix + 'programs?subfolders=true', verify=False, timeout=3)
				config.Logs.Log('Successful programs read: ' + str(r.status_code))
				break
			# except requests.exceptions.ConnectTimeout:
			except:
				# after total power outage ISY is slower to come back than RPi so
				# we wait testing periodically.  Eventually we try rebooting just in case our own network
				# is what is hosed
				trycount -= 1
				if trycount > 0:
					config.Logs.Log('ISY not responding')
					config.Logs.Log('-ISY(programs): ' + config.ISYprefix)
					time.sleep(15)
				else:
					config.Logs.Log('No ISY response restart (programs)')
					maintscreen.errorexit('reboot')
					sys.exit(12)  # should never get here
				# todo check r.status for 200?  looks like simetimes r,text is garbage early on?

		configdict = xmltodict.parse(r.text)['programs']['program']
		for item in configdict:
			if item['@id'] == '0001':
				# Program Root
				self.ProgRoot = ProgramFolder(item['name'], '0001', '0001')
				self.ProgramFoldersByAddr['0001'] = self.ProgRoot
			else:
				if item['@folder'] == 'true':
					self.ProgramFoldersByAddr[item['@id']] = ProgramFolder(item['name'], item['@id'], item['@parentId'])
				else:
					self.ProgramsByAddr[item['@id']] = Program(item['name'], item['@id'], item['@parentId'])
		self.LinkChildrenParents(self.ProgramFoldersByAddr, self.ProgramFoldersByName, self.ProgramFoldersByAddr,
								 self.ProgramsByAddr)
		self.LinkChildrenParents(self.ProgramsByAddr, self.ProgramsByName, self.ProgramFoldersByAddr,
								 self.ProgramsByAddr)

		"""
		Get the variables
		"""
		while True:
			try:
				r1 = ISYsession.get(config.ISYprefix + 'vars/definitions/2', verify=False, timeout=3)
				r2 = ISYsession.get(config.ISYprefix + 'vars/definitions/1', verify=False, timeout=3)
				config.Logs.Log('Successful variable read: ' + str(r1.status_code) + '/' + str(r2.status_code))
				break
			# except requests.exceptions.ConnectTimeout:
			except:
				# after total power outage ISY is slower to come back than RPi so
				# we wait testing periodically.  Eventually we try rebooting just in case our own network
				# is what is hosed
				trycount -= 1
				if trycount > 0:
					config.Logs.Log('ISY not responding')
					config.Logs.Log('-ISY(vars): ' + config.ISYprefix)
					time.sleep(15)
				else:
					config.Logs.Log('No ISY response restart (vars)')
					maintscreen.errorexit('reboot')
					sys.exit(12)  # should never get here
				# todo check r.status for 200?  looks like simetimes r,text is garbage early on?

		configdict = xmltodict.parse(r1.text)['CList']['e']
		for v in configdict:
			self.varsState[v['@name']] = v['@id']
		configdict = xmltodict.parse(r2.text)['CList']['e']
		for v in configdict:
			self.varsInt[v['@name']] = v['@id']

		utilities.register_example("ISY", self)
		if config.Flags['ISY']:
			self.PrintTree(self.ProgRoot, "    ")
Esempio n. 39
0
    def __init__(self, name, isyaddr, user, pwd):

        if isyaddr == '' or user == '':
            logsupport.Logs.Log(
                "ISY id info missing:  addr: {} user: {}".format(
                    isyaddr, user),
                severity=ConsoleError)
            raise ValueError

        if isyaddr.startswith('http'):
            self.ISYprefix = isyaddr + '/rest/'
        else:
            self.ISYprefix = 'http://' + isyaddr + '/rest/'
        self.ISYrequestsession = requests.session()
        self.ISYrequestsession.auth = (user, pwd)

        self.name = name
        self.addr = isyaddr
        self.user = user
        self.password = pwd
        self._NodeRoot = Folder(self, 0, '', u'0', 0, u'0')  # *root*
        self._ProgRoot = None
        self.NodesByAddr = {}
        self._FoldersByAddr = {'0': self._NodeRoot}
        self._ScenesByAddr = {}
        self._NodesByName = {}
        self._NodesByFullName = {}
        self._ScenesByName = {}
        self._FoldersByName = {}
        self._ProgramFoldersByAddr = {}
        self._ProgramsByAddr = {}
        self._ProgramsByName = {}
        self._ProgramFoldersByName = {}
        self._HubOnline = False
        self.Vars = None
        self.ErrNodes = {}
        self.Busy = 0
        self.V3Nodes = [
        ]  # temporary way to track and suppress errors from nodes we don't currently handle (todo V3)
        """
		Build the Folder/Node/Scene tree
		"""
        logsupport.Logs.Log(
            "{}: Create Structure for ISY hub at {} for user {}".format(
                name, isyaddr, user))

        trycount = 20
        while True:
            # noinspection PyBroadException
            try:
                historybuffer.HBNet.Entry('ISY nodes get')
                r = self.ISYrequestsession.get(self.ISYprefix + 'nodes',
                                               verify=False,
                                               timeout=5)
                historybuffer.HBNet.Entry('ISY nodes get done')
                logsupport.Logs.Log('{}: Successful node read: {}'.format(
                    name, r.status_code))
                break
            except:
                # after total power outage ISY is slower to come back than RPi so
                # we wait testing periodically.  Eventually we try rebooting just in case our own network
                # is what is hosed
                trycount -= 1
                if trycount > 0:
                    logsupport.Logs.Log(
                        '{}:  Hub not responding (nodes) at: {}'.format(
                            self.name, self.ISYprefix))
                    time.sleep(15)
                else:
                    logsupport.Logs.Log('No ISY response restart (nodes)')
                    exitutils.errorexit(exitutils.ERRORPIREBOOT)
                    logsupport.Logs.Log('Reached unreachable code! ISY1')

        if r.status_code != 200:
            logsupport.Logs.Log('Hub (' + self.name + ') text response:',
                                severity=ConsoleError)
            logsupport.Logs.Log('-----', severity=ConsoleError)
            logsupport.Logs.Log(r.text, severity=ConsoleError)
            logsupport.Logs.Log('-----', severity=ConsoleError)
            logsupport.Logs.Log('Cannot access ISY - check username/password')
            logsupport.Logs.Log('Status code: ' + str(r.status_code))
            time.sleep(10)
            exitutils.errorexit(exitutils.ERRORDIE)
            logsupport.Logs.Log('Reached unreachable code! ISY2')

        configdict = xmltodict.parse(r.text)['nodes']
        if debug.dbgStore.GetVal('ISYLoad'):
            with open('/home/pi/Console/xml.dmp', 'r') as f:
                x1 = f.readline().rstrip('\n')
                x2 = f.readline().rstrip('\n')
                x3 = f.readline().rstrip('\n')
                x4 = f.readline().rstrip('\n')
                configdict = xmltodict.parse(x1)['nodes']
        else:
            x2 = ''
            x3 = ''
            x4 = ''

        if debug.dbgStore.GetVal('ISYDump'):
            debug.ISYDump("xml.dmp", r.text, pretty=False, new=True)
            debug.ISYDump("struct.dmp", configdict, new=True)
            debug.ISYDump("isystream.dmp", "", pretty=False, new=True)

        for folder in configdict['folder']:
            addr = folder['address']
            parentaddr = str(0)
            ptyp = 3
            if 'parent' in folder:
                ptyp = int(folder['parent']['@type'])
                parentaddr = folder['parent']['#text']
            self._FoldersByAddr[addr] = Folder(self,
                                               folder['@flag'], folder['name'],
                                               str(addr), ptyp, parentaddr)
        self._LinkChildrenParents(self._FoldersByAddr, self._FoldersByName,
                                  self._FoldersByAddr, self.NodesByAddr)

        fixlist = []
        for node in configdict['node']:
            parentaddr = str(0)
            ptyp = 3
            flg = 'unknown'
            nm = 'unknown'
            addr = 'unknown'
            enabld = 'unknown'
            prop = 'unknown'
            pnd = 'unknown'
            if 'parent' in node:
                ptyp = int(node['parent']['@type'])
                parentaddr = node['parent']['#text']
            # noinspection PyBroadException
            try:
                flg = node['@flag']
                nm = node['name']
                addr = node['address']
                enabld = node['enabled']
                pnd = node['pnode']
                prop = node['property']
                n = Node(self, flg, nm, addr, ptyp, parentaddr, enabld, prop)
                fixlist.append((n, pnd))
                self.NodesByAddr[n.address] = n
            except Exception as E:
                if prop == 'unknown':
                    # probably a v3 polyglot node or zwave
                    logsupport.Logs.Log(
                        "Probable v5 node seen: {}  Address: {}  Parent: {} ".
                        format(nm, addr, pnd),
                        severity=ConsoleDetail)
                    logsupport.Logs.Log("ISY item: {}".format(repr(node)),
                                        severity=ConsoleDetail)
                    self.V3Nodes.append(addr)
                else:
                    logsupport.Logs.Log("Problem with processing node: ",
                                        nm,
                                        '  Address: ',
                                        str(addr),
                                        ' Pnode: ',
                                        str(pnd),
                                        ' ',
                                        str(flg),
                                        '/',
                                        str(enabld),
                                        '/',
                                        repr(prop),
                                        severity=ConsoleWarning)
                    logsupport.Logs.Log("Exc: {}  ISY item: {}".format(
                        repr(E), repr(node)),
                                        severity=ConsoleWarning)
                # for now at least try to avoid nodes without properties which apparently Zwave devices may have
        self._LinkChildrenParents(self.NodesByAddr, self._NodesByName,
                                  self._FoldersByAddr, self.NodesByAddr)
        for fixitem in fixlist:
            # noinspection PyBroadException
            try:
                fixitem[0].pnode = self.NodesByAddr[fixitem[1]]
            except:
                logsupport.Logs.Log("Problem with processing node: ",
                                    fixitem[1],
                                    severity=ConsoleWarning)

        for scene in configdict['group']:
            memberlist = []
            if scene['members'] is not None:
                m1 = scene['members']['link']
                naddr = ''
                # noinspection PyBroadException
                try:
                    if isinstance(m1, list):
                        for m in m1:
                            naddr = m['#text']
                            memberlist.append(
                                (int(m['@type']), self.NodesByAddr[naddr]))
                    else:
                        naddr = m1['#text']
                        memberlist.append(
                            (int(m1['@type']), self.NodesByAddr[naddr]))
                except:
                    logsupport.Logs.Log("Error adding member to scene: ",
                                        str(scene['name']),
                                        ' Node address: ',
                                        naddr,
                                        severity=ConsoleWarning)
                    debug.debugPrint('ISYDump', 'Scene: ', m1)

                if 'parent' in scene:
                    ptyp = int(scene['parent']['@type'])
                    p = scene['parent']['#text']
                else:
                    ptyp = 0
                    p = '0'
                self._ScenesByAddr[scene['address']] = Scene(
                    self, scene['@flag'], scene['name'], str(scene['address']),
                    ptyp, p, memberlist)
            else:
                if scene['name'] not in ('~Auto DR', 'Auto DR'):
                    logsupport.Logs.Log('Scene with no members ',
                                        scene['name'],
                                        severity=ConsoleWarning)
        self._LinkChildrenParents(self._ScenesByAddr, self._ScenesByName,
                                  self._FoldersByAddr, self.NodesByAddr)

        self._SetFullNames(self._NodeRoot, "")

        if debug.dbgStore.GetVal('ISYdbg'):
            self.PrintTree(self._NodeRoot, "    ", 'Nodes')
        """
		Build the Program tree
		"""

        trycount = 20
        while True:
            # noinspection PyBroadException
            try:
                historybuffer.HBNet.Entry('ISY programs get')
                r = self.ISYrequestsession.get(self.ISYprefix +
                                               'programs?subfolders=true',
                                               verify=False,
                                               timeout=5)
                historybuffer.HBNet.Entry('ISY programs get done')
                if r.status_code != 200:
                    logsupport.Logs.Log('Hub (' + self.name +
                                        ') bad program read' + r.text,
                                        severity=ConsoleWarning)
                    raise requests.exceptions.ConnectionError  # fake a connection error if we didn't get a good read
                logsupport.Logs.Log('{}: Successful programs read: {}'.format(
                    self.name, r.status_code))
                break
            # except requests.exceptions.ConnectTimeout:
            except:
                # after total power outage ISY is slower to come back than RPi sowait testing periodically.
                # Eventually we try rebooting just in case our own network is what is hosed
                trycount -= 1
                if trycount > 0:
                    logsupport.Logs.Log(
                        '{}:  Hub not responding (programs) at: {}'.format(
                            self.name, self.ISYprefix))
                    time.sleep(15)
                else:
                    logsupport.Logs.Log('No ISY response restart (programs)')
                    exitutils.errorexit(exitutils.ERRORPIREBOOT)
        configdict = xmltodict.parse(r.text)['programs']['program']
        if debug.dbgStore.GetVal('ISYLoad'):
            configdict = xmltodict.parse(x2)['programs']['program']
        if debug.dbgStore.GetVal('ISYDump'):
            debug.ISYDump("xml.dmp", r.text, pretty=False)
            debug.ISYDump("struct.dmp", configdict)

        for item in configdict:
            if item['@id'] == '0001':
                # Program Root
                self._ProgRoot = ProgramFolder(self, item['name'], '0001',
                                               '0001')
                self._ProgramFoldersByAddr['0001'] = self._ProgRoot
            else:
                if item['@folder'] == 'true':
                    self._ProgramFoldersByAddr[item['@id']] = ProgramFolder(
                        self, item['name'], item['@id'], item['@parentId'])
                else:
                    self._ProgramsByAddr[item['@id']] = Program(
                        self, item['name'], item['@id'], item['@parentId'])
        self._LinkChildrenParents(self._ProgramFoldersByAddr,
                                  self._ProgramFoldersByName,
                                  self._ProgramFoldersByAddr,
                                  self._ProgramsByAddr)
        self._LinkChildrenParents(self._ProgramsByAddr, self._ProgramsByName,
                                  self._ProgramFoldersByAddr,
                                  self._ProgramsByAddr)
        """
		Get the variables
		"""
        while True:
            # noinspection PyBroadException
            try:
                historybuffer.HBNet.Entry('ISY vars get')
                r1 = self.ISYrequestsession.get(self.ISYprefix +
                                                'vars/definitions/2',
                                                verify=False,
                                                timeout=5)
                r2 = self.ISYrequestsession.get(self.ISYprefix +
                                                'vars/definitions/1',
                                                verify=False,
                                                timeout=5)
                historybuffer.HBNet.Entry('ISY vars get done')
                # for some reason var reads seem to typically take longer to complete so to at 5 sec
                if r1.status_code != 200 or r2.status_code != 200:
                    logsupport.Logs.Log("Bad ISY var read" + r1.text + r2.text,
                                        severity=ConsoleWarning)
                    raise requests.exceptions.ConnectionError  # fake connection error on bad read
                logsupport.Logs.Log(
                    '{}: Successful variable read: {}/{}'.format(
                        self.name, r1.status_code, r2.status_code))
                break
            except:
                # after total power outage ISY is slower to come back than RPi so we wait testing periodically
                # Eventually we try rebooting just in case our own network is what is hosed
                trycount -= 1
                if trycount > 0:
                    logsupport.Logs.Log(
                        '{}:  Hub not responding (variables) at: {}'.format(
                            self.name, self.ISYprefix))
                    time.sleep(15)
                else:
                    logsupport.Logs.Log('No ISY response restart (vars)')
                    exitutils.errorexit(exitutils.ERRORPIREBOOT)
                    logsupport.Logs.Log('Reached unreachable code! ISY4')

        self.Vars = valuestore.NewValueStore(isyvarssupport.ISYVars(self))
        # noinspection PyBroadException
        try:
            configdictS = xmltodict.parse(r1.text)['CList']['e']
            if debug.dbgStore.GetVal('ISYLoad'):
                configdictS = xmltodict.parse(x3)['CList']['e']
            if debug.dbgStore.GetVal('ISYDump'):
                debug.ISYDump("xml.dmp", r1.text, pretty=False)
                debug.ISYDump("struct.dmp", configdictS)
            for v in configdictS:
                self.Vars.SetVal(('State', v['@name']), None)
                self.Vars.SetAttr(('State', v['@name']), (2, int(v['@id'])))
                self.Vars.AddAlert(('State', v['@name']), self._ISYVarChanged)
        except:
            logsupport.Logs.Log('No state variables defined')
        # noinspection PyBroadException
        try:
            configdictI = xmltodict.parse(r2.text)['CList']['e']
            if debug.dbgStore.GetVal('ISYLoad'):
                configdictI = xmltodict.parse(x4)['CList']['e']
            if debug.dbgStore.GetVal('ISYDump'):
                debug.ISYDump("xml.dmp", r2.text, pretty=False)
                debug.ISYDump("struct.dmp", configdictI)
            for v in configdictI:
                self.Vars.SetVal(('Int', v['@name']), None)
                self.Vars.SetAttr(('Int', v['@name']), (1, int(v['@id'])))
                self.Vars.AddAlert(('Int', v['@name']), self._ISYVarChanged)
        except:
            logsupport.Logs.Log('No integer variables defined')
        '''
		Add command varibles if needed
		'''
        cmdvar = valuestore.InternalizeVarName(self.name + ':Int:Command.' +
                                               hw.hostname.replace('-', '.'))
        self.alertspeclist = {}
        for k in valuestore.ValueStores[self.name].items():
            if k == tuple(cmdvar[1:]):
                self.alertspeclist['RemoteCommands-' + self.name] = {
                    'Type': 'VarChange',
                    'Var': valuestore.ExternalizeVarName(cmdvar),
                    'Test': 'NE',
                    'Value': '0',
                    'Invoke': 'NetCmd.Command'
                }
                break

        self.Vars.LockStore()
        utilities.register_example("ISY", self)
        if debug.dbgStore.GetVal('ISYdbg'):
            self.PrintTree(self._ProgRoot, "    ", 'Programs')

        self.HBWS = historybuffer.HistoryBuffer(150, self.name + '-WS')
        self.HBDirect = historybuffer.HistoryBuffer(40, self.name + '-Direct')
        self.isyEM = isyeventmonitor.ISYEventMonitor(self)
        threadmanager.SetUpHelperThread(
            self.name,
            self.isyEM.QHandler,
            prerestart=self.isyEM.PreRestartQHThread,
            poststart=self.isyEM.PostStartQHThread,
            postrestart=self.isyEM.PostStartQHThread)
        logsupport.Logs.Log(
            "{}: Finished creating structure for hub".format(name))
Esempio n. 40
0
 def __init__(self, c, s):
     self.Center = c
     self.Size = s
     utilities.register_example("TouchPoint", self)
Esempio n. 41
0
	def __init__(self, screensection, screenname):
		global alertscreens
		screen.ScreenDesc.__init__(self, screensection, screenname)
		debug.debugPrint('Screen', "Build Alerts Screen")
		self.NavKeysShowing = False
		self.DefaultNavKeysShowing = False
		screen.IncorporateParams(self, screenname, {'KeyColor', 'KeyCharColorOn', 'KeyCharColorOff'}, screensection)
		screen.AddUndefaultedParams(self, screensection, CharSize=[20], Font=fonts.monofont, MessageBack='',
									Message=[], DeferTime="2 minutes", BlinkTime=0)
		if self.MessageBack == '':
			self.MessageBack = self.BackgroundColor
		self.DimTO = 0  # alert screens don't dim or yield voluntarily
		self.PersistTO = 0
		self.BlinkTimer = None
		self.TimerName = 0
		self.DeferTimer = None

		self.Msg = True

		messageareapart = .7
		messageareaheight = (
									hw.screenheight - 2 * self.TopBorder) * messageareapart  # no Nav keys todo switch to new screen sizing
		alertbutheight = (hw.screenheight - messageareaheight - 2 * self.TopBorder) / 2
		self.upperleft = (self.HorizBorder, self.TopBorder)

		self.Defer = utilities.get_timedelta(self.DeferTime)

		self.Keys = {'defer': toucharea.ManualKeyDesc(self, 'defer', ['Defer'], self.KeyColor, self.KeyCharColorOn,
													  self.KeyCharColorOff,
													  center=(hw.screenwidth / 2,
															  self.TopBorder + messageareaheight + 0.5 * alertbutheight),
													  size=(
														  hw.screenwidth - 2 * self.HorizBorder, alertbutheight),
													  proc=self.DeferAction)}

		if 'Action' in screensection:
			action = screensection['Action']
			self.Keys['action'] = keyspecs.CreateKey(self, action, '*Action*')
			# this is only case so far that is a user descibed key that gets explicit positioning so just do it here
			self.Keys['action'].Center = (
				hw.screenwidth / 2, self.TopBorder + messageareaheight + 1.5 * alertbutheight)
			self.Keys['action'].Size = (hw.screenwidth - 2 * self.HorizBorder, alertbutheight)
			self.Keys['action'].State = True  # for appearance only
			self.Keys['action'].FinishKey((0, 0), (0, 0))
		else:
			pass
		# no key created - just a blank spot on the alert screen

		#

		for i in range(len(self.CharSize), len(self.Message)):
			self.CharSize.append(self.CharSize[-1])

		h = 0
		l = []

		for i, ln in enumerate(self.Message):
			l.append(
				fonts.fonts.Font(self.CharSize[i], self.Font).render(ln, 0, wc(self.KeyCharColorOn)))
			h = h + l[i].get_height()
		s = (messageareaheight - h) / (len(l))

		self.messageimage = pygame.Surface((hw.screenwidth - 2 * self.HorizBorder, messageareaheight))
		self.messageblank = pygame.Surface((hw.screenwidth - 2 * self.HorizBorder, messageareaheight))
		self.messageimage.fill(wc(self.MessageBack))
		self.messageblank.fill(wc(self.BackgroundColor))

		vert_off = s / 2
		for i in range(len(l)):
			horiz_off = (hw.screenwidth - l[i].get_width()) / 2 - self.HorizBorder
			self.messageimage.blit(l[i], (horiz_off, vert_off))
			vert_off = vert_off + s + l[i].get_height()

		self.Alert = None  # gets filled in by code that parses/defines an alert that invokes the screen
		alertscreens[screenname] = self
		self.DimTO = 0
		self.PersistTO = 0
		utilities.register_example("AlertsScreen", self)
Esempio n. 42
0
 def __init__(self, hub, name, addr, parentaddr):
     super(TreeItem, self).__init__(hub, name)
     self.address = addr
     self.parent = parentaddr  # replaced by actual obj reference at end of tree build
     self.children = []
     utilities.register_example("TreeItem", self)
Esempio n. 43
0
 def __init__(self, hub, flag, name, addr, parenttyp, parentaddr):
     TreeItem.__init__(self, hub, name, addr, parentaddr)
     self.flag = flag
     self.parenttype = parenttyp
     utilities.register_example("Folder", self)
Esempio n. 44
0
	def __init__(self, flag, name, addr, parenttyp, parentaddr):
		TreeItem.__init__(self, name, addr, parentaddr)
		self.flag = flag
		self.parenttype = parenttyp
		utilities.register_example("Folder", self)
Esempio n. 45
0
	def __init__(self, nm, itemid, pid):
		TreeItem.__init__(self, nm, itemid, pid)
		self.status = False
		# not using lastRunTime, lastFinishTime
		utilities.register_example("ProgramFolder", self)
Esempio n. 46
0
	def __init__(self, screensection, screenname, ExtraCmdButs=(), withnav=True):
		ScreenDesc.__init__(self, screensection, screenname, ExtraCmdButs, withnav)
		utilities.LocalizeParams(self, None)
		self.buttonsperrow = -1
		self.buttonspercol = -1
		utilities.register_example('BaseKeyScreenDesc', self)
Esempio n. 47
0
	def __init__(self, nm, itemid, pid):
		ProgramFolder.__init__(self, nm, itemid, pid)
		# not using enabled, runAtStartup,running
		utilities.register_example("Program", self)
Esempio n. 48
0
	def __init__(self, name, addr, parentaddr):
		self.name = name
		self.address = addr
		self.parent = parentaddr  # replaced by actual obj reference at end of tree build
		self.children = []
		utilities.register_example("TreeItem", self)
Esempio n. 49
0
	def __init__(self, c, s):
		self.Center = c
		self.Size = s
		utilities.register_example("TouchPoint", self)