CALL ZocTimeout 30 FriendIP = ZocAsk("IP address of server devices report to") DO UNTIL more=='##NO##' CALL ZocMsgBox "Connect Device", 1 CALL ZocDelay 3 CALL ZocSend "AT$PKG?^M" CALL CheckVersion CALL sendAT "AT&F" /*reset factory defaults*/ CALL sendAT "AT&W" CALL ZocSend "AT$RESET^M" CALL WaitForReady CALL sendAT "AT%CGAATT=0,0" CALL sendAT "AT$AREG=0" CALL sendAT 'AT+CGDCONT=1,"IP","eagle01"' CALL sendAT "AT$AREG=2" CALL sendAT "AT&W" CALL sendAT"AT$USRVAL=$SCRIPT_VERSION" CALL sendAT "AT$WAKEUP=1,8" /*CALL sendAT wakeup on IP reciept and every 8 minutes*/ CALL sendAT "AT$HBRST=4" CALL sendAT "AT$ACKTM=10,30,1" CALL sendAT "AT+CMGF=1" /*sms text mode*/ CALL sendAT 'AT$SMSDA=1,"+15133077101"' /*setup number for sms at cmds*/ CALL sendAT "AT$EVTIM1=5" /*Minimum reporting time when moving*/ CALL sendAT "AT$EVTIM2=3600" /*Reporting time when stopped*/ CALL sendAT "AT$EVTIM3=3600" /*IO reporting interval*/ CALL sendAT 'AT$FRIEND=1,1,"' || FriendIP || '"' CALL sendAT "AT$UDPAPI=,1720" /*send to port 1720*/ CALL sendAT "AT$STOATEV=1,AT$GEOFNC=25,0,0,0" /*store AT command to clear geofence #25 (start/stop events)*/ CALL sendAT "AT$STOATEV=6,AT&W" /*store persist AT command*/ CALL sendAT "AT$GFDBNC=60,60" /*set geofence debounce to 60 seconds*/ CALL sendAT "AT$IODBNC=1,5" /* set GPIO-1 debounce */ CALL sendAT "AT$IODBNC=2,5" /* set GPIO-2 debounce */ /*Report by minimum time and maximum distance*/ CALL sendAT "AT$EVENT=7,0,16,600,1000000" /*every 600 meters*/ CALL sendAT "AT$EVENT=7,1,12,1,1" /*when timer1 fires*/ CALL sendAT "AT$EVENT=7,2,27,1,1" /*when GPS is valid*/ CALL sendAT "AT$EVENT=7,3,43,1,0" /*reset timer1*/ CALL sendAT "AT$EVENT=7,3,43,2,0" /*reset timer2*/ CALL sendAT "AT$EVENT=7,3,40,3,64967" /*send UDP to 1st FRIEND*/ /*Report by maximum time*/ CALL sendAT "AT$EVENT=8,1,13,1,1" /*when timer2 fires*/ CALL sendAT "AT$EVENT=8,2,27,1,1" /*when GPS is valid*/ CALL sendAT "AT$EVENT=8,3,43,1,0" /*reset timer1*/ CALL sendAT "AT$EVENT=8,3,43,2,0" /*reset timer2*/ CALL sendAT "AT$EVENT=8,3,40,3,64967" /*send UDP to 1st friend*/ /*CALL sendAT wakeup at new IP*/ CALL sendAT "AT$EVENT=9,1,11,1,1" /*reciept of new IP*/ CALL sendAT "AT$EVENT=9,3,40,1,6" /*send wakeup packet*/ /*Entering Geofence Number 1*/ CALL sendAT "AT$EVENT=11,0,21,1,1" CALL sendAT "AT$EVENT=11,3,41,21,64967" /*Leaving Geofence Number 1*/ CALL sendAT "AT$EVENT=51,0,21,0,0" CALL sendAT "AT$EVENT=51,3,41,61,64967" /*Entering Geofence Number 2*/ CALL sendAT "AT$EVENT=12,0,22,1,1" CALL sendAT "AT$EVENT=12,3,41,22,64967" /*Leaving Geofence Number 2*/ CALL sendAT "AT$EVENT=52,0,22,0,0" CALL sendAT "AT$EVENT=52,3,41,62,64967" /*Entering Geofence Number 3*/ CALL sendAT "AT$EVENT=13,0,23,1,1" CALL sendAT "AT$EVENT=13,3,41,23,64967" /*Leaving Geofence Number 3*/ CALL sendAT "AT$EVENT=53,0,23,0,0" CALL sendAT "AT$EVENT=53,3,41,63,64967" /*Entering Geofence Number 4*/ CALL sendAT "AT$EVENT=14,0,24,1,1" CALL sendAT "AT$EVENT=14,3,41,24,64967" /*Leaving Geofence Number 4*/ CALL sendAT "AT$EVENT=54,0,24,0,0" CALL sendAT "AT$EVENT=54,3,41,64,64967" /*Stop events*/ CALL sendAT "AT$STOATEV=7,AT$EVDEL=41A" /*add stored AT cmd to remove trigger*/ CALL sendAT "AT$STOATEV=8,AT$EVENT=41,0,30,180,1000000" /*add stored AT command recreate trigger*/ CALL sendAT "AT$EVENT=41,0,30,180,1000000" /*GPS idle 3 minutes*/ CALL sendAT "AT$EVENT=41,3,41,42,64967" /*report*/ CALL sendAT "AT$EVENT=41,3,44,7,0" /*execute stored command to remove trigger*/ /*Recreate Stop Event Trigger*/ CALL sendAT "AT$EVENT=10,0,17,3,250" /*when speed is over 5 miles per hour*/ CALL sendAT "AT$EVENT=10,3,44,8,0" /*execute stored event 8 AT$EVENT=41,0,30,180,1000000*/ /*Idle events*/ CALL sendAT "AT$EVENT=43,0,30,180,1000000" /*GPS idle 3 minutes*/ CALL sendAT "AT$EVENT=43,2,7,1,1" /* Ignition is High */ CALL sendAT "AT$EVENT=43,3,41,43,64967" /*report*/ /*Ignition off event*/ CALL sendAT "AT$EVENT=44,0,7,0,0" /* ignition high-low transition */ CALL sendAT "AT$EVENT=44,3,41,144,65023" /* report with last valid GPS */ /*Ignition on event*/ CALL sendAT "AT$EVENT=45,0,7,1,1" /* ignition high-low transition */ CALL sendAT "AT$EVENT=45,3,41,145,65023" /* report with last valid GPS */ /*Periodic GPIO reporting*/ CALL sendAT "AT$EVENT=46,1,14,1,1" /*when timer3 fires*/ CALL sendAT "AT$EVENT=46,3,43,3,0" /*reset timer3*/ CALL sendAT "AT$EVENT=46,3,40,101,65023" /*send UDP to 1st friend*/ /*GPIO State Change Events*/ CALL sendAT "AT$EVENT=47,0,0,1,1" /*low-high on GPIO1 */ CALL sendAT "AT$EVENT=47,3,40,101,65023" /*Send UDP to 1st friend*/ /*GPIO State Change Events*/ CALL sendAT "AT$EVENT=48,0,0,0,0" /*high-low on GPIO1 */ CALL sendAT "AT$EVENT=48,3,40,101,65023" /*Send UDP to 1st friend*/ /*GPIO State Change Events*/ CALL sendAT "AT$EVENT=49,0,1,1,1" /*low-high on GPIO2 */ CALL sendAT "AT$EVENT=49,3,40,101,65023" /*Send UDP to 1st friend*/ /*GPIO State Change Events*/ CALL sendAT "AT$EVENT=50,0,1,0,0" /*high-low on GPIO2 */ CALL sendAT "AT$EVENT=50,3,40,101,65023" /*Send UDP to 1st friend*/ /*GPIO State Change Events*/ CALL sendAT "AT$EVENT=51,0,3,1,1" /*low-high on GPIO4 */ CALL sendAT "AT$EVENT=51,3,40,101,65023" /*Send UDP to 1st friend*/ /*GPIO State Change Events*/ CALL sendAT "AT$EVENT=51,0,3,0,0" /*high-low on GPIO4 */ CALL sendAT "AT$EVENT=51,3,40,101,65023" /*Send UDP to 1st friend*/ CALL sendAT "at&w^M" /*save all*/ CALL ZocSend "AT$RESET^M" CALL WaitForReady CALL sendAT "AT&V" CALL ZocBeep 3 more = ZocMsgBox( "Program more devices with IP=" || FriendIP || " (Y/N)", 2) END SAY("OK....Exiting") EXIT sendAT: cmd = arg(1) CALL ZocSend cmd || "^M" CALL WaitForOK RETURN waitForOK: timeout = ZocWait("OK") if timeout=640 THEN DO say "An Error Has Occurred" CALL ZocBeep 1 EXIT END RETURN waitForReady: timeout = ZocWait("ready") if timeout=640 THEN DO say "An Error Has Occurred" CALL ZocBeep 1 EXIT END RETURN checkVersion: timeout = ZocWait("46") if timeout=640 THEN DO say "Device did not report correct firware version" CALL ZocBeep 1 EXIT END RETURN