Exemplo n.º 1
0
    def GET(self, pid):
        try:
            pos = Agent.get(pid)
        except SQLObjectNotFound:
            return web.notfound()
        pics = []
        if pos.table_name in CCTV_POS:
            # mendapatkan 3 nama file terakhir dari CCTV FTP Server
            try:
                ftp = FTP(FTP_HOST)
                ftp.login()
                ftp.cwd(CCTV_IMG_DIR + '/' + pos.table_name)
                #ftp.cwd(CCTV_IMG_DIR + '/' + pos.table_name + '/' +datetime.datetime.today().strftime("%Y%m%d") + '/images')
                nlst = ftp.nlst()
                pics = nlst[-3:]
            except:
                pics = [
                    'Fail to Connect CCTV Server',
                    'Fail to Connect CCTV Server',
                    'Fail to Connect CCTV Server'
                ]
        try:
            dari = to_date(web.input().dari)
            dari = datetime.datetime.combine(dari, datetime.time(7, 0, 0))
            hingga = to_date(web.input().hingga)
            hingga = datetime.datetime.combine(hingga,
                                               datetime.datetime.now().time())
        except:
            hingga = datetime.datetime.now()
            dari = hingga - datetime.timedelta(days=3)
            dari = dari.replace(hour=7, minute=0, second=0)

        tma_trend = pos.get_log_tma(dari, hingga)

        # membuat pola waktu per jam
        ch_patt = []
        t = int(dari.strftime('%s'))
        thingga = int(hingga.strftime('%s'))
        while t <= thingga:
            ch_patt.append([t, 0])
            t += 60 * 60  # 60 * 60 = 60 menit/1 jam
        ch_patt = dict(ch_patt)
        series = [[a[0], a[1], float(a[2] or 0) * 0.01] for a in tma_trend]
        print(len(ch_patt), len(series))
        data_series = [{'nama': pos.cname, 'series': series, 'satuan': 'M'}]
        # menghitung Debit
        if pos.table_name in DEBIT_POS.keys():
            formula = DEBIT_POS.get(pos.table_name)
            if formula:
                series = []  # series of debit
                for tgl, jam, tma in data_series[0].get('series'):
                    tma_lokal = tma - pos.DPL
                    if tma_lokal - formula.get('b') > 0:
                        deb = formula.get('a') * (
                            tma_lokal - formula.get('b'))**formula.get('c')
                    else:
                        deb = 0
                    #dt = datetime.datetime.combine(tgl, datetime.time(0)) + jam - datetime.timedelta(hours=7)

                    _d = {
                        'sampling': int(tgl.strftime('%s')) + jam.seconds,
                        'tma': tma,
                        'debit': deb
                    }
                    series.append(
                        '{x: %(sampling)s, y: %(tma)s, debit: %(debit)s}' % _d)
                data_series[0]['series'] = '[' + ','.join(series) + ']'
        else:
            series = []
            for tgl, jam, tma in data_series[0].get('series'):
                #dt = datetime.datetime.combine(tgl, datetime.time(0)) + jam - datetime.timedelta(hours=7)
                #epoch = datetime.datetime.utcfromtimestamp(0)

                #_d = {'sampling': timedelta_total_seconds((dt - epoch)),
                #        'tma': tma}
                _d = {
                    'sampling': int(tgl.strftime('%s')) + jam.seconds,
                    'tma': tma
                }
                series.append('{x: %(sampling)s, y: %(tma)s}' % _d)
            data_series[0]['series'] = '[' + ','.join(series) + ']'

        # mencari data CH
        data_ch = {'nama': '', 'series': [], 'satuan': 'mm'}
        if pos.table_name in CAUSE_TABLE.keys():
            ch_list = CAUSE_TABLE.get(pos.table_name)
            AGENT_TABLE = dict([
                (a.table_name, a.AgentId) for a in Agent.select(
                    OR(Agent.q.AgentType == 0, Agent.q.AgentType == 1,
                       Agent.q.AgentType == 2))
            ])
            for ch in ch_list:
                print('CH', ch)
                pos_ch = Agent.get(AGENT_TABLE.get(ch))
                ch_trend = pos_ch.get_log(dari, hingga, False)
                series = [(int(a[0].strftime('%s')) + a[1].seconds,
                           float(a[2] or 0)) for a in ch_trend]
                for s in series:
                    nilai = ch_patt.get(s[0])
                    if not nilai:
                        ch_patt[s[0]] = s[1]
                    else:
                        ch_patt[s[0]] = nilai > s[1] and nilai or s[1]
                _t = {'nama': pos_ch.cname, 'series': series}
                #print(ch, _t['series'])
                if not _t.get('series'):
                    _t['series'] = []
                data_ch['nama'] += ', ' + pos_ch.cname
            data_ch['series'] = '[' + ','.join(
                ['{x: %s, y: %s}' % (k, v) for k, v in ch_patt.items()]) + ']'
        data_series.append(data_ch)
        #        print(len(data_series[0]['series']))

        return render.tma.show_tma_ch({
            'pos': pos,
            'data': data_series,
            'dari': dari,
            'hingga': hingga,
            'pics': pics
        })
