Skip to content

Commit 83a0aac

Browse files
committed
Added the tentative ability to read in stats from UDP Multicast from a Daktronics DTSI. What little i tested this evening appears to work.
1 parent b27231b commit 83a0aac

File tree

3 files changed

+47
-16
lines changed

3 files changed

+47
-16
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,4 @@ crashlytics-build.properties
135135
fabric.properties
136136
.idea/
137137

138+
/testing.py

daktronics.py

+45-15
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import serial
2+
import socket
3+
import struct
24

35
dakSports = {
46
'auto racing': {},
@@ -238,13 +240,46 @@
238240
'wrestling': {}
239241
}
240242

243+
DAKUDP_IP = "224.51.105.104"
241244

242-
class Daktronics(object):
243-
def __init__(self, sport, ser=None):
244-
if ser is not None:
245-
self.Serial = ser
245+
246+
class DakSerial(object):
247+
def __init__(self, data=None):
248+
if type(data) is serial.Serial:
249+
self.data = data
250+
elif type(data) is str:
251+
self.data = serial.Serial(data, baudrate=19200, timeout=1)
246252
else:
247-
self.Serial = serial.Serial("COM1", 19200)
253+
self.data = serial.Serial("COM1", baudrate=19200, timeout=1)
254+
255+
def read(self):
256+
rtd = b''
257+
c = b''
258+
while c != b'\x16':
259+
c = self.data.read()
260+
c = b'\x16'
261+
while c != b'\x17':
262+
c = self.data.read()
263+
rtd += c
264+
return rtd
265+
266+
267+
class DakUDP(object):
268+
def __init__(self, data=21000):
269+
self.data = None
270+
self.data = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
271+
self.data.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
272+
self.data.bind(('', data))
273+
mreq = struct.pack("=4sl", socket.inet_aton(DAKUDP_IP), socket.INADDR_ANY)
274+
self.data.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
275+
276+
def read(self):
277+
return self.data.recv(1024)
278+
279+
280+
class Daktronics(object):
281+
def __init__(self, sport, data):
282+
self.dakrtd = data
248283
self.header = b''
249284
self.code = b''
250285
self.rtd = b''
@@ -254,14 +289,7 @@ def __init__(self, sport, ser=None):
254289
self.dakString = " " * self.sport['dakSize'][1]
255290

256291
def update(self):
257-
c = b''
258-
self.rtd = b''
259-
while c != b'\x16':
260-
c = self.Serial.read()
261-
c = b'\x16'
262-
while c != b'\x17':
263-
c = self.Serial.read()
264-
self.rtd += c
292+
self.rtd = self.dakrtd.read()
265293

266294
self.header = self.rtd.partition(b'\x16')[2].partition(b'\x01')[0]
267295
self.code = self.rtd.partition(b'\x01')[2].partition(b'\x02')[0].partition(b'\x04')[0]
@@ -280,11 +308,13 @@ def __getitem__(self, gikey):
280308

281309

282310
if __name__ == '__main__':
283-
dak = Daktronics("football")
311+
print("UDP MULTICAST 21000")
312+
dakdata = DakUDP(21000)
313+
dak = Daktronics("hockey/lacrosse", dakdata)
284314
while True:
285315
dak.update()
286316
print("--------------------------------------------------------------")
287-
print(dak['Main Clock Time [mm:ss/ss.t]'])
317+
print(dak['Main Clock Time (mm:ss/ss.t )'])
288318
print(dak['Home Team Name'], dak['Home Team Score'])
289319
print(dak['Guest Team Name'], dak['Guest Team Score'])
290320
print("--------------------------------------------------------------")

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
setup(
44
name='pydak',
55
version='0.1',
6-
packages=['serial'],
6+
packages=['pyserial'],
77
url='https://github.com/fimion/pydak',
88
license='MIT',
99
author='Alex Riviere',

0 commit comments

Comments
 (0)