forked from EVNotify/EVNotiPi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrouteros-mon.py
executable file
·65 lines (53 loc) · 2.21 KB
/
routeros-mon.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/bin/env python3
import yaml
from time import sleep
from datetime import datetime, timezone
import re
import pyrfc3339
import routeros_api
from influxdb_client import InfluxDBClient, WriteOptions
with open('config.yaml', encoding='utf-8') as config_file:
C = None
for config in yaml.load_all(config_file, Loader=yaml.SafeLoader):
C = config
Influx = InfluxDBClient(url=C['influxdb']['url'],
org=C['influxdb']['org'],
token=C['influxdb']['token'],
enable_gzip=True)
opts = WriteOptions(batch_size=10000,
flush_interval=60000,
jitter_interval=5000)
write_api = Influx.write_api(write_options=opts)
connection = routeros_api.RouterOsApiPool('192.168.8.2',
username='api-ro',
password='api-ro',
use_ssl=False,
plaintext_login=True)
api = connection.get_api()
lte = api.get_resource('/interface/lte')
lte_id = lte.get()[0]['id']
gps = api.get_resource('/system/gps')
while True:
#gps_data = gps.call('monitor', {'once': '1'})
lte_data = lte.call('monitor', {'id': lte_id, 'once': '1'})[0]
fields = {}
for i in ('lac', 'current_cellid', 'enb-id', 'sector-id', 'phy-cellid'):
if i in lte_data:
fields[i] = int(lte_data[i])
for i in ('rssi', 'rsrp', 'rsrq', 'sinr', 'cqi', 'ri'):
if i in lte_data:
fields[i] = float(lte_data[i])
#if gps_data['valid'] == 'true':
# for i in ('latitude', 'longitude', 'altitude', 'speed'):
# fields[i] = float(re.sub('[^0-9\.]', '', gps_data[i]))
write_api.write(bucket=C['influxdb']['bucket'],
org=C['influxdb']['org'],
record=[{
'measurement': 'mobile_net',
'tags': {'akey': C['evnotify']['akey'], 'car': C['car']['type']},
'fields': fields,
'time': pyrfc3339.generate(
datetime.now(timezone.utc)),
}]
)
sleep(5)