Commit fd959d99 authored by nextime's avatar nextime

Fix bug in sequence conditions management

parent 95e2e68c
...@@ -953,12 +953,12 @@ class domotikaService(service.Service): ...@@ -953,12 +953,12 @@ class domotikaService(service.Service):
ret=defer.succeed(parseReturn(ret.communicate()[0], reverse)) ret=defer.succeed(parseReturn(ret.communicate()[0], reverse))
elif trigger.startswith("SQL ") or trigger.startswith("SQL:"): elif trigger.startswith("SQL ") or trigger.startswith("SQL:"):
sqlstring = trigger[4:] sqlstring = trigger[4:]
ret=doQuery(sqlstring) ret=doQuery(sqlstring, reverse)
elif trigger.startswith("TMPFLAG ") or trigger.startswith("TMPFLAG:"): elif trigger.startswith("TMPFLAG ") or trigger.startswith("TMPFLAG:"):
fl=trigger[8:].split() fl=trigger[8:].split()
if len(fl)>0: if len(fl)>0:
try: 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: except:
pass pass
elif trigger.startswith("CRONSTATUS ") or trigger.startswith("CRONSTATUS:"): elif trigger.startswith("CRONSTATUS ") or trigger.startswith("CRONSTATUS:"):
...@@ -972,7 +972,7 @@ class domotikaService(service.Service): ...@@ -972,7 +972,7 @@ class domotikaService(service.Service):
bname=trigger[12:].split() bname=trigger[12:].split()
if len(bname)>0: if len(bname)>0:
try: 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: except:
pass pass
elif trigger.startswith("INPSTATUS ") or trigger.startswith("INPSTATUS:"): elif trigger.startswith("INPSTATUS ") or trigger.startswith("INPSTATUS:"):
...@@ -1100,28 +1100,30 @@ class domotikaService(service.Service): ...@@ -1100,28 +1100,30 @@ class domotikaService(service.Service):
st=trigger[7:].split(':') st=trigger[7:].split(':')
else: else:
st=trigger[7:].split() 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 restype in ['bool','int'] and len(st)>2 and st[1] in ['<=','>=','=','!=','>','<','domain']:
if st[1]=='domain': if st[1]=='domain':
try: try:
ret=doQuery("""SELECT COUNT(value) FROM statusrealtime 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: except:
pass pass
elif genutils.is_number(st[2]): elif genutils.is_number(st[2]):
try: try:
ret=doQuery("""SELECT COUNT(value) FROM statusrealtime 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: except:
pass pass
elif restype in ['bool','int'] and len(st)==2 and genutils.is_number(st[1]): elif restype in ['bool','int'] and len(st)==2 and genutils.is_number(st[1]):
try: try:
ret=doQuery("""SELECT COUNT(value) FROM statusrealtime 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: except:
pass pass
elif restype=='string' and len(st)>0: elif restype=='string' and len(st)>0:
try: 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: except:
pass pass
elif trigger.startswith("UNIQUE ") or trigger.startswith("UNIQUE:"): elif trigger.startswith("UNIQUE ") or trigger.startswith("UNIQUE:"):
...@@ -1129,23 +1131,26 @@ class domotikaService(service.Service): ...@@ -1129,23 +1131,26 @@ class domotikaService(service.Service):
st=trigger[7:].split(':') st=trigger[7:].split(':')
else: else:
st=trigger[7:].split() 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 restype in ['bool','int'] and len(st)>2 and st[1] in ['<=','>=','=','!=','>','<','domain']:
if st[1]=='domain': if st[1]=='domain':
try: try:
ret=doQuery("""SELECT COUNT(value) FROM uniques 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: except:
pass pass
elif genutils.is_number(st[2]): elif genutils.is_number(st[2]):
try: try:
ret=doQuery("""SELECT COUNT(value) FROM uniques 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: except:
pass pass
elif restype=='string' and len(st)>0: elif restype=='string' and len(st)>0:
try: 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: except:
pass pass
......
...@@ -61,7 +61,11 @@ class DomotikaUPNP(object): ...@@ -61,7 +61,11 @@ class DomotikaUPNP(object):
'modelNumber': 'Unknown', 'modelNumber': 'Unknown',
'deviceType': 'Unknown', 'deviceType': 'Unknown',
'host': '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)) log.debug('RAW DEVICE XML: '+str(res)+' FOR DEVICE: '+str(device))
xmldev=xml.getElementsByTagName(xmlstring, 'device')[0] xmldev=xml.getElementsByTagName(xmlstring, 'device')[0]
for k in descr.keys(): for k in descr.keys():
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment