Initial commit

This commit is contained in:
aderusha 2021-03-01 15:49:44 -05:00
parent 02f49a8178
commit bdaa5e7d90
113 changed files with 405156 additions and 0 deletions

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,50 @@
# Switch Plate model for single-gang workbox
## 3D Printed Enclosure
Above you'll find STL files ready for slicing and the source models editable in the free edition of [SketchUp Make](https://www.sketchup.com/download). There are several models presented here for various plate configurations on the front and two options for the rear enclosure.
For most users, you'll want to print [HASwitchPlate_front_single.stl](HASwitchPlate_front_single.stl) and [HASwitchPlate_rear_nolcdmod.stl](HASwitchPlate_rear_nolcdmod.stl).
### Front plate models
* **[HASwitchPlate_front_single.stl](HASwitchPlate_front_single.stl)** Standard single-wide plate. `[HASP]`
* **[HASwitchPlate_front_2x_hasp_decora.stl](HASwitchPlate_front_2x_hasp_decora.stl)** Double-wide plate with Decora switch to the right `[HASP|Decora]`
* **[HASwitchPlate_front_2x_hasp_toggle.stl](HASwitchPlate_front_2x_hasp_toggle.stl)** Double-wide plate with toggle switch to the right `[HASP|toggle]`
* **[HASwitchPlate_front_3x_hasp_decora_decora.stl](HASwitchPlate_front_3x_hasp_decora_decora.stl)** Triple-wide plate with Decora switches to the right `[HASP|Decora|Decora]`
* **[HASwitchPlate_front_3x_hasp_toggle_toggle.stl](HASwitchPlate_front_3x_hasp_toggle_toggle.stl)** Triple-wide plate with toggle switches to the right `[HASP|toggle|toggle]`
* **[HASwitchPlate_front_5x_decora_decora_hasp_decora_decora.stl](HASwitchPlate_front_5x_decora_decora_hasp_decora_decora.stl)** 5-wide plate with 4x Decora switches and HASP in center `[Decora|Decora|HASP|Decora|Decora]`
* **[HASwitchPlate_front_single_dev.stl](HASwitchPlate_front_single_dev.stl)** Standard single-wide plate with SD card exposed for development use (unsafe!) `[HASP]`
### Rear enclosure models
* **[HASwitchPlate_rear_lcdmod.stl](HASwitchPlate_rear_lcdmod.stl)** The `lcdmod` enclosure requires the removal of the 4-pin XHP connector from the Nextion LCD panel. This option allows for better clearance around the screw posts which may help in tight work boxes, but the process of safely removing the connecter may require a hot air station.
* **[HASwitchPlate_rear_nolcdmod.stl](HASwitchPlate_rear_nolcdmod.stl)** The `nolcdmod` enclosure does not require removing the 4-pin XHP connector from the Nextion LCD panel. This simplifies the build process but has just a little less room behind the device for the work box screws. We're not talking a lot here, so if you don't have the hot air station this option will probably work fine for you.
* **[HASwitchPlate_rear_lcdmod_minimum_clearance.stl](HASwitchPlate_rear_lcdmod_minimum_clearance.stl)** The `lcdmod_minimum_clearance` rear enclosure has been modified to provide the tightest fit around the HASP components that I can work out. The walls are flimsy and thin, it will require supports to print, and you'll need 4 x [4mm M2 countersunk screws](https://amzn.to/2Eaz9wl) to assemble. I don't recommend this enclosure unless you can't get the standard enclosure to fit in your workbox.
* **[HASwitchPlate_rear_dev.stl](HASwitchPlate_rear_dev.stl)** The `dev` enclosure has USB, SD card, and Nextion XHP connector exposed for development/test purposes. This is unsafe to install in your workbox.
### Desktop models
An enclosure designed for desktop (table, bedstand, etc) use has been developed. The enclosure will fit the standard PCB, WeMos D1 Mini, and Nextion 2.4" but will not allow installation or use of the AC PSU. Power is provided by USB connection to the WeMos D1 Mini.
* **[HASwitchPlate_desktop_front.stl](HASwitchPlate_desktop_front.stl)** Front panel for desktop use with opening for SD card access
* **[HASwitchPlate_desktop_rear.stl](HASwitchPlate_desktop_rear.stl)** Rear enclosure for desktop use with openings for SD card, USB, and Nextion Serial access
* **[HASwitchPlate_desktop_base.stl](HASwitchPlate_desktop_base.stl)** Handy base for desktop use. Print with higher infill to add mass to weigh it down a bit.
## 3D Printing Notes
### FDM affordance
The careful observer might note that the dimensions of the model vary just slightly from the [published dimensions](https://www.itead.cc/wiki/images/a/ad/2.4%27%27_Nextion_Dimension.pdf) of the panel used in this project. This has been done to accommodate the nature of FDM 3D printing, which means that other production technologies may require slight modifications to make everything fit snug. The STLs are published in the correct orientation for printing.
### Filament
I printed these two parts with [AmazonBasics White PETG](https://amzn.to/2I6ctPd) on a [Prusa i3 MK3](https://shop.prusa3d.com/en/3d-printers/180-original-prusa-i3-mk3-kit.html) with 20% infill, .15mm layers, no supports, and 6 bottom layers. PETG provides good flexibility when mounting the device into your wall, as sometimes the drywall, workbox, etc require a little bit of flex. PLA might work, but may crack in some installations. If you have both on hand, print the front in PETG and the back in PLA.
### Inserts
The mounting holes for the Nextion panel are sized to fit [M2 x 3mm threaded inserts](https://amzn.to/2N511Fh) but should accept an M3 screw (tightly). See [the enclosure build documentation](../Documentation/04_Project_Enclosure.md#threaded-inserts) for more details.
### SketchUp
The SketchUp file included here is dimensioned in meters but 1m == 1mm due to issues with how SketchUp (doesn't) handle small dimensions. If you intend to modify the provided SketchUp model, export to STL in meters then import for print in mm (the standard setting for most slicers) and you'll be fine. The included STLs are ready to slice as-is.

Binary file not shown.

File diff suppressed because it is too large Load Diff

5
Arduino_Sketch/README.md Normal file
View File

@ -0,0 +1,5 @@
# HASwitchPlate Arduino Sketch
Here you'll find the [Arduino source code](./HASwitchPlate/HASwitchPlate.ino) for the microcontroller firmware along with [a pre-compiled binary image](https://github.com/aderusha/HASwitchPlate/raw/master/Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin) which can be [flashed directly to your ESP8266](../Documentation/01_Arduino_Sketch.md#nodemcu-flasher).
Please [check the Arduino Sketch documentation](../Documentation/01_Arduino_Sketch.md) for additional deployment details.

View File

@ -0,0 +1,881 @@
blueprint:
name: "HASP Core functionality"
description: |
# Description
Provides core HASP functionality. Deploy one copy of this blueprint for each HASP device.
![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Core_Functionality.png)
## HASP Page and Button Reference
The images below show each available HASP page along with the layout of available button objects.
<details>
| Page 0 | Pages 1-3 | Pages 4-5 |
|--------|-----------|-----------|
| ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p4-p5_3sliders.png) |
| Page 6 | Page 7 | Page 8 |
|--------|--------|--------|
| ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) |
| Page 9 | Page 10 | Page 11 |
|--------|---------|---------|
| ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p11_1button.png)
</details>
## HASP Font Reference
<details>
The Nextion display supports monospaced and proportional fonts. For monospace fonts, the HASP project includes [Consolas](https://docs.microsoft.com/en-us/typography/font-list/consolas) monospace in 4 sizes, [Webdings](https://en.wikipedia.org/wiki/Webdings#Character_set) in 1 size, and [Google's "Noto Sans"](https://github.com/googlefonts/noto-fonts) proportional in 5 sizes
| Font | Name | Characters per line | Lines per button |
| :--- | :---------------- | :-------------------| :--------------- |
| 0 | Consolas 24 | 20 characters | 2 lines |
| 1 | Consolas 32 | 15 characters | 2 lines |
| 2 | Consolas 48 | 10 characters | 1 line |
| 3 | Consolas 80 | 6 characters | 1 line |
| 4 | Webdings 56 | 8 characters | 1 line |
| 5 | Noto Sans 24 | Proportional | 2 lines |
| 6 | Noto Sans 32 | Proportional | 2 lines |
| 7 | Noto Sans 48 | Proportional | 1 line |
| 8 | Noto Sans 64 | Proportional | 1 line |
| 9 | Noto Sans 80 | Proportional | 1 line |
| 10 | Noto Sans Bold 80 | Proportional | 1 line |
### Icons
Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/Images/hasp-fontawesome5.html)
### Font examples
![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_8-10.png)
</details>
source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Core_Functionality.yaml"
domain: automation
input:
haspdevice:
name: "HASP Device"
description: "Select the HASP device"
selector:
device:
integration: mqtt
manufacturer: "HASwitchPlate"
model: "HASPone v1.0.0"
page1text:
name: "Page select button 1 text"
description: "Enter text to appear on the left-most page select button #1. It's a small button, so keep it short. 6 character (or shorter) words are crisp and legible."
default: "Page 1"
selector:
text:
page1font_select:
name: "Page select button 1 font"
description: "Select the font for page select button #1. Font 6 might be a good starting point. You can refer to the HASP Font Reference above to see what the available options look like."
default: "6 - Noto Sans 32"
selector:
select:
options:
- "0 - Consolas 24"
- "1 - Consolas 32"
- "2 - Consolas 48"
- "3 - Consolas 80"
- "4 - Webdings 56"
- "5 - Noto Sans 24"
- "6 - Noto Sans 32"
- "7 - Noto Sans 48"
- "8 - Noto Sans 64"
- "9 - Noto Sans 80"
- "10 - Noto Sans Bold 80"
page1page:
name: "Page select button 1 page"
description: "Select the destination page for page select button #1. When you click the left-most page button on the HASP, the HASP will flip to the page number you select here. If this is your first time here, try page 1."
default: 1
selector:
number:
min: 0
max: 11
mode: slider
page2text:
name: "Page select button 2 text"
description: "Enter text to appear on the center page select button #2. If page scrolling is enabled, use the Page Names list below."
default: "Page 2"
selector:
text:
page2font_select:
name: "Page select button 2 font"
description: "Select the font for page select button #2."
default: "6 - Noto Sans 32"
selector:
select:
options:
- "0 - Consolas 24"
- "1 - Consolas 32"
- "2 - Consolas 48"
- "3 - Consolas 80"
- "4 - Webdings 56"
- "5 - Noto Sans 24"
- "6 - Noto Sans 32"
- "7 - Noto Sans 48"
- "8 - Noto Sans 64"
- "9 - Noto Sans 80"
- "10 - Noto Sans Bold 80"
page2page:
name: "Page select button 2 page"
description: "Select the destination page for page select button #2"
default: 2
selector:
number:
min: 0
max: 11
mode: slider
page3text:
name: "Page select button 3 text"
description: "Enter text to appear on the right-most page select button #3"
default: "Page 3"
selector:
text:
page3font_select:
name: "Page select button 3 font"
description: "Select the font for page select button #3"
default: "6 - Noto Sans 32"
selector:
select:
options:
- "0 - Consolas 24"
- "1 - Consolas 32"
- "2 - Consolas 48"
- "3 - Consolas 80"
- "4 - Webdings 56"
- "5 - Noto Sans 24"
- "6 - Noto Sans 32"
- "7 - Noto Sans 48"
- "8 - Noto Sans 64"
- "9 - Noto Sans 80"
- "10 - Noto Sans Bold 80"
page3page:
name: "Page select button 3 page"
description: "Select the destination page for page select button #3"
default: 3
selector:
number:
min: 0
max: 11
mode: slider
page_scroll:
name: "Enable page scrolling instead of page select"
description: "If enabled, page buttons 1 and 3 will scroll up and down through available pages. The middle page button 2 will continue to select its assigned page number, but the label for page button 2 will be determined based on the Page Names defined below."
default: false
selector:
boolean:
page_scroll_list:
name: "Page scroll list"
description: "If page scrolling is enabled, set this list to include all active pages eligible for scrolling in the desired order. If a page is not being used, remove it from the list to skip it while scrolling up/down."
default: "1,2,3,4,5,6,7,8,9,10,11"
selector:
text:
page_names:
name: "Page names"
description: 'If page scrolling is enabled, the list here assigns the label seen on Page Button 2 for each page. For example, if "page9" is set to "HVAC", when page 9 is selected the text "HVAC" will appear on the middle page select button. If you prefer one single label for the page2 button on all pages, simply set each page to the same value.'
default:
page0: Page 0
page1: Page 1
page2: Page 2
page3: Page 3
page4: Page 4
page5: Page 5
page6: Page 6
page7: Page 7
page8: Page 8
page9: Page 9
page10: Page 10
page11: Page 11
selector:
object:
show_lovelace:
name: "Show lovelace configuration notification"
description: "Turn this on to have a ready-made entities card configuration presented when you click RUN ACTIONS. Toggle this back off once you've added the code to your dashboard."
default: true
selector:
boolean:
reset_hasp:
name: "First-time HASP setup or reset"
description: "Turn this on if this is a brand-new HASP (or you'd like to reset some default theme settings). Turn it on, hit save, and click RUN ACTIONS to setup your HASP. After the first run you can toggle this back off."
default: true
selector:
boolean:
mode: parallel
max_exceeded: silent
variables:
haspdevice: !input haspdevice
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
page1text: !input page1text
page1font_select: !input page1font_select
page1font: "{{ page1font_select.split(' - ')[0] | int }}"
page1page: !input page1page
page2text: !input page2text
page2font_select: !input page2font_select
page2font: "{{ page2font_select.split(' - ')[0] | int }}"
page2page: !input page2page
page3text: !input page3text
page3font_select: !input page3font_select
page3font: "{{ page3font_select.split(' - ')[0] | int }}"
page3page: !input page3page
page_scroll: !input page_scroll
page_scroll_list: !input page_scroll_list
page_names: !input page_names
show_lovelace: !input show_lovelace
reset_hasp: !input reset_hasp
activepage: >-
{%- set activepage = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^number\..*_active_page(?:_\d+|)$") -%}
{%- set activepage.entity=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{% if states(activepage.entity)|lower == "none" %}-1{% else %}{{ states(activepage.entity) | int }}{% endif %}
statetopic: '{{ "hasp/" ~ haspname ~ "/state" }}'
commandtopic: '{{ "hasp/" ~ haspname ~ "/command/" ~ haspobject }}'
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
jsoncommandtopic: '{{ "hasp/" ~ haspname ~ "/command/json" }}'
haspsensor: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
haspIP: '{{state_attr(haspsensor, "haspIP")}}'
haspClientId: '{{state_attr(haspsensor, "haspClientID")}}'
haspMac: '{{state_attr(haspsensor, "haspMac")}}'
haspManufacturer: '{{state_attr(haspsensor, "haspManufacturer")}}'
haspModel: '{{state_attr(haspsensor, "haspModel")}}'
sw_version: '{{state_attr(haspsensor, "espVersion")}}'
default_selected_foreground_brightness: "1"
default_selected_foreground_color: "[0, 0, 0]"
default_selected_background_brightness: "255"
default_selected_background_color: "[255, 255, 255]"
default_unselected_foreground_brightness: "224"
default_unselected_foreground_color: "[255, 255, 255]"
default_unselected_background_brightness: "64"
default_unselected_background_color: "[255, 255, 255]"
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
page_button_trigger: "OFF"
page_list: '{{page_scroll_list.split(",")}}'
page_previous: >
{%- set page = namespace() -%}
{%- set page.previous = page_list[(page_list|length)-1]|int -%}
{%- set page.next = page_list[0]|int -%}
{%- for item in page_list -%}
{%- if item|int == activepage -%}
{%- if not loop.first -%}
{%- set page.previous = loop.previtem|int -%}
{%- endif -%}
{%- if not loop.last -%}
{%- set page.next = loop.nextitem|int -%}
{%- endif -%}
{%- endif -%}
{%- endfor -%}{{page.previous}}
page_next: >
{%- set page = namespace() -%}
{%- set page.previous = page_list[(page_list|length)-1]|int -%}
{%- set page.next = page_list[0]|int -%}
{%- for item in page_list -%}
{%- if item|int == activepage -%}
{%- if not loop.first -%}
{%- set page.previous = loop.previtem|int -%}
{%- endif -%}
{%- if not loop.last -%}
{%- set page.next = loop.nextitem|int -%}
{%- endif -%}
{%- endif -%}
{%- endfor -%}{{page.next}}
trigger_variables:
haspdevice: !input haspdevice
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
statetopic: '{{ "hasp/" ~ haspname ~ "/state" }}'
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
trigger:
- platform: mqtt
topic: "{{jsontopic}}"
payload: "online"
value_template: "{{ value_json.event }}"
- platform: homeassistant
event: start
- platform: mqtt
topic: "{{jsontopic}}"
- platform: mqtt
topic: "{{selectedfgtopic}}"
- platform: mqtt
topic: "{{selectedbgtopic}}"
- platform: mqtt
topic: "{{unselectedfgtopic}}"
- platform: mqtt
topic: "{{unselectedbgtopic}}"
action:
- choose:
#########################################################################
# Create required helpers and apply HASP defaults when "RUN ACTIONS" is pressed by the user
- conditions:
- condition: template
value_template: "{{ trigger is not defined }}"
sequence:
# Push discovery messages for RGB lights used to configure themes
- service: mqtt.publish
data:
topic: "homeassistant/light/{{haspname}}/selectedforegroundcolor/config"
payload: >-
{"name":"{{haspname}} selected foreground color",
"command_topic":"hasp/{{haspname}}/light/selectedforegroundcolor/switch",
"state_topic":"hasp/{{haspname}}/alwayson",
"rgb_command_topic":"hasp/{{haspname}}/light/selectedforegroundcolor/rgb",
"rgb_command_template": {% raw %}"{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}",{% endraw %}
"retain":false,
"unique_id":"{{haspClientId}}-selectedforegroundcolor",
"device":{"identifiers":["{{haspClientId}}"],
"name":"{{haspname}}",
"manufacturer":"{{haspManufacturer}}",
"model":"{{haspModel}}",
"sw_version":{{sw_version}}
}}
retain: true
- service: mqtt.publish
data:
topic: "homeassistant/light/{{haspname}}/selectedbackgroundcolor/config"
payload: >-
{"name":"{{haspname}} selected background color",
"command_topic":"hasp/{{haspname}}/light/selectedbackgroundcolor/switch",
"state_topic":"hasp/{{haspname}}/alwayson",
"rgb_command_topic":"hasp/{{haspname}}/light/selectedbackgroundcolor/rgb",
"rgb_command_template": {% raw %}"{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}",{% endraw %}
"retain":false,
"unique_id":"{{haspClientId}}-selectedbackgroundcolor",
"device":{
"identifiers":["{{haspClientId}}"],
"name":"{{haspname}}",
"manufacturer":"{{haspManufacturer}}",
"model":"{{haspModel}}",
"sw_version":{{sw_version}}
}}
retain: true
- service: mqtt.publish
data:
topic: "homeassistant/light/{{haspname}}/unselectedforegroundcolor/config"
payload: >-
{"name":"{{haspname}} unselected foreground color",
"command_topic":"hasp/{{haspname}}/light/unselectedforegroundcolor/switch",
"state_topic":"hasp/{{haspname}}/alwayson",
"rgb_command_topic":"hasp/{{haspname}}/light/unselectedforegroundcolor/rgb",
"rgb_command_template": {% raw %}"{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}",{% endraw %}
"retain":false,
"unique_id":"{{haspClientId}}-unselectedforegroundcolor",
"device":{"identifiers":["{{haspClientId}}"],
"name":"{{haspname}}",
"manufacturer":"{{haspManufacturer}}",
"model":"{{haspModel}}",
"sw_version":{{sw_version}}
}}
retain: true
- service: mqtt.publish
data:
topic: "homeassistant/light/{{haspname}}/unselectedbackgroundcolor/config"
payload: >-
{"name":"{{haspname}} unselected background color",
"command_topic":"hasp/{{haspname}}/light/unselectedbackgroundcolor/switch",
"state_topic":"hasp/{{haspname}}/alwayson",
"rgb_command_topic":"hasp/{{haspname}}/light/unselectedbackgroundcolor/rgb",
"rgb_command_template": {% raw %}"{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}",{% endraw %}
"retain":false,
"unique_id":"{{haspClientId}}-unselectedbackgroundcolor",
"device":{"identifiers":["{{haspClientId}}"],
"name":"{{haspname}}",
"manufacturer":"{{haspManufacturer}}",
"model":"{{haspModel}}",
"sw_version":{{sw_version}}
}}
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/alwayson"
payload: "ON"
retain: true
# Send page select button config
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{% for p in range(1,12) %}"p[{{p}}].b[1].font={{page1font}}","p[{{p}}].b[1].txt=\"{{page1text}}\"",{% endfor %}
{% for p in range(1,12) %}"p[{{p}}].b[2].font={{page2font}}","p[{{p}}].b[2].txt=\"{% if page_scroll %}{{page_names.get("page" ~ p)}}{% else %}{{page2text}}{% endif %}\"",{% endfor %}
{% for p in range(1,12) %}"p[{{p}}].b[3].font={{page3font}}","p[{{p}}].b[3].txt=\"{{page3text}}\""{% if not loop.last %},{% endif %}{% endfor %}]
- choose:
#########################################################################
# Create a notification with the lovelace entity card YAML
- conditions:
- condition: template
value_template: "{{ show_lovelace }}"
sequence:
- delay: "00:00:01"
- service: persistent_notification.create
data:
title: "{{haspname}} Lovelace Card"
notification_id: "{{haspname}} Lovelace Configuration"
message: >-
{%- set haspentities = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^number\..*_active_page(?:_\d+|)$") -%}
{%- set haspentities.activepage=entity -%}
{%- elif entity|regex_search("^light\..*_backlight(?:_\d+|)$") -%}
{%- set haspentities.backlight=entity -%}
{%- elif entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%}
{%- set haspentities.selectedforeground=entity -%}
{%- elif entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%}
{%- set haspentities.selectedbackground=entity -%}
{%- elif entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%}
{%- set haspentities.unselectedforeground=entity -%}
{%- elif entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%}
{%- set haspentities.unselectedbackground=entity -%}
{%- endif -%}
{%- endfor -%}
To [create a Lovelace card](https://www.home-assistant.io/lovelace/) for HASP {{haspname}},
add a manual card and then paste in the code you see below.
```yaml
type: entities
title: HASP {{haspname}}
show_header_toggle: false
state_color: true
entities:
- entity: number.{{haspentities.activepage}}
- type: divider
- entity: light.{{haspentities.backlight}}
secondary_info: brightness
- type: divider
- entity: light.{{haspentities.selectedforeground}}
icon: 'mdi:palette'
name: Selected Foreground Color
secondary_info: brightness
- entity: light.{{haspentities.selectedbackground}}
icon: 'mdi:palette'
name: Selected Background Color
secondary_info: brightness
- entity: light.{{haspentities.unselectedforeground}}
icon: 'mdi:palette'
name: Unselected Foreground Color
secondary_info: brightness
- entity: light.{{haspentities.unselectedbackground}}
icon: 'mdi:palette'
name: Unselected Background Color
secondary_info: brightness
- type: divider
footer:
type: buttons
entities:
- entity: {{haspsensor}}
name: Blueprints
icon: 'mdi:palette-swatch'
tap_action:
action: navigate
navigation_path: /config/blueprint/dashboard
- entity: {{haspsensor}}
name: Automations
icon: 'mdi:robot'
tap_action:
action: navigate
navigation_path: /config/automation/dashboard
- entity: {{haspsensor}}
name: HASP Admin
icon: 'mdi:cellphone-text'
tap_action:
action: url
url_path: http://{{haspIP}}
```
- choose:
#########################################################################
# Push some defaults to the device
- conditions:
- condition: template
value_template: "{{ reset_hasp }}"
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["p[0].b[1].font=6","p[0].b[1].txt=\"  Setting up\\rHome Assistant\"","page 0"]'
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/state/page"
payload: "0"
- delay: "00:00:01"
- service: light.turn_on
data:
entity_id: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
rgb_color: "{{default_selected_foreground_color}}"
- service: light.turn_on
data:
entity_id: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
brightness: "{{default_selected_foreground_brightness}}"
- service: light.turn_on
data:
entity_id: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
rgb_color: "{{default_selected_background_color}}"
- service: light.turn_on
data:
entity_id: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
brightness: "{{default_selected_background_brightness}}"
- service: light.turn_on
data:
entity_id: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
rgb_color: "{{default_unselected_foreground_color}}"
- service: light.turn_on
data:
entity_id: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
brightness: "{{default_unselected_foreground_brightness}}"
- service: light.turn_on
data:
entity_id: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
rgb_color: "{{default_unselected_background_color}}"
- service: light.turn_on
data:
entity_id: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
brightness: "{{default_unselected_background_brightness}}"
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/command/reboot"
payload: ""
- delay: "00:00:02"
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/command/page"
payload: "{% if page_scroll %}{{page2page}}{% else %}{{page1page}}{% endif %}"
retain: true
#########################################################################
# Push configuration to device when it connects or Home Assistant starts
- conditions:
- condition: template
value_template: "{{ is_state(haspsensor, 'ON') and ((trigger.platform == 'homeassistant') and (trigger.event == 'start')) or ((trigger.platform == 'mqtt') and (trigger.topic == jsontopic) and (trigger.payload_json.event == 'online'))}}"
sequence:
- service: mqtt.publish # send page button text
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{% for p in range(1,12) %}"p[{{p}}].b[1].font={{page1font}}","p[{{p}}].b[1].txt=\"{{page1text}}\"",{% endfor %}
{% for p in range(1,12) %}"p[{{p}}].b[2].font={{page2font}}","p[{{p}}].b[2].txt=\"{% if page_scroll %}{{page_names.get("page" ~ p)}}{% else %}{{page2text}}{% endif %}\"",{% endfor %}
{% for p in range(1,12) %}"p[{{p}}].b[3].font={{page3font}}","p[{{p}}].b[3].txt=\"{{page3text}}\""{% if not loop.last %},{% endif %}{% endfor %}]
- service: mqtt.publish # apply selected foreground color to page select buttons
data:
topic: "{{jsoncommandtopic}}"
payload: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{%- set colorcode = (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int -%}
[{%- if not page_scroll -%}{%- for p in range(1,12) %}{%- if p == page1page|int %}"p[{{p}}].b[1].pco={{colorcode}}"{%- else -%}"p[{{p}}].b[1].pco2={{colorcode}}"{%- endif -%},{%- endfor -%}
{%- else -%}{%- for p in range(1,12) %}"p[{{p}}].b[1].pco2={{colorcode}}",{%- endfor -%}{%- endif -%}
{%- for p in range(1,12) %}{%- if p == page2page|int %}"p[{{p}}].b[2].pco={{colorcode}}"{%- else -%}"p[{{p}}].b[2].pco2={{colorcode}}"{%- endif -%},{%- endfor -%}
{%- if not page_scroll -%}{%- for p in range(1,12) %}{%- if p == page3page|int %}"p[{{p}}].b[3].pco={{colorcode}}"{%- else -%}"p[{{p}}].b[3].pco2={{colorcode}}"{%- endif -%}{% if not loop.last %},{% endif %}{%- endfor -%}
{%- else -%}{%- for p in range(1,12) %}"p[{{p}}].b[3].pco2={{colorcode}}"{% if not loop.last %},{% endif %}{%- endfor -%}{%- endif -%}]
- service: mqtt.publish # apply selected background color to page select buttons
data:
topic: "{{jsoncommandtopic}}"
payload: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{%- set colorcode = (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int -%}
[{%- if not page_scroll -%}{%- for p in range(1,12) %}{%- if p == page1page|int %}"p[{{p}}].b[1].bco={{colorcode}}"{%- else -%}"p[{{p}}].b[1].bco2={{colorcode}}"{%- endif -%},{%- endfor -%}
{% else %}{%- for p in range(1,12) %}"p[{{p}}].b[1].bco2={{colorcode}}",{%- endfor -%}{%- endif -%}
{%- for p in range(1,12) %}{%- if p == page2page|int %}"p[{{p}}].b[2].bco={{colorcode}}"{%- else -%}"p[{{p}}].b[2].bco2={{colorcode}}"{%- endif -%},{%- endfor -%}
{%- if not page_scroll -%}{%- for p in range(1,12) %}{%- if p == page3page|int %}"p[{{p}}].b[3].bco={{colorcode}}"{%- else -%}"p[{{p}}].b[3].bco2={{colorcode}}"{%- endif -%}{% if not loop.last %},{% endif %}{%- endfor -%}
{% else %}{%- for p in range(1,12) %}"p[{{p}}].b[3].bco2={{colorcode}}"{% if not loop.last %},{% endif %}{%- endfor -%}{%- endif -%}]
- service: mqtt.publish # apply unselected foreground color to page select buttons
data:
topic: "{{jsoncommandtopic}}"
payload: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{%- set colorcode = (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int -%}
[{%- if not page_scroll -%}{%- for p in range(1,12) %}{%- if p == page1page|int %}"p[{{p}}].b[1].pco2={{colorcode}}"{%- else -%}"p[{{p}}].b[1].pco={{colorcode}}"{%- endif -%},{%- endfor -%}
{% else %}{%- for p in range(1,12) %}"p[{{p}}].b[1].pco={{colorcode}}",{%- endfor -%}{%- endif -%}
{%- for p in range(1,12) %}{%- if p == page2page|int %}"p[{{p}}].b[2].pco2={{colorcode}}"{%- else -%}"p[{{p}}].b[2].pco={{colorcode}}"{%- endif -%},{%- endfor -%}
{%- if not page_scroll -%}{%- for p in range(1,12) %}{%- if p == page3page|int %}"p[{{p}}].b[3].pco2={{colorcode}}"{%- else -%}"p[{{p}}].b[3].pco={{colorcode}}"{%- endif -%}{% if not loop.last %},{% endif %}{%- endfor -%}
{% else %}{%- for p in range(1,12) %}"p[{{p}}].b[3].pco={{colorcode}}"{% if not loop.last %},{% endif %}{%- endfor -%}{%- endif -%}]
- service: mqtt.publish # apply unselected background color to page select buttons
data:
topic: "{{jsoncommandtopic}}"
payload: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{%- set colorcode = (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int -%}
[{%- if not page_scroll -%}{%- for p in range(1,12) %}{%- if p == page1page|int %}"p[{{p}}].b[1].bco2={{colorcode}}"{%- else -%}"p[{{p}}].b[1].bco={{colorcode}}"{%- endif -%},{%- endfor -%}
{% else %}{%- for p in range(1,12) %}"p[{{p}}].b[1].bco={{colorcode}}",{%- endfor -%}{%- endif -%}
{%- for p in range(1,12) %}{%- if p == page2page|int %}"p[{{p}}].b[2].bco2={{colorcode}}"{%- else -%}"p[{{p}}].b[2].bco={{colorcode}}"{%- endif -%},{%- endfor -%}
{%- if not page_scroll -%}{%- for p in range(1,12) %}{%- if p == page3page|int %}"p[{{p}}].b[3].bco2={{colorcode}}"{%- else -%}"p[{{p}}].b[3].bco={{colorcode}}"{%- endif -%}{% if not loop.last %},{% endif %}{%- endfor -%}
{% else %}{%- for p in range(1,12) %}"p[{{p}}].b[3].bco={{colorcode}}"{% if not loop.last %},{% endif %}{%- endfor -%}{%- endif -%}]
- service: mqtt.publish # request sensor update
data:
topic: "hasp/{{haspname}}/command"
payload: ""
#########################################################################
# Catch incoming JSON messages
- conditions:
- condition: template
value_template: "{{ (trigger.platform == 'mqtt') and (trigger.topic == jsontopic) and (trigger.payload_json is defined) }}"
sequence:
- choose:
#########################################################################
# Page control buttons
- conditions: # catch p[x].b[1] and send the command to switch to the selected page
- condition: template
value_template: '{{ (trigger.payload_json.event | regex_match("p\[\d+\].b\[1\]")) and (trigger.payload_json.value == page_button_trigger) and not page_scroll}}'
sequence:
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/command/page"
payload: !input page1page
retain: true
- conditions: # catch p[x].b[1] and send the command to switch to the previous page if page_scroll == true
- condition: template
value_template: '{{ (trigger.payload_json.event | regex_match("p\[\d+\].b\[1\]")) and (trigger.payload_json.value == page_button_trigger) and page_scroll}}'
sequence:
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/command/page"
payload: "{{page_previous}}"
retain: true
- conditions: # catch p[x].b[2]
- condition: template
value_template: '{{ (trigger.payload_json.event | regex_match("p\[\d+\].b\[2\]")) and (trigger.payload_json.value == page_button_trigger) }}'
sequence:
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/command/page"
payload: !input page2page
retain: true
- conditions: # catch p[x].b[3] and send the command to switch to the selected page
- condition: template
value_template: '{{ (trigger.payload_json.event | regex_match("p\[\d+\].b\[3\]")) and (trigger.payload_json.value == page_button_trigger) and not page_scroll}}'
sequence:
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/command/page"
payload: !input page3page
retain: true
- conditions: # catch p[x].b[3] and send the command to switch to the next page if page_scroll == true
- condition: template
value_template: '{{ (trigger.payload_json.event | regex_match("p\[\d+\].b\[3\]")) and (trigger.payload_json.value == page_button_trigger) and page_scroll }}'
sequence:
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/command/page"
payload: "{{page_next}}"
retain: true
#########################################################################
# Apply selected theme colors to the page select buttons when theme colors are published
- conditions:
- condition: template
value_template: "{{ (trigger.platform == 'mqtt') and (trigger.topic == selectedfgtopic) and not page_scroll }}"
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{%- for p in range(1,12) %}{%- if p == page1page|int %}"p[{{p}}].b[1].pco={{trigger.payload}}"{%- else -%}"p[{{p}}].b[1].pco2={{trigger.payload}}"{%- endif -%},{%- endfor -%}
{%- for p in range(1,12) %}{%- if p == page2page|int %}"p[{{p}}].b[2].pco={{trigger.payload}}"{%- else -%}"p[{{p}}].b[2].pco2={{trigger.payload}}"{%- endif -%},{%- endfor -%}
{%- for p in range(1,12) %}{%- if p == page3page|int %}"p[{{p}}].b[3].pco={{trigger.payload}}"{%- else -%}"p[{{p}}].b[3].pco2={{trigger.payload}}"{%- endif -%}{% if not loop.last %},{% endif %}{%- endfor -%}]
- conditions:
- condition: template
value_template: "{{ (trigger.platform == 'mqtt') and (trigger.topic == selectedfgtopic) and page_scroll }}"
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{%- for p in range(1,12) %}"p[{{p}}].b[1].pco2={{trigger.payload}}",{%- endfor -%}
{%- for p in range(1,12) %}{%- if p == page2page|int %}"p[{{p}}].b[2].pco={{trigger.payload}}"{%- else -%}"p[{{p}}].b[2].pco2={{trigger.payload}}"{%- endif -%},{%- endfor -%}
{%- for p in range(1,12) %}"p[{{p}}].b[3].pco2={{trigger.payload}}"{% if not loop.last %},{% endif %}{%- endfor -%}]
- conditions:
- condition: template
value_template: "{{ (trigger.platform == 'mqtt') and (trigger.topic == selectedbgtopic) and not page_scroll }}"
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{%- for p in range(1,12) %}{%- if p == page1page|int %}"p[{{p}}].b[1].bco={{trigger.payload}}"{%- else -%}"p[{{p}}].b[1].bco2={{trigger.payload}}"{%- endif -%},{%- endfor -%}
{%- for p in range(1,12) %}{%- if p == page2page|int %}"p[{{p}}].b[2].bco={{trigger.payload}}"{%- else -%}"p[{{p}}].b[2].bco2={{trigger.payload}}"{%- endif -%},{%- endfor -%}
{%- for p in range(1,12) %}{%- if p == page3page|int %}"p[{{p}}].b[3].bco={{trigger.payload}}"{%- else -%}"p[{{p}}].b[3].bco2={{trigger.payload}}"{%- endif -%}{% if not loop.last %},{% endif %}{%- endfor -%}]
- conditions:
- condition: template
value_template: "{{ (trigger.platform == 'mqtt') and (trigger.topic == selectedbgtopic) and page_scroll }}"
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{%- for p in range(1,12) %}"p[{{p}}].b[1].bco2={{trigger.payload}}",{%- endfor -%}
{%- for p in range(1,12) %}{%- if p == page2page|int %}"p[{{p}}].b[2].bco={{trigger.payload}}"{%- else -%}"p[{{p}}].b[2].bco2={{trigger.payload}}"{%- endif -%},{%- endfor -%}
{%- for p in range(1,12) %}"p[{{p}}].b[3].bco2={{trigger.payload}}"{% if not loop.last %},{% endif %}{%- endfor -%}]
- conditions:
- condition: template
value_template: "{{ (trigger.platform == 'mqtt') and (trigger.topic == unselectedfgtopic) and not page_scroll }}"
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{%- for p in range(1,12) %}{%- if p == page1page|int %}"p[{{p}}].b[1].pco2={{trigger.payload}}"{%- else -%}"p[{{p}}].b[1].pco={{trigger.payload}}"{%- endif -%},{%- endfor -%}
{%- for p in range(1,12) %}{%- if p == page2page|int %}"p[{{p}}].b[2].pco2={{trigger.payload}}"{%- else -%}"p[{{p}}].b[2].pco={{trigger.payload}}"{%- endif -%},{%- endfor -%}
{%- for p in range(1,12) %}{%- if p == page3page|int %}"p[{{p}}].b[3].pco2={{trigger.payload}}"{%- else -%}"p[{{p}}].b[3].pco={{trigger.payload}}"{%- endif -%}{% if not loop.last %},{% endif %}{%- endfor -%}]
- conditions:
- condition: template
value_template: "{{ (trigger.platform == 'mqtt') and (trigger.topic == unselectedfgtopic) and page_scroll }}"
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{%- for p in range(1,12) %}"p[{{p}}].b[1].pco={{trigger.payload}}",{%- endfor -%}
{%- for p in range(1,12) %}{%- if p == page2page|int %}"p[{{p}}].b[2].pco2={{trigger.payload}}"{%- else -%}"p[{{p}}].b[2].pco={{trigger.payload}}"{%- endif -%},{%- endfor -%}
{%- for p in range(1,12) %}"p[{{p}}].b[3].pco={{trigger.payload}}"{% if not loop.last %},{% endif %}{%- endfor -%}]
- conditions:
- condition: template
value_template: "{{ (trigger.platform == 'mqtt') and (trigger.topic == unselectedbgtopic) and not page_scroll }}"
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{%- for p in range(1,12) %}{%- if p == page1page|int %}"p[{{p}}].b[1].bco2={{trigger.payload}}"{%- else -%}"p[{{p}}].b[1].bco={{trigger.payload}}"{%- endif -%},{%- endfor -%}
{%- for p in range(1,12) %}{%- if p == page2page|int %}"p[{{p}}].b[2].bco2={{trigger.payload}}"{%- else -%}"p[{{p}}].b[2].bco={{trigger.payload}}"{%- endif -%},{%- endfor -%}
{%- for p in range(1,12) %}{%- if p == page3page|int %}"p[{{p}}].b[3].bco2={{trigger.payload}}"{%- else -%}"p[{{p}}].b[3].bco={{trigger.payload}}"{%- endif -%}{% if not loop.last %},{% endif %}{%- endfor -%}]
- conditions:
- condition: template
value_template: "{{ (trigger.platform == 'mqtt') and (trigger.topic == unselectedbgtopic) and page_scroll }}"
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{%- for p in range(1,12) %}"p[{{p}}].b[1].bco={{trigger.payload}}",{%- endfor -%}
{%- for p in range(1,12) %}{%- if p == page2page|int %}"p[{{p}}].b[2].bco2={{trigger.payload}}"{%- else -%}"p[{{p}}].b[2].bco={{trigger.payload}}"{%- endif -%},{%- endfor -%}
{%- for p in range(1,12) %}"p[{{p}}].b[3].bco={{trigger.payload}}"{% if not loop.last %},{% endif %}{%- endfor -%}]

View File

@ -0,0 +1,145 @@
blueprint:
name: "HASP create device triggers"
description: |
# Description
Create [Device Triggers](https://www.home-assistant.io/integrations/device_trigger.mqtt/) for each of the HASP buttons defined below. Device triggers can be utilized while creating your own automations through the Home Assistant UI.
This allows for the easy creation of automations which will be triggered when pressing buttons on your HASP.
## HASP Page and Button Reference
The images below show each available HASP page along with the layout of available button objects.
<details>
| Page 0 | Pages 1-3 | Pages 4-5 |
|--------|-----------|-----------|
| ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p4-p5_3sliders.png) |
| Page 6 | Page 7 | Page 8 |
|--------|--------|--------|
| ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) |
| Page 9 | Page 10 | Page 11 |
|--------|---------|---------|
| ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p11_1button.png)
</details>
source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Create_Device_Triggers.yaml"
domain: automation
input:
haspdevice:
name: "HASP Device"
description: "Select the HASP device"
selector:
device:
integration: mqtt
manufacturer: "HASwitchPlate"
model: "HASPone v1.0.0"
objects:
name: "HASP buttons"
description: "Create one device trigger for each button in this list."
default:
- p[1].b[4]
- p[1].b[5]
- p[1].b[6]
- p[1].b[7]
selector:
object:
mode: parallel
max_exceeded: silent
variables:
haspdevice: !input haspdevice
objects: !input objects
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
statetopic: '{{ "hasp/" ~ haspname ~ "/state" }}'
haspsensor: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
haspClientId: '{{state_attr(haspsensor, "haspClientID")}}'
haspManufacturer: '{{state_attr(haspsensor, "haspManufacturer")}}'
haspModel: '{{state_attr(haspsensor, "haspModel")}}'
sw_version: '{{state_attr(haspsensor, "espVersion")}}'
trigger_variables:
haspdevice: !input haspdevice
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
haspsensor: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
trigger:
- platform: mqtt
topic: "{{jsontopic}}"
payload: "online"
value_template: "{{ value_json.event }}"
- platform: homeassistant
event: start
condition:
- condition: template
value_template: "{{ is_state(haspsensor, 'ON') }}"
action:
- repeat:
count: "{{objects|length}}"
sequence:
- service: mqtt.publish
data:
topic: "homeassistant/device_automation/{{haspname}}/{{objects[repeat.index-1]|replace('.','')|replace('[','')|replace(']','')}}-ON/config"
payload: >-
{"automation_type":"trigger",
"payload":"ON",
"topic":"hasp/{{haspname}}/state/{{objects[repeat.index-1]}}",
"type":"button_short_press",
"subtype":"{{objects[repeat.index-1]}}",
"device":{
"identifiers":["{{haspClientId}}"],
"name":"{{haspname}}",
"manufacturer":"{{haspManufacturer}}",
"model":"{{haspModel}}",
"sw_version":{{sw_version}}
}}
- service: mqtt.publish
data:
topic: "homeassistant/device_automation/{{haspname}}/{{objects[repeat.index-1]|replace('.','')|replace('[','')|replace(']','')}}-OFF/config"
payload: >-
{"automation_type":"trigger",
"payload":"OFF",
"topic":"hasp/{{haspname}}/state/{{objects[repeat.index-1]}}",
"type":"button_short_release",
"subtype":"{{objects[repeat.index-1]}}",
"device":{
"identifiers":["{{haspClientId}}"],
"name":"{{haspname}}",
"manufacturer":"{{haspManufacturer}}",
"model":"{{haspModel}}",
"sw_version":{{sw_version}}
}}

View File

@ -0,0 +1,469 @@
blueprint:
name: "HASP p[7].b[all] displays an alarm control panel"
description: |
# Description
Page 7 controls a selected alarm panel for code entry and arm/disarm.
![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Alarm_Control_page7.png)
## HASP Page and Button Reference
<details>
This automation is designed to work with the controls found on page 7:
| Page 7 |
|--------|
| ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) |
</details>
source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Alarm_Control_page7.yaml"
domain: automation
input:
haspdevice:
name: "HASP Device"
description: "Select the HASP device"
selector:
device:
integration: mqtt
manufacturer: "HASwitchPlate"
model: "HASPone v1.0.0"
alarmpanel:
name: "Alarm panel to control"
description: "Select an alarm panel to control"
selector:
entity:
domain: alarm_control_panel
codelength:
name: "Alarm code length"
description: "Select the alarm code length for your alarm (usually 4 digits)."
default: 4
selector:
number:
min: 2
max: 10
mode: slider
armservice:
name: "Alarm arm service"
description: 'Enter the alarm service call to issue when the ARM button is pressed. Typically this is one of "alarm_arm_away", "alarm_arm_home", "alarm_arm_night", or "alarm_arm_custom_bypass".'
default: "alarm_arm_away"
selector:
text:
mode: parallel
max_exceeded: silent
variables:
haspdevice: !input haspdevice
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
alarmpanel: !input alarmpanel
codelength: !input codelength
armservice: !input armservice
commandtopic: '{{ "hasp/" ~ haspname ~ "/command/" }}'
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
jsoncommandtopic: '{{ "hasp/" ~ haspname ~ "/command/json" }}'
haspsensor: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
haspIP: '{{state_attr(haspsensor, "haspIP")}}'
haspClientId: '{{state_attr(haspsensor, "haspClientID")}}'
haspMac: '{{state_attr(haspsensor, "haspMac")}}'
haspManufacturer: '{{state_attr(haspsensor, "haspManufacturer")}}'
haspModel: '{{state_attr(haspsensor, "haspModel")}}'
sw_version: '{{state_attr(haspsensor, "espVersion")}}'
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
selectedfg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
selectedbg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
unselectedfg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
unselectedbg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
alarmstate: '{% if states(alarmpanel)|lower == "disarmed" %}disarmed{% elif states(alarmpanel)|lower == "arming" %}arming{% else %}armed{% endif %}'
alarmstate_text: '{% if alarmstate == "disarmed" %}not\\rarmed{% elif alarmstate == "arming" %}arming{% else %}armed{% endif %}'
alarmaction_text: '{% if alarmstate == "disarmed" %}arm{% else %}disarm{% endif %}'
armservice_name: '{{"alarm_control_panel." ~ armservice}}'
trigger_variables:
haspdevice: !input haspdevice
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
haspsensor: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
trigger:
- platform: state
entity_id: !input alarmpanel
- platform: homeassistant
event: start
- platform: mqtt
topic: "{{jsontopic}}"
- platform: mqtt
topic: "{{selectedfgtopic}}"
- platform: mqtt
topic: "{{selectedbgtopic}}"
- platform: mqtt
topic: "{{unselectedfgtopic}}"
- platform: mqtt
topic: "{{unselectedbgtopic}}"
condition:
- condition: template
value_template: "{{ is_state(haspsensor, 'ON') }}"
action:
- choose:
#########################################################################
# RUN ACTIONS or Home Assistant Startup or HASP Connect
- conditions:
- condition: template
value_template: "{{ (trigger is not defined) or ((trigger.platform == 'homeassistant') and (trigger.event == 'start')) or ((trigger.platform == 'mqtt') and (trigger.topic == jsontopic) and (trigger.payload_json.event == 'online'))}}"
sequence:
# Apply themes and set numbered button labels
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{%- for i in range(4,15) if not i == 13 -%}
"p[7].b[{{i}}].pco={{selectedfg}}",
"p[7].b[{{i}}].bco={{selectedbg}}",
"p[7].b[{{i}}].pco2={{unselectedfg}}",
"p[7].b[{{i}}].bco2={{unselectedbg}}",
"p[7].b[{{i}}].font=3",{%- endfor -%}
{%- for i in range(4,13) -%}
"p[7].b[{{i}}].txt=\"{{i-3}}\"",{%- endfor -%}
"p[7].b[14].txt=\"0\""]
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
["p[7].b[13].font=6",
"p[7].b[15].font=6",
{%- if alarmstate == "disarmed" -%}
"p[7].b[13].pco={{selectedfg}}",
"p[7].b[13].bco={{selectedbg}}",
"p[7].b[13].pco2={{unselectedfg}}",
"p[7].b[13].bco2={{unselectedbg}}",
"p[7].b[15].pco={{selectedfg}}",
"p[7].b[15].bco={{selectedbg}}",
"p[7].b[15].pco2={{unselectedfg}}",
"p[7].b[15].bco2={{unselectedbg}}",
{%- else -%}
"p[7].b[13].pco={{unselectedfg}}",
"p[7].b[13].bco={{unselectedbg}}",
"p[7].b[13].pco2={{selectedfg}}",
"p[7].b[13].bco2={{selectedbg}}",
"p[7].b[15].pco={{unselectedfg}}",
"p[7].b[15].bco={{unselectedbg}}",
"p[7].b[15].pco2={{selectedfg}}",
"p[7].b[15].bco2={{selectedbg}}",
{%- endif -%}
"p[7].b[13].txt=\"{{alarmstate_text}}\"",
"p[7].b[15].txt=\"{{alarmaction_text}}\""]
- repeat:
count: "{{codelength}}"
sequence:
# create number objects for each digit in codelength
- service: mqtt.publish
data:
topic: "homeassistant/number/{{haspname}}/alarmcode_{{repeat.index}}/config"
payload: >-
{"name":"{{haspname}} alarmcode {{repeat.index}}",
"command_topic":"hasp/{{haspname}}/alarmcode/{{repeat.index}}",
"availability":{"topic":"hasp/{{haspname}}/alwayson","payload_available":"ON"},
"optimistic":"true",
"icon":"mdi:bell-plus-outline",
"unique_id":"{{haspClientId}}-alarmcode_{{repeat.index}}",
"device":{
"identifiers":["{{haspClientId}}"],
"name":"{{haspname}}",
"manufacturer":"{{haspManufacturer}}",
"model":"{{haspModel}}",
"sw_version":{{sw_version}}
}}
- delay: "00:00:01"
- repeat:
count: "{{codelength}}"
sequence:
# set initial bogus value for each digit in codelength
- service: number.set_value
data:
entity_id: "number.{{haspname}}_alarmcode_{{repeat.index}}"
value: -1
#########################################################################
# Update alarm state if the selected alarm panel entity changes state
- conditions:
- condition: template
value_template: '{{ (trigger.platform == "state") and (trigger.entity_id == alarmpanel) }}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{%- if alarmstate == "disarmed" -%}
"p[7].b[13].pco={{selectedfg}}",
"p[7].b[13].bco={{selectedbg}}",
"p[7].b[13].pco2={{unselectedfg}}",
"p[7].b[13].bco2={{unselectedbg}}",
"p[7].b[15].pco={{selectedfg}}",
"p[7].b[15].bco={{selectedbg}}",
"p[7].b[15].pco2={{unselectedfg}}",
"p[7].b[15].bco2={{unselectedbg}}",
{%- else -%}
"p[7].b[13].pco={{unselectedfg}}",
"p[7].b[13].bco={{unselectedbg}}",
"p[7].b[13].pco2={{selectedfg}}",
"p[7].b[13].bco2={{selectedbg}}",
"p[7].b[15].pco={{unselectedfg}}",
"p[7].b[15].bco={{unselectedbg}}",
"p[7].b[15].pco2={{selectedfg}}",
"p[7].b[15].bco2={{selectedbg}}",
{%- endif -%}
"p[7].b[13].txt=\"{{alarmstate_text}}\"",
"p[7].b[15].txt=\"{{alarmaction_text}}\""]
#########################################################################
# Handle MQTT message triggers
- conditions:
- condition: template
value_template: '{{ trigger.platform == "mqtt" }}'
sequence:
- choose:
#########################################################################
# Catch incoming JSON button presses
- conditions:
- condition: template
value_template: '{{ (trigger.topic == jsontopic) and (trigger.payload_json is defined) and (trigger.payload_json.event_type is defined) and (trigger.payload_json.event_type == "button_short_press") }}'
sequence:
- choose:
#########################################################################
# Catch a number button
- conditions:
- condition: template
value_template: >-
{% set page = trigger.payload_json.event.split("].b[")[0] | replace("p[","") | int %}
{% set button = trigger.payload_json.event.split("].b[")[1] | replace("]","") | int %}
{% if page == 7 and (button >= 4 and button <= 12) or button == 14%}{{true}}{% endif %}
sequence:
- repeat:
count: "{{(codelength|int) - 1}}"
sequence:
# roll existing number entries forward into the next number
- service: number.set_value
data:
entity_id: "number.{{haspname}}_alarmcode_{{(codelength|int) - repeat.index + 1}}"
value: '{{states("number." ~ haspname ~ "_alarmcode_" ~ ((codelength|int) - repeat.index))|int}}'
- service: number.set_value
data:
entity_id: "number.{{haspname}}_alarmcode_1"
value: >-
{%- set button = trigger.payload_json.event.split("].b[")[1] | replace("]","") | int - 3 -%}
{%- if button == 11 %}{% set button = 0 -%}{%- endif -%}
{{button|int}}
#########################################################################
# Arm was pressed
- conditions:
- condition: template
value_template: '{{ (trigger.topic == jsontopic) and (trigger.payload_json.event == "p[7].b[15]") and (trigger.payload_json.value == "ON") and (alarmstate == "disarmed")}}'
sequence:
- service_template: "{{armservice_name}}"
data:
entity_id: !input alarmpanel
code: >-
{%- set code = namespace() -%}
{%- set code.value = states("number.plate01_alarmcode_" ~ codelength)|int -%}
{%- for i in range(1,codelength|int) -%}
{%- set code.value = code.value|int * 10 + (states("number.plate01_alarmcode_" ~ (codelength|int - i))|int) -%}
{%- endfor -%}
{{code.value|int}}
- repeat:
count: "{{codelength}}"
sequence:
# clear out code entry after arm attempt
- service: number.set_value
data:
entity_id: "number.{{haspname}}_alarmcode_{{repeat.index}}"
value: -1
#########################################################################
# Disarm was pressed
- conditions:
- condition: template
value_template: '{{ (trigger.topic == jsontopic) and (trigger.payload_json.event == "p[7].b[15]") and (trigger.payload_json.value == "ON")}}'
sequence:
- service: alarm_control_panel.alarm_disarm
data:
entity_id: !input alarmpanel
code: >-
{%- set code = namespace() -%}
{%- set code.value = states("number.plate01_alarmcode_" ~ codelength)|int -%}
{%- for i in range(1,codelength|int) -%}
{%- set code.value = code.value|int * 10 + (states("number.plate01_alarmcode_" ~ (codelength|int - i))|int) -%}
{%- endfor -%}
{{code.value|int}}
- repeat:
count: "{{codelength}}"
sequence:
# clear out code entry after disarm attempt
- service: number.set_value
data:
entity_id: "number.{{haspname}}_alarmcode_{{repeat.index}}"
value: -1
#########################################################################
# Theme: Apply selected foreground color when it changes.
- conditions:
- condition: template
value_template: "{{ trigger.topic == selectedfgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{%- for i in range(4,15) if not i == 13 -%}
"p[7].b[{{i}}].pco={{selectedfg}}",{%- endfor -%}
{%- if alarmstate == "disarmed" -%}
"p[7].b[13].pco={{selectedfg}}",
"p[7].b[15].pco={{selectedfg}}"
{%- else -%}
"p[7].b[13].pco2={{selectedfg}}",
"p[7].b[15].pco2={{selectedfg}}"
{%- endif -%}]
#########################################################################
# Theme: Apply selected background color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == selectedbgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{%- for i in range(4,15) if not i == 13 -%}
"p[7].b[{{i}}].bco={{selectedbg}}",{%- endfor -%}
{%- if alarmstate == "disarmed" -%}
"p[7].b[13].bco={{selectedbg}}",
"p[7].b[15].bco={{selectedbg}}"
{%- else -%}
"p[7].b[13].bco2={{selectedbg}}",
"p[7].b[15].bco2={{selectedbg}}"
{%- endif -%}]
#########################################################################
# Theme: Apply unselected foreground color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == unselectedfgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{%- for i in range(4,15) if not i == 13 -%}
"p[7].b[{{i}}].pco2={{unselectedfg}}",{%- endfor -%}
{%- if alarmstate == "disarmed" -%}
"p[7].b[13].pco2={{unselectedfg}}",
"p[7].b[15].pco2={{unselectedfg}}"
{%- else -%}
"p[7].b[13].pco={{unselectedfg}}",
"p[7].b[15].pco={{unselectedfg}}"
{%- endif -%}]
#########################################################################
# Theme: Apply unselected background color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == unselectedbgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
[{%- for i in range(4,15) if not i == 13 -%}
"p[7].b[{{i}}].bco2={{unselectedbg}}",{%- endfor -%}
{%- if alarmstate == "disarmed" -%}
"p[7].b[13].bco2={{unselectedbg}}",
"p[7].b[15].bco2={{unselectedbg}}"
{%- else -%}
"p[7].b[13].bco={{unselectedbg}}",
"p[7].b[15].bco={{unselectedbg}}"
{%- endif -%}]

View File

@ -0,0 +1,332 @@
blueprint:
name: "HASP p[x].b[y] displays the month + date with a calendar icon"
description: |
# Description
A HASP button displays month + date on the right with a calendar icon on the left.
![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Calendar_with_Icon.png)
## HASP Page and Button Reference
<details>
This automation is designed to work with the full-width buttons found on pages 1-3
| Pages 1-3 |
|-----------|
| ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) |
</details>
source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Calendar_with_Icon.yaml"
domain: automation
input:
haspdevice:
name: "HASP Device"
description: "Select the HASP device"
selector:
device:
integration: mqtt
manufacturer: "HASwitchPlate"
model: "HASPone v1.0.0"
hasppage:
name: "HASP Page"
description: "Select the HASP page (1-3) for the calendar. Refer to the HASP Page and Button reference above."
default: 1
selector:
number:
min: 1
max: 3
mode: slider
haspbutton:
name: "HASP Button"
description: "Select the HASP button (4-7) for the calendar. Refer to the HASP Page and Button reference above."
default: 4
selector:
number:
min: 4
max: 7
mode: slider
mode: parallel
max_exceeded: silent
variables:
haspdevice: !input haspdevice
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
hasppage: !input hasppage
haspbutton: !input haspbutton
haspobject: '{{ "p[" ~ hasppage ~ "].b[" ~ haspbutton ~ "]" }}'
commandtopic: '{{ "hasp/" ~ haspname ~ "/command/" ~ haspobject }}'
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
jsoncommandtopic: '{{ "hasp/" ~ haspname ~ "/command/json" }}'
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
activepage: >-
{%- set activepage = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^number\..*_active_page(?:_\d+|)$") -%}
{%- set activepage.entity=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{% if states(activepage.entity)|lower == "none" %}-1{% else %}{{ states(activepage.entity) | int }}{% endif %}
selectedfg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
selectedbg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
unselectedfg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
unselectedbg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
text: '{{(now().strftime("%b "))~now().day}}'
font: 9
ypos: "{{(haspbutton|int - 4) * 67 + 2}}" # calculate the top pixel position based on the selected button
xpos: 0
icon: ""
iconwidth: 50
iconheight: 65
iconfont: 8
trigger_variables:
haspdevice: !input haspdevice
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
haspsensor: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
trigger:
- platform: time
at: "00:00:00"
- platform: homeassistant
event: start
- platform: mqtt
topic: "{{jsontopic}}"
- platform: mqtt
topic: "{{selectedfgtopic}}"
- platform: mqtt
topic: "{{selectedbgtopic}}"
- platform: mqtt
topic: "{{unselectedfgtopic}}"
- platform: mqtt
topic: "{{unselectedbgtopic}}"
condition:
- condition: template
value_template: "{{ is_state(haspsensor, 'ON') }}"
action:
- choose:
#########################################################################
# RUN ACTIONS or Home Assistant Startup or HASP Connect
# Apply styles, place text, and then place icon if our target page is currently active
- conditions:
- condition: template
value_template: >-
{{-
(trigger is not defined)
or
((trigger.platform == 'homeassistant') and (trigger.event == 'start'))
or
((trigger.platform == 'mqtt') and (trigger.topic == jsontopic) and (trigger.payload_json.event == 'online'))
-}}
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
["{{haspobject}}.font={{font}}",
"{{haspobject}}.xcen=2",
"{{haspobject}}.ycen=1",
"{{haspobject}}.pco={{selectedfg}}",
"{{haspobject}}.bco={{selectedbg}}",
"{{haspobject}}.pco2={{unselectedfg}}",
"{{haspobject}}.bco2={{unselectedbg}}",
"{{haspobject}}.txt=\"{{text}} \""
{%- if activepage|int == hasppage|int -%}
,"delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""
{%- endif -%}]
#########################################################################
# Update the calendar text every day at midnight. If the selected page is currently active, also place the icon.
- conditions: #
- condition: template
value_template: '{{ trigger.platform == "time" }}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
["{{haspobject}}.txt=\"{{text}} \""
{%- if activepage|int == hasppage|int -%}
,"delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""
{%- endif -%}]
#########################################################################
# Catch MQTT events
- conditions:
- condition: template
value_template: '{{ trigger.platform == "mqtt" }}'
sequence:
- choose:
#########################################################################
# Catch incoming JSON messages
- conditions:
- condition: template
value_template: "{{ (trigger.topic == jsontopic) and trigger.payload_json is defined }}"
sequence:
- choose:
#########################################################################
# Icon overlay
- conditions: # Somebody pressed our button which hides the overlaid icon. Put it back.
- condition: template
value_template: '{{ (trigger.topic == jsontopic ) and (trigger.payload_json.event == haspobject ) and (trigger.payload_json.value == "OFF") }}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'
- conditions: # Page changed to our page, so place the icon on the screen.
- condition: template
value_template: '{{ (trigger.topic == jsontopic ) and (trigger.payload_json.event == "page" ) and (trigger.payload_json.value == hasppage|int) }}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply selected foreground color when it changes.
# Any change to the button will remove the overlaid icon.
- conditions:
- condition: template
value_template: "{{ trigger.topic == selectedfgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.pco"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{trigger.payload}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply selected background color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == selectedbgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.bco"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply unselected foreground color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == unselectedfgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.pco2"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply unselected background color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == unselectedbgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.bco2"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'

View File

@ -0,0 +1,362 @@
blueprint:
name: "HASP p[x].b[y] displays a clock"
description: |
# Description
A HASP button displays a clock with configurable text options.
![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Clock.png)
## HASP Page and Button Reference
The images below show each available HASP page along with the layout of available button objects.
<details>
| Page 0 | Pages 1-3 | Pages 4-5 |
|--------|-----------|-----------|
| ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p4-p5_3sliders.png) |
| Page 6 | Page 7 | Page 8 |
|--------|--------|--------|
| ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) |
| Page 9 | Page 10 | Page 11 |
|--------|---------|---------|
| ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p11_1button.png)
</details>
## HASP Font Reference
<details>
The Nextion display supports monospaced and proportional fonts. For monospace fonts, the HASP project includes [Consolas](https://docs.microsoft.com/en-us/typography/font-list/consolas) monospace in 4 sizes, [Webdings](https://en.wikipedia.org/wiki/Webdings#Character_set) in 1 size, and [Google's "Noto Sans"](https://github.com/googlefonts/noto-fonts) proportional in 5 sizes
| Font | Name | Characters per line | Lines per button |
| :--- | :---------------- | :-------------------| :--------------- |
| 0 | Consolas 24 | 20 characters | 2 lines |
| 1 | Consolas 32 | 15 characters | 2 lines |
| 2 | Consolas 48 | 10 characters | 1 line |
| 3 | Consolas 80 | 6 characters | 1 line |
| 4 | Webdings 56 | 8 characters | 1 line |
| 5 | Noto Sans 24 | Proportional | 2 lines |
| 6 | Noto Sans 32 | Proportional | 2 lines |
| 7 | Noto Sans 48 | Proportional | 1 line |
| 8 | Noto Sans 64 | Proportional | 1 line |
| 9 | Noto Sans 80 | Proportional | 1 line |
| 10 | Noto Sans Bold 80 | Proportional | 1 line |
### Icons
Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/Images/hasp-fontawesome5.html)
### Font examples
![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_8-10.png)
</details>
source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Clock.yaml"
domain: automation
input:
haspdevice:
name: "HASP Device"
description: "Select the HASP device"
selector:
device:
integration: mqtt
manufacturer: "HASwitchPlate"
model: "HASPone v1.0.0"
hasppage:
name: "HASP Page"
description: "Select the HASP page (1-11) for the clock. Refer to the HASP Page and Button reference above."
default: 1
selector:
number:
min: 1
max: 11
mode: slider
haspbutton:
name: "HASP Button"
description: "Select the HASP button (4-15) for the clock. Refer to the HASP Page and Button reference above."
default: 4
selector:
number:
min: 4
max: 15
mode: slider
font_select:
name: "Clock Font"
description: "Select the font for the clock. Refer to the HASP Font reference above."
default: "8 - Noto Sans 64"
selector:
select:
options:
- "0 - Consolas 24"
- "1 - Consolas 32"
- "2 - Consolas 48"
- "3 - Consolas 80"
- "4 - Webdings 56"
- "5 - Noto Sans 24"
- "6 - Noto Sans 32"
- "7 - Noto Sans 48"
- "8 - Noto Sans 64"
- "9 - Noto Sans 80"
- "10 - Noto Sans Bold 80"
xcen_select:
name: "Text horizontal alignment"
description: "Horizontal text alignment: 0=Left 1=Center 2=Right"
default: "1 - Centered"
selector:
select:
options:
- "0 - Left aligned"
- "1 - Centered"
- "2 - Right aligned"
ycen_select:
name: "Text vertical alignment"
description: "Vertical text alignment: 0=Top 1=Center 2=Bottom"
default: "1 - Centered"
selector:
select:
options:
- "0 - Top aligned"
- "1 - Centered"
- "2 - Bottom aligned"
hour24:
name: "24 hour clock display"
default: false
selector:
boolean:
ampm:
name: "AM/PM suffix"
default: false
selector:
boolean:
wrap:
name: "Text wrap"
default: false
description: "Enable line-wrapping text if too long to fit in the button."
selector:
boolean:
mode: parallel
max_exceeded: silent
variables:
haspdevice: !input haspdevice
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
haspsensor: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
hasppage: !input hasppage
haspbutton: !input haspbutton
font_select: !input font_select
font: '{{ font_select.split(" - ")[0] | int }}'
xcen_select: !input xcen_select
xcen: '{{ xcen_select.split(" - ")[0] | int }}'
ycen_select: !input ycen_select
ycen: '{{ ycen_select.split(" - ")[0] | int }}'
hour24: !input hour24
ampm: !input ampm
wrap: !input wrap
isbr: "{% if wrap == true %}1{% else %}0{% endif %}"
haspobject: '{{ "p[" ~ hasppage ~ "].b[" ~ haspbutton ~ "]" }}'
commandtopic: '{{ "hasp/" ~ haspname ~ "/command/" ~ haspobject }}'
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
statetopic: '{{ "hasp/" ~ haspname ~ "/state" }}'
jsoncommandtopic: '{{ "hasp/" ~ haspname ~ "/command/json" }}'
text: '{%- if hour24 == true -%}{%- set hourformat="%-H" -%}{%- else %}{%- set hourformat="%I" -%}{%- endif -%}{{(now().strftime(hourformat)|int)~now().strftime(":%M")}} {% if ampm == true %}{{now().strftime("%p")|lower}}{% endif %}'
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
selectedfg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
selectedbg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
unselectedfg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
unselectedbg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
trigger_variables:
haspdevice: !input haspdevice
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
haspsensor: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
trigger:
- platform: time_pattern
seconds: 0
- platform: mqtt
topic: "{{jsontopic}}"
payload: "online"
value_template: "{{ value_json.event }}"
- platform: homeassistant
event: start
- platform: mqtt
topic: "{{selectedfgtopic}}"
- platform: mqtt
topic: "{{selectedbgtopic}}"
- platform: mqtt
topic: "{{unselectedfgtopic}}"
- platform: mqtt
topic: "{{unselectedbgtopic}}"
condition:
- condition: template
value_template: "{{ is_state(haspsensor, 'ON') }}"
action:
- choose:
#########################################################################
# RUN ACTIONS or Home Assistant Startup or HASP Connect
# Display clock and apply text style
- conditions:
- condition: template
value_template: >-
{{-
(trigger is not defined)
or
((trigger.platform == 'homeassistant') and (trigger.event == 'start'))
or
((trigger.platform == 'mqtt') and (trigger.topic == jsontopic) and (trigger.payload_json.event == 'online'))
-}}
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
["{{haspobject}}.font={{font}}",
"{{haspobject}}.xcen={{xcen}}",
"{{haspobject}}.ycen={{ycen}}",
"{{haspobject}}.isbr={{isbr}}",
"{{haspobject}}.pco={{selectedfg}}",
"{{haspobject}}.bco={{selectedbg}}",
"{{haspobject}}.pco2={{unselectedfg}}",
"{{haspobject}}.bco2={{unselectedbg}}",
"{{haspobject}}.txt=\"{{text}}\""]
#########################################################################
# Update the clock text
- conditions:
- condition: template
value_template: "{{ trigger.platform == 'time_pattern' }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.txt"
payload: '"{{text}}"'
#########################################################################
# Theme: Apply selected foreground color
- conditions:
- condition: template
value_template: "{{ trigger.platform == 'mqtt' and trigger.topic == selectedfgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.pco"
payload: "{{trigger.payload}}"
#########################################################################
# Theme: Apply selected background color
- conditions:
- condition: template
value_template: "{{ trigger.platform == 'mqtt' and trigger.topic == selectedbgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.bco"
payload: "{{trigger.payload}}"
#########################################################################
# Theme: Apply unselected foreground color
- conditions:
- condition: template
value_template: "{{ trigger.platform == 'mqtt' and trigger.topic == unselectedfgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.pco2"
payload: "{{trigger.payload}}"
#########################################################################
# Theme: Apply unselected background color
- conditions:
- condition: template
value_template: "{{ trigger.platform == 'mqtt' and trigger.topic == unselectedbgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.bco2"
payload: "{{trigger.payload}}"

View File

@ -0,0 +1,335 @@
blueprint:
name: "HASP p[x].b[y] displays a clock with a clock icon"
description: |
# Description
A HASP button displays a clock on the right with a clock icon on the left.
![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Clock_with_Icon.png)
## HASP Page and Button reference
<details>
This automation is designed to work with the full-width buttons found on pages 1-3
| Pages 1-3 |
|-----------|
| ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) |
</details>
source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Clock_with_Icon.yaml"
domain: automation
input:
haspdevice:
name: "HASP Device"
description: "Select the HASP device"
selector:
device:
integration: mqtt
manufacturer: "HASwitchPlate"
model: "HASPone v1.0.0"
hasppage:
name: "HASP Page"
description: "Select the HASP page (1-3) for the clock. Refer to the HASP Page and Button reference above."
default: 1
selector:
number:
min: 1
max: 3
mode: slider
haspbutton:
name: "HASP Button"
description: "Select the HASP button (4-7) for the clock. Refer to the HASP Page and Button reference above."
default: 4
selector:
number:
min: 4
max: 7
mode: slider
hour24:
name: "24 hour clock display"
default: false
selector:
boolean:
mode: parallel
max_exceeded: silent
variables:
haspdevice: !input haspdevice
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
hasppage: !input hasppage
haspbutton: !input haspbutton
hour24: !input hour24
haspobject: '{{ "p[" ~ hasppage ~ "].b[" ~ haspbutton ~ "]" }}'
commandtopic: '{{ "hasp/" ~ haspname ~ "/command/" ~ haspobject }}'
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
jsoncommandtopic: '{{ "hasp/" ~ haspname ~ "/command/json" }}'
activepage: >-
{%- set activepage = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^number\..*_active_page(?:_\d+|)$") -%}
{%- set activepage.entity=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{% if states(activepage.entity)|lower == "none" %}-1{% else %}{{ states(activepage.entity) | int }}{% endif %}
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
selectedfg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
selectedbg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
unselectedfg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
unselectedbg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
text: '{%- if hour24 == true -%}{%- set hourformat="%-H" -%}{%- else %}{%- set hourformat="%I" -%}{%- endif -%}{{(now().strftime(hourformat)|int)~now().strftime(":%M")}}'
font: 10
ypos: "{{(haspbutton|int - 4) * 67 + 2}}" # calculate the top pixel position based on the selected button
xpos: 0
icon: ""
iconwidth: 50
iconheight: 65
iconfont: 8
trigger_variables:
haspdevice: !input haspdevice
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
haspsensor: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
trigger:
- platform: time_pattern
seconds: 0
- platform: homeassistant
event: start
- platform: mqtt
topic: "{{jsontopic}}"
- platform: mqtt
topic: "{{selectedfgtopic}}"
- platform: mqtt
topic: "{{selectedbgtopic}}"
- platform: mqtt
topic: "{{unselectedfgtopic}}"
- platform: mqtt
topic: "{{unselectedbgtopic}}"
condition:
- condition: template
value_template: "{{ is_state(haspsensor, 'ON') }}"
action:
- choose:
#########################################################################
# RUN ACTIONS or Home Assistant Startup or HASP Connect
# Apply styles, place text, and then place icon if our target page is currently active
- conditions:
- condition: template
value_template: >-
{{-
(trigger is not defined)
or
((trigger.platform == 'homeassistant') and (trigger.event == 'start'))
or
((trigger.platform == 'mqtt') and (trigger.topic == jsontopic) and (trigger.payload_json.event == 'online'))
-}}
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
["{{haspobject}}.font={{font}}",
"{{haspobject}}.xcen=2",
"{{haspobject}}.ycen=1",
"{{haspobject}}.pco={{selectedfg}}",
"{{haspobject}}.bco={{selectedbg}}",
"{{haspobject}}.pco2={{unselectedfg}}",
"{{haspobject}}.bco2={{unselectedbg}}",
"{{haspobject}}.txt=\"{{text}} \""
{%- if activepage|int == hasppage|int -%}
,"delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""
{%- endif -%}]
#########################################################################
# Every minute, update the clock text. If the selected page is currently active, also place the icon.
- conditions:
- condition: template
value_template: '{{ trigger.platform == "time_pattern" }}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["{{haspobject}}.txt=\"{{text}} \""{%- if activepage|int == hasppage|int -%},"delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""{%- endif -%}]'
#########################################################################
# Catch MQTT events
- conditions:
- condition: template
value_template: '{{ trigger.platform == "mqtt" }}'
sequence:
- choose:
#########################################################################
# Catch incoming JSON messages
- conditions:
- condition: template
value_template: "{{ (trigger.topic == jsontopic) and trigger.payload_json is defined }}"
sequence:
- choose:
#########################################################################
# Icon overlay
- conditions: # Somebody pressed our button which hides the overlaid icon. Put it back.
- condition: template
value_template: '{{ (trigger.topic == jsontopic ) and (trigger.payload_json.event == haspobject ) and (trigger.payload_json.value == "OFF") }}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'
- conditions: # Page changed to our page, so place the icon on the screen.
- condition: template
value_template: '{{ (trigger.topic == jsontopic ) and (trigger.payload_json.event == "page" ) and (trigger.payload_json.value == hasppage|int) }}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply selected foreground color when it changes.
# Any change to the button will remove the overlaid icon.
- conditions:
- condition: template
value_template: "{{ trigger.topic == selectedfgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.pco"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{trigger.payload}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply selected background color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == selectedbgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.bco"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply unselected foreground color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == unselectedfgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.pco2"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply unselected background color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == unselectedbgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.bco2"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'

View File

@ -0,0 +1,453 @@
blueprint:
name: "HASP p[x].b[y] displays a dimmer with a toggle on/off icon"
description: |
# Description
A HASP button displays a dimmer control on page 4 and 5 with a toggle on/off icon to the left.
![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Dimmer_with_Icon.png)
## HASP Page and Button reference
<details>
This automation is designed to work with the silders and buttons found on pages 4 and 5
| Pages 4-5 |
|-----------|
| ![Pages 4-5](https://github.com/aderusha/HASwitchPlate/raw/dev/Documentation/Images/NextionUI_p4-p5_3sliders.png) |
</details>
source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Dimmer_with_Icon.yaml"
domain: automation
input:
haspdevice:
name: "HASP Device"
description: "Select the HASP device"
selector:
device:
integration: mqtt
manufacturer: "HASwitchPlate"
model: "HASPone v1.0.0"
hasppage:
name: "HASP Page"
description: "Select the HASP page (4 or 5) for the dimmer. Refer to the HASP Page and Button reference above."
default: 4
selector:
number:
min: 4
max: 5
mode: slider
haspbutton:
name: "HASP Button"
description: "Select the HASP button (7-9) for the dimmer. Refer to the HASP Page and Button reference above."
default: 7
selector:
number:
min: 7
max: 9
mode: slider
dimmer:
name: "Light to control"
description: "Select a light device which supports dimming"
selector:
entity:
domain: light
text_on:
name: "HASP Button Text On"
description: "Enter text to appear on the button above the dimmer when the selected device is ON."
default: "Dimmer"
selector:
text:
text_off:
name: "HASP Button Text Off"
description: "Enter text to appear on the button when the selected device is OFF. The default value of {{text_on}} will leave the text unchanged when the device turns on/off"
default: "{{text_on}}"
selector:
text:
font_select:
name: "HASP Button Font"
description: "Select the text font for this button label. Refer to the HASP Font reference above."
default: "6 - Noto Sans 32"
selector:
select:
options:
- "0 - Consolas 24"
- "1 - Consolas 32"
- "2 - Consolas 48"
- "3 - Consolas 80"
- "4 - Webdings 56"
- "5 - Noto Sans 24"
- "6 - Noto Sans 32"
- "7 - Noto Sans 48"
- "8 - Noto Sans 64"
- "9 - Noto Sans 80"
- "10 - Noto Sans Bold 80"
xcen_select:
name: "Text horizontal alignment"
description: "Horizontal text alignment: 0=Left 1=Center 2=Right"
default: "1 - Centered"
selector:
select:
options:
- "0 - Left aligned"
- "1 - Centered"
- "2 - Right aligned"
ycen_select:
name: "Text vertical alignment"
description: "Vertical text alignment: 0=Top 1=Center 2=Bottom"
default: "0 - Top aligned"
selector:
select:
options:
- "0 - Top aligned"
- "1 - Centered"
- "2 - Bottom aligned"
wrap:
name: "Text wrap"
description: "Enable line-wrapping text if too long to fit in the button."
default: false
selector:
boolean:
icon_on:
name: '"On" state icon'
description: 'Enter the icon to be shown when the selected entity is "on"'
default: ""
selector:
text:
icon_off:
name: '"Off" state icon'
description: 'Enter the icon to be shown when the selected entity is "off"'
default: ""
selector:
text:
mode: parallel
max_exceeded: silent
variables:
haspdevice: !input haspdevice
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
hasppage: !input hasppage
haspbutton: !input haspbutton
dimmer: !input dimmer
text_on: !input text_on
text_off: !input text_off
font_select: !input font_select
font: '{{ font_select.split(" - ")[0] | int }}'
xcen_select: !input xcen_select
xcen: '{{ xcen_select.split(" - ")[0] | int }}'
ycen_select: !input ycen_select
ycen: '{{ ycen_select.split(" - ")[0] | int }}'
wrap: !input wrap
icon_on: !input icon_on
icon_off: !input icon_off
dimmerbutton: "{{haspbutton|int}}"
togglebutton: "{{dimmerbutton-3}}"
dimmerobject: '{{ "p[" ~ hasppage ~ "].b[" ~ haspbutton ~ "]" }}'
toggleobject: '{{ "p[" ~ hasppage ~ "].b[" ~ togglebutton ~ "]" }}'
commandtopic: '{{ "hasp/" ~ haspname ~ "/command/" ~ dimmerobject }}'
togglecommandtopic: '{{ "hasp/" ~ haspname ~ "/command/" ~ toggleobject }}'
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
jsoncommandtopic: '{{ "hasp/" ~ haspname ~ "/command/json" }}'
isbr: "{% if wrap == true %}1{% else %}0{% endif %}"
activepage: >-
{%- set activepage = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^number\..*_active_page(?:_\d+|)$") -%}
{%- set activepage.entity=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{% if states(activepage.entity)|lower == "none" %}-1{% else %}{{ states(activepage.entity) | int }}{% endif %}
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
selectedfg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
selectedbg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
unselectedfg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
unselectedbg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
ypos: "{{(haspbutton|int - 7) * 90 + 32}}" # calculate the top pixel position based on the selected button
xpos: 0
icon: '{% if states(dimmer) == "on" %}{{icon_on}}{% else %}{{icon_off}}{% endif %}'
text: '{% if states(dimmer) == "on" %}{{text_on}}{% else %}{{text_off}}{% endif %}'
iconwidth: 60
iconheight: 65
iconfont: 8
brightness: '{{state_attr(dimmer, "brightness")|int}}'
trigger_variables:
haspdevice: !input haspdevice
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
haspsensor: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
trigger:
- platform: state
entity_id: !input dimmer
- platform: homeassistant
event: start
- platform: mqtt
topic: "{{jsontopic}}"
- platform: mqtt
topic: "{{selectedfgtopic}}"
- platform: mqtt
topic: "{{selectedbgtopic}}"
- platform: mqtt
topic: "{{unselectedfgtopic}}"
- platform: mqtt
topic: "{{unselectedbgtopic}}"
condition:
- condition: template
value_template: "{{ is_state(haspsensor, 'ON') }}"
action:
- choose:
#########################################################################
# RUN ACTIONS or Home Assistant Startup or HASP Connect
# Apply styles, place text, and then place icon if our target page is currently active
- conditions:
- condition: template
value_template: >-
{{-
(trigger is not defined)
or
((trigger.platform == 'homeassistant') and (trigger.event == 'start'))
or
((trigger.platform == 'mqtt') and (trigger.topic == jsontopic) and (trigger.payload_json.event == 'online'))
-}}
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
["{{toggleobject}}.txt=\"{{text}}\"",
"{{toggleobject}}.font={{font}}",
"{{toggleobject}}.xcen={{xcen}}",
"{{toggleobject}}.ycen={{ycen}}",
"{{toggleobject}}.pco={{selectedfg}}",
"{{toggleobject}}.bco={{selectedbg}}",
"{{toggleobject}}.pco2={{unselectedfg}}",
"{{toggleobject}}.bco2={{unselectedbg}}",
"{{dimmerobject}}.pco={{unselectedfg}}",
"{{dimmerobject}}.bco={{unselectedbg}}",
"{{dimmerobject}}.val={{brightness}}"
{%- if activepage|int == hasppage|int -%}
,"delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\"","vis {{dimmerbutton}},1"
{%- endif -%}]
#########################################################################
# Update display if our entity has changed state
- conditions: # dimmer has changed value, on/off state has also changed, and we're currently on the selected page
- condition: template
value_template: '{{ (trigger.platform == "state") and (trigger.entity_id == dimmer) and (trigger.from_state.state != trigger.to_state.state) and (activepage|int == hasppage|int) }}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["{{toggleobject}}.txt=\"{{text}}\"","{{dimmerobject}}.val={{brightness}}","delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'
- conditions: # dimmer has changed value, on/off state has also changed
- condition: template
value_template: '{{ (trigger.platform == "state") and (trigger.entity_id == dimmer) and (trigger.from_state.state != trigger.to_state.state) }}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["{{toggleobject}}.txt=\"{{text}}\"","{{dimmerobject}}.val={{brightness}}"]'
- conditions: # dimmer has changed value
- condition: template
value_template: '{{ (trigger.platform == "state") and (trigger.entity_id == dimmer) }}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["{{dimmerobject}}.val={{brightness}}"]'
#########################################################################
# Handle MQTT message triggers
- conditions:
- condition: template
value_template: '{{ trigger.platform == "mqtt" }}'
sequence:
- choose:
#########################################################################
# Catch incoming JSON messages
- conditions:
- condition: template
value_template: "{{ (trigger.topic == jsontopic) and trigger.payload_json is defined }}"
sequence:
- choose:
#########################################################################
# Primary function: Toggle a light when we press the button
- conditions:
- condition: template
value_template: '{{ (trigger.topic == jsontopic) and (trigger.payload_json.event == toggleobject) and (trigger.payload_json.value == "OFF") }}'
sequence:
- service: homeassistant.toggle
entity_id: !input dimmer
#########################################################################
# Primary function: Set the dimmer value when the HASP slider has moved
- conditions:
- condition: template
value_template: '{{ (trigger.topic == jsontopic) and (trigger.payload_json.event == dimmerobject ~ ".val") }}'
sequence:
- service: light.turn_on
entity_id: !input dimmer
data:
brightness: "{{trigger.payload_json.value}}"
#########################################################################
# Icon overlay
- conditions: # Page changed to our page, so place the icon on the screen.
- condition: template
value_template: '{{ (trigger.topic == jsontopic ) and (trigger.payload_json.event == "page" ) and (trigger.payload_json.value == hasppage|int) }}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["ref {{togglebutton}}","delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\"","delay=1","vis {{dimmerbutton}},1"]'
#########################################################################
# Theme: Apply selected foreground color when it changes.
# Any change to the button will remove the overlaid icon.
- conditions:
- condition: template
value_template: "{{ trigger.topic == selectedfgtopic }}"
sequence:
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{togglecommandtopic}}.pco"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{trigger.payload}},0,1,1,3,\"{{icon}}\"","delay=1","vis {{dimmerbutton}},1"]'
#########################################################################
# Theme: Apply selected background color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == selectedbgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{togglecommandtopic}}.bco"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{fgcolor}},0,1,1,3,\"{{icon}}\"","delay=1","vis {{dimmerbutton}},1"]'
#########################################################################
# Theme: Apply unselected foreground color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == unselectedfgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["{{toggleobject}}.pco2={{trigger.payload}}","{{dimmerobject}}.pco={{trigger.payload}}"]'
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{fgcolor}},0,1,1,3,\"{{icon}}\"","delay=1","vis {{dimmerbutton}},1"]'
#########################################################################
# Theme: Apply unselected background color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == unselectedbgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["{{toggleobject}}.bco2={{trigger.payload}}","{{dimmerobject}}.bco={{trigger.payload}}"]'
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{fgcolor}},0,1,1,3,\"{{icon}}\"","delay=1","vis {{dimmerbutton}},1"]'

View File

@ -0,0 +1,540 @@
blueprint:
name: "HASP p[x].b[y] displays the current temperature with icon and colors"
description: |
# Description
A HASP button displays the current temperature on the right with a dynamic thermometer icon on the left and (optional) colors.
![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Temperature_with_Icon_and_Colors.png)
## HASP Page and Button reference
<details>
This automation is designed to work with the full-width buttons found on pages 1-3
| Pages 1-3 |
|-----------|
| ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) |
</details>
## Nextion color codes
<details>
The Nextion environment utilizes RGB 565 encoding. [Use this handy convertor](https://nodtem66.github.io/nextion-hmi-color-convert/index.html) to select your colors and convert to the RGB 565 format.
Here are some example colors:
| Color | Code |
|--------|-------|
| White | 65535 |
| Black | 0 |
| Grey | 25388 |
| Red | 63488 |
| Green | 2016 |
| Blue | 31 |
| Yellow | 65504 |
| Orange | 64512 |
| Brown | 48192 |
</details>
source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Temperature_with_Icon_and_Colors.yaml"
domain: automation
input:
haspdevice:
name: "HASP Device"
description: "Select the HASP device"
selector:
device:
integration: mqtt
manufacturer: "HASwitchPlate"
model: "HASPone v1.0.0"
hasppage:
name: "HASP Page"
description: "Select the HASP page (1-3) for the temperature. Refer to the HASP Page and Button reference above."
default: 1
selector:
number:
min: 1
max: 3
mode: slider
haspbutton:
name: "HASP Button"
description: "Select the HASP button (4-7) for the temperature. Refer to the HASP Page and Button reference above."
default: 4
selector:
number:
min: 4
max: 7
mode: slider
weather_provider:
name: "Weather provider"
description: "Select the weather provider to obtain the current outdoor temperature. If a temperature sensor is selected below, that will override this selection."
default:
selector:
entity:
domain: weather
temperature_sensor:
name: "Temperature sensor"
description: "Select a temperature sensor. If selected, this state of this sensor will be displayed instead of the weather provider selected above."
default:
selector:
entity:
domain: sensor
temperature_attribute:
name: "Temperature sensor state or attribute to monitor"
description: 'Enter "state" to track the state of the sensor above, or enter an attribute name if the sensor has a specific attribute you want to track. Most uses will leave this set to "state".'
default: "state"
selector:
text:
suffix_select:
name: "Temperature display suffix"
description: "Suffix for temperature display."
default: "°"
selector:
select:
options:
- "No suffix"
- "°"
- "°F"
- "°C"
thermometer_empty_color:
name: "Thermometer empty color"
description: 'Icon color for an empty thermometer in Nextion RGB565 format (see "Nextion color codes" above for reference). -1 = Current theme foreground color, or 2047 = Ice blue'
default: 2047
selector:
number:
min: -1
max: 65535
mode: slider
thermometer_quarter_threshold:
name: "Thermometer one quarter threshold"
description: "Temperatures above this threshold will show a one-quarter full thermometer. Below, show an empty thermometer."
default: 0
selector:
number:
min: -20
max: 125
mode: slider
thermometer_quarter_color:
name: "Thermometer one quarter color"
description: "Icon color for a one-quarter full thermometer in Nextion RGB565 format. -1 = Current theme foreground color, or 31 = Blue"
default: 31
selector:
number:
min: -1
max: 65535
mode: slider
thermometer_half_threshold:
name: "Thermometer half threshold"
description: "Temperatures above this threshold will show a half full thermometer. This value must be higher than the value selected above."
default: 32
selector:
number:
min: -10
max: 125
mode: slider
thermometer_half_color:
name: "Thermometer half color"
description: "Icon color for a half full thermometer in Nextion RGB565 format. -1 = Current theme foreground color, or 1536 = Green"
default: 1536
selector:
number:
min: -1
max: 65535
mode: slider
thermometer_three_quarter_threshold:
name: "Thermometer three quarter threshold"
description: "Temperatures above this threshold will show a three-quarters full thermometer. This value must be higher than the value selected above."
default: 80
selector:
number:
min: 0
max: 125
mode: slider
thermometer_three_quarter_color:
name: "Thermometer three quarter color"
description: "Icon color for a three-quarter full thermometer in Nextion RGB565 format. -1 = Current theme foreground color, or 64512 = Orange"
default: 64512
selector:
number:
min: -1
max: 65535
mode: slider
thermometer_full_threshold:
name: "Thermometer full threshold"
description: "Temperatures above this threshold will show a full thermometer. This value must be higher than the value selected above."
default: 95
selector:
number:
min: 10
max: 125
mode: slider
thermometer_full_color:
name: "Thermometer full color"
description: "Icon color for a full thermometer in Nextion RGB565 format. -1 = Current theme foreground color, or 63488 = Red"
default: 63488
selector:
number:
min: -1
max: 65535
mode: slider
colortemp:
name: "Colorize temperature text"
description: "Also apply icon colors to text"
default: false
selector:
boolean:
mode: parallel
max_exceeded: silent
variables:
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
haspsensor: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
hasppage: !input hasppage
haspbutton: !input haspbutton
weather_provider: !input weather_provider
temperature_sensor: !input temperature_sensor
temperature_attribute: !input temperature_attribute
suffix_select: !input suffix_select
thermometer_empty_color: !input thermometer_empty_color
thermometer_quarter_threshold: !input thermometer_quarter_threshold
thermometer_quarter_color: !input thermometer_quarter_color
thermometer_half_threshold: !input thermometer_half_threshold
thermometer_half_color: !input thermometer_half_color
thermometer_three_quarter_threshold: !input thermometer_three_quarter_threshold
thermometer_three_quarter_color: !input thermometer_three_quarter_color
thermometer_full_threshold: !input thermometer_full_threshold
thermometer_full_color: !input thermometer_full_color
colortemp: !input colortemp
haspobject: '{{ "p[" ~ hasppage ~ "].b[" ~ haspbutton ~ "]" }}'
commandtopic: '{{ "hasp/" ~ haspname ~ "/command/" ~ haspobject }}'
jsoncommandtopic: '{{ "hasp/" ~ haspname ~ "/command/json" }}'
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
# temperature: '{{state_attr(weather_provider, "temperature")|int}}'
temperature: >-
{%- if temperature_sensor|lower == "none" -%}
{{- state_attr(weather_provider, "temperature") -}}
{%- elif temperature_attribute|lower == "state" -%}
{{- states(temperature_sensor) -}}
{%- else -%}
{{- state_attr(temperature_sensor, temperature_attribute) -}}
{%- endif -%}
icon: >-
{%- set temp = temperature|int -%}
{%- if temp <= thermometer_quarter_threshold|int -%}
{%- elif temp < thermometer_half_threshold|int -%}
{% elif temp < thermometer_three_quarter_threshold|int -%}
{%- elif temp < thermometer_full_threshold|int -%}
{%- else -%}
{%- endif -%}
suffixstring: "{% if suffix_select != 'No suffix' %}{{ suffix_select }}{% endif %}"
text: "{{temperature}}{{suffixstring}}"
font: 10
ypos: "{{(haspbutton|int - 4) * 67 + 2}}"
xpos: 0
iconwidth: 40
iconheight: 65
iconfont: 8
xcen: 2
ycen: 1
activepage: >-
{%- set activepage = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^number\..*_active_page(?:_\d+|)$") -%}
{%- set activepage.entity=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{% if states(activepage.entity)|lower == "none" %}-1{% else %}{{ states(activepage.entity) | int }}{% endif %}
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
selectedfg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
selectedbg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
unselectedfg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
unselectedbg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
tempcolor: >-
{%- set temp = temperature|int -%}
{%- if temp <= thermometer_quarter_threshold|int -%}
{%- set color = thermometer_empty_color -%}
{%- elif temp < thermometer_half_threshold|int -%}
{%- set color = thermometer_quarter_color -%}
{%- elif temp < thermometer_three_quarter_threshold|int -%}
{%- set color = thermometer_half_color -%}
{%- elif temp < thermometer_full_threshold|int -%}
{%- set color = thermometer_three_quarter_color -%}
{%- else -%}
{%- set color = thermometer_full_color -%}
{%- endif -%}
{%- if color|int < 0 -%}
{{- selectedfg -}}
{%- else -%}
{{- color -}}
{%- endif -%}
textcolor: >-
{%- if colortemp == true -%}
{{- tempcolor -}}
{%- else -%}
{{- selectedfg -}}
{%- endif -%}
trigger_variables:
haspdevice: !input haspdevice
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
haspsensor: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
trigger:
- platform: state
entity_id: !input weather_provider
- platform: homeassistant
event: start
- platform: mqtt
topic: "{{jsontopic}}"
- platform: mqtt
topic: "{{selectedfgtopic}}"
- platform: mqtt
topic: "{{selectedbgtopic}}"
- platform: mqtt
topic: "{{unselectedfgtopic}}"
- platform: mqtt
topic: "{{unselectedbgtopic}}"
condition:
- condition: template
value_template: "{{ is_state(haspsensor, 'ON') }}"
action:
- choose:
#########################################################################
# RUN ACTIONS or Home Assistant Startup or HASP Connect
# Apply styles, place text, and then place icon if our target page is currently active
- conditions:
- condition: template
value_template: >-
{{-
(trigger is not defined)
or
((trigger.platform == 'homeassistant') and (trigger.event == 'start'))
or
((trigger.platform == 'mqtt') and (trigger.topic == jsontopic) and (trigger.payload_json.event == 'online'))
-}}
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
["{{haspobject}}.font={{font}}",
"{{haspobject}}.xcen={{xcen}}",
"{{haspobject}}.ycen={{ycen}}",
"{{haspobject}}.pco={{textcolor}}",
"{{haspobject}}.bco={{selectedbg}}",
"{{haspobject}}.pco2={{unselectedfg}}",
"{{haspobject}}.bco2={{unselectedbg}}",
"{{haspobject}}.txt=\"{{text}} \""
{%- if activepage|int == hasppage|int -%}
,"delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{tempcolor}},0,1,1,3,\"{{icon}}\""
{%- endif -%}]
#########################################################################
# Update temperature if our weather provider changed state
- conditions:
- condition: template
value_template: '{{ (trigger.platform == "state") and (trigger.entity_id == weather_provider) }}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
["{{haspobject}}.pco={{textcolor}}",
"{{haspobject}}.txt=\"{{text}} \""
{%- if activepage|int == hasppage|int -%}
,"delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{tempcolor}},0,1,1,3,\"{{icon}}\""
{%- endif -%}]
#########################################################################
# Catch triggers fired by incoming MQTT messages
- conditions:
- condition: template
value_template: '{{ trigger.platform == "mqtt" }}'
sequence:
- choose:
#########################################################################
# Catch incoming JSON messages
- conditions:
- condition: template
value_template: "{{ (trigger.topic == jsontopic) and trigger.payload_json is defined }}"
sequence:
- choose:
#########################################################################
# Icon overlay
- conditions: # Somebody pressed our button which hides the overlaid icon. Put it back.
- condition: template
value_template: '{{ (trigger.topic == jsontopic ) and (trigger.payload_json.event == haspobject ) and (trigger.payload_json.value == "OFF") and (activepage|int == hasppage|int)}}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{tempcolor}},0,1,1,3,\"{{icon}}\""]'
- conditions: # Page changed to our page, so place the icon on the screen.
- condition: template
value_template: '{{ (trigger.topic == jsontopic ) and (trigger.payload_json.event == "page" ) and (trigger.payload_json.value == hasppage|int) }}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{tempcolor}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply selected foreground color when it changes.
# Any change to the button will remove the overlaid icon.
- conditions:
- condition: template
value_template: "{{ trigger.topic == selectedfgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.pco"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{tempcolor}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply selected background color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == selectedbgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.bco"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{tempcolor}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply unselected foreground color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == unselectedfgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.pco2"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{tempcolor}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply unselected background color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == unselectedbgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.bco2"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{tempcolor}},0,1,1,3,\"{{icon}}\""]'

View File

@ -0,0 +1,392 @@
blueprint:
name: "HASP p[x].b[y] displays the current weather condition with icons"
description: |
# Description
A HASP button displays the current weather condition on the right with a matching icon on the left
![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Weather_Condition_with_Icon.png)
## HASP Page and Button reference
<details>
This automation is designed to work with the full-width buttons found on pages 1-3
| Pages 1-3 |
|-----------|
| ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) |
</details>
source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Weather_Condition_with_Icon.yaml"
domain: automation
input:
haspdevice:
name: "HASP Device"
description: "Select the HASP device"
selector:
device:
integration: mqtt
manufacturer: "HASwitchPlate"
model: "HASPone v1.0.0"
hasppage:
name: "HASP Page"
description: "Select the HASP page (1-3) for the temperature"
default: 1
selector:
number:
min: 1
max: 3
mode: slider
haspbutton:
name: "HASP Button"
description: "Select the HASP button (4-7) for the temperature. Refer to the object map in the HASP documentation."
default: 4
selector:
number:
min: 4
max: 7
mode: slider
weather_provider:
name: "Weather provider"
description: "Select the weather provider to obtain the temperature"
selector:
entity:
domain: weather
mode: parallel
max_exceeded: silent
variables:
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
haspsensor: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
hasppage: !input hasppage
haspbutton: !input haspbutton
weather_provider: !input weather_provider
haspobject: '{{ "p[" ~ hasppage ~ "].b[" ~ haspbutton ~ "]" }}'
commandtopic: '{{ "hasp/" ~ haspname ~ "/command/" ~ haspobject }}'
jsoncommandtopic: '{{ "hasp/" ~ haspname ~ "/command/json" }}'
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
icon: >-
{%- set condition=states(weather_provider) -%}
{%- if condition == "clear-night" -%}
{%- elif condition == "cloudy" -%}
{%- elif condition == "fog" -%}
{%- elif condition == "hail" -%}
{%- elif condition == "lightning" -%}
{%- elif condition == "lightning-rainy" -%}
{%- elif condition == "partlycloudy" -%}
{%- elif condition == "pouring" -%}
{%- elif condition == "rainy" -%}
{%- elif condition == "snowy" -%}
{%- elif condition == "snowy-rainy" -%}
{%- elif condition == "sunny" -%}
{%- elif condition == "windy" -%}
{%- elif condition == "windy-variant" -%}
{%- elif condition == "exceptional" -%}
{%- else -%}
{%- endif -%}
text: >-
{{-
states(weather_provider) |
replace("windy-variant","windy") |
replace("clear-night","clear night") |
replace("partlycloudy","partly cloudy") |
replace("lightning-rainy","lightning & rain") |
replace("snowy-rainy","snow & rain") |
title
-}}
font: '{%set weatherlength=states(weather_provider)|length %}{% if weatherlength < 7 -%}8{% elif weatherlength < 12 %}7{% else %}6{%- endif %}'
ypos: "{{(haspbutton|int - 4) * 67 + 2}}"
xpos: 0
iconwidth: 65
iconheight: 65
iconfont: 8
xcen: 2
ycen: 1
activepage: >-
{%- set activepage = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^number\..*_active_page(?:_\d+|)$") -%}
{%- set activepage.entity=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{% if states(activepage.entity)|lower == "none" %}-1{% else %}{{ states(activepage.entity) | int }}{% endif %}
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
selectedfg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
selectedbg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
unselectedfg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
unselectedbg: >-
{%- set color = namespace() -%}
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%}
{%- set color.source=entity -%}
{{ break }}
{%- endif -%}
{%- endfor -%}
{%- set brightness = state_attr(color.source, "brightness")|int / 255 -%}
{%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%}
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
trigger_variables:
haspdevice: !input haspdevice
haspname: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\.") -%}
{{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
{{ break }}
{%- endif -%}
{%- endfor -%}
haspsensor: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}'
selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}'
unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}'
unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}'
trigger:
- platform: state
entity_id: !input weather_provider
- platform: homeassistant
event: start
- platform: mqtt
topic: "{{jsontopic}}"
- platform: mqtt
topic: "{{selectedfgtopic}}"
- platform: mqtt
topic: "{{selectedbgtopic}}"
- platform: mqtt
topic: "{{unselectedfgtopic}}"
- platform: mqtt
topic: "{{unselectedbgtopic}}"
condition:
- condition: template
value_template: "{{ is_state(haspsensor, 'ON') }}"
action:
- choose:
#########################################################################
# RUN ACTIONS or Home Assistant Startup or HASP Connect
# Apply styles, place text, and then place icon if our target page is currently active
- conditions:
- condition: template
value_template: >-
{{-
(trigger is not defined)
or
((trigger.platform == 'homeassistant') and (trigger.event == 'start'))
or
((trigger.platform == 'mqtt') and (trigger.topic == jsontopic) and (trigger.payload_json.event == 'online'))
-}}
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
["{{haspobject}}.font={{font}}",
"{{haspobject}}.xcen={{xcen}}",
"{{haspobject}}.ycen={{ycen}}",
"{{haspobject}}.pco={{selectedfg}}",
"{{haspobject}}.bco={{selectedbg}}",
"{{haspobject}}.pco2={{unselectedfg}}",
"{{haspobject}}.bco2={{unselectedbg}}",
"{{haspobject}}.txt=\"{{text}} \""
{%- if activepage|int == hasppage|int -%}
,"delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""
{%- endif -%}]
#########################################################################
# Update weather condition if our weather provider changed state
- conditions:
- condition: template
value_template: '{{ (trigger.platform == "state") and (trigger.entity_id == weather_provider) }}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: >-
["{{haspobject}}.pco={{selectedfg}}",
"{{haspobject}}.font={{font}}",
"{{haspobject}}.txt=\"{{text}} \""
{%- if activepage|int == hasppage|int -%}
,"delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""
{%- endif -%}]
#########################################################################
# Catch triggers fired by incoming MQTT messages
- conditions:
- condition: template
value_template: '{{ trigger.platform == "mqtt" }}'
sequence:
- choose:
#########################################################################
# Catch incoming JSON messages
- conditions:
- condition: template
value_template: "{{ (trigger.topic == jsontopic) and trigger.payload_json is defined }}"
sequence:
- choose:
#########################################################################
# Icon overlay
- conditions: # Somebody pressed our button which hides the overlaid icon. Put it back.
- condition: template
value_template: '{{ (trigger.topic == jsontopic ) and (trigger.payload_json.event == haspobject ) and (trigger.payload_json.value == "OFF") and (activepage|int == hasppage|int)}}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'
- conditions: # Page changed to our page, so place the icon on the screen.
- condition: template
value_template: '{{ (trigger.topic == jsontopic ) and (trigger.payload_json.event == "page" ) and (trigger.payload_json.value == hasppage|int) }}'
sequence:
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply selected foreground color when it changes.
# Any change to the button will remove the overlaid icon.
- conditions:
- condition: template
value_template: "{{ trigger.topic == selectedfgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.pco"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{trigger.payload}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply selected background color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == selectedbgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.bco"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply unselected foreground color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == unselectedfgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.pco2"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'
#########################################################################
# Theme: Apply unselected background color on change
- conditions:
- condition: template
value_template: "{{ trigger.topic == unselectedbgtopic }}"
sequence:
- service: mqtt.publish
data:
topic: "{{commandtopic}}.bco2"
payload: "{{trigger.payload}}"
- condition: template
value_template: "{{ activepage|int == hasppage|int }}"
- delay: "00:00:00.5"
- service: mqtt.publish
data:
topic: "{{jsoncommandtopic}}"
payload: '["delay=1","xstr {{xpos}},{{ypos}},{{iconwidth}},{{iconheight}},{{iconfont}},{{selectedfg}},0,1,1,3,\"{{icon}}\""]'

View File

@ -0,0 +1,139 @@
blueprint:
name: "HASP Remove MQTT discovery messages"
description: "Press RUN ACTIONS to remove retained MQTT discovery messages for a decommissioned HASP"
source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Remove_MQTT_Discovery_Devices.yaml"
domain: automation
input:
haspname:
name: "HASP device name to remove"
description: "Enter the name of the HASP device to remove the MQTT discovery messages"
mode: single
max_exceeded: silent
variables:
haspname: !input haspname
trigger: []
action:
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/status"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/command"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/command/page"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/state/page"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/sensor"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/light/state"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/brightness/state"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "homeassistant/binary_sensor/{{haspname}}/config"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "homeassistant/light/{{haspname}}/config"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "homeassistant/sensor/{{haspname}}/config"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "homeassistant/number/{{haspname}}/config"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "homeassistant/light/{{haspname}}/selectedforegroundcolor/config"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "homeassistant/light/{{haspname}}/selectedbackgroundcolor/config"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "homeassistant/light/{{haspname}}/unselectedforegroundcolor/config"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "homeassistant/light/{{haspname}}/unselectedbackgroundcolor/config"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/light/selectedforegroundcolor/switch"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/light/selectedforegroundcolor/rgb"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/light/selectedbackgroundcolor/switch"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/light/selectedbackgroundcolor/rgb"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/light/unselectedforegroundcolor/switch"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/light/unselectedforegroundcolor/rgb"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/light/unselectedbackgroundcolor/switch"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/light/unselectedbackgroundcolor/rgb"
payload: ""
retain: true
- service: mqtt.publish
data:
topic: "hasp/{{haspname}}/alwayson"
payload: ""
retain: true

View File

@ -0,0 +1,99 @@
blueprint:
name: "HASP Theme Dark on Light"
description: |
## Description
Press RUN ACTIONS to apply the theme Dark on Light to the selected HASP device
![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Theme_Dark_on_Light.png)
source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Theme_Dark_on_Light.yaml"
domain: automation
input:
haspdevice:
name: "HASP Device"
description: "Select the HASP device"
selector:
device:
integration: mqtt
manufacturer: "HASwitchPlate"
model: "HASPone v1.0.0"
mode: single
max_exceeded: silent
variables:
haspdevice: !input haspdevice
selectedfg_entity: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
selectedbg_entity: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
unselectedfg_entity: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
unselectedbg_entity: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
selected_foreground_brightness: "1"
selected_foreground_color: "[255, 255, 255]"
selected_background_brightness: "255"
selected_background_color: "[255, 255, 255]"
unselected_foreground_brightness: "224"
unselected_foreground_color: "[255, 255, 255]"
unselected_background_brightness: "96"
unselected_background_color: "[255, 255, 255]"
trigger: []
action:
- service: light.turn_on
data:
entity_id: "{{selectedfg_entity}}"
rgb_color: "{{selected_foreground_color}}"
- service: light.turn_on
data:
entity_id: "{{selectedfg_entity}}"
brightness: "{{selected_foreground_brightness}}"
- service: light.turn_on
data:
entity_id: "{{selectedbg_entity}}"
rgb_color: "{{selected_background_color}}"
- service: light.turn_on
data:
entity_id: "{{selectedbg_entity}}"
brightness: "{{selected_background_brightness}}"
- service: light.turn_on
data:
entity_id: "{{unselectedfg_entity}}"
rgb_color: "{{unselected_foreground_color}}"
- service: light.turn_on
data:
entity_id: "{{unselectedfg_entity}}"
brightness: "{{unselected_foreground_brightness}}"
- service: light.turn_on
data:
entity_id: "{{unselectedbg_entity}}"
rgb_color: "{{unselected_background_color}}"
- service: light.turn_on
data:
entity_id: "{{unselectedbg_entity}}"
brightness: "{{unselected_background_brightness}}"

View File

@ -0,0 +1,99 @@
blueprint:
name: "HASP Theme Light on Dark"
description: |
## Description
Press RUN ACTIONS to apply the theme Light on Dark to the selected HASP device
![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Theme_Light_on_Dark.png)
source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Theme_Light_on_Dark.yaml"
domain: automation
input:
haspdevice:
name: "HASP Device"
description: "Select the HASP device"
selector:
device:
integration: mqtt
manufacturer: "HASwitchPlate"
model: "HASPone v1.0.0"
mode: single
max_exceeded: silent
variables:
haspdevice: !input haspdevice
selectedfg_entity: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
selectedbg_entity: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
unselectedfg_entity: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
unselectedbg_entity: >-
{%- for entity in device_entities(haspdevice) -%}
{%- if entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%}
{{ entity }}
{{ break }}
{%- endif -%}
{%- endfor -%}
selected_foreground_brightness: "255"
selected_foreground_color: "[255, 255, 255]"
selected_background_brightness: "1"
selected_background_color: "[255, 255, 255]"
unselected_foreground_brightness: "224"
unselected_foreground_color: "[255, 255, 255]"
unselected_background_brightness: "64"
unselected_background_color: "[255, 255, 255]"
trigger: []
action:
- service: light.turn_on
data:
entity_id: "{{selectedfg_entity}}"
rgb_color: "{{selected_foreground_color}}"
- service: light.turn_on
data:
entity_id: "{{selectedfg_entity}}"
brightness: "{{selected_foreground_brightness}}"
- service: light.turn_on
data:
entity_id: "{{selectedbg_entity}}"
rgb_color: "{{selected_background_color}}"
- service: light.turn_on
data:
entity_id: "{{selectedbg_entity}}"
brightness: "{{selected_background_brightness}}"
- service: light.turn_on
data:
entity_id: "{{unselectedfg_entity}}"
rgb_color: "{{unselected_foreground_color}}"
- service: light.turn_on
data:
entity_id: "{{unselectedfg_entity}}"
brightness: "{{unselected_foreground_brightness}}"
- service: light.turn_on
data:
entity_id: "{{unselectedbg_entity}}"
rgb_color: "{{unselected_background_color}}"
- service: light.turn_on
data:
entity_id: "{{unselectedbg_entity}}"
brightness: "{{unselected_background_brightness}}"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

15
Nextion_HMI/README.md Normal file
View File

@ -0,0 +1,15 @@
# Nextion HMI
The Nextion panel ships with a default demo configuration which we need to overwrite with the included compiled code. The file [HASwitchPlate.tft](HASwitchPlate.tft) can be saved to a FAT32-formatted microSD card and placed into the panel before power on. The panel will recognize the code update and load it automatically, after which you're ready to connect to the microcontroller. Note that some users have reported problems with cards formatted under Linux, so use a Windows system for this process and it should work without trouble.
If you want to manually edit your own panels, [download the editor from Nextion](https://nextion.itead.cc/resource/download/nextion-editor/) and you can flash the panel directly via serial.
Please [check the Nextion HMI documentation](../Documentation/02_Nextion_HMI.md) for additional details.
## Nextion Files Explained
* **[HASwitchPlate.hmi](HASwitchPlate.hmi)** This is the "source" file which you can modify in the [Nextion editor](https://nextion.itead.cc/resource/download/nextion-editor/). If you want to make your own Nextion HMI, I'd recommend starting with this file, keeping Page 0 (`p0`), then start your own design on pages 1+.
* **[HASwitchPlate.tft](HASwitchPlate.tft)** This is the compiled Nextion firmware for the HASwitchPlate usable on a standard Nextion 2.4" LCD, model `NX3224T024_011R`
* **[HASwitchPlate-Enhanced.tft](HASwitchPlate-Enhanced.tft)** This is the compiled Nextion firmware for the HASwitchPlate usable on an enhanced Nextion 2.4" LCD, model `NX4024K032_011R`. This panel will not fit in the provided 3D printed enclosure and no enhanced features are used in this project. **Don't buy this panel**, but if you did (*and you shouldn't*), you can use this firmware.
* **[HASwitchPlate-TJC.hmi](HASwitchPlate-TJC.hmi)** This is the "source" file for the Chinese-market TJC LCD model `TJC3224T024_011`. This file cannot be used with the english language editor. If you purchase this panel, you will need to use the Chinese-language "USART HMI" editor to modify this file. **Don't buy this panel**.
* **[HASwitchPlate-TJC.tft](HASwitchPlate-TJC.tft)** This is the compiled Nextion firmware for the HASwitchPlate usable on a Chinese market TJC 2.4" LCD, model `TJC3224T024_011`.

200
PCB/HASwitchPlate-cache.lib Normal file
View File

@ -0,0 +1,200 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# Device_R_US
#
DEF Device_R_US R 0 0 N Y 1 F N
F0 "R" 100 0 50 V V C CNN
F1 "Device_R_US" -100 0 50 V V C CNN
F2 "" 40 -10 50 V I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
R_*
$ENDFPLIST
DRAW
P 2 0 1 0 0 -90 0 -100 N
P 2 0 1 0 0 90 0 100 N
P 5 0 1 0 0 -30 40 -45 0 -60 -40 -75 0 -90 N
P 5 0 1 0 0 30 40 15 0 0 -40 -15 0 -30 N
P 5 0 1 0 0 90 40 75 0 60 -40 45 0 30 N
X ~ 1 0 150 50 D 50 50 1 1 P
X ~ 2 0 -150 50 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# HASwitchPlate-library_Conn_01x08-conn-HASwitchPlate
#
DEF HASwitchPlate-library_Conn_01x08-conn-HASwitchPlate J 0 40 Y N 1 F N
F0 "J" 0 400 50 H V C CNN
F1 "HASwitchPlate-library_Conn_01x08-conn-HASwitchPlate" 0 -500 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_??x*mm*
Connector*:*1x??x*mm*
Pin?Header?Straight?1X*
Pin?Header?Angled?1X*
Socket?Strip?Straight?1X*
Socket?Strip?Angled?1X*
$ENDFPLIST
DRAW
S -50 -395 0 -405 1 1 6 N
S -50 -295 0 -305 1 1 6 N
S -50 -195 0 -205 1 1 6 N
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 105 0 95 1 1 6 N
S -50 205 0 195 1 1 6 N
S -50 305 0 295 1 1 6 N
S -50 350 50 -450 1 1 10 f
X Pin_1 1 -200 300 150 R 50 50 1 1 P
X Pin_2 2 -200 200 150 R 50 50 1 1 P
X Pin_3 3 -200 100 150 R 50 50 1 1 P
X Pin_4 4 -200 0 150 R 50 50 1 1 P
X Pin_5 5 -200 -100 150 R 50 50 1 1 P
X Pin_6 6 -200 -200 150 R 50 50 1 1 P
X Pin_7 7 -200 -300 150 R 50 50 1 1 P
X Pin_8 8 -200 -400 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# HASwitchPlate-library_IRM-03-5-HASwitchPlate-library
#
DEF HASwitchPlate-library_IRM-03-5-HASwitchPlate-library U 0 40 Y Y 1 F N
F0 "U" 400 250 50 H V C CNN
F1 "HASwitchPlate-library_IRM-03-5-HASwitchPlate-library" 400 -150 50 H V C CNN
F2 "HASwitchPlate:ACDC-Converter_MeanWell-IRM-03-x" 400 -250 50 H I C CNN
F3 "" 400 -350 50 H I C CNN
$FPLIST
ACDC?Converter?MeanWell?IRM?03?x*
$ENDFPLIST
DRAW
S 100 200 700 -100 0 1 0 f
X AC/L 1 0 100 100 R 50 50 1 1 W
X AC/N 2 0 0 100 R 50 50 1 1 W
X +Vout 3 800 100 100 L 50 50 1 1 w
X -Vout 4 800 0 100 L 50 50 1 1 w
ENDDRAW
ENDDEF
#
# HASwitchPlate-library_SLC03-series
#
DEF HASwitchPlate-library_SLC03-series U 0 40 Y Y 1 F N
F0 "U" 400 250 50 H V C CNN
F1 "HASwitchPlate-library_SLC03-series" 400 -150 50 H V C CNN
F2 "" 400 -250 50 H I C CNN
F3 "" 400 -350 50 H I C CNN
DRAW
S 100 200 700 -100 0 1 0 f
X -Vin 1 0 0 100 R 50 50 1 1 W
X -Vout 10 800 0 100 L 50 50 1 1 w
X +Vin 16 0 100 100 R 50 50 1 1 W
X +Vout 9 800 100 100 L 50 50 1 1 w
ENDDRAW
ENDDEF
#
# HASwitchPlate-library_Screw_Terminal_01x02-HASwitchPlate-library
#
DEF HASwitchPlate-library_Screw_Terminal_01x02-HASwitchPlate-library J 0 40 Y N 1 F N
F0 "J" 0 100 50 H V C CNN
F1 "HASwitchPlate-library_Screw_Terminal_01x02-HASwitchPlate-library" 0 -200 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*Terminal*Block*:*
TerminalBlock*
$ENDFPLIST
DRAW
C 0 -100 25 1 1 6 N
C 0 0 25 1 1 6 N
S -50 50 50 -150 1 1 10 f
P 2 1 1 6 -21 -87 13 -120 N
P 2 1 1 6 -21 13 13 -20 N
P 2 1 1 6 -14 -80 20 -113 N
P 2 1 1 6 -14 20 20 -13 N
X Pin_1 1 -200 0 150 R 50 50 1 1 P
X Pin_2 2 -200 -100 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# HASwitchPlate-library_WeMos_mini-HASwitchPlate
#
DEF HASwitchPlate-library_WeMos_mini-HASwitchPlate U 0 40 Y Y 1 F N
F0 "U" 0 500 60 H V C CNN
F1 "HASwitchPlate-library_WeMos_mini-HASwitchPlate" 0 -500 60 H V C CNN
F2 "" 550 -700 60 H V C CNN
F3 "" 550 -700 60 H V C CNN
DRAW
S -300 450 300 -550 0 1 0 N
X 5V 1 -500 350 200 R 50 50 1 1 W
X A0 10 500 -250 200 L 50 50 1 1 B
X D0 11 500 -150 200 L 50 50 1 1 B
X D5 12 500 -50 200 L 50 50 1 1 B
X D6 13 500 50 200 L 50 50 1 1 B
X D7 14 500 150 200 L 50 50 1 1 B
X D8 15 500 250 200 L 50 50 1 1 B
X 3.3V 16 500 350 200 L 50 50 1 1 w
X GND 2 -500 250 200 R 50 50 1 1 W
X D4 3 -500 150 200 R 50 50 1 1 B
X D3 4 -500 50 200 R 50 50 1 1 B
X D2 5 -500 -50 200 R 50 50 1 1 B
X D1 6 -500 -150 200 R 50 50 1 1 B
X Rx 7 -500 -250 200 R 50 50 1 1 B
X Tx 8 -500 -350 200 R 50 50 1 1 B
X Rst 9 500 -350 200 L 50 50 1 1 B
ENDDRAW
ENDDEF
#
# HASwitchPlate-library_XH2.54-4P-HASwitchPlate-library
#
DEF HASwitchPlate-library_XH2.54-4P-HASwitchPlate-library J 0 40 Y Y 1 F N
F0 "J" 0 200 50 H V C CNN
F1 "HASwitchPlate-library_XH2.54-4P-HASwitchPlate-library" 0 -300 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_??x*mm*
Connector*:*1x??x*mm*
Pin?Header?Straight?1X*
Pin?Header?Angled?1X*
$ENDFPLIST
DRAW
S 34 -195 0 -205 1 1 6 F
S 34 -95 0 -105 1 1 6 F
S 34 5 0 -5 1 1 6 F
S 34 105 0 95 1 1 6 F
P 2 1 1 6 50 -200 34 -200 N
P 2 1 1 6 50 -100 34 -100 N
P 2 1 1 6 50 0 34 0 N
P 2 1 1 6 50 100 34 100 N
X GND 1 200 100 150 L 50 50 1 1 I
X RX 2 200 0 150 L 50 50 1 1 I
X TX 3 200 -100 150 L 50 50 1 1 O
X +5V 4 200 -200 150 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Transistor_BJT_S8050
#
DEF Transistor_BJT_S8050 Q 0 0 Y N 1 F N
F0 "Q" 200 75 50 H V L CNN
F1 "Transistor_BJT_S8050" 200 0 50 H V L CNN
F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN
F3 "" 0 0 50 H I L CNN
$FPLIST
TO?92*
$ENDFPLIST
DRAW
C 50 0 111 0 1 10 N
P 2 0 1 0 0 0 25 0 N
P 2 0 1 0 25 25 100 100 N
P 3 0 1 0 25 -25 100 -100 100 -100 N
P 3 0 1 20 25 75 25 -75 25 -75 N
P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F
X E 1 100 -200 100 U 50 50 1 1 P
X B 2 -200 0 200 R 50 50 1 1 I
X C 3 100 200 100 D 50 50 1 1 P
ENDDRAW
ENDDEF
#
#End Library

View File

@ -0,0 +1,3 @@
EESchema-DOCLIB Version 2.0
#
#End Doc Library

View File

@ -0,0 +1,156 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# Conn_01x08-conn-HASwitchPlate
#
DEF Conn_01x08-conn-HASwitchPlate J 0 40 Y N 1 F N
F0 "J" 0 400 50 H V C CNN
F1 "Conn_01x08-conn-HASwitchPlate" 0 -500 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_??x*mm*
Connector*:*1x??x*mm*
Pin?Header?Straight?1X*
Pin?Header?Angled?1X*
Socket?Strip?Straight?1X*
Socket?Strip?Angled?1X*
$ENDFPLIST
DRAW
S -50 -395 0 -405 1 1 6 N
S -50 -295 0 -305 1 1 6 N
S -50 -195 0 -205 1 1 6 N
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 105 0 95 1 1 6 N
S -50 205 0 195 1 1 6 N
S -50 305 0 295 1 1 6 N
S -50 350 50 -450 1 1 10 f
X Pin_1 1 -200 300 150 R 50 50 1 1 P
X Pin_2 2 -200 200 150 R 50 50 1 1 P
X Pin_3 3 -200 100 150 R 50 50 1 1 P
X Pin_4 4 -200 0 150 R 50 50 1 1 P
X Pin_5 5 -200 -100 150 R 50 50 1 1 P
X Pin_6 6 -200 -200 150 R 50 50 1 1 P
X Pin_7 7 -200 -300 150 R 50 50 1 1 P
X Pin_8 8 -200 -400 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# IRM-03-5-HASwitchPlate-library
#
DEF IRM-03-5-HASwitchPlate-library U 0 40 Y Y 1 F N
F0 "U" 400 250 50 H V C CNN
F1 "IRM-03-5-HASwitchPlate-library" 400 -150 50 H V C CNN
F2 "HASwitchPlate:ACDC-Converter_MeanWell-IRM-03-x" 400 -250 50 H I C CNN
F3 "" 400 -350 50 H I C CNN
$FPLIST
ACDC?Converter?MeanWell?IRM?03?x*
$ENDFPLIST
DRAW
S 100 200 700 -100 0 1 0 f
X AC/L 1 0 100 100 R 50 50 1 1 W
X AC/N 2 0 0 100 R 50 50 1 1 W
X +Vout 3 800 100 100 L 50 50 1 1 w
X -Vout 4 800 0 100 L 50 50 1 1 w
ENDDRAW
ENDDEF
#
# SLC03-series
#
DEF SLC03-series U 0 40 Y Y 1 F N
F0 "U" 400 250 50 H V C CNN
F1 "SLC03-series" 400 -150 50 H V C CNN
F2 "" 400 -250 50 H I C CNN
F3 "" 400 -350 50 H I C CNN
DRAW
S 100 200 700 -100 0 1 0 f
X -Vin 1 0 0 100 R 50 50 1 1 W
X -Vout 10 800 0 100 L 50 50 1 1 w
X +Vin 16 0 100 100 R 50 50 1 1 W
X +Vout 9 800 100 100 L 50 50 1 1 w
ENDDRAW
ENDDEF
#
# Screw_Terminal_01x02-HASwitchPlate-library
#
DEF Screw_Terminal_01x02-HASwitchPlate-library J 0 40 Y N 1 F N
F0 "J" 0 100 50 H V C CNN
F1 "Screw_Terminal_01x02-HASwitchPlate-library" 0 -200 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*Terminal*Block*:*
TerminalBlock*
$ENDFPLIST
DRAW
C 0 -100 25 1 1 6 N
C 0 0 25 1 1 6 N
S -50 50 50 -150 1 1 10 f
P 2 1 1 6 -21 -87 13 -120 N
P 2 1 1 6 -21 13 13 -20 N
P 2 1 1 6 -14 -80 20 -113 N
P 2 1 1 6 -14 20 20 -13 N
X Pin_1 1 -200 0 150 R 50 50 1 1 P
X Pin_2 2 -200 -100 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# WeMos_mini-HASwitchPlate
#
DEF WeMos_mini-HASwitchPlate U 0 40 Y Y 1 F N
F0 "U" 0 500 60 H V C CNN
F1 "WeMos_mini-HASwitchPlate" 0 -500 60 H V C CNN
F2 "" 550 -700 60 H V C CNN
F3 "" 550 -700 60 H V C CNN
DRAW
S -300 450 300 -550 0 1 0 N
X 5V 1 -500 350 200 R 50 50 1 1 W
X A0 10 500 -250 200 L 50 50 1 1 B
X D0 11 500 -150 200 L 50 50 1 1 B
X D5 12 500 -50 200 L 50 50 1 1 B
X D6 13 500 50 200 L 50 50 1 1 B
X D7 14 500 150 200 L 50 50 1 1 B
X D8 15 500 250 200 L 50 50 1 1 B
X 3.3V 16 500 350 200 L 50 50 1 1 w
X GND 2 -500 250 200 R 50 50 1 1 W
X D4 3 -500 150 200 R 50 50 1 1 B
X D3 4 -500 50 200 R 50 50 1 1 B
X D2 5 -500 -50 200 R 50 50 1 1 B
X D1 6 -500 -150 200 R 50 50 1 1 B
X Rx 7 -500 -250 200 R 50 50 1 1 B
X Tx 8 -500 -350 200 R 50 50 1 1 B
X Rst 9 500 -350 200 L 50 50 1 1 B
ENDDRAW
ENDDEF
#
# XH2.54-4P-HASwitchPlate-library
#
DEF XH2.54-4P-HASwitchPlate-library J 0 40 Y Y 1 F N
F0 "J" 0 200 50 H V C CNN
F1 "XH2.54-4P-HASwitchPlate-library" 0 -300 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_??x*mm*
Connector*:*1x??x*mm*
Pin?Header?Straight?1X*
Pin?Header?Angled?1X*
$ENDFPLIST
DRAW
S 34 -195 0 -205 1 1 6 F
S 34 -95 0 -105 1 1 6 F
S 34 5 0 -5 1 1 6 F
S 34 105 0 95 1 1 6 F
P 2 1 1 6 50 -200 34 -200 N
P 2 1 1 6 50 -100 34 -100 N
P 2 1 1 6 50 0 34 0 N
P 2 1 1 6 50 100 34 100 N
X GND 1 200 100 150 L 50 50 1 1 I
X RX 2 200 0 150 L 50 50 1 1 I
X TX 3 200 -100 150 L 50 50 1 1 O
X +5V 4 200 -200 150 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
#End Library

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,88 @@
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(5.0.2)-1*
G04 #@! TF.CreationDate,2019-02-07T08:47:28-05:00*
G04 #@! TF.ProjectId,HASwitchPlate,48415377-6974-4636-9850-6c6174652e6b,rev?*
G04 #@! TF.SameCoordinates,Original*
G04 #@! TF.FileFunction,Profile,NP*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.0.2)-1) date 2/7/2019 8:47:28 AM*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.150000*%
G04 APERTURE END LIST*
D10*
X160000000Y-101000000D02*
X160000000Y-122000000D01*
X160000000Y-132100000D02*
X160000000Y-124000000D01*
X141500000Y-123000000D02*
G75*
G03X142500000Y-124000000I1000000J0D01*
G01*
X142500000Y-122000000D02*
G75*
G03X141500000Y-123000000I0J-1000000D01*
G01*
X142500000Y-122000000D02*
X160000000Y-122000000D01*
X142500000Y-124000000D02*
X160000000Y-124000000D01*
X118500000Y-140000000D02*
X159000000Y-140000000D01*
X101000000Y-140000000D02*
X106000000Y-140000000D01*
X108000000Y-138000000D02*
X116500000Y-138000000D01*
X117500000Y-139000000D02*
G75*
G03X118500000Y-140000000I1000000J0D01*
G01*
X117500000Y-139000000D02*
G75*
G03X116500000Y-138000000I-1000000J0D01*
G01*
X107998255Y-138000002D02*
G75*
G03X107000000Y-139000000I1745J-999998D01*
G01*
X106000000Y-140000000D02*
G75*
G03X107000000Y-139000000I0J1000000D01*
G01*
X101000000Y-100000000D02*
G75*
G03X100000000Y-101000000I0J-1000000D01*
G01*
X100000000Y-139000000D02*
G75*
G03X101000000Y-140000000I1000000J0D01*
G01*
X159000000Y-140000000D02*
G75*
G03X160000000Y-139000000I0J1000000D01*
G01*
X160000000Y-101000000D02*
G75*
G03X159000000Y-100000000I-1000000J0D01*
G01*
X141500000Y-133100000D02*
G75*
G03X142500000Y-134100000I1000000J0D01*
G01*
X142500000Y-132100000D02*
G75*
G03X141500000Y-133100000I0J-1000000D01*
G01*
X160000000Y-134100000D02*
X160000000Y-139000000D01*
X142500000Y-134100000D02*
X160000000Y-134100000D01*
X142500000Y-132100000D02*
X160000000Y-132100000D01*
X101000000Y-100000000D02*
X159000000Y-100000000D01*
X100000000Y-101000000D02*
X100000000Y-139000000D01*
M02*

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,15 @@
M48
;DRILL file {KiCad (5.0.2)-1} date 2/7/2019 8:47:16 AM
;FORMAT={-:-/ absolute / inch / decimal}
FMAT,2
INCH,TZ
T1C0.0866
%
G90
G05
T1
X4.0157Y-5.4331
X6.2205Y-4.0157
X4.0157Y-4.012
T0
M30

View File

@ -0,0 +1,76 @@
M48
;DRILL file {KiCad (5.0.2)-1} date 2/7/2019 8:47:16 AM
;FORMAT={-:-/ absolute / inch / decimal}
FMAT,2
INCH,TZ
T1C0.0157
T2C0.0260
T3C0.0295
T4C0.0299
T5C0.0315
T6C0.0394
T7C0.0400
T8C0.0598
%
G90
G05
T1
X4.142Y-4.9335
X4.402Y-4.812
X5.352Y-4.532
X6.047Y-4.4808
T2
X5.0874Y-4.9406
X5.0874Y-5.3406
X5.1874Y-4.9406
X5.1874Y-5.3406
X5.7874Y-4.9406
T3
X5.987Y-4.127
X6.037Y-4.077
X6.087Y-4.127
T4
X5.7874Y-5.3406
X5.0906Y-4.1406
X5.0906Y-4.3406
X5.7874Y-4.1406
X5.7874Y-5.1406
X5.7874Y-5.3406
T5
X5.982Y-4.272
X5.982Y-4.672
T6
X4.1535Y-4.0157
X4.2535Y-4.0157
X4.3535Y-4.0157
X4.4535Y-4.0157
X4.5535Y-4.0157
X4.6535Y-4.0157
X4.7535Y-4.0157
X4.8535Y-4.0157
X6.212Y-4.362
X6.212Y-4.462
X6.212Y-4.562
X6.212Y-4.662
T7
X3.9988Y-4.4335
X3.9988Y-4.5335
X3.9988Y-4.6335
X3.9988Y-4.7335
X3.9988Y-4.8335
X3.9988Y-4.9335
X3.9988Y-5.0335
X3.9988Y-5.1335
X4.8988Y-4.4335
X4.8988Y-4.5335
X4.8988Y-4.6335
X4.8988Y-4.7335
X4.8988Y-4.8335
X4.8988Y-4.9335
X4.8988Y-5.0335
X4.8988Y-5.1335
T8
X6.122Y-5.1406
X6.122Y-5.3406
T0
M30

2789
PCB/HASwitchPlate.kicad_pcb Normal file

File diff suppressed because it is too large Load Diff

251
PCB/HASwitchPlate.net Normal file
View File

@ -0,0 +1,251 @@
(export (version D)
(design
(source C:\Sync\Dev\HASwitchPlate\Dev\PCB2\HASwitchPlate.sch)
(date "1/25/2019 5:20:01 PM")
(tool "Eeschema (5.0.2)-1")
(sheet (number 1) (name /) (tstamps /)
(title_block
(title "HA SwitchPlate")
(company https://github.com/aderusha/HASwitchPlate)
(rev)
(date)
(source HASwitchPlate.sch)
(comment (number 1) (value allen@derusha.org))
(comment (number 2) (value ""))
(comment (number 3) (value ""))
(comment (number 4) (value "")))))
(components
(comp (ref U2)
(value WeMos_mini)
(footprint wemos-d1-mini:wemos-d1-mini-with-pin-header-and-connector)
(libsource (lib HASwitchPlate-library) (part WeMos_mini-HASwitchPlate) (description ""))
(sheetpath (names /) (tstamps /))
(tstamp 59E27669))
(comp (ref J1)
(value "Screw Term.")
(footprint Connectors_Terminal_Blocks:TerminalBlock_bornier-2_P5.08mm)
(libsource (lib HASwitchPlate-library) (part Screw_Terminal_01x02-HASwitchPlate-library) (description ""))
(sheetpath (names /) (tstamps /))
(tstamp 59E27A1F))
(comp (ref J2)
(value XH2.54-4P)
(footprint HASwitchPlate:JST_XH2.54_04x2.54mm_Straight)
(libsource (lib HASwitchPlate-library) (part XH2.54-4P-HASwitchPlate-library) (description ""))
(sheetpath (names /) (tstamps /))
(tstamp 59E297BA))
(comp (ref U1)
(value IRM-03-5)
(footprint HASwitchPlate:ACDC-Converter_MeanWell-IRM-03-x)
(datasheet https://www.meanwell.com/Upload/PDF/IRM-03/IRM-03-SPEC.PDF)
(libsource (lib HASwitchPlate-library) (part IRM-03-5-HASwitchPlate-library) (description ""))
(sheetpath (names /) (tstamps /))
(tstamp 59E37A8B))
(comp (ref J3)
(value Breakout)
(footprint Pin_Headers:Pin_Header_Straight_1x08_Pitch2.54mm)
(libsource (lib HASwitchPlate-library) (part Conn_01x08-conn-HASwitchPlate) (description ""))
(sheetpath (names /) (tstamps /))
(tstamp 5AB13587))
(comp (ref U3)
(value SLC03-series)
(footprint HASwitchPlate:ACDC-Converter_MeanWell-SLC03-series)
(datasheet http://www.meanwellusa.com/productPdf.aspx?i=786)
(libsource (lib HASwitchPlate-library) (part SLC03-series) (description ""))
(sheetpath (names /) (tstamps /))
(tstamp 5C2FF5D5))
(comp (ref Q1)
(value S8050)
(footprint Package_TO_SOT_THT:TO-92L_HandSolder)
(datasheet http://www.unisonic.com.tw/datasheet/S8050.pdf)
(libsource (lib Transistor_BJT) (part S8050) (description "0.7A Ic, 20V Vce, Low Voltage High Current NPN Transistor, TO-92"))
(sheetpath (names /) (tstamps /))
(tstamp 5C306D5D))
(comp (ref R1)
(value 1k)
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal)
(datasheet ~)
(libsource (lib Device) (part R_US) (description "Resistor, US symbol"))
(sheetpath (names /) (tstamps /))
(tstamp 5C306DF8)))
(libparts
(libpart (lib Device) (part R_US)
(description "Resistor, US symbol")
(docs ~)
(footprints
(fp R_*))
(fields
(field (name Reference) R)
(field (name Value) R_US))
(pins
(pin (num 1) (name ~) (type passive))
(pin (num 2) (name ~) (type passive))))
(libpart (lib HASwitchPlate-library) (part Conn_01x08-conn-HASwitchPlate)
(footprints
(fp Connector*:*_??x*mm*)
(fp Connector*:*1x??x*mm*)
(fp Pin?Header?Straight?1X*)
(fp Pin?Header?Angled?1X*)
(fp Socket?Strip?Straight?1X*)
(fp Socket?Strip?Angled?1X*))
(fields
(field (name Reference) J)
(field (name Value) Conn_01x08-conn-HASwitchPlate))
(pins
(pin (num 1) (name Pin_1) (type passive))
(pin (num 2) (name Pin_2) (type passive))
(pin (num 3) (name Pin_3) (type passive))
(pin (num 4) (name Pin_4) (type passive))
(pin (num 5) (name Pin_5) (type passive))
(pin (num 6) (name Pin_6) (type passive))
(pin (num 7) (name Pin_7) (type passive))
(pin (num 8) (name Pin_8) (type passive))))
(libpart (lib HASwitchPlate-library) (part IRM-03-5-HASwitchPlate-library)
(footprints
(fp ACDC?Converter?MeanWell?IRM?03?x*))
(fields
(field (name Reference) U)
(field (name Value) IRM-03-5-HASwitchPlate-library)
(field (name Footprint) HASwitchPlate:ACDC-Converter_MeanWell-IRM-03-x))
(pins
(pin (num 1) (name AC/L) (type power_in))
(pin (num 2) (name AC/N) (type power_in))
(pin (num 3) (name +Vout) (type power_out))
(pin (num 4) (name -Vout) (type power_out))))
(libpart (lib HASwitchPlate-library) (part SLC03-series)
(fields
(field (name Reference) U)
(field (name Value) SLC03-series))
(pins
(pin (num 1) (name -Vin) (type power_in))
(pin (num 9) (name +Vout) (type power_out))
(pin (num 10) (name -Vout) (type power_out))
(pin (num 16) (name +Vin) (type power_in))))
(libpart (lib HASwitchPlate-library) (part Screw_Terminal_01x02-HASwitchPlate-library)
(footprints
(fp Connector*Terminal*Block*:*)
(fp TerminalBlock*))
(fields
(field (name Reference) J)
(field (name Value) Screw_Terminal_01x02-HASwitchPlate-library))
(pins
(pin (num 1) (name Pin_1) (type passive))
(pin (num 2) (name Pin_2) (type passive))))
(libpart (lib HASwitchPlate-library) (part WeMos_mini-HASwitchPlate)
(fields
(field (name Reference) U)
(field (name Value) WeMos_mini-HASwitchPlate))
(pins
(pin (num 1) (name 5V) (type power_in))
(pin (num 2) (name GND) (type power_in))
(pin (num 3) (name D4) (type BiDi))
(pin (num 4) (name D3) (type BiDi))
(pin (num 5) (name D2) (type BiDi))
(pin (num 6) (name D1) (type BiDi))
(pin (num 7) (name Rx) (type BiDi))
(pin (num 8) (name Tx) (type BiDi))
(pin (num 9) (name Rst) (type BiDi))
(pin (num 10) (name A0) (type BiDi))
(pin (num 11) (name D0) (type BiDi))
(pin (num 12) (name D5) (type BiDi))
(pin (num 13) (name D6) (type BiDi))
(pin (num 14) (name D7) (type BiDi))
(pin (num 15) (name D8) (type BiDi))
(pin (num 16) (name 3.3V) (type power_out))))
(libpart (lib HASwitchPlate-library) (part XH2.54-4P-HASwitchPlate-library)
(footprints
(fp Connector*:*_??x*mm*)
(fp Connector*:*1x??x*mm*)
(fp Pin?Header?Straight?1X*)
(fp Pin?Header?Angled?1X*))
(fields
(field (name Reference) J)
(field (name Value) XH2.54-4P-HASwitchPlate-library))
(pins
(pin (num 1) (name GND) (type input))
(pin (num 2) (name RX) (type input))
(pin (num 3) (name TX) (type output))
(pin (num 4) (name +5V) (type passive))))
(libpart (lib Transistor_BJT) (part S8050)
(description "0.7A Ic, 20V Vce, Low Voltage High Current NPN Transistor, TO-92")
(docs http://www.unisonic.com.tw/datasheet/S8050.pdf)
(footprints
(fp TO?92*))
(fields
(field (name Reference) Q)
(field (name Value) S8050)
(field (name Footprint) Package_TO_SOT_THT:TO-92_Inline))
(pins
(pin (num 1) (name E) (type passive))
(pin (num 2) (name B) (type input))
(pin (num 3) (name C) (type passive)))))
(libraries
(library (logical Device)
(uri "C:\\Program Files\\KiCad\\share\\kicad\\library/Device.lib"))
(library (logical HASwitchPlate-library)
(uri C:\Sync\Dev\HASwitchPlate\Dev\PCB2/HASwitchPlate-library.lib))
(library (logical Transistor_BJT)
(uri "C:\\Program Files\\KiCad\\share\\kicad\\library/Transistor_BJT.lib")))
(nets
(net (code 1) (name /D8_DBG)
(node (ref J3) (pin 8))
(node (ref U2) (pin 15)))
(net (code 2) (name /D0)
(node (ref U2) (pin 11))
(node (ref J3) (pin 5)))
(net (code 3) (name /D1)
(node (ref U2) (pin 6))
(node (ref J3) (pin 6)))
(net (code 4) (name /D2)
(node (ref J3) (pin 7))
(node (ref U2) (pin 5)))
(net (code 5) (name "Net-(R1-Pad1)")
(node (ref U2) (pin 13))
(node (ref R1) (pin 1)))
(net (code 6) (name /LCD_CTL)
(node (ref Q1) (pin 2))
(node (ref R1) (pin 2)))
(net (code 7) (name /LCD_GND)
(node (ref J2) (pin 1))
(node (ref Q1) (pin 3)))
(net (code 8) (name /LCD_RX)
(node (ref U2) (pin 3))
(node (ref J2) (pin 2)))
(net (code 9) (name /AC_N)
(node (ref U3) (pin 1))
(node (ref J1) (pin 2))
(node (ref U1) (pin 2)))
(net (code 10) (name /+3.3V)
(node (ref U2) (pin 16))
(node (ref J3) (pin 3)))
(net (code 11) (name /A0)
(node (ref U2) (pin 10))
(node (ref J3) (pin 4)))
(net (code 12) (name "Net-(U2-Pad12)")
(node (ref U2) (pin 12)))
(net (code 13) (name /GND)
(node (ref U2) (pin 2))
(node (ref J3) (pin 1))
(node (ref U1) (pin 4))
(node (ref U3) (pin 10))
(node (ref Q1) (pin 1)))
(net (code 14) (name "Net-(U2-Pad4)")
(node (ref U2) (pin 4)))
(net (code 15) (name "Net-(U2-Pad7)")
(node (ref U2) (pin 7)))
(net (code 16) (name "Net-(U2-Pad8)")
(node (ref U2) (pin 8)))
(net (code 17) (name "Net-(U2-Pad9)")
(node (ref U2) (pin 9)))
(net (code 18) (name /AC_L)
(node (ref U3) (pin 16))
(node (ref U1) (pin 1))
(node (ref J1) (pin 1)))
(net (code 19) (name /+5V)
(node (ref U2) (pin 1))
(node (ref U3) (pin 9))
(node (ref J2) (pin 4))
(node (ref J3) (pin 2))
(node (ref U1) (pin 3)))
(net (code 20) (name /LCD_TX)
(node (ref J2) (pin 3))
(node (ref U2) (pin 14)))))

View File

@ -0,0 +1,32 @@
(module HASwitchPlate:ACDC-Converter_MeanWell-IRM-03-x (layer F.Cu) (tedit 5AC6543F)
(descr "ACDC-Converter, 3W, Meanwell, IRM-03, THT")
(fp_text reference U1 (at -15 -5) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value IRM-03-5 (at -15 19) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_circle (center -2 -2) (end -1.9 -1.9) (layer F.Fab) (width 0.1))
(fp_line (start 3.26 -3.11) (end -33.74 -3.11) (layer F.Fab) (width 0.1))
(fp_line (start 3.26 -3.11) (end 3.26 20.89) (layer F.Fab) (width 0.1))
(fp_line (start -33.74 -3.11) (end -33.74 20.89) (layer F.Fab) (width 0.1))
(fp_line (start 3.26 20.89) (end -33.74 20.89) (layer F.Fab) (width 0.1))
(fp_line (start 3.76 21.39) (end -34.24 21.39) (layer Eco1.User) (width 0.12))
(fp_line (start 3.76 -3.61) (end -34.24 -3.61) (layer Eco1.User) (width 0.12))
(fp_line (start -34.24 -3.61) (end -34.24 21.39) (layer Eco1.User) (width 0.12))
(fp_line (start 3.76 -3.61) (end 3.76 21.39) (layer Eco1.User) (width 0.12))
(fp_line (start 4.01 21.64) (end -34.49 21.64) (layer F.CrtYd) (width 0.05))
(fp_line (start -34.49 -3.86) (end -34.49 21.64) (layer F.CrtYd) (width 0.05))
(fp_line (start 4.01 -3.86) (end -34.49 -3.86) (layer F.CrtYd) (width 0.05))
(fp_line (start 4.01 -3.86) (end 4.01 21.64) (layer F.CrtYd) (width 0.05))
(pad 4 thru_hole circle (at -30.48 17.7) (size 2.29 2.29) (drill 0.76) (layers *.Cu *.Mask))
(pad 3 thru_hole circle (at -25.4 17.7) (size 2.29 2.29) (drill 0.76) (layers *.Cu *.Mask))
(pad 2 thru_hole circle (at -5.08 0) (size 2.29 2.29) (drill 0.76) (layers *.Cu *.Mask))
(pad 1 thru_hole circle (at 0 0) (size 2.29 2.29) (drill 0.76) (layers *.Cu *.Mask))
(pad 5 thru_hole circle (at -30.48 0) (size 2.29 2.29) (drill 0.76) (layers *.Cu *.Mask))
(model "shapes3D/Mean Well IRM-03 Series.wrl"
(offset (xyz -33.78199949264526 3.047999954223633 0))
(scale (xyz 0.393 0.393 0.393))
(rotate (xyz 0 0 90))
)
)

View File

@ -0,0 +1,18 @@
(module ACDC-Converter_MeanWell-SLC03-series (layer F.Cu) (tedit 5C316393)
(fp_text reference U3 (at 9.144 10.287) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SLC03-series (at 8.509 -0.127) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -2.16 -1.87) (end -2.16 11.93) (layer F.SilkS) (width 0.15))
(fp_line (start 19.941 -1.87) (end 19.941 11.93) (layer F.SilkS) (width 0.15))
(fp_line (start -2.16 -1.87) (end 19.94 -1.87) (layer F.SilkS) (width 0.15))
(fp_line (start -2.16 11.93) (end 19.94 11.93) (layer F.SilkS) (width 0.15))
(pad 7 thru_hole circle (at 15.24 10.16) (size 1.524 1.524) (drill 0.66) (layers *.Cu *.Mask))
(pad 1 thru_hole circle (at 0 10.16) (size 1.524 1.524) (drill 0.66) (layers *.Cu *.Mask))
(pad 10 thru_hole circle (at 15.24 0) (size 1.524 1.524) (drill 0.66) (layers *.Cu *.Mask))
(pad 16 thru_hole circle (at 0 0) (size 2.29 2.29) (drill 0.76) (layers *.Cu *.Mask))
(pad 9 thru_hole circle (at 17.78 0) (size 1.524 1.524) (drill 0.66) (layers *.Cu *.Mask))
(pad 8 thru_hole circle (at 17.78 10.16) (size 1.524 1.524) (drill 0.66) (layers *.Cu *.Mask))
)

View File

@ -0,0 +1,42 @@
(module HASwitchPlate:JST_XH2.54_04x2.54mm_Straight (layer F.Cu) (tedit 59E398E1)
(descr "JST XH series connector, B04B-XH-A, top entry type, through hole")
(tags "connector jst xh tht top vertical 2.50mm")
(fp_text reference J2 (at 3.81 1.778) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value XH2.54-4P (at 3.75 4.5) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 3.81 3.048) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 9.3 2.75) (end 3.75 2.75) (layer F.SilkS) (width 0.12))
(fp_line (start 9.42 -0.2) (end 9.42 2.75) (layer F.SilkS) (width 0.12))
(fp_line (start 10.17 -0.2) (end 9.42 -0.2) (layer F.SilkS) (width 0.12))
(fp_line (start -1.8 2.75) (end 3.75 2.75) (layer F.SilkS) (width 0.12))
(fp_line (start -1.8 -0.2) (end -1.8 2.75) (layer F.SilkS) (width 0.12))
(fp_line (start -2.55 -0.2) (end -1.8 -0.2) (layer F.SilkS) (width 0.12))
(fp_line (start 8.38 -1.7) (end 10.17 -1.7) (layer F.SilkS) (width 0.12))
(fp_line (start -2.55 -1.7) (end -0.75 -1.7) (layer F.SilkS) (width 0.12))
(fp_line (start 0.75 -1.7) (end 6.83 -1.7) (layer F.SilkS) (width 0.12))
(fp_line (start 10.17 3.5) (end 10.17 -1.7) (layer F.SilkS) (width 0.12))
(fp_line (start -2.55 3.5) (end 10.17 3.5) (layer F.SilkS) (width 0.12))
(fp_line (start -2.55 -1.7) (end -2.55 3.5) (layer F.SilkS) (width 0.12))
(fp_line (start 10.57 -2.85) (end -2.95 -2.85) (layer F.CrtYd) (width 0.05))
(fp_line (start 10.57 3.9) (end 10.57 -2.85) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.95 3.9) (end 10.57 3.9) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.95 -2.85) (end -2.95 3.9) (layer F.CrtYd) (width 0.05))
(fp_line (start 10.07 -2.35) (end -2.45 -2.35) (layer F.Fab) (width 0.1))
(fp_line (start 10.07 3.4) (end 10.07 -2.35) (layer F.Fab) (width 0.1))
(fp_line (start -2.45 3.4) (end 10.07 3.4) (layer F.Fab) (width 0.1))
(fp_line (start -2.45 -2.35) (end -2.45 3.4) (layer F.Fab) (width 0.1))
(pad 1 thru_hole rect (at 7.62 0) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask))
(pad 2 thru_hole circle (at 5.08 0) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask))
(pad 3 thru_hole circle (at 2.54 0) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask))
(pad 4 thru_hole circle (at 0 0) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask))
(model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_XH_B04B-XH-A_1x04_P2.50mm_Vertical.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@ -0,0 +1,482 @@
(module Symbol:KiCad-Logo2_12mm_SilkScreen (layer F.Cu) (tedit 0)
(descr "KiCad Logo")
(tags "Logo KiCad")
(attr virtual)
(fp_text reference REF** (at 0 0) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value KiCad-Logo2_12mm_SilkScreen (at 0.75 0) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_poly (pts (xy -12.297397 4.558391) (xy -12.21808 4.559197) (xy -11.985669 4.564805) (xy -11.791026 4.581462)
(xy -11.627516 4.610957) (xy -11.488506 4.655074) (xy -11.367361 4.715602) (xy -11.257449 4.794327)
(xy -11.218191 4.828525) (xy -11.153069 4.908542) (xy -11.094348 5.017123) (xy -11.049089 5.13748)
(xy -11.024355 5.252824) (xy -11.021785 5.295446) (xy -11.03789 5.413599) (xy -11.081047 5.542659)
(xy -11.143524 5.664819) (xy -11.217587 5.762269) (xy -11.229617 5.774027) (xy -11.331519 5.856671)
(xy -11.443108 5.921186) (xy -11.570818 5.96926) (xy -11.721082 6.002584) (xy -11.900334 6.022849)
(xy -12.115007 6.031746) (xy -12.213337 6.0325) (xy -12.33836 6.031898) (xy -12.426282 6.029381)
(xy -12.485353 6.023881) (xy -12.52382 6.014332) (xy -12.549932 5.999666) (xy -12.563928 5.987143)
(xy -12.577149 5.971929) (xy -12.58752 5.952302) (xy -12.595385 5.923005) (xy -12.601091 5.87878)
(xy -12.604981 5.814369) (xy -12.6074 5.724514) (xy -12.608694 5.603959) (xy -12.609206 5.447444)
(xy -12.609285 5.295446) (xy -12.609785 5.092717) (xy -12.609677 4.930768) (xy -12.607748 4.853214)
(xy -12.314464 4.853214) (xy -12.314464 5.737679) (xy -12.127366 5.737507) (xy -12.014784 5.734278)
(xy -11.896872 5.72596) (xy -11.798493 5.714325) (xy -11.7955 5.713846) (xy -11.6365 5.675404)
(xy -11.513174 5.615533) (xy -11.419363 5.530335) (xy -11.359757 5.438091) (xy -11.32303 5.335766)
(xy -11.325878 5.239686) (xy -11.368502 5.136696) (xy -11.451874 5.030153) (xy -11.567406 4.951204)
(xy -11.717577 4.898433) (xy -11.817939 4.879758) (xy -11.931863 4.866643) (xy -12.052605 4.85715)
(xy -12.155301 4.853204) (xy -12.161384 4.853185) (xy -12.314464 4.853214) (xy -12.607748 4.853214)
(xy -12.606549 4.805059) (xy -12.597986 4.711048) (xy -12.581578 4.644197) (xy -12.55491 4.599963)
(xy -12.515571 4.573806) (xy -12.461148 4.561186) (xy -12.389227 4.557561) (xy -12.297397 4.558391)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -9.467666 4.558552) (xy -9.32823 4.5593) (xy -9.222983 4.56104) (xy -9.146344 4.564177)
(xy -9.09273 4.569113) (xy -9.056557 4.576253) (xy -9.032241 4.586001) (xy -9.014201 4.598761)
(xy -9.007669 4.604633) (xy -8.967942 4.667027) (xy -8.960789 4.738718) (xy -8.986923 4.802364)
(xy -8.999007 4.815227) (xy -9.018552 4.827698) (xy -9.050023 4.83732) (xy -9.099256 4.844559)
(xy -9.172086 4.849883) (xy -9.274349 4.853762) (xy -9.411882 4.856664) (xy -9.537623 4.858429)
(xy -10.035268 4.864554) (xy -10.042069 4.994955) (xy -10.04887 5.125357) (xy -9.711075 5.125357)
(xy -9.564426 5.126622) (xy -9.457064 5.131914) (xy -9.382957 5.143478) (xy -9.336069 5.163558)
(xy -9.310367 5.194398) (xy -9.299816 5.238244) (xy -9.298214 5.278937) (xy -9.303193 5.328868)
(xy -9.321984 5.36566) (xy -9.360367 5.391235) (xy -9.42412 5.407516) (xy -9.519024 5.416426)
(xy -9.650858 5.419887) (xy -9.722814 5.420179) (xy -10.046607 5.420179) (xy -10.046607 5.737679)
(xy -9.547678 5.737679) (xy -9.384133 5.737906) (xy -9.259837 5.738929) (xy -9.168686 5.741256)
(xy -9.104572 5.745395) (xy -9.06139 5.751857) (xy -9.033033 5.761148) (xy -9.013395 5.773779)
(xy -9.003393 5.783036) (xy -8.969082 5.837063) (xy -8.958035 5.885089) (xy -8.973809 5.943751)
(xy -9.003393 5.987143) (xy -9.019176 6.000803) (xy -9.039551 6.01141) (xy -9.069998 6.019348)
(xy -9.115997 6.025003) (xy -9.18303 6.028759) (xy -9.276578 6.031) (xy -9.40212 6.032111)
(xy -9.565138 6.032476) (xy -9.649732 6.0325) (xy -9.830888 6.03234) (xy -9.972168 6.031602)
(xy -10.079052 6.029904) (xy -10.157022 6.026859) (xy -10.211559 6.022083) (xy -10.248142 6.015192)
(xy -10.272253 6.005801) (xy -10.289373 5.993525) (xy -10.296071 5.987143) (xy -10.309328 5.971882)
(xy -10.319719 5.952193) (xy -10.327591 5.922801) (xy -10.333293 5.87843) (xy -10.337172 5.813803)
(xy -10.339577 5.723644) (xy -10.340856 5.602678) (xy -10.341355 5.445628) (xy -10.341428 5.2994)
(xy -10.341361 5.112134) (xy -10.34089 4.964928) (xy -10.339613 4.852482) (xy -10.337129 4.769499)
(xy -10.333036 4.71068) (xy -10.326931 4.670727) (xy -10.318412 4.644341) (xy -10.307078 4.626225)
(xy -10.292525 4.61108) (xy -10.28894 4.607703) (xy -10.271541 4.592755) (xy -10.251325 4.58118)
(xy -10.222684 4.572545) (xy -10.180009 4.566422) (xy -10.117695 4.562379) (xy -10.030132 4.559986)
(xy -9.911713 4.558811) (xy -9.756831 4.558425) (xy -9.646877 4.558393) (xy -9.467666 4.558552)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -7.416366 4.560973) (xy -7.266068 4.57148) (xy -7.126283 4.587891) (xy -7.005137 4.609587)
(xy -6.910754 4.63595) (xy -6.851261 4.666364) (xy -6.842129 4.675317) (xy -6.810375 4.744788)
(xy -6.820004 4.816108) (xy -6.869257 4.877127) (xy -6.871607 4.878875) (xy -6.900577 4.897676)
(xy -6.930819 4.907562) (xy -6.973001 4.908763) (xy -7.037792 4.901507) (xy -7.135861 4.886024)
(xy -7.14375 4.884721) (xy -7.289877 4.866769) (xy -7.447534 4.857913) (xy -7.605656 4.857827)
(xy -7.75318 4.866185) (xy -7.87904 4.882659) (xy -7.972172 4.906923) (xy -7.978291 4.909362)
(xy -8.045855 4.947217) (xy -8.069593 4.985527) (xy -8.05101 5.023204) (xy -7.991611 5.05916)
(xy -7.892901 5.092306) (xy -7.756385 5.121554) (xy -7.665357 5.135636) (xy -7.476138 5.162723)
(xy -7.325645 5.187484) (xy -7.207466 5.212063) (xy -7.115191 5.238605) (xy -7.04241 5.269253)
(xy -6.98271 5.306152) (xy -6.929682 5.351445) (xy -6.887069 5.395923) (xy -6.836514 5.457895)
(xy -6.811635 5.511184) (xy -6.803854 5.576839) (xy -6.803571 5.600883) (xy -6.809415 5.680671)
(xy -6.832771 5.74003) (xy -6.873193 5.792716) (xy -6.955344 5.873254) (xy -7.046952 5.934674)
(xy -7.154824 5.978979) (xy -7.285765 6.008172) (xy -7.446584 6.024256) (xy -7.644086 6.029233)
(xy -7.676696 6.029149) (xy -7.808401 6.026419) (xy -7.939015 6.020216) (xy -8.054301 6.01143)
(xy -8.14002 6.00095) (xy -8.146953 5.999747) (xy -8.232179 5.979558) (xy -8.304467 5.954055)
(xy -8.34539 5.930739) (xy -8.383474 5.869229) (xy -8.386125 5.797602) (xy -8.353295 5.733771)
(xy -8.34595 5.726553) (xy -8.315588 5.705107) (xy -8.277618 5.695867) (xy -8.218852 5.69744)
(xy -8.147512 5.705613) (xy -8.067797 5.712914) (xy -7.956049 5.719074) (xy -7.825592 5.723544)
(xy -7.689746 5.725776) (xy -7.654018 5.725923) (xy -7.517666 5.725373) (xy -7.417876 5.722726)
(xy -7.345868 5.717063) (xy -7.29286 5.707466) (xy -7.250073 5.693017) (xy -7.22436 5.680982)
(xy -7.167857 5.647565) (xy -7.131833 5.617301) (xy -7.126568 5.608722) (xy -7.137675 5.573296)
(xy -7.190477 5.539001) (xy -7.281316 5.507394) (xy -7.406532 5.480031) (xy -7.443424 5.473936)
(xy -7.636118 5.44367) (xy -7.789904 5.418373) (xy -7.910717 5.396206) (xy -8.004495 5.37533)
(xy -8.077171 5.353907) (xy -8.134683 5.330099) (xy -8.182965 5.302068) (xy -8.227953 5.267975)
(xy -8.275583 5.225982) (xy -8.291611 5.211259) (xy -8.347806 5.156314) (xy -8.377552 5.112781)
(xy -8.389189 5.062965) (xy -8.391071 5.000189) (xy -8.370351 4.877085) (xy -8.308429 4.772491)
(xy -8.205659 4.686745) (xy -8.062398 4.620184) (xy -7.960178 4.590329) (xy -7.849083 4.571047)
(xy -7.715999 4.560139) (xy -7.569052 4.556987) (xy -7.416366 4.560973)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -5.87375 4.60375) (xy -5.860529 4.618964) (xy -5.850159 4.638591) (xy -5.842293 4.667888)
(xy -5.836587 4.712113) (xy -5.832697 4.776524) (xy -5.830278 4.866378) (xy -5.828984 4.986934)
(xy -5.828472 5.143448) (xy -5.828393 5.295446) (xy -5.828533 5.483978) (xy -5.829182 5.63241)
(xy -5.830686 5.746001) (xy -5.833389 5.830009) (xy -5.837636 5.88969) (xy -5.843772 5.930302)
(xy -5.852141 5.957104) (xy -5.863089 5.975353) (xy -5.87375 5.987143) (xy -5.940051 6.02668)
(xy -6.010696 6.023131) (xy -6.073904 5.980011) (xy -6.088427 5.963177) (xy -6.099777 5.943644)
(xy -6.108345 5.916015) (xy -6.114522 5.874889) (xy -6.118698 5.814868) (xy -6.121265 5.730551)
(xy -6.122612 5.61654) (xy -6.123132 5.467434) (xy -6.123214 5.298623) (xy -6.123214 4.669724)
(xy -6.067548 4.614058) (xy -5.998934 4.567225) (xy -5.932377 4.565538) (xy -5.87375 4.60375)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -3.917573 4.569506) (xy -3.779928 4.592602) (xy -3.674214 4.628505) (xy -3.60544 4.675778)
(xy -3.586699 4.702748) (xy -3.567641 4.765475) (xy -3.580466 4.822222) (xy -3.620953 4.876035)
(xy -3.683862 4.90121) (xy -3.775143 4.899165) (xy -3.845744 4.885526) (xy -4.002626 4.85954)
(xy -4.162954 4.85707) (xy -4.342409 4.878163) (xy -4.391978 4.8871) (xy -4.558843 4.934146)
(xy -4.689386 5.004129) (xy -4.782176 5.095856) (xy -4.835781 5.208134) (xy -4.846868 5.266182)
(xy -4.839611 5.383953) (xy -4.792759 5.48815) (xy -4.710582 5.576742) (xy -4.597349 5.647698)
(xy -4.457329 5.698987) (xy -4.294791 5.728579) (xy -4.114005 5.734443) (xy -3.919238 5.714548)
(xy -3.908241 5.712672) (xy -3.830774 5.698243) (xy -3.787822 5.684306) (xy -3.769205 5.663626)
(xy -3.764744 5.62897) (xy -3.764643 5.610618) (xy -3.764643 5.533571) (xy -3.902205 5.533571)
(xy -4.023682 5.52525) (xy -4.106581 5.498732) (xy -4.154814 5.451689) (xy -4.172296 5.38179)
(xy -4.17251 5.372667) (xy -4.162281 5.312922) (xy -4.127208 5.270261) (xy -4.06193 5.242029)
(xy -3.96109 5.225571) (xy -3.863415 5.21952) (xy -3.721451 5.216048) (xy -3.618477 5.221346)
(xy -3.548247 5.240893) (xy -3.504514 5.280173) (xy -3.48103 5.344666) (xy -3.471549 5.439854)
(xy -3.469821 5.564875) (xy -3.472652 5.704423) (xy -3.481167 5.799347) (xy -3.495406 5.850024)
(xy -3.498169 5.853993) (xy -3.57635 5.917316) (xy -3.690975 5.967462) (xy -3.83478 6.003362)
(xy -4.000496 6.023944) (xy -4.180858 6.028137) (xy -4.368598 6.014869) (xy -4.479018 5.998572)
(xy -4.652208 5.949551) (xy -4.813174 5.86941) (xy -4.947944 5.765398) (xy -4.968428 5.744609)
(xy -5.034981 5.657213) (xy -5.095031 5.548898) (xy -5.141564 5.43534) (xy -5.167563 5.332217)
(xy -5.170696 5.292611) (xy -5.157356 5.209994) (xy -5.1219 5.107203) (xy -5.071131 4.999006)
(xy -5.011852 4.900169) (xy -4.959479 4.834152) (xy -4.837026 4.735952) (xy -4.678732 4.657792)
(xy -4.490269 4.601439) (xy -4.27731 4.568663) (xy -4.082143 4.560654) (xy -3.917573 4.569506)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -2.611835 4.567195) (xy -2.564493 4.594967) (xy -2.502592 4.640385) (xy -2.422923 4.705589)
(xy -2.32228 4.792717) (xy -2.197452 4.90391) (xy -2.045232 5.041307) (xy -1.870982 5.199276)
(xy -1.508125 5.528327) (xy -1.496785 5.086665) (xy -1.492691 4.934634) (xy -1.488742 4.821417)
(xy -1.484062 4.74048) (xy -1.477779 4.685293) (xy -1.469018 4.649322) (xy -1.456906 4.626035)
(xy -1.440569 4.608899) (xy -1.431907 4.601698) (xy -1.362537 4.563623) (xy -1.296527 4.56919)
(xy -1.244164 4.601717) (xy -1.190625 4.645042) (xy -1.183966 5.277759) (xy -1.182123 5.463841)
(xy -1.181185 5.610021) (xy -1.181477 5.721751) (xy -1.183323 5.804482) (xy -1.18705 5.863666)
(xy -1.19298 5.904753) (xy -1.20144 5.933196) (xy -1.212753 5.954445) (xy -1.2253 5.971488)
(xy -1.252444 6.003095) (xy -1.279453 6.024046) (xy -1.31007 6.032088) (xy -1.348043 6.024965)
(xy -1.397118 6.000426) (xy -1.46104 5.956214) (xy -1.543555 5.890076) (xy -1.64841 5.799759)
(xy -1.779351 5.683008) (xy -1.927678 5.548859) (xy -2.460625 5.065429) (xy -2.471964 5.505647)
(xy -2.476065 5.657401) (xy -2.480025 5.770354) (xy -2.484721 5.851052) (xy -2.491033 5.906041)
(xy -2.499837 5.941865) (xy -2.512012 5.96507) (xy -2.528437 5.982201) (xy -2.536843 5.989183)
(xy -2.611134 6.027534) (xy -2.681332 6.021749) (xy -2.742461 5.972745) (xy -2.756445 5.95303)
(xy -2.767344 5.930006) (xy -2.775541 5.898149) (xy -2.78142 5.851935) (xy -2.785364 5.78584)
(xy -2.787756 5.694339) (xy -2.788979 5.571911) (xy -2.789418 5.413029) (xy -2.789464 5.295446)
(xy -2.789317 5.111533) (xy -2.788619 4.967452) (xy -2.786987 4.85768) (xy -2.784039 4.776693)
(xy -2.779389 4.718968) (xy -2.772657 4.678981) (xy -2.763457 4.651207) (xy -2.751406 4.630123)
(xy -2.742461 4.618148) (xy -2.719786 4.58978) (xy -2.698595 4.568362) (xy -2.675678 4.556032)
(xy -2.647828 4.55493) (xy -2.611835 4.567195)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 0.462743 4.55878) (xy 0.616142 4.560617) (xy 0.733695 4.564911) (xy 0.820156 4.572672)
(xy 0.88028 4.58491) (xy 0.91882 4.602635) (xy 0.940532 4.626856) (xy 0.95017 4.658582)
(xy 0.952488 4.698823) (xy 0.9525 4.703575) (xy 0.950488 4.749091) (xy 0.940975 4.784269)
(xy 0.918751 4.810528) (xy 0.878602 4.829289) (xy 0.815316 4.841973) (xy 0.723682 4.849999)
(xy 0.598487 4.854789) (xy 0.434519 4.857761) (xy 0.384263 4.85842) (xy -0.102053 4.864554)
(xy -0.108855 4.994955) (xy -0.115656 5.125357) (xy 0.222139 5.125357) (xy 0.354107 5.125844)
(xy 0.448337 5.127903) (xy 0.512445 5.132432) (xy 0.554044 5.14033) (xy 0.58075 5.152495)
(xy 0.600178 5.169825) (xy 0.600302 5.169963) (xy 0.635537 5.237501) (xy 0.634263 5.310498)
(xy 0.597284 5.372725) (xy 0.589965 5.379121) (xy 0.56399 5.395605) (xy 0.528397 5.407073)
(xy 0.475253 5.414388) (xy 0.396628 5.418415) (xy 0.28459 5.420017) (xy 0.212934 5.420179)
(xy -0.113393 5.420179) (xy -0.113393 5.737679) (xy 0.382021 5.737679) (xy 0.545586 5.737965)
(xy 0.669797 5.739134) (xy 0.760655 5.741654) (xy 0.82416 5.745992) (xy 0.866313 5.752614)
(xy 0.893116 5.761987) (xy 0.910569 5.774579) (xy 0.914967 5.779152) (xy 0.94744 5.842526)
(xy 0.949816 5.914624) (xy 0.923175 5.977135) (xy 0.902097 5.997196) (xy 0.88017 6.00824)
(xy 0.846195 6.016785) (xy 0.794798 6.023129) (xy 0.720605 6.027572) (xy 0.618241 6.030413)
(xy 0.482333 6.031952) (xy 0.307505 6.032487) (xy 0.26798 6.0325) (xy 0.090224 6.032384)
(xy -0.047758 6.031742) (xy -0.151544 6.030134) (xy -0.226717 6.027121) (xy -0.278859 6.022263)
(xy -0.313549 6.015121) (xy -0.33637 6.005254) (xy -0.352903 5.992223) (xy -0.361973 5.982866)
(xy -0.375626 5.966294) (xy -0.386292 5.945764) (xy -0.39434 5.915893) (xy -0.400136 5.871298)
(xy -0.404047 5.806594) (xy -0.406443 5.716397) (xy -0.40769 5.595324) (xy -0.408156 5.43799)
(xy -0.408214 5.305568) (xy -0.408071 5.120012) (xy -0.407394 4.974342) (xy -0.405808 4.863088)
(xy -0.402939 4.780778) (xy -0.398413 4.721943) (xy -0.391856 4.681111) (xy -0.382894 4.652812)
(xy -0.371153 4.631575) (xy -0.361211 4.618148) (xy -0.314208 4.558393) (xy 0.268743 4.558393)
(xy 0.462743 4.55878)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 2.04571 4.558811) (xy 2.304821 4.567572) (xy 2.525206 4.59414) (xy 2.710499 4.640105)
(xy 2.864335 4.70706) (xy 2.990346 4.796593) (xy 3.092167 4.910296) (xy 3.173431 5.049759)
(xy 3.17503 5.05316) (xy 3.223529 5.177979) (xy 3.240809 5.288523) (xy 3.226805 5.399774)
(xy 3.181448 5.52671) (xy 3.172846 5.546026) (xy 3.114186 5.659083) (xy 3.04826 5.746442)
(xy 2.963174 5.820704) (xy 2.847034 5.894468) (xy 2.840287 5.898319) (xy 2.739184 5.946885)
(xy 2.624909 5.983156) (xy 2.490121 6.008383) (xy 2.327475 6.023816) (xy 2.129629 6.030708)
(xy 2.059727 6.031307) (xy 1.726864 6.0325) (xy 1.679861 5.972745) (xy 1.665918 5.953096)
(xy 1.655041 5.93015) (xy 1.646851 5.898406) (xy 1.640967 5.852359) (xy 1.637011 5.78651)
(xy 1.635721 5.737679) (xy 1.950357 5.737679) (xy 2.13896 5.737679) (xy 2.249325 5.734451)
(xy 2.362621 5.725958) (xy 2.455605 5.71398) (xy 2.461218 5.712971) (xy 2.62637 5.668665)
(xy 2.75447 5.602099) (xy 2.84957 5.510184) (xy 2.915723 5.389832) (xy 2.927227 5.357935)
(xy 2.938502 5.308257) (xy 2.93362 5.259177) (xy 2.909867 5.193884) (xy 2.895549 5.161809)
(xy 2.848662 5.076574) (xy 2.792171 5.016776) (xy 2.730015 4.975134) (xy 2.605512 4.920945)
(xy 2.446174 4.881692) (xy 2.260553 4.859089) (xy 2.126116 4.854114) (xy 1.950357 4.853214)
(xy 1.950357 5.737679) (xy 1.635721 5.737679) (xy 1.634602 5.695355) (xy 1.633361 5.573392)
(xy 1.632908 5.415118) (xy 1.632857 5.291357) (xy 1.632857 4.669724) (xy 1.688523 4.614058)
(xy 1.713228 4.591495) (xy 1.739941 4.576043) (xy 1.777244 4.566375) (xy 1.833723 4.561164)
(xy 1.917958 4.559082) (xy 2.038535 4.558801) (xy 2.04571 4.558811)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 7.522765 4.562345) (xy 7.562119 4.576409) (xy 7.563638 4.577097) (xy 7.61708 4.617881)
(xy 7.646525 4.659832) (xy 7.652287 4.679501) (xy 7.652002 4.705637) (xy 7.643895 4.742868)
(xy 7.626188 4.795828) (xy 7.597104 4.869145) (xy 7.554867 4.967451) (xy 7.4977 5.095376)
(xy 7.423826 5.257552) (xy 7.383164 5.346193) (xy 7.309739 5.504435) (xy 7.240811 5.649957)
(xy 7.179012 5.777437) (xy 7.126971 5.881556) (xy 7.087321 5.956993) (xy 7.062691 5.998428)
(xy 7.057817 6.004152) (xy 6.995458 6.029402) (xy 6.92502 6.02602) (xy 6.868528 5.99531)
(xy 6.866226 5.992812) (xy 6.843754 5.958792) (xy 6.806058 5.892528) (xy 6.757786 5.802549)
(xy 6.703588 5.697386) (xy 6.68411 5.658633) (xy 6.537082 5.36414) (xy 6.376823 5.684049)
(xy 6.319621 5.794583) (xy 6.266551 5.890444) (xy 6.221949 5.964293) (xy 6.19015 6.008793)
(xy 6.179373 6.018229) (xy 6.095606 6.031009) (xy 6.026484 6.004152) (xy 6.006151 5.975449)
(xy 5.970966 5.911658) (xy 5.923799 5.819056) (xy 5.86752 5.70392) (xy 5.804999 5.572526)
(xy 5.739107 5.431152) (xy 5.672714 5.286074) (xy 5.60869 5.14357) (xy 5.549906 5.009917)
(xy 5.499232 4.891391) (xy 5.459538 4.794269) (xy 5.433695 4.724829) (xy 5.424572 4.689347)
(xy 5.424665 4.688062) (xy 5.446861 4.643414) (xy 5.491226 4.59794) (xy 5.493839 4.595962)
(xy 5.548366 4.56514) (xy 5.598801 4.565438) (xy 5.617704 4.571249) (xy 5.640739 4.583807)
(xy 5.6652 4.608511) (xy 5.694022 4.650484) (xy 5.73014 4.714852) (xy 5.776488 4.80674)
(xy 5.835999 4.931271) (xy 5.889667 5.046223) (xy 5.951412 5.179472) (xy 6.00674 5.2993)
(xy 6.052777 5.399448) (xy 6.08665 5.473655) (xy 6.105482 5.515661) (xy 6.108229 5.522232)
(xy 6.120582 5.51149) (xy 6.148973 5.466513) (xy 6.189625 5.393865) (xy 6.238759 5.300111)
(xy 6.258311 5.261429) (xy 6.324545 5.130812) (xy 6.375624 5.035688) (xy 6.41574 4.970529)
(xy 6.449084 4.929802) (xy 6.479849 4.907978) (xy 6.512225 4.899526) (xy 6.533324 4.898571)
(xy 6.570542 4.901869) (xy 6.603156 4.915509) (xy 6.635562 4.945111) (xy 6.672156 4.996293)
(xy 6.717334 5.074675) (xy 6.775492 5.185877) (xy 6.80758 5.249135) (xy 6.859628 5.349952)
(xy 6.905024 5.433557) (xy 6.93976 5.492897) (xy 6.959833 5.520916) (xy 6.962563 5.522083)
(xy 6.975526 5.500031) (xy 7.004549 5.44277) (xy 7.046725 5.356293) (xy 7.099148 5.246593)
(xy 7.158911 5.119663) (xy 7.188309 5.056616) (xy 7.264788 4.893907) (xy 7.326372 4.768706)
(xy 7.376258 4.676928) (xy 7.417643 4.614487) (xy 7.453724 4.5773) (xy 7.487699 4.561281)
(xy 7.522765 4.562345)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 8.414627 4.572074) (xy 8.462265 4.601746) (xy 8.515804 4.6451) (xy 8.515804 5.291062)
(xy 8.515633 5.480015) (xy 8.514903 5.628881) (xy 8.513285 5.742932) (xy 8.510451 5.827436)
(xy 8.506072 5.887663) (xy 8.499821 5.928885) (xy 8.491369 5.95637) (xy 8.480388 5.97539)
(xy 8.472601 5.984762) (xy 8.409443 6.025931) (xy 8.337523 6.024252) (xy 8.274522 5.989147)
(xy 8.220982 5.945793) (xy 8.220982 4.6451) (xy 8.274522 4.601746) (xy 8.326195 4.57021)
(xy 8.368393 4.558393) (xy 8.414627 4.572074)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 9.970443 4.558587) (xy 10.128561 4.559347) (xy 10.251288 4.560937) (xy 10.343606 4.563622)
(xy 10.410499 4.567667) (xy 10.456948 4.573337) (xy 10.487937 4.580897) (xy 10.508448 4.590612)
(xy 10.518374 4.59808) (xy 10.569891 4.663442) (xy 10.576123 4.731305) (xy 10.544287 4.792954)
(xy 10.523468 4.817589) (xy 10.501065 4.834387) (xy 10.468597 4.844847) (xy 10.417586 4.850472)
(xy 10.33955 4.85276) (xy 10.22601 4.853212) (xy 10.203711 4.853214) (xy 9.910536 4.853214)
(xy 9.910536 5.3975) (xy 9.910343 5.569059) (xy 9.909466 5.701066) (xy 9.907458 5.799322)
(xy 9.903874 5.869633) (xy 9.898267 5.9178) (xy 9.890191 5.949628) (xy 9.879198 5.970919)
(xy 9.865179 5.987143) (xy 9.799019 6.027011) (xy 9.729954 6.023869) (xy 9.66732 5.978382)
(xy 9.662718 5.972745) (xy 9.647737 5.951435) (xy 9.636323 5.926502) (xy 9.627994 5.891886)
(xy 9.622267 5.84153) (xy 9.618659 5.769375) (xy 9.616686 5.669363) (xy 9.615866 5.535435)
(xy 9.615715 5.383102) (xy 9.615715 4.853214) (xy 9.335747 4.853214) (xy 9.215602 4.852401)
(xy 9.132425 4.849233) (xy 9.077843 4.842616) (xy 9.043486 4.831456) (xy 9.02098 4.814661)
(xy 9.018247 4.811741) (xy 8.985386 4.744967) (xy 8.988292 4.669477) (xy 9.026072 4.60375)
(xy 9.040682 4.591001) (xy 9.05952 4.580892) (xy 9.087608 4.573117) (xy 9.12997 4.567372)
(xy 9.19163 4.563351) (xy 9.277612 4.560749) (xy 9.392938 4.559259) (xy 9.542632 4.558576)
(xy 9.731718 4.558396) (xy 9.771952 4.558393) (xy 9.970443 4.558587)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 12.513262 4.569374) (xy 12.576299 4.614058) (xy 12.631965 4.669724) (xy 12.631965 5.291357)
(xy 12.631819 5.475936) (xy 12.63113 5.62066) (xy 12.629517 5.731032) (xy 12.6266 5.812553)
(xy 12.622002 5.870726) (xy 12.615341 5.911054) (xy 12.606238 5.939037) (xy 12.594314 5.96018)
(xy 12.584961 5.972745) (xy 12.523225 6.022112) (xy 12.452337 6.02747) (xy 12.387546 5.997196)
(xy 12.366137 5.979323) (xy 12.351826 5.955582) (xy 12.343194 5.917352) (xy 12.338822 5.85601)
(xy 12.33729 5.762937) (xy 12.337143 5.691035) (xy 12.337143 5.420179) (xy 11.339286 5.420179)
(xy 11.339286 5.666584) (xy 11.338254 5.779259) (xy 11.334126 5.856695) (xy 11.325351 5.908985)
(xy 11.310382 5.946221) (xy 11.292283 5.972745) (xy 11.230201 6.021973) (xy 11.159992 6.027802)
(xy 11.092779 5.992812) (xy 11.074428 5.97447) (xy 11.061468 5.950154) (xy 11.052919 5.912278)
(xy 11.047805 5.853255) (xy 11.045149 5.765499) (xy 11.043971 5.641423) (xy 11.043834 5.612946)
(xy 11.042862 5.379169) (xy 11.042361 5.186505) (xy 11.042524 5.030712) (xy 11.043545 4.907548)
(xy 11.045617 4.81277) (xy 11.048933 4.742136) (xy 11.053687 4.691403) (xy 11.060071 4.656329)
(xy 11.06828 4.63267) (xy 11.078507 4.616186) (xy 11.089822 4.60375) (xy 11.153829 4.563971)
(xy 11.220583 4.569374) (xy 11.28362 4.614058) (xy 11.309129 4.642887) (xy 11.325389 4.674732)
(xy 11.334461 4.720085) (xy 11.338406 4.789443) (xy 11.339285 4.893299) (xy 11.339286 4.897541)
(xy 11.339286 5.125357) (xy 12.337143 5.125357) (xy 12.337143 4.887232) (xy 12.338161 4.777528)
(xy 12.342251 4.703453) (xy 12.350965 4.655304) (xy 12.365855 4.623378) (xy 12.3825 4.60375)
(xy 12.446507 4.563971) (xy 12.513262 4.569374)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -5.919107 -5.044311) (xy -5.89728 -4.815415) (xy -5.833763 -4.599209) (xy -5.731503 -4.400327)
(xy -5.593446 -4.223403) (xy -5.422538 -4.073071) (xy -5.227698 -3.956819) (xy -5.014212 -3.877223)
(xy -4.799229 -3.83992) (xy -4.586986 -3.842209) (xy -4.381724 -3.881391) (xy -4.18768 -3.954766)
(xy -4.009093 -4.059632) (xy -3.850204 -4.193292) (xy -3.71525 -4.353043) (xy -3.608471 -4.536186)
(xy -3.534105 -4.740022) (xy -3.496392 -4.961849) (xy -3.4925 -5.062086) (xy -3.4925 -5.23875)
(xy -3.388178 -5.23875) (xy -3.315239 -5.233035) (xy -3.261204 -5.209331) (xy -3.20675 -5.161643)
(xy -3.129643 -5.084536) (xy -3.129643 -0.681827) (xy -3.129661 -0.155211) (xy -3.129726 0.327939)
(xy -3.129854 0.769515) (xy -3.130062 1.171409) (xy -3.130366 1.535512) (xy -3.130783 1.863715)
(xy -3.131328 2.157911) (xy -3.132019 2.41999) (xy -3.132872 2.651845) (xy -3.133902 2.855366)
(xy -3.135127 3.032446) (xy -3.136563 3.184976) (xy -3.138226 3.314847) (xy -3.140133 3.423951)
(xy -3.142299 3.514179) (xy -3.144742 3.587424) (xy -3.147478 3.645576) (xy -3.150523 3.690528)
(xy -3.153893 3.72417) (xy -3.157606 3.748395) (xy -3.161676 3.765093) (xy -3.166122 3.776157)
(xy -3.168296 3.779874) (xy -3.176659 3.79396) (xy -3.18376 3.806911) (xy -3.191453 3.818772)
(xy -3.201593 3.829593) (xy -3.216034 3.83942) (xy -3.236631 3.8483) (xy -3.265239 3.856282)
(xy -3.303711 3.863412) (xy -3.353903 3.869738) (xy -3.417669 3.875308) (xy -3.496864 3.880168)
(xy -3.593342 3.884366) (xy -3.708958 3.88795) (xy -3.845565 3.890968) (xy -4.00502 3.893465)
(xy -4.189175 3.89549) (xy -4.399886 3.897091) (xy -4.639008 3.898314) (xy -4.908395 3.899208)
(xy -5.2099 3.899819) (xy -5.54538 3.900194) (xy -5.916688 3.900383) (xy -6.325679 3.900431)
(xy -6.774208 3.900386) (xy -7.264128 3.900295) (xy -7.797295 3.900207) (xy -7.874405 3.900198)
(xy -8.410745 3.900111) (xy -8.903575 3.899969) (xy -9.354742 3.899758) (xy -9.766093 3.899462)
(xy -10.139476 3.899067) (xy -10.476738 3.898559) (xy -10.779725 3.897924) (xy -11.050286 3.897146)
(xy -11.290267 3.896211) (xy -11.501515 3.895105) (xy -11.685878 3.893813) (xy -11.845202 3.89232)
(xy -11.981335 3.890613) (xy -12.096125 3.888676) (xy -12.191417 3.886496) (xy -12.26906 3.884057)
(xy -12.3309 3.881345) (xy -12.378785 3.878346) (xy -12.414562 3.875045) (xy -12.440078 3.871427)
(xy -12.457181 3.867479) (xy -12.465935 3.864127) (xy -12.482935 3.856954) (xy -12.498542 3.851659)
(xy -12.512816 3.846362) (xy -12.525816 3.839188) (xy -12.5376 3.828256) (xy -12.548228 3.811691)
(xy -12.557759 3.787614) (xy -12.566253 3.754147) (xy -12.573769 3.709413) (xy -12.580366 3.651533)
(xy -12.586104 3.578631) (xy -12.59104 3.488828) (xy -12.595236 3.380246) (xy -12.59875 3.251007)
(xy -12.601641 3.099235) (xy -12.603968 2.92305) (xy -12.605791 2.720576) (xy -12.60717 2.489935)
(xy -12.608162 2.229248) (xy -12.608828 1.936638) (xy -12.609227 1.610227) (xy -12.609417 1.248138)
(xy -12.609459 0.848492) (xy -12.609412 0.409412) (xy -12.609334 -0.07098) (xy -12.609286 -0.594562)
(xy -12.609285 -0.679241) (xy -12.609313 -1.207382) (xy -12.609363 -1.692057) (xy -12.609385 -2.135159)
(xy -12.609326 -2.538579) (xy -12.609136 -2.904209) (xy -12.608763 -3.23394) (xy -12.608154 -3.529666)
(xy -12.60726 -3.793276) (xy -12.606096 -4.014107) (xy -11.997716 -4.014107) (xy -11.917781 -3.897902)
(xy -11.89534 -3.866225) (xy -11.875109 -3.838177) (xy -11.856973 -3.811372) (xy -11.84082 -3.783429)
(xy -11.826534 -3.751964) (xy -11.814001 -3.714594) (xy -11.803107 -3.668934) (xy -11.793739 -3.612601)
(xy -11.785782 -3.543213) (xy -11.779122 -3.458386) (xy -11.773644 -3.355736) (xy -11.769236 -3.23288)
(xy -11.765782 -3.087434) (xy -11.763168 -2.917016) (xy -11.761281 -2.719241) (xy -11.760006 -2.491726)
(xy -11.75923 -2.232089) (xy -11.758837 -1.937945) (xy -11.758714 -1.60691) (xy -11.758747 -1.236603)
(xy -11.758822 -0.824639) (xy -11.758839 -0.578304) (xy -11.758791 -0.142468) (xy -11.758723 0.250396)
(xy -11.758747 0.602675) (xy -11.758977 0.916756) (xy -11.759525 1.195025) (xy -11.760504 1.439867)
(xy -11.762028 1.653669) (xy -11.764209 1.838817) (xy -11.76716 1.997696) (xy -11.770994 2.132694)
(xy -11.775825 2.246196) (xy -11.781765 2.340588) (xy -11.788926 2.418257) (xy -11.797423 2.481588)
(xy -11.807368 2.532968) (xy -11.818873 2.574783) (xy -11.832053 2.609418) (xy -11.847019 2.639261)
(xy -11.863885 2.666696) (xy -11.882764 2.694111) (xy -11.903768 2.723891) (xy -11.916004 2.741752)
(xy -11.993897 2.8575) (xy -10.926023 2.8575) (xy -10.678425 2.85743) (xy -10.472518 2.857128)
(xy -10.304637 2.856452) (xy -10.171116 2.855261) (xy -10.06829 2.853415) (xy -9.992492 2.850772)
(xy -9.940057 2.847193) (xy -9.90732 2.842535) (xy -9.890614 2.836659) (xy -9.886275 2.829423)
(xy -9.890636 2.820686) (xy -9.893039 2.817812) (xy -9.943563 2.743339) (xy -9.99559 2.637265)
(xy -10.043019 2.512708) (xy -10.059631 2.459646) (xy -10.068906 2.423603) (xy -10.076744 2.381293)
(xy -10.08331 2.328526) (xy -10.088769 2.261113) (xy -10.093288 2.174863) (xy -10.09703 2.065588)
(xy -10.100161 1.929098) (xy -10.102845 1.761203) (xy -10.105249 1.557714) (xy -10.107537 1.314441)
(xy -10.108295 1.224643) (xy -10.110337 0.973223) (xy -10.111861 0.763557) (xy -10.11275 0.592046)
(xy -10.112886 0.455088) (xy -10.112152 0.349082) (xy -10.11043 0.270429) (xy -10.107604 0.215527)
(xy -10.103555 0.180776) (xy -10.098166 0.162575) (xy -10.091321 0.157323) (xy -10.082901 0.16142)
(xy -10.073913 0.170089) (xy -10.053111 0.196075) (xy -10.008798 0.254483) (xy -9.944109 0.341033)
(xy -9.862179 0.451443) (xy -9.766144 0.58143) (xy -9.659139 0.726714) (xy -9.544299 0.883013)
(xy -9.42476 1.046045) (xy -9.303658 1.211529) (xy -9.184127 1.375183) (xy -9.069304 1.532725)
(xy -8.962322 1.679874) (xy -8.866318 1.812349) (xy -8.784428 1.925866) (xy -8.719786 2.016146)
(xy -8.675528 2.078907) (xy -8.666351 2.092231) (xy -8.620303 2.166366) (xy -8.566447 2.262774)
(xy -8.515423 2.362292) (xy -8.508953 2.375713) (xy -8.465404 2.472534) (xy -8.440119 2.547992)
(xy -8.428608 2.619963) (xy -8.426362 2.70442) (xy -8.427635 2.8575) (xy -6.10845 2.8575)
(xy -6.291591 2.669201) (xy -6.385603 2.568967) (xy -6.486627 2.455504) (xy -6.579127 2.34648)
(xy -6.62016 2.295549) (xy -6.681309 2.216105) (xy -6.761775 2.109207) (xy -6.859207 1.978126)
(xy -6.971252 1.826138) (xy -7.095557 1.656516) (xy -7.229769 1.472532) (xy -7.371536 1.277462)
(xy -7.518505 1.074577) (xy -7.668322 0.867153) (xy -7.818636 0.658462) (xy -7.967094 0.451779)
(xy -8.111342 0.250376) (xy -8.249029 0.057527) (xy -8.377801 -0.123494) (xy -8.495306 -0.289414)
(xy -8.59919 -0.436959) (xy -8.687102 -0.562855) (xy -8.756688 -0.663829) (xy -8.805595 -0.736607)
(xy -8.831472 -0.777916) (xy -8.835004 -0.786157) (xy -8.819014 -0.808911) (xy -8.777239 -0.863514)
(xy -8.712416 -0.946549) (xy -8.627284 -1.0546) (xy -8.524581 -1.184251) (xy -8.407045 -1.332086)
(xy -8.277416 -1.494688) (xy -8.138432 -1.66864) (xy -7.99283 -1.850528) (xy -7.84335 -2.036934)
(xy -7.723358 -2.186313) (xy -5.692321 -2.186313) (xy -5.680449 -2.160283) (xy -5.651662 -2.115586)
(xy -5.649558 -2.112608) (xy -5.611816 -2.052033) (xy -5.572347 -1.978041) (xy -5.564514 -1.961696)
(xy -5.55741 -1.944763) (xy -5.551132 -1.924435) (xy -5.545618 -1.897914) (xy -5.540809 -1.862402)
(xy -5.536644 -1.815099) (xy -5.533061 -1.753206) (xy -5.530001 -1.673926) (xy -5.527404 -1.574459)
(xy -5.525208 -1.452007) (xy -5.523353 -1.303772) (xy -5.521779 -1.126954) (xy -5.520424 -0.918754)
(xy -5.51923 -0.676375) (xy -5.518134 -0.397017) (xy -5.517077 -0.077882) (xy -5.516004 0.281428)
(xy -5.514923 0.653317) (xy -5.51405 0.982658) (xy -5.513521 1.272261) (xy -5.513471 1.524935)
(xy -5.514036 1.74349) (xy -5.51535 1.930735) (xy -5.51755 2.08948) (xy -5.520771 2.222535)
(xy -5.525149 2.332708) (xy -5.530818 2.422809) (xy -5.537914 2.495648) (xy -5.546573 2.554034)
(xy -5.55693 2.600777) (xy -5.569121 2.638686) (xy -5.58328 2.67057) (xy -5.599544 2.69924)
(xy -5.618047 2.727504) (xy -5.635124 2.75255) (xy -5.669549 2.805373) (xy -5.689932 2.840698)
(xy -5.692321 2.847168) (xy -5.67041 2.849332) (xy -5.607745 2.851342) (xy -5.50893 2.85315)
(xy -5.378569 2.854708) (xy -5.221265 2.855967) (xy -5.041621 2.85688) (xy -4.844241 2.857398)
(xy -4.705803 2.8575) (xy -4.49488 2.857057) (xy -4.300331 2.855788) (xy -4.126554 2.853782)
(xy -3.977944 2.851126) (xy -3.858898 2.84791) (xy -3.773812 2.844223) (xy -3.727084 2.840153)
(xy -3.719285 2.837598) (xy -3.734749 2.807659) (xy -3.750818 2.791527) (xy -3.777279 2.757121)
(xy -3.811912 2.696349) (xy -3.835862 2.647009) (xy -3.889375 2.528661) (xy -3.895552 0.16442)
(xy -3.90173 -2.199822) (xy -4.797026 -2.199821) (xy -4.993532 -2.199491) (xy -5.175127 -2.19855)
(xy -5.336979 -2.19707) (xy -5.474253 -2.195125) (xy -5.58212 -2.192786) (xy -5.655745 -2.190128)
(xy -5.690297 -2.187223) (xy -5.692321 -2.186313) (xy -7.723358 -2.186313) (xy -7.692729 -2.224442)
(xy -7.543707 -2.409636) (xy -7.399021 -2.589099) (xy -7.261411 -2.759416) (xy -7.133614 -2.917169)
(xy -7.018369 -3.058943) (xy -6.918414 -3.181321) (xy -6.836488 -3.280888) (xy -6.802006 -3.322411)
(xy -6.628651 -3.524632) (xy -6.474769 -3.691891) (xy -6.336528 -3.828137) (xy -6.210095 -3.937321)
(xy -6.19125 -3.952122) (xy -6.111875 -4.013604) (xy -7.248687 -4.013856) (xy -8.3855 -4.014107)
(xy -8.374874 -3.917723) (xy -8.38151 -3.802524) (xy -8.424764 -3.665365) (xy -8.505071 -3.505154)
(xy -8.596089 -3.359943) (xy -8.628671 -3.31445) (xy -8.685028 -3.239003) (xy -8.761801 -3.137905)
(xy -8.855631 -3.015456) (xy -8.963158 -2.87596) (xy -9.081022 -2.723717) (xy -9.205865 -2.563031)
(xy -9.334327 -2.398203) (xy -9.463048 -2.233535) (xy -9.588669 -2.073329) (xy -9.70783 -1.921888)
(xy -9.817172 -1.783513) (xy -9.913336 -1.662506) (xy -9.992962 -1.563169) (xy -10.052691 -1.489805)
(xy -10.089162 -1.446715) (xy -10.095306 -1.440089) (xy -10.101051 -1.456174) (xy -10.105498 -1.517032)
(xy -10.10864 -1.622098) (xy -10.110468 -1.770808) (xy -10.110977 -1.962596) (xy -10.110159 -2.196897)
(xy -10.108333 -2.437946) (xy -10.105676 -2.703349) (xy -10.102613 -2.927824) (xy -10.098644 -3.115799)
(xy -10.093269 -3.271702) (xy -10.085989 -3.399964) (xy -10.076304 -3.505011) (xy -10.063714 -3.591273)
(xy -10.04772 -3.663179) (xy -10.027822 -3.725157) (xy -10.00352 -3.781636) (xy -9.974316 -3.837044)
(xy -9.94482 -3.887345) (xy -9.868487 -4.014107) (xy -11.997716 -4.014107) (xy -12.606096 -4.014107)
(xy -12.606029 -4.026663) (xy -12.604409 -4.231719) (xy -12.602349 -4.410335) (xy -12.599798 -4.564404)
(xy -12.596704 -4.695816) (xy -12.593016 -4.806465) (xy -12.588683 -4.89824) (xy -12.583653 -4.973035)
(xy -12.577875 -5.032741) (xy -12.571298 -5.07925) (xy -12.563869 -5.114453) (xy -12.555539 -5.140243)
(xy -12.546255 -5.15851) (xy -12.535966 -5.171148) (xy -12.524621 -5.180046) (xy -12.512168 -5.187098)
(xy -12.498556 -5.194196) (xy -12.48651 -5.201364) (xy -12.475998 -5.206539) (xy -12.459573 -5.211217)
(xy -12.435038 -5.215423) (xy -12.400193 -5.219182) (xy -12.352839 -5.222517) (xy -12.290778 -5.225456)
(xy -12.211811 -5.228021) (xy -12.113738 -5.230238) (xy -11.994361 -5.232132) (xy -11.851481 -5.233727)
(xy -11.682898 -5.235049) (xy -11.486415 -5.236122) (xy -11.259832 -5.236971) (xy -11.00095 -5.23762)
(xy -10.70757 -5.238096) (xy -10.377493 -5.238422) (xy -10.008521 -5.238623) (xy -9.598454 -5.238724)
(xy -9.17428 -5.23875) (xy -5.919107 -5.23875) (xy -5.919107 -5.044311)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 0.659791 -4.12017) (xy 0.981503 -4.077634) (xy 1.310847 -3.996995) (xy 1.651969 -3.877456)
(xy 2.009015 -3.718217) (xy 2.031651 -3.707078) (xy 2.147556 -3.650777) (xy 2.251111 -3.602407)
(xy 2.33476 -3.565348) (xy 2.390951 -3.542975) (xy 2.410179 -3.537857) (xy 2.448784 -3.527797)
(xy 2.458048 -3.519348) (xy 2.447796 -3.498389) (xy 2.415573 -3.445578) (xy 2.365088 -3.366449)
(xy 2.300051 -3.266537) (xy 2.224172 -3.151375) (xy 2.141161 -3.026499) (xy 2.054729 -2.897442)
(xy 1.968583 -2.769739) (xy 1.886436 -2.648924) (xy 1.811996 -2.540531) (xy 1.748974 -2.450095)
(xy 1.701079 -2.383149) (xy 1.672021 -2.345229) (xy 1.668033 -2.340831) (xy 1.647706 -2.350169)
(xy 1.602825 -2.384676) (xy 1.541411 -2.437955) (xy 1.509783 -2.467037) (xy 1.315943 -2.618272)
(xy 1.101569 -2.729649) (xy 0.869529 -2.800164) (xy 0.622692 -2.828812) (xy 0.483272 -2.82646)
(xy 0.239913 -2.791985) (xy 0.020502 -2.7199) (xy -0.175615 -2.60968) (xy -0.349095 -2.460797)
(xy -0.500593 -2.272725) (xy -0.630766 -2.044936) (xy -0.705935 -1.870982) (xy -0.794032 -1.598371)
(xy -0.858961 -1.302087) (xy -0.90089 -0.989771) (xy -0.919987 -0.669062) (xy -0.916418 -0.3476)
(xy -0.890351 -0.033025) (xy -0.841953 0.267022) (xy -0.771391 0.544901) (xy -0.678833 0.792973)
(xy -0.646124 0.861786) (xy -0.509022 1.090977) (xy -0.347384 1.284824) (xy -0.163585 1.441748)
(xy 0.040001 1.560168) (xy 0.261001 1.638506) (xy 0.49704 1.675181) (xy 0.580346 1.677879)
(xy 0.824548 1.65594) (xy 1.066498 1.590014) (xy 1.303125 1.481463) (xy 1.531362 1.331648)
(xy 1.714993 1.174296) (xy 1.808469 1.084837) (xy 2.172623 1.682017) (xy 2.263221 1.831004)
(xy 2.346065 1.968039) (xy 2.418218 2.088199) (xy 2.476741 2.186558) (xy 2.518695 2.258194)
(xy 2.541142 2.298182) (xy 2.544059 2.304399) (xy 2.527527 2.323764) (xy 2.476141 2.358479)
(xy 2.396398 2.405256) (xy 2.294794 2.460805) (xy 2.177828 2.521839) (xy 2.051996 2.58507)
(xy 1.923794 2.647209) (xy 1.79972 2.704968) (xy 1.686271 2.75506) (xy 1.589944 2.794196)
(xy 1.54283 2.81113) (xy 1.274105 2.887097) (xy 0.997086 2.937326) (xy 0.700357 2.96345)
(xy 0.445648 2.968127) (xy 0.30913 2.965928) (xy 0.177342 2.961714) (xy 0.061969 2.956005)
(xy -0.025305 2.94932) (xy -0.053641 2.945938) (xy -0.332912 2.88801) (xy -0.617229 2.797368)
(xy -0.893421 2.679408) (xy -1.148314 2.539527) (xy -1.304018 2.433697) (xy -1.55997 2.216328)
(xy -1.797632 1.962063) (xy -2.012601 1.677187) (xy -2.200475 1.367982) (xy -2.356853 1.040731)
(xy -2.444954 0.805089) (xy -2.545898 0.436195) (xy -2.613194 0.045364) (xy -2.646865 -0.358945)
(xy -2.646931 -0.768278) (xy -2.613412 -1.174177) (xy -2.546331 -1.568186) (xy -2.445708 -1.941848)
(xy -2.438041 -1.965128) (xy -2.311713 -2.290682) (xy -2.157533 -2.587837) (xy -1.970272 -2.865004)
(xy -1.744699 -3.130592) (xy -1.656577 -3.221521) (xy -1.383077 -3.470511) (xy -1.101915 -3.676511)
(xy -0.808773 -3.841763) (xy -0.499335 -3.96851) (xy -0.169287 -4.058995) (xy 0.022679 -4.094131)
(xy 0.341565 -4.125403) (xy 0.659791 -4.12017)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 5.371019 -2.277016) (xy 5.676212 -2.236808) (xy 5.947948 -2.169238) (xy 6.187981 -2.073767)
(xy 6.398066 -1.949857) (xy 6.553978 -1.822169) (xy 6.692274 -1.673239) (xy 6.800236 -1.512983)
(xy 6.886427 -1.327719) (xy 6.917514 -1.241195) (xy 6.943347 -1.162885) (xy 6.965851 -1.090268)
(xy 6.985286 -1.019664) (xy 7.001912 -0.94739) (xy 7.015989 -0.869766) (xy 7.027779 -0.78311)
(xy 7.03754 -0.683741) (xy 7.045535 -0.567978) (xy 7.052022 -0.432139) (xy 7.057264 -0.272543)
(xy 7.061519 -0.085509) (xy 7.065048 0.132644) (xy 7.068112 0.385598) (xy 7.070972 0.677033)
(xy 7.073487 0.963839) (xy 7.076152 1.277615) (xy 7.078574 1.549364) (xy 7.081004 1.782413)
(xy 7.083695 1.98009) (xy 7.086899 2.145722) (xy 7.090866 2.282636) (xy 7.095851 2.39416)
(xy 7.102103 2.483622) (xy 7.109876 2.554348) (xy 7.11942 2.609666) (xy 7.130989 2.652903)
(xy 7.144834 2.687388) (xy 7.161207 2.716446) (xy 7.180359 2.743406) (xy 7.202543 2.771594)
(xy 7.211183 2.782509) (xy 7.242963 2.82839) (xy 7.257098 2.859635) (xy 7.257143 2.860558)
(xy 7.235292 2.864975) (xy 7.173044 2.869045) (xy 7.075361 2.872652) (xy 6.947204 2.875683)
(xy 6.793532 2.878023) (xy 6.619307 2.879558) (xy 6.42949 2.880172) (xy 6.40758 2.880179)
(xy 5.558016 2.880179) (xy 5.551464 2.687188) (xy 5.544911 2.494197) (xy 5.420179 2.596627)
(xy 5.22465 2.732257) (xy 5.003866 2.842129) (xy 4.830165 2.902857) (xy 4.691407 2.932365)
(xy 4.523958 2.95244) (xy 4.343624 2.962458) (xy 4.166207 2.96179) (xy 4.007513 2.949812)
(xy 3.934732 2.938334) (xy 3.653445 2.862272) (xy 3.399465 2.752096) (xy 3.174629 2.609446)
(xy 2.980774 2.435962) (xy 2.819734 2.233284) (xy 2.693346 2.003054) (xy 2.604199 1.749745)
(xy 2.57942 1.636073) (xy 2.564133 1.511119) (xy 2.556843 1.360774) (xy 2.555849 1.292679)
(xy 2.55598 1.28628) (xy 4.082641 1.28628) (xy 4.101312 1.437053) (xy 4.157937 1.565277)
(xy 4.255307 1.67705) (xy 4.265466 1.685914) (xy 4.362486 1.755879) (xy 4.466365 1.801244)
(xy 4.588371 1.825192) (xy 4.73977 1.830904) (xy 4.776147 1.83009) (xy 4.884264 1.824761)
(xy 4.964681 1.81388) (xy 5.035027 1.793462) (xy 5.112931 1.75952) (xy 5.13431 1.749117)
(xy 5.256154 1.677141) (xy 5.350209 1.591496) (xy 5.375797 1.560884) (xy 5.465536 1.447356)
(xy 5.465536 1.053855) (xy 5.46446 0.89586) (xy 5.461065 0.779441) (xy 5.455102 0.700865)
(xy 5.446321 0.656399) (xy 5.438115 0.643408) (xy 5.406122 0.637052) (xy 5.338254 0.631784)
(xy 5.243987 0.628101) (xy 5.1328 0.626499) (xy 5.114945 0.626469) (xy 4.872316 0.637023)
(xy 4.666059 0.669502) (xy 4.492179 0.725145) (xy 4.346681 0.805195) (xy 4.236331 0.899514)
(xy 4.146839 1.015804) (xy 4.09717 1.142463) (xy 4.082641 1.28628) (xy 2.55598 1.28628)
(xy 2.559733 1.104331) (xy 2.576496 0.945828) (xy 2.609133 0.802747) (xy 2.660635 0.660665)
(xy 2.708842 0.555454) (xy 2.826603 0.364009) (xy 2.983494 0.187171) (xy 3.174741 0.02816)
(xy 3.395569 -0.109808) (xy 3.641205 -0.223512) (xy 3.906874 -0.309735) (xy 4.036786 -0.339747)
(xy 4.310365 -0.384154) (xy 4.608582 -0.413451) (xy 4.912846 -0.426269) (xy 5.167093 -0.42299)
(xy 5.492312 -0.409371) (xy 5.477406 -0.527855) (xy 5.438648 -0.727047) (xy 5.376103 -0.889208)
(xy 5.288041 -1.015582) (xy 5.172732 -1.10741) (xy 5.028446 -1.165937) (xy 4.853453 -1.192406)
(xy 4.646022 -1.188059) (xy 4.569732 -1.180021) (xy 4.286091 -1.129461) (xy 4.011243 -1.047026)
(xy 3.82134 -0.970684) (xy 3.730617 -0.931762) (xy 3.653409 -0.900482) (xy 3.600471 -0.881107)
(xy 3.585026 -0.876993) (xy 3.56545 -0.895231) (xy 3.531864 -0.953429) (xy 3.48395 -1.052243)
(xy 3.421393 -1.192331) (xy 3.343877 -1.374351) (xy 3.330623 -1.406071) (xy 3.270242 -1.551351)
(xy 3.216042 -1.682629) (xy 3.170364 -1.794163) (xy 3.135548 -1.880213) (xy 3.113936 -1.935039)
(xy 3.107695 -1.952796) (xy 3.127782 -1.962348) (xy 3.18057 -1.972949) (xy 3.237366 -1.980341)
(xy 3.29795 -1.989897) (xy 3.393951 -2.008872) (xy 3.516856 -2.035406) (xy 3.65815 -2.067639)
(xy 3.80932 -2.103711) (xy 3.866697 -2.117818) (xy 4.077757 -2.169223) (xy 4.253867 -2.209527)
(xy 4.403709 -2.240018) (xy 4.535967 -2.261984) (xy 4.659324 -2.276711) (xy 4.78246 -2.285489)
(xy 4.914061 -2.289603) (xy 5.030614 -2.290402) (xy 5.371019 -2.277016)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 12.428251 -1.060223) (xy 12.42829 -0.589295) (xy 12.428342 -0.161512) (xy 12.428488 0.225338)
(xy 12.428805 0.573466) (xy 12.429371 0.885085) (xy 12.430265 1.162406) (xy 12.431565 1.40764)
(xy 12.433349 1.623001) (xy 12.435697 1.8107) (xy 12.438685 1.972948) (xy 12.442393 2.111957)
(xy 12.446899 2.22994) (xy 12.452282 2.329109) (xy 12.458619 2.411674) (xy 12.465988 2.479848)
(xy 12.47447 2.535843) (xy 12.484141 2.58187) (xy 12.495079 2.620143) (xy 12.507365 2.652871)
(xy 12.521075 2.682268) (xy 12.536288 2.710544) (xy 12.553083 2.739913) (xy 12.563516 2.758207)
(xy 12.632352 2.880179) (xy 10.908393 2.880179) (xy 10.908393 2.687411) (xy 10.906923 2.600296)
(xy 10.903002 2.533671) (xy 10.897359 2.49795) (xy 10.894864 2.494643) (xy 10.871918 2.508472)
(xy 10.826286 2.544317) (xy 10.780684 2.583239) (xy 10.671027 2.665072) (xy 10.53145 2.747445)
(xy 10.376659 2.822791) (xy 10.22136 2.883543) (xy 10.15938 2.902926) (xy 10.021773 2.932188)
(xy 9.855331 2.952199) (xy 9.675746 2.962331) (xy 9.498713 2.961956) (xy 9.339925 2.950445)
(xy 9.264197 2.938777) (xy 8.98677 2.862314) (xy 8.731031 2.746351) (xy 8.498355 2.591942)
(xy 8.290119 2.400144) (xy 8.107701 2.172012) (xy 7.973501 1.949426) (xy 7.863276 1.714872)
(xy 7.7789 1.475108) (xy 7.718639 1.221996) (xy 7.680759 0.947398) (xy 7.663526 0.643174)
(xy 7.662066 0.487589) (xy 7.666274 0.373527) (xy 9.331909 0.373527) (xy 9.332327 0.560495)
(xy 9.338179 0.736658) (xy 9.349554 0.891506) (xy 9.36654 1.014527) (xy 9.37173 1.039319)
(xy 9.435616 1.254843) (xy 9.519306 1.42967) (xy 9.623498 1.564237) (xy 9.748891 1.658983)
(xy 9.896185 1.71435) (xy 10.066077 1.730774) (xy 10.259267 1.708695) (xy 10.386786 1.677111)
(xy 10.485511 1.640569) (xy 10.594252 1.588642) (xy 10.675938 1.541026) (xy 10.817679 1.447877)
(xy 10.817679 -0.862775) (xy 10.682262 -0.950299) (xy 10.52451 -1.03251) (xy 10.355387 -1.086049)
(xy 10.184379 -1.110004) (xy 10.020971 -1.103461) (xy 9.874647 -1.065507) (xy 9.810454 -1.03423)
(xy 9.694088 -0.947852) (xy 9.595736 -0.833801) (xy 9.51306 -0.687908) (xy 9.443721 -0.506008)
(xy 9.38538 -0.283931) (xy 9.382806 -0.272143) (xy 9.362374 -0.147079) (xy 9.347021 0.009229)
(xy 9.336837 0.186268) (xy 9.331909 0.373527) (xy 7.666274 0.373527) (xy 7.677839 0.060058)
(xy 7.721924 -0.333363) (xy 7.794214 -0.692413) (xy 7.894606 -1.01683) (xy 8.022995 -1.306354)
(xy 8.179278 -1.560724) (xy 8.36335 -1.779679) (xy 8.575107 -1.962958) (xy 8.665839 -2.025136)
(xy 8.868638 -2.137932) (xy 9.076141 -2.217508) (xy 9.2973 -2.266043) (xy 9.541066 -2.28572)
(xy 9.726903 -2.28362) (xy 9.987369 -2.26159) (xy 10.213562 -2.217764) (xy 10.412027 -2.150128)
(xy 10.589306 -2.056669) (xy 10.687473 -1.98794) (xy 10.746468 -1.943915) (xy 10.790043 -1.91384)
(xy 10.806536 -1.905) (xy 10.80978 -1.926755) (xy 10.812373 -1.988335) (xy 10.81434 -2.084212)
(xy 10.815705 -2.208859) (xy 10.816495 -2.35675) (xy 10.816735 -2.522356) (xy 10.81645 -2.700151)
(xy 10.815665 -2.884607) (xy 10.814406 -3.070197) (xy 10.812698 -3.251394) (xy 10.810567 -3.42267)
(xy 10.808037 -3.578499) (xy 10.805135 -3.713352) (xy 10.801886 -3.821703) (xy 10.798315 -3.898025)
(xy 10.797327 -3.912054) (xy 10.782105 -4.053514) (xy 10.758879 -4.164304) (xy 10.723243 -4.258968)
(xy 10.670791 -4.352048) (xy 10.658201 -4.371295) (xy 10.609118 -4.445) (xy 12.427857 -4.445)
(xy 12.428251 -1.060223)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -4.56638 -5.973406) (xy -4.37297 -5.924714) (xy -4.199029 -5.838668) (xy -4.04874 -5.718579)
(xy -3.926284 -5.567757) (xy -3.835845 -5.389514) (xy -3.783086 -5.196033) (xy -3.771332 -5.000636)
(xy -3.801173 -4.81208) (xy -3.868874 -4.635581) (xy -3.970703 -4.476355) (xy -4.102925 -4.339615)
(xy -4.261808 -4.230578) (xy -4.443617 -4.15446) (xy -4.546606 -4.129502) (xy -4.635999 -4.114392)
(xy -4.704909 -4.108421) (xy -4.771124 -4.112087) (xy -4.852434 -4.125887) (xy -4.918922 -4.1399)
(xy -5.106588 -4.2032) (xy -5.274681 -4.305904) (xy -5.419416 -4.444898) (xy -5.537007 -4.617065)
(xy -5.565029 -4.671786) (xy -5.598051 -4.744845) (xy -5.61876 -4.806197) (xy -5.629941 -4.870748)
(xy -5.63438 -4.953401) (xy -5.634939 -5.045982) (xy -5.626729 -5.215451) (xy -5.599779 -5.354627)
(xy -5.549174 -5.476418) (xy -5.470002 -5.593728) (xy -5.392562 -5.682651) (xy -5.248136 -5.814875)
(xy -5.097279 -5.906145) (xy -4.931038 -5.960792) (xy -4.775078 -5.981433) (xy -4.56638 -5.973406)) (layer F.SilkS) (width 0.01))
)

View File

@ -0,0 +1,225 @@
(module HASwitchPlate:MeanWell_logo_18mm (layer F.Cu) (tedit 0)
(fp_text reference G*** (at 0 0) (layer F.SilkS) hide
(effects (font (size 1.524 1.524) (thickness 0.3)))
)
(fp_text value LOGO (at 0.75 0) (layer F.SilkS) hide
(effects (font (size 1.524 1.524) (thickness 0.3)))
)
(fp_poly (pts (xy 6.588606 3.879272) (xy 7.450667 3.879272) (xy 7.450667 4.248727) (xy 6.219152 4.248727)
(xy 6.219152 2.339878) (xy 6.588606 2.339878) (xy 6.588606 3.879272)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 4.898187 2.3458) (xy 5.064606 2.355272) (xy 5.081381 3.109575) (xy 5.086261 3.318201)
(xy 5.091097 3.50525) (xy 5.095634 3.662296) (xy 5.099616 3.780915) (xy 5.102786 3.852681)
(xy 5.104471 3.870682) (xy 5.135797 3.873805) (xy 5.217133 3.87757) (xy 5.336923 3.881549)
(xy 5.483611 3.885311) (xy 5.518727 3.886076) (xy 5.926667 3.894666) (xy 5.9359 4.071697)
(xy 5.945134 4.248727) (xy 4.679758 4.248727) (xy 4.680229 3.332787) (xy 4.681179 3.100019)
(xy 4.683638 2.886343) (xy 4.687388 2.699763) (xy 4.692211 2.548287) (xy 4.697889 2.43992)
(xy 4.704205 2.382668) (xy 4.706234 2.376588) (xy 4.756007 2.350548) (xy 4.861226 2.344243)
(xy 4.898187 2.3458)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 4.33493 2.532303) (xy 4.344164 2.709333) (xy 3.448243 2.709333) (xy 3.448243 3.078787)
(xy 4.248727 3.078787) (xy 4.248727 3.448242) (xy 3.448243 3.448242) (xy 3.448243 3.879272)
(xy 4.371879 3.879272) (xy 4.371879 4.248727) (xy 3.04711 4.248727) (xy 3.055252 3.302)
(xy 3.063394 2.355272) (xy 4.325697 2.355272) (xy 4.33493 2.532303)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 0.834943 2.345827) (xy 1.000606 2.355272) (xy 1.039781 2.509212) (xy 1.060308 2.596315)
(xy 1.089254 2.727713) (xy 1.123151 2.887284) (xy 1.158535 3.058905) (xy 1.167657 3.104037)
(xy 1.209047 3.303825) (xy 1.241321 3.445346) (xy 1.2653 3.531099) (xy 1.281811 3.563585)
(xy 1.291675 3.545305) (xy 1.295447 3.491858) (xy 1.300961 3.409673) (xy 1.309089 3.355878)
(xy 1.322025 3.294624) (xy 1.342658 3.187592) (xy 1.368219 3.049687) (xy 1.395936 2.89581)
(xy 1.417855 2.770909) (xy 1.439561 2.647885) (xy 1.461518 2.527004) (xy 1.470606 2.478424)
(xy 1.494034 2.355272) (xy 1.686249 2.346101) (xy 1.782225 2.343577) (xy 1.848091 2.353519)
(xy 1.892243 2.385905) (xy 1.923077 2.450712) (xy 1.948992 2.557918) (xy 1.972852 2.686651)
(xy 1.997007 2.821023) (xy 2.021932 2.959151) (xy 2.035239 3.032606) (xy 2.056201 3.151501)
(xy 2.075731 3.267783) (xy 2.081416 3.303367) (xy 2.104144 3.43705) (xy 2.122897 3.511906)
(xy 2.140197 3.530342) (xy 2.158567 3.494763) (xy 2.180531 3.407575) (xy 2.182283 3.399533)
(xy 2.209213 3.275239) (xy 2.23555 3.15384) (xy 2.24851 3.094181) (xy 2.270821 2.989778)
(xy 2.297304 2.863396) (xy 2.310051 2.801697) (xy 2.337949 2.674326) (xy 2.368951 2.544936)
(xy 2.382213 2.493818) (xy 2.419615 2.355272) (xy 2.584264 2.345814) (xy 2.681583 2.345232)
(xy 2.753459 2.353949) (xy 2.776095 2.363537) (xy 2.778338 2.402073) (xy 2.765392 2.490959)
(xy 2.738967 2.621335) (xy 2.700769 2.784337) (xy 2.676319 2.880995) (xy 2.63125 3.055536)
(xy 2.589602 3.21774) (xy 2.55474 3.354436) (xy 2.530028 3.452454) (xy 2.52159 3.486727)
(xy 2.491455 3.610218) (xy 2.456288 3.7505) (xy 2.41187 3.924307) (xy 2.381797 4.040909)
(xy 2.328079 4.248727) (xy 2.134444 4.248727) (xy 2.027842 4.246674) (xy 1.967698 4.237158)
(xy 1.93894 4.215139) (xy 1.927238 4.179454) (xy 1.883428 3.952496) (xy 1.841848 3.730874)
(xy 1.804088 3.523639) (xy 1.77174 3.339843) (xy 1.746392 3.188538) (xy 1.729637 3.078776)
(xy 1.723064 3.019609) (xy 1.723026 3.017212) (xy 1.718737 2.967825) (xy 1.701963 2.974014)
(xy 1.693333 2.986424) (xy 1.671574 3.049665) (xy 1.663017 3.128072) (xy 1.653163 3.231416)
(xy 1.635275 3.312799) (xy 1.619418 3.377157) (xy 1.596234 3.48699) (xy 1.5688 3.627083)
(xy 1.540194 3.782222) (xy 1.539358 3.786909) (xy 1.512444 3.936096) (xy 1.488672 4.064739)
(xy 1.470476 4.159874) (xy 1.460292 4.208536) (xy 1.459837 4.210242) (xy 1.421268 4.235196)
(xy 1.324777 4.247468) (xy 1.265344 4.248727) (xy 1.157722 4.245139) (xy 1.097002 4.231798)
(xy 1.06879 4.204834) (xy 1.064921 4.194848) (xy 1.050213 4.142754) (xy 1.02451 4.047088)
(xy 0.992102 3.923926) (xy 0.972507 3.848484) (xy 0.885895 3.513219) (xy 0.813631 3.23263)
(xy 0.754587 3.001793) (xy 0.707637 2.815785) (xy 0.671652 2.669681) (xy 0.645507 2.558557)
(xy 0.628074 2.477491) (xy 0.618226 2.421559) (xy 0.614835 2.385836) (xy 0.616776 2.365398)
(xy 0.622919 2.355323) (xy 0.629832 2.351519) (xy 0.681333 2.344627) (xy 0.770454 2.343405)
(xy 0.834943 2.345827)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -1.518214 2.454014) (xy -1.449647 2.586322) (xy -1.365061 2.746885) (xy -1.273149 2.919464)
(xy -1.182606 3.087824) (xy -1.102126 3.235725) (xy -1.040404 3.34693) (xy -1.03533 3.355878)
(xy -0.93903 3.525212) (xy -0.921913 2.940242) (xy -0.916275 2.757348) (xy -0.910783 2.596856)
(xy -0.905813 2.468418) (xy -0.901738 2.381685) (xy -0.898935 2.346308) (xy -0.898822 2.346039)
(xy -0.867536 2.342529) (xy -0.792717 2.342966) (xy -0.715818 2.346039) (xy -0.538788 2.355272)
(xy -0.530644 3.303416) (xy -0.5225 4.251561) (xy -0.730201 4.242447) (xy -0.937901 4.233333)
(xy -1.056452 4.017818) (xy -1.126239 3.89014) (xy -1.211886 3.732244) (xy -1.304443 3.560753)
(xy -1.394958 3.392291) (xy -1.47448 3.243483) (xy -1.534058 3.130951) (xy -1.537195 3.124969)
(xy -1.553716 3.096738) (xy -1.566168 3.088255) (xy -1.575284 3.106171) (xy -1.581793 3.157135)
(xy -1.586429 3.247799) (xy -1.589922 3.38481) (xy -1.593004 3.574821) (xy -1.593923 3.640666)
(xy -1.602271 4.248727) (xy -2.002102 4.248727) (xy -1.99396 3.302) (xy -1.985818 2.355272)
(xy -1.78187 2.346257) (xy -1.577921 2.337241) (xy -1.518214 2.454014)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -2.914367 2.346088) (xy -2.834028 2.363456) (xy -2.811277 2.378363) (xy -2.796535 2.413663)
(xy -2.765473 2.498772) (xy -2.721024 2.625008) (xy -2.666122 2.783691) (xy -2.603699 2.966141)
(xy -2.53669 3.163678) (xy -2.468026 3.367621) (xy -2.400642 3.569291) (xy -2.337471 3.760005)
(xy -2.281445 3.931085) (xy -2.235498 4.07385) (xy -2.202563 4.17962) (xy -2.202191 4.180854)
(xy -2.193852 4.217198) (xy -2.204212 4.237613) (xy -2.245193 4.245755) (xy -2.328715 4.245279)
(xy -2.40297 4.242429) (xy -2.625038 4.233333) (xy -2.675976 4.064) (xy -2.726913 3.894666)
(xy -3.368748 3.894666) (xy -3.38921 3.98703) (xy -3.420477 4.113254) (xy -3.454527 4.190654)
(xy -3.504486 4.231107) (xy -3.583479 4.246489) (xy -3.678389 4.248727) (xy -3.798531 4.244196)
(xy -3.863108 4.229913) (xy -3.878381 4.210242) (xy -3.868524 4.170843) (xy -3.841453 4.082313)
(xy -3.800097 3.953708) (xy -3.747387 3.794083) (xy -3.686252 3.612496) (xy -3.661758 3.540606)
(xy -3.640258 3.477612) (xy -3.223798 3.477612) (xy -3.210563 3.498351) (xy -3.164038 3.507492)
(xy -3.071864 3.509767) (xy -3.035113 3.509818) (xy -2.833349 3.509818) (xy -2.890635 3.348181)
(xy -2.93464 3.219712) (xy -2.979119 3.083341) (xy -2.99495 3.032606) (xy -3.024093 2.953106)
(xy -3.047654 2.918175) (xy -3.057923 2.924848) (xy -3.074892 2.977634) (xy -3.105081 3.074902)
(xy -3.144039 3.202147) (xy -3.187319 3.344865) (xy -3.216107 3.440545) (xy -3.223798 3.477612)
(xy -3.640258 3.477612) (xy -3.597932 3.353606) (xy -3.540813 3.18575) (xy -3.493426 3.04597)
(xy -3.458797 2.943195) (xy -3.43995 2.886356) (xy -3.437557 2.878666) (xy -3.392275 2.729524)
(xy -3.355324 2.632363) (xy -3.325834 2.563195) (xy -3.288579 2.472126) (xy -3.28186 2.455333)
(xy -3.235869 2.339878) (xy -3.037947 2.339878) (xy -2.914367 2.346088)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -4.533665 2.339943) (xy -4.368833 2.341617) (xy -4.250368 2.347126) (xy -4.170665 2.35869)
(xy -4.122123 2.378534) (xy -4.097137 2.40888) (xy -4.088106 2.451951) (xy -4.087425 2.509971)
(xy -4.087752 2.534221) (xy -4.089379 2.615512) (xy -4.091782 2.670848) (xy -4.109519 2.686867)
(xy -4.164283 2.698138) (xy -4.262764 2.705233) (xy -4.411648 2.708724) (xy -4.541212 2.709333)
(xy -4.987636 2.709333) (xy -4.987636 3.077) (xy -4.579697 3.085591) (xy -4.171757 3.094181)
(xy -4.171757 3.432848) (xy -4.579697 3.441439) (xy -4.987636 3.450029) (xy -4.987636 3.877668)
(xy -4.048606 3.894666) (xy -4.039373 4.071697) (xy -4.030139 4.248727) (xy -5.418667 4.248727)
(xy -5.418667 3.343002) (xy -5.41805 3.111042) (xy -5.416308 2.897733) (xy -5.413599 2.71123)
(xy -5.410083 2.559686) (xy -5.40592 2.451256) (xy -5.401269 2.394092) (xy -5.399979 2.388578)
(xy -5.386705 2.371938) (xy -5.356219 2.359505) (xy -5.300718 2.350694) (xy -5.212402 2.344916)
(xy -5.08347 2.341585) (xy -4.906119 2.340115) (xy -4.752467 2.339878) (xy -4.533665 2.339943)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -6.080832 2.343956) (xy -6.0076 2.346431) (xy -5.741939 2.355272) (xy -5.733797 3.302)
(xy -5.725655 4.248727) (xy -6.096 4.248727) (xy -6.096 3.632969) (xy -6.097145 3.445821)
(xy -6.10034 3.281572) (xy -6.105224 3.149439) (xy -6.111436 3.058638) (xy -6.118615 3.018386)
(xy -6.120107 3.017212) (xy -6.136741 3.04513) (xy -6.158489 3.11886) (xy -6.181036 3.223362)
(xy -6.18416 3.240424) (xy -6.207979 3.368585) (xy -6.231686 3.488127) (xy -6.249746 3.571393)
(xy -6.271361 3.665348) (xy -6.297842 3.784562) (xy -6.311702 3.848484) (xy -6.338338 3.968852)
(xy -6.365386 4.085234) (xy -6.377136 4.133272) (xy -6.406252 4.248727) (xy -6.6046 4.248727)
(xy -6.712842 4.246745) (xy -6.77454 4.237556) (xy -6.804679 4.216294) (xy -6.817954 4.179454)
(xy -6.857528 3.994931) (xy -6.898388 3.80126) (xy -6.937778 3.611807) (xy -6.972944 3.43994)
(xy -7.001133 3.299025) (xy -7.01959 3.202428) (xy -7.021741 3.190351) (xy -7.040045 3.100162)
(xy -7.057409 3.038076) (xy -7.064578 3.023583) (xy -7.0696 3.04765) (xy -7.074013 3.124439)
(xy -7.077575 3.245095) (xy -7.080041 3.400766) (xy -7.081168 3.582598) (xy -7.081212 3.627838)
(xy -7.081212 4.248727) (xy -7.482344 4.248727) (xy -7.474202 3.302) (xy -7.46606 2.355272)
(xy -6.911879 2.355272) (xy -6.87488 2.478424) (xy -6.847791 2.579677) (xy -6.818172 2.706705)
(xy -6.80155 2.786303) (xy -6.776024 2.911203) (xy -6.743474 3.063855) (xy -6.710779 3.212024)
(xy -6.709581 3.217333) (xy -6.680378 3.348197) (xy -6.654031 3.469022) (xy -6.635552 3.556772)
(xy -6.633554 3.566739) (xy -6.612543 3.633024) (xy -6.588257 3.638488) (xy -6.561322 3.583765)
(xy -6.532367 3.469486) (xy -6.531166 3.463636) (xy -6.510222 3.362916) (xy -6.481173 3.225793)
(xy -6.449064 3.076019) (xy -6.436347 3.017212) (xy -6.404942 2.871686) (xy -6.37501 2.73174)
(xy -6.351352 2.619863) (xy -6.344343 2.586181) (xy -6.319546 2.469803) (xy -6.294412 2.397085)
(xy -6.255326 2.358334) (xy -6.188671 2.343856) (xy -6.080832 2.343956)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 9.020849 5.326303) (xy -8.99006 5.326303) (xy -8.99006 1.908848) (xy -8.251151 1.908848)
(xy -8.251151 4.618181) (xy 8.251152 4.618181) (xy 8.251152 1.908848) (xy -8.251151 1.908848)
(xy -8.99006 1.908848) (xy -8.99006 1.169939) (xy -8.192402 1.169939) (xy -7.18897 1.169421)
(xy -7.108989 1.023438) (xy -7.054313 0.924893) (xy -6.9829 0.797859) (xy -6.908743 0.667205)
(xy -6.89694 0.646545) (xy -6.724734 0.344905) (xy -6.577659 0.086018) (xy -6.449813 -0.140548)
(xy -6.335297 -0.345225) (xy -6.296155 -0.415637) (xy -6.240647 -0.513689) (xy -6.172383 -0.63164)
(xy -6.131119 -0.70178) (xy -6.080347 -0.789566) (xy -6.045329 -0.854327) (xy -6.034424 -0.87947)
(xy -6.019491 -0.912141) (xy -5.981878 -0.977161) (xy -5.962228 -1.008964) (xy -5.916456 -1.084796)
(xy -5.851037 -1.197041) (xy -5.776093 -1.328211) (xy -5.726556 -1.416243) (xy -5.652784 -1.547823)
(xy -5.585062 -1.667493) (xy -5.515565 -1.788857) (xy -5.436468 -1.925522) (xy -5.339944 -2.091092)
(xy -5.248426 -2.247516) (xy -5.181842 -2.363703) (xy -5.103792 -2.503494) (xy -5.033479 -2.632364)
(xy -4.97549 -2.737873) (xy -4.926247 -2.823093) (xy -4.894725 -2.872596) (xy -4.89109 -2.877128)
(xy -4.886405 -2.852397) (xy -4.88201 -2.770703) (xy -4.877968 -2.636654) (xy -4.874339 -2.454862)
(xy -4.871184 -2.229938) (xy -4.868565 -1.966493) (xy -4.866542 -1.669137) (xy -4.865177 -1.342481)
(xy -4.86453 -0.991137) (xy -4.864485 -0.867492) (xy -4.864485 1.171393) (xy -3.808367 1.154545)
(xy -3.724798 1.000606) (xy -3.664133 0.890869) (xy -3.603262 0.783867) (xy -3.576907 0.738909)
(xy -3.530006 0.658245) (xy -3.466574 0.54647) (xy -3.399607 0.426506) (xy -3.3936 0.415636)
(xy -3.349387 0.335865) (xy -3.297324 0.242578) (xy -3.234358 0.130363) (xy -3.157433 -0.00619)
(xy -3.063496 -0.172492) (xy -2.949492 -0.373956) (xy -2.812366 -0.615992) (xy -2.649064 -0.904012)
(xy -2.576815 -1.031394) (xy -2.45142 -1.253007) (xy -2.35492 -1.424841) (xy -2.285376 -1.550415)
(xy -2.24085 -1.633249) (xy -2.219403 -1.676863) (xy -2.216727 -1.685148) (xy -2.200946 -1.717528)
(xy -2.162678 -1.776863) (xy -2.15985 -1.780945) (xy -2.113676 -1.853043) (xy -2.053845 -1.95387)
(xy -2.009737 -2.032) (xy -1.870002 -2.284615) (xy -1.756676 -2.486692) (xy -1.667417 -2.642142)
(xy -1.599879 -2.754878) (xy -1.55172 -2.828812) (xy -1.520595 -2.867855) (xy -1.504168 -2.875924)
(xy -1.499639 -2.843134) (xy -1.495356 -2.753918) (xy -1.491386 -2.613427) (xy -1.487796 -2.426812)
(xy -1.484652 -2.199223) (xy -1.482022 -1.93581) (xy -1.479972 -1.641724) (xy -1.478568 -1.322115)
(xy -1.477879 -0.982134) (xy -1.477818 -0.84485) (xy -1.477818 1.169939) (xy -0.554182 1.169939)
(xy 0.49229 1.169939) (xy 1.555708 1.169939) (xy 1.63608 1.023697) (xy 1.690935 0.924951)
(xy 1.762407 0.797727) (xy 1.836476 0.666962) (xy 1.848105 0.646545) (xy 1.927017 0.506988)
(xy 2.018353 0.343738) (xy 2.105122 0.187195) (xy 2.123413 0.153939) (xy 2.199807 0.016489)
(xy 2.278603 -0.122476) (xy 2.346333 -0.239286) (xy 2.365049 -0.270749) (xy 2.416416 -0.358395)
(xy 2.451892 -0.423125) (xy 2.46303 -0.44844) (xy 2.478032 -0.481062) (xy 2.515821 -0.545992)
(xy 2.53568 -0.577933) (xy 2.573236 -0.640448) (xy 2.634637 -0.746304) (xy 2.713879 -0.884987)
(xy 2.804956 -1.045981) (xy 2.901862 -1.218773) (xy 2.908975 -1.231516) (xy 3.010069 -1.412307)
(xy 3.109414 -1.589288) (xy 3.199931 -1.749894) (xy 3.274538 -1.881563) (xy 3.325399 -1.970425)
(xy 3.399605 -2.100263) (xy 3.477055 -2.238235) (xy 3.533014 -2.339879) (xy 3.646339 -2.544938)
(xy 3.734563 -2.695735) (xy 3.798654 -2.793792) (xy 3.83958 -2.840631) (xy 3.854043 -2.844444)
(xy 3.858396 -2.811768) (xy 3.862511 -2.722684) (xy 3.866323 -2.582361) (xy 3.869769 -2.395967)
(xy 3.872782 -2.16867) (xy 3.875299 -1.905639) (xy 3.877255 -1.612042) (xy 3.878585 -1.293047)
(xy 3.879224 -0.953822) (xy 3.879273 -0.829456) (xy 3.879273 1.169939) (xy 4.914656 1.169939)
(xy 4.969008 1.055962) (xy 5.011253 0.974763) (xy 5.07394 0.862874) (xy 5.144927 0.741856)
(xy 5.159437 0.71782) (xy 5.221261 0.613903) (xy 5.268404 0.530717) (xy 5.293386 0.481621)
(xy 5.295515 0.474791) (xy 5.311427 0.438877) (xy 5.349966 0.377711) (xy 5.352393 0.374207)
(xy 5.398588 0.30214) (xy 5.458501 0.201355) (xy 5.502756 0.123151) (xy 5.564827 0.011596)
(xy 5.641991 -0.125858) (xy 5.718773 -0.261659) (xy 5.727543 -0.277091) (xy 5.850193 -0.492811)
(xy 5.948118 -0.665119) (xy 6.027048 -0.804123) (xy 6.092712 -0.919929) (xy 6.15084 -1.022644)
(xy 6.207161 -1.122373) (xy 6.267405 -1.229224) (xy 6.280727 -1.252869) (xy 6.358745 -1.391585)
(xy 6.434246 -1.526246) (xy 6.496892 -1.638388) (xy 6.52703 -1.69265) (xy 6.587741 -1.800235)
(xy 6.649464 -1.906267) (xy 6.669467 -1.939637) (xy 6.697859 -1.986817) (xy 6.728079 -2.038305)
(xy 6.765204 -2.103075) (xy 6.814315 -2.190101) (xy 6.880489 -2.308356) (xy 6.968808 -2.466815)
(xy 7.025226 -2.56818) (xy 7.084613 -2.673319) (xy 7.134685 -2.759102) (xy 7.16624 -2.809827)
(xy 7.169596 -2.814483) (xy 7.197454 -2.857874) (xy 7.243666 -2.936868) (xy 7.288717 -3.017213)
(xy 7.350609 -3.128902) (xy 7.427435 -3.266517) (xy 7.503761 -3.402416) (xy 7.512243 -3.417455)
(xy 7.587496 -3.551276) (xy 7.665178 -3.690163) (xy 7.72983 -3.806472) (xy 7.736032 -3.817697)
(xy 7.796223 -3.923259) (xy 7.85406 -4.019077) (xy 7.886395 -4.068753) (xy 7.9257 -4.129962)
(xy 7.943214 -4.166603) (xy 7.943273 -4.167459) (xy 7.9577 -4.201178) (xy 7.994956 -4.270534)
(xy 8.032074 -4.33505) (xy 8.093593 -4.438816) (xy 8.132855 -4.513621) (xy 8.14386 -4.564182)
(xy 8.120609 -4.595217) (xy 8.057103 -4.611444) (xy 7.947343 -4.61758) (xy 7.78533 -4.618344)
(xy 7.672026 -4.618182) (xy 7.467359 -4.616581) (xy 7.318387 -4.611493) (xy 7.219305 -4.602488)
(xy 7.164309 -4.589138) (xy 7.150678 -4.579697) (xy 7.119364 -4.532562) (xy 7.071031 -4.45203)
(xy 7.034014 -4.387273) (xy 6.972499 -4.277838) (xy 6.897857 -4.145588) (xy 6.834217 -4.033213)
(xy 6.773502 -3.925961) (xy 6.689331 -3.776905) (xy 6.588399 -3.597931) (xy 6.477398 -3.400926)
(xy 6.363021 -3.197775) (xy 6.251961 -3.000365) (xy 6.150913 -2.820582) (xy 6.066568 -2.670312)
(xy 6.029981 -2.605009) (xy 5.974359 -2.504699) (xy 5.932697 -2.427781) (xy 5.91223 -2.387667)
(xy 5.911273 -2.384944) (xy 5.896482 -2.356816) (xy 5.8573 -2.289507) (xy 5.801511 -2.196337)
(xy 5.788121 -2.174249) (xy 5.729602 -2.075915) (xy 5.686149 -1.999073) (xy 5.66563 -1.957732)
(xy 5.66497 -1.954927) (xy 5.649999 -1.921025) (xy 5.612302 -1.855195) (xy 5.592773 -1.823522)
(xy 5.54524 -1.744695) (xy 5.476351 -1.62635) (xy 5.394337 -1.482971) (xy 5.307425 -1.329041)
(xy 5.223846 -1.179046) (xy 5.15183 -1.047469) (xy 5.151462 -1.046788) (xy 5.054164 -0.871268)
(xy 4.969194 -0.727084) (xy 4.900433 -0.620294) (xy 4.851764 -0.556955) (xy 4.828088 -0.542255)
(xy 4.823777 -0.574912) (xy 4.819698 -0.664016) (xy 4.815916 -0.80444) (xy 4.812493 -0.991056)
(xy 4.809493 -1.218735) (xy 4.806978 -1.48235) (xy 4.805012 -1.776772) (xy 4.803658 -2.096875)
(xy 4.802978 -2.437529) (xy 4.802909 -2.587999) (xy 4.802909 -4.618182) (xy 3.802303 -4.618036)
(xy 3.710669 -4.441079) (xy 3.645932 -4.319159) (xy 3.577189 -4.194374) (xy 3.537853 -4.125576)
(xy 3.4141 -3.912761) (xy 3.295361 -3.705571) (xy 3.190903 -3.520288) (xy 3.117272 -3.386667)
(xy 3.061697 -3.28572) (xy 2.987068 -3.152373) (xy 2.905131 -3.007543) (xy 2.857929 -2.924849)
(xy 2.74339 -2.724241) (xy 2.622035 -2.510427) (xy 2.503034 -2.299654) (xy 2.395556 -2.108167)
(xy 2.308773 -1.952213) (xy 2.301828 -1.939637) (xy 2.240896 -1.831399) (xy 2.168814 -1.706384)
(xy 2.128695 -1.6381) (xy 2.077923 -1.550313) (xy 2.042905 -1.485553) (xy 2.032 -1.46041)
(xy 2.016966 -1.427811) (xy 1.979088 -1.362926) (xy 1.959126 -1.330916) (xy 1.915997 -1.259631)
(xy 1.851692 -1.149208) (xy 1.774734 -1.014448) (xy 1.693645 -0.870152) (xy 1.689732 -0.863125)
(xy 1.493212 -0.510128) (xy 1.462424 -4.602788) (xy 0.508 -4.602788) (xy 0.500145 -1.716425)
(xy 0.49229 1.169939) (xy -0.554182 1.169939) (xy -0.554182 -4.618182) (xy -1.054485 -4.617988)
(xy -1.554788 -4.617793) (xy -1.613465 -4.517927) (xy -1.702808 -4.36395) (xy -1.810685 -4.175036)
(xy -1.926231 -3.970352) (xy -2.038581 -3.769064) (xy -2.062788 -3.725334) (xy -2.14634 -3.575078)
(xy -2.238507 -3.410803) (xy -2.322262 -3.26283) (xy -2.339438 -3.232728) (xy -2.411816 -3.105381)
(xy -2.482994 -2.978852) (xy -2.53944 -2.877219) (xy -2.547075 -2.863273) (xy -2.606568 -2.756857)
(xy -2.678403 -2.631931) (xy -2.723394 -2.555394) (xy -2.797565 -2.428359) (xy -2.876784 -2.289186)
(xy -2.917089 -2.216728) (xy -3.024337 -2.022414) (xy -3.122126 -1.847199) (xy -3.205191 -1.700408)
(xy -3.268265 -1.591364) (xy -3.299642 -1.539394) (xy -3.338549 -1.473519) (xy -3.394154 -1.374458)
(xy -3.454493 -1.263523) (xy -3.455146 -1.262303) (xy -3.51379 -1.153244) (xy -3.566336 -1.057367)
(xy -3.622252 -0.957794) (xy -3.691009 -0.837651) (xy -3.774739 -0.692728) (xy -3.863879 -0.538788)
(xy -3.894667 -4.602788) (xy -4.936387 -4.602788) (xy -5.064603 -4.385704) (xy -5.144868 -4.247886)
(xy -5.230802 -4.097363) (xy -5.301948 -3.970067) (xy -5.415541 -3.764403) (xy -5.517598 -3.581594)
(xy -5.603422 -3.429951) (xy -5.66832 -3.317785) (xy -5.701096 -3.263516) (xy -5.74007 -3.197721)
(xy -5.795902 -3.098781) (xy -5.856602 -2.98795) (xy -5.857424 -2.986425) (xy -5.930091 -2.853161)
(xy -6.014426 -2.700816) (xy -6.08742 -2.570788) (xy -6.152023 -2.456684) (xy -6.235694 -2.308711)
(xy -6.327259 -2.146639) (xy -6.409352 -2.001213) (xy -6.493523 -1.852069) (xy -6.575534 -1.706816)
(xy -6.646061 -1.581964) (xy -6.69578 -1.494024) (xy -6.696239 -1.493213) (xy -6.753303 -1.392003)
(xy -6.826571 -1.261543) (xy -6.902269 -1.126366) (xy -6.919238 -1.096) (xy -6.984992 -0.979053)
(xy -7.043566 -0.876251) (xy -7.085459 -0.80422) (xy -7.095185 -0.788122) (xy -7.131435 -0.726484)
(xy -7.183955 -0.633553) (xy -7.227806 -0.554182) (xy -7.289396 -0.442617) (xy -7.366144 -0.305151)
(xy -7.442654 -0.169343) (xy -7.451386 -0.15394) (xy -7.527901 -0.018205) (xy -7.618258 0.143408)
(xy -7.706744 0.302759) (xy -7.735064 0.35406) (xy -7.80133 0.473248) (xy -7.858048 0.573241)
(xy -7.89776 0.641004) (xy -7.911183 0.661939) (xy -7.935721 0.701658) (xy -7.981062 0.781233)
(xy -8.039023 0.886191) (xy -8.063526 0.931333) (xy -8.192402 1.169939) (xy -8.99006 1.169939)
(xy -8.99006 -5.326303) (xy 9.020849 -5.326303) (xy 9.020849 5.326303)) (layer F.SilkS) (width 0.01))
)

View File

@ -0,0 +1,17 @@
(module Mounting_Holes:MountingHole_2.2mm_M2 (layer F.Cu) (tedit 5ACD3107)
(descr "Mounting Hole 2.2mm, no annular, M2")
(tags "mounting hole 2.2mm no annular m2")
(attr virtual)
(fp_text reference REF** (at 0 -3.2) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value MountingHole_2.2mm_M2 (at 0 3.2) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_circle (center 0 0) (end 2.45 0) (layer F.CrtYd) (width 0.05))
(fp_circle (center 0 0) (end 2.2 0) (layer Cmts.User) (width 0.15))
(fp_text user %R (at 0.3 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 np_thru_hole circle (at 0 0) (size 2.2 2.2) (drill 2.2) (layers *.Cu *.Mask))
)

View File

@ -0,0 +1,350 @@
(module Symbol:OSHW-Logo_11.4x12mm_SilkScreen (layer F.Cu) (tedit 0)
(descr "Open Source Hardware Logo")
(tags "Logo OSHW")
(attr virtual)
(fp_text reference REF** (at 0 0) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value OSHW-Logo_11.4x12mm_SilkScreen (at 0.75 0) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_poly (pts (xy -3.780091 2.90956) (xy -3.727588 2.935499) (xy -3.662842 2.9807) (xy -3.615653 3.029991)
(xy -3.583335 3.091885) (xy -3.563203 3.174896) (xy -3.55257 3.287538) (xy -3.548753 3.438324)
(xy -3.54853 3.503149) (xy -3.549182 3.645221) (xy -3.551888 3.746757) (xy -3.557776 3.817015)
(xy -3.567973 3.865256) (xy -3.583606 3.900738) (xy -3.599872 3.924943) (xy -3.703705 4.027929)
(xy -3.825979 4.089874) (xy -3.957886 4.108506) (xy -4.090616 4.081549) (xy -4.132667 4.062486)
(xy -4.233334 4.010015) (xy -4.233334 4.832259) (xy -4.159865 4.794267) (xy -4.063059 4.764872)
(xy -3.944072 4.757342) (xy -3.825255 4.771245) (xy -3.735527 4.802476) (xy -3.661101 4.861954)
(xy -3.59751 4.947066) (xy -3.592729 4.955805) (xy -3.572563 4.996966) (xy -3.557835 5.038454)
(xy -3.547697 5.088713) (xy -3.541301 5.156184) (xy -3.537799 5.249309) (xy -3.536342 5.376531)
(xy -3.536079 5.519701) (xy -3.536079 5.976471) (xy -3.81 5.976471) (xy -3.81 5.134231)
(xy -3.886617 5.069763) (xy -3.966207 5.018194) (xy -4.041578 5.008818) (xy -4.117367 5.032947)
(xy -4.157759 5.056574) (xy -4.187821 5.090227) (xy -4.209203 5.141087) (xy -4.22355 5.216334)
(xy -4.23251 5.323146) (xy -4.23773 5.468704) (xy -4.239569 5.565588) (xy -4.245785 5.96402)
(xy -4.37652 5.971547) (xy -4.507255 5.979073) (xy -4.507255 3.506582) (xy -4.233334 3.506582)
(xy -4.22635 3.644423) (xy -4.202818 3.740107) (xy -4.158865 3.799641) (xy -4.090618 3.829029)
(xy -4.021667 3.834902) (xy -3.943614 3.828154) (xy -3.891811 3.801594) (xy -3.859417 3.766499)
(xy -3.833916 3.728752) (xy -3.818735 3.6867) (xy -3.811981 3.627779) (xy -3.811759 3.539428)
(xy -3.814032 3.465448) (xy -3.819251 3.354) (xy -3.827021 3.280833) (xy -3.840105 3.234422)
(xy -3.861268 3.203244) (xy -3.88124 3.185223) (xy -3.964686 3.145925) (xy -4.063449 3.139579)
(xy -4.120159 3.153116) (xy -4.176308 3.201233) (xy -4.213501 3.294833) (xy -4.231528 3.433254)
(xy -4.233334 3.506582) (xy -4.507255 3.506582) (xy -4.507255 2.888628) (xy -4.370295 2.888628)
(xy -4.288065 2.891879) (xy -4.24564 2.903426) (xy -4.233339 2.925952) (xy -4.233334 2.92662)
(xy -4.227626 2.948681) (xy -4.202453 2.946176) (xy -4.152402 2.921935) (xy -4.035781 2.884851)
(xy -3.904571 2.880953) (xy -3.780091 2.90956)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -2.74128 4.765922) (xy -2.62413 4.79718) (xy -2.534949 4.853837) (xy -2.472016 4.928045)
(xy -2.452452 4.959716) (xy -2.438008 4.992891) (xy -2.427911 5.035329) (xy -2.421385 5.094788)
(xy -2.417658 5.179029) (xy -2.415954 5.29581) (xy -2.4155 5.45289) (xy -2.415491 5.494565)
(xy -2.415491 5.976471) (xy -2.53502 5.976471) (xy -2.611261 5.971131) (xy -2.667634 5.957604)
(xy -2.681758 5.949262) (xy -2.72037 5.934864) (xy -2.759808 5.949262) (xy -2.824738 5.967237)
(xy -2.919055 5.974472) (xy -3.023593 5.971333) (xy -3.119189 5.958186) (xy -3.175 5.941318)
(xy -3.283002 5.871986) (xy -3.350497 5.775772) (xy -3.380841 5.647844) (xy -3.381123 5.644559)
(xy -3.37846 5.587808) (xy -3.137647 5.587808) (xy -3.116595 5.652358) (xy -3.082303 5.688686)
(xy -3.013468 5.716162) (xy -2.92261 5.727129) (xy -2.829958 5.721731) (xy -2.755744 5.70011)
(xy -2.734951 5.686239) (xy -2.698619 5.622143) (xy -2.689412 5.549278) (xy -2.689412 5.45353)
(xy -2.827173 5.45353) (xy -2.958047 5.463605) (xy -3.057259 5.492148) (xy -3.118977 5.536639)
(xy -3.137647 5.587808) (xy -3.37846 5.587808) (xy -3.374564 5.50479) (xy -3.328466 5.394282)
(xy -3.2418 5.310712) (xy -3.229821 5.30311) (xy -3.178345 5.278357) (xy -3.114632 5.263368)
(xy -3.025565 5.256082) (xy -2.919755 5.254407) (xy -2.689412 5.254314) (xy -2.689412 5.157755)
(xy -2.699183 5.082836) (xy -2.724116 5.032644) (xy -2.727035 5.029972) (xy -2.782519 5.008015)
(xy -2.866273 4.999505) (xy -2.958833 5.003687) (xy -3.04073 5.019809) (xy -3.089327 5.04399)
(xy -3.115659 5.063359) (xy -3.143465 5.067057) (xy -3.181839 5.051188) (xy -3.239875 5.011855)
(xy -3.326669 4.945164) (xy -3.334635 4.938916) (xy -3.330553 4.9158) (xy -3.296499 4.877352)
(xy -3.24474 4.834627) (xy -3.187545 4.798679) (xy -3.169575 4.790191) (xy -3.104028 4.773252)
(xy -3.00798 4.76117) (xy -2.900671 4.756323) (xy -2.895653 4.756313) (xy -2.74128 4.765922)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -1.967236 4.758921) (xy -1.92997 4.770091) (xy -1.917957 4.794633) (xy -1.917451 4.805712)
(xy -1.915296 4.836572) (xy -1.900449 4.841417) (xy -1.860343 4.82026) (xy -1.83652 4.805806)
(xy -1.761362 4.77485) (xy -1.671594 4.759544) (xy -1.577471 4.758367) (xy -1.489246 4.769799)
(xy -1.417174 4.79232) (xy -1.371508 4.824409) (xy -1.362502 4.864545) (xy -1.367047 4.875415)
(xy -1.400179 4.920534) (xy -1.451555 4.976026) (xy -1.460848 4.984996) (xy -1.509818 5.026245)
(xy -1.552069 5.039572) (xy -1.611159 5.030271) (xy -1.634831 5.02409) (xy -1.708496 5.009246)
(xy -1.76029 5.015921) (xy -1.804031 5.039465) (xy -1.844098 5.071061) (xy -1.873608 5.110798)
(xy -1.894116 5.166252) (xy -1.907176 5.245003) (xy -1.914344 5.354629) (xy -1.917176 5.502706)
(xy -1.917451 5.592111) (xy -1.917451 5.976471) (xy -2.166471 5.976471) (xy -2.166471 4.756275)
(xy -2.041961 4.756275) (xy -1.967236 4.758921)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -0.398432 5.976471) (xy -0.535393 5.976471) (xy -0.614889 5.97414) (xy -0.656292 5.964488)
(xy -0.671199 5.943525) (xy -0.672353 5.929351) (xy -0.674867 5.900927) (xy -0.69072 5.895475)
(xy -0.732379 5.912998) (xy -0.764776 5.929351) (xy -0.889151 5.968103) (xy -1.024354 5.970346)
(xy -1.134274 5.941444) (xy -1.236634 5.871619) (xy -1.31466 5.768555) (xy -1.357386 5.646989)
(xy -1.358474 5.640192) (xy -1.364822 5.566032) (xy -1.367979 5.45957) (xy -1.367725 5.379052)
(xy -1.095711 5.379052) (xy -1.08941 5.48607) (xy -1.075075 5.574278) (xy -1.055669 5.62409)
(xy -0.982254 5.692162) (xy -0.895086 5.716564) (xy -0.805196 5.696831) (xy -0.728383 5.637968)
(xy -0.699292 5.598379) (xy -0.682283 5.551138) (xy -0.674316 5.482181) (xy -0.672353 5.378607)
(xy -0.675866 5.276039) (xy -0.685143 5.185921) (xy -0.698294 5.125613) (xy -0.700486 5.120208)
(xy -0.753522 5.05594) (xy -0.830933 5.020656) (xy -0.917546 5.014959) (xy -0.998193 5.039453)
(xy -1.057703 5.094742) (xy -1.063876 5.105743) (xy -1.083199 5.172827) (xy -1.093726 5.269284)
(xy -1.095711 5.379052) (xy -1.367725 5.379052) (xy -1.367596 5.338225) (xy -1.365806 5.272918)
(xy -1.353627 5.111355) (xy -1.328315 4.990053) (xy -1.286207 4.900379) (xy -1.223641 4.833699)
(xy -1.1629 4.794557) (xy -1.078036 4.76704) (xy -0.972485 4.757603) (xy -0.864402 4.76529)
(xy -0.771942 4.789146) (xy -0.72309 4.817685) (xy -0.672353 4.863601) (xy -0.672353 4.283137)
(xy -0.398432 4.283137) (xy -0.398432 5.976471)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 0.557528 4.761332) (xy 0.656014 4.768726) (xy 0.784776 5.154706) (xy 0.913537 5.540686)
(xy 0.953911 5.403726) (xy 0.978207 5.319083) (xy 1.010167 5.204697) (xy 1.044679 5.078963)
(xy 1.062928 5.01152) (xy 1.131571 4.756275) (xy 1.414773 4.756275) (xy 1.330122 5.023971)
(xy 1.288435 5.155638) (xy 1.238074 5.314458) (xy 1.185481 5.480128) (xy 1.13853 5.627843)
(xy 1.031589 5.96402) (xy 0.800661 5.979044) (xy 0.73805 5.772316) (xy 0.699438 5.643896)
(xy 0.6573 5.502322) (xy 0.620472 5.377285) (xy 0.619018 5.372309) (xy 0.591511 5.287586)
(xy 0.567242 5.229778) (xy 0.550243 5.207918) (xy 0.54675 5.210446) (xy 0.53449 5.244336)
(xy 0.511195 5.31693) (xy 0.4797 5.419101) (xy 0.442842 5.54172) (xy 0.422899 5.609167)
(xy 0.314895 5.976471) (xy 0.085679 5.976471) (xy -0.097561 5.3975) (xy -0.149037 5.235091)
(xy -0.19593 5.087602) (xy -0.236023 4.96196) (xy -0.267103 4.865095) (xy -0.286955 4.803934)
(xy -0.292989 4.786065) (xy -0.288212 4.767768) (xy -0.250703 4.759755) (xy -0.172645 4.760557)
(xy -0.160426 4.761163) (xy -0.015674 4.768726) (xy 0.07913 5.117353) (xy 0.113977 5.244497)
(xy 0.145117 5.356265) (xy 0.169809 5.442953) (xy 0.185312 5.494856) (xy 0.188176 5.503318)
(xy 0.200046 5.493587) (xy 0.223983 5.443172) (xy 0.257239 5.358935) (xy 0.297064 5.247741)
(xy 0.33073 5.147297) (xy 0.459041 4.753939) (xy 0.557528 4.761332)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 2.056459 4.763669) (xy 2.16142 4.789163) (xy 2.191761 4.802669) (xy 2.250573 4.838046)
(xy 2.295709 4.87789) (xy 2.329106 4.92912) (xy 2.352701 4.998654) (xy 2.368433 5.093409)
(xy 2.378239 5.220305) (xy 2.384057 5.386258) (xy 2.386266 5.497108) (xy 2.394396 5.976471)
(xy 2.255531 5.976471) (xy 2.171287 5.972938) (xy 2.127884 5.960866) (xy 2.116666 5.940594)
(xy 2.110744 5.918674) (xy 2.084266 5.922865) (xy 2.048186 5.940441) (xy 1.957862 5.967382)
(xy 1.841777 5.974642) (xy 1.71968 5.962767) (xy 1.611321 5.932305) (xy 1.601602 5.928077)
(xy 1.502568 5.858505) (xy 1.437281 5.761789) (xy 1.40724 5.648738) (xy 1.409535 5.608122)
(xy 1.654633 5.608122) (xy 1.676229 5.662782) (xy 1.740259 5.701952) (xy 1.843565 5.722974)
(xy 1.898774 5.725766) (xy 1.990782 5.71862) (xy 2.051941 5.690848) (xy 2.066862 5.677647)
(xy 2.107287 5.605829) (xy 2.116666 5.540686) (xy 2.116666 5.45353) (xy 1.995269 5.45353)
(xy 1.854153 5.460722) (xy 1.755173 5.483345) (xy 1.692633 5.522964) (xy 1.678631 5.540628)
(xy 1.654633 5.608122) (xy 1.409535 5.608122) (xy 1.413941 5.530157) (xy 1.45888 5.416855)
(xy 1.520196 5.340285) (xy 1.557332 5.307181) (xy 1.593687 5.285425) (xy 1.64099 5.272161)
(xy 1.710973 5.264528) (xy 1.815364 5.25967) (xy 1.85677 5.258273) (xy 2.116666 5.24978)
(xy 2.116285 5.171116) (xy 2.106219 5.088428) (xy 2.069829 5.038431) (xy 1.996311 5.006489)
(xy 1.994339 5.00592) (xy 1.890105 4.993361) (xy 1.788108 5.009766) (xy 1.712305 5.049657)
(xy 1.68189 5.069354) (xy 1.649132 5.066629) (xy 1.598721 5.038091) (xy 1.569119 5.01795)
(xy 1.511218 4.974919) (xy 1.475352 4.942662) (xy 1.469597 4.933427) (xy 1.493295 4.885636)
(xy 1.563313 4.828562) (xy 1.593725 4.809305) (xy 1.681155 4.77614) (xy 1.798983 4.75735)
(xy 1.929866 4.753129) (xy 2.056459 4.763669)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 3.238446 4.755883) (xy 3.334177 4.774755) (xy 3.388677 4.802699) (xy 3.446008 4.849123)
(xy 3.364441 4.952111) (xy 3.31415 5.014479) (xy 3.280001 5.044907) (xy 3.246063 5.049555)
(xy 3.196406 5.034586) (xy 3.173096 5.026117) (xy 3.078063 5.013622) (xy 2.991032 5.040406)
(xy 2.927138 5.100915) (xy 2.916759 5.120208) (xy 2.905456 5.171314) (xy 2.896732 5.2655)
(xy 2.890997 5.396089) (xy 2.88866 5.556405) (xy 2.888627 5.579211) (xy 2.888627 5.976471)
(xy 2.614705 5.976471) (xy 2.614705 4.756275) (xy 2.751666 4.756275) (xy 2.830638 4.758337)
(xy 2.871779 4.767513) (xy 2.886992 4.78829) (xy 2.888627 4.807886) (xy 2.888627 4.859497)
(xy 2.95424 4.807886) (xy 3.029475 4.772675) (xy 3.130544 4.755265) (xy 3.238446 4.755883)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 4.025307 4.762784) (xy 4.144337 4.793731) (xy 4.244021 4.8576) (xy 4.292288 4.905313)
(xy 4.371408 5.018106) (xy 4.416752 5.14895) (xy 4.43233 5.309792) (xy 4.43241 5.322794)
(xy 4.432549 5.45353) (xy 3.680091 5.45353) (xy 3.69613 5.52201) (xy 3.725091 5.584031)
(xy 3.775778 5.648654) (xy 3.786379 5.658971) (xy 3.877494 5.714805) (xy 3.9814 5.724275)
(xy 4.101 5.68754) (xy 4.121274 5.677647) (xy 4.183456 5.647574) (xy 4.225106 5.63044)
(xy 4.232373 5.628855) (xy 4.25774 5.644242) (xy 4.30612 5.681887) (xy 4.330679 5.702459)
(xy 4.38157 5.749714) (xy 4.398281 5.780917) (xy 4.386683 5.80962) (xy 4.380483 5.817468)
(xy 4.338493 5.851819) (xy 4.269206 5.893565) (xy 4.220882 5.917935) (xy 4.083711 5.960873)
(xy 3.931847 5.974786) (xy 3.788024 5.9583) (xy 3.747745 5.946496) (xy 3.623078 5.879689)
(xy 3.530671 5.776892) (xy 3.46999 5.637105) (xy 3.440498 5.45933) (xy 3.43726 5.366373)
(xy 3.446714 5.231033) (xy 3.68549 5.231033) (xy 3.708584 5.241038) (xy 3.770662 5.248888)
(xy 3.860914 5.253521) (xy 3.922058 5.254314) (xy 4.03204 5.253549) (xy 4.101457 5.24997)
(xy 4.139538 5.241649) (xy 4.155515 5.226657) (xy 4.158627 5.204903) (xy 4.137278 5.137892)
(xy 4.083529 5.071664) (xy 4.012822 5.020832) (xy 3.942089 5.000038) (xy 3.846016 5.018484)
(xy 3.762849 5.071811) (xy 3.705186 5.148677) (xy 3.68549 5.231033) (xy 3.446714 5.231033)
(xy 3.451028 5.169291) (xy 3.49352 5.012271) (xy 3.565635 4.894069) (xy 3.668273 4.81344)
(xy 3.802332 4.769139) (xy 3.874957 4.760607) (xy 4.025307 4.762784)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -5.026753 2.901568) (xy -4.896478 2.959163) (xy -4.797581 3.055334) (xy -4.729918 3.190229)
(xy -4.693345 3.363996) (xy -4.690724 3.391126) (xy -4.68867 3.582408) (xy -4.715301 3.750073)
(xy -4.768999 3.885967) (xy -4.797753 3.929681) (xy -4.897909 4.022198) (xy -5.025463 4.082119)
(xy -5.168163 4.106985) (xy -5.31376 4.094339) (xy -5.424438 4.055391) (xy -5.519616 3.989755)
(xy -5.597406 3.903699) (xy -5.598751 3.901685) (xy -5.630343 3.84857) (xy -5.650873 3.79516)
(xy -5.663305 3.727754) (xy -5.670603 3.632653) (xy -5.673818 3.554666) (xy -5.675156 3.483944)
(xy -5.426186 3.483944) (xy -5.423753 3.554348) (xy -5.41492 3.648068) (xy -5.399336 3.708214)
(xy -5.371234 3.751006) (xy -5.344914 3.776002) (xy -5.251608 3.828338) (xy -5.15398 3.835333)
(xy -5.063058 3.797676) (xy -5.017598 3.755479) (xy -4.984838 3.712956) (xy -4.965677 3.672267)
(xy -4.957267 3.619314) (xy -4.956763 3.539997) (xy -4.959355 3.46695) (xy -4.964929 3.362601)
(xy -4.973766 3.29492) (xy -4.989693 3.250774) (xy -5.016538 3.217031) (xy -5.037811 3.197746)
(xy -5.126794 3.147086) (xy -5.222789 3.14456) (xy -5.303281 3.174567) (xy -5.371947 3.237231)
(xy -5.412856 3.340168) (xy -5.426186 3.483944) (xy -5.675156 3.483944) (xy -5.676754 3.399582)
(xy -5.67174 3.2836) (xy -5.656717 3.196367) (xy -5.629624 3.12753) (xy -5.5884 3.066737)
(xy -5.573115 3.048686) (xy -5.477546 2.958746) (xy -5.375039 2.906211) (xy -5.249679 2.884201)
(xy -5.18855 2.882402) (xy -5.026753 2.901568)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -2.686796 2.916354) (xy -2.661981 2.928037) (xy -2.576094 2.990951) (xy -2.494879 3.082769)
(xy -2.434236 3.183868) (xy -2.416988 3.230349) (xy -2.401251 3.313376) (xy -2.391867 3.413713)
(xy -2.390728 3.455147) (xy -2.390589 3.585882) (xy -3.143047 3.585882) (xy -3.127007 3.654363)
(xy -3.087637 3.735355) (xy -3.018806 3.805351) (xy -2.936919 3.850441) (xy -2.884737 3.859804)
(xy -2.813971 3.848441) (xy -2.72954 3.819943) (xy -2.700858 3.806831) (xy -2.594791 3.753858)
(xy -2.504272 3.822901) (xy -2.452039 3.869597) (xy -2.424247 3.90814) (xy -2.42284 3.919452)
(xy -2.447668 3.946868) (xy -2.502083 3.988532) (xy -2.551472 4.021037) (xy -2.684748 4.079468)
(xy -2.834161 4.105915) (xy -2.982249 4.099039) (xy -3.100295 4.063096) (xy -3.221982 3.986101)
(xy -3.30846 3.884728) (xy -3.362559 3.75357) (xy -3.387109 3.587224) (xy -3.389286 3.511108)
(xy -3.380573 3.336685) (xy -3.379503 3.331611) (xy -3.130173 3.331611) (xy -3.123306 3.347968)
(xy -3.095083 3.356988) (xy -3.036873 3.360854) (xy -2.940042 3.361749) (xy -2.902757 3.361765)
(xy -2.789317 3.360413) (xy -2.717378 3.355505) (xy -2.678687 3.34576) (xy -2.664995 3.329899)
(xy -2.66451 3.324805) (xy -2.680137 3.284326) (xy -2.719247 3.227621) (xy -2.736061 3.207766)
(xy -2.798481 3.151611) (xy -2.863547 3.129532) (xy -2.898603 3.127686) (xy -2.993442 3.150766)
(xy -3.072973 3.212759) (xy -3.123423 3.302802) (xy -3.124317 3.305735) (xy -3.130173 3.331611)
(xy -3.379503 3.331611) (xy -3.351601 3.199343) (xy -3.29941 3.089461) (xy -3.235579 3.011461)
(xy -3.117567 2.926882) (xy -2.978842 2.881686) (xy -2.83129 2.8776) (xy -2.686796 2.916354)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 0.027759 2.884345) (xy 0.122059 2.902229) (xy 0.21989 2.939633) (xy 0.230343 2.944402)
(xy 0.304531 2.983412) (xy 0.35591 3.019664) (xy 0.372517 3.042887) (xy 0.356702 3.080761)
(xy 0.318288 3.136644) (xy 0.301237 3.157505) (xy 0.230969 3.239618) (xy 0.140379 3.186168)
(xy 0.054164 3.150561) (xy -0.045451 3.131529) (xy -0.140981 3.130326) (xy -0.214939 3.14821)
(xy -0.232688 3.159373) (xy -0.266488 3.210553) (xy -0.270596 3.269509) (xy -0.245304 3.315567)
(xy -0.230344 3.324499) (xy -0.185514 3.335592) (xy -0.106714 3.34863) (xy -0.009574 3.361088)
(xy 0.008346 3.363042) (xy 0.164365 3.39003) (xy 0.277523 3.435873) (xy 0.352569 3.504803)
(xy 0.394253 3.601054) (xy 0.407238 3.718617) (xy 0.389299 3.852254) (xy 0.33105 3.957195)
(xy 0.232255 4.03363) (xy 0.092682 4.081748) (xy -0.062255 4.100732) (xy -0.188602 4.100504)
(xy -0.291087 4.083262) (xy -0.361079 4.059457) (xy -0.449517 4.017978) (xy -0.531246 3.969842)
(xy -0.560295 3.948655) (xy -0.635 3.887676) (xy -0.544902 3.796508) (xy -0.454804 3.705339)
(xy -0.352368 3.773128) (xy -0.249626 3.824042) (xy -0.139913 3.850673) (xy -0.034449 3.853483)
(xy 0.055546 3.832935) (xy 0.118854 3.789493) (xy 0.139296 3.752838) (xy 0.136229 3.694053)
(xy 0.085434 3.649099) (xy -0.012952 3.618057) (xy -0.120744 3.60371) (xy -0.286635 3.576337)
(xy -0.409876 3.524693) (xy -0.492114 3.447266) (xy -0.534999 3.342544) (xy -0.54094 3.218387)
(xy -0.511594 3.088702) (xy -0.444691 2.990677) (xy -0.339629 2.923866) (xy -0.19581 2.88782)
(xy -0.089262 2.880754) (xy 0.027759 2.884345)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 1.209547 2.903364) (xy 1.335502 2.971959) (xy 1.434047 3.080245) (xy 1.480478 3.168315)
(xy 1.500412 3.246101) (xy 1.513328 3.356993) (xy 1.518863 3.484738) (xy 1.516654 3.613084)
(xy 1.506337 3.725779) (xy 1.494286 3.785969) (xy 1.453634 3.868311) (xy 1.38323 3.95577)
(xy 1.298382 4.032251) (xy 1.214397 4.081655) (xy 1.212349 4.082439) (xy 1.108134 4.104027)
(xy 0.984627 4.104562) (xy 0.867261 4.084908) (xy 0.821942 4.069155) (xy 0.70522 4.002966)
(xy 0.621624 3.916246) (xy 0.566701 3.801438) (xy 0.535995 3.650982) (xy 0.529047 3.572173)
(xy 0.529933 3.473145) (xy 0.796862 3.473145) (xy 0.805854 3.617645) (xy 0.831736 3.72776)
(xy 0.872868 3.798116) (xy 0.902172 3.818235) (xy 0.977251 3.832265) (xy 1.066494 3.828111)
(xy 1.14365 3.807922) (xy 1.163883 3.796815) (xy 1.217265 3.732123) (xy 1.2525 3.633119)
(xy 1.267498 3.512632) (xy 1.260172 3.383494) (xy 1.243799 3.305775) (xy 1.19679 3.215771)
(xy 1.122582 3.159509) (xy 1.033209 3.140057) (xy 0.940707 3.160481) (xy 0.869653 3.210437)
(xy 0.832312 3.251655) (xy 0.810518 3.292281) (xy 0.80013 3.347264) (xy 0.797006 3.431549)
(xy 0.796862 3.473145) (xy 0.529933 3.473145) (xy 0.53093 3.361874) (xy 0.56518 3.189423)
(xy 0.631802 3.054814) (xy 0.730799 2.95804) (xy 0.862175 2.899094) (xy 0.890385 2.892259)
(xy 1.059926 2.876213) (xy 1.209547 2.903364)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 1.967254 3.276245) (xy 1.969608 3.458879) (xy 1.978207 3.5976) (xy 1.99536 3.698147)
(xy 2.023374 3.766254) (xy 2.064557 3.807659) (xy 2.121217 3.828097) (xy 2.191372 3.833318)
(xy 2.264848 3.827468) (xy 2.320657 3.806093) (xy 2.361109 3.763458) (xy 2.388509 3.693825)
(xy 2.405167 3.59146) (xy 2.413389 3.450624) (xy 2.41549 3.276245) (xy 2.41549 2.888628)
(xy 2.689411 2.888628) (xy 2.689411 4.083922) (xy 2.552451 4.083922) (xy 2.469884 4.080576)
(xy 2.427368 4.068826) (xy 2.41549 4.04652) (xy 2.408336 4.026654) (xy 2.379865 4.030857)
(xy 2.322476 4.058971) (xy 2.190945 4.102342) (xy 2.051438 4.09927) (xy 1.917765 4.052174)
(xy 1.854108 4.014971) (xy 1.805553 3.974691) (xy 1.770081 3.924291) (xy 1.745674 3.856729)
(xy 1.730313 3.764965) (xy 1.721982 3.641955) (xy 1.718662 3.480659) (xy 1.718235 3.355928)
(xy 1.718235 2.888628) (xy 1.967254 2.888628) (xy 1.967254 3.276245)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 4.390976 2.899056) (xy 4.535256 2.960348) (xy 4.580699 2.990185) (xy 4.638779 3.036036)
(xy 4.675238 3.072089) (xy 4.681568 3.083832) (xy 4.663693 3.109889) (xy 4.61795 3.154105)
(xy 4.581328 3.184965) (xy 4.481088 3.26552) (xy 4.401935 3.198918) (xy 4.340769 3.155921)
(xy 4.281129 3.141079) (xy 4.212872 3.144704) (xy 4.104482 3.171652) (xy 4.029872 3.227587)
(xy 3.98453 3.318014) (xy 3.963947 3.448435) (xy 3.963942 3.448517) (xy 3.965722 3.59429)
(xy 3.993387 3.701245) (xy 4.048571 3.774064) (xy 4.086192 3.798723) (xy 4.186105 3.829431)
(xy 4.292822 3.829449) (xy 4.385669 3.799655) (xy 4.407647 3.785098) (xy 4.462765 3.747914)
(xy 4.505859 3.74182) (xy 4.552335 3.769496) (xy 4.603716 3.819205) (xy 4.685046 3.903116)
(xy 4.594749 3.977546) (xy 4.455236 4.061549) (xy 4.297912 4.102947) (xy 4.133503 4.09995)
(xy 4.025531 4.0725) (xy 3.899331 4.00462) (xy 3.798401 3.897831) (xy 3.752548 3.822451)
(xy 3.71541 3.714297) (xy 3.696827 3.577318) (xy 3.696684 3.428864) (xy 3.714865 3.286281)
(xy 3.751255 3.166918) (xy 3.756987 3.15468) (xy 3.841865 3.034655) (xy 3.956782 2.947267)
(xy 4.092659 2.894329) (xy 4.240417 2.877654) (xy 4.390976 2.899056)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 5.303287 2.884355) (xy 5.367051 2.899845) (xy 5.4893 2.956569) (xy 5.593834 3.043202)
(xy 5.66618 3.147074) (xy 5.676119 3.170396) (xy 5.689754 3.231484) (xy 5.699298 3.321853)
(xy 5.702549 3.41319) (xy 5.702549 3.585882) (xy 5.34147 3.585882) (xy 5.192546 3.586445)
(xy 5.087632 3.589864) (xy 5.020937 3.598731) (xy 4.986666 3.615641) (xy 4.979028 3.643189)
(xy 4.992229 3.683968) (xy 5.015877 3.731683) (xy 5.081843 3.811314) (xy 5.173512 3.850987)
(xy 5.285555 3.849695) (xy 5.412472 3.806514) (xy 5.522158 3.753224) (xy 5.613173 3.825191)
(xy 5.704188 3.897157) (xy 5.618563 3.976269) (xy 5.50425 4.051017) (xy 5.363666 4.096084)
(xy 5.212449 4.108696) (xy 5.066236 4.086079) (xy 5.042647 4.078405) (xy 4.914141 4.011296)
(xy 4.818551 3.911247) (xy 4.753861 3.775271) (xy 4.718057 3.60038) (xy 4.71764 3.596632)
(xy 4.714434 3.406032) (xy 4.727393 3.338035) (xy 4.980392 3.338035) (xy 5.003627 3.348491)
(xy 5.06671 3.3565) (xy 5.159706 3.361073) (xy 5.218638 3.361765) (xy 5.328537 3.361332)
(xy 5.397252 3.358578) (xy 5.433405 3.351321) (xy 5.445615 3.337376) (xy 5.442504 3.314562)
(xy 5.439894 3.305735) (xy 5.395344 3.2228) (xy 5.325279 3.15596) (xy 5.263446 3.126589)
(xy 5.181301 3.128362) (xy 5.098062 3.16499) (xy 5.028238 3.225634) (xy 4.986337 3.299456)
(xy 4.980392 3.338035) (xy 4.727393 3.338035) (xy 4.746385 3.238395) (xy 4.809773 3.097711)
(xy 4.900878 2.987974) (xy 5.015978 2.913174) (xy 5.151355 2.877304) (xy 5.303287 2.884355)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -1.49324 2.909199) (xy -1.431264 2.938802) (xy -1.371241 2.981561) (xy -1.325514 3.030775)
(xy -1.292207 3.093544) (xy -1.269445 3.176971) (xy -1.255353 3.288159) (xy -1.248058 3.434209)
(xy -1.245682 3.622223) (xy -1.245645 3.641912) (xy -1.245098 4.083922) (xy -1.51902 4.083922)
(xy -1.51902 3.676435) (xy -1.519215 3.525471) (xy -1.520564 3.416056) (xy -1.524212 3.339933)
(xy -1.531304 3.288848) (xy -1.542987 3.254545) (xy -1.560406 3.228768) (xy -1.584671 3.203298)
(xy -1.669565 3.148571) (xy -1.762239 3.138416) (xy -1.850527 3.173017) (xy -1.88123 3.19877)
(xy -1.903771 3.222982) (xy -1.919954 3.248912) (xy -1.930832 3.284708) (xy -1.937458 3.338519)
(xy -1.940885 3.418493) (xy -1.942166 3.532779) (xy -1.942353 3.671907) (xy -1.942353 4.083922)
(xy -2.216275 4.083922) (xy -2.216275 2.888628) (xy -2.079314 2.888628) (xy -1.997084 2.891879)
(xy -1.95466 2.903426) (xy -1.942359 2.925952) (xy -1.942353 2.92662) (xy -1.936646 2.948681)
(xy -1.911473 2.946177) (xy -1.861422 2.921937) (xy -1.747906 2.886271) (xy -1.618055 2.882305)
(xy -1.49324 2.909199)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 3.563637 2.887472) (xy 3.64929 2.913641) (xy 3.704437 2.946707) (xy 3.722401 2.972855)
(xy 3.717457 3.003852) (xy 3.685372 3.052547) (xy 3.658243 3.087035) (xy 3.602317 3.149383)
(xy 3.560299 3.175615) (xy 3.52448 3.173903) (xy 3.418224 3.146863) (xy 3.340189 3.148091)
(xy 3.27682 3.178735) (xy 3.255546 3.19667) (xy 3.187451 3.259779) (xy 3.187451 4.083922)
(xy 2.913529 4.083922) (xy 2.913529 2.888628) (xy 3.05049 2.888628) (xy 3.132719 2.891879)
(xy 3.175144 2.903426) (xy 3.187445 2.925952) (xy 3.187451 2.92662) (xy 3.19326 2.950215)
(xy 3.219531 2.947138) (xy 3.255931 2.930115) (xy 3.331111 2.898439) (xy 3.392158 2.879381)
(xy 3.470708 2.874496) (xy 3.563637 2.887472)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 0.746535 -5.366828) (xy 0.859117 -4.769637) (xy 1.274531 -4.59839) (xy 1.689944 -4.427143)
(xy 2.188302 -4.766022) (xy 2.327868 -4.860378) (xy 2.454028 -4.944625) (xy 2.560895 -5.014917)
(xy 2.642582 -5.067408) (xy 2.693201 -5.098251) (xy 2.706986 -5.104902) (xy 2.73182 -5.087797)
(xy 2.784888 -5.040511) (xy 2.86024 -4.969083) (xy 2.951929 -4.879555) (xy 3.054007 -4.777966)
(xy 3.160526 -4.670357) (xy 3.265536 -4.562768) (xy 3.363091 -4.46124) (xy 3.447242 -4.371814)
(xy 3.51204 -4.300529) (xy 3.551538 -4.253427) (xy 3.56098 -4.237663) (xy 3.547391 -4.208602)
(xy 3.509293 -4.144934) (xy 3.450694 -4.052888) (xy 3.375597 -3.938691) (xy 3.288009 -3.808571)
(xy 3.237254 -3.734354) (xy 3.144745 -3.598833) (xy 3.06254 -3.476539) (xy 2.99463 -3.37356)
(xy 2.945 -3.295982) (xy 2.91764 -3.249894) (xy 2.913529 -3.240208) (xy 2.922849 -3.212681)
(xy 2.948254 -3.148527) (xy 2.985911 -3.056765) (xy 3.031986 -2.946416) (xy 3.082646 -2.8265)
(xy 3.134059 -2.706036) (xy 3.182389 -2.594046) (xy 3.223806 -2.499548) (xy 3.254474 -2.431563)
(xy 3.270562 -2.399112) (xy 3.271511 -2.397835) (xy 3.296772 -2.391638) (xy 3.364046 -2.377815)
(xy 3.46636 -2.357723) (xy 3.596741 -2.332721) (xy 3.748216 -2.304169) (xy 3.836594 -2.287704)
(xy 3.998452 -2.256886) (xy 4.144649 -2.227561) (xy 4.267787 -2.201334) (xy 4.360469 -2.179809)
(xy 4.415301 -2.16459) (xy 4.426323 -2.159762) (xy 4.437119 -2.127081) (xy 4.445829 -2.05327)
(xy 4.45246 -1.946963) (xy 4.457018 -1.816788) (xy 4.459509 -1.671379) (xy 4.459938 -1.519365)
(xy 4.458311 -1.369378) (xy 4.454635 -1.230049) (xy 4.448915 -1.11001) (xy 4.441158 -1.01789)
(xy 4.431368 -0.962323) (xy 4.425496 -0.950755) (xy 4.390399 -0.93689) (xy 4.316028 -0.917067)
(xy 4.212223 -0.893616) (xy 4.088819 -0.868864) (xy 4.045741 -0.860857) (xy 3.838047 -0.822814)
(xy 3.673984 -0.792176) (xy 3.54813 -0.767726) (xy 3.455065 -0.748246) (xy 3.389367 -0.732519)
(xy 3.345617 -0.719327) (xy 3.318392 -0.707451) (xy 3.302272 -0.695675) (xy 3.300017 -0.693347)
(xy 3.277503 -0.655855) (xy 3.243158 -0.58289) (xy 3.200411 -0.483388) (xy 3.152692 -0.366282)
(xy 3.10343 -0.240507) (xy 3.056055 -0.114998) (xy 3.013995 0.00131) (xy 2.98068 0.099484)
(xy 2.959541 0.170588) (xy 2.954005 0.205687) (xy 2.954466 0.206917) (xy 2.973223 0.235606)
(xy 3.015776 0.29873) (xy 3.077653 0.389718) (xy 3.154382 0.502) (xy 3.241491 0.629005)
(xy 3.266299 0.665098) (xy 3.354753 0.795948) (xy 3.432588 0.915336) (xy 3.495566 1.016407)
(xy 3.539445 1.092304) (xy 3.559985 1.136172) (xy 3.56098 1.141562) (xy 3.543722 1.169889)
(xy 3.496036 1.226006) (xy 3.42405 1.303882) (xy 3.333897 1.397485) (xy 3.231705 1.500786)
(xy 3.123606 1.607751) (xy 3.015728 1.712351) (xy 2.914204 1.808554) (xy 2.825162 1.890329)
(xy 2.754733 1.951645) (xy 2.709047 1.986471) (xy 2.696409 1.992157) (xy 2.666991 1.978765)
(xy 2.606761 1.942644) (xy 2.52553 1.889881) (xy 2.46303 1.847412) (xy 2.349785 1.769485)
(xy 2.215674 1.677729) (xy 2.081155 1.58612) (xy 2.008833 1.537091) (xy 1.764038 1.371515)
(xy 1.558551 1.48262) (xy 1.464936 1.531293) (xy 1.38533 1.569126) (xy 1.331467 1.590703)
(xy 1.317757 1.593706) (xy 1.30127 1.571538) (xy 1.268745 1.508894) (xy 1.222609 1.411554)
(xy 1.16529 1.285294) (xy 1.099216 1.135895) (xy 1.026815 0.969133) (xy 0.950516 0.790787)
(xy 0.872746 0.606636) (xy 0.795934 0.422457) (xy 0.722506 0.24403) (xy 0.654892 0.077132)
(xy 0.59552 -0.072458) (xy 0.546816 -0.198962) (xy 0.51121 -0.296601) (xy 0.49113 -0.359598)
(xy 0.4879 -0.381234) (xy 0.513496 -0.408831) (xy 0.569539 -0.45363) (xy 0.644311 -0.506321)
(xy 0.650587 -0.51049) (xy 0.843845 -0.665186) (xy 0.999674 -0.845664) (xy 1.116724 -1.046153)
(xy 1.193645 -1.260881) (xy 1.229086 -1.484078) (xy 1.221697 -1.709974) (xy 1.170127 -1.932796)
(xy 1.073026 -2.146776) (xy 1.044458 -2.193591) (xy 0.895868 -2.382637) (xy 0.720327 -2.534443)
(xy 0.52391 -2.648221) (xy 0.312693 -2.72318) (xy 0.092753 -2.758533) (xy -0.129837 -2.753488)
(xy -0.348999 -2.707256) (xy -0.558658 -2.619049) (xy -0.752739 -2.488076) (xy -0.812774 -2.434918)
(xy -0.965565 -2.268516) (xy -1.076903 -2.093343) (xy -1.153277 -1.896989) (xy -1.195813 -1.702538)
(xy -1.206314 -1.483913) (xy -1.171299 -1.264203) (xy -1.094327 -1.050835) (xy -0.978953 -0.851233)
(xy -0.828734 -0.672826) (xy -0.647227 -0.523038) (xy -0.623373 -0.507249) (xy -0.547799 -0.455543)
(xy -0.490349 -0.410743) (xy -0.462883 -0.382138) (xy -0.462483 -0.381234) (xy -0.46838 -0.350291)
(xy -0.491755 -0.280064) (xy -0.530179 -0.17633) (xy -0.581223 -0.044865) (xy -0.642458 0.108552)
(xy -0.711456 0.278146) (xy -0.785786 0.458138) (xy -0.863022 0.642753) (xy -0.940732 0.826213)
(xy -1.016489 1.002741) (xy -1.087863 1.166559) (xy -1.152426 1.311892) (xy -1.207748 1.432962)
(xy -1.2514 1.523992) (xy -1.280954 1.579205) (xy -1.292856 1.593706) (xy -1.329223 1.582414)
(xy -1.39727 1.55213) (xy -1.485263 1.508265) (xy -1.533649 1.48262) (xy -1.739137 1.371515)
(xy -1.983932 1.537091) (xy -2.108894 1.621915) (xy -2.245705 1.715261) (xy -2.373911 1.803153)
(xy -2.438129 1.847412) (xy -2.528449 1.908063) (xy -2.604929 1.956126) (xy -2.657593 1.985515)
(xy -2.674698 1.991727) (xy -2.699595 1.974968) (xy -2.754695 1.928181) (xy -2.834657 1.856225)
(xy -2.934139 1.763957) (xy -3.0478 1.656235) (xy -3.119685 1.587071) (xy -3.245449 1.463502)
(xy -3.354137 1.352979) (xy -3.441355 1.26023) (xy -3.502711 1.189982) (xy -3.533809 1.146965)
(xy -3.536792 1.138235) (xy -3.522947 1.105029) (xy -3.484688 1.037887) (xy -3.426258 0.943608)
(xy -3.351903 0.82899) (xy -3.265865 0.700828) (xy -3.241397 0.665098) (xy -3.152245 0.535234)
(xy -3.072262 0.418314) (xy -3.00592 0.320907) (xy -2.957689 0.249584) (xy -2.932043 0.210915)
(xy -2.929565 0.206917) (xy -2.933271 0.1761) (xy -2.952939 0.108344) (xy -2.98514 0.012584)
(xy -3.026445 -0.102246) (xy -3.073425 -0.227211) (xy -3.122651 -0.353376) (xy -3.170692 -0.471807)
(xy -3.214119 -0.57357) (xy -3.249504 -0.649729) (xy -3.273416 -0.691351) (xy -3.275116 -0.693347)
(xy -3.289738 -0.705242) (xy -3.314435 -0.717005) (xy -3.354628 -0.729854) (xy -3.415737 -0.745006)
(xy -3.503183 -0.763679) (xy -3.622388 -0.78709) (xy -3.778773 -0.816458) (xy -3.977757 -0.853)
(xy -4.02084 -0.860857) (xy -4.148529 -0.885528) (xy -4.259847 -0.909662) (xy -4.344955 -0.930931)
(xy -4.394017 -0.947007) (xy -4.400595 -0.950755) (xy -4.411436 -0.983982) (xy -4.420247 -1.058234)
(xy -4.427024 -1.164879) (xy -4.43176 -1.295288) (xy -4.43445 -1.440828) (xy -4.435087 -1.592869)
(xy -4.433666 -1.742779) (xy -4.43018 -1.881927) (xy -4.424624 -2.001683) (xy -4.416992 -2.093414)
(xy -4.407278 -2.148489) (xy -4.401422 -2.159762) (xy -4.36882 -2.171132) (xy -4.294582 -2.189631)
(xy -4.186104 -2.213653) (xy -4.050783 -2.241593) (xy -3.896015 -2.271847) (xy -3.811692 -2.287704)
(xy -3.651704 -2.317611) (xy -3.509033 -2.344705) (xy -3.390652 -2.367624) (xy -3.303535 -2.385012)
(xy -3.254655 -2.395508) (xy -3.24661 -2.397835) (xy -3.233013 -2.424069) (xy -3.204271 -2.48726)
(xy -3.164215 -2.578378) (xy -3.116676 -2.688398) (xy -3.065485 -2.80829) (xy -3.014474 -2.929028)
(xy -2.967474 -3.041584) (xy -2.928316 -3.136929) (xy -2.900831 -3.206038) (xy -2.888851 -3.239881)
(xy -2.888628 -3.24136) (xy -2.902209 -3.268058) (xy -2.940285 -3.329495) (xy -2.998853 -3.419566)
(xy -3.073912 -3.532165) (xy -3.16146 -3.661185) (xy -3.212353 -3.735294) (xy -3.305091 -3.871178)
(xy -3.387459 -3.994546) (xy -3.455439 -4.099158) (xy -3.505012 -4.178772) (xy -3.532158 -4.227148)
(xy -3.536079 -4.237993) (xy -3.519225 -4.263235) (xy -3.472632 -4.317131) (xy -3.402251 -4.393642)
(xy -3.314035 -4.486732) (xy -3.213935 -4.59036) (xy -3.107902 -4.698491) (xy -3.001889 -4.805085)
(xy -2.901848 -4.904105) (xy -2.81373 -4.989513) (xy -2.743487 -5.05527) (xy -2.697072 -5.095339)
(xy -2.681544 -5.104902) (xy -2.656261 -5.091455) (xy -2.595789 -5.05368) (xy -2.506008 -4.99542)
(xy -2.392797 -4.920521) (xy -2.262036 -4.83283) (xy -2.1634 -4.766022) (xy -1.665043 -4.427143)
(xy -1.249629 -4.59839) (xy -0.834216 -4.769637) (xy -0.721634 -5.366828) (xy -0.609051 -5.96402)
(xy 0.633952 -5.96402) (xy 0.746535 -5.366828)) (layer F.SilkS) (width 0.01))
)

View File

@ -0,0 +1,350 @@
(module Symbols:OSHW-Logo_19x20mm_SilkScreen (layer F.Cu) (tedit 0)
(descr "Open Source Hardware Logo")
(tags "Logo OSHW")
(attr virtual)
(fp_text reference REF*** (at 0 0) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value OSHW-Logo_19x20mm_SilkScreen (at 0.75 0) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_poly (pts (xy 1.248305 -8.97404) (xy 1.436557 -7.975458) (xy 2.131183 -7.689111) (xy 2.825808 -7.402763)
(xy 3.659128 -7.969414) (xy 3.892501 -8.127189) (xy 4.103457 -8.268061) (xy 4.282153 -8.385599)
(xy 4.418744 -8.473371) (xy 4.503386 -8.524945) (xy 4.526437 -8.536065) (xy 4.567963 -8.507465)
(xy 4.656698 -8.428396) (xy 4.782697 -8.308959) (xy 4.936014 -8.159256) (xy 5.106702 -7.989385)
(xy 5.284814 -7.809449) (xy 5.460406 -7.629546) (xy 5.62353 -7.459778) (xy 5.764241 -7.310246)
(xy 5.872592 -7.191048) (xy 5.938637 -7.112287) (xy 5.954426 -7.085928) (xy 5.931703 -7.037334)
(xy 5.867999 -6.930874) (xy 5.770013 -6.776961) (xy 5.644441 -6.586009) (xy 5.497982 -6.368431)
(xy 5.413115 -6.244329) (xy 5.258426 -6.017721) (xy 5.12097 -5.81323) (xy 5.007414 -5.641035)
(xy 4.924428 -5.511315) (xy 4.878678 -5.434249) (xy 4.871803 -5.418053) (xy 4.887388 -5.372025)
(xy 4.929868 -5.26475) (xy 4.992835 -5.111313) (xy 5.069879 -4.926794) (xy 5.15459 -4.726279)
(xy 5.240558 -4.524848) (xy 5.321373 -4.337585) (xy 5.390627 -4.179572) (xy 5.441908 -4.065893)
(xy 5.468809 -4.01163) (xy 5.470396 -4.009494) (xy 5.512635 -3.999133) (xy 5.625126 -3.976018)
(xy 5.796209 -3.942421) (xy 6.014223 -3.900615) (xy 6.267509 -3.852873) (xy 6.415288 -3.825341)
(xy 6.685938 -3.77381) (xy 6.930397 -3.724775) (xy 7.1363 -3.680919) (xy 7.291277 -3.644926)
(xy 7.382962 -3.619479) (xy 7.401393 -3.611405) (xy 7.419445 -3.556758) (xy 7.43401 -3.433338)
(xy 7.445098 -3.255577) (xy 7.452719 -3.037909) (xy 7.456884 -2.794765) (xy 7.457602 -2.540577)
(xy 7.454882 -2.28978) (xy 7.448735 -2.056804) (xy 7.439171 -1.856082) (xy 7.426199 -1.702046)
(xy 7.409829 -1.60913) (xy 7.400011 -1.589787) (xy 7.341323 -1.566602) (xy 7.216966 -1.533456)
(xy 7.04339 -1.494242) (xy 6.837042 -1.452855) (xy 6.765011 -1.439466) (xy 6.417719 -1.375853)
(xy 6.143383 -1.324622) (xy 5.932939 -1.283739) (xy 5.777322 -1.251166) (xy 5.667467 -1.224868)
(xy 5.594311 -1.202808) (xy 5.548787 -1.182951) (xy 5.521833 -1.163259) (xy 5.518061 -1.159368)
(xy 5.480415 -1.096676) (xy 5.422986 -0.974669) (xy 5.351508 -0.808288) (xy 5.271715 -0.612471)
(xy 5.189343 -0.40216) (xy 5.110125 -0.192292) (xy 5.039796 0.002191) (xy 4.984089 0.16635)
(xy 4.948741 0.285245) (xy 4.939484 0.343936) (xy 4.940256 0.345992) (xy 4.97162 0.393964)
(xy 5.042774 0.499516) (xy 5.14624 0.65166) (xy 5.27454 0.83941) (xy 5.420199 1.05178)
(xy 5.46168 1.11213) (xy 5.609587 1.330929) (xy 5.739739 1.530562) (xy 5.845045 1.699565)
(xy 5.918416 1.826475) (xy 5.952763 1.899829) (xy 5.954426 1.908841) (xy 5.925569 1.956207)
(xy 5.845831 2.050042) (xy 5.725462 2.180261) (xy 5.574713 2.336779) (xy 5.403836 2.50951)
(xy 5.223079 2.688371) (xy 5.042694 2.863276) (xy 4.872932 3.02414) (xy 4.724042 3.160878)
(xy 4.606276 3.263407) (xy 4.529883 3.32164) (xy 4.50875 3.331148) (xy 4.45956 3.308754)
(xy 4.358847 3.248356) (xy 4.223017 3.160129) (xy 4.11851 3.089115) (xy 3.929149 2.958811)
(xy 3.704899 2.805384) (xy 3.479964 2.652201) (xy 3.359032 2.570218) (xy 2.949704 2.293353)
(xy 2.606102 2.479136) (xy 2.449565 2.560523) (xy 2.316454 2.623784) (xy 2.226389 2.659865)
(xy 2.203463 2.664885) (xy 2.175895 2.627817) (xy 2.121508 2.523069) (xy 2.044363 2.360303)
(xy 1.948518 2.149181) (xy 1.838034 1.899365) (xy 1.716971 1.620517) (xy 1.589389 1.322299)
(xy 1.459347 1.014374) (xy 1.330906 0.706404) (xy 1.208126 0.40805) (xy 1.095067 0.128975)
(xy 0.995788 -0.121159) (xy 0.914349 -0.33269) (xy 0.854811 -0.495957) (xy 0.821234 -0.601295)
(xy 0.815834 -0.637473) (xy 0.858634 -0.683619) (xy 0.952344 -0.758528) (xy 1.077373 -0.846636)
(xy 1.087867 -0.853606) (xy 1.41102 -1.112279) (xy 1.671587 -1.414062) (xy 1.86731 -1.749305)
(xy 1.995932 -2.108358) (xy 2.055195 -2.481574) (xy 2.042839 -2.8593) (xy 1.956607 -3.231889)
(xy 1.794241 -3.58969) (xy 1.746472 -3.667973) (xy 1.498009 -3.984081) (xy 1.204481 -4.237921)
(xy 0.876047 -4.428173) (xy 0.522865 -4.553515) (xy 0.155095 -4.612628) (xy -0.217103 -4.604193)
(xy -0.583571 -4.526888) (xy -0.934149 -4.379394) (xy -1.258677 -4.16039) (xy -1.359064 -4.071502)
(xy -1.614551 -3.793256) (xy -1.800722 -3.500344) (xy -1.92843 -3.172014) (xy -1.999556 -2.846867)
(xy -2.017114 -2.481298) (xy -1.958566 -2.113914) (xy -1.829858 -1.757134) (xy -1.636938 -1.423374)
(xy -1.385752 -1.125053) (xy -1.082248 -0.874589) (xy -1.04236 -0.848187) (xy -0.915991 -0.761728)
(xy -0.819927 -0.686816) (xy -0.774 -0.638985) (xy -0.773332 -0.637473) (xy -0.783192 -0.585733)
(xy -0.822278 -0.468304) (xy -0.886528 -0.294846) (xy -0.97188 -0.075021) (xy -1.074273 0.181513)
(xy -1.189646 0.465096) (xy -1.313937 0.766067) (xy -1.443084 1.074767) (xy -1.573026 1.381536)
(xy -1.699702 1.676714) (xy -1.819049 1.95064) (xy -1.927006 2.193656) (xy -2.019512 2.396101)
(xy -2.092504 2.548315) (xy -2.141923 2.640638) (xy -2.161823 2.664885) (xy -2.222634 2.646004)
(xy -2.336418 2.595364) (xy -2.483555 2.522017) (xy -2.564462 2.479136) (xy -2.908065 2.293353)
(xy -3.317393 2.570218) (xy -3.526346 2.712054) (xy -3.755113 2.868141) (xy -3.969491 3.015109)
(xy -4.076871 3.089115) (xy -4.227898 3.190531) (xy -4.355782 3.270898) (xy -4.443842 3.320041)
(xy -4.472445 3.330429) (xy -4.514076 3.302405) (xy -4.606211 3.224172) (xy -4.739918 3.103852)
(xy -4.906265 2.949568) (xy -5.09632 2.769443) (xy -5.216521 2.65379) (xy -5.426815 2.447167)
(xy -5.608556 2.262358) (xy -5.754397 2.10727) (xy -5.856991 1.989807) (xy -5.908991 1.917875)
(xy -5.91398 1.903278) (xy -5.890829 1.847753) (xy -5.826854 1.735484) (xy -5.729153 1.577837)
(xy -5.60482 1.386179) (xy -5.460954 1.171876) (xy -5.420041 1.11213) (xy -5.270967 0.894982)
(xy -5.137225 0.699475) (xy -5.026291 0.536599) (xy -4.945644 0.417337) (xy -4.902759 0.352678)
(xy -4.898617 0.345992) (xy -4.904812 0.294462) (xy -4.9377 0.181166) (xy -4.991545 0.021042)
(xy -5.060613 -0.170968) (xy -5.139169 -0.379926) (xy -5.22148 -0.590891) (xy -5.301811 -0.788924)
(xy -5.374428 -0.959084) (xy -5.433595 -1.086433) (xy -5.47358 -1.156029) (xy -5.476422 -1.159368)
(xy -5.500873 -1.179258) (xy -5.542169 -1.198927) (xy -5.609377 -1.220411) (xy -5.711559 -1.245747)
(xy -5.857781 -1.276971) (xy -6.057107 -1.316118) (xy -6.318603 -1.365225) (xy -6.651331 -1.426328)
(xy -6.723372 -1.439466) (xy -6.936885 -1.480718) (xy -7.123022 -1.521074) (xy -7.265334 -1.556639)
(xy -7.347371 -1.58352) (xy -7.358372 -1.589787) (xy -7.376498 -1.645346) (xy -7.391233 -1.769505)
(xy -7.402564 -1.947831) (xy -7.410484 -2.165891) (xy -7.414981 -2.409254) (xy -7.416046 -2.663486)
(xy -7.41367 -2.914155) (xy -7.407841 -3.146829) (xy -7.398551 -3.347076) (xy -7.385789 -3.500462)
(xy -7.369546 -3.592556) (xy -7.359754 -3.611405) (xy -7.305239 -3.630418) (xy -7.181104 -3.66135)
(xy -6.999715 -3.701518) (xy -6.77344 -3.748238) (xy -6.514647 -3.798827) (xy -6.373649 -3.825341)
(xy -6.106127 -3.87535) (xy -5.867562 -3.920654) (xy -5.669614 -3.958979) (xy -5.523943 -3.988053)
(xy -5.442209 -4.005603) (xy -5.428757 -4.009494) (xy -5.406021 -4.053362) (xy -5.35796 -4.159024)
(xy -5.290981 -4.311387) (xy -5.21149 -4.495354) (xy -5.125892 -4.69583) (xy -5.040595 -4.897719)
(xy -4.962005 -5.085927) (xy -4.896527 -5.245358) (xy -4.850569 -5.360916) (xy -4.830537 -5.417506)
(xy -4.830164 -5.419979) (xy -4.852874 -5.464621) (xy -4.916541 -5.567353) (xy -5.014475 -5.717963)
(xy -5.139983 -5.906243) (xy -5.286374 -6.121982) (xy -5.371475 -6.245902) (xy -5.526545 -6.473117)
(xy -5.664275 -6.679405) (xy -5.777947 -6.854329) (xy -5.860839 -6.987455) (xy -5.906231 -7.068347)
(xy -5.912787 -7.08648) (xy -5.884605 -7.128688) (xy -5.806696 -7.218809) (xy -5.68901 -7.346746)
(xy -5.5415 -7.502404) (xy -5.374119 -7.675685) (xy -5.196819 -7.856493) (xy -5.019552 -8.034733)
(xy -4.85227 -8.200307) (xy -4.704925 -8.34312) (xy -4.58747 -8.453075) (xy -4.509857 -8.520076)
(xy -4.483892 -8.536065) (xy -4.441616 -8.513581) (xy -4.340499 -8.450415) (xy -4.190373 -8.352997)
(xy -4.00107 -8.227757) (xy -3.782421 -8.081125) (xy -3.617489 -7.969414) (xy -2.784169 -7.402763)
(xy -2.089544 -7.689111) (xy -1.394918 -7.975458) (xy -1.206666 -8.97404) (xy -1.018413 -9.972623)
(xy 1.060052 -9.972623) (xy 1.248305 -8.97404)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 5.958869 4.828231) (xy 6.102092 4.871989) (xy 6.194306 4.92728) (xy 6.224344 4.971004)
(xy 6.216076 5.022834) (xy 6.162427 5.104259) (xy 6.117063 5.161927) (xy 6.023546 5.266182)
(xy 5.953287 5.310045) (xy 5.893393 5.307182) (xy 5.71572 5.261967) (xy 5.585234 5.26402)
(xy 5.479273 5.315261) (xy 5.4437 5.345252) (xy 5.329836 5.450778) (xy 5.329836 6.828853)
(xy 4.871803 6.828853) (xy 4.871803 4.830164) (xy 5.10082 4.830164) (xy 5.238318 4.835602)
(xy 5.309258 4.854909) (xy 5.329827 4.892576) (xy 5.329836 4.893692) (xy 5.33955 4.933146)
(xy 5.383478 4.928) (xy 5.444344 4.899536) (xy 5.570054 4.846569) (xy 5.672134 4.814703)
(xy 5.80348 4.806533) (xy 5.958869 4.828231)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -2.496892 4.864563) (xy -2.39326 4.914062) (xy -2.292894 4.985561) (xy -2.216432 5.067853)
(xy -2.160738 5.172811) (xy -2.122677 5.312313) (xy -2.099115 5.498233) (xy -2.086915 5.742448)
(xy -2.082944 6.056833) (xy -2.082882 6.089754) (xy -2.081967 6.828853) (xy -2.54 6.828853)
(xy -2.54 6.147481) (xy -2.540326 5.89505) (xy -2.542581 5.712093) (xy -2.548681 5.584807)
(xy -2.560541 5.499386) (xy -2.580076 5.442026) (xy -2.609203 5.398924) (xy -2.649776 5.356334)
(xy -2.791731 5.264824) (xy -2.946694 5.247843) (xy -3.094323 5.305701) (xy -3.145663 5.348763)
(xy -3.183353 5.389249) (xy -3.210413 5.432607) (xy -3.228603 5.492463) (xy -3.239684 5.582441)
(xy -3.245414 5.716168) (xy -3.247556 5.90727) (xy -3.247869 6.139911) (xy -3.247869 6.828853)
(xy -3.705902 6.828853) (xy -3.705902 4.830164) (xy -3.476885 4.830164) (xy -3.339386 4.835602)
(xy -3.268447 4.854909) (xy -3.247878 4.892576) (xy -3.247869 4.893692) (xy -3.238325 4.930581)
(xy -3.196233 4.926395) (xy -3.112541 4.885861) (xy -2.922727 4.826224) (xy -2.705599 4.819591)
(xy -2.496892 4.864563)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 8.867792 4.823019) (xy 8.974414 4.848922) (xy 9.17883 4.943772) (xy 9.353625 5.088633)
(xy 9.474597 5.26232) (xy 9.491217 5.301317) (xy 9.514016 5.403465) (xy 9.529975 5.554573)
(xy 9.53541 5.707301) (xy 9.53541 5.996066) (xy 8.931639 5.996066) (xy 8.682619 5.997007)
(xy 8.507189 6.002723) (xy 8.395665 6.01755) (xy 8.33836 6.045827) (xy 8.325588 6.09189)
(xy 8.347662 6.160077) (xy 8.387205 6.239863) (xy 8.497509 6.373017) (xy 8.650792 6.439355)
(xy 8.838141 6.437194) (xy 9.050363 6.364991) (xy 9.233773 6.275883) (xy 9.385962 6.39622)
(xy 9.538151 6.516558) (xy 9.394974 6.648843) (xy 9.203828 6.773832) (xy 8.968753 6.849189)
(xy 8.715898 6.870278) (xy 8.471413 6.83246) (xy 8.431967 6.819628) (xy 8.21709 6.707414)
(xy 8.05725 6.540118) (xy 7.94908 6.312748) (xy 7.88921 6.020308) (xy 7.888513 6.01404)
(xy 7.883152 5.695332) (xy 7.904823 5.581632) (xy 8.327869 5.581632) (xy 8.366722 5.599116)
(xy 8.472205 5.612508) (xy 8.627707 5.620155) (xy 8.726249 5.621312) (xy 8.910013 5.620588)
(xy 9.024914 5.615983) (xy 9.085366 5.603848) (xy 9.105783 5.58053) (xy 9.100581 5.542382)
(xy 9.096217 5.527623) (xy 9.021724 5.388944) (xy 8.904566 5.277179) (xy 8.801173 5.228066)
(xy 8.663816 5.231032) (xy 8.524629 5.292278) (xy 8.407874 5.393683) (xy 8.33781 5.517122)
(xy 8.327869 5.581632) (xy 7.904823 5.581632) (xy 7.936579 5.41502) (xy 8.042572 5.17978)
(xy 8.194911 4.996284) (xy 8.387374 4.871209) (xy 8.613742 4.811229) (xy 8.867792 4.823019)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 7.342288 4.847602) (xy 7.583543 4.95009) (xy 7.659531 4.999981) (xy 7.756648 5.076651)
(xy 7.817612 5.136936) (xy 7.828197 5.156571) (xy 7.798308 5.200142) (xy 7.721819 5.274077)
(xy 7.660582 5.325679) (xy 7.492967 5.460378) (xy 7.360614 5.34901) (xy 7.258336 5.277113)
(xy 7.15861 5.252296) (xy 7.044475 5.258357) (xy 6.863234 5.303418) (xy 6.738475 5.396949)
(xy 6.662658 5.548154) (xy 6.62824 5.766236) (xy 6.628231 5.766373) (xy 6.631208 6.010124)
(xy 6.677467 6.188966) (xy 6.769742 6.31073) (xy 6.83265 6.351964) (xy 6.999717 6.403311)
(xy 7.178162 6.403342) (xy 7.333415 6.353522) (xy 7.370164 6.32918) (xy 7.46233 6.267004)
(xy 7.534387 6.256813) (xy 7.612102 6.303092) (xy 7.698018 6.386212) (xy 7.834011 6.526521)
(xy 7.683023 6.650978) (xy 7.44974 6.791443) (xy 7.186673 6.860666) (xy 6.91176 6.855653)
(xy 6.731216 6.809755) (xy 6.520194 6.696249) (xy 6.351426 6.517685) (xy 6.274753 6.391639)
(xy 6.212654 6.210791) (xy 6.181581 5.981745) (xy 6.181342 5.73351) (xy 6.211743 5.495093)
(xy 6.272592 5.295503) (xy 6.282176 5.275039) (xy 6.424102 5.074341) (xy 6.616259 4.928217)
(xy 6.843464 4.839698) (xy 7.090535 4.811815) (xy 7.342288 4.847602)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 3.289508 5.478311) (xy 3.293444 5.783698) (xy 3.307823 6.01566) (xy 3.336504 6.183786)
(xy 3.383348 6.297671) (xy 3.452211 6.366905) (xy 3.546954 6.40108) (xy 3.664262 6.409811)
(xy 3.787123 6.400028) (xy 3.880444 6.364287) (xy 3.948084 6.292995) (xy 3.993901 6.176561)
(xy 4.021755 6.005391) (xy 4.035504 5.769896) (xy 4.039016 5.478311) (xy 4.039016 4.830164)
(xy 4.497049 4.830164) (xy 4.497049 6.828853) (xy 4.268033 6.828853) (xy 4.129971 6.823258)
(xy 4.058878 6.803611) (xy 4.039016 6.766313) (xy 4.027054 6.733094) (xy 3.979447 6.740121)
(xy 3.883485 6.787132) (xy 3.663548 6.859654) (xy 3.430274 6.854516) (xy 3.206755 6.775766)
(xy 3.100313 6.713558) (xy 3.019122 6.646204) (xy 2.959808 6.561928) (xy 2.918996 6.448957)
(xy 2.893312 6.295515) (xy 2.879381 6.089827) (xy 2.873829 5.820118) (xy 2.873115 5.611551)
(xy 2.873115 4.830164) (xy 3.289508 4.830164) (xy 3.289508 5.478311)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 2.022521 4.854805) (xy 2.233136 4.969505) (xy 2.397915 5.150574) (xy 2.475554 5.297838)
(xy 2.508886 5.427907) (xy 2.530483 5.613333) (xy 2.539739 5.826939) (xy 2.536045 6.04155)
(xy 2.518794 6.229991) (xy 2.498643 6.330637) (xy 2.430667 6.468323) (xy 2.312942 6.614566)
(xy 2.171065 6.742452) (xy 2.030632 6.825063) (xy 2.027207 6.826373) (xy 1.852945 6.862472)
(xy 1.646427 6.863365) (xy 1.450174 6.830501) (xy 1.374396 6.804161) (xy 1.179221 6.693484)
(xy 1.039438 6.548478) (xy 0.947599 6.356503) (xy 0.896254 6.10492) (xy 0.884637 5.973142)
(xy 0.886119 5.807553) (xy 1.332459 5.807553) (xy 1.347494 6.049177) (xy 1.390772 6.233303)
(xy 1.459551 6.350949) (xy 1.50855 6.38459) (xy 1.634093 6.40805) (xy 1.783318 6.401104)
(xy 1.912333 6.367345) (xy 1.946166 6.348772) (xy 2.035428 6.240599) (xy 2.094345 6.075051)
(xy 2.119424 5.873581) (xy 2.107174 5.657646) (xy 2.079796 5.52769) (xy 2.001191 5.377191)
(xy 1.877104 5.283114) (xy 1.727661 5.250587) (xy 1.572987 5.284738) (xy 1.454174 5.368273)
(xy 1.391735 5.437193) (xy 1.355293 5.505126) (xy 1.337923 5.597064) (xy 1.332699 5.737999)
(xy 1.332459 5.807553) (xy 0.886119 5.807553) (xy 0.887785 5.621495) (xy 0.945056 5.333134)
(xy 1.056457 5.108049) (xy 1.221993 4.94623) (xy 1.44167 4.847666) (xy 1.488842 4.836236)
(xy 1.772336 4.809406) (xy 2.022521 4.854805)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 0.046418 4.823003) (xy 0.2041 4.852907) (xy 0.367685 4.915452) (xy 0.385164 4.923426)
(xy 0.509217 4.988656) (xy 0.595129 5.049274) (xy 0.622898 5.088106) (xy 0.596453 5.151437)
(xy 0.53222 5.244881) (xy 0.503708 5.279762) (xy 0.386211 5.417066) (xy 0.234732 5.327691)
(xy 0.09057 5.268152) (xy -0.076 5.236326) (xy -0.235738 5.234316) (xy -0.359406 5.264221)
(xy -0.389084 5.282886) (xy -0.445602 5.368466) (xy -0.452471 5.467049) (xy -0.41018 5.544062)
(xy -0.385164 5.558998) (xy -0.310204 5.577547) (xy -0.178439 5.599348) (xy -0.016009 5.62018)
(xy 0.013956 5.623447) (xy 0.27484 5.668575) (xy 0.464055 5.74523) (xy 0.589543 5.860491)
(xy 0.659243 6.021435) (xy 0.680956 6.218015) (xy 0.650961 6.441473) (xy 0.553559 6.616949)
(xy 0.388361 6.744758) (xy 0.154977 6.825218) (xy -0.104098 6.856962) (xy -0.315367 6.85658)
(xy -0.486735 6.827749) (xy -0.60377 6.787944) (xy -0.75165 6.718587) (xy -0.888313 6.638097)
(xy -0.936885 6.60267) (xy -1.061803 6.500705) (xy -0.760491 6.195813) (xy -0.589204 6.309165)
(xy -0.417406 6.3943) (xy -0.233952 6.43883) (xy -0.057603 6.443528) (xy 0.092881 6.40917)
(xy 0.19874 6.336529) (xy 0.232921 6.275238) (xy 0.227794 6.176941) (xy 0.142857 6.101773)
(xy -0.021657 6.049866) (xy -0.201899 6.025875) (xy -0.479291 5.980104) (xy -0.685365 5.893748)
(xy -0.822878 5.76428) (xy -0.894587 5.589172) (xy -0.904521 5.381565) (xy -0.855452 5.164714)
(xy -0.74358 5.000805) (xy -0.567903 4.889088) (xy -0.327419 4.828814) (xy -0.149257 4.816999)
(xy 0.046418 4.823003)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -4.492675 4.876526) (xy -4.451181 4.896061) (xy -4.307566 5.001263) (xy -4.171764 5.154793)
(xy -4.070362 5.323845) (xy -4.04152 5.401567) (xy -4.015206 5.540398) (xy -3.999515 5.708177)
(xy -3.997609 5.777459) (xy -3.997377 5.996066) (xy -5.255585 5.996066) (xy -5.228766 6.110574)
(xy -5.162934 6.246004) (xy -5.047839 6.363046) (xy -4.910913 6.438442) (xy -4.823658 6.454098)
(xy -4.705328 6.435099) (xy -4.564149 6.387446) (xy -4.516189 6.365521) (xy -4.338829 6.276944)
(xy -4.18747 6.392391) (xy -4.100131 6.470474) (xy -4.053658 6.534922) (xy -4.051305 6.553837)
(xy -4.092822 6.599681) (xy -4.18381 6.669349) (xy -4.266395 6.7237) (xy -4.489249 6.821405)
(xy -4.739087 6.865628) (xy -4.98671 6.85413) (xy -5.184098 6.794029) (xy -5.387576 6.665284)
(xy -5.532179 6.495774) (xy -5.622639 6.276462) (xy -5.663689 5.998309) (xy -5.667329 5.871034)
(xy -5.652761 5.579375) (xy -5.650972 5.570891) (xy -5.234059 5.570891) (xy -5.222577 5.598242)
(xy -5.175384 5.613324) (xy -5.078049 5.619788) (xy -4.916136 5.621285) (xy -4.85379 5.621312)
(xy -4.664103 5.619052) (xy -4.543811 5.610844) (xy -4.479116 5.59455) (xy -4.45622 5.568027)
(xy -4.45541 5.55951) (xy -4.48154 5.491825) (xy -4.546937 5.397005) (xy -4.575052 5.363805)
(xy -4.679426 5.269906) (xy -4.788225 5.232988) (xy -4.846843 5.229902) (xy -5.005426 5.268493)
(xy -5.138413 5.372155) (xy -5.222772 5.522717) (xy -5.224267 5.527623) (xy -5.234059 5.570891)
(xy -5.650972 5.570891) (xy -5.604316 5.349722) (xy -5.517045 5.165983) (xy -5.410311 5.035557)
(xy -5.21298 4.894131) (xy -4.981015 4.818556) (xy -4.734288 4.811724) (xy -4.492675 4.876526)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -8.40539 4.851802) (xy -8.187553 4.948108) (xy -8.022184 5.108919) (xy -7.909043 5.334482)
(xy -7.847888 5.625042) (xy -7.843505 5.670408) (xy -7.84007 5.990256) (xy -7.884602 6.270614)
(xy -7.974391 6.497847) (xy -8.022471 6.570941) (xy -8.189945 6.725643) (xy -8.403232 6.825838)
(xy -8.641846 6.867418) (xy -8.885303 6.846272) (xy -9.07037 6.781145) (xy -9.229521 6.671393)
(xy -9.359596 6.527496) (xy -9.361846 6.52413) (xy -9.41467 6.435314) (xy -9.448999 6.346005)
(xy -9.469788 6.233294) (xy -9.481991 6.074273) (xy -9.487367 5.943868) (xy -9.489605 5.825611)
(xy -9.073294 5.825611) (xy -9.069225 5.943335) (xy -9.054455 6.100049) (xy -9.028398 6.200621)
(xy -8.981407 6.272173) (xy -8.937397 6.313971) (xy -8.781377 6.401484) (xy -8.618131 6.413179)
(xy -8.466096 6.350212) (xy -8.39008 6.279653) (xy -8.335303 6.20855) (xy -8.303263 6.140512)
(xy -8.2892 6.051967) (xy -8.288358 5.919339) (xy -8.292691 5.797195) (xy -8.302011 5.62271)
(xy -8.316788 5.509538) (xy -8.34342 5.435721) (xy -8.388309 5.379298) (xy -8.42388 5.34705)
(xy -8.572671 5.26234) (xy -8.733187 5.258117) (xy -8.86778 5.308292) (xy -8.9826 5.413075)
(xy -9.051004 5.585198) (xy -9.073294 5.825611) (xy -9.489605 5.825611) (xy -9.492276 5.684548)
(xy -9.483893 5.49061) (xy -9.458772 5.344745) (xy -9.413468 5.229641) (xy -9.344536 5.127986)
(xy -9.318978 5.097802) (xy -9.159175 4.947412) (xy -8.987769 4.859566) (xy -8.778151 4.822762)
(xy -8.675936 4.819754) (xy -8.40539 4.851802)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 6.730842 7.963999) (xy 6.929876 8.015746) (xy 7.096561 8.122544) (xy 7.177269 8.202326)
(xy 7.309568 8.390931) (xy 7.38539 8.60972) (xy 7.411438 8.878668) (xy 7.411571 8.90041)
(xy 7.411803 9.119017) (xy 6.153595 9.119017) (xy 6.180415 9.233525) (xy 6.228841 9.337232)
(xy 6.313596 9.44529) (xy 6.331323 9.462541) (xy 6.48368 9.555904) (xy 6.657424 9.571738)
(xy 6.857411 9.510313) (xy 6.891311 9.493771) (xy 6.995288 9.443484) (xy 7.064931 9.414834)
(xy 7.077083 9.412184) (xy 7.119501 9.437913) (xy 7.200399 9.500861) (xy 7.241465 9.535259)
(xy 7.32656 9.614276) (xy 7.354503 9.666451) (xy 7.33511 9.714446) (xy 7.324743 9.72757)
(xy 7.254531 9.785008) (xy 7.138674 9.854813) (xy 7.057869 9.895564) (xy 6.828501 9.967362)
(xy 6.574564 9.990625) (xy 6.334074 9.963059) (xy 6.266721 9.943321) (xy 6.058262 9.831612)
(xy 5.903746 9.659721) (xy 5.802278 9.425979) (xy 5.752965 9.128716) (xy 5.747551 8.973279)
(xy 5.763359 8.746973) (xy 6.162623 8.746973) (xy 6.20124 8.763702) (xy 6.305042 8.776829)
(xy 6.455956 8.784575) (xy 6.558197 8.785902) (xy 6.742101 8.784623) (xy 6.858174 8.778638)
(xy 6.921852 8.764724) (xy 6.948567 8.739655) (xy 6.95377 8.70328) (xy 6.918073 8.591229)
(xy 6.828196 8.480488) (xy 6.709966 8.395489) (xy 6.59169 8.360718) (xy 6.431044 8.391563)
(xy 6.291978 8.480732) (xy 6.195557 8.609263) (xy 6.162623 8.746973) (xy 5.763359 8.746973)
(xy 5.770572 8.643733) (xy 5.841624 8.381175) (xy 5.96221 8.183525) (xy 6.133834 8.048702)
(xy 6.357998 7.974626) (xy 6.479438 7.96036) (xy 6.730842 7.963999)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 5.415107 7.95246) (xy 5.575182 7.984017) (xy 5.666312 8.030743) (xy 5.762179 8.10837)
(xy 5.625787 8.280579) (xy 5.541694 8.384867) (xy 5.484592 8.435746) (xy 5.427844 8.443519)
(xy 5.344811 8.418488) (xy 5.305833 8.404327) (xy 5.146926 8.383433) (xy 5.001399 8.42822)
(xy 4.89456 8.529399) (xy 4.877205 8.561659) (xy 4.858303 8.647115) (xy 4.843716 8.804606)
(xy 4.834126 9.022969) (xy 4.830219 9.291038) (xy 4.830164 9.329172) (xy 4.830164 9.993443)
(xy 4.372131 9.993443) (xy 4.372131 7.953115) (xy 4.601148 7.953115) (xy 4.733199 7.956563)
(xy 4.801992 7.971907) (xy 4.82743 8.006648) (xy 4.830164 8.039416) (xy 4.830164 8.125717)
(xy 4.939878 8.039416) (xy 5.06568 7.980538) (xy 5.234681 7.951426) (xy 5.415107 7.95246)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 3.43867 7.96548) (xy 3.614179 8.008109) (xy 3.664912 8.030693) (xy 3.763254 8.089847)
(xy 3.838727 8.156472) (xy 3.894571 8.242135) (xy 3.934026 8.358405) (xy 3.960332 8.516848)
(xy 3.976729 8.729034) (xy 3.986457 9.006529) (xy 3.990151 9.191885) (xy 4.003745 9.993443)
(xy 3.771544 9.993443) (xy 3.630677 9.987536) (xy 3.558102 9.96735) (xy 3.539344 9.933453)
(xy 3.529441 9.896799) (xy 3.485166 9.903807) (xy 3.424836 9.933197) (xy 3.273803 9.978246)
(xy 3.079693 9.990385) (xy 2.875531 9.970529) (xy 2.69434 9.919592) (xy 2.678089 9.912522)
(xy 2.512491 9.796188) (xy 2.403324 9.634467) (xy 2.353091 9.44543) (xy 2.356928 9.377515)
(xy 2.766763 9.377515) (xy 2.802875 9.468914) (xy 2.909942 9.534411) (xy 3.082684 9.569563)
(xy 3.175 9.574231) (xy 3.32885 9.562282) (xy 3.431115 9.515844) (xy 3.456066 9.493771)
(xy 3.523661 9.373681) (xy 3.539344 9.264754) (xy 3.539344 9.119017) (xy 3.336352 9.119017)
(xy 3.100387 9.131043) (xy 2.934881 9.168871) (xy 2.830305 9.235121) (xy 2.806891 9.264656)
(xy 2.766763 9.377515) (xy 2.356928 9.377515) (xy 2.364295 9.247148) (xy 2.43944 9.057692)
(xy 2.541968 8.929656) (xy 2.604065 8.874302) (xy 2.664855 8.837924) (xy 2.743952 8.815744)
(xy 2.860971 8.802982) (xy 3.035527 8.794857) (xy 3.104763 8.792521) (xy 3.539344 8.778321)
(xy 3.538707 8.646784) (xy 3.521876 8.508519) (xy 3.461026 8.424917) (xy 3.338095 8.371507)
(xy 3.334797 8.370555) (xy 3.160504 8.349555) (xy 2.989952 8.376985) (xy 2.8632 8.443689)
(xy 2.812342 8.476625) (xy 2.757565 8.472068) (xy 2.673272 8.424349) (xy 2.623773 8.390671)
(xy 2.526955 8.318716) (xy 2.466982 8.264779) (xy 2.457359 8.249337) (xy 2.496985 8.169424)
(xy 2.614064 8.073989) (xy 2.664918 8.041789) (xy 2.811113 7.986332) (xy 3.008137 7.954913)
(xy 3.226989 7.947855) (xy 3.43867 7.96548)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 1.096942 7.973935) (xy 1.312248 8.619344) (xy 1.527555 9.264754) (xy 1.595064 9.035738)
(xy 1.635691 8.894204) (xy 1.689133 8.702936) (xy 1.746842 8.492693) (xy 1.777355 8.379918)
(xy 1.892136 7.953115) (xy 2.365687 7.953115) (xy 2.224139 8.400738) (xy 2.154433 8.620903)
(xy 2.070223 8.886471) (xy 1.982281 9.163492) (xy 1.903772 9.410492) (xy 1.724952 9.972623)
(xy 1.531882 9.985185) (xy 1.338811 9.997746) (xy 1.234118 9.65207) (xy 1.169553 9.437335)
(xy 1.099092 9.200604) (xy 1.037511 8.991526) (xy 1.035081 8.983205) (xy 0.989085 8.841537)
(xy 0.948503 8.744874) (xy 0.92008 8.708321) (xy 0.914239 8.712549) (xy 0.893738 8.769217)
(xy 0.854785 8.890605) (xy 0.802122 9.061448) (xy 0.740491 9.266482) (xy 0.707143 9.379262)
(xy 0.526546 9.993443) (xy 0.143267 9.993443) (xy -0.163133 9.025328) (xy -0.249209 8.753759)
(xy -0.32762 8.507138) (xy -0.394661 8.297048) (xy -0.446631 8.135076) (xy -0.479826 8.032808)
(xy -0.489916 8.002928) (xy -0.481928 7.972334) (xy -0.419208 7.958935) (xy -0.288685 7.960275)
(xy -0.268253 7.961288) (xy -0.026208 7.973935) (xy 0.132317 8.556885) (xy 0.190585 8.769486)
(xy 0.242655 8.956377) (xy 0.283944 9.101331) (xy 0.309866 9.18812) (xy 0.314656 9.202269)
(xy 0.334504 9.185998) (xy 0.37453 9.101697) (xy 0.430138 8.960842) (xy 0.496731 8.774911)
(xy 0.553024 8.606956) (xy 0.767578 7.949209) (xy 1.096942 7.973935)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -0.66623 9.993443) (xy -0.895246 9.993443) (xy -1.028175 9.989546) (xy -1.097405 9.973407)
(xy -1.122332 9.938354) (xy -1.124262 9.914653) (xy -1.128466 9.867123) (xy -1.154974 9.858008)
(xy -1.224633 9.887308) (xy -1.278804 9.914653) (xy -1.486777 9.979451) (xy -1.712853 9.983201)
(xy -1.896655 9.934873) (xy -2.067813 9.818118) (xy -2.198284 9.645781) (xy -2.269727 9.442506)
(xy -2.271546 9.431141) (xy -2.282161 9.307136) (xy -2.28744 9.129117) (xy -2.287016 8.99448)
(xy -1.832172 8.99448) (xy -1.821635 9.173428) (xy -1.797666 9.320924) (xy -1.765217 9.404217)
(xy -1.642456 9.518041) (xy -1.496701 9.558845) (xy -1.346393 9.525848) (xy -1.217951 9.427422)
(xy -1.169308 9.361224) (xy -1.140866 9.282231) (xy -1.127544 9.166926) (xy -1.124262 8.993736)
(xy -1.130135 8.822229) (xy -1.145647 8.67154) (xy -1.167638 8.570698) (xy -1.171303 8.561659)
(xy -1.259988 8.454195) (xy -1.389428 8.395195) (xy -1.534257 8.385669) (xy -1.669109 8.426626)
(xy -1.768617 8.519076) (xy -1.77894 8.537473) (xy -1.81125 8.649646) (xy -1.828852 8.810934)
(xy -1.832172 8.99448) (xy -2.287016 8.99448) (xy -2.2868 8.926212) (xy -2.283806 8.81701)
(xy -2.263442 8.546856) (xy -2.221117 8.344024) (xy -2.150706 8.194077) (xy -2.046088 8.082579)
(xy -1.944521 8.017127) (xy -1.802616 7.971117) (xy -1.626121 7.955336) (xy -1.445393 7.96819)
(xy -1.290787 8.008081) (xy -1.209101 8.055801) (xy -1.124262 8.132579) (xy -1.124262 7.161967)
(xy -0.66623 7.161967) (xy -0.66623 9.993443)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -3.289475 7.95754) (xy -3.227163 7.976218) (xy -3.207075 8.017255) (xy -3.20623 8.035782)
(xy -3.202625 8.087383) (xy -3.1778 8.095484) (xy -3.110737 8.060108) (xy -3.070902 8.035937)
(xy -2.945227 7.984175) (xy -2.795123 7.958581) (xy -2.637737 7.956613) (xy -2.490214 7.975729)
(xy -2.3697 8.013387) (xy -2.29334 8.067044) (xy -2.278281 8.134158) (xy -2.285881 8.152333)
(xy -2.341282 8.227777) (xy -2.42719 8.320568) (xy -2.442728 8.335568) (xy -2.524612 8.40454)
(xy -2.595263 8.426825) (xy -2.694068 8.411272) (xy -2.733652 8.400938) (xy -2.856828 8.376116)
(xy -2.943436 8.387278) (xy -3.016576 8.426646) (xy -3.083574 8.479479) (xy -3.132918 8.545924)
(xy -3.167209 8.638652) (xy -3.189048 8.770334) (xy -3.201034 8.953641) (xy -3.205769 9.201246)
(xy -3.20623 9.350744) (xy -3.20623 9.993443) (xy -3.622623 9.993443) (xy -3.622623 7.953115)
(xy -3.414426 7.953115) (xy -3.289475 7.95754)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -4.583779 7.969247) (xy -4.387889 8.021514) (xy -4.238767 8.116253) (xy -4.133535 8.240338)
(xy -4.100821 8.293296) (xy -4.076669 8.348768) (xy -4.059784 8.41973) (xy -4.048873 8.519154)
(xy -4.04264 8.660016) (xy -4.039791 8.855289) (xy -4.039032 9.117948) (xy -4.039016 9.187633)
(xy -4.039016 9.993443) (xy -4.238885 9.993443) (xy -4.36637 9.984515) (xy -4.460634 9.961896)
(xy -4.484251 9.947946) (xy -4.548815 9.92387) (xy -4.614759 9.947946) (xy -4.723332 9.978003)
(xy -4.881042 9.9901) (xy -5.055844 9.984851) (xy -5.215693 9.962869) (xy -5.309016 9.934663)
(xy -5.489609 9.818731) (xy -5.60247 9.657847) (xy -5.653209 9.443936) (xy -5.65368 9.438443)
(xy -5.649227 9.343547) (xy -5.246557 9.343547) (xy -5.211354 9.451484) (xy -5.154014 9.512229)
(xy -5.038913 9.558172) (xy -4.886986 9.576512) (xy -4.732061 9.567485) (xy -4.607964 9.531332)
(xy -4.573197 9.508137) (xy -4.512444 9.40096) (xy -4.497049 9.27912) (xy -4.497049 9.119017)
(xy -4.727403 9.119017) (xy -4.946241 9.135863) (xy -5.112137 9.183593) (xy -5.215338 9.257986)
(xy -5.246557 9.343547) (xy -5.649227 9.343547) (xy -5.642713 9.204731) (xy -5.565631 9.019946)
(xy -5.420714 8.880206) (xy -5.400683 8.867495) (xy -5.31461 8.826105) (xy -5.208073 8.801041)
(xy -5.059141 8.788858) (xy -4.882213 8.786057) (xy -4.497049 8.785902) (xy -4.497049 8.624443)
(xy -4.513387 8.499168) (xy -4.555078 8.415241) (xy -4.559959 8.410773) (xy -4.652736 8.374059)
(xy -4.792784 8.359828) (xy -4.947555 8.366821) (xy -5.084499 8.39378) (xy -5.165759 8.434212)
(xy -5.20979 8.466601) (xy -5.256285 8.472784) (xy -5.320451 8.446248) (xy -5.417495 8.380479)
(xy -5.562626 8.268963) (xy -5.575947 8.258516) (xy -5.569121 8.219862) (xy -5.512178 8.155572)
(xy -5.42563 8.084131) (xy -5.329992 8.024021) (xy -5.299944 8.009827) (xy -5.190341 7.981503)
(xy -5.029735 7.9613) (xy -4.850302 7.953196) (xy -4.841911 7.95318) (xy -4.583779 7.969247)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -6.320808 4.865166) (xy -6.233015 4.90854) (xy -6.124751 4.984122) (xy -6.045845 5.066542)
(xy -5.991805 5.170037) (xy -5.958141 5.308843) (xy -5.940363 5.497194) (xy -5.93398 5.749328)
(xy -5.933607 5.857724) (xy -5.934696 6.095287) (xy -5.939222 6.265068) (xy -5.949068 6.38255)
(xy -5.966118 6.463215) (xy -5.992259 6.522545) (xy -6.019458 6.56302) (xy -6.19308 6.735225)
(xy -6.397538 6.838806) (xy -6.618104 6.86996) (xy -6.840046 6.824885) (xy -6.91036 6.793009)
(xy -7.078689 6.705271) (xy -7.078689 8.080172) (xy -6.955838 8.016643) (xy -6.793967 7.967491)
(xy -6.595005 7.9549) (xy -6.396328 7.978147) (xy -6.24629 8.03037) (xy -6.121841 8.129826)
(xy -6.015508 8.272143) (xy -6.007513 8.286755) (xy -5.973793 8.355582) (xy -5.949166 8.424956)
(xy -5.932214 8.508996) (xy -5.921519 8.621816) (xy -5.915662 8.777533) (xy -5.913227 8.990265)
(xy -5.912787 9.229664) (xy -5.912787 9.993443) (xy -6.37082 9.993443) (xy -6.37082 8.585108)
(xy -6.498933 8.477308) (xy -6.632018 8.391079) (xy -6.758048 8.375401) (xy -6.884778 8.415747)
(xy -6.952317 8.455254) (xy -7.002586 8.511527) (xy -7.038338 8.596572) (xy -7.062328 8.722394)
(xy -7.077311 8.900998) (xy -7.08604 9.144391) (xy -7.089114 9.306394) (xy -7.099508 9.972623)
(xy -7.318115 9.985209) (xy -7.536721 9.997795) (xy -7.536721 5.863464) (xy -7.078689 5.863464)
(xy -7.067011 6.093953) (xy -7.027662 6.25395) (xy -6.954166 6.353497) (xy -6.840049 6.402639)
(xy -6.724754 6.412459) (xy -6.594238 6.401175) (xy -6.507617 6.356764) (xy -6.453451 6.298081)
(xy -6.41081 6.234962) (xy -6.385426 6.164645) (xy -6.374131 6.066123) (xy -6.37376 5.918387)
(xy -6.37756 5.794683) (xy -6.386288 5.608328) (xy -6.39928 5.485982) (xy -6.421159 5.408377)
(xy -6.456546 5.356245) (xy -6.489941 5.326111) (xy -6.629475 5.260399) (xy -6.794619 5.249787)
(xy -6.889446 5.272423) (xy -6.983334 5.352881) (xy -7.045526 5.509392) (xy -7.075669 5.740852)
(xy -7.078689 5.863464) (xy -7.536721 5.863464) (xy -7.536721 4.830164) (xy -7.307705 4.830164)
(xy -7.170206 4.835602) (xy -7.099267 4.854909) (xy -7.078697 4.892576) (xy -7.078689 4.893692)
(xy -7.069145 4.930581) (xy -7.027051 4.926393) (xy -6.943361 4.885859) (xy -6.748354 4.82385)
(xy -6.528954 4.817332) (xy -6.320808 4.865166)) (layer F.SilkS) (width 0.01))
)

View File

@ -0,0 +1,41 @@
(module Pin_Headers:Pin_Header_Straight_1x08_Pitch2.54mm (layer F.Cu) (tedit 5AB15CDB)
(descr "Through hole straight pin header, 1x08, 2.54mm pitch, single row")
(tags "Through hole pin header THT 1x08 2.54mm single row")
(fp_text reference J3 (at 0 -2.33) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value Breakout (at 0 20.11) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 0 8.89 90) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.8 19.55) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.8 19.55) (end 1.8 19.55) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.8 -1.8) (end -1.8 19.55) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12))
(fp_line (start 1.33 1.27) (end 1.33 19.11) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 1.27) (end -1.33 19.11) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 19.11) (end 1.33 19.11) (layer F.SilkS) (width 0.12))
(fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1))
(fp_line (start -1.27 19.05) (end -1.27 -0.635) (layer F.Fab) (width 0.1))
(fp_line (start 1.27 19.05) (end -1.27 19.05) (layer F.Fab) (width 0.1))
(fp_line (start 1.27 -1.27) (end 1.27 19.05) (layer F.Fab) (width 0.1))
(fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1))
(pad 8 thru_hole oval (at 0 17.78) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 7 thru_hole oval (at 0 15.24) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 6 thru_hole oval (at 0 12.7) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 5 thru_hole oval (at 0 10.16) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 4 thru_hole oval (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 3 thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 2 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x08_P2.54mm_Vertical.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@ -0,0 +1,36 @@
(module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5C3015E3)
(descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf")
(tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm")
(fp_text reference R1 (at 5.08 -2.37) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value 1k (at 5.08 2.37) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1))
(fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1))
(fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1))
(fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1))
(fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1))
(fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1))
(fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12))
(fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12))
(fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12))
(fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12))
(fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12))
(fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12))
(fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05))
(fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05))
(fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05))
(fp_text user %R (at 5.08 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 thru_hole circle (at 0 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask))
(pad 2 thru_hole oval (at 10.16 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask))
(model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@ -0,0 +1,31 @@
(module Package_TO_SOT_THT:TO-92L_HandSolder (layer F.Cu) (tedit 5C39FB0E)
(descr "TO-92L leads in-line (large body variant of TO-92), also known as TO-226, wide, drill 0.75mm, hand-soldering variant with enlarged pads (see https://www.diodes.com/assets/Package-Files/TO92L.pdf and http://www.ti.com/lit/an/snoa059/snoa059.pdf)")
(tags "to-92 sc-43 sc-43a sot54 PA33 transistor")
(fp_text reference Q1 (at 1.27 -3.8) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value S8050 (at 1.27 2.79) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 1.27 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -0.53 1.85) (end 3.07 1.85) (layer F.SilkS) (width 0.12))
(fp_line (start -0.5 1.75) (end 3 1.75) (layer F.Fab) (width 0.1))
(fp_line (start -1.46 -3.05) (end 4 -3.05) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.45 -3.05) (end -1.46 2.01) (layer F.CrtYd) (width 0.05))
(fp_line (start 4 2.01) (end 4 -3.05) (layer F.CrtYd) (width 0.05))
(fp_line (start 4 2.01) (end -1.46 2.01) (layer F.CrtYd) (width 0.05))
(fp_arc (start 1.27 0) (end 1.27 -2.48) (angle 135) (layer F.Fab) (width 0.1))
(fp_arc (start 1.27 0) (end 0.45 -2.45) (angle -116.9763941) (layer F.SilkS) (width 0.12))
(fp_arc (start 1.27 0) (end 1.27 -2.48) (angle -135) (layer F.Fab) (width 0.1))
(fp_arc (start 1.27 0) (end 2.05 -2.45) (angle 117.6433766) (layer F.SilkS) (width 0.12))
(pad 2 thru_hole roundrect (at 1.27 -1.27) (size 1.1 1.8) (drill 0.75 (offset 0 -0.4)) (layers *.Cu *.Mask) (roundrect_rratio 0.25))
(pad 3 thru_hole roundrect (at 2.54 0) (size 1.1 1.8) (drill 0.75 (offset 0 0.4)) (layers *.Cu *.Mask) (roundrect_rratio 0.25))
(pad 1 thru_hole rect (at 0 0) (size 1.1 1.8) (drill 0.75 (offset 0 0.4)) (layers *.Cu *.Mask))
(model ${KISYS3DMOD}/Package_TO_SOT_THT.3dshapes/TO-92L.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@ -0,0 +1,34 @@
(module Connectors_Terminal_Blocks:TerminalBlock_bornier-2_P5.08mm (layer F.Cu) (tedit 59FF03AB)
(descr "simple 2-pin terminal block, pitch 5.08mm, revamped version of bornier2")
(tags "terminal block bornier2")
(fp_text reference J1 (at 2.54 -5.08) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value "Screw Term." (at 2.54 5.08) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 7.79 4) (end -2.71 4) (layer F.CrtYd) (width 0.05))
(fp_line (start 7.79 4) (end 7.79 -4) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.71 -4) (end -2.71 4) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.71 -4) (end 7.79 -4) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.54 3.81) (end 7.62 3.81) (layer F.SilkS) (width 0.12))
(fp_line (start -2.54 -3.81) (end -2.54 3.81) (layer F.SilkS) (width 0.12))
(fp_line (start 7.62 -3.81) (end -2.54 -3.81) (layer F.SilkS) (width 0.12))
(fp_line (start 7.62 3.81) (end 7.62 -3.81) (layer F.SilkS) (width 0.12))
(fp_line (start 7.62 2.54) (end -2.54 2.54) (layer F.SilkS) (width 0.12))
(fp_line (start 7.54 -3.75) (end -2.46 -3.75) (layer F.Fab) (width 0.1))
(fp_line (start 7.54 3.75) (end 7.54 -3.75) (layer F.Fab) (width 0.1))
(fp_line (start -2.46 3.75) (end 7.54 3.75) (layer F.Fab) (width 0.1))
(fp_line (start -2.46 -3.75) (end -2.46 3.75) (layer F.Fab) (width 0.1))
(fp_line (start -2.41 2.55) (end 7.49 2.55) (layer F.Fab) (width 0.1))
(fp_text user %R (at 2.54 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 2 thru_hole circle (at 5.08 0) (size 3 3) (drill 1.52) (layers *.Cu *.Mask))
(pad 1 thru_hole rect (at 0 0) (size 3 3) (drill 1.52) (layers *.Cu *.Mask))
(model Connectors_Phoenix.3dshapes/PhoenixContact_MCV-G_02x5.08mm_Vertical.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@ -0,0 +1,144 @@
(module HASwitchPlate:WeMos_logo_18mm (layer F.Cu) (tedit 0)
(fp_text reference G*** (at 0 0) (layer F.SilkS) hide
(effects (font (size 1.524 1.524) (thickness 0.3)))
)
(fp_text value LOGO (at 0.75 0) (layer F.SilkS) hide
(effects (font (size 1.524 1.524) (thickness 0.3)))
)
(fp_poly (pts (xy 6.475156 -2.630428) (xy 6.743521 -2.579028) (xy 7.150167 -2.447789) (xy 7.553407 -2.264679)
(xy 7.932686 -2.040704) (xy 8.267446 -1.786873) (xy 8.333734 -1.727509) (xy 8.518847 -1.556197)
(xy 8.303696 -1.344388) (xy 8.088546 -1.13258) (xy 7.952248 -1.272839) (xy 7.681976 -1.501699)
(xy 7.357781 -1.690745) (xy 6.986775 -1.8375) (xy 6.576067 -1.939489) (xy 6.132768 -1.994237)
(xy 5.853864 -2.00338) (xy 5.375958 -1.970551) (xy 4.923502 -1.871353) (xy 4.493344 -1.704718)
(xy 4.082335 -1.46958) (xy 3.906021 -1.343592) (xy 3.791007 -1.25688) (xy 3.700212 -1.189659)
(xy 3.646591 -1.15146) (xy 3.637712 -1.146228) (xy 3.612887 -1.171825) (xy 3.552594 -1.238681)
(xy 3.468288 -1.334041) (xy 3.438116 -1.368484) (xy 3.245106 -1.5893) (xy 3.438116 -1.762151)
(xy 3.665663 -1.943237) (xy 3.93446 -2.121332) (xy 4.215718 -2.278831) (xy 4.474291 -2.395694)
(xy 4.85329 -2.516706) (xy 5.260938 -2.602145) (xy 5.679173 -2.650551) (xy 6.089932 -2.660465)
(xy 6.475156 -2.630428)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 6.406377 -1.584776) (xy 6.797311 -1.476269) (xy 6.929234 -1.425514) (xy 7.101454 -1.34299)
(xy 7.290551 -1.234632) (xy 7.475873 -1.113896) (xy 7.636767 -0.994243) (xy 7.752583 -0.88913)
(xy 7.752948 -0.888734) (xy 7.832235 -0.802886) (xy 7.60029 -0.595428) (xy 7.493357 -0.503551)
(xy 7.405934 -0.43542) (xy 7.351662 -0.401377) (xy 7.342125 -0.399689) (xy 7.301114 -0.422499)
(xy 7.215246 -0.472784) (xy 7.100859 -0.540947) (xy 7.064301 -0.562919) (xy 6.696163 -0.750092)
(xy 6.323924 -0.873289) (xy 5.953759 -0.932665) (xy 5.591843 -0.928373) (xy 5.24435 -0.860567)
(xy 4.917456 -0.729401) (xy 4.617335 -0.535027) (xy 4.575709 -0.501019) (xy 4.411277 -0.362758)
(xy 4.169047 -0.606858) (xy 3.926818 -0.850957) (xy 4.136719 -1.016294) (xy 4.361179 -1.172619)
(xy 4.622921 -1.32224) (xy 4.896088 -1.452127) (xy 5.154826 -1.549247) (xy 5.245862 -1.575331)
(xy 5.614322 -1.635761) (xy 6.006604 -1.638425) (xy 6.406377 -1.584776)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 6.001073 -0.56031) (xy 6.313258 -0.501647) (xy 6.608601 -0.394222) (xy 6.868763 -0.241954)
(xy 6.938878 -0.186703) (xy 7.062686 -0.081735) (xy 6.835 0.129062) (xy 6.730268 0.223673)
(xy 6.645605 0.295774) (xy 6.594265 0.334259) (xy 6.585981 0.337748) (xy 6.545276 0.322031)
(xy 6.459364 0.282923) (xy 6.35 0.230424) (xy 6.228966 0.176032) (xy 6.122764 0.144181)
(xy 6.003183 0.129151) (xy 5.842012 0.12522) (xy 5.831268 0.125212) (xy 5.672531 0.128018)
(xy 5.558899 0.140293) (xy 5.464021 0.16782) (xy 5.361548 0.216381) (xy 5.324407 0.236452)
(xy 5.121631 0.347693) (xy 4.90146 0.125548) (xy 4.68129 -0.096597) (xy 4.794347 -0.191728)
(xy 5.06138 -0.373882) (xy 5.359604 -0.503419) (xy 5.399521 -0.515675) (xy 5.690381 -0.566292)
(xy 6.001073 -0.56031)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 6.087685 0.840444) (xy 6.306594 0.923017) (xy 6.480938 1.056598) (xy 6.605603 1.236388)
(xy 6.675471 1.457587) (xy 6.689074 1.620228) (xy 6.659776 1.852792) (xy 6.570383 2.047357)
(xy 6.423493 2.201084) (xy 6.225779 2.311521) (xy 5.994569 2.376592) (xy 5.754176 2.392485)
(xy 5.528912 2.355388) (xy 5.50028 2.34586) (xy 5.281786 2.235676) (xy 5.119955 2.082596)
(xy 5.016674 1.889253) (xy 4.973829 1.658279) (xy 4.972676 1.609859) (xy 5.003573 1.36901)
(xy 5.093104 1.165777) (xy 5.23653 1.004567) (xy 5.42911 0.889784) (xy 5.666106 0.825834)
(xy 5.829329 0.813679) (xy 6.087685 0.840444)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 4.185634 1.229263) (xy 4.185385 1.587171) (xy 4.184465 1.880042) (xy 4.182618 2.114391)
(xy 4.179585 2.296728) (xy 4.175111 2.433566) (xy 4.168936 2.531418) (xy 4.160805 2.596796)
(xy 4.15046 2.636211) (xy 4.137643 2.656177) (xy 4.129046 2.661384) (xy 4.067739 2.671711)
(xy 3.95671 2.679376) (xy 3.817774 2.682986) (xy 3.788492 2.683099) (xy 3.504526 2.683099)
(xy 3.528053 1.726127) (xy 3.533231 1.474635) (xy 3.535925 1.249848) (xy 3.536185 1.060675)
(xy 3.534064 0.916025) (xy 3.529614 0.824808) (xy 3.522885 0.795933) (xy 3.522652 0.79612)
(xy 3.501069 0.834736) (xy 3.454694 0.930162) (xy 3.387542 1.073715) (xy 3.303625 1.256711)
(xy 3.206959 1.470467) (xy 3.101557 1.706299) (xy 3.092689 1.726261) (xy 2.691655 2.629437)
(xy 2.428011 2.638939) (xy 2.164366 2.648442) (xy 1.755858 1.716118) (xy 1.649569 1.475215)
(xy 1.5515 1.256132) (xy 1.465554 1.067336) (xy 1.395635 0.917294) (xy 1.345643 0.81447)
(xy 1.319482 0.76733) (xy 1.317618 0.76542) (xy 1.309745 0.794637) (xy 1.302655 0.886353)
(xy 1.296635 1.03152) (xy 1.291976 1.221087) (xy 1.288963 1.446008) (xy 1.287887 1.697233)
(xy 1.287887 2.650218) (xy 0.992747 2.639827) (xy 0.697606 2.629437) (xy 0.688821 2.128592)
(xy 0.687424 1.943906) (xy 0.688406 1.70594) (xy 0.691535 1.432916) (xy 0.696577 1.143056)
(xy 0.703297 0.854581) (xy 0.706709 0.733381) (xy 0.73338 -0.160986) (xy 1.688621 -0.160986)
(xy 2.065297 0.780606) (xy 2.18108 1.066027) (xy 2.280386 1.302574) (xy 2.361457 1.486361)
(xy 2.422539 1.613502) (xy 2.461875 1.680111) (xy 2.47553 1.688639) (xy 2.498961 1.648594)
(xy 2.548358 1.55229) (xy 2.619513 1.408347) (xy 2.708216 1.225381) (xy 2.810259 1.012009)
(xy 2.921433 0.776848) (xy 2.935434 0.747048) (xy 3.36178 -0.160986) (xy 4.185634 -0.181144)
(xy 4.185634 1.229263)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -0.583805 0.582491) (xy -0.323776 0.630475) (xy -0.117037 0.72488) (xy 0.038229 0.867244)
(xy 0.143841 1.059106) (xy 0.201615 1.302004) (xy 0.214648 1.521765) (xy 0.214648 1.788733)
(xy -0.36669 1.793733) (xy -0.574624 1.794957) (xy -0.76738 1.795057) (xy -0.929134 1.794101)
(xy -1.044064 1.792158) (xy -1.082183 1.790657) (xy -1.170007 1.790002) (xy -1.207716 1.812301)
(xy -1.216273 1.872298) (xy -1.216338 1.88502) (xy -1.18231 2.025558) (xy -1.086153 2.14437)
(xy -1.001295 2.200345) (xy -0.873993 2.238385) (xy -0.701158 2.252157) (xy -0.504391 2.242141)
(xy -0.30529 2.208817) (xy -0.208891 2.182715) (xy -0.092834 2.14666) (xy -0.008015 2.120922)
(xy 0.026831 2.111166) (xy 0.031738 2.143259) (xy 0.034987 2.226498) (xy 0.035775 2.30664)
(xy 0.024859 2.439916) (xy -0.016764 2.530459) (xy -0.102407 2.593937) (xy -0.245386 2.646019)
(xy -0.254977 2.648806) (xy -0.371651 2.671343) (xy -0.533101 2.688372) (xy -0.716868 2.699086)
(xy -0.900495 2.702675) (xy -1.061524 2.69833) (xy -1.177497 2.685243) (xy -1.189653 2.682467)
(xy -1.372024 2.620124) (xy -1.540591 2.53372) (xy -1.675134 2.435209) (xy -1.746087 2.353459)
(xy -1.846717 2.133665) (xy -1.908912 1.875946) (xy -1.926854 1.606059) (xy -1.925101 1.561121)
(xy -1.89471 1.340106) (xy -1.208892 1.340106) (xy -1.183548 1.371472) (xy -1.111776 1.387921)
(xy -0.984826 1.394237) (xy -0.822817 1.395212) (xy -0.650379 1.39431) (xy -0.537162 1.39017)
(xy -0.470846 1.380637) (xy -0.439111 1.363557) (xy -0.429638 1.336776) (xy -0.429296 1.326407)
(xy -0.459313 1.232768) (xy -0.535369 1.135527) (xy -0.636473 1.056105) (xy -0.732059 1.017465)
(xy -0.882611 1.022578) (xy -1.027337 1.084111) (xy -1.139998 1.189912) (xy -1.155304 1.213493)
(xy -1.19656 1.289041) (xy -1.208892 1.340106) (xy -1.89471 1.340106) (xy -1.891699 1.318214)
(xy -1.815761 1.11797) (xy -1.688648 0.940044) (xy -1.639361 0.888094) (xy -1.472259 0.74574)
(xy -1.296301 0.652227) (xy -1.090396 0.598761) (xy -0.898942 0.57939) (xy -0.583805 0.582491)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy 8.28107 0.616561) (xy 8.332717 0.619334) (xy 8.539185 0.631162) (xy 8.68485 0.644143)
(xy 8.780312 0.663999) (xy 8.836171 0.69645) (xy 8.863027 0.747218) (xy 8.87148 0.822025)
(xy 8.872113 0.910464) (xy 8.868758 1.030474) (xy 8.860029 1.119732) (xy 8.84969 1.155287)
(xy 8.805599 1.156709) (xy 8.733385 1.129162) (xy 8.596166 1.078479) (xy 8.443189 1.053659)
(xy 8.290041 1.052959) (xy 8.152314 1.074635) (xy 8.045595 1.116944) (xy 7.985475 1.178141)
(xy 7.977747 1.213688) (xy 7.990294 1.266262) (xy 8.034248 1.315981) (xy 8.119074 1.368847)
(xy 8.254237 1.430864) (xy 8.430894 1.50105) (xy 8.656721 1.597964) (xy 8.819703 1.695816)
(xy 8.928102 1.803517) (xy 8.990175 1.929981) (xy 9.014184 2.084119) (xy 9.015211 2.131523)
(xy 9.009287 2.233498) (xy 8.98286 2.310263) (xy 8.92295 2.389069) (xy 8.862892 2.451311)
(xy 8.68667 2.589204) (xy 8.51409 2.662835) (xy 8.319001 2.706789) (xy 8.098459 2.733057)
(xy 7.877871 2.740442) (xy 7.682642 2.727744) (xy 7.577278 2.707011) (xy 7.436975 2.660379)
(xy 7.35321 2.606899) (xy 7.311813 2.528797) (xy 7.298612 2.408296) (xy 7.298028 2.356747)
(xy 7.300465 2.246183) (xy 7.315928 2.17917) (xy 7.356646 2.150903) (xy 7.434849 2.156579)
(xy 7.562765 2.191395) (xy 7.650018 2.21849) (xy 7.843278 2.266489) (xy 8.020367 2.287217)
(xy 8.165967 2.280311) (xy 8.264761 2.245409) (xy 8.279276 2.23336) (xy 8.331893 2.160347)
(xy 8.332035 2.093553) (xy 8.275528 2.028954) (xy 8.158199 1.962527) (xy 7.975877 1.890248)
(xy 7.894581 1.862371) (xy 7.663654 1.772336) (xy 7.49643 1.673233) (xy 7.385066 1.556317)
(xy 7.321717 1.412845) (xy 7.298539 1.234072) (xy 7.298028 1.197367) (xy 7.328989 1.038314)
(xy 7.423621 0.898349) (xy 7.584548 0.774458) (xy 7.732528 0.69815) (xy 7.836545 0.65361)
(xy 7.922414 0.625938) (xy 8.011129 0.612377) (xy 8.123683 0.61017) (xy 8.28107 0.616561)) (layer F.SilkS) (width 0.01))
(fp_poly (pts (xy -7.676529 -2.837639) (xy -7.570931 -2.776068) (xy -7.477385 -2.694398) (xy -7.417042 -2.609769)
(xy -7.405573 -2.564226) (xy -7.420521 -2.507138) (xy -7.461778 -2.398153) (xy -7.524196 -2.249635)
(xy -7.602625 -2.07395) (xy -7.669475 -1.930493) (xy -7.822348 -1.601389) (xy -7.943725 -1.320512)
(xy -8.037138 -1.073701) (xy -8.106118 -0.846792) (xy -8.154195 -0.625626) (xy -8.184901 -0.396039)
(xy -8.201766 -0.143869) (xy -8.208322 0.145045) (xy -8.208786 0.232536) (xy -8.207325 0.48103)
(xy -8.200618 0.674108) (xy -8.187394 0.827792) (xy -8.166377 0.958104) (xy -8.143348 1.055352)
(xy -8.042412 1.363382) (xy -7.919107 1.606449) (xy -7.768463 1.788995) (xy -7.585509 1.915458)
(xy -7.365277 1.990278) (xy -7.102797 2.017895) (xy -7.065493 2.01825) (xy -6.807833 1.998248)
(xy -6.586201 1.9327) (xy -6.375526 1.813294) (xy -6.315951 1.769736) (xy -6.21238 1.673205)
(xy -6.113205 1.551513) (xy -6.032147 1.424956) (xy -5.982923 1.313827) (xy -5.974366 1.264431)
(xy -5.951226 1.186103) (xy -5.893611 1.093067) (xy -5.872827 1.068051) (xy -5.797129 0.995755)
(xy -5.720499 0.963391) (xy -5.608749 0.956874) (xy -5.603108 0.956951) (xy -5.490744 0.967478)
(xy -5.403561 0.991065) (xy -5.381852 1.003543) (xy -5.342253 1.053882) (xy -5.281471 1.151042)
(xy -5.210052 1.277715) (xy -5.178322 1.33767) (xy -5.020737 1.606995) (xy -4.859063 1.809992)
(xy -4.686564 1.951831) (xy -4.496504 2.037685) (xy -4.282147 2.072725) (xy -4.219057 2.074144)
(xy -3.957044 2.040557) (xy -3.722695 1.945172) (xy -3.524876 1.793264) (xy -3.372451 1.590107)
(xy -3.35702 1.561348) (xy -3.280746 1.363566) (xy -3.224867 1.11313) (xy -3.192402 0.826798)
(xy -3.18522 0.608169) (xy -3.211994 0.113435) (xy -3.290181 -0.363926) (xy -3.416731 -0.814986)
(xy -3.588593 -1.23082) (xy -3.802716 -1.6025) (xy -4.045933 -1.910277) (xy -4.180902 -2.059344)
(xy -4.272263 -2.171792) (xy -4.327991 -2.260588) (xy -4.35606 -2.338697) (xy -4.364444 -2.419086)
(xy -4.364507 -2.428295) (xy -4.333662 -2.538899) (xy -4.244642 -2.612664) (xy -4.102721 -2.64582)
(xy -4.058089 -2.647324) (xy -3.885042 -2.619726) (xy -3.712286 -2.534955) (xy -3.536464 -2.390047)
(xy -3.354216 -2.182038) (xy -3.162186 -1.907962) (xy -3.09016 -1.79279) (xy -2.863149 -1.359833)
(xy -2.678842 -0.8817) (xy -2.541266 -0.373408) (xy -2.45445 0.150022) (xy -2.42242 0.673574)
(xy -2.42233 0.697606) (xy -2.443037 1.099003) (xy -2.508132 1.450401) (xy -2.620674 1.760209)
(xy -2.783723 2.036833) (xy -3.000338 2.288683) (xy -3.001898 2.290228) (xy -3.197586 2.463107)
(xy -3.400723 2.595607) (xy -3.632351 2.699079) (xy -3.913517 2.78487) (xy -3.924272 2.78763)
(xy -4.12261 2.833204) (xy -4.279371 2.853857) (xy -4.41996 2.849821) (xy -4.569786 2.821324)
(xy -4.668591 2.794359) (xy -4.880312 2.722046) (xy -5.07197 2.630299) (xy -5.268557 2.505873)
(xy -5.411695 2.400526) (xy -5.643183 2.2231) (xy -5.835605 2.3688) (xy -6.150961 2.57015)
(xy -6.481544 2.712297) (xy -6.819224 2.795282) (xy -7.155868 2.819144) (xy -7.483345 2.783923)
(xy -7.793524 2.689658) (xy -8.078271 2.536391) (xy -8.297301 2.356745) (xy -8.498729 2.13641)
(xy -8.654417 1.911201) (xy -8.772378 1.664559) (xy -8.860628 1.379927) (xy -8.92373 1.062449)
(xy -8.971964 0.58148) (xy -8.969892 0.071552) (xy -8.919322 -0.447268) (xy -8.822061 -0.954914)
(xy -8.705855 -1.357268) (xy -8.638825 -1.544822) (xy -8.559391 -1.751667) (xy -8.472953 -1.965312)
(xy -8.38491 -2.173267) (xy -8.300661 -2.363043) (xy -8.225607 -2.522148) (xy -8.165147 -2.638094)
(xy -8.127238 -2.695705) (xy -8.003252 -2.792973) (xy -7.855253 -2.851881) (xy -7.773026 -2.861971)
(xy -7.676529 -2.837639)) (layer F.SilkS) (width 0.01))
)

View File

@ -0,0 +1,61 @@
(module HASwitchPlate:wemos-d1-mini-with-pin-header-and-connector (layer F.Cu) (tedit 5AC65BB6)
(fp_text reference U2 (at -19.3 0 90) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value WeMos_mini (at 0 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_arc (start -12.48 -12.33) (end -11.48 -12.33) (angle 90) (layer F.CrtYd) (width 0.05))
(fp_line (start -18.46 -11.33) (end -12.48 -11.33) (layer F.CrtYd) (width 0.05))
(fp_line (start -11.48 -13.5) (end -11.48 -12.33) (layer F.CrtYd) (width 0.05))
(fp_line (start -11.3 -12.17) (end -11.3 -13.33) (layer Eco1.User) (width 0.15))
(fp_arc (start -12.3 -12.18) (end -11.3 -12.18) (angle 90) (layer Eco1.User) (width 0.15))
(fp_line (start -18.3 -11.18) (end -12.3 -11.18) (layer Eco1.User) (width 0.15))
(fp_arc (start 14.94 -11.5) (end 14.85 -13.5) (angle 92.57657183) (layer F.CrtYd) (width 0.05))
(fp_arc (start 14.94 11.5) (end 16.94 11.5) (angle 90) (layer F.CrtYd) (width 0.05))
(fp_arc (start 14.78 11.33) (end 16.78 11.33) (angle 90) (layer Eco1.User) (width 0.15))
(fp_arc (start 14.78 -11.33) (end 14.78 -13.33) (angle 90) (layer Eco1.User) (width 0.15))
(fp_line (start -18.46 13.5) (end -18.46 -11.33) (layer F.CrtYd) (width 0.05))
(fp_line (start 14.94 13.5) (end -18.46 13.5) (layer F.CrtYd) (width 0.05))
(fp_line (start 16.94 -11.5) (end 16.94 11.5) (layer F.CrtYd) (width 0.05))
(fp_line (start -11.48 -13.5) (end 14.85 -13.5) (layer F.CrtYd) (width 0.05))
(fp_line (start -18.3 4.9) (end -18.3 13.329999) (layer Eco1.User) (width 0.15))
(fp_line (start -17.3 4.9) (end -18.3 4.9) (layer Eco1.User) (width 0.15))
(fp_line (start -17.3 -3.32) (end -17.3 4.9) (layer Eco1.User) (width 0.15))
(fp_line (start -18.3 -3.32) (end -17.3 -3.32) (layer Eco1.User) (width 0.15))
(fp_line (start -18.3 -11.18) (end -18.3 -3.32) (layer Eco1.User) (width 0.15))
(fp_line (start 14.78 -13.33) (end -11.3 -13.33) (layer Eco1.User) (width 0.15))
(fp_line (start 16.78 11.33) (end 16.78 -11.33) (layer Eco1.User) (width 0.15))
(fp_line (start -18.3 13.33) (end 14.78 13.33) (layer Eco1.User) (width 0.15))
(pad 8 thru_hole circle (at 8.89 11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(pad 9 thru_hole circle (at 8.89 -11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(pad 7 thru_hole circle (at 6.35 11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(pad 10 thru_hole circle (at 6.35 -11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(pad 6 thru_hole circle (at 3.81 11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(pad 11 thru_hole circle (at 3.81 -11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(pad 5 thru_hole circle (at 1.27 11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(pad 12 thru_hole circle (at 1.27 -11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(pad 4 thru_hole circle (at -1.27 11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(pad 13 thru_hole circle (at -1.27 -11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(pad 3 thru_hole circle (at -3.81 11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(pad 14 thru_hole circle (at -3.81 -11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(pad 2 thru_hole circle (at -6.35 11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(pad 15 thru_hole circle (at -6.35 -11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(pad 1 thru_hole circle (at -8.89 11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(pad 16 thru_hole circle (at -8.89 -11.43) (size 1.8 1.8) (drill 1.016) (layers *.Cu *.Mask))
(model ${KIPRJMOD}/3dshapes/wemos_d1_mini.3dshapes/d1_mini_shield.wrl
(offset (xyz -17.9 -12.8 3.5))
(scale (xyz 0.3937 0.3937 0.3937))
(rotate (xyz 0 180 90))
)
(model ${KIPRJMOD}/3dshapes/wemos_d1_mini.3dshapes/TSW-108-05-G-S.wrl
(offset (xyz 0 -11.4 2.5))
(scale (xyz 0.3937 0.3937 0.3937))
(rotate (xyz 90 0 0))
)
(model ${KIPRJMOD}/3dshapes/wemos_d1_mini.3dshapes/TSW-108-05-G-S.wrl
(offset (xyz 0 11.4 2.5))
(scale (xyz 0.3937 0.3937 0.3937))
(rotate (xyz 90 0 0))
)
)

40
PCB/HASwitchPlate.pro Normal file
View File

@ -0,0 +1,40 @@
update=12/3/2018 11:52:06 AM
version=1
last_client=kicad
[pcbnew]
version=1
LastNetListRead=
UseCmpFile=1
PadDrill=0.600000000000
PadDrillOvalY=0.600000000000
PadSizeH=1.500000000000
PadSizeV=1.500000000000
PcbTextSizeV=1.500000000000
PcbTextSizeH=1.500000000000
PcbTextThickness=0.300000000000
ModuleTextSizeV=1.000000000000
ModuleTextSizeH=1.000000000000
ModuleTextSizeThickness=0.150000000000
SolderMaskClearance=0.000000000000
SolderMaskMinWidth=0.000000000000
DrawSegmentWidth=0.200000000000
BoardOutlineThickness=0.100000000000
ModuleOutlineThickness=0.150000000000
[cvpcb]
version=1
NetIExt=net
[general]
version=1
[schematic_editor]
version=1
PageLayoutDescrFile=
PlotDirectoryName=./
SubpartIdSeparator=0
SubpartFirstId=65
NetFmtName=Pcbnew
SpiceForceRefPrefix=0
SpiceUseNetNumbers=0
LabSize=60
[eeschema]
version=1
LibDir=

299
PCB/HASwitchPlate.sch Normal file
View File

@ -0,0 +1,299 @@
EESchema Schematic File Version 4
LIBS:HASwitchPlate-cache
EELAYER 26 0
EELAYER END
$Descr A4 11693 8268
encoding utf-8
Sheet 1 1
Title "HA SwitchPlate"
Date ""
Rev ""
Comp "https://github.com/aderusha/HASwitchPlate"
Comment1 "allen@derusha.org"
Comment2 ""
Comment3 ""
Comment4 ""
$EndDescr
$Comp
L HASwitchPlate-library:WeMos_mini-HASwitchPlate U2
U 1 1 59E27669
P 5850 3800
F 0 "U2" H 5850 4300 60 0000 C CNN
F 1 "WeMos_mini" H 5850 3300 60 0000 C CNN
F 2 "wemos-d1-mini:wemos-d1-mini-with-pin-header-and-connector" H 6400 3100 60 0001 C CNN
F 3 "" H 6400 3100 60 0000 C CNN
1 5850 3800
1 0 0 -1
$EndComp
$Comp
L HASwitchPlate-library:Screw_Terminal_01x02-HASwitchPlate-library J1
U 1 1 59E27A1F
P 3600 3450
F 0 "J1" H 3600 3550 50 0000 C CNN
F 1 "Screw Term." H 3600 3250 50 0001 C CNN
F 2 "Connectors_Terminal_Blocks:TerminalBlock_bornier-2_P5.08mm" H 3600 3450 50 0001 C CNN
F 3 "" H 3600 3450 50 0001 C CNN
1 3600 3450
-1 0 0 -1
$EndComp
$Comp
L HASwitchPlate-library:XH2.54-4P-HASwitchPlate-library J2
U 1 1 59E297BA
P 7150 3650
F 0 "J2" H 7150 3250 50 0000 C CNN
F 1 "XH2.54-4P" H 7150 3350 50 0000 C CNN
F 2 "HASwitchPlate:JST_XH2.54_04x2.54mm_Straight" H 7150 3650 50 0001 C CNN
F 3 "" H 7150 3650 50 0001 C CNN
1 7150 3650
-1 0 0 1
$EndComp
$Comp
L HASwitchPlate-library:IRM-03-5-HASwitchPlate-library U1
U 1 1 59E37A8B
P 4150 3550
F 0 "U1" H 4550 3800 50 0000 C CNN
F 1 "IRM-03-5" H 4550 3400 50 0000 C CNN
F 2 "HASwitchPlate:ACDC-Converter_MeanWell-IRM-03-x" H 4550 3300 50 0001 C CNN
F 3 "https://www.meanwell.com/Upload/PDF/IRM-03/IRM-03-SPEC.PDF" H 4550 3200 50 0001 C CNN
1 4150 3550
1 0 0 -1
$EndComp
$Comp
L HASwitchPlate-library:Conn_01x08-conn-HASwitchPlate J3
U 1 1 5AB13587
P 5750 2350
F 0 "J3" H 5750 2775 50 0000 C CNN
F 1 "Breakout" V 5750 1700 50 0000 C CNN
F 2 "Pin_Headers:Pin_Header_Straight_1x08_Pitch2.54mm" H 5750 2350 50 0001 C CNN
F 3 "" H 5750 2350 50 0001 C CNN
1 5750 2350
0 -1 -1 0
$EndComp
Text Notes 5475 2275 1 60 ~ 0
GND
Text Notes 5575 2300 1 60 ~ 0
+5V
Text Notes 5675 2300 1 60 ~ 0
+3.3V
Text Notes 5775 2275 1 60 ~ 0
A0
Text Notes 5875 2275 1 60 ~ 0
D0
Text Notes 5975 2275 1 60 ~ 0
D1
Text Notes 6075 2275 1 60 ~ 0
D2
Text Notes 6175 2275 1 60 ~ 0
DBG
Text Label 6650 4500 0 60 ~ 0
GND
Text Label 6950 3650 2 60 ~ 0
LCD_RX
Text Label 6925 3550 2 60 ~ 0
LCD_TX
Text Label 6850 3450 2 60 ~ 0
+5V
Wire Wire Line
6425 3550 6950 3550
Wire Wire Line
6425 3650 6425 3550
Wire Wire Line
6350 3650 6425 3650
Wire Wire Line
4950 3550 5050 3550
Wire Wire Line
4950 3450 5000 3450
Wire Wire Line
5350 3650 5300 3650
Wire Wire Line
5300 3650 5300 4400
Wire Wire Line
5300 4400 6525 4400
Wire Wire Line
6525 4400 6525 3650
Wire Wire Line
6525 3650 6950 3650
Wire Wire Line
5200 3200 5550 3200
Wire Wire Line
6525 3200 6525 3450
Wire Wire Line
6525 3450 6950 3450
Wire Wire Line
5200 3550 5200 4500
Connection ~ 5200 3550
Wire Wire Line
3800 3550 4075 3550
Wire Wire Line
3800 3450 4125 3450
Wire Wire Line
5200 3200 5200 3450
Connection ~ 5200 3450
Wire Wire Line
5275 3550 5275 3075
Wire Wire Line
5275 3075 5450 3075
Connection ~ 5275 3550
Wire Wire Line
5550 2550 5550 3200
Connection ~ 5550 3200
Wire Wire Line
5650 2550 5650 3250
Wire Wire Line
5650 3250 6350 3250
Wire Wire Line
6350 3250 6350 3450
Wire Wire Line
6350 4050 6400 4050
Wire Wire Line
6400 4050 6400 3175
Wire Wire Line
6400 3175 5750 3175
Wire Wire Line
5750 3175 5750 2550
Wire Wire Line
6350 3950 6450 3950
Wire Wire Line
6450 3950 6450 3150
Wire Wire Line
6450 3150 5850 3150
Wire Wire Line
5850 3150 5850 2550
Wire Wire Line
5350 3950 5325 3950
Wire Wire Line
5325 3950 5325 3125
Wire Wire Line
5325 3125 5950 3125
Wire Wire Line
5950 3125 5950 2550
Wire Wire Line
5350 3850 5275 3850
Wire Wire Line
5275 3850 5275 3600
Wire Wire Line
5275 3600 5300 3600
Wire Wire Line
5300 3600 5300 3100
Wire Wire Line
5300 3100 6050 3100
Wire Wire Line
6050 3100 6050 2550
Wire Wire Line
6350 3550 6375 3550
Wire Wire Line
6375 3550 6375 3075
Wire Wire Line
6375 3075 6150 3075
Wire Wire Line
5450 3075 5450 2550
Wire Wire Line
6150 3075 6150 2550
Text Label 6150 2950 1 60 ~ 0
D8_DBG
Text Label 6050 2950 1 60 ~ 0
D2
Text Label 5950 2950 1 60 ~ 0
D1
Text Label 5850 2950 1 60 ~ 0
D0
Text Label 5750 2950 1 60 ~ 0
A0
Text Label 5650 2975 1 60 ~ 0
+3.3V
Text Label 4050 3550 2 60 ~ 0
AC_N
Text Label 3825 3450 0 60 ~ 0
AC_L
Wire Wire Line
5200 3550 5275 3550
Wire Wire Line
5200 3450 5350 3450
Wire Wire Line
5275 3550 5350 3550
Wire Wire Line
5550 3200 6525 3200
$Comp
L HASwitchPlate-library:SLC03-series U3
U 1 1 5C2FF5D5
P 4150 4150
F 0 "U3" H 4550 4400 50 0000 C CNN
F 1 "SLC03-series" H 4550 4000 50 0000 C CNN
F 2 "HASwitchPlate:ACDC-Converter_MeanWell-SLC03-series" H 4550 3900 50 0001 C CNN
F 3 "http://www.meanwellusa.com/productPdf.aspx?i=786" H 4550 3800 50 0001 C CNN
1 4150 4150
1 0 0 -1
$EndComp
Wire Wire Line
4125 3450 4125 4050
Wire Wire Line
4125 4050 4150 4050
Connection ~ 4125 3450
Wire Wire Line
4125 3450 4150 3450
Wire Wire Line
4075 3550 4075 4150
Wire Wire Line
4075 4150 4150 4150
Connection ~ 4075 3550
Wire Wire Line
4075 3550 4150 3550
Wire Wire Line
4950 4050 5000 4050
Wire Wire Line
5000 4050 5000 3450
Connection ~ 5000 3450
Wire Wire Line
5000 3450 5200 3450
Wire Wire Line
4950 4150 5050 4150
Wire Wire Line
5050 4150 5050 3550
Connection ~ 5050 3550
Wire Wire Line
5050 3550 5200 3550
$Comp
L Transistor_BJT:S8050 Q1
U 1 1 5C306D5D
P 7050 4150
F 0 "Q1" H 7241 4196 50 0000 L CNN
F 1 "S8050" H 7241 4105 50 0000 L CNN
F 2 "Package_TO_SOT_THT:TO-92L_HandSolder" H 7250 4075 50 0001 L CIN
F 3 "http://www.unisonic.com.tw/datasheet/S8050.pdf" H 7050 4150 50 0001 L CNN
1 7050 4150
1 0 0 -1
$EndComp
$Comp
L Device:R_US R1
U 1 1 5C306DF8
P 6600 3900
F 0 "R1" H 6668 3946 50 0000 L CNN
F 1 "1k" H 6668 3855 50 0000 L CNN
F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" V 6640 3890 50 0001 C CNN
F 3 "~" H 6600 3900 50 0001 C CNN
1 6600 3900
1 0 0 -1
$EndComp
Wire Wire Line
6350 3750 6600 3750
Wire Wire Line
6600 4050 6600 4150
Wire Wire Line
6600 4150 6850 4150
Wire Wire Line
7150 3950 6850 3950
Wire Wire Line
6850 3950 6850 3750
Wire Wire Line
6850 3750 6950 3750
Text Label 6850 3900 0 60 ~ 0
LCD_GND
Text Label 6600 4150 0 60 ~ 0
LCD_CTL
Wire Wire Line
5200 4500 7150 4500
Wire Wire Line
7150 4500 7150 4350
Text Notes 4225 3175 0 60 ~ 0
Choose one PSU\noption below
$EndSCHEMATC

9
PCB/README.md Normal file
View File

@ -0,0 +1,9 @@
# PCB source files and Gerber outputs
Above you'll find [KiCad](http://kicad-pcb.org/) [schematic](https://github.com/aderusha/HASwitchPlate/blob/master/PCB/HASwitchPlate.sch) and [PCB](https://github.com/aderusha/HASwitchPlate/blob/master/PCB/HASwitchPlate.kicad_pcb) files along with [a ZIP bundle containing complete gerber outputs](https://github.com/aderusha/HASwitchPlate/raw/master/PCB/HASwitchPlate.gerbers.zip) ready to send to [your favorite PCB shop](https://www.allpcb.com/?Mb_InviteId=34099).
I had these manufactured by [AllPCB](https://www.allpcb.com/?Mb_InviteId=34099) and I'm very happy with the results. The quality has been perfect and their shipping time to the US has been under a week across several orders. [If you sign up through this link](https://www.allpcb.com/?Mb_InviteId=34099) they credit me some cash that I can use for future projects which helps me out a bit.
If you aren't looking to buy a zillion boards, I may have some ready for US orders in [my Tindie store](https://www.tindie.com/products/luma/ha-switchplate-hasp-pcb/).
![HA SwitchPlate PCB](https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/Images/HASP_PCB_Front_and_Back.png?raw=true)

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Some files were not shown because too many files have changed in this diff Show More