bluer-sbc 9.168.1__py3-none-any.whl → 9.319.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. bluer_sbc/.abcli/sbc/parts/edit.sh +5 -0
  2. bluer_sbc/.abcli/sbc/parts/open.sh +5 -0
  3. bluer_sbc/.abcli/sbc/parts.sh +1 -1
  4. bluer_sbc/.abcli/seed/rpi_64_bit.sh +1 -1
  5. bluer_sbc/.abcli/tests/help.sh +2 -0
  6. bluer_sbc/README/design.py +31 -19
  7. bluer_sbc/README/designs/__init__.py +12 -8
  8. bluer_sbc/README/designs/adapter_bus.py +2 -2
  9. bluer_sbc/README/designs/anchor/__init__.py +15 -0
  10. bluer_sbc/README/designs/anchor/body/__init__.py +0 -0
  11. bluer_sbc/README/designs/anchor/body/docs.py +20 -0
  12. bluer_sbc/README/designs/anchor/docs.py +16 -0
  13. bluer_sbc/README/designs/anchor/items.py +10 -0
  14. bluer_sbc/README/designs/anchor/parts.py +54 -0
  15. bluer_sbc/README/designs/battery_bus/__init__.py +15 -0
  16. bluer_sbc/README/designs/battery_bus/body/__init__.py +0 -0
  17. bluer_sbc/README/designs/battery_bus/body/docs.py +20 -0
  18. bluer_sbc/README/designs/battery_bus/body/li_ion.py +20 -0
  19. bluer_sbc/README/designs/battery_bus/body/sla.py +17 -0
  20. bluer_sbc/README/designs/battery_bus/docs.py +17 -0
  21. bluer_sbc/README/designs/battery_bus/items.py +17 -0
  22. bluer_sbc/README/designs/battery_bus/parts.py +19 -0
  23. bluer_sbc/README/designs/cheshmak/__init__.py +14 -0
  24. bluer_sbc/README/designs/cheshmak/body/__init__.py +0 -0
  25. bluer_sbc/README/designs/cheshmak/body/docs.py +23 -0
  26. bluer_sbc/README/designs/cheshmak/body/v1.py +18 -0
  27. bluer_sbc/README/designs/cheshmak/docs.py +19 -0
  28. bluer_sbc/README/designs/cheshmak/items.py +10 -0
  29. bluer_sbc/README/designs/cheshmak/operation.py +5 -0
  30. bluer_sbc/README/designs/cheshmak/parts.py +28 -0
  31. bluer_sbc/README/designs/cheshmak/validations.py +14 -0
  32. bluer_sbc/README/designs/nafha.py +11 -5
  33. bluer_sbc/README/designs/pwm_generator.py +71 -0
  34. bluer_sbc/README/designs/regulated_bus.py +79 -0
  35. bluer_sbc/README/designs/shelter.py +3 -0
  36. bluer_sbc/README/designs/swallow/__init__.py +20 -0
  37. bluer_sbc/README/designs/swallow/consts.py +7 -0
  38. bluer_sbc/README/designs/swallow/docs.py +24 -0
  39. bluer_sbc/README/designs/swallow/history.py +34 -0
  40. bluer_sbc/README/designs/swallow/parts.py +16 -0
  41. bluer_sbc/README/designs/swallow_head/__init__.py +22 -0
  42. bluer_sbc/README/designs/swallow_head/docs.py +24 -0
  43. bluer_sbc/README/designs/swallow_head/history.py +21 -0
  44. bluer_sbc/README/designs/{swallow_head.py → swallow_head/parts.py} +9 -43
  45. bluer_sbc/README/root.py +11 -7
  46. bluer_sbc/__init__.py +1 -1
  47. bluer_sbc/help/parts.py +33 -1
  48. bluer_sbc/parts/db.py +136 -16
  49. bluer_sbc-9.319.1.dist-info/METADATA +73 -0
  50. {bluer_sbc-9.168.1.dist-info → bluer_sbc-9.319.1.dist-info}/RECORD +53 -22
  51. bluer_sbc/README/designs/battery_bus.py +0 -52
  52. bluer_sbc/README/designs/bryce.py +0 -28
  53. bluer_sbc/README/designs/cheshmak.py +0 -29
  54. bluer_sbc/README/designs/swallow.py +0 -46
  55. bluer_sbc-9.168.1.dist-info/METADATA +0 -73
  56. {bluer_sbc-9.168.1.dist-info → bluer_sbc-9.319.1.dist-info}/WHEEL +0 -0
  57. {bluer_sbc-9.168.1.dist-info → bluer_sbc-9.319.1.dist-info}/licenses/LICENSE +0 -0
  58. {bluer_sbc-9.168.1.dist-info → bluer_sbc-9.319.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,5 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_sbc_parts_edit() {
4
+ bluer_ai_code $abcli_path_git/bluer-sbc/bluer_sbc/parts/db.py
5
+ }
@@ -0,0 +1,5 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_sbc_parts_open() {
4
+ open $abcli_path_git/assets2/bluer-sbc/parts
5
+ }
@@ -1,7 +1,7 @@
1
1
  #! /usr/bin/env bash
2
2
 
3
3
  function bluer_sbc_parts() {
4
- local task=$1
4
+ local task=${1:-open}
5
5
 
6
6
  local function_name=bluer_sbc_parts_$task
7
7
  if [[ $(type -t $function_name) == "function" ]]; then
@@ -16,7 +16,7 @@ function bluer_ai_seed_rpi_64_bit() {
16
16
  local ssp="--break-system-packages"
17
17
 
18
18
  seed="${seed}sudo apt update$delim"
19
- seed="${seed}sudo apt install -y python3-pip$delim"
19
+ seed="${seed}sudo apt install -y python3-pip mpv vlc-bin$delim"
20
20
  seed="${seed}pip3 install $ssp -e .$delim_section"
21
21
 
22
22
  bluer_ai_seed add_repo repo=bluer-objects
@@ -28,6 +28,8 @@ function test_bluer_sbc_help() {
28
28
  "@sbc parts" \
29
29
  "@sbc parts adjust" \
30
30
  "@sbc parts cd" \
31
+ "@sbc parts edit" \
32
+ "@sbc parts open" \
31
33
  \
32
34
  "@sbc pypi" \
33
35
  "@sbc pypi browse" \
@@ -1,4 +1,4 @@
1
- from typing import Dict, List
1
+ from typing import Dict, List, Any
2
2
 
3
3
  from bluer_objects import markdown
4
4
 
@@ -8,33 +8,45 @@ from bluer_sbc.parts.db import db_of_parts
8
8
  def design_doc(
9
9
  design_name: str,
10
10
  items: List[str] = [],
11
- dict_of_parts: dict = {},
12
- macros: dict = {},
11
+ dict_of_parts: Dict = {},
12
+ macros: Dict[str, Dict] = {},
13
13
  own_folder: bool = False,
14
14
  parts_reference: str = "./parts",
15
- ) -> Dict:
15
+ cols: int = 3,
16
+ ) -> Dict[str, Any]:
16
17
  macros_ = {}
17
18
  if dict_of_parts:
18
- macros_ = {
19
- "parts_images:::": markdown.generate_table(
20
- db_of_parts.as_images(
21
- dict_of_parts,
22
- reference=parts_reference,
23
- ),
24
- cols=10,
25
- log=False,
26
- ),
27
- "parts_list:::": db_of_parts.as_list(
28
- dict_of_parts,
29
- reference=parts_reference,
30
- log=False,
31
- ),
32
- }
19
+ macros_ = design_doc_parts(
20
+ dict_of_parts,
21
+ parts_reference,
22
+ )
33
23
 
34
24
  macros_.update(macros)
35
25
 
36
26
  return {
37
27
  "path": "../docs/{}{}".format(design_name, "" if own_folder else ".md"),
28
+ "cols": cols,
38
29
  "items": items,
39
30
  "macros": macros_,
40
31
  }
32
+
33
+
34
+ def design_doc_parts(
35
+ dict_of_parts: Dict,
36
+ parts_reference: str = "./parts",
37
+ ) -> Dict[str, Dict]:
38
+ return {
39
+ "parts_images:::": markdown.generate_table(
40
+ db_of_parts.as_images(
41
+ dict_of_parts,
42
+ reference=parts_reference,
43
+ ),
44
+ cols=10,
45
+ log=False,
46
+ ),
47
+ "parts_list:::": db_of_parts.as_list(
48
+ dict_of_parts,
49
+ reference=parts_reference,
50
+ log=False,
51
+ ),
52
+ }
@@ -1,23 +1,27 @@
1
1
  from bluer_sbc.README.designs import (
2
- cheshmak,
3
- battery_bus,
4
2
  adapter_bus,
5
- swallow,
6
- swallow_head,
7
- bryce,
8
3
  nafha,
4
+ pwm_generator,
5
+ regulated_bus,
9
6
  shelter,
10
7
  template,
11
8
  ultrasonic_sensor_tester,
12
9
  )
10
+ from bluer_sbc.README.designs.anchor import docs as anchor
11
+ from bluer_sbc.README.designs.battery_bus import docs as battery_bus
12
+ from bluer_sbc.README.designs.cheshmak import docs as cheshmak
13
+ from bluer_sbc.README.designs.swallow import docs as swallow
14
+ from bluer_sbc.README.designs.swallow_head import docs as swallow_head
13
15
 
14
16
 
15
17
  docs = (
16
- battery_bus.docs
17
- + adapter_bus.docs
18
- + bryce.docs
18
+ adapter_bus.docs
19
+ + anchor.docs
20
+ + battery_bus.docs
19
21
  + cheshmak.docs
20
22
  + nafha.docs
23
+ + pwm_generator.docs
24
+ + regulated_bus.docs
21
25
  + shelter.docs
22
26
  + swallow_head.docs
23
27
  + swallow.docs
@@ -44,9 +44,9 @@ items = ImageItems(
44
44
  )
45
45
 
46
46
  parts = {
47
- "charging-port": "",
47
+ "dc-power-plug": "",
48
48
  "dsn-vc288": "",
49
- "charger-socket": "",
49
+ "dc-power-jack": "",
50
50
  }
51
51
 
52
52
 
@@ -0,0 +1,15 @@
1
+ from bluer_objects import README
2
+
3
+ from bluer_sbc.README.designs.consts import assets2
4
+
5
+ image_template = assets2 + "anchor/{}?raw=true"
6
+
7
+ marquee = README.Items(
8
+ [
9
+ {
10
+ "name": "anchor",
11
+ "marquee": image_template.format("20251204_144037.jpg"),
12
+ "url": "./bluer_sbc/docs/anchor",
13
+ }
14
+ ]
15
+ )
File without changes
@@ -0,0 +1,20 @@
1
+ from bluer_objects.README.items import ImageItems
2
+
3
+ from bluer_sbc.README.designs.anchor import image_template
4
+
5
+ docs = [
6
+ {
7
+ "path": "../docs/anchor/body",
8
+ "items": ImageItems(
9
+ {
10
+ image_template.format("20251204_144010.jpg"): "",
11
+ image_template.format("20251204_144014.jpg"): "",
12
+ image_template.format("20251204_144017.jpg"): "",
13
+ image_template.format("20251204_144021.jpg"): "",
14
+ image_template.format("20251204_144024.jpg"): "",
15
+ image_template.format("20251204_144031.jpg"): "",
16
+ image_template.format("20251204_144037.jpg"): "",
17
+ }
18
+ ),
19
+ }
20
+ ]
@@ -0,0 +1,16 @@
1
+ from bluer_sbc.README.design import design_doc
2
+ from bluer_sbc.README.designs.anchor import parts
3
+ from bluer_sbc.README.designs.anchor.body import docs as body
4
+ from bluer_sbc.README.designs.anchor.items import items
5
+
6
+ docs = (
7
+ [
8
+ design_doc(
9
+ "anchor",
10
+ items,
11
+ own_folder=True,
12
+ )
13
+ ]
14
+ + body.docs
15
+ + parts.docs
16
+ )
@@ -0,0 +1,10 @@
1
+ from bluer_objects.README.items import ImageItems
2
+
3
+ from bluer_sbc.README.designs.anchor import image_template
4
+
5
+ items = ImageItems(
6
+ {
7
+ image_template.format("03.png"): "",
8
+ image_template.format("20251204_144037.jpg"): "",
9
+ }
10
+ )
@@ -0,0 +1,54 @@
1
+ from bluer_sbc.README.design import design_doc_parts
2
+
3
+ parts = {
4
+ "sd-card-32-gb": "",
5
+ "rpi": "",
6
+ "XL4015": "",
7
+ "470-mF": "",
8
+ "Polyfuse": "optional",
9
+ "TVS-diode": "",
10
+ "resistor": "7 x 330-470 Ω + 4 x 2.2 kΩ + 4 x 3.3 kΩ",
11
+ "LED": "green + red + yellow + 4 x blue",
12
+ "PCB-single-14x9_5": "",
13
+ "pushbutton": "",
14
+ "connector": "1 female",
15
+ "nuts-bolts-spacers": " + ".join(
16
+ [
17
+ "M2.5: ({})".format(
18
+ " + ".join(
19
+ [
20
+ "4 x bolt",
21
+ "4 x nut",
22
+ "8 x 10 mm spacer",
23
+ ]
24
+ )
25
+ ),
26
+ "M3: ({})".format(
27
+ " + ".join(
28
+ [
29
+ "1 x bolt",
30
+ "5 x nut",
31
+ "4 x 5 mm spacer",
32
+ "5 x 15 mm spacer",
33
+ "4 x 25 mm spacer",
34
+ ]
35
+ )
36
+ ),
37
+ ]
38
+ ),
39
+ "plexiglass": "14 cm x 9.5 cm",
40
+ "green-terminal": "2 x",
41
+ "16-awg-wire": "40 cm x (red + black/blue)",
42
+ "solid-cable-1-15": "10 cm x (red + black/blue)",
43
+ "pin-headers": "1 x (female, 2 x 40) -> 2 x 20 + 2 x (male, 1 x 40) -> 4 x 1 + 2 x 20 + 1 x (male, 2 x 40) -> 2 x 2 x 6",
44
+ }
45
+
46
+ docs = [
47
+ {
48
+ "path": "../docs/anchor/parts.md",
49
+ "macros": design_doc_parts(
50
+ dict_of_parts=parts,
51
+ parts_reference="../parts",
52
+ ),
53
+ }
54
+ ]
@@ -0,0 +1,15 @@
1
+ from bluer_objects import README
2
+
3
+ from bluer_sbc.README.designs.consts import assets2
4
+
5
+ image_template = assets2 + "battery-bus/{}?raw=true"
6
+
7
+ marquee = README.Items(
8
+ [
9
+ {
10
+ "name": "battery bus",
11
+ "marquee": image_template.format("20251007_221902.jpg"),
12
+ "url": "./bluer_sbc/docs/battery_bus",
13
+ }
14
+ ]
15
+ )
File without changes
@@ -0,0 +1,20 @@
1
+ from bluer_objects.README.items import ImageItems
2
+
3
+ from bluer_sbc.README.designs.battery_bus import image_template
4
+ from bluer_sbc.README.designs.battery_bus.body import li_ion, sla
5
+
6
+ docs = (
7
+ [
8
+ {
9
+ "path": "../docs/battery_bus/body",
10
+ "items": ImageItems(
11
+ {
12
+ image_template.format("20251007_221902.jpg"): "./sla.md",
13
+ image_template.format("li-ion/20251204_144045.jpg"): "./li-ion.md",
14
+ }
15
+ ),
16
+ },
17
+ ]
18
+ + li_ion.docs
19
+ + sla.docs
20
+ )
@@ -0,0 +1,20 @@
1
+ from bluer_objects.README.items import ImageItems
2
+
3
+ from bluer_sbc.README.designs.battery_bus import image_template
4
+
5
+ docs = [
6
+ {
7
+ "path": "../docs/battery_bus/body/li-ion.md",
8
+ "items": ImageItems(
9
+ {
10
+ image_template.format("li-ion/20251204_143912.jpg"): "",
11
+ image_template.format("li-ion/20251204_143924.jpg"): "",
12
+ image_template.format("li-ion/20251204_143931.jpg"): "",
13
+ image_template.format("li-ion/20251204_143944.jpg"): "",
14
+ image_template.format("li-ion/20251204_143949.jpg"): "",
15
+ image_template.format("li-ion/20251204_143958.jpg"): "",
16
+ image_template.format("li-ion/20251204_144045.jpg"): "",
17
+ }
18
+ ),
19
+ }
20
+ ]
@@ -0,0 +1,17 @@
1
+ from bluer_objects.README.items import ImageItems
2
+
3
+ from bluer_sbc.README.designs.battery_bus import image_template
4
+
5
+ docs = [
6
+ {
7
+ "path": "../docs/battery_bus/body/sla.md",
8
+ "items": ImageItems(
9
+ {
10
+ image_template.format("20251007_221902.jpg"): "",
11
+ image_template.format("20251007_220642.jpg"): "",
12
+ image_template.format("20251007_220520.jpg"): "",
13
+ image_template.format("20251007_220601.jpg"): "",
14
+ }
15
+ ),
16
+ }
17
+ ]
@@ -0,0 +1,17 @@
1
+ from bluer_sbc.README.design import design_doc
2
+ from bluer_sbc.README.designs.battery_bus import parts
3
+ from bluer_sbc.README.designs.battery_bus.items import items
4
+ from bluer_sbc.README.designs.battery_bus.body import docs as body
5
+
6
+ docs = (
7
+ [
8
+ design_doc(
9
+ "battery_bus",
10
+ items,
11
+ own_folder=True,
12
+ cols=2,
13
+ )
14
+ ]
15
+ + body.docs
16
+ + parts.docs
17
+ )
@@ -0,0 +1,17 @@
1
+ from bluer_objects.README.items import ImageItems
2
+ from bluer_objects.README.consts import designs_url
3
+
4
+ from bluer_sbc.README.designs.battery_bus import image_template
5
+
6
+ items = ImageItems(
7
+ {
8
+ image_template.format("concept.png"): "",
9
+ designs_url(
10
+ "battery-bus/electrical/wiring.png?raw=true",
11
+ ): designs_url(
12
+ "battery-bus/electrical/wiring.svg",
13
+ ),
14
+ image_template.format("20251007_221902.jpg"): "./body/sla.md",
15
+ image_template.format("li-ion/20251204_144045.jpg"): "./body/li-ion.md",
16
+ }
17
+ )
@@ -0,0 +1,19 @@
1
+ from bluer_sbc.README.design import design_doc_parts
2
+
3
+ parts = {
4
+ "SLA-Battery": "e.g. 12 V, 7.2 Ah",
5
+ "Li-Ion-Battery": "e.g. 3 x 26650, 5000 mAh 5C, 3.7 V/4.2V",
6
+ "dc-switch": "12V DC 10 A",
7
+ "dc-power-plug": "",
8
+ "dsn-vc288": "",
9
+ }
10
+
11
+ docs = [
12
+ {
13
+ "path": "../docs/battery_bus/parts.md",
14
+ "macros": design_doc_parts(
15
+ dict_of_parts=parts,
16
+ parts_reference="../parts",
17
+ ),
18
+ }
19
+ ]
@@ -0,0 +1,14 @@
1
+ from bluer_objects import README
2
+ from bluer_sbc.README.designs.consts import assets2
3
+
4
+ image_template = assets2 + "cheshmak/{}?raw=true"
5
+
6
+ marquee = README.Items(
7
+ [
8
+ {
9
+ "name": "cheshmak",
10
+ "marquee": image_template.format("20251203_190131.jpg"),
11
+ "url": "./bluer_sbc/docs/cheshmak",
12
+ }
13
+ ]
14
+ )
File without changes
@@ -0,0 +1,23 @@
1
+ from bluer_objects.README.items import ImageItems
2
+
3
+ from bluer_sbc.README.designs.cheshmak import image_template
4
+ from bluer_sbc.README.designs.cheshmak.body import v1
5
+
6
+ docs = [
7
+ {
8
+ "path": "../docs/cheshmak/body",
9
+ "items": ImageItems(
10
+ {
11
+ image_template.format("20251203_184658.jpg"): "",
12
+ image_template.format("20251203_184702.jpg"): "",
13
+ image_template.format("20251203_184706.jpg"): "",
14
+ image_template.format("20251203_184712.jpg"): "",
15
+ image_template.format("20251203_184717.jpg"): "",
16
+ image_template.format("20251203_184723.jpg"): "",
17
+ image_template.format("20251203_190023.jpg"): "",
18
+ image_template.format("20251203_190131.jpg"): "",
19
+ image_template.format("20251203_190344.jpg"): "",
20
+ }
21
+ ),
22
+ }
23
+ ] + v1.docs
@@ -0,0 +1,18 @@
1
+ from bluer_objects.README.items import ImageItems
2
+
3
+ from bluer_sbc.README.designs.consts import assets2
4
+
5
+
6
+ docs = [
7
+ {
8
+ "path": "../docs/cheshmak/body/v1.md",
9
+ "items": ImageItems(
10
+ {
11
+ **{
12
+ (assets2 + "bryce/{}?raw=true").format(f"{index+1:02}.jpg"): ""
13
+ for index in range(8)
14
+ }
15
+ }
16
+ ),
17
+ },
18
+ ]
@@ -0,0 +1,19 @@
1
+ from bluer_sbc.README.design import design_doc
2
+ from bluer_sbc.README.designs.cheshmak import operation, parts, validations
3
+ from bluer_sbc.README.designs.cheshmak.items import items
4
+ from bluer_sbc.README.designs.cheshmak.body import docs as body
5
+
6
+
7
+ docs = (
8
+ [
9
+ design_doc(
10
+ "cheshmak",
11
+ items,
12
+ own_folder=True,
13
+ ),
14
+ ]
15
+ + body.docs
16
+ + operation.docs
17
+ + parts.docs
18
+ + validations.docs
19
+ )
@@ -0,0 +1,10 @@
1
+ from bluer_objects.README.items import ImageItems
2
+
3
+ from bluer_sbc.README.designs.cheshmak import image_template
4
+
5
+ items = ImageItems(
6
+ {
7
+ image_template.format("01.png"): "",
8
+ image_template.format("20251203_190023.jpg"): "",
9
+ }
10
+ )
@@ -0,0 +1,5 @@
1
+ docs = [
2
+ {
3
+ "path": "../docs/cheshmak/operation.md",
4
+ },
5
+ ]
@@ -0,0 +1,28 @@
1
+ from bluer_sbc.README.design import design_doc_parts
2
+
3
+ parts = {
4
+ "plexiglass": "2 x 90 mm x 90 mm",
5
+ "rpi": "",
6
+ "rpi-camera": "",
7
+ "nuts-bolts-spacers": "M2.5: ({})".format(
8
+ " + ".join(
9
+ [
10
+ "4 x bolt",
11
+ "4 x nut",
12
+ "12 x 10 mm spacer",
13
+ "4 x 15 mm spacer",
14
+ ]
15
+ )
16
+ ),
17
+ }
18
+
19
+
20
+ docs = [
21
+ {
22
+ "path": "../docs/cheshmak/parts.md",
23
+ "macros": design_doc_parts(
24
+ dict_of_parts=parts,
25
+ parts_reference="../parts",
26
+ ),
27
+ }
28
+ ]
@@ -0,0 +1,14 @@
1
+ from bluer_objects.README.items import ImageItems
2
+
3
+ from bluer_sbc.README.designs.cheshmak import assets2
4
+
5
+ docs = [
6
+ {
7
+ "path": "../docs/cheshmak/validations.md",
8
+ "items": ImageItems(
9
+ {
10
+ assets2 + "bryce/09.jpg?raw=true": "",
11
+ }
12
+ ),
13
+ },
14
+ ]
@@ -2,6 +2,8 @@ from bluer_objects import README
2
2
  from bluer_objects.README.items import ImageItems
3
3
 
4
4
  from bluer_sbc.README.designs.consts import assets2
5
+ from bluer_sbc.README.designs.battery_bus.parts import parts as battery_bus_parts
6
+ from bluer_sbc.README.designs.pwm_generator import parts as pwm_generator_parts
5
7
  from bluer_sbc.README.design import design_doc
6
8
 
7
9
  image_template = assets2 + "nafha/{}?raw=true"
@@ -10,7 +12,7 @@ marquee = README.Items(
10
12
  [
11
13
  {
12
14
  "name": "nafha",
13
- "marquee": image_template.format("01.png"),
15
+ "marquee": image_template.format("20251116_224456.jpg"),
14
16
  "url": "./bluer_sbc/docs/nafha",
15
17
  }
16
18
  ]
@@ -29,15 +31,19 @@ items = ImageItems(
29
31
  "20251103_215257.jpg",
30
32
  "20251103_215301.jpg",
31
33
  "20251103_215319.jpg",
34
+ "20251116_224456.jpg",
35
+ "20251124_094940.jpg",
36
+ "20251125_203403.jpg",
32
37
  ]
33
38
  },
34
39
  )
35
40
 
36
41
  parts = {
37
- "dsn-vc288": "",
38
- "charging-port": "",
39
- "pwm-manual-dc-motor-controller": "",
40
- "heater-element": "12 V, 4.5 Ω, 32 w",
42
+ **battery_bus_parts,
43
+ **pwm_generator_parts,
44
+ **{
45
+ "heater-element": "12 V, 4.5 Ω, 32 w",
46
+ },
41
47
  }
42
48
 
43
49
  docs = [