Exemplo n.º 2
0
    def GET(self):
        tanggal = web.input().get('d')
        if not tanggal:
            tanggal = datetime.date.today()
        else:
            try:
                tanggal = datetime.datetime.strptime(tanggal,
                                                     "%Y-%m-%d").date()
            except:
                tanggal = datetime.datetime.strptime(tanggal,
                                                     "%d %b %y").date()
        #HIDE_THIS = [a.strip() for a in open('HIDE_AWLR.txt').read().split(',')]
        PIKET_BANJIR = [
            a.strip() for a in open('PIKET_BANJIR.txt').read().split(',')
        ]
        agents = Agent.select(
            AND(OR(Agent.q.AgentType == HIDROLOGI, Agent.q.AgentType == 0),
                Agent.q.expose == True)).orderBy(["wilayah", "urutan"])
        agents = [a for a in agents if a.table_name in PIKET_BANJIR]
        data = [
            Struct(**{
                'pos': a,
                'tma': Struct(**a.get_segmented_wl(tanggal))
            }) for a in agents
        ]
        js = """
        <script type="text/javascript">
        $(function(){
            $('.tanggal').datepicker({dateFormat: 'd M y'});
            $('.show-current-date').bind('change', function () {
             $(this).parent().submit()});
        });
        </script>"""
        sebelum = tanggal - datetime.timedelta(days=1)
        sesudah = tanggal + datetime.timedelta(days=1)
        if web.ctx.env.get('HTTP_X_PJAX') is not None:
            return render_plain.tma.index_table(
                tma=data,
                meta={
                    'now': tanggal.strftime('%d %b %y'),
                    'before': sebelum.strftime('%d %b %y'),
                    'after': sesudah.strftime('%d %b %y')
                },
                wilayah=WILAYAH)

        # water level tertinggi
        sql = "SELECT MAX(pagi), agent_id, waktu FROM tma"
        res = Agent._connection.queryAll(sql)
        if res:
            try:
                (total, agent_id, waktu) = res[0]
                tertinggi = Struct(**{
                    'agent': Agent.get(agent_id),
                    'total': total,
                    'waktu': waktu
                })
            except IndexError:
                tertinggi = Struct()

        return render.tma.piket_banjir(tma=data,
                                       meta={
                                           'now': tanggal.strftime('%d %b %y'),
                                           'before':
                                           sebelum.strftime('%d %b %y'),
                                           'after':
                                           sesudah.strftime('%d %b %y'),
                                           'tertinggi': tertinggi
                                       },
                                       wilayah=WILAYAH,
                                       js=js)
Exemplo n.º 3
0
def menitKeJamRain(tgl=datetime.date.today(), timpa=False):
    for a in AgentCh.select(
            OR(AgentCh.q.AgentType == 1, AgentCh.q.AgentType == 0)):
        salinKeJamjaman(a.table_name, tgl, timpa)
Exemplo n.º 4
0
 def _get_expression(self):
     """Combine filters with OR"""
     return OR(*[x._get_expression() for x in self])
