rbn_rtty.py

  1. import os
  2. import json
  3. import datetime
  4. import time
  5.  
  6.  
  7. #CSV column setting
  8. RBN_CALL=0
  9. RBN_PFX=1
  10. RBN_CONT=2
  11. FREQ=3
  12. BAND=4
  13. CALL=5
  14. PFX=6
  15. CONT=7
  16. MODE=8
  17. DB=9
  18. TIMESTAMP=10
  19. MODE=12
  20.  
  21. BANDS = ('160m','80m', '40m', '30m','20m','17m', '15m', '12m', '10m', 'total')
  22. FOLLOW = ('OL8M', 'OL7M', 'OK2ZI', 'OK7T')
  23. r = {}
  24.  
  25.  
  26. rbn_data= open('20141220.csv').read().split('\n')
  27. for line in rbn_data[1:-3]:
  28.     record = line.split(',')
  29.     if record[PFX] in ['OK'] and record[MODE] == 'RTTY' and record[CALL] in FOLLOW:
  30.         timestamp = datetime.datetime.fromtimestamp( time.mktime( time.strptime( record[TIMESTAMP], "%Y-%m-%d %H:%M:%S")))
  31.         r.setdefault(record[RBN_CALL],{}).setdefault(record[BAND],[]).append([timestamp,record[CALL],record[DB]])
  32.  
  33. for skimmer in r.keys():
  34.     for band in r[skimmer].keys():
  35.         data = {}
  36.         data['data'] = ''
  37.         data['skimmer'] = skimmer
  38.         data['band'] = band
  39.         print skimmer
  40.         for el in sorted(r[skimmer][band], key=lambda item: item[0]):
  41.             print el
  42.             tmp_val = [ 'undefined', 'undefined',  'undefined', 'undefined' ]
  43.             #tmp_val = [ 'null', 'null',  'null', 'null' ]
  44.             tmp_val[ FOLLOW.index(el[1]) ] = el[2]
  45.             data["data"] += "[new Date(%d, %d, %d, %d, %d, %d), %s, %s, %s, %s],\n" % (el[0].year, el[0].month, el[0].day, el[0].hour, el[0].minute, el[0].second, tmp_val[0], tmp_val[1], tmp_val[2], tmp_val[3])
  46.  
  47.  
  48.         html = '''<html>
  49.          <head>
  50.            <script type="text/javascript"
  51.                  src="https://www.google.com/jsapi?autoload={
  52.                    'modules':[{
  53.                      'name':'visualization',
  54.                      'version':'1',
  55.                      'packages':['corechart']
  56.                    }]
  57.                  }"></script>
  58.  
  59.            <script type="text/javascript">
  60.              google.setOnLoadCallback(drawChart);
  61.  
  62.              function drawChart() {
  63.                var data = new google.visualization.DataTable()
  64.                data.addColumn('datetime', 'Time');
  65.                data.addColumn('number', 'OL8M');
  66.                data.addColumn('number', 'OL7M');
  67.                data.addColumn('number', 'OK2ZI');
  68.                data.addColumn('number', 'OK7T');
  69.  
  70.                data.addRows([
  71.                  %(data)s
  72.                ]);
  73.  
  74.                var options = {
  75.                  title: '%(skimmer)s - %(band)s',
  76.                  legend: { position: 'bottom' },
  77.                      hAxis: {
  78.                        format: 'HH:mm',
  79.                         viewWindow:{
  80.                            max: new Date(2014, 12, 20, 23, 59, 59),
  81.                            min: new Date(2014, 12, 20, 0, 0, 0)
  82.                          }
  83.                      }
  84.                };
  85.  
  86.                var chart = new google.visualization.ScatterChart(document.getElementById('curve_chart'));
  87.  
  88.                chart.draw(data, options);
  89.              }
  90.            </script>
  91.          </head>
  92.          <body>
  93.            <div id="curve_chart" style="width: 100%%; height: 100%%"></div>
  94.          </body>
  95.        </html>''' % data
  96.         open('ok_rtty_%s_%s_2014.html' % (skimmer,band),'w').write(html)