+
    i#                     
   ^ RI t ^ RIt^ RIHtHtHtHt ^ RIHtH	t	H
t
HtHt ]! R]4      tR tR tR t]P%                  RR	.R
7      R 4       t]P%                  RR	.R
7      R 4       t]P%                  RR	.R
7      R 4       tR# )    N)	BlueprintResponsejsonifyrequest)MYSQL_DATABASE
MYSQL_HOSTMYSQL_PASSWORD
MYSQL_PORT
MYSQL_USERnutrientlevelc            	          \         P                  ! \        \        \        \
        \        \         P                  P                  R 7      # ))hostportuserpassworddatabasecursorclass)	pymysqlconnectr   r
   r   r	   r   cursors
DictCursor     9C:\Users\Bill\Software\Server\blueprints\nutrientlevel.py	_get_connr      s/    ??OO.. r   c                     V P                  4       ;_uu_ 4       pVP                  R 4       VP                  R4       RRR4       V P                  4        R#   + '       g   i     L"; i)a  
            CREATE TABLE IF NOT EXISTS NutrientLevelStatus (
                id INT AUTO_INCREMENT PRIMARY KEY,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                unit_id VARCHAR(16) NOT NULL,
                node_name VARCHAR(50) DEFAULT NULL,
                nutrient_low TINYINT(1) NOT NULL DEFAULT 0,
                nutrient_state VARCHAR(12) DEFAULT NULL,
                temp VARCHAR(10) DEFAULT NULL,
                humid VARCHAR(10) DEFAULT NULL,
                bat VARCHAR(10) DEFAULT NULL,
                command VARCHAR(20) DEFAULT NULL,
                mac VARCHAR(24) DEFAULT NULL,
                ip VARCHAR(45) DEFAULT NULL,
                firmware_version VARCHAR(24) DEFAULT NULL
            )
            a3  
            CREATE TABLE IF NOT EXISTS device_command (
                device_id VARCHAR(16) PRIMARY KEY,
                command VARCHAR(20) NOT NULL DEFAULT 'sleep',
                new_device_id VARCHAR(16) DEFAULT NULL,
                new_node_name VARCHAR(50) DEFAULT NULL
            )
            N)cursorexecutecommit)conncurs   & r   _ensure_tablesr"      sK    	#	
& 			
) 
< 	KKM= 
s   #AA&	c                    \        V \        4      '       d   V # \        V \        \        34      '       d   V ^ 8g  # \        V \        4      '       d1   V P                  4       P                  4       pVR9   d   R# VR9   d   R# R# )r   TFN)1trueyesonlow)0falsenooffnormal)
isinstanceboolintfloatstrstriplower)vss   & r   _parse_boolr7   8   sh    !T!c5\""Av!SGGIOO1155r   z/readingPOST)methodsc                  
    \         P                  ! R R R7      p V '       g   \        RRRR/4      R3# V P                  R4      pV P                  R4      pV P                  R	4      pV P                  R
4      pV P                  R4      pV P                  R4      pV P                  R4      pV P                  R4      pV P                  R4      p	V P                  R4      p
Ve	   Ve   Vf   \        RRRR/4      R3# \	        V\
        4      '       d   VP                  4       '       g   \        RRRR/4      R3# VP                  4       R,          p\	        V\
        4      '       d   TMRP                  4       R,          ;'       g    Rp\        V4      P                  4       R,          p\        V4      P                  4       R,          p\	        V\
        4      '       d   TMRP                  4       R,          ;'       g    Rp\	        V\
        4      '       d   TMRP                  4       R,          ;'       g    RpVe!   \        V4      P                  4       R,          MRp\	        V\
        4      '       d   TMRP                  4       R,          ;'       g    Rp\        V	4      pVf"   \	        V
\
        4      '       d   \        V
4      pVf   RpV'       d   RMRp
\        4       p \        V4       VP                  4       ;_uu_ 4       pVP                  RV34       VP                  4       pV'       d
   VR,          MRP                  4       P                  4       pVR-9  d   RpV'       d1   VP                  R 4      ;'       g    RP                  4       R,          MRpV'       d1   VP                  R!4      ;'       g    RP                  4       R,          MRpTP                  R"TTV'       d   ^M^ V
