OBP60v/nmea2000/device.py

64 lines
2.2 KiB
Python

'''
Platzhalter WIP
- ausprogrammieren nach Bedarf
Geräteliste
- wird regelmäßig aktualisiert
'''
import time
import struct
class Device():
def __init__(self, address):
#WIP
#Felder können sich noch ändern!
self.address = address
self.instance = 0 # default 0
self.sysinstance = 0 # used with bridged networks, default 0
self.lastseen = time.time()
self.uniqueid = None
self.manufacturercode = None
self.industrygroup = None
self.name = None # User defined device name
self.product = None # Product name
self.productcode = None # Product code
self.devicefunction = None
self.deviceclass = None
self.serial = None
self.modelvers = None # Hardware Version
self.softvers = None # Current Software Version
self.n2kvers = None # NMEA2000 Network Message Database Version
self.certlevel = None # NMEA2000 Certification Level
self.loadequiv = None # NMEA2000 LEN
# Configuration Info
self.instdesc1 = None
self.instdesc2 = None
self.manufinfo = None
def getName(self):
# NAME errechnen aus den Claim-Daten
# TODO Das hier ist noch fehlerhaft!
data = bytearray()
data.append((self.deviceclass << 4) | (self.devicefunction & 0x0f))
data.extend(struct.pack('<L', self.uniqueid))
data.extend(struct.pack('<L', self.manufacturercode))
data.extend(struct.pack('<L', self.industrygroup))
return data
def __str__(self):
out = f"Device: {self.address} : '{self.product}'\n"
out += f" Instance: {self.instance}\n"
out += f" Product Code: {self.productcode}\n"
out += f" Product: {self.product}\n"
out += f" Serial: {self.serial}\n"
out += f" Model Version: {self.modelvers}\n"
out += f" Software Version: {self.softvers}\n"
out += f" NMEA2000 Version: {self.n2kvers}\n"
out += f" Cert-Level: {self.certlevel}\n"
out += f" LEN: {self.loadequiv}"
return out