| 
          #!/bin/bash | 
        
        
           | 
          PRINTER_IP={IP} | 
        
        
           | 
          API=https://api.telegram.org/bot{TOKEN} | 
        
        
           | 
          CHAT={CHAT} | 
        
        
           | 
          
 | 
        
        
           | 
          STATE_FILE=/run/3d-printer-sate.mon | 
        
        
           | 
          MESSAGE_ID_FILE=/run/3d-printer-msg-id.mon | 
        
        
           | 
          
 | 
        
        
           | 
          # Status table | 
        
        
           | 
          STATE_OFFLINE=f | 
        
        
           | 
          STATE_ONLINE=n | 
        
        
           | 
          STATE_PRINTING=p | 
        
        
           | 
          
 | 
        
        
           | 
          
 | 
        
        
           | 
          function send { | 
        
        
           | 
          	/usr/bin/curl -s -X POST $API/sendMessage -d chat_id="$CHAT" -d text="3D Printer%0A$1" | /usr/bin/jq '.result.message_id' > $MESSAGE_ID_FILE | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          function update { | 
        
        
           | 
          	MESSAGE_ID=$(cat $MESSAGE_ID_FILE) | 
        
        
           | 
          	echo "update $MESSAGE_ID" | 
        
        
           | 
          	if [[ $MESSAGE_ID == ?(-)+([0-9]) ]]; then | 
        
        
           | 
          		/usr/bin/curl -s -X POST $API/editMessageText -d chat_id="$CHAT" -d message_id="$MESSAGE_ID" -d text="3D Printer%0A$1" | 
        
        
           | 
          	fi | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          # Prev state | 
        
        
           | 
          touch $STATE_FILE | 
        
        
           | 
          PREV_STATE=$(cat $STATE_FILE) | 
        
        
           | 
          PREV_STATE=${PREV_STATE:-$STATE_OFFLINE} | 
        
        
           | 
          echo "Prev state $PREV_STATE" | 
        
        
           | 
          
 | 
        
        
           | 
          # Cur state | 
        
        
           | 
          NC_OUT=$(nc -d -I1 -w5 $PRINTER_IP 8080 | head -c 128 ; echo -e "\n${PIPESTATUS[0]}\n") | 
        
        
           | 
          NC_CODE=$(echo "$NC_OUT" | tail -n 1) | 
        
        
           | 
          NC_OUT=$(echo "$NC_OUT" | grep "SD printing" | tail -n 1) | 
        
        
           | 
          echo "nc out $NC_OUT" | 
        
        
           | 
          echo "nc code $NC_CODE" | 
        
        
           | 
          
 | 
        
        
           | 
          if [ $NC_CODE -ne 0 ]; then | 
        
        
           | 
          	CUR_STATE=$STATE_OFFLINE | 
        
        
           | 
          elif [[ $NC_OUT == *"Not"* ]]; then | 
        
        
           | 
          	CUR_STATE=$STATE_ONLINE | 
        
        
           | 
          elif [[ ! -z "$NC_OUT" ]]; then | 
        
        
           | 
          	CUR_STATE=$STATE_PRINTING | 
        
        
           | 
          	PROGRESS_RAW=$(echo "$NC_OUT" | cut -d' ' -f4) | 
        
        
           | 
          	PROGRESS_PART1=$(echo "$PROGRESS_RAW" | cut -d'/' -f1 -s) | 
        
        
           | 
          	PROGRESS_PART2=$(echo "$PROGRESS_RAW" | cut -d'/' -f2 -s) | 
        
        
           | 
          	if [[ ! -z "$PROGRESS_RAW" && $PROGRESS_PART2 -gt 0 && $PROGRESS_PART2 -ge $PROGRESS_PART1 ]]; then | 
        
        
           | 
          		PROGRESS_PERCENT=$(python -c "print ('%.2f' % (100.0*$PROGRESS_RAW))") | 
        
        
           | 
          	fi | 
        
        
           | 
          else | 
        
        
           | 
          	CUR_STATE=$PREV_STATE | 
        
        
           | 
          fi | 
        
        
           | 
          
 | 
        
        
           | 
          echo "$CUR_STATE" > $STATE_FILE | 
        
        
           | 
          echo "Cur state $CUR_STATE" | 
        
        
           | 
          echo "Prgrs raw $PROGRESS_RAW" | 
        
        
           | 
          echo "Prgrs perc $PROGRESS_PERCENT" | 
        
        
           | 
          
 | 
        
        
           | 
          # State machine | 
        
        
           | 
          
 | 
        
        
           | 
            if [[ $PREV_STATE == $STATE_OFFLINE  && $CUR_STATE == $STATE_OFFLINE ]]; then | 
        
        
           | 
          	true | 
        
        
           | 
          elif [[ $PREV_STATE == $STATE_OFFLINE  && $CUR_STATE == $STATE_ONLINE ]]; then | 
        
        
           | 
          	send "Now online!" | 
        
        
           | 
          elif [[ $PREV_STATE == $STATE_OFFLINE  && $CUR_STATE == $STATE_PRINTING ]]; then | 
        
        
           | 
          	send "Printing started!" | 
        
        
           | 
          
 | 
        
        
           | 
          elif [[ $PREV_STATE == $STATE_ONLINE   && $CUR_STATE == $STATE_OFFLINE ]]; then | 
        
        
           | 
          	send "Now offline!" | 
        
        
           | 
          elif [[ $PREV_STATE == $STATE_ONLINE   && $CUR_STATE == $STATE_ONLINE ]]; then | 
        
        
           | 
          	true | 
        
        
           | 
          elif [[ $PREV_STATE == $STATE_ONLINE   && $CUR_STATE == $STATE_PRINTING ]]; then | 
        
        
           | 
          	send "Printing started!" | 
        
        
           | 
          
 | 
        
        
           | 
          elif [[ $PREV_STATE == $STATE_PRINTING && $CUR_STATE == $STATE_OFFLINE ]]; then | 
        
        
           | 
          	send "Now offline!" | 
        
        
           | 
          elif [[ $PREV_STATE == $STATE_PRINTING && $CUR_STATE == $STATE_ONLINE ]]; then | 
        
        
           | 
          	send "Printing done!" | 
        
        
           | 
          elif [[ $PREV_STATE == $STATE_PRINTING && $CUR_STATE == $STATE_PRINTING ]]; then | 
        
        
           | 
          	if [[ ! -z "$PROGRESS_PERCENT" ]]; then | 
        
        
           | 
          		update "printing $PROGRESS_PERCENT%" | 
        
        
           | 
          	fi | 
        
        
           | 
          else | 
        
        
           | 
          	send "Shit happends [$PREV_STATE]->[$CUR_STATE]" | 
        
        
           | 
          fi |