Copy and assign camera quality and wireless profiles, as well as mass-enable RTSP from a source template network, giving you faster and more consistent deployments.
Cisco Meraki MV cameras bring many benefits to organizations looking to deploy a video surveillance and analytics solution with ease, scalability and future-proofing. As customer deployments grow, it can be helpful to leverage programmability capabilities in the platform to further automate rollout and config management at scale, reducing the possibility of human error.
This tool simplifies the process of assigning quality, wireless and RSTP settings to camera deployments in one or multiple organizations, by leveraging user-defined tags:
- Network Tags identify networks the tool will operate on and copy Quality and Wireless Profiles configurations to, from a source network that already has them defined
- Camera Tags identify cameras within these networks that will have their quality profiles and wireless profiles assigned following these user defined tags, as well as enabling RTSP settings on the camera
The script has the added flexibility of allowing you to reference a network template as a source that resides in a different organization than the one where your target cameras currently exist on, permitting syncing configurations across organizations.
All of this is done without ever binding cameras to configuration templates, which allows you to keep completely separate firmware upgrade procedures across networks.
- Active Cisco Meraki subscriptions in the orgs where the script will be run
- API access enabled for these organizations, as well as an API Key with access to them. See how to enable here
- A working Python 3.0 environment
- Install libraries in
requirements.txt
- Create a network that will function as a template (Not an actual template!) for housing your configurations (this can optionally be a production network as well).
- Set up quality and wireless profiles for each of the types of cameras you will deploy in your environment in the source template. You can see how to configure quality and wireless profiles in the provided links. Make sure each Quality profile you create has a naming scheme that follows
qp-X-description
whereX
is a unique number, anddescription
is a string that helps you identify the purpose of the profile, but that does not contain any additional-
dashes to the ones encasing X. Make sure each Wireless profile you create has a naming scheme that followswp-X-description
whereX
is a unique number, anddescription
is a string that helps you identify the purpose of the profile, but that does not contain any additional-
dashes to the ones encasing X.
- Make sure that your destination networks match the same firmware major version as the source network (for example, if your source network is on MV5+, your target networks should also be MV5+).
- Deploy additional standalone networks with cameras in them
- Clone repo to your working directory with
git clone https://github.com/Francisco-1088/merakiCamProfiler.git
- Edit
config.py
- Add your API Key under
api_key
in line 2 - Add the Organization ID of the organization where the source network exists. You can find your Org ID easily by right clicking anywhere in the screen while logged in to your organization, and clicking "View Page Source". In the resulting page use "Find" to look for the keyword
Mkiconf.org_id
- Add the Organization ID of the organization where your target standalone camera networks exist. These networks may be combined networks, and may reside in the same organization as the source template, but don't have to. You can find this organization ID in the same way outlined in the previous step.
- Add the Source Network ID for the network storing all of the camera profiles created in Prerequisites #5. You can find this ID easily by navigating to your Source Network in the Meraki Dashboard, right-clicking anywhere and choosing "View Page Source". In the resulting page use "Find" to look for the keyword
Mkiconf.locale_id
. Copy the number between the quotation marks, and prepend the stringL_
right before it, and add it to the configuration file undersrc_net_id
. For example, if your template's ID is34567897
, the value you should input in the configuration file isL_34567897
.
- OPTIONAL: Modify the tag under
dst_network_tag
to a tag of your preference. You may usecamProfiler
if you want. This tag is used to identify networks that your script will deploy configurations to. - OPTIONAL: Modify the tag under
dst_camera_tag
to a tag of your preference. You may usecamProfiler
if you want. This tag is used to identify cameras that your script will deploy camera configurations to. - OPTIONAL: Modify the tag under
rtsp_enable_tag
to a tag of your preference. You may usertsp
if you want. This tag identifies cameras that will have RTSP enabled on them by the script. - OPTIONAL: Modify verbosity and logging settings. By default, the script will show you every step it's going through, and will prompt you before making any configuration changes. It is recommended to use it this way while you're testing the script, and for debugging purposes.
verbose
displays additional information about the data gathered from the source networks.supervised
prompts you before every configuration change, allowing you to skip it.console_logging
enables API log messages to appear in the console. You may set any of these toFalse
if you do not want this level of logging.
- Run
pip install -r requirements.txt
from your terminal - Tag networks you want to work on with the same tag you defined in
config.py
underdst_network_tag
- Tag cameras you want to copy quality and wireless profiles to with the same tag you defined in
config.py
underdst_camera_tag
- OPTIONAL: You may use the provided
camTagger.py
andcameras.csv
files to automatically tag your cameras. You have to modify the sample CSV with your own camera serials and the tags you wish to assign to them separated by commas as a string. You then execute this script withpython camTagger.py
- Tag some of these same cameras with one additonal tag that has the same
qp-X
prefix that your desired quality profile for this camera has. For example, if your source network has a quality profile namedqp-1-highdef
, any cameras you want with this quality profile should carry theqp-1
tag. - Tag some these same cameras with one additonal tag that has the
wp-X-Y-Z
format, where X, Y and Z are integers that identify a wireless profile number and their priority order, and where -Z is optional, but -X-Y are mandatory. For example, if you have 3 wireless profileswp-1-psk
,wp-2-eap
,wp-3-psk2
, and a camera that needs to usewp-2-eap
as primary,wp-1-psk
as secondary andwp-3-psk
, then this tag should havewp-2-1-3
.
The tagged cameras in the picture will receive the configurations of the quality profiles prefixed with qp-1
and qp-3
. For camera 4c:c8:a1:12:00:b9
, the assigned wireless profiles will be wp-1
and wp-2
, in that order. For camera 4c:c8:a1:11:00:eb
, the assigned wireless profiles will be wp-1
and wp-2
in that order.
NOTE: Quality Profiles and Wireless Profiles have the following restrictions:
- Assigning a camera without a CA license a profile that has CA enabled will fail
- A camera MUST ONLY have a single tag with the format
qp-X
- A camera MUST ONLY have a single tag with the format
wp-X-Y
orwp-X-Y-Z
. The tag MUST reference at least two wireless profiles, and optionally a third, but never more than 3, sowp-1-2
andwp-2-3-1
are acceptable tags, but notwp-1-3-4-2
- Quality profile and Wireless profile tags are optional, and only cameras with the
camProfiler
tag will be considered, so even if a camera has aqp-X
orwp-X-Y-Z
tag, but doesn't have thecamProfiler
tag, that camera will not be operated on
-
Tag some these same cameras with your chosen
rtsp_enabled_tag
(rtsp
by default). These cameras will have RTSP turned on for them by the script. -
Run the script with
python main.py
Note: If using the supervised=True
configuration in the config.py
file, every time the script will apply configuration changes it will prompt you to accept whether you want to continue or not. The prompt ONLY accepts Y
for continuing, or N
for skipping, and it is cap-sensitive. Any other input will break execution. A N
will return execution to the script before calling the function with the exception of Quality Profiles and Wireless Profiles. If you choose to skip either of these, the script will also break execution, as not creating these will cause problems when attempting to update Camera configurations.
- This script is intended to help managing large amounts of camera wireless profiles, quality profiles and RTSP settings
- The script does not copy any other camera settings today
- For better results, your source network should be on the same major firmware version as your target networks, otherwise some settings may not be successfully copied due to compatibility issues
- Be advised that changing Wireless Profile configuration may have connectivity implications for your targeted cameras, especially if they are Wireless-only cameras
- Be advised that changing Quality Profiles configuration may have temporary impact on video recording, especially when assigning no-record profiles
- Start small, and test the script with a small number of networks and cameras, and progressively increase the number of sites until you get a feel for the time it takes for the script to gather data and push configs. Remember the Meraki API has a 10 requests per second per organization limit. Every network you want to push changes to will generate at least 10 GET API calls to gather data about the network, so if you're working on 500 networks this means 5000 API calls, which take at least 8 minutes and 20 seconds to complete, and likely a bit longer, plus the amount of time it will take to push configuration changes which will be longer. As such, it's a good idea to segment your work in groups of networks and not try to get everything done at the same time.