Exemplo n.º 5
0
    def curah_hujan_pos(self,
                        pos_id,
                        tahun=datetime.date.today().year,
                        bulan=''):
        '''
        Jika bulan valid, otomatis tahun juga valid,
          tampilkan curah hujan setiap hari pada bulan terpilih
          sumbu mendatar berisi tanggal
        Jika tahun valid, bulan kosong, tampilkan curah hujan 3 tahun lalu,
          dari tahun terpilih, sumbu mendatar berisi bulan-bulan
        '''
        try:
            agent = AgentCh.get(pos_id)
        except SQLObjectNotFound:
            return web.notfound()
        if agent.AgentType not in (1.0, 0.0):
            return web.notfound()
        HIDE_THIS = [a.strip() for a in open('HIDE_ARR.txt').read().split(',')]
        agents = AgentCh.select(
            AND(
                OR(AgentCh.q.AgentType == KLIMATOLOGI,
                   AgentCh.q.AgentType == 0.0),
                AgentCh.q.expose == True)).orderBy((
                    'wilayah',
                    'urutan',
                ))
        agents = [a for a in agents if a.table_name not in HIDE_THIS]
        ch = agent.get_ch(tahun, bulan)
        data = []
        for a in ch:
            try:
                data.append((a[0], a[2] or 0))
            except:
                data.append((a[0], 0))
        series = {}
        to_render = render.curahhujan.bulanan
        if bulan:
            # hujan per hari pada 'bulan'
            series = [
                0 for r in range(calendar.monthrange(tahun, int(bulan))[1])
            ]
            sql = "SELECT waktu, manual, pagi, sore, malam, tmalam FROM curahhujan \
                    WHERE agent_id=%s AND YEAR(waktu)=%s AND MONTH(waktu)=%s" % (
                pos_id, tahun, bulan)

            for d in conn.queryAll(sql):
                series[d[0].day - 1] = d[1]
            data = Struct(
                **{
                    'series': series,
                    'categories': [s + 1 for s in range(len(series))],
                    'bulan': datetime.date(tahun, int(bulan), 1)
                })
            to_render = render.curahhujan.harian
        elif data:
            # hujan per bulan pada 'tahun'
            th = data[0][0].year
            series[th] = [0 for r in range(0, 12)]
            for d in data:
                if d[0].year != th:
                    th = d[0].year
                    series[th] = [0 for r in range(0, 12)]
                    series[th][d[0].month - 1] = d[1]
                else:
                    series[th][d[0].month - 1] = d[1]
            data = [
                Struct(**{
                    'tahun': k,
                    'series': v
                }) for k, v in sorted(series.items())
            ]
        ctx = {'pos': agent, 'data': data, 'poses': agents, 'wilayah': WILAYAH}
        return to_render(ctx)
