""" NMEA2000-Gerät - auf dem Bus erkannte Geräte - für das eigene Gerät steht initUid() zur Verfügung """ import time import struct from . import lookup class Device(): def __init__(self, address): # WIP: Felder können sich noch ändern! self.address = address # Kann sich zur Laufzeit ändern self.lastseen = time.time() self.lastpinfo = None # Wann letztes Mal Productinfo erhalten? self.lastcinfo = None # Wann letztes Mal Configurationinfo erhalten? self.has_cinfo = True # Weitere Abfragen können verhindert werden # Device info self.NAME = 0 # Wird über getNAME (address claim) gefüllt, 64bit Integer self.uniqueid = None # Z.B. aus der Geräteseriennummer abgeleitet self.manufacturercode = 2046 # Open Boat Projects self.instance = 0 # default 0 self.instlower = 0 # 3bit, ISO ECU Instance self.instupper = 0 # 5bit, ISO Function Instance self.sysinstance = 0 # used with bridged networks, default 0 self.industrygroup = None self.devicefunction = None self.deviceclass = None # Product info self.product = None # Product name self.productcode = None # Product code 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 # Additional data self.customname = None # User defined device name def _ISOtime(self, epoch): if not epoch: return "n/a" return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(epoch)) def initUid(self): # Initialize unique id from raspi cpu id and return 21bit value with open("/sys/firmware/devicetree/base/serial-number", "r") as f: hexid = f.read().rstrip('\x00') return int(hexid, 16) & 0x001FFFFF # 21bit mask def getNAME(self): """ NAME is unique on bus Returns bytearray and sets integer NAME for later easy and fast access """ data = bytearray() data.extend(struct.pack('