B
    ”) b˜J  ã            	   @   sþ  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZdadZede ƒ eejƒdkr¸ejd dkr¸d	aed
ƒ ej d¡rÎe d¡ yd dlZW n&   edƒ e d¡ d dlZY nX yd dlmZmZ W n.   edƒ e d¡ d dlmZmZ Y nX yd dlmZ W n*   edƒ e d¡ d dlmZ Y nX d adZdZd dlm Z  dd„ e _!ee"ƒZde_#eeƒ e $d¡Ze %ej&¡ dd„ Z'dd„ Z(dd„ Z)e *d¡dd„ ƒZ+ej*dd gd!d"d#„ ƒZ,e *d$¡d%d&„ ƒZ-d'ga.d(d)„ Z/d*d+„ Z0e"d,krúe 1e'ƒ d- ¡Z2e2j3ej4j5kròe2j6ekròed.ƒ ej 7e'ƒ d/ d0¡ e8dd1ƒZ9e9 :d2¡ e9 :d3¡ e9 :d4¡ trÆe9 :d5¡ n
e9 :d6¡ e9 ;¡  e d7¡ e <e =¡ d8¡ d9Z>ej e>¡se ?e>¡ e>d: Z@ej e@¡s8ej 7e'ƒ d; e@¡ e>d< Z@ej e@¡sbej 7e'ƒ d= e@¡ ed>ƒ e
jA Bd?¡dkr†e d@¡ ejCdAk rœe dB¡ e D¡ ZEeEdC jFsÒeEdD jFsÒeEdE jFsÒe dF¡ e
jA BdG¡dkrîe dH¡ eEdI jFseEdJ jFse dK¡ edLƒ e dM¡rVe8dMƒZ9e9 G¡ ZHe9 ;¡  xeHD ]ZIt. JeI¡ qBW dZKzLe dN¡ e8dOƒZ9e9 G¡ ZHe9 ;¡  x$eHD ]ZIeI LdP¡dQkr„d	ZKP q„W W de dO¡ X eKsÞedRƒ e dS¡ e dT¡ edUƒ edVƒ edWƒ ejMdXdY dS )Zé    N)ÚpathFZ20220304z	version: é   é   ÚdebugTzdebug mode: enablezcw_launch_again.pyz.Please wait to install the necessary packages.zsudo pip3 install requests2)ÚFlaskÚrequestzsudo pip3 install Flask)ÚCORSzsudo pip3 install Flask-Cors)Úclic              G   s   d S )N© )Ú_r
   r
   úrp_agent.pyÚ<lambda>8   ó    r   Zwerkzeugc               C   s   t rdS dS )Nzhttp://www.chipwaygo.comzhttps://www.chipwaygo.com)Úis_debugr
   r
   r
   r   Úget_protocolC   s    r   c          	   C   sH   t  d|  d ¡ tdƒ$}| ¡ }t  d¡ d|kr:dS W d Q R X dS )Nzsystemctl is-active z > tmpÚtmpZactiver   r   )ÚosÚsystemÚopenÚreadÚremove)Zservice_namer   r
   r
   r   Ú	is_activeI   s    

r   c              C   s€   t  t¡rt td¡ tt d¡dtƒ datdƒr|t	 
¡ } |  ddd¡ |  ddd¡ |  ddd¡ |  d	dd¡ |  ¡  d S )
Né	   z%Y-%m-%d %H:%M:%Szstop child_pid:r   Úpigpiodé   é   é   é   )ÚpsutilZ
pid_existsÚ	child_pidr   ÚkillÚprintÚtimeÚstrftimer   ÚpigpioÚpiZhardware_PWMÚstop)r%   r
   r
   r   Ústop_subprocessR   s    
r'   ú/c               C   s   dS )Nz<h1>Raspberry Pi Blockly!!</h1>r
   r
   r
   r
   r   Úhelloa   s    r)   z/uploadZPOST)Úmethodsc           	   C   s¸  t ƒ r¨tdddd} |  ttj ¡ dƒ¡ W d Q R X tƒ  tddƒ ¡ }| d¡dk}|rpt	dƒspt
 d	¡ t tƒ d
 ¡}t |j¡}| d¡dkr d}t
