fix bugs, add user settings to config
This commit is contained in:
		
							parent
							
								
									295dfbda1f
								
							
						
					
					
						commit
						fcff610fd3
					
				| @ -46,6 +46,19 @@ SUB_ACL: DENY:1 | ||||
| TGID_TS1_ACL: PERMIT:ALL | ||||
| TGID_TS2_ACL: PERMIT:ALL | ||||
| 
 | ||||
| # APRS - BY IU7IGU | ||||
| # Enabling "APRS" will configure APRS-Beaconing of Master's connection | ||||
| # like repeater and hotspots. | ||||
| # REPORT_INTERVAL in Minute (ALLOW only > 3 Minutes) | ||||
| # CALLSIGN: Callsign that will pubblish data on aprs server | ||||
| # MESSAGE: This message will print on APRS description together RX and TX Frequency | ||||
| 
 | ||||
| [APRS] | ||||
| ENABLED: False | ||||
| REPORT_INTERVAL: 15 | ||||
| CALLSIGN:HB1LNK-11 | ||||
| SERVER:euro.aprs2.net | ||||
| MESSAGE:Connesso ad HBLINK | ||||
| 
 | ||||
| # NOT YET WORKING: NETWORK REPORTING CONFIGURATION | ||||
| #   Enabling "REPORT" will configure a socket-based reporting | ||||
| @ -135,6 +148,14 @@ IGATE_BEACON_ICON = /I | ||||
| IGATE_LATITUDE = 0000.00N | ||||
| IGATE_LONGITUDE = 00000.00W | ||||
| 
 | ||||
| # User settings file, MUST configure using absolute path. | ||||
| USER_SETTINGS_FILE: /path/to/user_settings.txt | ||||
| 
 | ||||
| # The APRS filter below is used for the message received script. See http://www.aprs-is.net/javAPRSFilter.aspx for details | ||||
| # about APRS filters. | ||||
| APRS_RECEIVE_LOGIN_CALL: N0CALL-1 | ||||
| APRS_FILTER: r/47/-120/500 t/m | ||||
| 
 | ||||
| # The email gateway settingns below are OPTIONAL. They are NOT REQUIRED if you don't want | ||||
| # to enable the email gateway. Leave as is to disable. | ||||
| EMAIL_SENDER:  | ||||
| @ -142,6 +163,51 @@ EMAIL_PASSWORD: | ||||
| SMTP_SERVER: smtp.gmail.com | ||||
| SMTP_PORT: 465 | ||||
| 
 | ||||
| # The options below are required for operation of the dashboard and will cause errors in gps_data.py | ||||
| # if configured wrong. Leave them as default unless you know what you are doing. | ||||
| # If you do change, you must use absolute paths. | ||||
| LOCATION_FILE: /tmp/gps_data_user_loc.txt | ||||
| BULLETIN_BOARD_FILE: /tmp/gps_data_user_bb.txt | ||||
| MAILBOX_FILE: /tmp/gps_data_user_mailbox.txt | ||||
| EMERGENCY_SOS_FILE: /tmp/gps_data_user_sos.txt | ||||
| 
 | ||||
| # The following options are used for the dashboard. The dashboard is optional. | ||||
| # Title of the Dashboard | ||||
| DASHBOARD_TITLE: HBLink3 D-APRS Dashboard | ||||
| 
 | ||||
| # Logo used on dashboard page | ||||
| LOGO: https://raw.githubusercontent.com/kf7eel/hblink3/gps/HBlink.png | ||||
| 
 | ||||
| # Port to run server | ||||
| DASH_PORT: 8092 | ||||
| 
 | ||||
| # IP to run server on | ||||
| DASH_HOST: 127.0.0.1 | ||||
| 
 | ||||
| #Description of dashboard to show on main page | ||||
| DESCRIPTION: Welcome to the dashboard. | ||||
| 
 | ||||
| # Gateway contact info displayed on about page. | ||||
| CONTACT_NAME: your name | ||||
| CONTACT_CALL: N0CALL | ||||
| CONTACT_EMAIL: email@example.org | ||||
| CONTACT_WEBSITE: https://hbl.ink | ||||
| 
 | ||||
| # Time format for display | ||||
| TIME_FORMAT: %%H:%%M:%%S - %%m/%%d/%%y | ||||
| 
 | ||||
| # Center dashboard map over these coordinates | ||||
| MAP_CENTER_LAT: 47.00 | ||||
| MAP_CENTER_LON: -120.00 | ||||
| ZOOM_LEVEL: 7 | ||||
| 
 | ||||
