��IkÂû91Ld­ìÉˆòè˜v�ºÄ?™<Š¢yi�!‰Í�Ì|×Ã•bsÛ»YXR´…«NÀÎÔü#¥jMçæ±@:†f !¡Òéò�…£RûU��™¸g>-ÿ
Ùy›4	.¨Š75êÂö¬sæIIkº8«(jèûtXî˜ p–Î ;ó¢e­­Ž¬€Éb™\MÐ‚ùü_[#T)Þ¦�E}â±'ŸÑiîÅÙ ¶'É²å[Ë„¬`J�2N�”A€VcòlDºú–Q<»¤E®éø.‹ÊÄŒê;x-ª|aírÝ’æ£I*‚ÚXÜÐg|�Ôc<gÃë§!!WÚ´Õ[íDy9!a�8¿ë½¿AÃ†vöÕ`°—æ½iŒK‰ÏÂaøH¡–òÇ!À†¹!ÕyápK¹]QkW‰ê‰ÁÁóQŸHÝ¿=�vb°Á-Ë4ëíÓ?%È»¸*X·D+‘êÞún9:ŽƒÕÌÍo{Eú=s¥k¸xœMD¤ÉŽ“ð·÷cJj/%3°ûÇcñ�­g·ÛÄ'äx¿Ú’ú{˜ý™4Î_+€åàÉM;)–pŸü<«öuÄÿ’Þ–º 9\å|Ñ32Šé»9«Š~<âÔž{k9“ñÎöë(í€p ‹d4©Äœs%PG
‰A´¹u)¥µôcðÉä¥ÛÝVé|bŽ™q·èÌ 	ùÿ§ÜOÙ©�oªšãíu{¶ÍoeôWÚ¿ÓÂ¥�r	ïàGEÕMfìËƒæŒIVQl(¸Ì–øCˆ«è8¿†¶øº¯ù*Ì¿œB3¦1ƒ·N× A<=YÝº+ek$í…Ž£ž­ÌÕRÿ¬8=ÃkˆÓ¨JrE’�Ô¹ l*ÙÍ’×¼y€…’aÍ7¡M›7$Ýrçè¯·pXñ¢®QæÞë_	øpÄmBøÓ>ÑZ¤/c²ç„ºÖä«OÆb¬qÏ>È8èñ¤‘Œ6—ãTö%ÿ÷ëãv×$í‡ŸðôÄ)†^òƒ/¿Ô˜¡U´‚ÚÊË1ñÿ"óé µf:ú’ú²\B^ûF.X‡.$#¹~ÓÚ™T™÷@ÈÇ<ŽþíV
‹hÑ…ƒ…ƒ Ü÷•À¾íCD†"ðRf´¨*>|¥ +óá—ñ×½çv	D·òû‰¤©)MI+$ßó!¯›�b¦yâÆ÷¤Êì<qcK¤8¹B0Ùº1MDË4n«"'RÜ�i‚¢˜vÏ
’LÀ“ÛI?ñ­OìÕÓ°NÕ³?ý¹Œ4ÀÂž-{¤‘X”l+"ë„’”1lJSªÝ¯oq…3–¦˜OŠP_*ÓV2Óô†–p€û»ål¿wÝòQ(s­V¿Äq…ÂX›«‘C•+ë3ØÒ,ýÞ~‡^h´\çqÖE¤\bW=LP+’+sÊÌåópxä³`xMteS½·û]p69ŸUD¬	AàL¸1Â^—~¨LÐ65vô7Äé�t[ÓìTÊ†ÒÂÍB_‹¬•x¾˜Å,-\…�õð)¢R2.22–©:Ê¾0J…l
&ÆG•HYºÁå3¢‰åån¿7�s&Êç¸…ÅqÑ•ñ.õJøïlß¦„B½“ÆpBU ˜Þ.ÌXÁbÖ°j*:]cLé.ìì 1xMG™ñÙé*†Äßž‘ Â1Î0ÚûnPÌ7ùzG#zèÿ[€ò�~R®.ë‘…øwë0ìØpËTqxt­J¨Üà$_€_ÕÍ•›ê Gñ*=x­
$1QEËovTx�ˆë¡ùJ}¬ƒKáY€$q•Mœ»¥K<ltÙz8Ë�Ìû'3ÐŸ3zð¸@kn(ªÞ£·¼¿=ªãâ„8(…·�éùMfìËƒæŒIVQl(¸?u5°€CFÈ,¼ðª¥ì»À�ÉneTýt ýóùÁõÊâ1Î0ÚûnPÌ7ùzG#zèÿ[€ò�~R®.ë‘…øéùÔÞ�…²A[YzGw-ïxö0sïú­¥‹êFUQþšá�ÔüljZÖvHb”T_�T�»w8]SzÐµUòžÄTíG¡ÖndYûœG=mr\[7	TØ.“&Šrxe2¤è[ÆáþÏ´ÄèÌ;·–Tðáï’I(¾âDØú¸žjsP”s�¬·kM/§k¥Ä“zÕ«…û­.ÛäúNÆnB<utŽkžûK�¼h­]h$¸­E"c ªÿ�ml´dX:IéÁ¶¶ªÀVµ"B§«Þ´×#B·¼¿=ªãâ„8(…·�éùMfìËƒæŒIVQl(¸?u5°€CFÈ,¼ðª¥ì»Àf…ï+šÛ•ka*vê2«^5~¬i.'´y“)½2ýg8ïaL2¶VK˜Ú3)ôPyÆÒ'å‡Œ&a…½2^³6L·Š6tGä/’ªdÀ* &”¨1Já¡ôNo©¤µ8ÙM¼I·€º&*«{ fëÏ÷"[­v�_s1^É%¤/™EeN—.“wÌ�Å *HºÔr„æÝ¦ÓC#ïÉ\{Ùnûà€ÈJÛS�e[U¦h¹L„»äûÃxÖuq �‘‡9r~9�6æ‹|[¹z>#p–ì&ÎrÙdÀ(«T·¦+;¼°^ž­ÌÕRÿ¬8=ÃkˆÓ¨JÑ˜sîcë«—¸“‚ïÑ>Œ[±Ü|ÐüV}÷O4éÞ¾D“Št}ê8ÇÂfš£âM
Iâ`OZùªÁÄí4â>ïàÎ¤ákú†Ã÷H�‰�‘	q‡¨˜¡æÖ eÔï^W4«æ.žþÈX€tË=:‚µåG5Ïzä¬�l{"Ç
A™³–j@®1–³ ø)ÞÿèØW>wñÅÐ/Ö÷Ì¡é-Ì#²�U€ÒsxÊ¸þïˆºõ3*#QvÂ¨FÕC¨esÞf;ª(ç"«4{`¡¶¸£Dú}@( k¡Û(#¨9�6æ‹|[¹z>#p–ì&ÎrÙdÀ(«T·¦+;¼°^ž­ÌÕRÿ¬8=ÃkˆÓ¨JÑ˜sîcë«—¸“‚ïÑ>Œ[±Ü|ÐüV}÷O4é?’ñ´ƒ"ý˜wØÓŠóºÁÔ@ªh²s@Êv=K<6)ÔÂmÌÏB\
˜!u}[xáÚÜBÁ<È±'°j*:]cLé.ìì 1xMG™ñÙé*†Äßž‘ Â1Î0ÚûnPÌ7ùzG#z ÕÑ9;e­¾¡øAUáÃIŒK¢ £>°÷Lƒ'ÊOT¶wÕû5×(H¢jñ¢ièÊïÕs›éž0 [>¶Ëd2�¶o¢!ü[§>®m·sú2ŽÄá
Ë 8Œä×Ø¹u4LP€Õ‡á�(�D‹ßiG|]ÇÂ;Ÿ'|`Ân^…šiÔËq†ïü™þ#ZX­·Q”'´9øŒ¸\´½ùÀøµßX;ºSÏ#XçtðÂÎ^ô~Ù‰m»¦§…¼¤¯Bç²
lÆÿFÌ	è’<ëøÙÊÐ¯“Èßº¾¯äy¤ &”¨1Já¡ôNo©¤¸™DHGÕlGîÛ)¿ÒóLÕD“E­è_@†•a“ÊD°¨·È±»[žQÁEéÑŽ/×E "§šæãš±¶ËÆ+J=�„mœÔ1‡¢$Tq„3zŸ<W¡ocplÃ3ñƒ2ÆJ{»çQøÃ×À€é±½Ðb�2”Ý´ë¨…`èo“}#U·¤ÞQ�‹:ò*að>Ê<!„Õ8«0rcÞ›FfÞ3æü:ÈKk½r�õ%uR?óÿ˜h¤
Ö°~K<Iàqû¾:/bcÎ «Òu·YJ‰[êÇ¾ëû 5N:Á[óEPNw?Ïðvd±,$M$µž7�È;cI} Lš>øÇÑï<Õç»r ��ü½AÎ~Ù¼'œ·…°v Q6l5gtÜ]6å{Šþ¡Úø²[èhŠ›L&U„ŒsRã ®¶#BøIA\Ã�;o¢ÖKE‰¼QˆÐ�;Šä}Oh™²à�LG«ú¶bæQ6rÅoá¿Ç­wTn^SàY
Õöc¯yš!òpFÐYé�ªêm­Ì`î"“1QèÁ“Úœ¼Ô._�„þ†éÄ†¾ÉñpCµ‚“´OA,Ù�ú; ãSâÏo›L“�3ÄN™$6]XÂ;`X(\¾ÎùF’èI>ÃF˜àH�¡�xçÑþ]'Û1@�‡£6¦Vt=¶B¼(#Éâ –�à/à°9ÈÛ4úZŽã|W[K`—E½rúÉ!é”€ ßè$yr¿ësÛéÞ\,‰’8n¨7&”1‚0�a¬;šÿW’FÇ®eQ1SXõ?Y-‡y;)%qªöfì_6w½^ %ºGÅ6R„ðbQ/ž]7ÎÅhŽAoÞ •+y	·ñÃ‡oÉl°æÎ "ù—îƒì€¬Wú±‰ó{UÅWaŒÄQ³è²X²}6$QóÉ¬,"[Wú±‰ó{UÅWaŒÄQ³Ô+º‡�?ë‡°˜h¡åŽz?R°]«¨/µõþš?+ÀG.Ú<0ÃÂÆçbHVe¿6YWú±‰ó{UÅWaŒÄQ³‚7Â«¿=âc¶û©Ì ÃýØ7ƒCÓQ°>UJ-ÑðÕ­uŽ‹MËÈ¯“m©X²¿`°•ô,Î
2–ÌûcTj—–]Þc™“wr†_'‹æ•éõ&ØC¿£Êé €?ÚMèRüE²Í]×j7Ë™r7íZ§…±—Úa7êÈãJ‰^’‡�g³ý¡j
‘ºY‘	ª)hœÐ©k@Ü8Ž¿_K5G«´ÅÚŒD¾DÜC ìÂM®’TuLIßaùX¾hNœµáBûÉÜuù&àI¥&}õÕ"`N?©¼ôï8:vÒ§)ï+ÆF�e ½¬fn,í,7©^ªÅ%ï%ry3À©ë¡�¯ƒBFÜâJ×%ÝÝ=ó°ˆÌÎW=^Ýƒ:Y|²ÞFÐ{†ðixã‚¹]ócþšX:x)í äbÈ12ˆ84³ÏüS¥/˜ñ'æõZ·Þ[£lý\�Ø„Ÿ¬ÊJ®…	Î·tc?H5ÚOÖJ®…	Î·tc?H5ÚOÖøKFG‡Âo+Kj+ã–3¹²?$“ïÄ^$°ß<e†-=_ß­BÔ%ÍÊ¼äuKÞ(Ymãb×GÝY)óJ´s€Æ„÷ö¶Û­%‰ëòX7ÁÃ…Í]£?îž¬5 *T¤þùÃsRÔ)ÝË9øˆï–q°ÇÂÌì§C úOÇ:õv|#”ˆ7€W*…°Ô¢?4º0zn¸ñ1<Ù«5¿ƒMè»Í
%@¡{CQÏÈ%zÏ0Yú…U=_lBŒSÜ0ÆêY€òµJ �
’¢`‘wÖ@) == 2:
        parm = reqp[1]
        p = json.loads(parm)
    else:
        parm = ''
        p = None

    print(f'    {req}')
    # print(req + ' -> ' + func + ' ' + parm)

    res = None

    if func == 'get_memory_usage':
        data_cnt = 0
        mem_size = sys.getsizeof(sensor_data)

        for s in sensor_data:
            data_cnt += len(sensor_data[s])
            mem_size += sys.getsizeof(sensor_data[s])

        res = {'data_cnt': data_cnt, 'mem_usage': mem_size}
    
    elif func == 'get_data_single_sensor':
        t1 = p['start_time']
        t2 = p['end_time']
        data_cnt = p['data_cnt']
     
        print('     ' + str(t1) + ', ' + str(t1) + ' - ' + str(data_cnt))
        
        dat = []

        # data_idx = 0
        # data_step = len(sensor_data) / data_cnt

        data_idx = t1 - sensor_info['start_time']
        data_step = (t2 - t1) / data_cnt
        
        for i in range(0, data_cnt):
            dat.append(sensor_data[int(data_idx)])
            data_idx += data_step

        res = dat

    elif func == 'get_info_single_sensor':
        pass
        # res = sensor_info

    elif func == 'get_data_all_sensors':
        t1 = p['start_time']
        t2 = p['end_time']
        data_cnt = p['data_cnt']
     
        dat = {}
        print('     ' + str(t1) + ', ' + str(t1) + ' - ' + str(data_cnt))
        
        for s_pid in sensor_info.keys():
            
            if 'start_time' in sensor_info[s_pid].keys():

                data_idx = t1 - sensor_info[s_pid]['start_time']
                data_step = (t2 - t1) / data_cnt
                dat_single = []
                
                for i in range(0, data_cnt):
                    val = sensor_data[s_pid][int(data_idx)] if data_idx >= 0 and data_idx < len(sensor_data[s_pid]) else 0
                    dat_single.append(val)
                    data_idx += data_step

                dat[s_pid] = dat_single

        res = dat
        
    elif func == 'get_info_all_sensors':
        res = sensor_info

    if res != None:
        writer.write((json.dumps({'res': res}) + "\n").encode('utf8'))
        await writer.drain()
        writer.close()


async def run_server():
    server = await asyncio.start_server(handle_client, HOST, PORT_DATA)
    async with server:
        await server.serve_forever()



asyncio.run(run_server())