Exemplo n.º 6
0
    def GET(self):
        HIDE_THIS = [
            a.strip() for a in open('HIDE_AWLR.txt').read().split(',')
        ]
        agents = Agent.select(
            AND(OR(Agent.q.AgentType == HIDROLOGI, Agent.q.AgentType == 0),
                Agent.q.expose == True)).orderBy(
                    ["wilayah", "-DPL", "-siaga3"])
        agents = [a for a in agents if a.table_name not in HIDE_THIS]
        all_pos = [{
            'id': a.AgentId,
            'name': a.cname,
            'll': a.ll
        } for a in agents]
        js_foot = """
        <script type="text/template" id="pos_infowindow">
          <div class="item infowindow" id="pos_<%= index %>">
            <span class="pos"><%= name %> </span>
            <span class="meter">
            </span>
          </div>
        </script>
        <script>
        var ws = new WebSocket('ws://mqtt.bbws-bsolo.net:22286');
        ws.onmessage = function (event) {
            var data = JSON.parse(event.data);
            if (data.device === undefined) { return; }
            var device_id = data.device.split('/')[1];
            var marker = undefined;
            for (m in markers) {
                if (markers[m].did == device_id) {
                    marker = markers[m].markerObj;
                    break;
                }
            }
        }
        function init_map() {
            var my_options = {
                center: new google.maps.LatLng(-7.49592,111.568909),
                zoom: 9,
                styles: [
    {
        "featureType": "all",
        "elementType": "geometry.fill",
        "stylers": [
            {
                "weight": "2.00"
            }
        ]
    },
    {
        "featureType": "all",
        "elementType": "geometry.stroke",
        "stylers": [
            {
                "color": "#9c9c9c"
            }
        ]
    },
    {
        "featureType": "all",
        "elementType": "labels.text",
        "stylers": [
            {
                "visibility": "on"
            }
        ]
    },
    {
        "featureType": "landscape",
        "elementType": "all",
        "stylers": [
            {
                "color": "#f2f2f2"
            }
        ]
    },
    {
        "featureType": "landscape",
        "elementType": "geometry.fill",
        "stylers": [
            {
                "color": "#ffffff"
            }
        ]
    },
    {
        "featureType": "landscape.man_made",
        "elementType": "geometry.fill",
        "stylers": [
            {
                "color": "#ffffff"
            }
        ]
    },
    {
        "featureType": "poi",
        "elementType": "all",
        "stylers": [
            {
                "visibility": "off"
            }
        ]
    },
    {
        "featureType": "road",
        "elementType": "all",
        "stylers": [
            {
                "saturation": -100
            },
            {
                "lightness": 45
            }
        ]
    },
    {
        "featureType": "road",
        "elementType": "geometry.fill",
        "stylers": [
            {
                "color": "#eeeeee"
            }
        ]
    },
    {
        "featureType": "road",
        "elementType": "labels.text.fill",
        "stylers": [
            {
                "color": "#7b7b7b"
            }
        ]
    },
    {
        "featureType": "road",
        "elementType": "labels.text.stroke",
        "stylers": [
            {
                "color": "#ffffff"
            }
        ]
    },
    {
        "featureType": "road.highway",
        "elementType": "all",
        "stylers": [
            {
                "visibility": "simplified"
            }
        ]
    },
    {
        "featureType": "road.arterial",
        "elementType": "labels.icon",
        "stylers": [
            {
                "visibility": "off"
            }
        ]
    },
    {
        "featureType": "transit",
        "elementType": "all",
        "stylers": [
            {
                "visibility": "off"
            }
        ]
    },
    {
        "featureType": "water",
        "elementType": "all",
        "stylers": [
            {
                "saturation": 100
            },
            {
                "lightness": 15
            },
            {
                "color": "#88b6f2" /* "#466cec" */
            },
            {
                "visibility": "on"
            }
        ]
    },
    {
        "featureType": "water",
        "elementType": "geometry.fill",
        "stylers": [
            {
                "color": "#88b6f2"
            }
        ]
    },
    {
        "featureType": "water",
        "elementType": "labels.text.fill",
        "stylers": [
            {
                "color": "#000000"
            }
        ]
    },
    {
        "featureType": "water",
        "elementType": "labels.text.stroke",
        "stylers": [
            {
                "color": "#ffffff"
            }
        ]
    }
],
                mapTypeId: google.maps.MapTypeId.TERRAIN };
            var map = new google.maps.Map(document.getElementById('map'), my_options);
            var lamong_line = new google.maps.KmlLayer(
                {url: 'http://hidrologi.bbws-bsolo.net/static/lamong.kml?v=1',
                preserveViewport: true, map: map});
            var pantura_line = new google.maps.KmlLayer(
                {url: 'http://hidrologi.bbws-bsolo.net/static/pantura.kml?v=1',
                preserveViewport: true, map: map});
            var hilir_line = new google.maps.KmlLayer(
                {url: 'http://hidrologi.bbws-bsolo.net/static/hilir.kml?v=1',
                preserveViewport: true, map: map});
            var madiun_line = new google.maps.KmlLayer(
                {url: 'http://hidrologi.bbws-bsolo.net/static/madiun.kml?v=1',
                preserveViewport: true, map: map});
            var hulu_line = new google.maps.KmlLayer(
                {url: 'http://hidrologi.bbws-bsolo.net/static/hulu.kml?v=1',
                preserveViewport: true, map: map});
          var allPos = """ + str(all_pos) + """;
          var markers = {};
          var infoWindow = new google.maps.InfoWindow;
          _.each(allPos, function(pos) {
            var lat = parseFloat(pos.ll.split(',')[0]);
            var lng = parseFloat(pos.ll.split(',')[1]);
            var point = new google.maps.LatLng(lat, lng);
            var marker = new google.maps.Marker({
                icon: 'http://maps.google.com/mapfiles/ms/icons/blue-dot.png',
                map: map,
                position: point
            });
            markers[pos.id] = marker;
            bind_info_window(marker, map, infoWindow, "<a href='/tma/"+pos.id+"' style='font-weight: bold;font-size: 16px;'>"+ pos.name + "</a>");
          });
        };
        function bind_info_window(marker, map, infowindow, html) {
            google.maps.event.addListener(marker, 'click', function() {
                infowindow.setContent(html);
                infowindow.open(map, marker);
            })
        };
        </script>
        <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAmnJGdC-ZhVd98H3mwMRv2GU2dlv1D7IA&callback=init_map"></script>
        """
        return render.map.tma({'poses': agents, 'js_foot': js_foot})