| # List and preview of some map themes at http://leaflet-extras.github.io/leaflet-providers/preview/ | ||||
| # The following are options for map themes and just work, you should use one of these: “OpenStreetMap”, “Stamen” (Terrain, Toner, and Watercolor), | ||||
| MAP_THEME: Stamen Toner | ||||
| 
 | ||||
| # RSS feed link, shows in the link section of each RSS item. | ||||
| RSS_LINK: http://localhost:8092 | ||||
| 
 | ||||
| # OPENBRIDGE INSTANCES - DUPLICATE SECTION FOR MULTIPLE CONNECTIONS | ||||
| # OpenBridge is a protocol originall created by DMR+ for connection between an | ||||
| # IPSC2 server and Brandmeister. It has been implemented here at the suggestion | ||||
| @ -191,6 +257,9 @@ TGID_ACL: PERMIT:ALL | ||||
| [MASTER-1] | ||||
| MODE: MASTER | ||||
| ENABLED: True | ||||
| # The APRS setting below has to do with the beaconing of PEER conections, and not GPS positions | ||||
| # from radios. This setting will not affect gps_data.py | ||||
| APRS: False | ||||
| REPEAT: True | ||||
| MAX_PEERS: 10 | ||||
| EXPORT_AMBE: False | ||||
|  | ||||
| @ -44,7 +44,7 @@ from twisted.protocols.basic import NetstringReceiver | ||||
| from twisted.internet import reactor, task | ||||
| 
 | ||||
| # Things we import from the main hblink module | ||||
| from hblink import HBSYSTEM, OPENBRIDGE, systems, hblink_handler, reportFactory, REPORT_OPCODES, mk_aliases | ||||
| from hblink import HBSYSTEM, OPENBRIDGE, systems, hblink_handler, reportFactory, REPORT_OPCODES, mk_aliases, aprs_upload, sendAprs | ||||
| from dmr_utils3.utils import bytes_3, int_id, get_alias | ||||
| from dmr_utils3 import decode, bptc, const | ||||
| import config | ||||
| @ -207,7 +207,7 @@ def mailbox_delete(dmr_id): | ||||
| 
 | ||||
| 
 | ||||
| def sos_write(dmr_id, time, message): | ||||
|     user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read()) | ||||
|     user_settings = ast.literal_eval(os.popen('cat ' + user_settings_file).read()) | ||||
|     try: | ||||
|         if user_settings[dmr_id][1]['ssid'] == '': | ||||
|             sos_call = user_settings[dmr_id][0]['call'] + '-' + user_ssid | ||||
| @ -340,7 +340,7 @@ def process_sms(_rf_src, sms): | ||||
|         logger.info('Latitude: ' + str(aprs_lat)) | ||||
|         logger.info('Longitude: ' + str(aprs_lon)) | ||||
|         # 14FRS2013 simplified and moved settings retrieval | ||||
|         user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read())	 | ||||
|         user_settings = ast.literal_eval(os.popen('cat ' + user_settings_file).read())	 | ||||
|         if int_id(_rf_src) not in user_settings:	 | ||||
|             ssid = str(user_ssid)	 | ||||
|             icon_table = '/'	 | ||||
| @ -383,7 +383,7 @@ def process_sms(_rf_src, sms): | ||||
|         aprs_dest = re.sub('@| A-.*','',sms) | ||||
|         aprs_msg = re.sub('^@|.* A-|','',sms) | ||||
|         logger.info('APRS message to ' + aprs_dest.upper() + '. Message: ' + aprs_msg) | ||||
|         user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read()) | ||||
|         user_settings = ast.literal_eval(os.popen('cat ' + user_settings_file).read()) | ||||
|         if int_id(_rf_src) in user_settings and user_settings[int_id(_rf_src)][1]['ssid'] != '': | ||||
|             ssid = user_settings[int_id(_rf_src)][1]['ssid'] | ||||
|         else: | ||||
| @ -1521,7 +1521,7 @@ class routerHBP(HBSYSTEM): | ||||
|                     #logger.info(aprs_loc_packet) | ||||
|                     logger.info('Lat: ' + str(aprs_lat) + ' Lon: ' + str(aprs_lon)) | ||||
|                     # 14FRS2013 simplified and moved settings retrieval | ||||
|                     user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read()) | ||||
|                     user_settings = ast.literal_eval(os.popen('cat ' + user_settings_file).read()) | ||||
|                     if int_id(_rf_src) not in user_settings:	 | ||||
|                         ssid = str(user_ssid)	 | ||||
|                         icon_table = '/'	 | ||||
| @ -1617,7 +1617,7 @@ class routerHBP(HBSYSTEM): | ||||
|                                 # Begin APRS format and upload | ||||
|                                 # Disable opening file for reading to reduce "collision" or reading and writing at same time. | ||||
|                                 # 14FRS2013 simplified and moved settings retrieval | ||||
|                                 user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read())	 | ||||
|                                 user_settings = ast.literal_eval(os.popen('cat ' + user_settings_file).read())	 | ||||
|                                 if int_id(_rf_src) not in user_settings:	 | ||||
|                                     ssid = str(user_ssid)	 | ||||
|                                     icon_table = '/'	 | ||||
| @ -1811,11 +1811,11 @@ if __name__ == '__main__': | ||||
|     emergency_sos_file = CONFIG['GPS_DATA']['EMERGENCY_SOS_FILE'] | ||||
| 
 | ||||