VVVVVVV34       V'       d   VP                  R#V34       V'       d   VP                  R$V34       VR8X  d   VP                  R%V34       RRR4       VP                  4        VP                  4        \         P"                  ! RR RXR&X'       d   TMTRX'       d   TMT;'       g    R'/R.R(7      p\%        V^R)R*7      #   + '       g   i     L|; i  TP                  4        i ; i  \&        P(                   d    \        RRRR+/4      R,3u # \*         d%   p\        RRR\        T4      /4      R,3u Rp?# Rp?ii ; i)/TforcesilentokFerrorzInvalid or missing JSON  unit_id	node_nametemphumidmacipbatfirmware_versionnutrient_lownutrient_stateNzMissing unit_id, temp, or humidz"unit_id must be a non-empty stringN   N N2   N:N
   N:N   N:N-   Nr(   r-   zUSELECT command, new_device_id, new_node_name FROM device_command WHERE device_id = %scommandnosleeprebootnew_device_idnew_node_namea*  
                    INSERT INTO NutrientLevelStatus
                        (unit_id, node_name, nutrient_low, nutrient_state, temp, humid, bat, command, mac, ip, firmware_version)
                    VALUES
                        (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
                    zCUPDATE device_command SET new_device_id = NULL WHERE device_id = %szCUPDATE device_command SET new_node_name = NULL WHERE device_id = %szBUPDATE device_command SET command = 'nosleep' WHERE device_id = %s	device_idNEW)
separatorszapplication/json)statusmimetypezDatabase error  sleeprT   rU   ),:)r   get_jsonr   getr.   r2   r3   r7   r   r"   r   r   fetchoner4   r   closejsondumpsr   r   Error	Exception)datarA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   low_boolr    r!   rowcurrent_commandrV   rW   bodyes                       r   readingrp   F   st   a<d48D%2KLMsRR((9%HH[)	xx!hhuoXXd^hhuo88$67xx/"23?dlemD%2STUWZZZ'3''w}}D%2VWXZ]]]--/#&",Y"<"<Y"KKMcRZZVZ	4y %E
  "3' c**s99;C@HHDr3''bR668=EE(+s3x~~$T0:;KS0Q0Q,WY``bcfgooko|,
>3 ? ?">2HH"*{,	4 #kJ lln583y>i"N"N"P"V"V"X"*HH&/OQT!9!?!?R F F H MZ^QT!9!?!?R F F H MZ^  !%1&'(, !KK ehogqr KK ehogqr"h.KK dgnfpqO P KKMJJLzzd?m]m])BTBTu	 "
 S3EFFk T JJL == FeW.>?@#EE <eWc!f56;;<s   S+ S+ CS+ :+S+ &S+ 7AS+ A8S+ =8S+ 6AS+ A S+ S+ %#S A#S,S!S&S>/S.SS"-SS ',S+ S+  
S+ +S+ S	S S((S+ +&UUUT<6U<Uz/api/commandc            	      6   \         P                  ! R R R7      ;'       g    / p V P                  R4      ;'       g    RP                  4       R,          pV P                  R4      ;'       g    RP                  4       P	                  4       pV'       g   \        RRRR	/4      R
3# VR9  d   \        RRRR/4      R
3#  \        4       p \        V4       VP                  4       ;_uu_ 4       pVP                  RW34       RRR4       VP                  4        VP                  4        \        RR RVRV/4      #   + '       g   i     LA; i  TP                  4        i ; i  \        P                   d%   p\        RRR\        T4      /4      R3u Rp?# Rp?ii ; i)Tr;   rA   rM   rK   rS   r>   Fr?   zunit_id requiredr@   z)command must be sleep, nosleep, or rebootzqINSERT INTO device_command (device_id, command) VALUES (%s, %s) ON DUPLICATE KEY UPDATE command = VALUES(command)Nr]   r^   )r   rb   rc   r3   r4   r   r   r"   r   r   r   re   r   rh   r2   )rj   rA   cmdr    r!   ro   s         r   api_set_commandrs      s[   $t4::Dxx	"((b//1#6G88I$$"
+
+
-
3
3
5CeW.@ABCGG
00eW.YZ[]```<{
	4 #HN  KKMJJLdIw	3GHH  JJL== <eWc!f56;;<sN   <
E #E
 *D7>E
  E 7E	E
 
EE F4FFFz/api/set_node_id_namec            	         \         P                  ! R R R7      ;'       g    / p V P                  R4      ;'       g    RP                  4       R,          pV P                  R4      ;'       g    RP                  4       R,          pV P                  R4      ;'       g    RP                  4       R,          pV'       d   V'       d	   V'       g   \	        RR	R
R/4      R3#  \        4       p \        V4       VP                  4       ;_uu_ 4       pVP                  RW#V34       VP                  RWV34       RRR4       VP                  4        VP                  4        \	        RR /4      #   + '       g   i     L=; i  TP                  4        i ; i  \        P                   d%   p\	        RR	R
\        T4      /4      R3u Rp?# Rp?ii ; i)Tr;   rA   rM   rK   new_unit_idrW   rN   r>   Fr?   z4unit_id, new_unit_id, and new_node_name are requiredr@   zNUPDATE NutrientLevelStatus SET unit_id = %s, node_name = %s WHERE unit_id = %szINSERT INTO device_command (device_id, command, new_device_id, new_node_name) VALUES (%s, 'nosleep', %s, %s) ON DUPLICATE KEY UPDATE new_device_id = VALUES(new_device_id), new_node_name = VALUES(new_node_name)Nr]   )r   rb   rc   r3   r   r   r"   r   r   r   re   r   rh   r2   )rj   rA   ru   rW   r    r!   ro   s          r   api_set_node_id_namerv      so   $t4::Dxx	"((b//1#6G88M*00b779#>KXXo.44";;=cBM+]eW.defhkkk<{	4 #d 9 {=9  KKMJJLd|$$  JJL== <eWc!f56;;<sN   
F (#E< )E)4E< F )E9	4E< <FF G
&G?G
G
)rf   r   flaskr   r   r   r   configr   r   r	   r
   r   __name__bpr   r"   r7   routerp   rs   rv   r   r   r   <module>r|      s      7 7 U U)D *vh'b< (b<J .6(+< ,<6 
!F84< 5<r   