Exemplo n.º 7
0
    def GET(self):
        HIDE_THIS = [a.strip() for a in open('HIDE_ARR.txt').read().split(',')]
        agents = Agent.select(
            AND(OR(Agent.q.AgentType == KLIMATOLOGI, Agent.q.AgentType == 0.0),
                Agent.q.expose == True))
        agents = [a for a in agents if a.table_name not in HIDE_THIS]
        sql = "SELECT prima_id, AgentName FROM agent WHERE AgentType IN (0, 1) AND LENGTH(prima_id)>4"
        try:
            rst = Agent._connection.queryAll(sql)
            all_prima = dict([(a[1].lower().replace('.',
                                                    '_').replace(' ',
                                                                 '_'), a[0])
                              for a in rst])
        except:
            all_prima = {}
        #all_prima = dict(map(lambda x: (x[1], x[0]), [p.strip().split('\t') for p in open('PRIMA_ID.txt').readlines()]))
        all_pos = []
        for a in agents:
            sql = "SELECT Rain, CONCAT(SamplingDate, ' ', SamplingTime) AS sampling FROM %s ORDER BY SamplingDate DESC, SamplingTime DESC LIMIT 0, 1" % (
                a.table_name, )
            try:
                rst = Agent._connection.queryAll(sql)
            except:
                rst = None
            if rst:
                rain, sampling = rst[0]
                print rst[0]
                sampling = datetime.datetime.strptime(sampling,
                                                      '%Y-%m-%d %H:%M:%S')
                if datetime.datetime.now() - sampling > datetime.timedelta(
                        minutes=10):
                    rain = 0
                else:
                    rain = float(rain or 0)
            else:
                rain = 0
            p_ = {
                'id': a.AgentId,
                'lrain': rain,
                'name': a.cname,
                'll': a.ll,
                'tname': a.table_name
            }
            if a.table_name in all_prima.keys():
                p_.update({'device': all_prima.get(a.table_name)})
            all_pos.append(p_)
        js_foot = """
        <script type="text/template" id="pos_infowindow">
          <div class="item infowindow" id="pos_<%= index %>">
            <span class="pos"><%= name %> </span>
            <span class="meter">
            </span>
            <div class="">
              <ul>
                <li><i class="fa fa-bar-chart"></i> <a href="/curahhujan/<%= id %>">Hujan Tahunan</a></li>
                <li><i class="fa fa-calendar"></i> <a href="/curahhujan/<%= id %><% print('/' + sampling.split('-')[0] + '/' + sampling.split('-')[1]) %>">Hujan Bulan</a></li>
            </div>
          </div>
        </script>
        <script>
        var ws = new WebSocket('ws://mqtt.bbws-bsolo.net:22286');
        ws.onmessage = function (event) {
            var data = JSON.parse(event.data);
            if (data.device === undefined) { return; }
            var device_id = data.device.split('/')[1];
            var marker = undefined;
            for (m in markers) {
                if (markers[m].did == device_id) {
                    marker = markers[m].markerObj;
                    break;
                }
            }
            var icon_src = 'http://maps.google.com/mapfiles/ms/icons/green-dot.png';
            if (data.tick > 0) {
                // put did into rains_in
                var index = rains_in.indexOf(device_id);
                if (index == -1) {
                    rains_in.push(device_id);
                }
                icon_src = 'http://maps.google.com/mapfiles/ms/icons/yellow-dot.png';
                //icon_src = '/static/images/marker/gray_rain_2.gif';
            } else {
                var index = rains_in.indexOf(device_id);
                if (index > -1) {
                    rains_in.splice(device_id, 1);
                }

            }
            if (marker != undefined) {
                setIcon(marker, icon_src);
            }
        }
        var markers = [];
        var rains_in = [];
        var primaIds = """ + str(all_prima) + """;
        function setIcon(marker, icon_src='http://maps.google.com/mapfiles/ms/icons/green-dot.png') {
            marker.setIcon(icon_src);
        }
        function init_map() {
            var my_options = {
                center: new google.maps.LatLng(-7.49592,111.568909),
                zoom: 9,
                styles: [
    {
        "featureType": "all",
        "elementType": "geometry.fill",
        "stylers": [
            {
                "weight": "2.00"
            }
        ]
    },
    {
        "featureType": "all",
        "elementType": "geometry.stroke",
        "stylers": [
            {
                "color": "#9c9c9c"
            }
        ]
    },
    {
        "featureType": "all",
        "elementType": "labels.text",
        "stylers": [
            {
                "visibility": "on"
            }
        ]
    },
    {
        "featureType": "landscape",
        "elementType": "all",
        "stylers": [
            {
                "color": "#f2f2f2"
            }
        ]
    },
    {
        "featureType": "landscape",
        "elementType": "geometry.fill",
        "stylers": [
            {
                "color": "#ffffff"
            }
        ]
    },
    {
        "featureType": "landscape.man_made",
        "elementType": "geometry.fill",
        "stylers": [
            {
                "color": "#ffffff"
            }
        ]
    },
    {
        "featureType": "poi",
        "elementType": "all",
        "stylers": [
            {
                "visibility": "off"
            }
        ]
    },
    {
        "featureType": "road",
        "elementType": "all",
        "stylers": [
            {
                "saturation": -100
            },
            {
                "lightness": 45
            }
        ]
    },
    {
        "featureType": "road",
        "elementType": "geometry.fill",
        "stylers": [
            {
                "color": "#eeeeee"
            }
        ]
    },
    {
        "featureType": "road",
        "elementType": "labels.text.fill",
        "stylers": [
            {
                "color": "#7b7b7b"
            }
        ]
    },
    {
        "featureType": "road",
        "elementType": "labels.text.stroke",
        "stylers": [
            {
                "color": "#ffffff"
            }
        ]
    },
    {
        "featureType": "road.highway",
        "elementType": "all",
        "stylers": [
            {
                "visibility": "simplified"
            }
        ]
    },
    {
        "featureType": "road.arterial",
        "elementType": "labels.icon",
        "stylers": [
            {
                "visibility": "off"
            }
        ]
    },
    {
        "featureType": "transit",
        "elementType": "all",
        "stylers": [
            {
                "visibility": "off"
            }
        ]
    },
    {
        "featureType": "water",
        "elementType": "all",
        "stylers": [
            {
                "color": "#46bcec"
            },
            {
                "visibility": "on"
            }
        ]
    },
    {
        "featureType": "water",
        "elementType": "geometry.fill",
        "stylers": [
            {
                "color": "#88b6f2" /* "#c8d7d4" */
            }
        ]
    },
    {
        "featureType": "water",
        "elementType": "labels.text.fill",
        "stylers": [
            {
                "color": "#000000"
            }
        ]
    },
    {
        "featureType": "water",
        "elementType": "labels.text.stroke",
        "stylers": [
            {
                "color": "#ffffff"
            }
        ]
    }
],
                mapTypeId: google.maps.MapTypeId.TERRAIN };
            var map = new google.maps.Map(document.getElementById('map'), my_options);
            var lamong_line = new google.maps.KmlLayer(
                {url: 'http://hidrologi.bbws-bsolo.net/static/lamong.kml?v=1',
                preserveViewport: true, map: map});
            var lamong_line = new google.maps.KmlLayer(
                {url: 'http://hidrologi.bbws-bsolo.net/static/grindulu_lorog.kml?v=1',
                preserveViewport: true, map: map});
            var pantura_line = new google.maps.KmlLayer(
                {url: 'http://hidrologi.bbws-bsolo.net/static/pantura.kml?v=2',
                preserveViewport: true, map: map});
            var hilir_line = new google.maps.KmlLayer(
                {url: 'http://hidrologi.bbws-bsolo.net/static/hilir.kml?v=2',
                preserveViewport: true, map: map});
            var madiun_line = new google.maps.KmlLayer(
                {url: 'http://hidrologi.bbws-bsolo.net/static/madiun.kml?v=2',
                preserveViewport: true, map: map});
            var hulu_line = new google.maps.KmlLayer(
                {url: 'http://hidrologi.bbws-bsolo.net/static/hulu.kml?v=2',
                preserveViewport: true, map: map});
          var allPos = """ + str(all_pos) + """;
          var infoWindow = new google.maps.InfoWindow;
          _.each(allPos, function(pos) {
            var lat = parseFloat(pos.ll.split(',')[0]);
            var lng = parseFloat(pos.ll.split(',')[1]);
            var point = new google.maps.LatLng(lat, lng);
            var marker = new google.maps.Marker({
                icon: 'http://maps.google.com/mapfiles/ms/icons/green-dot.png',
                map: map,
                optimized: false,
                title: pos.name + ' (' + pos.device + ')',
                position: point
            })
            markers.push({id: pos.id, did: pos.device, markerObj: marker});
            bind_info_window(marker, map, infoWindow, "<a href='/curahhujan/"+pos.id+"' style='font-weight: bold;font-size: 16px;'>"+ pos.name + "</a>");
          });
        };
        function bind_info_window(marker, map, infowindow, html) {
            google.maps.event.addListener(marker, 'click', function() {
                infowindow.setContent(html);
                infowindow.open(map, marker);
            })
        };
        </script>
        <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAmnJGdC-ZhVd98H3mwMRv2GU2dlv1D7IA&callback=init_map"></script>
        """
        return render.map.curahhujan({'poses': agents, 'js_foot': js_foot})