|         # Check if user_settings (for APRS settings of users) exists. Creat it if not. | ||||
|     if Path('./user_settings.txt').is_file(): | ||||
|     if Path(user_settings_file).is_file(): | ||||
|         pass | ||||
|     else: | ||||
|         Path('./user_settings.txt').touch() | ||||
|         with open("./user_settings.txt", 'w') as user_dict_file: | ||||
|         Path(user_settings_file).touch() | ||||
|         with open(user_settings_file, 'w') as user_dict_file: | ||||
|             user_dict_file.write("{1: [{'call': 'N0CALL'}, {'ssid': ''}, {'icon': ''}, {'comment': ''}]}") | ||||
|             user_dict_file.close() | ||||
|     # Check to see if dashboard files exist | ||||
| @ -1898,7 +1898,7 @@ if __name__ == '__main__': | ||||
|                 systems[system] = routerHBP(system, CONFIG, report_server) | ||||
|             reactor.listenUDP(CONFIG['SYSTEMS'][system]['PORT'], systems[system], interface=CONFIG['SYSTEMS'][system]['IP']) | ||||
|             logger.debug('(GLOBAL) %s instance created: %s, %s', CONFIG['SYSTEMS'][system]['MODE'], system, systems[system]) | ||||
|     #aprs_upload(CONFIG) | ||||
|     aprs_upload(CONFIG) | ||||
| 
 | ||||
|     def loopingErrHandle(failure): | ||||
|         logger.error('(GLOBAL) STOPPING REACTOR TO AVOID MEMORY LEAK: Unhandled error in timed loop.\n %s', failure) | ||||
|  | ||||
							
								
								
									
										12
									
								
								config.py
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								config.py
									
									
									
									
									
								
							| @ -106,6 +106,7 @@ def build_config(_config_file): | ||||
|     CONFIG['GLOBAL'] = {} | ||||
|     CONFIG['REPORTS'] = {} | ||||
|     CONFIG['LOGGER'] = {} | ||||
|     CONFIG['APRS'] = {} | ||||
|     CONFIG['GPS_DATA'] = {} | ||||
|     CONFIG['ALIASES'] = {} | ||||
|     CONFIG['SYSTEMS'] = {} | ||||
| @ -165,6 +166,7 @@ def build_config(_config_file): | ||||
|                     'BULLETIN_BOARD_FILE': config.get(section, 'BULLETIN_BOARD_FILE'), | ||||
|                     'MAILBOX_FILE': config.get(section, 'MAILBOX_FILE'), | ||||
|                     'EMERGENCY_SOS_FILE': config.get(section, 'EMERGENCY_SOS_FILE'), | ||||
|                     'USER_SETTINGS_FILE': config.get(section, 'USER_SETTINGS_FILE'), | ||||
| 
 | ||||
|                 }) | ||||
|                 if not CONFIG['LOGGER']['LOG_FILE']: | ||||
| @ -182,6 +184,15 @@ def build_config(_config_file): | ||||
|                     'STALE_TIME': config.getint(section, 'STALE_DAYS') * 86400, | ||||
|                 }) | ||||
| 
 | ||||
|             elif section == 'APRS': | ||||
|                 CONFIG['APRS'].update({ | ||||
|                     'ENABLED': config.getboolean(section, 'ENABLED'), | ||||
|                     'CALLSIGN': config.get(section, 'CALLSIGN'), | ||||
|                     'REPORT_INTERVAL': config.getint(section, 'REPORT_INTERVAL'), | ||||
|                     'SERVER': config.get(section, 'SERVER'), | ||||
|                     'MESSAGE': config.get(section, 'MESSAGE') | ||||
|                 }) | ||||
| 
 | ||||
