|
From: <ni...@us...> - 2010-12-02 13:22:56
|
Revision: 179
http://openautomation.svn.sourceforge.net/openautomation/?rev=179&view=rev
Author: nilss1
Date: 2010-12-02 12:19:36 +0000 (Thu, 02 Dec 2010)
Log Message:
-----------
some fixes ** lots of debugging prints have to be removed later
Modified Paths:
--------------
PyWireGate/trunk/knx_connector/DPT_Types.py
PyWireGate/trunk/knx_connector/GroupSocket.py
PyWireGate/trunk/knx_connector/KNX_Connector.py
PyWireGate/trunk/owfs_connector/OWFS_Connector.py
PyWireGate/trunk/owfs_connector/connection.py
PyWireGate/trunk/scheduler.py
Modified: PyWireGate/trunk/knx_connector/DPT_Types.py
===================================================================
--- PyWireGate/trunk/knx_connector/DPT_Types.py 2010-11-29 21:49:00 UTC (rev 178)
+++ PyWireGate/trunk/knx_connector/DPT_Types.py 2010-12-02 12:19:36 UTC (rev 179)
@@ -211,14 +211,14 @@
val = val.encode('iso-8859-15')
if type(val) <> str:
val = "%r" % val
- return ord(val[0]) & 0xff
+ return [ord(val[0]) & 0xff]
def decodeDPT5(self,raw):
## 1 Byte unsigned
return int(raw[0]) & 0xff
def encodeDPT5(self,val):
- return int(val) & 0xff
+ return [int(val) & 0xff]
def decodeDPT501(self,raw):
## 1 Byte unsigned percent
@@ -226,7 +226,9 @@
return (int(raw[0]) & 0xff) * 100 / 255
def encodeDPT501(self,val):
- return (int(val) * 255 / 100 ) & 0xff
+ if val > 100:
+ val = 100
+ return [(int(val) * 255 / 100 ) & 0xff]
def decodeDPT6(self,raw):
## 1 Byte signed
@@ -237,7 +239,7 @@
if val > 127:
## Max
val = 127
- return int(val) & 0xff
+ return [int(val) & 0xff]
def decodeDPT7(self,raw):
## 2 byte unsigned
Modified: PyWireGate/trunk/knx_connector/GroupSocket.py
===================================================================
--- PyWireGate/trunk/knx_connector/GroupSocket.py 2010-11-29 21:49:00 UTC (rev 178)
+++ PyWireGate/trunk/knx_connector/GroupSocket.py 2010-12-02 12:19:36 UTC (rev 179)
@@ -55,7 +55,7 @@
id = "%s:%s" % (self._parent.instanceName, msg['dstaddr'])
if (buf[0] & 0x3 or (buf[1] & 0xC0) == 0xC0):
##FIXME: unknown APDU
- self.debug("unknown APDU from "+msg['srcaddr']+" to "+msg['dstaddr']+ " raw:"+buf)
+ self.debug("unknown APDU from %r to %r raw: %r" %(msg['srcaddr'] ,msg['dstaddr'],buf))
else:
dsobj = self.WG.DATASTORE.get(id)
if (buf[1] & 0xC0 == 0x00):
Modified: PyWireGate/trunk/knx_connector/KNX_Connector.py
===================================================================
--- PyWireGate/trunk/knx_connector/KNX_Connector.py 2010-11-29 21:49:00 UTC (rev 178)
+++ PyWireGate/trunk/knx_connector/KNX_Connector.py 2010-12-02 12:19:36 UTC (rev 179)
@@ -71,7 +71,7 @@
defaultconfig = {
'url':'ip:127.0.0.1',
'parser' : 'groupsocket',
- 'checktime' : 300
+ 'checktime' : 0
}
## check Defaultconfig Options in main configfile
Modified: PyWireGate/trunk/owfs_connector/OWFS_Connector.py
===================================================================
--- PyWireGate/trunk/owfs_connector/OWFS_Connector.py 2010-11-29 21:49:00 UTC (rev 178)
+++ PyWireGate/trunk/owfs_connector/OWFS_Connector.py 2010-12-02 12:19:36 UTC (rev 179)
@@ -27,8 +27,6 @@
class owfs_connector(Connector):
-
-
CONNECTOR_NAME = 'OWFS Connector'
CONNECTOR_VERSION = 0.2
CONNECTOR_LOGNAME = 'owfs_connector'
@@ -40,10 +38,11 @@
self.mutex = threading.RLock()
defaultconfig = {
- 'cycletime' : 600,
+ 'cycletime' : 60,
'server' : '127.0.0.1',
'port' : 4304
}
+
self.WG.checkconfig(self.instanceName,defaultconfig)
self.config = self.WG.config[instanceName]
@@ -52,7 +51,7 @@
## some regex for identifying Sensors and busses
self.issensor = re.compile(r"[0-9][0-9]\x2E[0-9a-fA-F]+")
- self.isbus = re.compile(r"\x2Fbus\x2E([0-9])+$", re.MULTILINE)
+ self.isbus = re.compile(r"\x2Fbus\x2E([0-9]+)$", re.MULTILINE)
owfsdir = re.findall("from \x27(.*)\x2F",str(connection))[0]
## Sensors and their interfaces
@@ -100,6 +99,7 @@
self.sensors = {}
self.start()
+
def checkConfigDefaults(self,obj,default):
try:
for cfg in default['config'].keys():
@@ -136,14 +136,15 @@
## IDLE for cycletime seconds (default 15sec)
## Fixme: maybe optimize cycletime dynamic based on busload
- self.idle(.1)
+ self.idle(5)
+
+ def _shutdown(self):
for busname in self.busmaster.keys():
if self.busmaster[busname]['readthread'] <> None:
- self.busmaster[busname]['readthread'].join()
+ if self.busmaster[busname]['readthread'].isAlive():
+ self.busmaster[busname]['readthread'].join()
-
-
def findbusmaster(self,path=""):
## search for active busses
childs = False
@@ -208,7 +209,11 @@
pass
if sensor[:2] == "81":
## this must be the Busmaster .. threre should only be one
- self.busmaster[path]['busmaster'] = sensor
+ try:
+ self.mutex.acquire()
+ self.busmaster[path]['busmaster'] = sensor.decode('ISO-8859-15')
+ finally:
+ self.mutex.release()
if sensortype not in self.supportedsensors:
self.debug("unsupported Type: %r" % sensortype)
@@ -230,7 +235,7 @@
'type':sensortype,
'cycle':cycle,
'nextrun':0,
- 'present': self.busmaster[path].get('busmaster',True),
+ 'present': self.busmaster[path].get('busmaster',u'unknown'),
'interfaces': self.supportedsensors[sensortype]['interfaces']
}
finally:
@@ -240,22 +245,29 @@
def read(self):
for busname in self.busmaster.keys():
- if not self.busmaster[busname]['readQueue'].empty():
- if not self.busmaster[busname]['readthread']:
- self.debug("Start read Thread for %s" % busname)
- threadname = "OWFS-Reader_%s" % busname
- try:
- self.mutex.acquire()
- self.busmaster[busname]['readthread'] = threading.Thread(target=self._readThread,args=[busname],name=threadname)
- self.busmaster[busname]['readthread'].start()
- finally:
- self.mutex.release()
+ if not self.isrunning:
+ break
+ if not self.busmaster[busname]['readQueue'].empty():
+ if self.busmaster[busname]['readthread'] == None:
+ self.debug("Start read Thread for %s" % busname)
+ threadname = "OWFS-Reader_%s" % busname
+ try:
+ self.mutex.acquire()
+ self.busmaster[busname]['readthread'] = threading.Thread(target=self._readThread,args=[busname],name=threadname)
+ self.busmaster[busname]['readthread'].start()
+ finally:
+ self.mutex.release()
+ else:
+ self.debug("Bus %r has empty Queue %r" % (busname,self.busmaster[busname]))
def _read(self,busname,sensor):
for iface in self.sensors[sensor]['interfaces'].keys():
+ if not self.isrunning:
+ break
if not self.sensors[sensor]['present'] and iface <> "present":
## if not present check only for present
+ self.debug("Ignore not present sensor %s on bus %s" % (sensor,busname))
continue
## make an id for the sensor (OW:28.043242a32_temperature
id = "%s:%s_%s" % (self.instanceName,sensor,iface)
@@ -281,9 +293,27 @@
if iface == "present":
if str(data) <> "1":
- self.sensors[sensor]['present'] = False
+ try:
+ self.mutex.acquire()
+ self.sensors[sensor]['present'] = False
+ finally:
+ self.mutex.release()
+ data = u""
else:
- data = self.busmaster[busname].get('busmaster',True)
+ try:
+ self.mutex.acquire()
+ self.sensors[sensor]['present'] = busname
+ data = self.busmaster[busname]['busmaster']
+ finally:
+ self.mutex.release()
+
+ nowval = self.WG.DATASTORE.get(id).getValue()
+ if nowval == data:
+ self.debug("DONT UPDATE")
+ ## dont update
+ continue
+ else:
+ print "DATA %r == %r" % (data,nowval)
if data:
self.debug("%s: %r" % (id,data))
@@ -292,18 +322,20 @@
self._addQueue(busname,sensor)
def _addQueue(self,busname,sensor):
+ if not self.isrunning:
+ return
cycletime = time.time() +self.sensors[sensor]['cycle']
self.debug("ADDED %s on %s with %s (%d)s" % (sensor,busname, time.asctime(time.localtime(cycletime)),self.sensors[sensor]['cycle']))
- ## FIXME: not present iButtons should be added to all Busmaster Queues
- #if self.sensors[sensor]['']
if self.sensors[sensor]['present']:
self.busmaster[busname]['readQueue'].put((cycletime,sensor))
else:
if 'present' not in self.sensors[sensor]['interfaces']:
+ self.debug("RETURN no present interface %s" % sensor)
return
for busmaster in self.busmaster.keys():
## add to all busmaster queues
self.busmaster[busmaster]['readQueue'].put((cycletime,sensor))
+ print "QUEUES %r: %r" % (busname,self.busmaster[busname]['readQueue'])
def _readThread(self,busname):
@@ -311,7 +343,7 @@
while self.isrunning:
while not self.busmaster[busname]['readQueue'].check():
if not self.isrunning:
- break
+ return
time.sleep(.1)
self.debug("Queue for bus %s : %r" % (busname, self.busmaster[busname]['readQueue']))
rtime, sensor = self.busmaster[busname]['readQueue'].get()
@@ -349,9 +381,11 @@
return heapq.heappop(self.queue)
def check(self):
+ self.mutex.acquire()
if len(self.queue) == 0:
return False
next = min(self.queue)
+ self.mutex.release()
if len(next)==2:
next = next[0]
else:
Modified: PyWireGate/trunk/owfs_connector/connection.py
===================================================================
--- PyWireGate/trunk/owfs_connector/connection.py 2010-11-29 21:49:00 UTC (rev 178)
+++ PyWireGate/trunk/owfs_connector/connection.py 2010-12-02 12:19:36 UTC (rev 179)
@@ -26,8 +26,6 @@
"""
-import sys
-import os
import socket
import struct
import re
Modified: PyWireGate/trunk/scheduler.py
===================================================================
--- PyWireGate/trunk/scheduler.py 2010-11-29 21:49:00 UTC (rev 178)
+++ PyWireGate/trunk/scheduler.py 2010-12-02 12:19:36 UTC (rev 179)
@@ -26,7 +26,7 @@
-class scheduler:
+class scheduler(object):
def __init__(self,parent):
self._parent = parent
if parent:
@@ -67,8 +67,15 @@
if __name__ == '__main__':
- s = scheduler(False)
- time.sleep(155)
+ s = apscheduler()
+ s.start()
+ import time
+ def test():
+ print "TIME: %s" % time.asctime()
+ test()
+ s.add_cron_job(test,minute='*/3',second='0')
+ while True:
+ pass
s.shutdown()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|