Exemplo n.º 8
0
    def GET(self):
        HIDE_THIS = [a.strip() for a in open('HIDE_ARR.txt').read().split(',')]
        agents = Agent.select(
            AND(OR(Agent.q.AgentType == KLIMATOLOGI, Agent.q.AgentType == 0.0),
                Agent.q.expose == True))
        agents = [a for a in agents if a.table_name not in HIDE_THIS]
        sql = "SELECT prima_id, AgentName FROM agent WHERE AgentType IN (0, 1) AND LENGTH(prima_id)>4"
        try:
            rst = Agent._connection.queryAll(sql)
            all_prima = dict([(a[1].lower().replace('.',
                                                    '_').replace(' ',
                                                                 '_'), a[0])
                              for a in rst])
        except:
            all_prima = {}
        #all_prima = dict(map(lambda x: (x[1], x[0]), [p.strip().split('\t') for p in open('PRIMA_ID.txt').readlines()]))
        all_pos = []
        for a in agents:
            sql = "SELECT Rain, CONCAT(SamplingDate, ' ', SamplingTime) AS sampling FROM %s ORDER BY SamplingDate DESC, SamplingTime DESC LIMIT 0, 1" % (
                a.table_name, )
            try:
                rst = Agent._connection.queryAll(sql)
            except:
                rst = None
            if rst:
                rain, sampling = rst[0]
                # print(rst[0])
                sampling = datetime.datetime.strptime(sampling,
                                                      '%Y-%m-%d %H:%M:%S')
                if datetime.datetime.now() - sampling > datetime.timedelta(
                        minutes=10):
                    rain = 0
                else:
                    rain = float(rain or 0)
            else:
                rain = 0

            if a.kab == None:
                kab = "-"
            else:
                kab = a.kab

            ch = a.get_segmented_rain(datetime.date.today())

            p_ = {
                'id': a.AgentId,
                'lrain': rain,
                'name': a.cname + ' (' + kab + ')',
                'll': a.ll,
                'tname': a.table_name,
                'petugas': [p.nama for p in a.petugas],
                'kode': [p.kode for p in a.petugas],
                'ch_today': float(ch.get("total"))
            }
            if a.table_name in all_prima.keys():
                p_.update({'device': all_prima.get(a.table_name)})
            all_pos.append(p_)
        js_foot = """
        <script>
            var allPos = """ + str(all_pos) + """;
            for (var i = 0; i < allPos.length; i++) {
                var iw = `<div class="panel panel-default">
                    <div class="panel-heading">
                    <div class="panel-title"><h6>${allPos[i].name}</h6></div></div>
                    <div class="panel-body">
                    <table class="table">
                    <tr><td><b>Curah Hujan</b></td><td><b>${allPos[i].ch_today} mm</b>&nbsp;&nbsp;<a href="/curahhujan/${allPos[i].id}">(Detail)</a></td></tr>
                    <tr><td>Prima ID</td><td>${allPos[i].device}</td></tr>
                    <tr><td>Koordinat</td><td>${allPos[i].ll}</td></tr>
                    </table>
                    </div>
                    <div class="panel-footer"><span class="icofont-user"></span>&nbsp;&nbsp;${allPos[i].petugas} <br>
                    <span class="icofont-barcode"></span>&nbsp;&nbsp;<b>${allPos[i].kode}</b></div>
                    </div>`
                var lat = parseFloat(allPos[i].ll.split(',')[0]);
                var lng = parseFloat(allPos[i].ll.split(',')[1]);

                var name = allPos[i].name,
                marker = new L.Marker(new L.latLng([lat,lng]), {title: name,icon: ch_icon} );//se property searched;
                marker.bindPopup(iw);
                markersLayer.addLayer(marker);
            }
        </script>

        <script>
        var ws = new WebSocket('ws://mqtt.bbws-bsolo.net:22286');
        ws.onmessage = function (event) {
            var data = JSON.parse(event.data);
            if (data.device === undefined) { return; }
            var device_id = data.device.split('/')[1];
            for (ap in allPos) {
                if (allPos[ap].device == device_id) {
                    //console.log(device_id+" "+allPos[ap].name);
                    var pos_hujan = 1;
                    if (pos_hujan ==1) {
                        var lat_ws = parseFloat(allPos[ap].ll.split(',')[0]);
                        var lng_ws = parseFloat(allPos[ap].ll.split(',')[1]);
                    }
                    break;
                } else {
                    var pos_hujan = 0;
                }
            }

            if (data.tick > 0) {
                if (pos_hujan == 1){
                    icon_hujan = ch_icon_rain;
                }
            } else {
                icon_hujan = ch_icon;
            }

            //marker = new L.Marker(new L.latLng([lat_ws,lng_ws]), {icon: icon_hujan} );//se property searched;
            //marker.bindPopup(iw);
            //markersLayer.addLayer(marker);


        }
        </script>

        <!-- Optional JavaScript -->
        <!-- jQuery first, then Popper.js, then Bootstrap JS -->
        <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
        """
        return rendermap.map.curahhujan({'js_foot': js_foot})
