At re:Invent 2016 AWS Greengrass was introduced to the world. This miniature fulfillment center demonstration was used to display what could be done with Greengrass when announced. It has since been upgraded to use the publicly available version of Greengrass v1.
A video was taken of the completed and operational Greengrass-based miniature fulfillment center, a.k.a. "dual robot arm demo" in action at re:Invent. Since re:Invent this demo and example has continued to evolve. It has been the seed for other demos and now supports Greengrass discovery capabilities.
The artifacts, example code, and instructions to construct this demo are available in this repository as an example. We look forward to seeing what you'll do with it.
aws-greengrass-mini-fulfillment/
+- docs/
| +- BOM.md -- the bill of materials necessary for construction
| +- CONSTR.md -- instructions for physical construction (TODO)
| +- INSTALL.md -- instructions for software provisioning and install
| +- OPERATE.md -- instructions for operation of the demo
| +- TIDBITS.md -- tiny pieces of setup information that might be helpful
| +- TROUBLE.md -- troubleshooting of install and operation
|
+- groups/
| +- cert_setup.py -- generates local certificates used by Greengrass groups
| +- group_setup.py -- provisions and deploys example Greengrass groups
| +- servo_setup.py -- prepares the servo communication code for example use
| |
| +- arm/ -- the code and config necessary for an arm host
| | +- ggd/ -- the Greengrass Devices that will be run on the Host
| | | +- servo/ -- the servo communications libraries
| | +- inv_arm/ -- the specific config and certs for the `inv_arm` group
| | +- sort_arm/ -- the specific config and certs for the `sort_arm` group
| |
| +- lambda/ -- the Lambda functions used in the Greengrass groups
| |
| +- master/ -- the directory of the `master` Greengrass group
| +- certs/ -- the group AWS IoT and local certs to be copied to Core
| +- ggd/ -- the Greengrass Devices that will be run on the Host
| +- certs/ -- the client certs used by GG devices
| +- flask/ -- where the web GG device gets files to serve
| +- servo/ -- the servo communications libraries
|
+- models/ -- the models used to 3D print components of this demo
+- LICENSE
+- README.md -- this file
+- requirements.txt
After following the installation instructions, each directory contains all the files necessary to support one of the three Demo groups' hosts. There are three Greengrass Groups named:
| Group | Host Name | Description |
| :---: | :---: | :--- |
| inv_arm
| inv_arm-pi
| contains the Inventory Arm devices and the Inventory Arm Core |
| master
| master-pi
| contains both the Conveyor Belt devices and the Master Core |
| sort_arm
| sort_arm-pi
| contains the Sorting Arm devices and the Sort Arm Core |
The demo behavior is broken into the concept of a series of simple control stages organized by Group. Those stages are:
| Group | Control Stages |
| :--- | :--- |
| Inventory Arm | ... > Home > Finding > Pickup > Shipping > Home > ...
|
| Master | ..conveyor direction..
|
| Sorting Arm | ... > Home > Finding > Pickup > Sorting > Home > ...
|
As shown in the video above, even with these simple stages the interaction between the three Groups displays complex, cohesive, and coordinated behaviors.
This is possible because the whole system is modeled as a collection of micro-services. Those micro-services then leverage high-speed local messaging to enable communication within and between groups, as well as transactional state control using local device shadows.
The high-level, local architecture of the demo is:
There are six processes on this host:
- the Master Greengrass Core
- the heartbeat
Greengrass Device (GGD) process
- the bridge
GGD process
- the belt
GGD process -- manages the conveyor belt servo
- the button
GGD process -- manages the button box's red, green, and white control buttons
- the web
GGD process
Within the Master Core, these are the Lambda functions:
- MasterErrorDetector
-- this function monitors local telemetry and detects any error states
- MasterBrain
-- this function monitors the fabric of telemetry coming from the
bridges and the local GGDs. This function will decide what to do with respect
to current telemetry and errors in the system
There is a web visualization on this host. If one browses to: <master_ip>:5000
a
visualization that reads data from the Master Core can be seen.
There are three processes on this host:
- the Inventory Arm Greengrass Core
- the heartbeat
Greengrass Device (GGD) process
- the arm
GGD process
Within the Inventory Arm Core, this is the Lambda function:
- ArmErrorDetector
-- this function monitors local telemetry and detects any error states
There are three processes on this host:
- the Sorting Arm Greengrass Core
- the heartbeat
Greengrass Device (GGD) process
- the arm
GGD process
Within the Sort Arm Core, this is the Lambda function:
- ArmErrorDetector
-- this function monitors local telemetry and detects any error states
There are some noteworthy files in the repository that centralize a fair amount
of work around the instantiation of this demonstration.
- groups/group_setup.py
– performs all provisioning of each host's Greengrass Group.
This file has commands that are useful when instantiating this demo and that demonstrate the use of the Greengrass REST APIs.
- create <group_type> <config_file>
– creates a Greengrass Group for a given
group type and configuration file. Also stores all of the provisioning
artifacts (i.e. GroupID
, CoreDefinitionId
, etc.) in the local configuration file.
- deploy <config_file>
– deploys a previously provisioned Greengrass Group
- clean-all <config_file>
– cleans up the entirety of a Greengrass Group
and the locally stored provisioning artifacts.
- groups/servo_setup.py
– prepares the servo manufacturer's communication library
for use on a Raspberry Pi with the Raspbian OS.
If you'd like to build a copy of this demo yourself you'll want to read both the installation instructions and the construction instructions. Please share any feedback you have or questions you run into here as Issues.
Brett Francis and Todd Varland would like to thank the following. Without their help and existence we simply would not have made this demo.
The Francis Family, The Varland Family, gg-group-setup, ROBOTIS, Servode, Pretty Lights, Sigur Ros, Flume - Insanity, Amazon.com, HBO Silicon Valley, The Greengrass Developers
Bumps ipython from 5.4.1 to 8.10.0.
Sourced from ipython's releases.
See https://pypi.org/project/ipython/
We do not use GitHub release anymore. Please see PyPI https://pypi.org/project/ipython/
7.9.0
No release notes provided.
7.8.0
No release notes provided.
7.7.0
No release notes provided.
7.6.1
No release notes provided.
7.6.0
No release notes provided.
7.5.0
No release notes provided.
7.4.0
No release notes provided.
7.3.0
No release notes provided.
7.2.0
No release notes provided.
7.1.1
No release notes provided.
7.1.0
No release notes provided.
7.0.1
No release notes provided.
7.0.0
No release notes provided.
7.0.0-doc
No release notes provided.
7.0.0rc1
No release notes provided.
7.0.0b1
No release notes provided.
... (truncated)
15ea1ed
release 8.10.0560ad10
DOC: Update what's new for 8.10 (#13939)7557ade
DOC: Update what's new for 8.10385d693
Merge pull request from GHSA-29gw-9793-fvw7e548ee2
Swallow potential exceptions from showtraceback() (#13934)0694b08
MAINT: mock slowest test. (#13885)8655912
MAINT: mock slowest test.a011765
Isolate the attack tests with setUp and tearDown methodsc7a9470
Add some regression tests for this changefd34cf5
Swallow potential exceptions from showtraceback()Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase
.
Bumps cryptography from 3.3.2 to 39.0.1.
Sourced from cryptography's changelog.
39.0.1 - 2023-02-07
* **SECURITY ISSUE** - Fixed a bug where ``Cipher.update_into`` accepted Python buffer protocol objects, but allowed immutable buffers. **CVE-2023-23931** * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.0.8.
.. _v39-0-0:
39.0.0 - 2023-01-01
- BACKWARDS INCOMPATIBLE: Support for OpenSSL 1.1.0 has been removed. Users on older version of OpenSSL will need to upgrade.
- BACKWARDS INCOMPATIBLE: Dropped support for LibreSSL < 3.5. The new minimum LibreSSL version is 3.5.0. Going forward our policy is to support versions of LibreSSL that are available in versions of OpenBSD that are still receiving security support.
- BACKWARDS INCOMPATIBLE: Removed the
encode_point
andfrom_encoded_point
methods on :class:~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicNumbers
, which had been deprecated for several years. :meth:~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey.public_bytes
and :meth:~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey.from_encoded_point
should be used instead.- BACKWARDS INCOMPATIBLE: Support for using MD5 or SHA1 in :class:
~cryptography.x509.CertificateBuilder
, other X.509 builders, and PKCS7 has been removed.- BACKWARDS INCOMPATIBLE: Dropped support for macOS 10.10 and 10.11, macOS users must upgrade to 10.12 or newer.
- ANNOUNCEMENT: The next version of
cryptography
(40.0) will change the way we link OpenSSL. This will only impact users who buildcryptography
from source (i.e., not from awheel
), and specify their own version of OpenSSL. For those users, theCFLAGS
,LDFLAGS
,INCLUDE
,LIB
, andCRYPTOGRAPHY_SUPPRESS_LINK_FLAGS
environment variables will no longer be respected. Instead, users will need to configure their buildsas documented here
_.- Added support for :ref:
disabling the legacy provider in OpenSSL 3.0.x<legacy-provider>
.- Added support for disabling RSA key validation checks when loading RSA keys via :func:
~cryptography.hazmat.primitives.serialization.load_pem_private_key
, :func:~cryptography.hazmat.primitives.serialization.load_der_private_key
, and :meth:~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateNumbers.private_key
. This speeds up key loading but is :term:unsafe
if you are loading potentially attacker supplied keys.- Significantly improved performance for :class:
~cryptography.hazmat.primitives.ciphers.aead.ChaCha20Poly1305
... (truncated)
d6951dc
changelog + security fix backport (#8231)138da90
workaround scapy bug in downstream tests (#8218) (#8228)69527bc
bookworm is py311 now (#8200)111deef
backport main branch CI to 39.0.x (#8153)338a65a
39.0.0 version bump (#7954)84a3cd7
automatically download and upload circleci wheels (#7949)525c0b3
Type annotate release.py (#7951)46d2a94
Use the latest 3.10 release when wheel building (#7953)f150dc1
fix CI to work with ubuntu 22.04 (#7950)8867724
fix README for python3 (#7947)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase
.
Bumps certifi from 2017.7.27.1 to 2022.12.7.
9e9e840
2022.12.07b81bdb2
2022.09.24939a28f
2022.09.14aca828a
2022.06.15.2de0eae1
Only use importlib.resources's new files() / Traversable API on Python ≥3.11 ...b8eb5e9
2022.06.15.147fb7ab
Fix deprecation warning on Python 3.11 (#199)b0b48e0
fixes #198 -- update link in license9d514b4
2022.06.154151e88
Add py.typed to MANIFEST.in to package in sdist (#196)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase
.
Bumps numpy from 1.13.0 to 1.22.0.
Sourced from numpy's releases.
v1.22.0
NumPy 1.22.0 Release Notes
NumPy 1.22.0 is a big release featuring the work of 153 contributors spread over 609 pull requests. There have been many improvements, highlights are:
- Annotations of the main namespace are essentially complete. Upstream is a moving target, so there will likely be further improvements, but the major work is done. This is probably the most user visible enhancement in this release.
- A preliminary version of the proposed Array-API is provided. This is a step in creating a standard collection of functions that can be used across application such as CuPy and JAX.
- NumPy now has a DLPack backend. DLPack provides a common interchange format for array (tensor) data.
- New methods for
quantile
,percentile
, and related functions. The new methods provide a complete set of the methods commonly found in the literature.- A new configurable allocator for use by downstream projects.
These are in addition to the ongoing work to provide SIMD support for commonly used functions, improvements to F2PY, and better documentation.
The Python versions supported in this release are 3.8-3.10, Python 3.7 has been dropped. Note that 32 bit wheels are only provided for Python 3.8 and 3.9 on Windows, all other wheels are 64 bits on account of Ubuntu, Fedora, and other Linux distributions dropping 32 bit support. All 64 bit wheels are also linked with 64 bit integer OpenBLAS, which should fix the occasional problems encountered by folks using truly huge arrays.
Expired deprecations
Deprecated numeric style dtype strings have been removed
Using the strings
"Bytes0"
,"Datetime64"
,"Str0"
,"Uint32"
, and"Uint64"
as a dtype will now raise aTypeError
.(gh-19539)
Expired deprecations for
loads
,ndfromtxt
, andmafromtxt
in npyio
numpy.loads
was deprecated in v1.15, with the recommendation that users usepickle.loads
instead.ndfromtxt
andmafromtxt
were both deprecated in v1.17 - users should usenumpy.genfromtxt
instead with the appropriate value for theusemask
parameter.(gh-19615)
... (truncated)
4adc87d
Merge pull request #20685 from charris/prepare-for-1.22.0-releasefd66547
REL: Prepare for the NumPy 1.22.0 release.125304b
wipc283859
Merge pull request #20682 from charris/backport-204165399c03
Merge pull request #20681 from charris/backport-20954f9c45f8
Merge pull request #20680 from charris/backport-20663794b36f
Update armccompiler.pyd93b14e
Update test_public_api.py7662c07
Update init.py311ab52
Update armccompiler.pyDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase
.
Bumps urllib3 from 1.24.2 to 1.26.5.
Sourced from urllib3's releases.
1.26.5
:warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap
- Fixed deprecation warnings emitted in Python 3.10.
- Updated vendored
six
library to 1.16.0.- Improved performance of URL parser when splitting the authority component.
If you or your organization rely on urllib3 consider supporting us via GitHub Sponsors
1.26.4
:warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap
- Changed behavior of the default
SSLContext
when connecting to HTTPS proxy during HTTPS requests. The defaultSSLContext
now setscheck_hostname=True
.If you or your organization rely on urllib3 consider supporting us via GitHub Sponsors
1.26.3
:warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap
Fixed bytes and string comparison issue with headers (Pull #2141)
Changed
ProxySchemeUnknown
error message to be more actionable if the user supplies a proxy URL without a scheme (Pull #2107)If you or your organization rely on urllib3 consider supporting us via GitHub Sponsors
1.26.2
:warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap
- Fixed an issue where
wrap_socket
andCERT_REQUIRED
wouldn't be imported properly on Python 2.7.8 and earlier (Pull #2052)1.26.1
:warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap
- Fixed an issue where two
User-Agent
headers would be sent if aUser-Agent
header key is passed asbytes
(Pull #2047)1.26.0
:warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap
Added support for HTTPS proxies contacting HTTPS servers (Pull #1923, Pull #1806)
Deprecated negotiating TLSv1 and TLSv1.1 by default. Users that still wish to use TLS earlier than 1.2 without a deprecation warning should opt-in explicitly by setting
ssl_version=ssl.PROTOCOL_TLSv1_1
(Pull #2002) Starting in urllib3 v2.0: Connections that receive aDeprecationWarning
will failDeprecated
Retry
optionsRetry.DEFAULT_METHOD_WHITELIST
,Retry.DEFAULT_REDIRECT_HEADERS_BLACKLIST
andRetry(method_whitelist=...)
in favor ofRetry.DEFAULT_ALLOWED_METHODS
,Retry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT
, andRetry(allowed_methods=...)
(Pull #2000) Starting in urllib3 v2.0: Deprecated options will be removed
... (truncated)
Sourced from urllib3's changelog.
1.26.5 (2021-05-26)
- Fixed deprecation warnings emitted in Python 3.10.
- Updated vendored
six
library to 1.16.0.- Improved performance of URL parser when splitting the authority component.
1.26.4 (2021-03-15)
- Changed behavior of the default
SSLContext
when connecting to HTTPS proxy during HTTPS requests. The defaultSSLContext
now setscheck_hostname=True
.1.26.3 (2021-01-26)
Fixed bytes and string comparison issue with headers (Pull #2141)
Changed
ProxySchemeUnknown
error message to be more actionable if the user supplies a proxy URL without a scheme. (Pull #2107)1.26.2 (2020-11-12)
- Fixed an issue where
wrap_socket
andCERT_REQUIRED
wouldn't be imported properly on Python 2.7.8 and earlier (Pull #2052)1.26.1 (2020-11-11)
- Fixed an issue where two
User-Agent
headers would be sent if aUser-Agent
header key is passed asbytes
(Pull #2047)1.26.0 (2020-11-10)
NOTE: urllib3 v2.0 will drop support for Python 2.
Read more in the v2.0 Roadmap <https://urllib3.readthedocs.io/en/latest/v2-roadmap.html>
_.Added support for HTTPS proxies contacting HTTPS servers (Pull #1923, Pull #1806)
Deprecated negotiating TLSv1 and TLSv1.1 by default. Users that still wish to use TLS earlier than 1.2 without a deprecation warning
... (truncated)
d161647
Release 1.26.52d4a3fe
Improve performance of sub-authority splitting in URL2698537
Update vendored six to 1.16.007bed79
Fix deprecation warnings for Python 3.10 ssl moduled725a9b
Add Python 3.10 to GitHub Actions339ad34
Use pytest==6.2.4 on Python 3.10+f271c9c
Apply latest Black formatting1884878
[1.26] Properly proxy EOF on the SSLTransport test suitea891304
Release 1.26.48d65ea1
Merge pull request from GHSA-5phf-pp7p-vc2rDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase
.
Bumps flask-cors from 3.0.2 to 3.0.9.
Sourced from flask-cors's releases.
Release 3.0.9
Security
- Escape path before evaluating resource rules (thanks
@praetorian-colby-morgan
). Prior to this, flask-cors incorrectly evaluated CORS resource matching before path expansion. E.g. "/api/../foo.txt" would incorrectly match resources for "/api/*" whereas the path actually expands simply to "/foo.txt"Release 3.0.8
Fixes DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
Thank you
@juanmaneo
and@jdevera
!Release 3.0.7
Updated logging.warn to logging.warning (#234) Thanks Vaibhav
Release 3.0.6
Manual error in release process. Identical contents at 3.0.5.
Release 3.0.5
Fixes incorrect handling of regexes containg '[', and a few other special characters. https://github-redirect.dependabot.com/corydolphin/flask-cors/issues/212
Release 3.0.4
Handle response.headers being None. (Fixes issue #217) Thanks
@dusktreader
for the improvement!Release 3.0.3
Ensure that an Origin of '*' is never sent if supports_credentials is True (fixes Issue #202)
- If
always_send=True
, and'*'
is in the allowed origins, and a request is made without an Origin header, noAccess-Control-Allow-Origins
header will now be returned. This is breaking if you depended on it, but was a bug as it goes against the spec.
Sourced from flask-cors's changelog.
3.0.9
Security
- Escape path before evaluating resource rules (thanks to Colby Morgan). Prior to this, flask-cors incorrectly evaluated CORS resource matching before path expansion. E.g. "/api/../foo.txt" would incorrectly match resources for "/api/*" whereas the path actually expands simply to "/foo.txt"
3.0.8
Fixes : DeprecationWarning: Using or importing the ABCs from 'collections' in Python 3.7. Thank you
@juanmaneo
and@jdevera
for the contribution.3.0.7
Updated logging.warn to logging.warning (#234) Thanks Vaibhav
3.0.6
Manual error in release process. Identical contents at 3.0.5.
3.0.5
Fixes incorrect handling of regexes containg
[
, and a few other special characters. Fixes Issue #2123.0.4
Handle response.headers being None. (Fixes issue #217)
3.0.3
Ensure that an Origin of '*' is never sent if supports_credentials is True (fixes Issue #202)
- If
always_send=True
, and'*'
is in the allowed origins, and a request is made without an Origin header, noAccess-Control-Allow-Origins
header will now be returned. This is breaking if you depended on it, but was a bug as it goes against the spec.
91babb9
Update Api docs for credentialed requests (#221)522d989
Release version 3.0.9 (#273)67c4b2c
Fix request path normalization (#272)5c6e05e
docs: Fix simple typo, garaunteed -> guaranteed566aef2
Fixed over-indentation8a4e6e7
Update changelog to give proper kudos to @juanmaneo
and @jdevera
c93f4e4
Fix DeprecationWarning on python 3.7 for python 3.813fbb1e
Release 3.0.7 (#235)c2fc616
Release 3.0.79f56fd7
Updated logging.warn to logging.warning (#234)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase
.
aws aws-greengrass iot robotics example 3d-models