diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 3c20192..8c3bc19 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -45,6 +45,10 @@ jobs:
run: |
./generate_static.py
+ - name: Generate example docs
+ run: |
+ ./generate.py
+
- name: Upload artifact
uses: actions/upload-pages-artifact@v1
with:
diff --git a/.gitignore b/.gitignore
index 01c74fb..0f99dc4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,8 @@
_site/
+_gb_temp_/
build/
+
.vscode/*
.venv/
__pycache__/
diff --git a/documentation/PeliCalse1430.md b/documentation/PeliCalse1430.md
new file mode 100644
index 0000000..d5e0900
--- /dev/null
+++ b/documentation/PeliCalse1430.md
@@ -0,0 +1,20 @@
+---
+PartData:
+ Specs:
+ Internal Dimensions: 360 x 162 x 295 mm
+ Internal Lid Depth: 50 mm
+ Internal Base Depth: 245 mm
+ External Dimensions: 430 x 244 x 341 mm
+ Weight Empty: 2.54 kg
+ Weight With Foam: 2.95 kg
+ IP rating: IP67
+ Airline carry on size?: True
+ Suppliers:
+ Peli Products:
+ PartNo: 1430-001-110
+ Link: https://peliproducts.co.uk/products/1430-protector-case
+---
+
+# Peli Case 1430
+
+To print the nimble you will need a fused filament fabrication (FFF) 3D printer, sometimes called a FDM printer. Most FDM printers should do.
\ No newline at end of file
diff --git a/documentation/README.md b/documentation/README.md
index 4921067..6ea8c4d 100644
--- a/documentation/README.md
+++ b/documentation/README.md
@@ -1,30 +1,5 @@
-
+This directory contains fixed documentation for all nimble racks and the templates that will be used by our orchestration script to generate complete documentation for any custom rack.
-# This project is documented with GitBuilding
-
-## What is GitBuilding
-
-GitBuilding is an OpenSource project for documenting hardware projects with minimal
-effort, so you can stop writing and GitBuilding. GitBuilding is a python program that
-works on Windows, Linux, and MacOS. More information on the GitBuilding project, or how
-to install GitBuilding please see the [GitBuilding website](http://gitbuilding.io)
-
-## How do I edit the documentation?
-
-To edit the documentation you do not need to install anything, but you will need to
-install something to build the final version of the documentation (such as a website).
-The documentation files can be opened in a plain text editor such as Windows Notepad,
-Notepad++, gedit, VS Code, etc. GitBuilding also comes with a browser-based editor that
-displays has a live display of the final HTML documentation.
-
-If you have ever used [markdown](https://www.markdownguide.org/basic-syntax/) you will
-notice that the files you are editing are markdown files. GitBuilding uses an extended
-markdown syntax (that we call BuildUp). This allows you to keep track of parts in the
-documentation. More detail on the documentation is available on the
-[GitBuilding website](https://gitbuilding.io/syntax/). There is also additional
-[syntax for configuration](https://gitbuilding.io/syntax/buildconfsyntax), and for
-[part libraries](https://gitbuilding.io/syntax/builduplibrary/).
+As these scripts are not yet complete please see our [example documentation repository](https://github.com/Wakoma/nimble-example-documentation).
diff --git a/documentation/_templates/header.html.jinja b/documentation/_templates/header.html.jinja
new file mode 100644
index 0000000..7e0af23
--- /dev/null
+++ b/documentation/_templates/header.html.jinja
@@ -0,0 +1,15 @@
+
diff --git a/documentation/assets/favicon-16x16.png b/documentation/assets/favicon-16x16.png
new file mode 100644
index 0000000..6544b2f
Binary files /dev/null and b/documentation/assets/favicon-16x16.png differ
diff --git a/documentation/assets/favicon-32x32.png b/documentation/assets/favicon-32x32.png
new file mode 100644
index 0000000..ebedb2e
Binary files /dev/null and b/documentation/assets/favicon-32x32.png differ
diff --git a/documentation/assets/favicon.ico b/documentation/assets/favicon.ico
new file mode 100644
index 0000000..472665f
Binary files /dev/null and b/documentation/assets/favicon.ico differ
diff --git a/documentation/assets/style.css b/documentation/assets/style.css
new file mode 100644
index 0000000..93978b4
--- /dev/null
+++ b/documentation/assets/style.css
@@ -0,0 +1,19 @@
+
+
+.wakoma-logo{
+ width:60%;
+}
+
+.wakoma-logo-link{
+ line-height: 0.5;
+}
+
+.site-title {
+ color: #424242;
+ font-size: 32px;
+ font-weight: 400;
+ line-height: 54px;
+ letter-spacing: -1px;
+ margin-bottom: 0;
+ display: flex;
+}
diff --git a/documentation/assets/wakoma-logo.png b/documentation/assets/wakoma-logo.png
new file mode 100644
index 0000000..c7182e5
Binary files /dev/null and b/documentation/assets/wakoma-logo.png differ
diff --git a/documentation/buildconf.yaml b/documentation/buildconf.yaml
index dfbe156..8298523 100644
--- a/documentation/buildconf.yaml
+++ b/documentation/buildconf.yaml
@@ -1,31 +1,32 @@
-
-Title: 'Nimble Rack'
-
-Authors:
- - The Nimble team
-
-Affiliation: Wakoma
-
+AutoCompleteSubNav: true
+CustomCategories:
+ consumable:
+ DisplayName: Comsumables
+ Reuse: false
+ mech:
+ DisplayName: Mechanical Components
+ Reuse: false
+ net:
+ DisplayName: Networking Compontents
+ Reuse: false
+ prev:
+ DisplayName: Previously Assembled
+ Reuse: false
+ printed:
+ DisplayName: 3D printed parts
+ Reuse: false
+DefaultCategory: mech
+HoverColor: '#555555'
License: CERN-OHL-S-2.0
-
-Email: info@wakoma.co
-
-
-#Uncomment below to add custom categories
-#CustomCategories:
-# printedtool:
-# Reuse: False
-# DisplayName: Printed tools
-
-#Uncomment below to set a custom default category
-#DefaultCategory: printedtool
-
-#Uncomment below to set the title for the bill of material on a page
-#PageBOMTitle: '##For this step you will need'
-
-
-#Uncomment below to set a custom Website root for static HTML builds
-# WebsiteRoot: index.html
-
-#Uncomment below to disable fussy warnings
-#Fussy: False
+Navigation:
+ - Link: config.md
+ Title: Your Nimble Configuration
+ - Link: troubleshooting.md
+ Title: Troubleshooting
+ - Link: knowledgebase.md
+ Title: Knowledge Base
+PageBOMTitle: '## For this page you will need'
+PrimaryColor: '#2d3b46'
+SecondaryColor: '#cccccc'
+ExternalDirs:
+ project: ".."
diff --git a/documentation/case.md b/documentation/case.md
new file mode 100644
index 0000000..0c74cb8
--- /dev/null
+++ b/documentation/case.md
@@ -0,0 +1,38 @@
+---
+Make:
+ AP Mount Top:
+ template: printing.md
+ stl-file: ../Legacy/STLs/ap_mount_for_1430_top.stl
+ stlname: ap_mount_for_1430_top.stl
+ material: PLA
+ weight-qty: 40g
+ supports: "Yes"
+ AP Mount Bottom:
+ template: printing.md
+ stl-file: ../Legacy/STLs/ap_mount_for_1430_bottom.stl
+ stlname: ap_mount_for_1430_bottom.stl
+ material: PLA
+ weight-qty: 40g
+ supports: "Yes"
+---
+
+# Prepare the case
+
+{{BOM}}
+
+[M4x10mm countersunk screws]: parts/Hardware.yaml#CskScrew_M4x10mm_SS
+[M4x10mm cap screws]: parts/Hardware.yaml#CapScrew_M4x10mm_SS
+
+## Construct the lid insert {pagestep}
+
+* Join [AP Mount Top]{make, qty:1,cat:printed} and [AP Mount Bottom]{make, qty:1,cat:printed} together using two [M4x10mm countersunk screws]{qty: 2,cat: mech} and a [3mm Allen key](parts/metric_allen_keys.md){qty: 1,cat: tool}
+* Using three more [M4x10mm countersunk screws]{qty: 3,cat: mech} attach the brackets that came with your three UniFi Access Points to the holes just below the join between the two prints.
+
+## Attach to case{pagestep}
+
+* Get your [Peli Case][Peli Case 1430](PeliCalse1430.md){qty:1} and open the lid.
+* Locate the mounting lugs on the Peli Case lid and align the lid insert with these lugs
+* Use [M4x10mm cap screws]{qty: 2,cat: mech} to attach the inset into the Peli Case.
+
+>!! **TODO**
+>!! Add images of this step
diff --git a/documentation/components.md b/documentation/components.md
deleted file mode 100644
index d5dff15..0000000
--- a/documentation/components.md
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-# Installing the components in trays
-
-{{BOM}}
-
-
-For all of your components:
-
-* find the corresponding 3d printed tray
-* install the tray on the rack
-* mount the device on the tray
-
-Here are the devices and the trays
-
-* [Netgate SG-1100](DeviceParts.yaml#NetgateSG1100){Qty: 1}
-* tray_NetgateSG1100.stl ([preview](models/tray_NetgateSG1100.stl){previewpage}, [download](models/tray_NetgateSG1100.stl))
-* [UniFi USW-Flex](DeviceParts.yaml#UniFiUSWFlex){Qty: 1}
-* tray_UniFiUSWFlex.stl ([preview](models/tray_UniFiUSWFlex.stl){previewpage}, [download](models/tray_UniFiUSWFlex.stl))
-* [Intel NUC10i5FNH](DeviceParts.yaml#NUC10i5FNH){Qty: 1}
-* tray_NUC10i5FNH.stl ([preview](models/tray_NUC10i5FNH.stl){previewpage}, [download](models/tray_NUC10i5FNH.stl))
-* [Raspberry Pi 4](DeviceParts.yaml#RPi4){Qty: 1}
-* tray_RPi4.stl ([preview](models/tray_RPi4.stl){previewpage}, [download](models/tray_RPi4.stl))
-
diff --git a/documentation/config.md b/documentation/config.md
new file mode 100644
index 0000000..d60b748
--- /dev/null
+++ b/documentation/config.md
@@ -0,0 +1,11 @@
+# Your Nimble Configuration
+
+The nimble is a modular rack-and-shelf system. The first part of construction is to 3D print the custom parts, and then to assemble the shelves.
+
+The shelves in your system are:
+
+{{listpages, tag:shelf}}
+
+Once you have assembled each shelf, you will [construct the rack](construction.md){step} and [prepare the case](case.md){step} before finally [wiring up the system](wiring.md){step} and [setting it up](setup.md){step}.
+
+Make sure you have [all the parts you need]{bom}, before you start assembly.
\ No newline at end of file
diff --git a/documentation/construction.md b/documentation/construction.md
new file mode 100644
index 0000000..28737bb
--- /dev/null
+++ b/documentation/construction.md
@@ -0,0 +1,66 @@
+---
+Make:
+ base plate:
+ template: printing.md
+ stl-file: ../build/printed_components/baseplate.stl
+ stlname: baseplate.stl
+ material: PLA
+ weight-qty: 50g
+ top plate:
+ template: printing.md
+ stl-file: ../build/printed_components/topplate.stl
+ stlname: topplate.stl
+ material: PLA
+ weight-qty: 50g
+ rack legs:
+ template: printing.md
+ stl-file: ../build/printed_components/beam.stl
+ stlname: beam.stl
+ material: PLA
+ weight-qty: 60g
+ stuff shelf:
+ template: printing.md
+ stl-file: models/Stuff_Shelf_1.0.stl
+ stlname: Stuff_Shelf_1.0.stl
+ material: PLA
+ weight-qty: 50g
+---
+
+# Construct and populate the rack
+
+{{BOM}}
+
+[M4x10mm countersunk screws]: parts/Hardware.yaml#CskScrew_M4x10mm_SS
+[M4x10mm cap screws]: parts/Hardware.yaml#CapScrew_M4x10mm_SS
+
+## Attach the legs to the base plate {pagestep}
+
+* Get the [base plate]{make, qty:1, cat:printed} and the four [rack legs]{make, qty:4, cat:printed} that you printed earlier.
+* Get a [3mm Allen key](parts/metric_allen_keys.md){qty:1, cat:tool} ready
+* Use four [M4x10mm countersunk screws]{qty:4} to attach a leg to each corner of the bottom.
+
+>!! **TODO**
+>!! Add images of this step
+
+## Add the broad shelves {pagestep}
+
+>!! **TODO**
+>!! Each shelf that is broad should be added in this stage
+
+
+## Mount the top plate {pagestep}
+
+* Take the [top plate]{make, qty:1, cat:printed} and place it on top of the rack.
+* Use four [M4x10mm countersunk screws]{qty:4} to attach the shelf to the four legs of the rack
+
+>!! **TODO**
+>!! Add images of this step
+
+
+## Insert the remaining shelves {pagestep}
+
+>!! **TODO**
+>!! Explain what order the assembled shelves are used.
+
+
+
diff --git a/documentation/fasteners.yaml b/documentation/fasteners.yaml
deleted file mode 100644
index d4f968c..0000000
--- a/documentation/fasteners.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-M4x10PanSteel:
- Name: M4x10 Pan Head Steel
- Specs:
- Head: Pan
- Length: 10 mm
- Material: Stainless Steel
- Pitch: 0.7
- Suppliers:
- RS:
- PartNo: 528-817
- Link: https://uk.rs-online.com/web/p/machine-screws/0528817/
- McMasterCarr:
- PartNo: 90116A207
- Link: https://www.mcmaster.com/90116A207
-
-M5x8_DIN7991:
- Name: M5x8 DIN 7991 Counter Sunk Screw
- Specs:
- Head: Counter Sunk / Flat Head
- Size: M5
- Length: 8 mm
- Pitch: Standard / 0.8
- Material: Stainless Steel
diff --git a/documentation/finalize.md b/documentation/finalize.md
deleted file mode 100644
index e69de29..0000000
diff --git a/documentation/frame.md b/documentation/frame.md
deleted file mode 100644
index 59286be..0000000
--- a/documentation/frame.md
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-[M5x8 screws]:fasteners.yaml#M5x8_DIN7991
-[Allen Key 3mm]:tools.yaml#Allen_3mm
-
-# Assembling the frame
-
-{{BOM}}
-
-## Start with the base plate {pagestep}
-
-* Start with the [3d printed base plate](3DPParts.yaml#baseplate){Qty: 1}
-
-
-
-## Add beams {pagestep}
-
-* Add a [3d printed beam](3DPParts.yaml#beam){Qty: 4} at each corner
-* Use [M5x8 screws]{Qty: 4} and screw them together
-
-
-
-## Add top plate {pagestep}
-
-* Add [3d printed top plate](3DPParts.yaml#topplate){Qty: 1}
-* Use [M5x8 screws]{Qty: 4} and screw it on the beams
-
-
-
diff --git a/documentation/index.md b/documentation/index.md
index 9f6d604..b42f0da 100644
--- a/documentation/index.md
+++ b/documentation/index.md
@@ -1,28 +1,31 @@
-
-# Nimble Rack Assembly
+## What is Nimble
-The Nimble rack is built from 3d printed parts. There are some standard components, as well as custom trays for all the networking devices that you are using.
+Nimble is an open source, rapidly deployable, wireless mesh network.
-This is a [list of needed parts]{BOM}
-As a first step you need to 3d print the needed parts
+
-[.](3dprintingparts.md){step}
+Anyone connected to the nimble can video and voice chat, stream videos, share files, build and run eLearning courses and websites, create collaborative spreadsheets and documents, read e-books, play games, and so much more⦠completely offline.
-Assembly starts with the frame:
+If a single internet connection is available, it can be plugged into the nimble to provide free or paid internet access to anyone on the network. The offline services and content are always available to users, regardless of internet availability.
-[.](frame.md){step}
+Anyone in the world can build their own nimble with locally sourced hardware and 3D-printed components.
-You then add the trays and the individual components to the frame:
+You can find out more about Nimble on [our website](https://wakoma.co/nimble/).
-[.](components.md){step}
+## Customisation
-The assembly is finished by doing the cabling and adding the battery
+Nimble, as an open source project, is designed so that you can tailor it to your own needs and to the hardware that you have available.
-[.](finalize.md){step}
+
+We are [working on building an interface for customising your nimble](https://github.com/Wakoma/nimble/pull/23). In the mean time this is an example of the assembly instructions for a specific configuration.
+
+To customise your Nimble you can go to [our GitHub](https://github.com/Wakoma/nimble). If you aren't sure where to start, you can always ask for help by [opening an issue](https://github.com/Wakoma/nimble/issues) or [starting a discussion](https://github.com/Wakoma/nimble/discussions).
+
+## Building your Nimble
+
+In the next pages we will build [your nimble](config.md){step}.
diff --git a/documentation/knowledgebase.md b/documentation/knowledgebase.md
new file mode 100644
index 0000000..24d3119
--- /dev/null
+++ b/documentation/knowledgebase.md
@@ -0,0 +1,5 @@
+# Nimble Knowledge Base
+
+The following pages may help you understand your Nimble.
+
+{{listpages, tag:info}}
\ No newline at end of file
diff --git a/documentation/poe-explanation.md b/documentation/poe-explanation.md
new file mode 100644
index 0000000..6145e91
--- /dev/null
+++ b/documentation/poe-explanation.md
@@ -0,0 +1,11 @@
+---
+Tags: info
+---
+
+# Power over Ethernet (PoE)
+
+Many of the devices in your Nimble are powered directly through the Ethernet cable.
+
+Power over Ethernet allows both data and power to be transmitted between devices using only a single cable. This really cuts down on excess cables.
+
+There is far more information on Power over Ethernet at [wikipedia](https://en.wikipedia.org/wiki/Power_over_Ethernet)
\ No newline at end of file
diff --git a/documentation/printing.md b/documentation/printing.md
new file mode 100644
index 0000000..4560f63
--- /dev/null
+++ b/documentation/printing.md
@@ -0,0 +1,25 @@
+# 3D Printing
+
+{{BOM}}
+
+[PLA]:parts/filament.md "{cat:consumable}"
+
+## Print the custom components {pagestep}
+
+
+Using the slicer that comes with your [3d printer](parts/3dprinter.md){qty:1, cat: tool}, slice the following parts, and then print them.
+
+Some parts require support. A brim is advised for all parts.
+
+
+| Qty | Item | Material | File | Supports
Required?|
+|-----|------|----------|------|----------------------|
+{{foreachmakeitem: "| {{qty}} | {{id}} | {{weight-qty}} of [{{material}}]{qty:{{weight-qty}}} | [{{stlname}}]({{stl-file}}){previewpage}|{{supports, default: No}}|"}}
+
+
+You can [download all of the STLs as a single zipfile](all-stls.zip){zip, pattern:"*.stl"}
+
+
+## Remove the brim {pagestep}
+
+Remove the brim with a [utility knife](parts/utility_knife.md){qty:1, cat:tool}
diff --git a/documentation/setup.md b/documentation/setup.md
new file mode 100644
index 0000000..586296c
--- /dev/null
+++ b/documentation/setup.md
@@ -0,0 +1,30 @@
+# Set up your Nimble
+
+>!! **TODO**
+>!!
+>!! * How do we power it on?!
+>!! * Are there other set up steps!?
+
+{{BOM}}
+
+
+## Mount the rack and access points {pagestep}
+
+* Take your wired Nimble rack and insert it into your Peli Case.
+
+
+>!! **TODO**
+>!! Add images of this step
+
+* Take the three [UniFi Access Points](parts/UniFiAccessPoints.md){qty:3, cat:net} and clip them onto the mounting brackets in the Peli Case lid.
+
+
+>!! **TODO**
+>!! Add images of this step
+
+## Power on the system
+
+
+>!! **TODO**
+>!! Add images of this step
+
diff --git a/documentation/tools.yaml b/documentation/tools.yaml
deleted file mode 100644
index 68562c8..0000000
--- a/documentation/tools.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-Screwdriver_Philips_No2:
- Name: No. 2 Phillips screwdriver
- Description: >
- No2 Phillips screwdriver. This is the correct size
- form an M4 pan head screw
- Specs:
- Drive Size: No. 2
-
-Allen_3mm:
- Name: Allen Key 3mm
- Description: >
- Allen Key 3mm
- Specs:
- Drive Size: 3mm
diff --git a/documentation/troubleshooting.md b/documentation/troubleshooting.md
new file mode 100644
index 0000000..a99dcd1
--- /dev/null
+++ b/documentation/troubleshooting.md
@@ -0,0 +1,3 @@
+# Troubleshooting and Support
+
+**Write me!!**
\ No newline at end of file
diff --git a/documentation/wiring.md b/documentation/wiring.md
new file mode 100644
index 0000000..3682822
--- /dev/null
+++ b/documentation/wiring.md
@@ -0,0 +1,25 @@
+---
+Make:
+ Power Box:
+ template: printing.md
+ stl-file: ../Legacy/STLs/power_box.stl
+ stlname: power_box.stl
+ material: PLA
+ weight-qty: 60g
+---
+
+# Wiring the Nimble
+
+>!! **TODO**
+>!!
+>!! * Write the instructions
+>!! * Be clear what passes through where
+>!! * Add cables to the BOM.. what are they!?
+>!! * Annotate images to be clear what we are looking at
+
+{{BOM}}
+
+
+Once done must mention [Power Box]{make, qty:1,cat:printed}
+
+
diff --git a/generate.md b/generate.md
index 3d9339f..6e9f00b 100644
--- a/generate.md
+++ b/generate.md
@@ -46,7 +46,7 @@ To run this script, run the following command:
This should create the `build` directory. Inside this the `printed_components` directory should contain a number of `stl` files that can be 3D printed.
-The script also creates a simple web-page with an index of all of the files.
+The script also creates a simple web-page with an index of all of the files. The final link to the "Partially complete automatically generated documentation" will be broken unless you also run `generate.py` (see below).
It also creates a number of files that are used by the orchestration script.
diff --git a/generate.py b/generate.py
index 785aaf2..97fc2d6 100755
--- a/generate.py
+++ b/generate.py
@@ -26,6 +26,8 @@ def generate(selected_devices_ids):
runner.generate_assembly(config.assembly_definition)
+ runner.generate_docs(config)
+
def generate_example_configuration():
"""
diff --git a/generate_static.py b/generate_static.py
index f95f7ef..6bf13df 100755
--- a/generate_static.py
+++ b/generate_static.py
@@ -150,7 +150,6 @@ def output_static_site(components):
for hardware configuration. We call this "Smart Doc". For more details on Nimble see
https://github.com/Wakoma/nimble
-
Smart Doc" is not yet finished, but the code already generates a number of nimble components
@@ -164,6 +163,15 @@ def output_static_site(components):
for component in components:
f.write(f"
{component.name}")
f.write("")
+ f.write(
+ """
+ Example documentation:
+
+ Partially complete automatically generated documentation
+ is also available.
+
+ """)
+
f.write("