diff --git a/domotika/domotika.py b/domotika/domotika.py index bce15d43dd676b0d8c03da7a943d1a233ae8f474..73b4218b093778d00d60b0788bc1ad3f0cf28ca1 100644 --- a/domotika/domotika.py +++ b/domotika/domotika.py @@ -953,12 +953,12 @@ class domotikaService(service.Service): ret=defer.succeed(parseReturn(ret.communicate()[0], reverse)) elif trigger.startswith("SQL ") or trigger.startswith("SQL:"): sqlstring = trigger[4:] - ret=doQuery(sqlstring) + ret=doQuery(sqlstring, reverse) elif trigger.startswith("TMPFLAG ") or trigger.startswith("TMPFLAG:"): fl=trigger[8:].split() if len(fl)>0: try: - ret=doQuery("SELECT COUNT(name) FROM flags WHERE name='"+str(fl[0])+"'") + ret=doQuery("SELECT COUNT(name) FROM flags WHERE name='"+str(fl[0])+"'", reverse) except: pass elif trigger.startswith("CRONSTATUS ") or trigger.startswith("CRONSTATUS:"): @@ -972,7 +972,7 @@ class domotikaService(service.Service): bname=trigger[12:].split() if len(bname)>0: try: - ret=doQuery("SELECT online FROM dmboards WHERE name='"+str(bname[0])+"'") + ret=doQuery("SELECT online FROM dmboards WHERE name='"+str(bname[0])+"'", reverse) except: pass elif trigger.startswith("INPSTATUS ") or trigger.startswith("INPSTATUS:"): @@ -1100,28 +1100,30 @@ class domotikaService(service.Service): st=trigger[7:].split(':') else: st=trigger[7:].split() + if restype in ['string','int']: + reverse=False if restype in ['bool','int'] and len(st)>2 and st[1] in ['<=','>=','=','!=','>','<','domain']: if st[1]=='domain': try: ret=doQuery("""SELECT COUNT(value) FROM statusrealtime - WHERE DMDOMAIN(status_name, '"""+str(st[0])+"')=1 AND DMDOMAIN(value,'"+st['2']+"')=1", restype) + WHERE DMDOMAIN(status_name, '"""+str(st[0])+"')=1 AND DMDOMAIN(value,'"+st[2]+"')=1", reverse) except: pass elif genutils.is_number(st[2]): try: ret=doQuery("""SELECT COUNT(value) FROM statusrealtime - WHERE DMDOMAIN(status_name, '"""+str(st[0])+"')=1 AND CONVERT(value, SIGNED)"+st['1']+st[2], restype) + WHERE DMDOMAIN(status_name, '"""+str(st[0])+"')=1 AND CONVERT(value, SIGNED)="+st[1]+st[2], reverse) except: pass elif restype in ['bool','int'] and len(st)==2 and genutils.is_number(st[1]): try: ret=doQuery("""SELECT COUNT(value) FROM statusrealtime - WHERE DMDOMAIN(status_name, '"""+str(st[0])+"')=1 AND CONVERT(value, SIGNED)="+st['1'], restype) + WHERE DMDOMAIN(status_name, '"""+str(st[0])+"')=1 AND CONVERT(value, SIGNED)="+st[1], reverse) except: pass elif restype=='string' and len(st)>0: try: - ret=doQuery("SELECT value FROM statusrealtime WHERE DMDOMAIN(status_name,'"+str(st[0])+"')=1", restype=False) + ret=doQuery("SELECT value FROM statusrealtime WHERE DMDOMAIN(status_name,'"+str(st[0])+"')=1") except: pass elif trigger.startswith("UNIQUE ") or trigger.startswith("UNIQUE:"): @@ -1129,23 +1131,26 @@ class domotikaService(service.Service): st=trigger[7:].split(':') else: st=trigger[7:].split() + if restype in ['string','int']: + reverse=False + if restype in ['bool','int'] and len(st)>2 and st[1] in ['<=','>=','=','!=','>','<','domain']: if st[1]=='domain': try: ret=doQuery("""SELECT COUNT(value) FROM uniques - WHERE DMDOMAIN(name, '"""+str(st[0])+"')=1 AND DMDOMAIN(value,'"+st['2']+"')=1", restype) + WHERE DMDOMAIN(name, '"""+str(st[0])+"')=1 AND DMDOMAIN(value,'"+st[2]+"')=1", reverse) except: pass elif genutils.is_number(st[2]): try: ret=doQuery("""SELECT COUNT(value) FROM uniques - WHERE DMDOMAIN(name, '"""+str(st[0])+"')=1 AND CONVERT(value, SIGNED)"+st['1']+st[2], restype) + WHERE DMDOMAIN(name, '"""+str(st[0])+"')=1 AND CONVERT(value, SIGNED)"+st[1]+st[2], reverse) except: pass elif restype=='string' and len(st)>0: try: - ret=doQuery("SELECT value FROM uniques WHERE DMDOMAIN(name,'"+str(st[0])+"')=1", restype=False) + ret=doQuery("SELECT value FROM uniques WHERE DMDOMAIN(name,'"+str(st[0])+"')=1") except: pass diff --git a/domotika/upnp.py b/domotika/upnp.py index 19571fe56cc5846d3d4ee4d61d3d190f2c7aa751..1ac94dba0351b7e4d0ebb99c483f5b9db85c02d1 100644 --- a/domotika/upnp.py +++ b/domotika/upnp.py @@ -61,7 +61,11 @@ class DomotikaUPNP(object): 'modelNumber': 'Unknown', 'deviceType': 'Unknown', 'host': 'Unknown'} - xmlstring=xml.parseXMLString(res) + try: + xmlstring=xml.parseXMLString(res) + except: + log.info("Cannot parse XML for "+str(device)) + return log.debug('RAW DEVICE XML: '+str(res)+' FOR DEVICE: '+str(device)) xmldev=xml.getElementsByTagName(xmlstring, 'device')[0] for k in descr.keys():