add TG reply
This commit is contained in:
parent
7f4844299d
commit
75d2b9ccc2
209
full_bridge.py
209
full_bridge.py
@ -324,11 +324,6 @@ def generate_apps():
|
||||
access_systems[key] = i[1]
|
||||
print(access_systems)
|
||||
|
||||
#print(type(public_apps))
|
||||
#print(type(local_acess_systems))
|
||||
#print()
|
||||
#print(combined)
|
||||
#print(local_acess_systems.update(public_apps))
|
||||
return access_systems
|
||||
|
||||
# Thanks for this forum post for this - https://stackoverflow.com/questions/2579535/convert-dd-decimal-degrees-to-dms-degrees-minutes-seconds-in-python
|
||||
@ -341,7 +336,7 @@ def decdeg2dms(dd):
|
||||
degrees = degrees if is_positive else -degrees
|
||||
return (degrees,minutes,seconds)
|
||||
|
||||
def user_setting_write(dmr_id, setting, value):
|
||||
def user_setting_write(dmr_id, setting, value, call_type):
|
||||
## try:
|
||||
# Open file and load as dict for modification
|
||||
logger.info(setting.upper())
|
||||
@ -360,15 +355,24 @@ def user_setting_write(dmr_id, setting, value):
|
||||
user_comment = user_dict[dmr_id][3]['comment'] = value[0:35]
|
||||
if setting.upper() == 'APRS ON':
|
||||
user_dict[dmr_id][5] = {'APRS': True}
|
||||
send_sms(False, dmr_id, 0000, 0000, 'unit', 'APRS MSG TX/RX Enabled')
|
||||
if call_type == 'unit':
|
||||
send_sms(False, dmr_id, 0000, 0000, 'unit', 'APRS MSG TX/RX Enabled')
|
||||
if call_type == 'vcsbk':
|
||||
send_sms(False, 9, 0000, 0000, 'group', 'APRS MSG TX/RX Enabled')
|
||||
if setting.upper() == 'APRS OFF':
|
||||
user_dict[dmr_id][5] = {'APRS': False}
|
||||
send_sms(False, dmr_id, 0000, 0000, 'unit', 'APRS MSG TX/RX Disabled')
|
||||
if call_type == 'unit':
|
||||
send_sms(False, dmr_id, 0000, 0000, 'unit', 'APRS MSG TX/RX Disabled')
|
||||
if call_type == 'vcsbk':
|
||||
send_sms(False, 9, 0000, 0000, 'group', 'APRS MSG TX/RX Disabled')
|
||||
if setting.upper() == 'PIN':
|
||||
#try:
|
||||
#if user_dict[dmr_id]:
|
||||
user_dict[dmr_id][4]['pin'] = value
|
||||
send_sms(False, dmr_id, 0000, 0000, 'unit', 'You can now use your pin on the dashboard.')
|
||||
if call_type == 'unit':
|
||||
send_sms(False, dmr_id, 0000, 0000, 'unit', 'You can now use your pin on the dashboard.')
|
||||
if call_type == 'vcsbk':
|
||||
send_sms(False, 9, 0000, 0000, 'group', 'You can now use your pin on the dashboard.')
|
||||
#if not user_dict[dmr_id]:
|
||||
# user_dict[dmr_id] = [{'call': str(get_alias((dmr_id), subscriber_ids))}, {'ssid': ''}, {'icon': ''}, {'comment': ''}, {'pin': pin}]
|
||||
#except:
|
||||
@ -385,28 +389,35 @@ def user_setting_write(dmr_id, setting, value):
|
||||
|
||||
# Process SMS, do something bases on message
|
||||
|
||||
def process_sms(_rf_src, sms):
|
||||
def process_sms(_rf_src, sms, call_type):
|
||||
logger.info(call_type)
|
||||
parse_sms = sms.split(' ')
|
||||
logger.info(parse_sms)
|
||||
if parse_sms[0] == 'ID':
|
||||
logger.info(str(get_alias(int_id(_rf_src), subscriber_ids)) + ' - ' + str(int_id(_rf_src)))
|
||||
send_sms(False, int_id(_rf_src), 0000, 0000, 'unit', 'Your DMR ID: ' + str(int_id(_rf_src)) + ' - ' + str(get_alias(int_id(_rf_src), subscriber_ids)))
|
||||
if call_type == 'unit':
|
||||
send_sms(False, int_id(_rf_src), 0000, 0000, 'unit', 'Your DMR ID: ' + str(int_id(_rf_src)) + ' - ' + str(get_alias(int_id(_rf_src), subscriber_ids)))
|
||||
if call_type == 'vcsbk':
|
||||
send_sms(False, 9, 0000, 0000, 'group', 'Your DMR ID: ' + str(int_id(_rf_src)) + ' - ' + str(get_alias(int_id(_rf_src), subscriber_ids)))
|
||||
elif parse_sms[0] == 'TEST':
|
||||
logger.info('It works!')
|
||||
send_sms(False, int_id(_rf_src), 0000, 0000, 'unit', 'It works')
|
||||
if call_type == 'unit':
|
||||
send_sms(False, int_id(_rf_src), 0000, 0000, 'unit', 'It works')
|
||||
if call_type == 'vcsbk':
|
||||
send_sms(False, 9, 0000, 0000, 'group', 'It works')
|
||||
elif '@ICON' in parse_sms[0]:
|
||||
user_setting_write(int_id(_rf_src), re.sub(' .*|@','',sms), re.sub('@ICON| ','',sms))
|
||||
user_setting_write(int_id(_rf_src), re.sub(' .*|@','',sms), re.sub('@ICON| ','',sms), call_type)
|
||||
elif '@SSID' in parse_sms[0]:
|
||||
user_setting_write(int_id(_rf_src), re.sub(' .*|@','',sms), re.sub('@SSID| ','',sms))
|
||||
user_setting_write(int_id(_rf_src), re.sub(' .*|@','',sms), re.sub('@SSID| ','',sms), call_type)
|
||||
elif '@COM' in parse_sms[0]:
|
||||
user_setting_write(int_id(_rf_src), re.sub(' .*|@','',sms), re.sub('@COM |@COM','',sms))
|
||||
user_setting_write(int_id(_rf_src), re.sub(' .*|@','',sms), re.sub('@COM |@COM','',sms), call_type)
|
||||
elif '@PIN' in parse_sms[0]:
|
||||
user_setting_write(int_id(_rf_src), re.sub(' .*|@','',sms), int(re.sub('@PIN |@PIN','',sms)))
|
||||
user_setting_write(int_id(_rf_src), re.sub(' .*|@','',sms), int(re.sub('@PIN |@PIN','',sms)), call_type)
|
||||
# Write blank entry to cause APRS receive to look for packets for this station.
|
||||
elif '@APRS ON' in sms or '@APRS on' in sms:
|
||||
user_setting_write(int_id(_rf_src), 'APRS ON', True)
|
||||
user_setting_write(int_id(_rf_src), 'APRS ON', True, call_type)
|
||||
elif '@APRS OFF' in sms or '@APRS off' in sms:
|
||||
user_setting_write(int_id(_rf_src), 'APRS OFF', False)
|
||||
user_setting_write(int_id(_rf_src), 'APRS OFF', False, call_type)
|
||||
elif '@BB' in sms:
|
||||
dashboard_bb_write(get_alias(int_id(_rf_src), subscriber_ids), int_id(_rf_src), time(), re.sub('@BB|@BB ','',sms))
|
||||
elif '@' in parse_sms[0][1:] and '.' in parse_sms[0]: # and ' E-' in sms:
|
||||
@ -519,7 +530,11 @@ def process_sms(_rf_src, sms):
|
||||
|
||||
|
||||
if use_api == False:
|
||||
send_sms(False, int_id(_rf_src), 0000, 0000, 'unit', 'API not enabled. Contact server admin.')
|
||||
if call_type == 'unit':
|
||||
send_sms(False, int_id(_rf_src), 0000, 0000, 'unit', 'API not enabled. Contact server admin.')
|
||||
if call_type == 'vcsbk':
|
||||
send_sms(False, 9, 0000, 0000, 'group', 'API not enabled. Contact server admin.')
|
||||
|
||||
elif '@' in parse_sms[0][0:1] and 'M-' not in parse_sms[1][0:2] or '@' not in parse_sms[0][1:]:
|
||||
#Example SMS text: @ARMDS A-This is a test.
|
||||
s = ' '
|
||||
@ -545,9 +560,17 @@ def process_sms(_rf_src, sms):
|
||||
logger.info(error_exception)
|
||||
logger.info(str(traceback.extract_tb(error_exception.__traceback__)))
|
||||
else:
|
||||
send_sms(False, int_id(_rf_src), 0000, 0000, 'unit', 'APRS Messaging must be enabled. Send command "@APRS ON" or use dashboard to enable.')
|
||||
if call_type == 'unit':
|
||||
send_sms(False, int_id(_rf_src), 0000, 0000, 'unit', 'APRS Messaging must be enabled. Send command "@APRS ON" or use dashboard to enable.')
|
||||
if call_type == 'vcsbk':
|
||||
send_sms(False, 9, 0000, 0000, 'group', 'APRS Messaging must be enabled. Send command "@APRS ON" or use dashboard to enable.')
|
||||
|
||||
except Exception as e:
|
||||
send_sms(False, int_id(_rf_src), 0000, 0000, 'unit', 'APRS Messaging must be enabled. Send command "@APRS ON" or use dashboard to enable.')
|
||||
if call_type == 'unit':
|
||||
send_sms(False, int_id(_rf_src), 0000, 0000, 'unit', 'APRS Messaging must be enabled. Send command "@APRS ON" or use dashboard to enable.')
|
||||
if call_type == 'vcsbk':
|
||||
send_sms(False, 9, 0000, 0000, 'group', 'APRS Messaging must be enabled. Send command "@APRS ON" or use dashboard to enable.')
|
||||
|
||||
try:
|
||||
if sms in cmd_list:
|
||||
logger.info('Executing command/script.')
|
||||
@ -597,7 +620,8 @@ def create_crc32(fragment_input):
|
||||
while c > 0:
|
||||
crc = crc + pre_crc[c-2:c]
|
||||
c = c - 2
|
||||
crc = crc.zfill(8)
|
||||
#crc = crc.zfill(8)
|
||||
crc = crc.ljust(8, '0')
|
||||
# Return original data and append CRC32
|
||||
print('Output: ' + fragment_input + crc)
|
||||
return fragment_input + crc
|
||||
@ -829,6 +853,7 @@ def data_que_send():
|
||||
#logger.info(UNIT_MAP)
|
||||
for packet_file in os.listdir('/tmp/.hblink_data_que_' + str(CONFIG['GPS_DATA']['APRS_LOGIN_CALL']).upper() + '/'):
|
||||
logger.info('Sending SMS')
|
||||
logger.info(os.listdir('/tmp/.hblink_data_que_' + str(CONFIG['GPS_DATA']['APRS_LOGIN_CALL']).upper() + '/'))
|
||||
snd_seq = ast.literal_eval(os.popen('cat /tmp/.hblink_data_que_' + str(CONFIG['GPS_DATA']['APRS_LOGIN_CALL']).upper() + '/' + packet_file).read())
|
||||
for data in snd_seq:
|
||||
# Get dest id
|
||||
@ -920,7 +945,119 @@ def aprs_beacon_send():
|
||||
beacon_packet = CONFIG['GPS_DATA']['APRS_LOGIN_CALL'] + '>APHBL3,TCPIP*:!' + CONFIG['GPS_DATA']['IGATE_LATITUDE'] + str(CONFIG['GPS_DATA']['IGATE_BEACON_ICON'][0]) + CONFIG['GPS_DATA']['IGATE_LONGITUDE'] + str(CONFIG['GPS_DATA']['IGATE_BEACON_ICON'][1]) + '/' + CONFIG['GPS_DATA']['IGATE_BEACON_COMMENT']
|
||||
aprs_send(beacon_packet)
|
||||
logger.info(beacon_packet)
|
||||
|
||||
|
||||
### APRS Static positions - by IU7IGU
|
||||
##def sendAprs():
|
||||
## #AIS = aprslib.IS(str(file_config['APRS']['CALLSIGN']), passwd=aprslib.passcode(str(file_config['APRS']['CALLSIGN'])), host=str(file_config['APRS']['SERVER']), port=14580)
|
||||
## #AIS.connect()
|
||||
## f = open('nom_aprs', 'r')
|
||||
## lines = f.readlines()
|
||||
## if lines:
|
||||
## for line in lines:
|
||||
## if line != ' ':
|
||||
## lat_verso = ''
|
||||
## lon_verso = ''
|
||||
## dati = line.split(":")
|
||||
## d1_c = int(float(dati[4]))
|
||||
## d2_c = int(float(dati[5]))
|
||||
##
|
||||
## if d1_c < 0:
|
||||
## d1 = abs(d1_c)
|
||||
## dm1=abs(float(dati[4])) - d1
|
||||
## dm1_s= float(dm1) * 60
|
||||
## dm1_u="{:.4f}".format(dm1_s)
|
||||
## if int(str(dm1_s).split(".")[0]) < 10:
|
||||
## if d1 < 10 and d1 > -10:
|
||||
## lat_utile='0'+str(d1)+'0'+str(dm1_u)
|
||||
## else:
|
||||
## lat_utile = str(d1)+'0'+str(dm1_u)
|
||||
## else:
|
||||
## if d1 < 10 and d1 > -10:
|
||||
## lat_utile='0'+str(d1)+str(dm1_u)
|
||||
## else:
|
||||
## lat_utile = str(d1)+str(dm1_u)
|
||||
##
|
||||
## lat_verso = 'S'
|
||||
##
|
||||
## else:
|
||||
## d1 = int(float(dati[4]))
|
||||
## dm1=float(dati[4]) - d1
|
||||
## dm1_s= float(dm1) * 60
|
||||
## dm1_u="{:.4f}".format(dm1_s)
|
||||
## if int(str(dm1_s).split(".")[0]) < 10:
|
||||
## if int(str(dm1_s).split(".")[0]) < 10:
|
||||
## if d1 < 10 and d1 > -10:
|
||||
## lat_utile='0'+str(d1)+'0'+str(dm1_u)
|
||||
## else:
|
||||
## lat_utile = str(d1)+'0'+str(dm1_u)
|
||||
## else:
|
||||
## if d1 < 10 and d1 > -10:
|
||||
## lat_utile='0'+str(d1)+str(dm1_u)
|
||||
## else:
|
||||
## lat_utile = str(d1)+str(dm1_u)
|
||||
## lat_verso = 'N'
|
||||
##
|
||||
##
|
||||
## if d2_c < 0:
|
||||
## d2=abs(d2_c)
|
||||
## dm2=abs(float(dati[5])) - d2
|
||||
## dm2_s= float(dm2) * 60
|
||||
## dm2_u="{:.3f}".format(dm2_s)
|
||||
## if int(str(dm2_s).split(".")[0]) < 10:
|
||||
## if d2 < 10 and d2 > -10:
|
||||
## lon_utile = '00'+str(d2)+'0'+str(dm2_u)
|
||||
## elif d2 < 100:
|
||||
## lon_utile = '0'+str(d2)+'0'+str(dm2_u)
|
||||
## else:
|
||||
## lon_utile = str(d2)+'0'+str(dm2_s)
|
||||
## else:
|
||||
## if d2 < 10 and d2 > -10:
|
||||
## lon_utile = '00'+str(d2)+str(dm2_u)
|
||||
## elif d2 < 100:
|
||||
## lon_utile = '0'+str(d2)+str(dm2_u)
|
||||
## else:
|
||||
## lon_utile = str(d2)+str(dm2_u)
|
||||
## lon_verso = 'W'
|
||||
##
|
||||
## else:
|
||||
## d2=int(float(dati[5]))
|
||||
## dm2=float(dati[5]) - d2
|
||||
## dm2_s= float(dm2) * 60
|
||||
## dm2_u="{:.3f}".format(dm2_s)
|
||||
## if int(str(dm2_s).split(".")[0]) < 10:
|
||||
## if d2 < 10 and d2 > -10:
|
||||
## lon_utile = '00'+str(d2)+'0'+str(dm2_u)
|
||||
## elif d2 < 100:
|
||||
## lon_utile = '0'+str(d2)+'0'+str(dm2_u)
|
||||
## else:
|
||||
## lon_utile = str(d2)+'0'+str(dm2_s)
|
||||
## else:
|
||||
## if d2 < 10 and d2 > -10:
|
||||
## lon_utile = '00'+str(d2)+str(dm2_u)
|
||||
## elif d2 < 100:
|
||||
## lon_utile = '0'+str(d2)+str(dm2_u)
|
||||
## else:
|
||||
## lon_utile = str(d2)+str(dm2_u)
|
||||
## lon_verso = 'E'
|
||||
##
|
||||
## rx_utile = dati[2][0:3]+'.'+dati[2][3:]
|
||||
## tx_utile = dati[3][0:3]+'.'+dati[3][3:]
|
||||
##
|
||||
## #AIS.sendall(str(dati[0])+">APRS,TCPIP*,qAC,"+str(file_config['APRS']['CALLSIGN'])+":!"+str(lat_utile)[:-2]+lat_verso+"/"+str(lon_utile)[:-1]+lon_verso+"r"+str(file_config['APRS']['MESSAGE'])+' RX: '+str(rx_utile)+' TX: '+str(tx_utile))
|
||||
## #AIS.sendall(str(dati[0])+">APRS,TCPIP*,qAC,"+str(file_config['APRS']['CALLSIGN'])+":!"+str(lat_utile)[:7]+lat_verso+"/"+str(lon_utile)[:8]+lon_verso+"r"+str(file_config['APRS']['MESSAGE'])+' RX: '+str(rx_utile)[:8]+' TX: '+str(tx_utile)[:8]) # + ' CC: ' + str(_this_peer['COLORCODE']).decode('UTF-8'))
|
||||
## aprs_send(str(dati[0])+">APRS,TCPIP*,qAC,"+str(CONFIG['GPS_DATA']['APRS_LOGIN_CALL'])+":!"+str(lat_utile)[:7]+lat_verso+"/"+str(lon_utile)[:8]+lon_verso+"r"+str(file_config['GPS_DATA']['APRS_STATIC_MESSAGE'])+' RX: '+str(rx_utile)[:8]+' TX: '+str(tx_utile)[:8]) # + ' CC: ' + str(_this_peer['COLORCODE']).decode('UTF-8')
|
||||
## logging.info('APRS INVIATO/APRS Sent')
|
||||
##
|
||||
##def aprs_upload(config):
|
||||
## if CONFIG['APRS']['ENABLED']:
|
||||
## if int(config['APRS']['REPORT_INTERVAL']) >= 10:
|
||||
## l=task.LoopingCall(sendAprs)
|
||||
## interval_time = int(int(config['APRS']['REPORT_INTERVAL'])*60)
|
||||
## l.start(interval_time)
|
||||
## else:
|
||||
## l=task.LoopingCall(sendAprs)
|
||||
## l.start(15*60)
|
||||
## logger.info('Report Time APRS to short')
|
||||
|
||||
########### HBlink stuff below #########################
|
||||
|
||||
@ -936,22 +1073,13 @@ UNIT_MAP = {}
|
||||
time_20 = 630720000
|
||||
|
||||
# Build a UNIT_MAP based on values in STATIC_MAP.
|
||||
try:
|
||||
def build_unit_map(CONFIG):
|
||||
for i in STATIC_UNIT:
|
||||
UNIT_MAP[bytes_3(i[0])] = i[1], time() + time_20, i[2]
|
||||
# If empty, return empty dictionary
|
||||
except:
|
||||
UNIT_MAP = {}
|
||||
UNIT_MAP[bytes_3(i[0])] = i[1], time() + time_20, int(CONFIG['GPS_DATA']['UNIT_SMS_TS'])
|
||||
return UNIT_MAP
|
||||
|
||||
|
||||
def build_unit(CONFIG):
|
||||
|
||||
# Edit these 2
|
||||
#config_file = '/tmp/hblink-SAMPLE.cfg'
|
||||
#EXCLUDE_FROM_UNIT = ['OBP-1', 'PEER-1']
|
||||
######################################
|
||||
#import config
|
||||
#CONFIG = config.build_config(config_file)
|
||||
#exclude = rules_module.EXCLUDE_FROM_UNIT
|
||||
UNIT = []
|
||||
for i in CONFIG['SYSTEMS'].items():
|
||||
if i[1]['ENABLED'] == True and i[1]['MODE'] != 'XLXPEER' and i[0] not in exclude:
|
||||
@ -2433,7 +2561,7 @@ class routerHBP(HBSYSTEM):
|
||||
sms = codecs.decode(bytes.fromhex(''.join(sms_hex_string[:-8].split('00'))), 'utf-8', 'ignore')
|
||||
msg_found = re.sub('.*\n', '', sms)
|
||||
logger.info('\n\n' + 'Received SMS from ' + str(get_alias(int_id(_rf_src), subscriber_ids)) + ', DMR ID: ' + str(int_id(_rf_src)) + ': ' + str(msg_found) + '\n')
|
||||
process_sms(_rf_src, msg_found)
|
||||
process_sms(_rf_src, msg_found, _call_type)
|
||||
#packet_assembly = ''
|
||||
pass
|
||||
#logger.info(bitarray(re.sub("\)|\(|bitarray|'", '', str(bptc_decode(_data)).tobytes().decode('utf-8', 'ignore'))))
|
||||
@ -2555,8 +2683,6 @@ if __name__ == '__main__':
|
||||
user_settings_file = CONFIG['GPS_DATA']['USER_SETTINGS_FILE']
|
||||
|
||||
use_api = CONFIG['GPS_DATA']['USE_API']
|
||||
# Count the number of positions igeted, initialize
|
||||
pos_count = 0
|
||||
|
||||
# Check if user_settings (for APRS settings of users) exists. Creat it if not.
|
||||
if Path(user_settings_file).is_file():
|
||||
@ -2652,6 +2778,7 @@ if __name__ == '__main__':
|
||||
# Get rule parameter for private calls
|
||||
#UNIT = rules_module.UNIT
|
||||
UNIT = build_unit(CONFIG)
|
||||
UNIT_MAP = build_unit_map(CONFIG)
|
||||
|
||||
# INITIALIZE THE REPORTING LOOP
|
||||
if CONFIG['REPORTS']['REPORT']:
|
||||
@ -2695,5 +2822,7 @@ if __name__ == '__main__':
|
||||
aprs_thread = threading.Thread(target=aprs_rx, args=(aprs_callsign, aprs_passcode, aprs_server, aprs_port, aprs_filter, user_ssid,))
|
||||
aprs_thread.daemon = True
|
||||
aprs_thread.start()
|
||||
print(UNIT)
|
||||
# Create file for static positions - by IU7IGU
|
||||
## open("nom_aprs","w").close
|
||||
logger.info('Unit calls will be bridged to: ' + str(UNIT))
|
||||
reactor.run()
|
||||
|
Loading…
Reference in New Issue
Block a user