Author SHA1 Message Date
Neil Hanlon 81e5a18460 migrate deploy to github pages with cnames
h/t claude
2025-08-08 13:41:38 -04:00
Neil Hanlon 6adf40df07 pages 2025-08-08 13:30:54 -04:00
Neil Hanlon cf31d448f8 fix 2025-08-08 13:03:34 -04:00
Neil Hanlon 1bf1a67b89 update projects 2025-08-08 13:02:32 -04:00
Neil Hanlon e8760b0916 add resolvex post 2025-08-08 13:02:24 -04:00
Neil Hanlon 5ee35669b6 various updates 2025-08-08 10:15:47 -04:00
neil a892b2c88d add kofi logo
ci/woodpecker/push/woodpecker Pipeline was successful
2023-04-11 12:59:51 -04:00
neil fcefefee86 Update 'content/posts/smarthome-soldering-iron-pinecil-homeassistant-esphome/index.md'
ci/woodpecker/push/woodpecker Pipeline was successful
2023-04-03 15:54:07 +00:00
neil a489c49f41 fix: multi-lang clarification
ci/woodpecker/push/woodpecker Pipeline was successful
2023-04-03 10:08:07 -04:00
neil 6f4be41780 fix: clear floats on h2/h3 elements
ci/woodpecker/push/woodpecker Pipeline failed
2023-04-03 10:00:36 -04:00
neil 7aeeb735bf Update 'content/posts/smarthome-soldering-iron-pinecil-homeassistant-esphome/index.md'
ci/woodpecker/push/woodpecker Pipeline was successful
2023-04-03 13:47:01 +00:00
neil 4d0fd100a8 Update 'content/posts/smarthome-soldering-iron-pinecil-homeassistant-esphome/index.md'
ci/woodpecker/push/woodpecker Pipeline was successful
2023-04-03 13:46:11 +00:00
neil 364f4bc8a0 Update 'content/posts/smarthome-soldering-iron-pinecil-homeassistant-esphome/index.md'
ci/woodpecker/push/woodpecker Pipeline was successful
2023-04-03 04:30:13 +00:00
neil 882ad7eee0 clarify that pineflash is not new, just updated for v2 recently
ci/woodpecker/push/woodpecker Pipeline was successful
2023-04-03 04:26:02 +00:00
neil 6319fa8cc0 update pinecil post w/ suggestions from River for clarity
ci/woodpecker/push/woodpecker Pipeline was successful
2023-04-03 04:24:07 +00:00
neil 2849945311 Update hugo-sustain
ci/woodpecker/push/woodpecker Pipeline was successful
2023-04-02 22:35:39 -04:00
neil a2ad4fe77c update modules
ci/woodpecker/push/woodpecker Pipeline was successful
2023-04-02 22:30:40 -04:00
neil 756389b61b Update 'config.toml'
ci/woodpecker/push/woodpecker Pipeline was successful
2023-04-03 02:28:01 +00:00
neil 184c7380bc fix: markdown syntax for link
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/manual/woodpecker Pipeline was successful
ci/woodpecker/deployment/woodpecker Pipeline was successful
Signed-off-by: neil <neil@noreply.shrug.pw>
2023-04-03 02:02:24 +00:00
neil c7e7767e43 Update 'deploy.sh'
ci/woodpecker/push/woodpecker Pipeline was successful
2023-04-03 01:46:33 +00:00
neil f2af90479a neil-patch-1 (#5)
ci/woodpecker/push/woodpecker Pipeline was successful
Reviewed-on: #5
2023-04-03 01:38:59 +00:00
neil 75c4b6de3f Update 'deploy.sh'
ci/woodpecker/push/woodpecker Pipeline was successful
2023-04-03 01:34:29 +00:00
neil 71da3d83cd Update 'deploy.sh'
ci/woodpecker/push/woodpecker Pipeline failed
2023-04-03 01:33:22 +00:00
neil de7fd2af11 Update '.woodpecker.yml'
ci/woodpecker/push/woodpecker Pipeline was successful
2023-04-03 01:28:41 +00:00
neil ef7ba795ca homeassistant/ble article (#3)
ci/woodpecker/push/woodpecker Pipeline failed
Co-authored-by: Neil Hanlon <neil@shrug.pw>
Reviewed-on: #3
2023-04-03 01:20:25 +00:00
15 changed files with 392 additions and 143 deletions
+140
View File
@@ -0,0 +1,140 @@
# Sample workflow for building and deploying a Hugo site to GitHub Pages
name: Deploy Hugo site to Pages
on:
# Runs on pushes targeting the default branch
push:
branches:
- main
# Runs on pull requests
pull_request:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false
# Default to bash
defaults:
run:
# GitHub-hosted runners automatically enable `set -eo pipefail` for Bash shells.
shell: bash
jobs:
# Build job
build:
runs-on: ubuntu-latest
env:
HUGO_VERSION: 0.148.0
HUGO_ENVIRONMENT: production
TZ: America/New_York
steps:
- name: Install Hugo CLI
run: |
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb
sudo dpkg -i ${{ runner.temp }}/hugo.deb
- name: Install Dart Sass
run: sudo snap install dart-sass
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: Setup Pages
id: pages
uses: actions/configure-pages@v5
- name: Cache Restore
id: cache-restore
uses: actions/cache/restore@v4
with:
path: |
${{ runner.temp }}/hugo_cache
key: hugo-${{ github.run_id }}
restore-keys:
hugo-
- name: Configure Git
run: git config core.quotepath false
- name: Build with Hugo
run: |
hugo \
--gc \
--minify \
--baseURL "${{ steps.pages.outputs.base_url }}/" \
--cacheDir "${{ runner.temp }}/hugo_cache"
- name: Create CNAME file
run: |
cat << EOF > public/CNAME
neilhanlon.me
neilhanlon.com
hanlon.ninja
thepotato.tech
EOF
- name: Cache Save
id: cache-save
uses: actions/cache/save@v4
with:
path: |
${{ runner.temp }}/hugo_cache
key: ${{ steps.cache-restore.outputs.cache-primary-key }}
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./public
# Deployment job
deploy:
if: github.ref == 'refs/heads/main'
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
# PR Preview job
preview:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
needs: build
steps:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: github-pages
path: ./preview
- name: Extract site
run: |
cd preview
tar -xf artifact.tar
- name: Install surge
run: npm install -g surge
- name: Deploy to surge.sh
run: |
export SURGE_DOMAIN="thepotato-tech-pr-${{ github.event.number }}.surge.sh"
surge ./preview --domain $SURGE_DOMAIN --token ${{ secrets.SURGE_TOKEN }}
echo "Preview URL: https://$SURGE_DOMAIN" >> $GITHUB_STEP_SUMMARY
- name: Comment PR
uses: actions/github-script@v7
with:
script: |
const domain = `thepotato-tech-pr-${{ github.event.number }}.surge.sh`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `🚀 Preview deployed to: https://${domain}`
});
+1
View File
@@ -1,3 +1,4 @@
public/ public/
resources/ resources/
pages.git/ pages.git/
.hugo_build.lock
-13
View File
@@ -1,13 +0,0 @@
image: registry.gitlab.com/pages/hugo/hugo_extended:latest
variables:
GIT_SUBMODULE_STRATEGY: recursive
pages:
script:
- hugo
artifacts:
paths:
- public
only:
- main
+1 -1
View File
@@ -1,3 +1,3 @@
[submodule "themes/hugo-sustain"] [submodule "themes/hugo-sustain"]
path = themes/hugo-sustain path = themes/hugo-sustain
url = https://git.shrug.pw/neil/hugo-sustain url = https://git.shrug.pw/neil/hugo-sustain.git
-57
View File
@@ -1,57 +0,0 @@
---
branches: main
variables:
surge_settings: &surge_settings
path: public
surge_token:
from_secret: SURGE_TOKEN
forge_type: gitea
forge_url: https://git.shrug.pw
forge_repo_token:
from_secret: SURGE_GITEA
clone:
git:
image: woodpeckerci/plugin-git
settings:
recursive: true
pipeline:
build:
image: registry.gitlab.com/pages/hugo/hugo_extended:latest
commands:
- hugo
preview:
image: woodpeckerci/plugin-surge-preview
secrets: [SURGE_TOKEN, SURGE_GITEA]
settings: *surge_settings
when:
event: pull_request
teardown-preview:
image: woodpeckerci/plugin-surge-preview
secrets: [SURGE_TOKEN, SURGE_GITEA]
settings: *surge_settings
environment:
- CI_BUILD_EVENT=pull_close
when:
event: push
publish:
image: git.shrug.pw/neil/containers/woodpecker-ci:latest
secrets: [ssh_key]
environment:
- GIT_AUTHOR_NAME="Woody the Woodpecker"
- GIT_AUTHOR_EMAIL=ci@shrug.pw
commands:
- mkdir -p ~/.ssh/
- echo "$SSH_KEY" > ~/.ssh/id_rsa
- chmod 0700 ~/.ssh/
- chmod 0600 ~/.ssh/id_rsa
- bash deploy.sh
when:
branch: main
event: [push]
+66 -1
View File
@@ -1,6 +1,8 @@
$primary-color: #ABC9E3; //$primary-color: #ABC9E3;
$primary-color: #115c9e;
$hover-color: #5E7191; $hover-color: #5E7191;
html, body { html, body {
border-top-color: $primary-color; border-top-color: $primary-color;
} }
@@ -56,6 +58,14 @@ figure > img {
width: 90%; width: 90%;
} }
h2, h3 {
clear: both;
}
h5 {
font-weight: bold
}
.clearfix { .clearfix {
overflow: auto; overflow: auto;
} }
@@ -64,3 +74,58 @@ figure > img {
clear: both; clear: both;
display: table; display: table;
} }
/* Projects page styling */
.project-card {
background: #fff;
border: 1px solid #e8e8e8;
border-radius: 8px;
padding: 1.5rem;
height: 100%;
transition: box-shadow 0.3s ease, transform 0.2s ease;
display: flex;
flex-direction: column;
}
.project-card:hover {
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
transform: translateY(-2px);
}
.project-header {
display: flex;
align-items: center;
margin-bottom: 1rem;
}
.project-icon {
font-size: 1.8rem;
color: $primary-color;
margin-right: 1rem;
min-width: 2rem;
text-align: center;
}
.project-title {
margin: 0;
flex: 1;
}
.project-title a {
color: $primary-color;
text-decoration: none;
font-weight: 600;
}
.project-title a:hover {
color: $hover-color;
text-decoration: none;
}
.project-description {
color: #666;
line-height: 1.6;
margin: 0;
flex: 1;
text-align: left;
}
@@ -0,0 +1,57 @@
---
title: 'Joining ResolveX as a Technical Advisor: Infrastructure and Crisis Response'
description: "I've joined ResolveX as a technical advisor to help scale their crisis response software. Working on infrastructure, security, and scaling decisions for 988 suicide prevention lines and mental health crisis centers."
date: 2025-08-08T10:17:20-04:00
draft: false
categories: ['consulting', 'social-impact']
tags: ['crisis-response', 'mental-health', 'infrastructure', 'advisory', 'resolvex', '988']
---
I'm excited to share that I've joined [ResolveX](https://resolvex.com) as a technical advisor. ResolveX
builds software and data solutions for crisis call centers—988 suicide
prevention lines, domestic violence hotlines, and other critical mental health
resources.
## Why This Matters
Mental health crisis response has significant gaps that technology can help address. ResolveX builds tools to make crisis counselors more effective and help researchers understand patterns that could prevent crises.
They serve 988 operators—resource-constrained nonprofits handling life-or-death situations. The technical requirements are unique: rock-solid reliability, security for sensitive mental health data, and cost-effectiveness for organizations that measure impact in lives saved.
## The Technical Challenge
ResolveX is hitting the classic startup infrastructure inflection point—scaling from scrappy solutions to supporting a primary mental health data warehouse without over-engineering.
My role: provide neutral perspective on infrastructure, security, and scaling decisions. Lightweight advisory rather than hands-on implementation, helping spot issues early and suggest practical solutions within their budget and mission.
## What I'm Doing
The immediate priorities are pretty straightforward:
- **Infrastructure & Security Audit**: Review current hosting, architecture, and configurations. Light security testing and access review.
- **Ongoing Advisory**: Lightweight consultation (~5 hours/week) for feedback and neutral oversight on scaling decisions.
- **Content Collaboration**: Educational content that benefits both crisis response and broader tech communities.
## The Bigger Picture
This isn't just consulting work—I've been getting into emergency response volunteering (CERT, amateur radio) and care deeply about how we handle mental health crises. ResolveX has potential to become an open-source-friendly, public-impact organization changing mental health data collection and analysis.
## Technical Philosophy
The constraints make this engaging: high reliability and security requirements, minimal budget, maximum impact. Every architectural decision must justify real value to crisis counselors and those they help.
This requires "appropriate technology"—sophisticated enough for requirements but simple enough to maintain and afford. Systems engineering with purpose, not hope-based engineering.
## Looking Forward
I'll write follow-ups about specific technical challenges as this develops. Infrastructure engineering for social impact deserves more attention.
If you're working on mission-driven technology or considering how your skills could have broader social impact, reach out. **There's more of this work that needs doing.**
---
If you're interested in similar advisory or consulting work, you can reach me
through [my consulting practice](https://shrugpw.com) or find me on the usual places around the
internet.
@@ -1,10 +1,10 @@
--- ---
title: 'Smarthome Soldering Iron with Home Assistant and ESPHome' title: 'Smarthome Soldering Iron with Home Assistant and ESPHome (also: web GUIs for Pinecil)'
description: 'Learn how to create a smart soldering iron using Pinecil with Home Assistant and ESPHome.' description: 'Learn how to create a smart soldering iron using Pinecil with Home Assistant and ESPHome, as well as explore the options for controlling and monitoring your Pinecil with Bluetooth'
date: 2023-03-28T19:01:25-04:00 date: 2023-03-28T19:01:25-04:00
draft: false draft: false
categories: [Home Automation, DIY] categories: [Home Automation, DIY, FOSS]
tags: [Pinecil, Home Assistant, DIY, RISC-V, Blisp] tags: [Pinecil, Home Assistant, DIY, RISC-V, Blisp, PineSAM, Pine64, esphome]
--- ---
About a year ago, [wesdottoday](https://hachyderm.io/@wesdottoday) told me to About a year ago, [wesdottoday](https://hachyderm.io/@wesdottoday) told me to
@@ -32,6 +32,16 @@ using an [ESP32](https://www.espressif.com/en/products/socs/esp32) and
visualize your soldering statistics, to automatically turn on an exhaust fan visualize your soldering statistics, to automatically turn on an exhaust fan
when you start working. when you start working.
### Acknowledgements
- [Ben Brown (Ralim)](https://github.com/ralim) - Maintainer and developer of IronOS for Pinecil and Miniware Irons
- Support them on [Ko-fi](https://ko-fi.com/ralim)
- [Gamiee (Gamelaster)](https://github.com/gamelaster) - Developer and maintainer of pine64_updater, IronOS
- [River-Mochi](https://github.com/river-mochi) for reviewing this article and their excellent organization and documentation work for Pine64 and the Pinecil.
- [TomW1605](https://github.com/TomW1605) & [ithinkido](https://github.com/ithinkido) for their work on the implementation of the Pinecil ESP32 integration
- [Builder555](https://github.com/builder555) - PineSAM maintainer and developer
- [Joric](https://github.com/joric) - Developer of original BLE GATT application for Pinecil
## The Pinecil ## The Pinecil
The [Pinecil](https://www.pine64.org/pinecil/) is an open-source soldering iron The [Pinecil](https://www.pine64.org/pinecil/) is an open-source soldering iron
@@ -57,6 +67,8 @@ a genuine Pinecil, and how to avoid fakes.
tricks, as well as up to date purchasing and troubleshooting information. tricks, as well as up to date purchasing and troubleshooting information.
- Shout out to River-Mochi for their _awesome_ work on keeping this up to date - Shout out to River-Mochi for their _awesome_ work on keeping this up to date
and useful and useful
- [Pine64 Updater](https://github.com/pine64/pine64_updater) - v1 Pinecil updater tool
- [Pinecil Development Projects](https://wiki.pine64.org/wiki/Pinecil#Development_Projects) - Updated links to all community projects
## Blisp ## Blisp
@@ -92,25 +104,40 @@ instructions in the repository.
1. Find the latest sucessful actions run on the ironos repo 1. Find the latest sucessful actions run on the ironos repo
[here](https://github.com/Ralim/IronOS/actions/workflows/push.yml?query=branch%3Adev+event%3Apush). [here](https://github.com/Ralim/IronOS/actions/workflows/push.yml?query=branch%3Adev+event%3Apush).
2. Download the `Pinecilv2_multi-lang` binary for that run, and unzip it 2. Download the `Pinecilv2` zip file for that run, and unzip it
3. Plug your Pinecil into your computer while holding down the 'Minus' (-) 3. Plug your Pinecil into your computer while holding down the 'Minus' (-)
button. The screen should **not** turn on. If on Linux, `dmesg` should report button. The screen should **not** turn on. If on Linux, `dmesg` should report
seeing the BL706 as a serial device. seeing the BL706 as a serial device.
4. Run the following command to flash the firmware to your Pinecil: 4. Run the following command to flash the firmware to your Pinecil:
``` ```
blisp write -c bl70x --reset /path/to/Pinecilv2_multi-lang/Pinecilv2_EN.bin blisp write -c bl70x --reset /path/to/Pinecilv2_extracted/Pinecilv2_EN.bin
``` ```
5. Un-plug and plug the Pinecil back in to boot the new firmware 5. Un-plug and plug the Pinecil back in to boot the new firmware
### Pineflash NOTE: You may ignore the .dfu and .hex files provided in the .zip file.
[Spagett1](https://github.com/Spagett1) is working on a new tool which allows ##### Pinecilv2 vs Pinecilv2_multi-lang
for a non-command-line experience for flashing new versions of IronOS on the
Pinecil, similar to the Pine64 updater utility for the v1 Pinecil. You can find Two variants of firmwares for Pinecil are provided: combined mutli-language binaries, and individual per-language binaries. The per-language binaries are much smaller, and while the Pinecilv2 has more flash available to store the mutli-language images, for general usage, you will have an easier time with the language-specific binary rather than the multi-lang binaries.
Multi-lang provides three bundles of languages:
1. Chinese and Japanese
2. Russian, Ukranian, Serbian, and Bulgarian
3. European (All not mentioned above)
Ultimately, it is up to you which you decide to use
#### Pineflash
[Spagett1](https://github.com/Spagett1) updated their Pineflash tool which allows
for a non-command-line experience for flashing new versions of IronOS on the Pinecil V1 and V2, similar to the Pine64 updater (add link) utility for the v1 Pinecil. You can find
more information on the PineFlash more information on the PineFlash
[GitHub repo](https://github.com/Spagett1/PineFlash). Feel free to check it out [GitHub repo](https://github.com/Spagett1/PineFlash). Feel free to check it out
and give them feedback! and give them feedback!
Pineflash supports Linux and MacOS at this time (2023-04-03), and support for Windows is a work in progress. If you would like to help test, please join the chat and make yourself known.
## Bluetooth Low Energy ## Bluetooth Low Energy
Bluetooth Low Energy (BLE) is a wireless communication protocol that is designed Bluetooth Low Energy (BLE) is a wireless communication protocol that is designed
@@ -118,7 +145,9 @@ to consume less energy than classic Bluetooth. There is upcoming support in
browser APIs to allow access to BLE devices, and so there are a handful of browser APIs to allow access to BLE devices, and so there are a handful of
options for how to get your Pinecil talking to your computer. options for how to get your Pinecil talking to your computer.
## PineSAM and Joric's UI ## Interacting with your Pinecil over Bluetooth
### PineSAM by [Builder555](https://github.com/builder555)
PineSAM (Pinecil Settings and Menus) started out as an in-browser way to see and PineSAM (Pinecil Settings and Menus) started out as an in-browser way to see and
change settings. It's served a multitude of uses from helping people with change settings. It's served a multitude of uses from helping people with
@@ -126,10 +155,33 @@ cracked or non-functional screens, all the way to adding really helpful
accessibility features to those who struggle to read the small screen on the accessibility features to those who struggle to read the small screen on the
Pinecil. It's is a Python and Vue-based application that has to have a server Pinecil. It's is a Python and Vue-based application that has to have a server
component running locally--along with a machine that has bluetooth. You can find component running locally--along with a machine that has bluetooth. You can find
the source code for PineSAM on [GitHub](https://github.com/builder555/PineSAM/). the source code for PineSAM on [GitHub](https://github.com/builder555/PineSAM/), but read on below for how to grab precompiled versions of the application.
{{< figure src="pinesam.png" alt="PineSAM UI" class="inline" >}} {{< figure src="pinesam.png" alt="PineSAM UI" class="inline" >}}
PineSAM allows the user to not only see the live temperature, wattage, and
voltage of their device but change the settings and temperatures at a click.
Uniquely, it allows users to set temperature presets for one-click changes
between temperatures--for example to switch between leaded and unleaded solder.
You can access PineSAM from your mobile device once it's running on your computer to have a touch-capable way of controlling your settings. On your phone, flip the screen to portait mode in order to see the graph as on desktop.
{{< figure src="pinesam-mobile.png" alt="Screenshot of PineSAM UI on Mobile device" class="inline-40 left" >}}
The PineSAM project is working to integrate a "Work" screen which takes
inspiration from Joric's UI. Due to this, it's likely these two projects will
end up combining into one, in my opinion, despite their distinct mechanisms for
retrieving BLE data from the Pinecil.
#### Setting up PineSAM
See the
[project readme](https://github.com/builder555/PineSAM#i-using-pre-made-binaries)
for the most up-to-date instructions. If you run into any trouble, come find us
in the #pinecil channel on Pine64's Discord or Telegram chat.
### [Joric](https://github.com/joric/)'s BLE API
Another project is a more simple web UI that uses in-browser Bluetooth support Another project is a more simple web UI that uses in-browser Bluetooth support
(currently only really well supported in Chromium/Firefox, and even then it's (currently only really well supported in Chromium/Firefox, and even then it's
not universal or without bugs. This UI shows a nice graph of your Pinecil's not universal or without bugs. This UI shows a nice graph of your Pinecil's
@@ -140,26 +192,7 @@ device. You can also find the source code for Joric UI on
{{< figure src="joric-ui.png" alt="Joric's UI" class="inline-60 right" >}} {{< figure src="joric-ui.png" alt="Joric's UI" class="inline-60 right" >}}
PineSAM allows the user to not only see the live temperature, wattage, and #### Setting up Joric's UI
voltage of their device but change the settings and temperatures at a click.
Uniquely, it allows users to set temperature presets for one-click changes
between temperatures--for example to switch between leaded and unleaded solder.
{{< figure src="pinesam-mobile.png" alt="Screenshot of PineSAM UI on Mobile device" class="inline-40 left" >}}
The PineSAM project is working to integrate a "Work" screen which takes
inspiration from Joric's UI. Due to this, it's likely these two projects will
end up combining into one, in my opinion, despite their distinct mechanisms for
retrieving BLE data from the Pinecil.
### Setting up PineSAM
See the
[project readme](https://github.com/builder555/PineSAM#i-using-pre-made-binaries)
for the most up-to-date instructions. If you run into any trouble, come find us
in the #pinecil channel on Pine64's Discord or Telegram chat.
### Setting up Joric's UI
No setup needed! Just browse to No setup needed! Just browse to
[https://joric.github.io/pinecil/](https://joric.github.io/pinecil/) in a [https://joric.github.io/pinecil/](https://joric.github.io/pinecil/) in a
@@ -185,13 +218,13 @@ soldering iron using Pinecil with Home Assistant and ESPHome.
{{< figure src="hass-soldering.png" alt="Home Assistant Soldering UI" class="inline" >}} {{< figure src="hass-soldering.png" alt="Home Assistant Soldering UI" class="inline" >}}
To make this work, we'll use an To make this work, we'll use an
[ESPHome configuration file]((https://github.com/TomW1605/esphome_pinecilv2_ble/blob/main/esphome_pinecilv2_ble.yaml)) [ESPHome configuration file](https://github.com/TomW1605/esphome_pinecilv2_ble/blob/main/esphome_pinecilv2_ble.yaml)
put together by Pine64 community member TomW1605. Thank you again, Tom! put together by Pine64 community member TomW1605. Thank you again, Tom!
## Requirements ## Requirements
- ESP32 device (Non affiliate link: - ESP32 device (Non affiliate link:
[ESP-WROOM-32 Development MCU on Amazon](https://www.amazon.com/ESP-WROOM-32-Development-Microcontroller-Integrated-Compatible/dp/B08D5ZD528) [ESP-WROOM-32 Development MCU on Amazon](https://www.amazon.com/ESP-WROOM-32-Development-Microcontroller-Integrated-Compatible/dp/B08D5ZD528))
- Home Assistant already setup - Home Assistant already setup
- ESPHome already setup - ESPHome already setup
@@ -206,11 +239,12 @@ put together by Pine64 community member TomW1605. Thank you again, Tom!
2. Setup an encryption key. This must be a base64-encoded, 32 bit string. 2. Setup an encryption key. This must be a base64-encoded, 32 bit string.
- You can create one on the CLI using `openssl rand -base64 32` - You can create one on the CLI using `openssl rand -base64 32`
3. Change OTA password to desired 3. Change OTA password to desired
4. Change wifi SSID and password for your network 4. Change wifi SSID and password for your network in ESPHome secrets
5. Change wifi access point fallback settings to desired 5. Change wifi access point fallback settings to desired
6. **Important** - Change ble_client mac address to your Pinecil's MAC. This 6. **Important** - Change ble_client mac address to your Pinecil's MAC. This
can be found in the settings as well as in logs from the above tools can be found in the settings as well as in logs from the above tools
(Joric/PineSAM) (Joric/PineSAM)
{{< figure src="pinecil-esphome.png" alt="Pinecil esp32 configuration example" class="inline" >}}
4. Flash the firmware to the ESP32 device 4. Flash the firmware to the ESP32 device
5. Add the device to Home Assistant 5. Add the device to Home Assistant
6. Create a Home Assistant dashboard to control and monitor your smart soldering 6. Create a Home Assistant dashboard to control and monitor your smart soldering
Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

+1
View File
@@ -3,4 +3,5 @@ categories: ["projects"]
date: "2016-10-02T22:55:05-04:00" date: "2016-10-02T22:55:05-04:00"
tags: ["projects"] tags: ["projects"]
title: "Projects" title: "Projects"
layout: "projects"
--- ---
+26 -2
View File
@@ -1,6 +1,30 @@
name: Projects name: Projects
source: source:
- icon: fa fa-github - icon: fa-solid fa-building
name: Rocky Enterprise Software Foundation
description: Board member for the non-profit foundation behind Rocky Linux. Focus on strategic governance, financial oversight, and advancing the mission of community-driven enterprise Linux distribution development.
url: https://rockylinux.org/about
- icon: fa-brands fa-github
name: Rocky Linux name: Rocky Linux
description: All the infrastructure for Rocky Linux, from soup to nuts. Work with a team of professionals to architect, design, and implement secure systems and proceudres to write Infrastructure as Code to provide systems for the various teams within the Rocky Enterprise Software Foundation, especially Rocky Linux as it gets off the ground. Also work closely with Release Engineering on building next generation Build Automation pipeline tools and ensuring reliability and security in the supply chain. description: Infrastructure architect and core team member for Rocky Linux. Built and maintain all infrastructure from bare metal to cloud services, including CI/CD pipelines, build systems, and supply chain security. Work closely with Release Engineering on next-generation build automation and ensuring security throughout the software supply chain.
url: https://github.com/rocky-linux/ url: https://github.com/rocky-linux/
- icon: fa-solid fa-code-branch
name: OpenELA
description: Technical Steering Committee member for OpenELA, the Open Enterprise Linux Association. Help guide technical strategy and governance for collaborative development of enterprise Linux distributions, focusing on open source supply chain transparency and community collaboration.
url: https://openela.org/
- icon: fa-solid fa-heart
name: ResolveX
description: Board member and technical advisor for ResolveX, building software and data solutions for crisis call centers including 988 suicide prevention lines and mental health resources. Provide strategic guidance on scaling infrastructure and technology decisions for mission-critical systems.
url: https://resolvex.com/
- icon: fa-solid fa-handshake
name: Shrug PW Consulting
description: Founder and Principal Consultant providing infrastructure architecture, DevOps automation, and technical advisory services. Specialize in scaling systems for mission-driven organizations, supply chain security, and building reliable infrastructure on constrained budgets.
url: https://shrugpw.com/
- icon: fa-brands fa-fedora
name: Fedora Project
description: Active contributor to Fedora RISC-V SIG and Community Operations (CommOps). Work on infrastructure, packaging ecosystem, build systems, and community tooling. Focus on RISC-V architecture support and community infrastructure reliability.
url: https://fedoraproject.org/
- icon: fa-solid fa-cloud
name: OpenStack
description: Core reviewer for OpenStack-Ansible and contributor to OpenStack-Kolla projects. Support OpenStack integration with Rocky Linux and work in CentOS NFV and Cloud SIGs. Focus on deployment automation, bare metal provisioning, and enterprise Linux integration.
url: https://openstack.org/
-30
View File
@@ -1,30 +0,0 @@
#!/bin/bash -ex
export GIT_AUTHOR_NAME="${GIT_AUTHOR_NAME}"
export GIT_AUTHOR_EMAIL="${GIT_AUTHOR_EMAIL}"
export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
REMOTE="${PUSH_REMOTE:-git@git.shrug.pw:neil/neilhanlon.me.git}"
rm -fr pages.git
mkdir pages.git
( cd pages.git && git init -b pages )
rsync -av public/* pages.git
cat << EOF > pages.git/.domains
neilhanlon.me
neilhanlon.com
hanlon.ninja
thepotato.tech
EOF
cd pages.git
set -x
git config user.name "$GIT_AUTHOR_NAME"
git config user.email "$GIT_AUTHOR_EMAIL"
git add -A
git commit -m "Deployment at $(date -u -Is)"
git remote add origin $REMOTE
git push -f origin pages
+5 -3
View File
@@ -5,7 +5,7 @@ title = "Neil Hanlon"
# Enable comments by entering your Disqus shortname # Enable comments by entering your Disqus shortname
disqusShortname = "" disqusShortname = ""
# Enable Google Analytics by entering your tracking code # Enable Google Analytics by entering your tracking code
googleAnalytics = "" # googleAnalytics = ""
theme = "hugo-sustain" theme = "hugo-sustain"
[permalinks] [permalinks]
@@ -23,9 +23,11 @@ theme = "hugo-sustain"
[params.social] [params.social]
Github = "NeilHanlon" Github = "NeilHanlon"
Email = "neil@shrug.pw.com" Email = "neil@shrug.pw"
Twitter = "NeilHanlon" Bluesky = "@shrug.pw"
LinkedIn = "hanlonneil" LinkedIn = "hanlonneil"
Signal = "hScowCEn-H1GKkCrare0m_xOEPqTWxt51pW9SI2bU5TlXrMW9QFD6qHBLqG1jDq9"
Keybase = "nhanlon"
#Stackoverflow = "username" #Stackoverflow = "username"
#Medium = "hanlon.neil" #Medium = "hanlon.neil"
Instagram = "noellathekitty" Instagram = "noellathekitty"
+25
View File
@@ -0,0 +1,25 @@
{{ define "main" }}
<!-- Header -->
{{ partial "header" . }}
<div class="container">
<section id="projects">
<h4 class="my-5">{{ .Site.Data.projects.name }}</h4>
<div class="row">
{{ range $el := .Site.Data.projects.source }}
<div class="col-md-6 mb-4">
<div class="project-card">
<div class="project-header">
<i class="{{ .icon }} project-icon"></i>
<h5 class="project-title">
<a href="{{ .url }}" target="_blank">{{ $el.name }}</a>
</h5>
</div>
<p class="project-description">{{ $el.description }}</p>
</div>
</div>
{{ end }}
</div>
</section>
</div>
{{ end }}