Add mqtt-collect script
This commit is contained in:
		
							parent
							
								
									59488314d9
								
							
						
					
					
						commit
						6ead6853df
					
				
							
								
								
									
										61
									
								
								mqtt-collect
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										61
									
								
								mqtt-collect
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,61 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env python
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import argparse
 | 
				
			||||||
 | 
					import yaml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import paho.mqtt.client
 | 
				
			||||||
 | 
					import sqlite3
 | 
				
			||||||
 | 
					import datetime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def init_db(path, topics):
 | 
				
			||||||
 | 
					    db = sqlite3.connect(path)
 | 
				
			||||||
 | 
					    return db
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def main():
 | 
				
			||||||
 | 
					    options = argparse.ArgumentParser()
 | 
				
			||||||
 | 
					    options.add_argument('--broker', '-b', default='localhost')
 | 
				
			||||||
 | 
					    options.add_argument('--port', '-p', default='1883', type=int)
 | 
				
			||||||
 | 
					    options.add_argument('topicfile')
 | 
				
			||||||
 | 
					    options.add_argument('db')
 | 
				
			||||||
 | 
					    args = options.parse_args()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    with open(args.topicfile, 'r') as f:
 | 
				
			||||||
 | 
					        config_dict = yaml.load(f, Loader=yaml.Loader)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    print(config_dict['topics'])
 | 
				
			||||||
 | 
					    db = init_db(args.db, config_dict['topics'])
 | 
				
			||||||
 | 
					    client = paho.mqtt.client.Client()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def on_disconnect(client, userdata, rc):
 | 
				
			||||||
 | 
					        client.reconnect()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def on_message(client, userdata, msg):
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            c = db.cursor()
 | 
				
			||||||
 | 
					            table = msg.topic.replace("/", "_")
 | 
				
			||||||
 | 
					            ts = datetime.datetime.now()
 | 
				
			||||||
 | 
					            value = float(msg.payload)
 | 
				
			||||||
 | 
					            c.execute(f'CREATE TABLE IF NOT EXISTS {table} '
 | 
				
			||||||
 | 
					                      '(timestamp timestamp, value real)')
 | 
				
			||||||
 | 
					            c.execute(f'INSERT INTO {table} VALUES (?, ?)', (ts, value))
 | 
				
			||||||
 | 
					            c.execute(f'SELECT * from {table}')
 | 
				
			||||||
 | 
					            db.commit()
 | 
				
			||||||
 | 
					        except Exception as e:
 | 
				
			||||||
 | 
					            print(f'Error writing to database: {e}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    client.on_disconnect = on_disconnect
 | 
				
			||||||
 | 
					    client.on_message = on_message
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    client.connect(args.broker, args.port)
 | 
				
			||||||
 | 
					    client.subscribe([(topic, 2) for topic in config_dict['topics']])
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        client.loop_forever()
 | 
				
			||||||
 | 
					    except Exception:
 | 
				
			||||||
 | 
					        db.commit()
 | 
				
			||||||
 | 
					        db.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					    main()
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user