How to bulk create installs for large buildings
These instructions detail how to provision many Install requests at once. Usually this is done at large buildings where the mesh serves many apartments. Often we install the equipment all at once during a renovation or construction without an explicit request from the resident of the apartment. In this scenario we need to create install numbers in our systems without asking each resident to submit the join form.
Create/Locate the Supporting Objects
Since MeshDB uses a relational model to store data, multiple objects need to be created to represent the equivalent of a single row in the "New Node Form" spreadsheet. Before we can create Install objects, we must first create Member and Building objects, and assign a network number. For more information about the various tables included in MeshDB, see MeshDB Schema Design.
The easiest way to do this is to submit the join form once on behalf of the building (if not already done previously).
It may be tempting to try to leave the email blank in this situation, but please read the information in The install I'm creating doesn't have a good email, what do I do? first and consider using a plus code, like andrew+building-name@nycmesh.net
Once created, open this first install object in the MeshDB admin UI:
Use the eye icon next to the building and member entries to open the linked objects. On each object, note the object ID from the URL. For example, in the screenshots below, the meshdb member ID is 5b9c3cde-bbec-4b1a-8267-f1783c78b8c3
, and the meshdb building ID is 4e9da8b9-f068-499f-9672-49e03a2c9834
At this point, you should also create a Node for this location using the NN assignment tool or vanity NN process. Use the "first" install number we created above to assign the NN. Then use the network number to locate the node object, and copy the node ID from the URL similar to the building and member IDs:
Build the import CSV
In order to create the install requests in bulk, we need to place the necessary information in a tabular format. Several formats are supported, but for these instructions we will use CSV as it is the simplest to work with using standard spreadsheet applications such as Excel or Google Sheets. To start, open the following CSV template in your favorite spreadsheet application (you will need to paste this into a text editor and save it as a .csv
file):
Edit the following columns based on the information collected above:
node
- set all rows to the node ID we identified abovestatus
- likelyPending
for all rows, though if some equipment has already been installed,Active
orInactive
may be more appropriate. See MeshDB Status Values for more information about each value and when it is most appropriaterequest_date
- set all rows to the current date in the formatMM/DD/YYYY
install_date
- leave blank or set to the date of the equipment installation as appropriateabandon_date
- leave blankbuilding
- set all rows the MeshDB numerical ID of the building as identified aboveunit
- enter the unit number for each install request as provided/defined by the building ownerroof_access
- enter1
(true) or0
(false) to indicate if access to the roof is available at this sitemember
- set all rows the MeshDB numerical ID of the member object created for the "original install" as identified above- This is not the only option, it is possible to create different member objects for each install row if contact information is available, see the section titled "Bulk Add Members" below for more info
referral
- optional, a but good place to indicate this install was created for a large buildingnotes
- optional, but a good place to indicate the name of the building/node that these installs belong todiy
- enter0
(false) for all rows to indicate that these installs are conducted by volunteers, not DIYers
node,status,request_date,install_date,abandon_date,building,unit,roof_access,member,referral,notes,diy
,Pending,07/19/2024,,,,2A,1,,Large Buidling Install,Building Name,0
,Pending,07/19/2024,,,,2B,1,,Large Buidling Install,Building Name,0
,Pending,07/19/2024,,,,2C,1,,Large Buidling Install,Building Name,0
,Pending,07/19/2024,,,,3A,1,,Large Buidling Install,Building Name,0
,Pending,07/19/2024,,,,3B,1,,Large Buidling Install,Building Name,0
,Pending,07/19/2024,,,,3C,1,,Large Buidling Install,Building Name,0
,Pending,07/19/2024,,,,4A,1,,Large Buidling Install,Building Name,0
,Pending,07/19/2024,,,,4B,1,,Large Buidling Install,Building Name,0
,Pending,07/19/2024,,,,4C,1,,Large Buidling Install,Building Name,0
,Pending,07/19/2024,,,,5A,1,,Large Buidling Install,Building Name,0
,Pending,07/19/2024,,,,5B,1,,Large Buidling Install,Building Name,0
,Pending,07/19/2024,,,,5C,1,,Large Buidling Install,Building Name,0
,Pending,07/19/2024,,,,6A,1,,Large Buidling Install,Building Name,0
,Pending,07/19/2024,,,,6B,1,,Large Buidling Install,Building Name,0
The following columns can be optionally added to the csv, but should not be unless there is a good reason, and you know what you're doing:
id
- under normal circumstances this should not be specified manually, since these are automatically assigned by meshdb when the installs are importedinstall_number
- under normal circumstances this should not be specified manually, since these are automatically assigned by meshdb when the installs are importedticket_id
- meshdb will automatically create OSTicket entries for each install request as needed. Do not manually create these
Import your CSV into MeshDB
Select your CSV file, and select CSV as the format in the dropdown:
Review the information available on the confirmation screen for correctness, note the generated install numbers if desired and select "confirm import" to create the new installs in the database:
Check to make sure the correct number of installs was created, and observe the newly created install rows in the "all installs" view:
Bulk Add Members
The instructions above assume that contact information is not available for the members that will reside in the created install objects. However, if this information is available, and you'd like to create install objects with the correct contact information associated with each, first create a CSV for the member objects using the following template (you will need to paste this into a text editor and save it as a .csv
file):
name,primary_email_address,stripe_email_address,additional_email_addresses,phone_number,additional_phone_numbers,slack_handle,notes
Tami Gibson,tamigibson@gmail.com,,,+1 555 555 5555,,,
Jean Williams,jeanwilliams@gmail.com,,,+1 555 555 5555,,,
Shari Martinez,sharimartinez@gmail.com,,,+1 555 555 5555,,,
Melinda Martin,melindamartin@gmail.com,,,+1 555 555 5555,,,
Edit the following columns based on the information available for each member:
name
- the member's first and last nameprimary_email_address
- the member's email address(it may be tempting to leave this blank, but please read the infromation inThe install I'm creating doesn't have a good email, what do I do?first and consider using a plus code, likeandrew+building-name@nycmesh.netinstead)stripe_email_address
- likely this leave blank (used to indicate if the member has signed up in stripe with a different email)additional_email_addresses
- likely leave blank (used to indicate if the member has other emails than their stripe and primary addresses). If provided, must be a comma separated list of email addressesphone_number
- the member's phone number, in the format+1 555 555 5555
additional_phone_numbers
- likely leave blank (used to list additional phone numbers for the member). If provided, must be a comma separated list of phone numbers in the above formatslack_handle
- likely leave blank, but can be set to the member's slack handle if availablenotes
- optionally provide any notes about this member
The following columns can be optionally added to the csv, but should not be unless there is a good reason, and you know what you're doing:
id
- under normal circumstances this should not be specified manually, since these are automatically assigned by meshdb when the members are imported
It may be tempting to try to leave the email blank in this situation, but please read the information in The install I'm creating doesn't have a good email, what do I do? first and consider using a plus code, like andrew+building-name@nycmesh.net
Import this CSV on the members screen, following the same instructions provided above for installs. Just take note of the member IDs provided on the import confirmation screen, and use these IDs in the member
column in the installs CSV