|             elif config.getboolean(section, 'ENABLED'): | ||||
|                 if config.get(section, 'MODE') == 'PEER': | ||||
|                     CONFIG['SYSTEMS'].update({section: { | ||||
| @ -278,6 +289,7 @@ def build_config(_config_file): | ||||
|                     CONFIG['SYSTEMS'].update({section: { | ||||
|                         'MODE': config.get(section, 'MODE'), | ||||
|                         'ENABLED': config.getboolean(section, 'ENABLED'), | ||||
|                         'APRS': config.getboolean(section, 'APRS'), | ||||
|                         'REPEAT': config.getboolean(section, 'REPEAT'), | ||||
|                         'MAX_PEERS': config.getint(section, 'MAX_PEERS'), | ||||
|                         'IP': gethostbyname(config.get(section, 'IP')), | ||||
|  | ||||
| @ -141,6 +141,9 @@ IGATE_BEACON_ICON = /I | ||||
| IGATE_LATITUDE = 0000.00N | ||||
| IGATE_LONGITUDE = 00000.00W | ||||
| 
 | ||||
| # User settings file, MUST configure using absolute path. | ||||
| USER_SETTINGS_FILE: /path/to/user_settings.txt | ||||
| 
 | ||||
| # The options below are required for operation of the dashboard. Leave them as default | ||||
| # unless you know what you are doing. | ||||
| LOCATION_FILE: /tmp/gps_data_user_loc.txt | ||||
|  | ||||
							
								
								
									
										19
									
								
								gps_data.py
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								gps_data.py
									
									
									
									
									
								
							| @ -200,7 +200,7 @@ def mailbox_delete(dmr_id): | ||||
| 
 | ||||
| 
 | ||||
| def sos_write(dmr_id, time, message): | ||||
|     user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read()) | ||||
|     user_settings = ast.literal_eval(os.popen('cat ' + user_settings_file).read()) | ||||
|     try: | ||||
|         if user_settings[dmr_id][1]['ssid'] == '': | ||||
|             sos_call = user_settings[dmr_id][0]['call'] + '-' + user_ssid | ||||
| @ -333,7 +333,7 @@ def process_sms(_rf_src, sms): | ||||
|         logger.info('Latitude: ' + str(aprs_lat)) | ||||
|         logger.info('Longitude: ' + str(aprs_lon)) | ||||
|         # 14FRS2013 simplified and moved settings retrieval | ||||
|         user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read())	 | ||||
|         user_settings = ast.literal_eval(os.popen('cat ' + user_settings_file).read())	 | ||||
|         if int_id(_rf_src) not in user_settings:	 | ||||
|             ssid = str(user_ssid)	 | ||||
|             icon_table = '/'	 | ||||
| @ -376,7 +376,7 @@ def process_sms(_rf_src, sms): | ||||
|         aprs_dest = re.sub('@| A-.*','',sms) | ||||
|         aprs_msg = re.sub('^@|.* A-|','',sms) | ||||
|         logger.info('APRS message to ' + aprs_dest.upper() + '. Message: ' + aprs_msg) | ||||
|         user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read()) | ||||
|         user_settings = ast.literal_eval(os.popen('cat ' + user_settings_file).read()) | ||||
|         if int_id(_rf_src) in user_settings and user_settings[int_id(_rf_src)][1]['ssid'] != '': | ||||
|             ssid = user_settings[int_id(_rf_src)][1]['ssid'] | ||||
|         else: | ||||
| @ -469,7 +469,7 @@ class DATA_SYSTEM(HBSYSTEM): | ||||
|                     #logger.info(aprs_loc_packet) | ||||
|                     logger.info('Lat: ' + str(aprs_lat) + ' Lon: ' + str(aprs_lon)) | ||||
|                     # 14FRS2013 simplified and moved settings retrieval | ||||
|                     user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read()) | ||||
|                     user_settings = ast.literal_eval(os.popen('cat ' + user_settings_file).read()) | ||||
|                     if int_id(_rf_src) not in user_settings:	 | ||||
|                         ssid = str(user_ssid)	 | ||||
|                         icon_table = '/'	 | ||||
| @ -565,7 +565,7 @@ class DATA_SYSTEM(HBSYSTEM): | ||||
|                                 # Begin APRS format and upload | ||||
|                                 # Disable opening file for reading to reduce "collision" or reading and writing at same time. | ||||
|                                 # 14FRS2013 simplified and moved settings retrieval | ||||
|                                 user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read())	 | ||||
|                                 user_settings = ast.literal_eval(os.popen('cat ' + user_settings_file).read())	 | ||||
|                                 if int_id(_rf_src) not in user_settings:	 | ||||
|                                     ssid = str(user_ssid)	 | ||||
|                                     icon_table = '/'	 | ||||
| @ -713,12 +713,15 @@ if __name__ == '__main__': | ||||
|     the_mailbox_file = CONFIG['GPS_DATA']['MAILBOX_FILE'] | ||||
|     emergency_sos_file = CONFIG['GPS_DATA']['EMERGENCY_SOS_FILE'] | ||||
| 
 | ||||
|     # User APRS settings | ||||
|     user_settings_file = CONFIG['GPS_DATA']['USER_SETTINGS_FILE'] | ||||
| 
 | ||||
|         # Check if user_settings (for APRS settings of users) exists. Creat it if not. | ||||
|     if Path('./user_settings.txt').is_file(): | ||||
|     if Path(user_settings_file).is_file(): | ||||
|         pass | ||||
|     else: | ||||
|         Path('./user_settings.txt').touch() | ||||
|         with open("./user_settings.txt", 'w') as user_dict_file: | ||||
|         Path(user_settings_file).touch() | ||||
|         with open(user_settings_file, 'w') as user_dict_file: | ||||
|             user_dict_file.write("{1: [{'call': 'N0CALL'}, {'ssid': ''}, {'icon': ''}, {'comment': ''}]}") | ||||
|             user_dict_file.close() | ||||
|     # Check to see if dashboard files exist | ||||
|  | ||||
| @ -24,18 +24,16 @@ import time | ||||
| import argparse | ||||
| 
 | ||||
| def mailbox_write(call, dmr_id, time, message, recipient): | ||||
|     global mailbox_file | ||||
|     mail_file = ast.literal_eval(os.popen('cat ' + mailbox_file).read()) | ||||
|     mail_file.insert(0, {'call': call, 'dmr_id': dmr_id, 'time': time, 'message':message, 'recipient': recipient}) | ||||
|     with open("../../gps_data_user_mailbox.txt", 'w') as mailbox_file: | ||||
|     with open(mailbox_file, 'w') as mailbox_file: | ||||
|             mailbox_file.write(str(mail_file[:100])) | ||||
|             mailbox_file.close() | ||||
|     print('User mail saved.') | ||||
| 
 | ||||
| def aprs_filter(packet): | ||||
|     #if aprslib.parse(packet) in aprslib.parse(packet): | ||||
|      #   print(aprslib.parse(packet)) | ||||
|     #else: | ||||
|     #    pass | ||||
| 
 | ||||
|     user_settings = ast.literal_eval(os.popen('cat ../../user_settings.txt').read()) | ||||
|     if 'addresse' in aprslib.parse(packet): | ||||
|         #print(aprslib.parse(packet)) | ||||
| @ -43,11 +41,10 @@ def aprs_filter(packet): | ||||
|         recipient_ssid = re.sub('.*-','', aprslib.parse(packet)['addresse']) | ||||
| 
 | ||||
|         for i in user_settings.items(): | ||||
| ##            print('checking user_settings ' + recipient) | ||||
|             if recipient in i[1][0]['call'] and recipient_ssid in i[1][1]['ssid']: | ||||
| ##                print(i[1][0]) | ||||
| ##                print(i[1][1]) | ||||
| ##                print(aprslib.parse(packet)) | ||||
|             ssid = i[1][1]['ssid'] | ||||
|             if i[1][1]['ssid'] == '': | ||||
|                 ssid = user_aprs_ssid | ||||
|             if recipient in i[1][0]['call'] and recipient_ssid in ssid: | ||||
|                 mailbox_write(re.sub('-.*','', aprslib.parse(packet)['addresse']), aprslib.parse(packet)['from'], time.time(), aprslib.parse(packet)['message_text'], recipient) | ||||
|                 if 'msgNo' in aprslib.parse(packet): | ||||
|                     time.sleep(1) | ||||
| @ -71,6 +68,7 @@ if __name__ == '__main__': | ||||
|     aprs_login = parser.get('GPS_DATA', 'APRS_RECEIVE_LOGIN_CALL') | ||||
|     aprs_passcode = parser.get('GPS_DATA', 'APRS_LOGIN_PASSCODE') | ||||
|     mailbox_file = parser.get('GPS_DATA', 'MAILBOX_FILE') | ||||
|     user_settings_file = mailbox_file = parser.get('GPS_DATA', 'USER_SETTINGS_FILE') | ||||
| 
 | ||||
|     AIS = aprslib.IS(aprs_login, passwd=int(aprs_passcode), host=aprs_server, port=int(aprs_port)) | ||||
|     user_settings = ast.literal_eval(os.popen('cat ../../user_settings.txt').read()) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user