j |¡s¶t
 |¡ |d }t
j |¡sàtj tƒ d |¡ n@ddlm} t|d |jƒ |d |jkr tj tƒ d |¡ | d¡dkr¨d}t
j |¡sLt
 |¡ |d }t
j |¡sxtj tƒ d |¡ n0ddlm} |d |jkr¨tj tƒ d |¡ | d¡dkr0d}t
j |¡sÔt
 |¡ |d }t
j |¡s tj tƒ d |¡ n0ddlm}	 |d |	jkr0tj tƒ d |¡ | d¡dkr¸d}t
j |¡s\t
 |¡ |d }t
j |¡sˆtj tƒ d |¡ n0ddlm }
 |d  |
jkr¸tj tƒ d |¡ | d!¡dkr@d}t
j |¡sät
 |¡ |d" }t
j |¡stj tƒ d# |¡ n0dd$l!m"} |d% |jkr@tj tƒ d# |¡ | d&¡dkrÈd}t
j |¡slt
 |¡ |d' }t
j |¡s˜tj tƒ d( |¡ n0dd)l#m$} |d* |jkrÈtj tƒ d( |¡ | d+¡dkrPd}t
j |¡sôt
 |¡ |d, }t
j |¡s tj tƒ d- |¡ n0dd.l%m&} |d/ |jkrPtj tƒ d- |¡ | d0¡dkrØd}t
j |¡s|t
 |¡ |d1 }t
j |¡s¨tj tƒ d2 |¡ n0dd3l'm(} |d4 |jkrØtj tƒ d2 |¡ | d5¡dkr`d}t
j |¡st
 |¡ |d6 }t