Exemplo n.º 9
0
    def GET(self):
        HIDE_THIS = [
            a.strip() for a in open('HIDE_AWLR.txt').read().split(',')
        ]
        agents = Agent.select(
            AND(OR(Agent.q.AgentType == HIDROLOGI, Agent.q.AgentType == 0),
                Agent.q.expose == True)).orderBy(
                    ["wilayah", "-DPL", "-siaga3"])
        agents = [a for a in agents if a.table_name not in HIDE_THIS]
        all_pos = []
        for a in agents:
            try:
                petugas = a.petugas[0].nama
                petugas_kode = a.petugas[0].kode
            except:
                petugas = '-'
                petugas_kode = '-'

            if a.kab == None:
                kab = "-"
            else:
                kab = a.kab
            row = {
                'id': a.AgentId,
                'name': a.cname + ' (' + kab + ')',
                'll': a.ll,
                'device': a.prima_id,
                'petugas': petugas,
                'kode': petugas_kode
            }
            all_pos.append(row)
        all_pos = json.dumps(all_pos)
        js_foot = """
        <script>
            var allPos = """ + str(all_pos) + """;
            for (var i = 0; i < allPos.length; i++) {
                var iw = `<div class="panel panel-default">
                    <div class="panel-heading">
                    <div class="panel-title"><h6>${allPos[i].name}</h6></div></div>
                    <div class="panel-body">
                    <table class="table">
                    <tr><td>Prima ID</td><td>${allPos[i].device}</td></tr>
                    <tr><td>Koordinat</td><td>${allPos[i].ll}</td></tr>
                    </table>
                    </div>
                    <div class="panel-footer"><span class="icofont-user"></span>&nbsp;&nbsp;${allPos[i].petugas} <br>
                    <span class="icofont-barcode"></span>&nbsp;&nbsp;<b>${allPos[i].kode}</b></div>
                    </div>`
                var lat = parseFloat(allPos[i].ll.split(',')[0]);
                var lng = parseFloat(allPos[i].ll.split(',')[1]);

                var name = allPos[i].name,
                marker = new L.Marker(new L.latLng([lat,lng]), {title: name,icon: tma_icon} );//se property searched;
                marker.bindPopup(iw);
                markersLayer.addLayer(marker);
            }
        </script>

        <!-- Optional JavaScript -->
        <!-- jQuery first, then Popper.js, then Bootstrap JS -->
        <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
        """
        return rendermap.map.tma({'js_foot': js_foot})