def encode(params, validate=False): '''Create a sls_lockorder binary message payload to pack into an AIS Msg sls_lockorder. Fields in params: - vessel(aisstr6): Vessel Name - direction(bool): Up bound/Down bound - ETA_month(uint): Estimated time of arrival month 1..12 - ETA_day(uint): Estimated time of arrival day of the month 1..31 - ETA_hour(uint): Estimated time of arrival UTC hours 0..23 - ETA_min(uint): Estimated time of arrival minutes - reserved(uint): Reserved bits for future use (field automatically set to "0") @param params: Dictionary of field names/values. Throws a ValueError exception if required is missing @param validate: Set to true to cause checking to occur. Runs slower. FIX: not implemented. @rtype: BitVector @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8 @note: The returned bits may not be 6 bit aligned. It is up to you to pad out the bits. ''' bvList = [] if 'vessel' in params: bvList.append(aisstring.encode(params['vessel'],90)) else: bvList.append(aisstring.encode('@@@@@@@@@@@@@@@',90)) if params["direction"]: bvList.append(TrueBV) else: bvList.append(FalseBV) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['ETA_month']),4)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['ETA_day']),5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['ETA_hour']),5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['ETA_min']),6)) bvList.append(binary.setBitVectorSize(BitVector(intVal=0),19)) return binary.joinBV(bvList)
def encode(params, validate=False): '''Create a sls_wind binary message payload to pack into an AIS Msg sls_wind. Fields in params: - time_month(uint): Time tag of measurement month 1..12 - time_day(uint): Time tag of measurement day of the month 1..31 - time_hour(uint): Time tag of measurement UTC hours 0..23 - time_min(uint): Time tag of measurement minutes - stationid(aisstr6): Character identifier of the station - pos_longitude(decimal): Location of measurement East West location - pos_latitude(decimal): Location of measurement North South location - speed(udecimal): Average wind speed - gust(udecimal): Wind gust - direction(uint): Wind direction - reserved(uint): Reserved bits for future use (field automatically set to "0") @param params: Dictionary of field names/values. Throws a ValueError exception if required is missing @param validate: Set to true to cause checking to occur. Runs slower. FIX: not implemented. @rtype: BitVector @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8 @note: The returned bits may not be 6 bit aligned. It is up to you to pad out the bits. ''' bvList = [] bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_month']),4)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_day']),5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_hour']),5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_min']),6)) if 'stationid' in params: bvList.append(aisstring.encode(params['stationid'],42)) else: bvList.append(aisstring.encode('@@@@@@@',42)) if 'pos_longitude' in params: bvList.append(binary.bvFromSignedInt(int(Decimal(params['pos_longitude'])*Decimal('60000')),25)) else: bvList.append(binary.bvFromSignedInt(10860000,25)) if 'pos_latitude' in params: bvList.append(binary.bvFromSignedInt(int(Decimal(params['pos_latitude'])*Decimal('60000')),24)) else: bvList.append(binary.bvFromSignedInt(5460000,24)) if 'speed' in params: bvList.append(binary.setBitVectorSize(BitVector(intVal=int((Decimal(params['speed'])*Decimal('10')))),10)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=int(1023)),10)) if 'gust' in params: bvList.append(binary.setBitVectorSize(BitVector(intVal=int((Decimal(params['gust'])*Decimal('10')))),10)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=int(1023)),10)) if 'direction' in params: bvList.append(binary.setBitVectorSize(BitVector(intVal=params['direction']),9)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=511),9)) bvList.append(binary.setBitVectorSize(BitVector(intVal=0),4)) return binary.joinBV(bvList)
def encode(params, validate=False): '''Create a sls_waterlevel binary message payload to pack into an AIS Msg sls_waterlevel. Fields in params: - time_month(uint): Time tag of measurement month 1..12 - time_day(uint): Time tag of measurement day of the month 1..31 - time_hour(uint): Time tag of measurement UTC hours 0..23 - time_min(uint): Time tag of measurement minutes - stationid(aisstr6): Character identifier of the station. Usually a number. - pos_longitude(decimal): Location of measurement East West location - pos_latitude(decimal): Location of measurement North South location - type(uint): How to interpret the water level - waterlevel(int): Water level in centimeters - datum(uint): What reference datum applies to the value - reserved(uint): Reserved bits for future use (field automatically set to "0") @param params: Dictionary of field names/values. Throws a ValueError exception if required is missing @param validate: Set to true to cause checking to occur. Runs slower. FIX: not implemented. @rtype: BitVector @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8 @note: The returned bits may not be 6 bit aligned. It is up to you to pad out the bits. ''' bvList = [] bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_month']),4)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_day']),5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_hour']),5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_min']),6)) if 'stationid' in params: bvList.append(aisstring.encode(params['stationid'],42)) else: bvList.append(aisstring.encode('@@@@@@@',42)) if 'pos_longitude' in params: bvList.append(binary.bvFromSignedInt(int(Decimal(params['pos_longitude'])*Decimal('60000')),25)) else: bvList.append(binary.bvFromSignedInt(10860000,25)) if 'pos_latitude' in params: bvList.append(binary.bvFromSignedInt(int(Decimal(params['pos_latitude'])*Decimal('60000')),24)) else: bvList.append(binary.bvFromSignedInt(5460000,24)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['type']),1)) if 'waterlevel' in params: bvList.append(binary.bvFromSignedInt(params['waterlevel'],16)) else: bvList.append(binary.bvFromSignedInt(-32768,16)) if 'datum' in params: bvList.append(binary.setBitVectorSize(BitVector(intVal=params['datum']),2)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=31),2)) bvList.append(binary.setBitVectorSize(BitVector(intVal=0),14)) return binary.joinBV(bvList)
def encode(params, validate=False): '''Create a sls_lockschedule binary message payload to pack into an AIS Msg sls_lockschedule. Fields in params: - vessel(aisstr6): Vessel Name - direction(bool): Up bound/Down bound - ETA_month(uint): Estimated time of arrival month 1..12 - ETA_day(uint): Estimated time of arrival day of the month 1..31 - ETA_hour(uint): Estimated time of arrival UTC hours 0..23 - ETA_min(uint): Estimated time of arrival minutes - reserved(uint): Reserved bits for future use (field automatically set to "0") @param params: Dictionary of field names/values. Throws a ValueError exception if required is missing @param validate: Set to true to cause checking to occur. Runs slower. FIX: not implemented. @rtype: BitVector @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8 @note: The returned bits may not be 6 bit aligned. It is up to you to pad out the bits. ''' bvList = [] if 'vessel' in params: bvList.append(aisstring.encode(params['vessel'], 90)) else: bvList.append(aisstring.encode('@@@@@@@@@@@@@@@', 90)) if params["direction"]: bvList.append(TrueBV) else: bvList.append(FalseBV) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['ETA_month']), 4)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['ETA_day']), 5)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['ETA_hour']), 5)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['ETA_min']), 6)) bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 19)) return binary.joinBV(bvList)
def encode(params, validate=False): '''Create a alltypesmsg binary message payload to pack into an AIS Msg alltypesmsg. Fields in params: - dac(uint): Designated Area Code (field automatically set to "366") - reqDecimal(decimal): required decimal value... FIX: scale or no? (field automatically set to "122") - unavail_uint(uint): Unavailable unsigned integer - anUInt(uint): NO unavailable unsigned integer - anInt(int): NO unavailable signed integer - aBool(bool): Simple bool - aStr(aisstr6): An ais string of 5 characters - anUDecimal(udecimal): An unsigned decimal. Allow smaller numbers - aDecimal(decimal): A decimal - aFloat(float): An IEEE floating point number @param params: Dictionary of field names/values. Throws a ValueError exception if required is missing @param validate: Set to true to cause checking to occur. Runs slower. FIX: not implemented. @rtype: BitVector @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8 @note: The returned bits may not be 6 bit aligned. It is up to you to pad out the bits. ''' bvList = [] bvList.append(binary.setBitVectorSize(BitVector(intVal=366), 16)) bvList.append(binary.bvFromSignedInt(122, 8)) if 'unavail_uint' in params: bvList.append( binary.setBitVectorSize(BitVector(intVal=params['unavail_uint']), 2)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=3), 2)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['anUInt']), 2)) bvList.append(binary.bvFromSignedInt(params['anInt'], 3)) if params["aBool"]: bvList.append(TrueBV) else: bvList.append(FalseBV) bvList.append(aisstring.encode(params['aStr'], 30)) bvList.append( binary.setBitVectorSize( BitVector(intVal=int((Decimal(params['anUDecimal']) * Decimal('10')))), 16)) bvList.append( binary.bvFromSignedInt( int(Decimal(params['aDecimal']) * Decimal('10')), 16)) bvList.append(binary.float2bitvec(params['aFloat'])) return binary.joinBV(bvList)
def encode(params, validate=False): '''Create a alltypesmsg binary message payload to pack into an AIS Msg alltypesmsg. Fields in params: - dac(uint): Designated Area Code (field automatically set to "366") - reqDecimal(decimal): required decimal value... FIX: scale or no? (field automatically set to "122") - unavail_uint(uint): Unavailable unsigned integer - anUInt(uint): NO unavailable unsigned integer - anInt(int): NO unavailable signed integer - aBool(bool): Simple bool - aStr(aisstr6): An ais string of 5 characters - anUDecimal(udecimal): An unsigned decimal. Allow smaller numbers - aDecimal(decimal): A decimal - aFloat(float): An IEEE floating point number @param params: Dictionary of field names/values. Throws a ValueError exception if required is missing @param validate: Set to true to cause checking to occur. Runs slower. FIX: not implemented. @rtype: BitVector @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8 @note: The returned bits may not be 6 bit aligned. It is up to you to pad out the bits. ''' bvList = [] bvList.append(binary.setBitVectorSize(BitVector(intVal=366),16)) bvList.append(binary.bvFromSignedInt(122,8)) if 'unavail_uint' in params: bvList.append(binary.setBitVectorSize(BitVector(intVal=params['unavail_uint']),2)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=3),2)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['anUInt']),2)) bvList.append(binary.bvFromSignedInt(params['anInt'],3)) if params["aBool"]: bvList.append(TrueBV) else: bvList.append(FalseBV) bvList.append(aisstring.encode(params['aStr'],30)) bvList.append(binary.setBitVectorSize(BitVector(intVal=int((Decimal(params['anUDecimal'])*Decimal('10')))),16)) bvList.append(binary.bvFromSignedInt(int(Decimal(params['aDecimal'])*Decimal('10')),16)) bvList.append(binary.float2bitvec(params['aFloat'])) return binary.joinBV(bvList)
def encode(params, validate=False): '''Create a imo_fairway_closed binary message payload to pack into an AIS Msg imo_fairway_closed. Fields in params: - MessageID(uint): AIS message number. Must be 8 (field automatically set to "8") - RepeatIndicator(uint): Indicated how many times a message has been repeated - UserID(uint): MMSI number of transmitter broadcasting the message - Spare(uint): Reserved for definition by a regional authority. (field automatically set to "0") - dac(uint): Designated Area Code - part 1 of the IAI (field automatically set to "1") - fid(uint): Functional Identifier - part 2 of the IAI (field automatically set to "11") - reason(aisstr6): Reason for closing - from(aisstr6): Location of closing from - to(aisstr6): Location of closing To - radius(uint): Extention of closed area - unit(uint): Unit of extension value for range field - closingday(uint): Closing from day - closingmonth(uint): Closing from month - fromhour(uint): From LT hour (appr) - frommin(uint): From LT minute (appr) - today(uint): To day - tomonth(uint): To month - tohour(uint): To LT hour (appr) - tomin(uint): To LT minute (appr) - spare2(uint): Padding out the slot (field automatically set to "0") @param params: Dictionary of field names/values. Throws a ValueError exception if required is missing @param validate: Set to true to cause checking to occur. Runs slower. FIX: not implemented. @rtype: BitVector @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8 @note: The returned bits may not be 6 bit aligned. It is up to you to pad out the bits. ''' bvList = [] bvList.append(binary.setBitVectorSize(BitVector(intVal=8), 6)) if 'RepeatIndicator' in params: bvList.append( binary.setBitVectorSize( BitVector(intVal=params['RepeatIndicator']), 2)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['UserID']), 30)) bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2)) bvList.append(binary.setBitVectorSize(BitVector(intVal=1), 10)) bvList.append(binary.setBitVectorSize(BitVector(intVal=11), 6)) if 'reason' in params: bvList.append(aisstring.encode(params['reason'], 120)) else: bvList.append(aisstring.encode('@@@@@@@@@@@@@@@@@@@@', 120)) if 'from' in params: bvList.append(aisstring.encode(params['from'], 120)) else: bvList.append(aisstring.encode('@@@@@@@@@@@@@@@@@@@@', 120)) if 'to' in params: bvList.append(aisstring.encode(params['to'], 120)) else: bvList.append(aisstring.encode('@@@@@@@@@@@@@@@@@@@@', 120)) if 'radius' in params: bvList.append( binary.setBitVectorSize(BitVector(intVal=params['radius']), 10)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=1001), 10)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['unit']), 2)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['closingday']), 5)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['closingmonth']), 4)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['fromhour']), 5)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['frommin']), 6)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['today']), 5)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['tomonth']), 4)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['tohour']), 5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['tomin']), 6)) bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 4)) return binary.joinBV(bvList)
def encode(params, validate=False): '''Create a imo_fairway_closed binary message payload to pack into an AIS Msg imo_fairway_closed. Fields in params: - MessageID(uint): AIS message number. Must be 8 (field automatically set to "8") - RepeatIndicator(uint): Indicated how many times a message has been repeated - UserID(uint): MMSI number of transmitter broadcasting the message - Spare(uint): Reserved for definition by a regional authority. (field automatically set to "0") - dac(uint): Designated Area Code - part 1 of the IAI (field automatically set to "1") - fid(uint): Functional Identifier - part 2 of the IAI (field automatically set to "11") - reason(aisstr6): Reason for closing - from(aisstr6): Location of closing from - to(aisstr6): Location of closing To - radius(uint): Extention of closed area - unit(uint): Unit of extension value for range field - closingday(uint): Closing from day - closingmonth(uint): Closing from month - fromhour(uint): From LT hour (appr) - frommin(uint): From LT minute (appr) - today(uint): To day - tomonth(uint): To month - tohour(uint): To LT hour (appr) - tomin(uint): To LT minute (appr) - spare2(uint): Padding out the slot (field automatically set to "0") @param params: Dictionary of field names/values. Throws a ValueError exception if required is missing @param validate: Set to true to cause checking to occur. Runs slower. FIX: not implemented. @rtype: BitVector @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8 @note: The returned bits may not be 6 bit aligned. It is up to you to pad out the bits. ''' bvList = [] bvList.append(binary.setBitVectorSize(BitVector(intVal=8),6)) if 'RepeatIndicator' in params: bvList.append(binary.setBitVectorSize(BitVector(intVal=params['RepeatIndicator']),2)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=0),2)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['UserID']),30)) bvList.append(binary.setBitVectorSize(BitVector(intVal=0),2)) bvList.append(binary.setBitVectorSize(BitVector(intVal=1),10)) bvList.append(binary.setBitVectorSize(BitVector(intVal=11),6)) if 'reason' in params: bvList.append(aisstring.encode(params['reason'],120)) else: bvList.append(aisstring.encode('@@@@@@@@@@@@@@@@@@@@',120)) if 'from' in params: bvList.append(aisstring.encode(params['from'],120)) else: bvList.append(aisstring.encode('@@@@@@@@@@@@@@@@@@@@',120)) if 'to' in params: bvList.append(aisstring.encode(params['to'],120)) else: bvList.append(aisstring.encode('@@@@@@@@@@@@@@@@@@@@',120)) if 'radius' in params: bvList.append(binary.setBitVectorSize(BitVector(intVal=params['radius']),10)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=1001),10)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['unit']),2)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['closingday']),5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['closingmonth']),4)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['fromhour']),5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['frommin']),6)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['today']),5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['tomonth']),4)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['tohour']),5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['tomin']),6)) bvList.append(binary.setBitVectorSize(BitVector(intVal=0),4)) return binary.joinBV(bvList)
def encode(params, validate=False): '''Create a whalenotice binary message payload to pack into an AIS Msg whalenotice. Fields in params: - MessageID(uint): AIS message number. Must be 8 (field automatically set to "8") - RepeatIndicator(uint): Indicated how many times a message has been repeated - UserID(uint): Unique ship identification number (MMSI) - Spare(uint): Reserved for definition by a regional authority. (field automatically set to "0") - dac(uint): Designated Area Code - 366 for the United States (field automatically set to "366") - fid(uint): Functional IDentifier - 63 for the Whale Notice (field automatically set to "63") - efid(uint): Extended Functional IDentifier. 1 for the Whale Notice (dac+fid+efid defines the exact message type) (field automatically set to "1") - month(uint): Time of most recent whale detection. UTC month 1..12 - day(uint): Time of most recent whale detection. UTC day of the month 1..31 - hour(uint): Time of most recent whale detection. UTC hours 0..23 - min(uint): Time of most recent whale detection. UTC minutes - sec(uint): Time of most recent whale detection. UTC seconds - stationid(aisstr6): Identifier of the station that detected the whale. (e.g. which buoy) - longitude(decimal): Center of the detection zone. East West location - latitude(decimal): Center of the detection zone. North South location - timetoexpire(uint): Seconds from the detection time until the notice expires - radius(uint): Distance from center of detection zone (lat/lon above) @param params: Dictionary of field names/values. Throws a ValueError exception if required is missing @param validate: Set to true to cause checking to occur. Runs slower. FIX: not implemented. @rtype: BitVector @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8 @note: The returned bits may not be 6 bit aligned. It is up to you to pad out the bits. ''' bvList = [] bvList.append(binary.setBitVectorSize(BitVector(intVal=8), 6)) if 'RepeatIndicator' in params: bvList.append( binary.setBitVectorSize( BitVector(intVal=params['RepeatIndicator']), 2)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['UserID']), 30)) bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2)) bvList.append(binary.setBitVectorSize(BitVector(intVal=366), 10)) bvList.append(binary.setBitVectorSize(BitVector(intVal=63), 6)) bvList.append(binary.setBitVectorSize(BitVector(intVal=1), 12)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['month']), 4)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['day']), 5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['hour']), 5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['min']), 6)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['sec']), 6)) if 'stationid' in params: bvList.append(aisstring.encode(params['stationid'], 42)) else: bvList.append(aisstring.encode('@@@@@@@', 42)) if 'longitude' in params: bvList.append( binary.bvFromSignedInt( int(Decimal(params['longitude']) * Decimal('600000')), 28)) else: bvList.append(binary.bvFromSignedInt(108600000, 28)) if 'latitude' in params: bvList.append( binary.bvFromSignedInt( int(Decimal(params['latitude']) * Decimal('600000')), 27)) else: bvList.append(binary.bvFromSignedInt(54600000, 27)) if 'timetoexpire' in params: bvList.append( binary.setBitVectorSize(BitVector(intVal=params['timetoexpire']), 16)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 16)) if 'radius' in params: bvList.append( binary.setBitVectorSize(BitVector(intVal=params['radius']), 16)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=65534), 16)) return binary.joinBV(bvList)
def encode(params, validate=False): '''Create a whalenotice binary message payload to pack into an AIS Msg whalenotice. Fields in params: - MessageID(uint): AIS message number. Must be 8 (field automatically set to "8") - RepeatIndicator(uint): Indicated how many times a message has been repeated - UserID(uint): Unique ship identification number (MMSI) - Spare(uint): Reserved for definition by a regional authority. (field automatically set to "0") - dac(uint): Designated Area Code - 366 for the United States (field automatically set to "366") - fid(uint): Functional IDentifier - 63 for the Whale Notice (field automatically set to "63") - efid(uint): Extended Functional IDentifier. 1 for the Whale Notice (dac+fid+efid defines the exact message type) (field automatically set to "1") - month(uint): Time of most recent whale detection. UTC month 1..12 - day(uint): Time of most recent whale detection. UTC day of the month 1..31 - hour(uint): Time of most recent whale detection. UTC hours 0..23 - min(uint): Time of most recent whale detection. UTC minutes - sec(uint): Time of most recent whale detection. UTC seconds - stationid(aisstr6): Identifier of the station that detected the whale. (e.g. which buoy) - longitude(decimal): Center of the detection zone. East West location - latitude(decimal): Center of the detection zone. North South location - timetoexpire(uint): Seconds from the detection time until the notice expires - radius(uint): Distance from center of detection zone (lat/lon above) @param params: Dictionary of field names/values. Throws a ValueError exception if required is missing @param validate: Set to true to cause checking to occur. Runs slower. FIX: not implemented. @rtype: BitVector @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8 @note: The returned bits may not be 6 bit aligned. It is up to you to pad out the bits. ''' bvList = [] bvList.append(binary.setBitVectorSize(BitVector(intVal=8),6)) if 'RepeatIndicator' in params: bvList.append(binary.setBitVectorSize(BitVector(intVal=params['RepeatIndicator']),2)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=0),2)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['UserID']),30)) bvList.append(binary.setBitVectorSize(BitVector(intVal=0),2)) bvList.append(binary.setBitVectorSize(BitVector(intVal=366),10)) bvList.append(binary.setBitVectorSize(BitVector(intVal=63),6)) bvList.append(binary.setBitVectorSize(BitVector(intVal=1),12)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['month']),4)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['day']),5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['hour']),5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['min']),6)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['sec']),6)) if 'stationid' in params: bvList.append(aisstring.encode(params['stationid'],42)) else: bvList.append(aisstring.encode('@@@@@@@',42)) if 'longitude' in params: bvList.append(binary.bvFromSignedInt(int(Decimal(params['longitude'])*Decimal('600000')),28)) else: bvList.append(binary.bvFromSignedInt(108600000,28)) if 'latitude' in params: bvList.append(binary.bvFromSignedInt(int(Decimal(params['latitude'])*Decimal('600000')),27)) else: bvList.append(binary.bvFromSignedInt(54600000,27)) if 'timetoexpire' in params: bvList.append(binary.setBitVectorSize(BitVector(intVal=params['timetoexpire']),16)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=0),16)) if 'radius' in params: bvList.append(binary.setBitVectorSize(BitVector(intVal=params['radius']),16)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=65534),16)) return binary.joinBV(bvList)
def encode(params, validate=False): """Create a waterlevel binary message payload to pack into an AIS Msg waterlevel. Fields in params: - MessageID(uint): AIS message number. Must be 8 (field automatically set to "8") - RepeatIndicator(uint): Indicated how many times a message has been repeated - UserID(uint): Unique ship identification number (MMSI) - Spare(uint): Reserved for definition by a regional authority. (field automatically set to "0") - dac(uint): Designated Area Code (field automatically set to "366") - fid(uint): Functional Identifier (field automatically set to "63") - month(uint): Time the measurement represents month 1..12 - day(uint): Time the measurement represents day of the month 1..31 - hour(uint): Time the measurement represents UTC hours 0..23 - min(uint): Time the measurement represents minutes - stationid(aisstr6): Character identifier of the station. Usually a number. - waterlevel(int): Water level in centimeters - datum(uint): What reference datum applies to the value - sigma(uint): Standard deviation of 1 second samples used to compute the water level height. FIX: is this the correct description of sigma? - source(uint): How the water level was derived @param params: Dictionary of field names/values. Throws a ValueError exception if required is missing @param validate: Set to true to cause checking to occur. Runs slower. FIX: not implemented. @rtype: BitVector @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8 @note: The returned bits may not be 6 bit aligned. It is up to you to pad out the bits. """ bvList = [] bvList.append(binary.setBitVectorSize(BitVector(intVal=8), 6)) if "RepeatIndicator" in params: bvList.append(binary.setBitVectorSize(BitVector(intVal=params["RepeatIndicator"]), 2)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params["UserID"]), 30)) bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2)) bvList.append(binary.setBitVectorSize(BitVector(intVal=366), 10)) bvList.append(binary.setBitVectorSize(BitVector(intVal=63), 6)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params["month"]), 4)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params["day"]), 5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params["hour"]), 5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params["min"]), 6)) if "stationid" in params: bvList.append(aisstring.encode(params["stationid"], 42)) else: bvList.append(aisstring.encode("@@@@@@@", 42)) if "waterlevel" in params: bvList.append(binary.bvFromSignedInt(params["waterlevel"], 16)) else: bvList.append(binary.bvFromSignedInt(-32768, 16)) if "datum" in params: bvList.append(binary.setBitVectorSize(BitVector(intVal=params["datum"]), 5)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=31), 5)) if "sigma" in params: bvList.append(binary.setBitVectorSize(BitVector(intVal=params["sigma"]), 7)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=127), 7)) if "source" in params: bvList.append(binary.setBitVectorSize(BitVector(intVal=params["source"]), 3)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 3)) return binary.joinBV(bvList)
def encode(params, validate=False): '''Create a sls_weatherreport binary message payload to pack into an AIS Msg sls_weatherreport. Fields in params: - time_month(uint): Time tag of measurement month 1..12 - time_day(uint): Time tag of measurement day of the month 1..31 - time_hour(uint): Time tag of measurement UTC hours 0..23 - time_min(uint): Time tag of measurement minutes - stationid(aisstr6): Character identifier of the station - pos_longitude(decimal): Location of measurement East West location - pos_latitude(decimal): Location of measurement North South location - speed(udecimal): Average wind speed - gust(udecimal): Wind gust - direction(uint): Wind direction - atmpressure(udecimal): Atmospheric pressure - airtemp(decimal): Air temperature - dewpoint(decimal): Dew Point - visibility(udecimal): Visibility - watertemp(decimal): Water Temperature - reserved(uint): Reserved bits for future use (field automatically set to "0") @param params: Dictionary of field names/values. Throws a ValueError exception if required is missing @param validate: Set to true to cause checking to occur. Runs slower. FIX: not implemented. @rtype: BitVector @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8 @note: The returned bits may not be 6 bit aligned. It is up to you to pad out the bits. ''' bvList = [] bvList.append( binary.setBitVectorSize(BitVector(intVal=params['time_month']), 4)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['time_day']), 5)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['time_hour']), 5)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['time_min']), 6)) if 'stationid' in params: bvList.append(aisstring.encode(params['stationid'], 42)) else: bvList.append(aisstring.encode('@@@@@@@', 42)) if 'pos_longitude' in params: bvList.append( binary.bvFromSignedInt( int(Decimal(params['pos_longitude']) * Decimal('60000')), 25)) else: bvList.append(binary.bvFromSignedInt(10860000, 25)) if 'pos_latitude' in params: bvList.append( binary.bvFromSignedInt( int(Decimal(params['pos_latitude']) * Decimal('60000')), 24)) else: bvList.append(binary.bvFromSignedInt(5460000, 24)) if 'speed' in params: bvList.append( binary.setBitVectorSize( BitVector(intVal=int((Decimal(params['speed']) * Decimal('10')))), 10)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=int(1023)), 10)) if 'gust' in params: bvList.append( binary.setBitVectorSize( BitVector(intVal=int((Decimal(params['gust']) * Decimal('10')))), 10)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=int(1023)), 10)) if 'direction' in params: bvList.append( binary.setBitVectorSize(BitVector(intVal=params['direction']), 9)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=511), 9)) if 'atmpressure' in params: bvList.append( binary.setBitVectorSize( BitVector(intVal=int((Decimal(params['atmpressure']) * Decimal('10')))), 14)) else: bvList.append( binary.setBitVectorSize(BitVector(intVal=int(163830)), 14)) if 'airtemp' in params: bvList.append( binary.bvFromSignedInt( int(Decimal(params['airtemp']) * Decimal('10')), 10)) else: bvList.append(binary.bvFromSignedInt(-512, 10)) if 'dewpoint' in params: bvList.append( binary.bvFromSignedInt( int(Decimal(params['dewpoint']) * Decimal('10')), 10)) else: bvList.append(binary.bvFromSignedInt(-512, 10)) if 'visibility' in params: bvList.append( binary.setBitVectorSize( BitVector(intVal=int((Decimal(params['visibility']) * Decimal('10')))), 8)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=int(255)), 8)) if 'watertemp' in params: bvList.append( binary.bvFromSignedInt( int(Decimal(params['watertemp']) * Decimal('10')), 10)) else: bvList.append(binary.bvFromSignedInt(-512, 10)) bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 4)) return binary.joinBV(bvList)
def encode(params, validate=False): '''Create a waterlevel binary message payload to pack into an AIS Msg waterlevel. Fields in params: - MessageID(uint): AIS message number. Must be 8 (field automatically set to "8") - RepeatIndicator(uint): Indicated how many times a message has been repeated - UserID(uint): Unique ship identification number (MMSI) - Spare(uint): Reserved for definition by a regional authority. (field automatically set to "0") - dac(uint): Designated Area Code (field automatically set to "366") - fid(uint): Functional Identifier (field automatically set to "63") - month(uint): Time the measurement represents month 1..12 - day(uint): Time the measurement represents day of the month 1..31 - hour(uint): Time the measurement represents UTC hours 0..23 - min(uint): Time the measurement represents minutes - stationid(aisstr6): Character identifier of the station. Usually a number. - waterlevel(int): Water level in centimeters - datum(uint): What reference datum applies to the value - sigma(uint): Standard deviation of 1 second samples used to compute the water level height. FIX: is this the correct description of sigma? - source(uint): How the water level was derived @param params: Dictionary of field names/values. Throws a ValueError exception if required is missing @param validate: Set to true to cause checking to occur. Runs slower. FIX: not implemented. @rtype: BitVector @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8 @note: The returned bits may not be 6 bit aligned. It is up to you to pad out the bits. ''' bvList = [] bvList.append(binary.setBitVectorSize(BitVector(intVal=8), 6)) if 'RepeatIndicator' in params: bvList.append( binary.setBitVectorSize( BitVector(intVal=params['RepeatIndicator']), 2)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2)) bvList.append( binary.setBitVectorSize(BitVector(intVal=params['UserID']), 30)) bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2)) bvList.append(binary.setBitVectorSize(BitVector(intVal=366), 10)) bvList.append(binary.setBitVectorSize(BitVector(intVal=63), 6)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['month']), 4)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['day']), 5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['hour']), 5)) bvList.append(binary.setBitVectorSize(BitVector(intVal=params['min']), 6)) if 'stationid' in params: bvList.append(aisstring.encode(params['stationid'], 42)) else: bvList.append(aisstring.encode('@@@@@@@', 42)) if 'waterlevel' in params: bvList.append(binary.bvFromSignedInt(params['waterlevel'], 16)) else: bvList.append(binary.bvFromSignedInt(-32768, 16)) if 'datum' in params: bvList.append( binary.setBitVectorSize(BitVector(intVal=params['datum']), 5)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=31), 5)) if 'sigma' in params: bvList.append( binary.setBitVectorSize(BitVector(intVal=params['sigma']), 7)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=127), 7)) if 'source' in params: bvList.append( binary.setBitVectorSize(BitVector(intVal=params['source']), 3)) else: bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 3)) return binary.joinBV(bvList)