j |¡s0tj tƒ d7 |¡ n0dd8l)m*} |d9 |jkr`tj tƒ d7 |¡ | d:¡dkrèd}t
j |¡sŒt
 |¡ |d; }t
j |¡s¸tj tƒ d< |¡ n0dd=l+m,} |d> |jkrètj tƒ d< |¡ | d?¡dkrpd}t
j |¡st
 |¡ |d@ }t
j |¡s@tj tƒ dA |¡ n0ddBl-m.} |dC |jkrptj tƒ dA |¡ | dD¡dkrød}t
j |¡sœt
 |¡ |dE }t
j |¡sÈtj tƒ dF |¡ n0ddGl/m0} |dH |jkrøtj tƒ dF |¡ | dI¡dkr€d}t
j |¡s$t
 |¡ |dJ }t
j |¡sPtj tƒ dK |¡ n0ddLl1m2} |dM |jkr€tj tƒ dK |¡ | d¡dkrÄydd l3}W n&   tt4 5dN¡dOƒ t
 dP¡ Y nX | dQ¡dkryddRl6m7} W n&   tt4 5dN¡dSƒ t
 dT¡ Y nX t
 dU¡ | dV¡dkr,t8ƒ  | dW¡dkrzyddXl9m:} W n&   tt4 5dN¡dYƒ t
 dZ¡ Y nX t8ƒ  t; <d[dg¡}|j=a>tt4 5dN¡d\t>ƒ tt>ƒS td]ƒ d^S d S )_Nzrpi_blockly.pyÚwzutf-8)ÚencodingÚrzimport pigpioéÿÿÿÿr   zsudo service pigpiod startz)/blockly/rpi/download/cw_libs/version.txtzimport CW_TeachableMachineZcw_libsz/cw_teachable_machine.pycz6/blockly/rpi/download/cw_libs/cw_teachable_machine.pycr   )ÚCW_TeachableMachiner/   zimport CW_FaceDetectz/cw_face_detect.pycz0/blockly/rpi/download/cw_libs/cw_face_detect.pyc)ÚCW_FaceDetectr0   zimport CW_MatrixLedz/cw_matrix_led.pycz//blockly/rpi/download/cw_libs/cw_matrix_led.pyc)ÚCW_MatrixLedr1   zimport CW_DHT11z/cw_dht11.pycz*/blockly/rpi/download/cw_libs/cw_dht11.pyc)ÚCW_DHT11r2   z/from cw_libs.cw_ultrasonic import CW_Ultrasonicz/cw_ultrasonic.pycz//blockly/rpi/download/cw_libs/cw_ultrasonic.pyc)ÚCW_Ultrasonicr3   z%from cw_libs.cw_servo import CW_Servoz/cw_servo.pycz*/blockly/rpi/download/cw_libs/cw_servo.pyc)ÚCW_Servor4   z+from cw_libs.cw_hw_servo import CW_HW_Servoz/cw_hw_servo.pycz-/blockly/rpi/download/cw_libs/cw_hw_servo.pyc)ÚCW_HW_Servor5   z'from cw_libs.cw_buzzer import CW_Buzzerz/cw_buzzer.pycz+/blockly/rpi/download/cw_libs/cw_buzzer.pyc)Ú	CW_Buzzerr6   z-from cw_libs.cw_hw_buzzer import CW_HW_Buzzerz/cw_hw_buzzer.pycz./blockly/rpi/download/cw_libs/cw_hw_buzzer.pyc)ÚCW_HW_Buzzerr7   z'from cw_libs.cw_shaker import CW_Shakerz/cw_shaker.pycz+/blockly/rpi/download/cw_libs/cw_shaker.pyc)Ú	CW_Shakerr8   z)from cw_libs.cw_pcf8591 import CW_PCF8591z/cw_pcf8591.pycz,/blockly/rpi/download/cw_libs/cw_pcf8591.pyc)Ú
CW_PCF8591r9   z)from cw_libs.cw_lcd1602 import CW_LCD1602z/cw_lcd1602.pycz,/blockly/rpi/download/cw_libs/cw_lcd1602.pyc)Ú
CW_LCD1602r:   z#from cw_libs.cw_rfid import CW_RFIDz/cw_rfid.pycz)/blockly/rpi/download/cw_libs/cw_rfid.pyc)ÚCW_RFIDr;   z%Y-%m-%d %H:%M:%Szinstall dht11zsudo pip3 install dht11zimport CW_RFID)ÚSimpleMFRC522zinstall mfrc522zsudo pip3 install mfrc522z!sudo raspi-config nonint do_spi 0zimport CW_PCF8591zimport CW_LCD1602)ÚCharLCDzinstall RPLCDzsudo pip3 install RPLCDÚpython3zrun child_pid:zThe origin is not allowed!!zerr:The origin is not allowed!!)?Úcheck_http_originr   ÚwriteÚstrr   Ústreamr   r'   Úfindr   r   r   ÚrequestsÚgetr   ÚjsonÚloadsÚtextr   ÚexistsÚmakedirsÚurllibÚurlretrieveZcw_libs.cw_teachable_machiner/   r!   Ú__version__Zcw_libs.cw_face_detectr0   Zcw_libs.cw_matrix_ledr1   Zcw_libs.cw_dht11r2   Zcw_libs.cw_ultrasonicr3   Zcw_libs.cw_servor4   Zcw_libs.cw_hw_servor5   Zcw_libs.cw_buzzerr6   Zcw_libs.cw_hw_buzzerr7   Zcw_libs.cw_shakerr8   Zcw_libs.cw_pcf8591r9   Zcw_libs.cw_lcd1602r:   Zcw_libs.cw_rfidr;   Údht11r"   r#   Zmfrc522r<   Úenable_i2c_funcZ	RPLCD.i2cr=   Ú
subprocessÚPopenÚpidr   )ÚfZtxtZhas_import_pigpioZurlZversion_jsonÚ
folderpathZclassfilepathr/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   rN   r<   r=   Zprocessr
   r
   r   Úuploade   sR    














rU   z/stopc               C   s    t ƒ rtƒ  dS tdƒ dS d S )NÚ zThe origin is not allowed!!zerr:The origin is not allowed!!)r?   r'   r!   r
   r
   r
   r   r&   i  s
    r&   zwww.chipwaygo.comc              C   sd   t j dd¡} |  dd¡ dd¡} |  d¡}|dkr@| d|… } td	| ƒ dt jkr`| tkr`d
S dS )NZHTTP_ORIGINz--zhttp://rV   zhttps://ú:r.   r   ÚoriginTF)r   ÚenvironrE   ÚreplacerC   r!   Úallow_origin_list)rX   Úposr
   r
   r   r?   t  s    

r?   c               C   s(   t  d¡ tt d¡dƒ t  d¡ d S )Nz!sudo raspi-config nonint do_i2c 0z%Y-%m-%d %H:%M:%SzI2C Detect:zi2cdetect -y 1)r   r   r!   r"   r#   r
   r
   r
   r   rO     s    
rO   Ú__main__z/blockly/rp_agent.verz">>Downloading the new version...<<z"/blockly/rpi/download/rp_agent.pycznew_rp_agent.pycr+   z
import os
z.os.rename('new_rp_agent.pyc', 'rp_agent.pyc')
zprint('>>Program update...<<')
z(os.system("python3 rp_agent.pyc debug")
z"os.system("python3 rp_agent.pyc")
zpython3 cw_launch_again.pyr   zcw_libs/haarz /haarcascade_frontalface_alt.xmlzB/blockly/rpi/download/cw_libs/haar/haarcascade_frontalface_alt.xmlz/haarcascade_mcs_nose.xmlz;/blockly/rpi/download/cw_libs/haar/haarcascade_mcs_nose.xmlz-Please wait a moment for installing packages.Ztflite_runtimezksudo pip3 install https://dl.google.com/coral/python/tflite_runtime-2.1.0.post1-cp37-cp37m-linux_armv7l.whlz1.21.3z`sudo pip3 install https://www.piwheels.org/simple/numpy/numpy-1.21.3-cp37-cp37m-linux_armv7l.whlzlibhdf5-devzlibatlas-base-devzlibqt4-testzlsudo apt-get install -y libhdf5-dev libhdf5-serial-dev libatlas-base-dev libjasper-dev libqtgui4 libqt4-testZcv2zrsudo pip3 install https://www.piwheels.org/simple/opencv-python/opencv_python-4.5.4.60-cp37-cp37m-linux_armv7l.whlzfonts-wqy-microheizfonts-wqy-zenheiz8sudo apt-get install fonts-wqy-microhei fonts-wqy-zenheizThe installation is complete.Z
origin_tmpzcrontab -l >> cron_tmpZcron_tmpz"@reboot sudo service pigpiod startr.   z/Please wait a moment for system initialization.zLcrontab -l | { cat; echo "@reboot sudo service pigpiod start"; } | crontab -zsudo service pigpiod startz System initialization completed.z!Waiting for blockly instructions.z'---------------------------------------i˜Q  )Zport)NrP   r   r"   r   Zloggingr$   r   Zurllib.requestrK   ZpathlibÚ	importlibZnumpyZaptrD   rF   Úsysr   Z	agent_verr!   ÚlenÚargvrI   r   r   Zflaskr   r   Z
flask_corsr   r   ZappÚlogr	   Zshow_server_bannerÚ__name__r   Z	getLoggerZsetLevelZERRORr   r   r'   Zrouter)   rU   r&   r[   r?   rO   rE   r-   Zstatus_codeZcodesÚokrH   rL   r   rS   r@   Úcloser    ÚgetpidrT   rJ   ZhaarfilepathÚutilÚ	find_specrM   ZCacheÚcacheZis_installedÚ	readlinesÚlinesÚlineÚappendZhas_initrC   Úrunr
   r
   r
   r   Ú<module>   sö   





	  










$







