Bigger overhaul. Updated the Part 2 Home Assistant Birdnet post. Added some menus and tags.

This commit is contained in:
Norm Rasmussen
2023-10-06 16:38:00 -04:00
parent b012e336a7
commit fdeb4c9142
58 changed files with 2836 additions and 60 deletions

View File

@ -1,11 +1,11 @@
--- ---
title: 'Creating a BirdNetPi Dashboard in HomeAssistant - Part 1' title: 'Creating a BirdNetPi Dashboard in HomeAssistant - Part 1'
date: 2023-09-25T12:51:55-04:00 date: 2023-09-30T11:21:55-04:00
tags: ["homeassistant", "python", "diy"] tags: ["homeassistant", "python", "diy"]
author: "Me" author: "Me"
showToc: true showToc: true
TocOpen: false TocOpen: false
draft: true draft: false
hidemeta: false hidemeta: false
description: 'Learn how to take BirdNET-Pi Detections to create and display entities in HomeAssistant.' description: 'Learn how to take BirdNET-Pi Detections to create and display entities in HomeAssistant.'
disableHLJS: true # to disable highlightjs disableHLJS: true # to disable highlightjs

View File

@ -0,0 +1,537 @@
---
title: 'BirdNET-PI & HomeAssistant: Part 2'
date: 2023-10-04T10:35:23-04:00
tags: ["homeassistant", "diy", "selfhosted"]
categories: ["Tutorial"]
author: "Me"
showToc: true
TocOpen: false
draft: false
hidemeta: false
description: 'A Follow up from the previous post, this tutorial takes all the sensors we created and loads them into a beautiful dashboard!'
disableHLJS: true
disableShare: false
disableHLJS: false
hideSummary: false
searchHidden: true
ShowReadingTime: true
ShowBreadCrumbs: true
ShowPostNavLinks: true
ShowWordCount: true
ShowRssButtonInSectionTermList: true
UseHugoToc: true
ShowBreadCrumbs: true
cover:
image: "birdnet-homeassistant-part2.png"
alt: "Part 2 of my foray into HomeAssistant dashboard featuring BirdNET-Pi Sensors"
caption: "Part 2 of my foray into HomeAssistant dashboard featuring BirdNET-Pi Sensors"
relative: false
hidden: true
---
## Checking for Entities
If you're following up on this from [my first post]({{< ref "posts/birdnet_homeassistant.md" >}}), you've already added your AppDaemon script and confirmed that the AppDaemon logs don't show any errors. Now is the true test if it's working: do you have the
new sensors in HomeAssistant?!
{{< box info >}}
The best way to do this is by just type `e` from any screen in the HomeAssistant UI! That will bring up a list of entities.
Start typing "bird" or "birdnet" and you should see the new entities listed there.
{{< /box >}}
## Dashboard Overview & Dependencies
Now that we have the correct entities, lets take a look at what we're working with. Full disclosure that once I got this
working, I haven't really revisited it, refactored it, or made any improvements. I'm sure you'll find ways to use less YAML,
but I wanted to get this out there sooner than later!
![HomeAssistant BirdNet-Pi Dashboard - Full View](../posts/img/birdnet-homeassistant-dash-full.png)
I've include the code for all the cards at the bottom of this post. You can find them [here]{{< ref
"birdnet_homeassistant_part2.md#dashboard-yaml" >}}. This dashboard is pretty simple, it brings in almost all of the sensors
we created in the first post and organizes them in an as-pleasant-as-possible view. I'm definitely not a designer, so some of
the colors could be worked on...
Sensors in the dashboard:
* [Overview Card:]({{< ref "birdnet_homeassistant_part2#overview-card">}})
* sensor.bird_common_name (only used to generate the picture)
* camera.birdnet_flickr
* sensor.bird_common_name
* sensor.bird_science_name
* Data Card:
* sensor.bird_time_seen
* sensor.bird_confidence
* sensor.bird_last_seen
* Weather Card:
* weather.pirateweather
* Description Card:
* sensor.birdnet_wiki
There are also two HomeAssistant dashboard dependencies that you'll need for this dashboard:
* [Custom Weather Card](https://github.com/bramkragten/weather-card)
* [Custom Button Card](https://github.com/custom-cards/button-card)
* [Custom Card Mod](https://github.com/thomasloven/lovelace-card-mod)
Now that we've got that squared away, let's jump into each card.
## Overview Card
![Overview Card](../posts/img/birdnet-homeassistant-overview-card.png)
You'll notice from the few dependencies listed above, that I use this button card. **A lot.**
[RomRider](https://github.com/RomRider) did a fantastic job of adding in a ton of flexibility into the card. For the overview
card, we're taking one of the entities, in this case, `bird_common_name` and attaching the Flickr picture/sensor to it. Then,
on the right, I'm displaying the name and common name. Here's the overview card's yaml.
The tricky or tedious part of this card is making sure most of the card's attributes (icon, name, state, label) are set to
false. Another option for the Common and Scientific name on the right is to use a markdown card. I couldn't get the
formatting just right when using that card and some grid-card tricks, so I opted to reuse the super flexible button-card.
Pay attention to the styles for the image (lines 24-40). Those are what keep the border around the image along with the image
a certain height and width so that it looks proportional on the page.
One additional thing I have been toying with but hadn't finalized was messing with `[img_cell][border]`. By adding some
javascript in that section (see other cards), you could change the color of the border based on another parameter. Perhaps
you look at the state of `sensor.bird_common_name` and if there is the name of a color in there, that's the border's color.
Feel free to get crazy and creative with this!
{{< details "Overview Card YAML" >}}
```yaml
type: horizontal-stack
cards:
- type: custom:button-card
entity: sensor.bird_common_name
triggers_update: all
show_name: false
show_icon: false
show_state: false
show_label: false
styles:
card:
- background: transparent
- border: none
- width: 215px
- height: 175px
custom_fields:
picture:
card:
type: custom:button-card
entity: camera.birdnet_flickr
show_entity_picture: true
show_name: false
show_icon: false
styles:
card:
- height: 100%
- width: 100%
- padding: 0px 15px 0px 15px
- border-radius: 3px 3px 15px 3px
- border: none
- background: transparent
- overflow: visible
img_cell:
- width: 180px
- height: 160px
- border-radius: 69%
- border: 3px solid grey
entity_picture:
- width: 215px
- height: 100%
- type: vertical-stack
cards:
- type: custom:button-card
entity: sensor.bird_common_name
show_entity_picture: true
show_state: true
show_name: false
show_icon: false
styles:
card:
- background: transparent
- border: none
- margin-top: 35px
- font-size: 25px
- width: auto
- type: custom:button-card
entity: sensor.bird_science_name
show_entity_picture: true
show_state: true
show_name: false
show_icon: false
styles:
card:
- background: transparent
- border: black
- width: auto
```
{{< /details>}}
## Data Card
![Data Card](../posts/img/birdnet-homeassistant-data-card.png)
This card is fairly straight forward in that it's showing 3 key data points: the time of detection, detection confidence,
how long ago it was seen. This could be fairly redundant since we already have the time of detection, but when you're just
quickly glancing at the dashboard, minutes ago is much faster brain processing than comparing the timestamp and the current
time.
You've likely picked up by now that in the previous post, we never sent a payload to create the `sensor.bird_last_seen`
entity. Here's how you can do it.
### Creating Bird Last Seen Entity
When I first set out to create this sensor, I was messing with jinja templates for timestamp, datetime, strptime, and more.
Here are a few code blocks I saved in my notes in case I went too far down the wrong path. Here are a few of them.
```jinja
{{ now() - state_attr(sensor.bird_time_seen, 'last_triggered') > timedelta(hours=24) }}
```
or:
```jinja
{% set bird = strptime(states('sensor.bird_time_seen'), "%H:%M:%S") %}
{{ relative_time(bird) }}
```
The thing is, HomeAssistant has already implemented this really neat feature for calculating time, especially from when
something was last updated. This function is called `relative_time`. Having something like this allows you set automations
to run after a specific amount of time has passed since the last time a sensor or entity was updated.
{{< box tip >}}
An idea! 💡 For our specific use case, you could set up an automation that sends you a notification if no birds have been detected for
over 30 minutes. Of course, we'll set parameters like not to notify you at night or during the winter months.
{{< /box >}}
The issue I faced with relative time has to do with the sensors I created from my AppDaemon script. Relative time expects
a date _and_ time. I was only passing the time. In Home Assitant if you use the Developer Tools > Template to test relative
time out on the `sensor.bird_time_seen` sensor, you'll get a result of 126 years... That's because without a date, Home
Assistant defaults the date to `1900-01-01`. The full relative_time return is `1900-01-01 15:15:15`.
We could go back and set the sensors to include both date and time, but I prefer them separate so that I can use them in
different places. For this dashboard, the day is always today, so having the date felt redundant. To create a new sensor
using the `relative_time` function, you'll need to edit your `configuration.yaml`.
Once you're editing your config file, add the following:
```yaml
template:
# Bird Time Last Seen
- sensor:
- name: "Bird Last Seen"
state: >
{% set birdseen = (states('sensor.bird_date_seen')+' '+states('sensor.bird_time_seen')) %}
{% set bird = relative_time(strptime(birdseen, '%Y-%m-%d %H:%M:%S')) %}
{{ bird }}
```
What this does is uses Home Assistant's templating functionality and creates a new sensor called "Bird Last Seen". The
default `sensor.` name will be `sensor.bird_last_seen`.
To configure the state of that sensor, we first set a variable called `birdseen`. To this variable we are assigning the
concatenated values of `bird_date_seen`, a single whitespace, and `bird_time_seen`. We're choosing this format because that
is the format that `relative_time` returned before when we tried using it without a date.
As a quick experiment, take the templating code under the `state: >` parameter above and throw it into Developer Tools >
Template. Do you get 126 years? Or something more realistic? If something more realistic, amazing!
We're almost there! Here's what you should see in HomeAssistant if the sensor was created correctly.
![Bird Last Seen Entity](../posts/img/birdnet-homeassistant-birdseen-sensor.png)
{{< box info >}}
If you're new to templating for Home Assistant (or in general!) it would be helpful to read through a few of the docs that
HomeAssistant provides.
* [HomeAssistant Templating Docs](https://www.home-assistant.io/docs/configuration/templating/)
* [Jinja2 Templating Engine Docs](https://palletsprojects.com/p/jinja)
_Note: Jinja2 is very popular and common. Learning it for home automation is worth it alone, but it may very well come in
handy in other places too!_
{{< /box >}}
{{< details "Data Card Yaml" >}}
```yaml
type: horizontal-stack
cards:
- type: custom:button-card
entity: sensor.bird_time_seen
show_state: true
show_icon: true
show_name: false
icon: mdi:clock-outline
color: darkgrey
styles:
card:
- border: none
- background: transparent
- type: custom:button-card
entity: sensor.bird_confidence
show_state: true
show_icon: true
show_name: false
icon: mdi:check-circle
styles:
card:
- border: none
- background: transparent
icon:
- color: |
[[[
if (states['sensor.bird_confidence'].state > 80 )
return "green";
return "lightblue";
]]]
- type: custom:button-card
entity: sensor.bird_last_seen
show_state: true
show_icon: true
show_name: false
icon: mdi:timer-refresh-outline
styles:
card:
- border: none
- background: transparent
icon:
- color: |
[[[
var y = states['sensor.bird_last_seen'].state;
let x = y.slice(0, 2);
var e = Number(x);
if (e < 5) return '#ff6969';
if (e < 10) return '#ffdf87';
if (e < 15) return '#d9d76f';
if (e < 20) return '#fcc2ea';
else return '#ccccc8';
]]]
```
{{< /details >}}
## Weather Card
![Weather Card](../posts/img/birdnet-homeassistant-weather-card.png)
This doesn't need a lot of explaining or instructions. It is just the standard weather card! Here's the YAML, none of the
less, so you know what I toggled on/off. I'm using [Pirate Weather Integration](https://pirateweather.net/en/latest/) as my
data source.
{{< details "Weather Card" >}}
```yaml
type: custom:weather-card
entity: weather.pirateweather
forecast: false
hourly_forecast: false
name: null
details: true
current: true
number_of_forecasts: '5'
```
{{< /details >}}
## Description Card
Finally, we reach the bottom of the dashboard: the description card. This one is also really straightforward. We're just
using a [standard markdown card](https://www.home-assistant.io/dashboards/markdown/) and taking the description sensor we
created using Wikipedia's API and making that the main content of the card.
![Bird Description Card](../posts/img/birdnet-homeassistant-description-card.png)
Other than setting the theme, the only other small changes are removing the border and increasing from the default font size.
We'll use [Thomas Loven's](https://github.com/thomasloven) famous Card Mod for that.
{{< details "Description Card">}}
```yaml
type: markdown
content: '{{ state_attr(''sensor.birdnet_wiki'',''description'')}}'
theme: Catppuccin Mocha
card_mod:
style: |
ha-card.type-markdown {
border: none;
}
ha-markdown {
font-size: 16px;
}
```
{{< /details >}}
## Conclusion
And that's all there is to it! I say that flippantly, but I know that it can seem like there's a lot of setup. Everything I
did here evolved out of other people's projects and dashboards on [Reddit](www.reddit.com/r/homeassistant) or the invaluable
[HomeAssistant Community](https://community.home-assistant.io/)
Please feel free to reach out to me on [Mastodon](www.fosstodon.org/@notnorm) if you have any questions or get stuck
anywhere!
## Full Dashboard YAML
{{< details "Full Dashboard YAML" >}}
```yaml
- theme: Catppuccin Macchiato
title: BirdNet-Dashboard
path: birdnet-dashboard
icon: mdi:bird
type: custom:vertical-layout
badges: []
cards:
- type: horizontal-stack
cards:
- type: custom:button-card
entity: sensor.bird_common_name
triggers_update: all
show_name: false
show_icon: false
show_state: false
show_label: false
styles:
card:
- background: transparent
- border: none
- width: 215px
- height: 175px
custom_fields:
picture:
card:
type: custom:button-card
entity: camera.birdnet_flickr
show_entity_picture: true
show_name: false
show_icon: false
styles:
card:
- height: 100%
- width: 100%
- padding: 0px 15px 0px 15px
- border-radius: 3px 3px 15px 3px
- border: none
- background: transparent
- overflow: visible
img_cell:
- width: 180px
- height: 160px
- border-radius: 69%
- border: 3px solid grey
entity_picture:
- width: 215px
- height: 100%
- type: vertical-stack
cards:
- type: custom:button-card
entity: sensor.bird_common_name
show_entity_picture: true
show_state: true
show_name: false
show_icon: false
styles:
card:
- background: transparent
- border: none
- margin-top: 35px
- font-size: 25px
- width: auto
- type: custom:button-card
entity: sensor.bird_science_name
show_entity_picture: true
show_state: true
show_name: false
show_icon: false
styles:
card:
- background: transparent
- border: black
- width: auto
- type: horizontal-stack
cards:
- type: custom:button-card
entity: sensor.bird_time_seen
show_state: true
show_icon: true
show_name: false
icon: mdi:clock-outline
color: darkgrey
styles:
card:
- border: none
- background: transparent
- type: custom:button-card
entity: sensor.bird_confidence
show_state: true
show_icon: true
show_name: false
icon: mdi:check-circle
styles:
card:
- border: none
- background: transparent
icon:
- color: |
[[[
if (states['sensor.bird_confidence'].state > 80 )
return "green";
return "lightblue";
]]]
- type: custom:button-card
entity: sensor.bird_last_seen
show_state: true
show_icon: true
show_name: false
icon: mdi:timer-refresh-outline
styles:
card:
- border: none
- background: transparent
icon:
- color: |
[[[
var y = states['sensor.bird_last_seen'].state;
let x = y.slice(0, 2);
var e = Number(x);
if (e < 5) return '#ff6969';
if (e < 10) return '#ffdf87';
if (e < 15) return '#d9d76f';
if (e < 20) return '#fcc2ea';
else return '#ccccc8';
]]]
- type: custom:weather-card
entity: weather.pirateweather
forecast: false
hourly_forecast: false
name: null
details: true
current: true
- type: markdown
content: '{{ state_attr(''sensor.birdnet_wiki'',''description'')}}'
theme: Catppuccin Mocha
card_mod:
style: |
ha-card.type-markdown {
border: none;
}
ha-markdown {
font-size: 16px;
}
```
{{< /details >}}
<style>
.box-shortcode {
color: #e8e8e8;
border: none;
}
.post-content img {
margin: auto
}
</style>

View File

@ -20,11 +20,11 @@ ShowPostNavLinks: true
ShowWordCount: true ShowWordCount: true
ShowRssButtonInSectionTermList: true ShowRssButtonInSectionTermList: true
UseHugoToc: true UseHugoToc: true
#cover: cover:
# image: "<image path/url>" # image path/url image: "hugo-nginx-trouble.png"
# alt: "<alt text>" # alt text alt: "Hugo Logo, Nginx Logo, Tired Face emoji"
# caption: "<text>" # display caption under cover caption: "Hosting Hugo on a self-hosted nginx server brought some troubles!"
# relative: false # when using page bundles set this to true relative: false # when using page bundles set this to true
# hidden: true # only hide on current single page # hidden: true # only hide on current single page
--- ---

BIN
content/posts/img/.DS_Store vendored Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -0,0 +1,28 @@
---
title: 'Zyxel_vlan_setup'
date: 2023-10-04T10:35:41-04:00
tags: [""]
author: "Me"
showToc: true
TocOpen: false
draft: true
hidemeta: false
description: 'zyxel_vlan_setup'
disableHLJS: true
disableShare: false
disableHLJS: false
hideSummary: false
searchHidden: true
ShowReadingTime: true
ShowBreadCrumbs: true
ShowPostNavLinks: true
ShowWordCount: true
ShowRssButtonInSectionTermList: true
UseHugoToc: true
cover:
image: ""
alt: ""
caption: ""
relative: false
hidden: true
---

View File

@ -9,6 +9,13 @@ themesDir: './themes/'
paginate: 7 paginate: 7
googleAnalytics: G-X8VR5M0K20 googleAnalytics: G-X8VR5M0K20
enableRobotsTXT: true
sectionPagesMenu: main
taxonomies:
category: categories
series: series
tag: tags
# Allow html to be rendered in Markdown files # Allow html to be rendered in Markdown files
markup: markup:
@ -30,6 +37,8 @@ params:
author: Norm Rasmussen author: Norm Rasmussen
DateFormat: "January 2, 2006" DateFormat: "January 2, 2006"
defaultTheme: dark defaultTheme: dark
ShowShareButtons: true
ShowBreadCrumbs: true
assets: assets:
favicon: "favicon.ico" favicon: "favicon.ico"
favicon32x32: "rsmsncircles.ico" favicon32x32: "rsmsncircles.ico"

4
layouts/details.html Normal file
View File

@ -0,0 +1,4 @@
<details>
<summary>{{ (.Get 0) | markdownify }}</summary>
{{ .Inner | markdownify }}
</details>

View File

@ -84,6 +84,11 @@ if (!doNotTrack) {
</div> </div>
</div> </div>
<ul id="menu"> <ul id="menu">
<li>
<a href="./posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
</header> </header>

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

View File

@ -85,6 +85,11 @@ if (!doNotTrack) {
</div> </div>
</div> </div>
<ul id="menu"> <ul id="menu">
<li>
<a href="./posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
</header> </header>
@ -94,6 +99,9 @@ if (!doNotTrack) {
</header> </header>
<ul class="terms-tags"> <ul class="terms-tags">
<li>
<a href="./categories/tutorial.html">Tutorial <sup><strong><sup>1</sup></strong></sup> </a>
</li>
</ul> </ul>
</main> </main>

View File

@ -5,6 +5,16 @@
<link>/categories.html</link> <link>/categories.html</link>
<description>Recent content in Categories on Norm-working Packets 💾</description> <description>Recent content in Categories on Norm-working Packets 💾</description>
<generator>Hugo -- gohugo.io</generator> <generator>Hugo -- gohugo.io</generator>
<language>en-us</language><atom:link href="/categories/index.xml" rel="self" type="application/rss+xml" /> <language>en-us</language>
<lastBuildDate>Wed, 04 Oct 2023 10:35:23 -0400</lastBuildDate><atom:link href="/categories/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Tutorial</title>
<link>/categories/tutorial.html</link>
<pubDate>Wed, 04 Oct 2023 10:35:23 -0400</pubDate>
<guid>/categories/tutorial.html</guid>
<description></description>
</item>
</channel> </channel>
</rss> </rss>

View File

@ -0,0 +1,189 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Tutorial | Norm-working Packets 💾</title>
<meta name="keywords" content="">
<meta name="description" content="A semi-technical blog &amp; series of experiences working in tech and my homelab">
<meta name="author" content="Norm Rasmussen">
<link rel="canonical" href="../categories/tutorial.html">
<link crossorigin="anonymous" href="../assets/css/stylesheet.5cfc680b1eeaeef9efbced92d46c2a9e876b72ee14fba85846afc4cff9e6e6f8.css" integrity="sha256-XPxoCx7q7vnvvO2S1Gwqnodrcu4U&#43;6hYRq/Ez/nm5vg=" rel="preload stylesheet" as="style">
<link rel="icon" href="../favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="../rsmsncircles.ico">
<link rel="apple-touch-icon" href="../apple-touch-icon.png">
<link rel="mask-icon" href="../safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="../categories/tutorial/index.xml">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X8VR5M0K20"></script>
<script>
var doNotTrack = false;
if (!doNotTrack) {
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-X8VR5M0K20', { 'anonymize_ip': false });
}
</script>
<meta property="og:title" content="Tutorial" />
<meta property="og:description" content="A semi-technical blog &amp; series of experiences working in tech and my homelab" />
<meta property="og:type" content="website" />
<meta property="og:url" content="/categories/tutorial.html" /><meta property="og:site_name" content="Norm-working Packets" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Tutorial"/>
<meta name="twitter:description" content="A semi-technical blog &amp; series of experiences working in tech and my homelab"/>
</head>
<body class="list dark" id="top">
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="../" accesskey="h" title="Norm-working Packets 💾 (Alt + H)">Norm-working Packets 💾</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="../posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<header class="page-header"><div class="breadcrumbs"><a href="../">Home</a></div>
<h1>
Tutorial
</h1>
</header>
<article class="post-entry tag-entry">
<figure class="entry-cover"><img loading="lazy" src="../birdnet-homeassistant-part2.png" alt="Part 2 of my foray into HomeAssistant dashboard featuring BirdNET-Pi Sensors">
</figure>
<header class="entry-header">
<h2>BirdNET-PI &amp; HomeAssistant: Part 2
</h2>
</header>
<div class="entry-content">
<p>Checking for Entities If youre following up on this from my first post, youve already added your AppDaemon script and confirmed that the AppDaemon logs dont show any errors. Now is the true test if its working: do you have the new sensors in HomeAssistant?!
The best way to do this is by just type e from any screen in the HomeAssistant UI! That will bring up a list of entities....</p>
</div>
<footer class="entry-footer"><span title='2023-10-04 10:35:23 -0400 EDT'>October 4, 2023</span>&nbsp;·&nbsp;10 min&nbsp;·&nbsp;1986 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to BirdNET-PI &amp; HomeAssistant: Part 2" href="../posts/birdnet_homeassistant_part2.html"></a>
</article>
</main>
<footer class="footer">
<span>&copy; 2023 <a href="../">Norm-working Packets 💾</a></span>
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Tutorial on Norm-working Packets 💾</title>
<link>/categories/tutorial.html</link>
<description>Recent content in Tutorial on Norm-working Packets 💾</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<lastBuildDate>Wed, 04 Oct 2023 10:35:23 -0400</lastBuildDate><atom:link href="/categories/tutorial/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>BirdNET-PI &amp; HomeAssistant: Part 2</title>
<link>/posts/birdnet_homeassistant_part2.html</link>
<pubDate>Wed, 04 Oct 2023 10:35:23 -0400</pubDate>
<guid>/posts/birdnet_homeassistant_part2.html</guid>
<description>A Follow up from the previous post, this tutorial takes all the sensors we created and loads them into a beautiful dashboard!</description>
</item>
</channel>
</rss>

View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<title>/categories/tutorial.html</title>
<link rel="canonical" href="../../../categories/tutorial.html">
<meta name="robots" content="noindex">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=../../../categories/tutorial.html">
</head>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

View File

@ -99,6 +99,11 @@ if (!doNotTrack) {
</div> </div>
</div> </div>
<ul id="menu"> <ul id="menu">
<li>
<a href="./posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
</header> </header>
@ -136,6 +141,36 @@ if (!doNotTrack) {
</footer> </footer>
</article> </article>
<article class="post-entry">
<figure class="entry-cover"><img loading="lazy" src="./birdnet-homeassistant-part2.png" alt="Part 2 of my foray into HomeAssistant dashboard featuring BirdNET-Pi Sensors">
</figure>
<header class="entry-header">
<h2>BirdNET-PI &amp; HomeAssistant: Part 2
</h2>
</header>
<div class="entry-content">
<p>Checking for Entities If youre following up on this from my first post, youve already added your AppDaemon script and confirmed that the AppDaemon logs dont show any errors. Now is the true test if its working: do you have the new sensors in HomeAssistant?!
The best way to do this is by just type e from any screen in the HomeAssistant UI! That will bring up a list of entities....</p>
</div>
<footer class="entry-footer"><span title='2023-10-04 10:35:23 -0400 EDT'>October 4, 2023</span>&nbsp;·&nbsp;10 min&nbsp;·&nbsp;1986 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to BirdNET-PI &amp; HomeAssistant: Part 2" href="./posts/birdnet_homeassistant_part2.html"></a>
</article>
<article class="post-entry">
<figure class="entry-cover"><img loading="lazy" src="./birdnet-homeassistant.png" alt="BirdNET-Pi and HomeAssistant: Happier together!">
</figure>
<header class="entry-header">
<h2>Creating a BirdNetPi Dashboard in HomeAssistant - Part 1
</h2>
</header>
<div class="entry-content">
<p>This is Part One of a Two Part Series. You can find Part Two, here.
What you will need BirdNET-Pi HomeAssistant AppDaemon MQTT Broker (I use Mosquitto) Background In early 2023, at the height of the Raspberry Pi shortage I felt like a king with an extra Rpi laying around, not being used. Im a big fan of any sort of passive intake of information and had been looking around for various citizen science-style projects that can capture information from the world around me....</p>
</div>
<footer class="entry-footer"><span title='2023-09-30 11:21:55 -0400 EDT'>September 30, 2023</span>&nbsp;·&nbsp;10 min&nbsp;·&nbsp;1953 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Creating a BirdNetPi Dashboard in HomeAssistant - Part 1" href="./posts/birdnet_homeassistant.html"></a>
</article>
<article class="post-entry"> <article class="post-entry">
<figure class="entry-cover"><img loading="lazy" src="./multiple-git-cover-img.png" alt="git commands"> <figure class="entry-cover"><img loading="lazy" src="./multiple-git-cover-img.png" alt="git commands">
</figure> </figure>
@ -152,6 +187,8 @@ I really enjoy self-hosting services that I use everyday. One of those includes
</article> </article>
<article class="post-entry"> <article class="post-entry">
<figure class="entry-cover"><img loading="lazy" src="./hugo-nginx-trouble.png" alt="Hugo Logo, Nginx Logo, Tired Face emoji">
</figure>
<header class="entry-header"> <header class="entry-header">
<h2>Trouble Hosting Hugo with Nginx <h2>Trouble Hosting Hugo with Nginx
</h2> </h2>

View File

@ -6,7 +6,25 @@
<description>Recent content on Norm-working Packets 💾</description> <description>Recent content on Norm-working Packets 💾</description>
<generator>Hugo -- gohugo.io</generator> <generator>Hugo -- gohugo.io</generator>
<language>en-us</language> <language>en-us</language>
<lastBuildDate>Fri, 22 Sep 2023 15:07:10 -0400</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml" /> <lastBuildDate>Wed, 04 Oct 2023 10:35:23 -0400</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>BirdNET-PI &amp; HomeAssistant: Part 2</title>
<link>/posts/birdnet_homeassistant_part2.html</link>
<pubDate>Wed, 04 Oct 2023 10:35:23 -0400</pubDate>
<guid>/posts/birdnet_homeassistant_part2.html</guid>
<description>A Follow up from the previous post, this tutorial takes all the sensors we created and loads them into a beautiful dashboard!</description>
</item>
<item>
<title>Creating a BirdNetPi Dashboard in HomeAssistant - Part 1</title>
<link>/posts/birdnet_homeassistant.html</link>
<pubDate>Sat, 30 Sep 2023 11:21:55 -0400</pubDate>
<guid>/posts/birdnet_homeassistant.html</guid>
<description>Learn how to take BirdNET-Pi Detections to create and display entities in HomeAssistant.</description>
</item>
<item> <item>
<title>Pushing a Single Local Git Repo to Multiple Remote Repos</title> <title>Pushing a Single Local Git Repo to Multiple Remote Repos</title>
<link>/posts/multiple_git_remotes.html</link> <link>/posts/multiple_git_remotes.html</link>

View File

@ -100,16 +100,51 @@ if (!doNotTrack) {
</div> </div>
</div> </div>
<ul id="menu"> <ul id="menu">
<li>
<a href="./posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
</header> </header>
<main class="main"> <main class="main">
<header class="page-header"> <header class="page-header"><div class="breadcrumbs"><a href="./">Home</a></div>
<h1> <h1>
Posts Posts
</h1> </h1>
</header> </header>
<article class="post-entry">
<figure class="entry-cover"><img loading="lazy" src="./birdnet-homeassistant-part2.png" alt="Part 2 of my foray into HomeAssistant dashboard featuring BirdNET-Pi Sensors">
</figure>
<header class="entry-header">
<h2>BirdNET-PI &amp; HomeAssistant: Part 2
</h2>
</header>
<div class="entry-content">
<p>Checking for Entities If youre following up on this from my first post, youve already added your AppDaemon script and confirmed that the AppDaemon logs dont show any errors. Now is the true test if its working: do you have the new sensors in HomeAssistant?!
The best way to do this is by just type e from any screen in the HomeAssistant UI! That will bring up a list of entities....</p>
</div>
<footer class="entry-footer"><span title='2023-10-04 10:35:23 -0400 EDT'>October 4, 2023</span>&nbsp;·&nbsp;10 min&nbsp;·&nbsp;1986 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to BirdNET-PI &amp; HomeAssistant: Part 2" href="./posts/birdnet_homeassistant_part2.html"></a>
</article>
<article class="post-entry">
<figure class="entry-cover"><img loading="lazy" src="./birdnet-homeassistant.png" alt="BirdNET-Pi and HomeAssistant: Happier together!">
</figure>
<header class="entry-header">
<h2>Creating a BirdNetPi Dashboard in HomeAssistant - Part 1
</h2>
</header>
<div class="entry-content">
<p>This is Part One of a Two Part Series. You can find Part Two, here.
What you will need BirdNET-Pi HomeAssistant AppDaemon MQTT Broker (I use Mosquitto) Background In early 2023, at the height of the Raspberry Pi shortage I felt like a king with an extra Rpi laying around, not being used. Im a big fan of any sort of passive intake of information and had been looking around for various citizen science-style projects that can capture information from the world around me....</p>
</div>
<footer class="entry-footer"><span title='2023-09-30 11:21:55 -0400 EDT'>September 30, 2023</span>&nbsp;·&nbsp;10 min&nbsp;·&nbsp;1953 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Creating a BirdNetPi Dashboard in HomeAssistant - Part 1" href="./posts/birdnet_homeassistant.html"></a>
</article>
<article class="post-entry"> <article class="post-entry">
<figure class="entry-cover"><img loading="lazy" src="./multiple-git-cover-img.png" alt="git commands"> <figure class="entry-cover"><img loading="lazy" src="./multiple-git-cover-img.png" alt="git commands">
</figure> </figure>
@ -126,6 +161,8 @@ I really enjoy self-hosting services that I use everyday. One of those includes
</article> </article>
<article class="post-entry"> <article class="post-entry">
<figure class="entry-cover"><img loading="lazy" src="./hugo-nginx-trouble.png" alt="Hugo Logo, Nginx Logo, Tired Face emoji">
</figure>
<header class="entry-header"> <header class="entry-header">
<h2>Trouble Hosting Hugo with Nginx <h2>Trouble Hosting Hugo with Nginx
</h2> </h2>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -6,7 +6,25 @@
<description>Recent content in Posts on Norm-working Packets 💾</description> <description>Recent content in Posts on Norm-working Packets 💾</description>
<generator>Hugo -- gohugo.io</generator> <generator>Hugo -- gohugo.io</generator>
<language>en-us</language> <language>en-us</language>
<lastBuildDate>Fri, 22 Sep 2023 15:07:10 -0400</lastBuildDate><atom:link href="/posts/index.xml" rel="self" type="application/rss+xml" /> <lastBuildDate>Wed, 04 Oct 2023 10:35:23 -0400</lastBuildDate><atom:link href="/posts/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>BirdNET-PI &amp; HomeAssistant: Part 2</title>
<link>/posts/birdnet_homeassistant_part2.html</link>
<pubDate>Wed, 04 Oct 2023 10:35:23 -0400</pubDate>
<guid>/posts/birdnet_homeassistant_part2.html</guid>
<description>A Follow up from the previous post, this tutorial takes all the sensors we created and loads them into a beautiful dashboard!</description>
</item>
<item>
<title>Creating a BirdNetPi Dashboard in HomeAssistant - Part 1</title>
<link>/posts/birdnet_homeassistant.html</link>
<pubDate>Sat, 30 Sep 2023 11:21:55 -0400</pubDate>
<guid>/posts/birdnet_homeassistant.html</guid>
<description>Learn how to take BirdNET-Pi Detections to create and display entities in HomeAssistant.</description>
</item>
<item> <item>
<title>Pushing a Single Local Git Repo to Multiple Remote Repos</title> <title>Pushing a Single Local Git Repo to Multiple Remote Repos</title>
<link>/posts/multiple_git_remotes.html</link> <link>/posts/multiple_git_remotes.html</link>

View File

@ -138,6 +138,11 @@ if (!doNotTrack) {
</div> </div>
</div> </div>
<ul id="menu"> <ul id="menu">
<li>
<a href="../posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
</header> </header>
@ -216,6 +221,11 @@ there twice, once for <code>(push)</code> and once for <code>(fetch)</code>.</p>
<li><a href="../tags/commandline.html">commandline</a></li> <li><a href="../tags/commandline.html">commandline</a></li>
</ul> </ul>
<nav class="paginav"> <nav class="paginav">
<a class="prev" href="../posts/birdnet_homeassistant.html">
<span class="title">« Prev</span>
<br>
<span>Creating a BirdNetPi Dashboard in HomeAssistant - Part 1</span>
</a>
<a class="next" href="../posts/hosting_hugo_troubles.html"> <a class="next" href="../posts/hosting_hugo_troubles.html">
<span class="title">Next »</span> <span class="title">Next »</span>
<br> <br>
@ -223,6 +233,60 @@ there twice, once for <code>(push)</code> and once for <code>(fetch)</code>.</p>
</a> </a>
</nav> </nav>
<div class="share-buttons">
<a target="_blank" rel="noopener noreferrer" aria-label="share Pushing a Single Local Git Repo to Multiple Remote Repos on twitter"
href="https://twitter.com/intent/tweet/?text=Pushing%20a%20Single%20Local%20Git%20Repo%20to%20Multiple%20Remote%20Repos&amp;url=%2fposts%2fmultiple_git_remotes.html&amp;hashtags=git%2cbackups%2ccommandline">
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
<path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-253.927,424.544c135.939,0 210.268,-112.643 210.268,-210.268c0,-3.218 0,-6.437 -0.153,-9.502c14.406,-10.421 26.973,-23.448 36.935,-38.314c-13.18,5.824 -27.433,9.809 -42.452,11.648c15.326,-9.196 26.973,-23.602 32.49,-40.92c-14.252,8.429 -30.038,14.56 -46.896,17.931c-13.487,-14.406 -32.644,-23.295 -53.946,-23.295c-40.767,0 -73.87,33.104 -73.87,73.87c0,5.824 0.613,11.494 1.992,16.858c-61.456,-3.065 -115.862,-32.49 -152.337,-77.241c-6.284,10.881 -9.962,23.601 -9.962,37.088c0,25.594 13.027,48.276 32.95,61.456c-12.107,-0.307 -23.448,-3.678 -33.41,-9.196l0,0.92c0,35.862 25.441,65.594 59.311,72.49c-6.13,1.686 -12.72,2.606 -19.464,2.606c-4.751,0 -9.348,-0.46 -13.946,-1.38c9.349,29.426 36.628,50.728 68.965,51.341c-25.287,19.771 -57.164,31.571 -91.8,31.571c-5.977,0 -11.801,-0.306 -17.625,-1.073c32.337,21.15 71.264,33.41 112.95,33.41Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share Pushing a Single Local Git Repo to Multiple Remote Repos on linkedin"
href="https://www.linkedin.com/shareArticle?mini=true&amp;url=%2fposts%2fmultiple_git_remotes.html&amp;title=Pushing%20a%20Single%20Local%20Git%20Repo%20to%20Multiple%20Remote%20Repos&amp;summary=Pushing%20a%20Single%20Local%20Git%20Repo%20to%20Multiple%20Remote%20Repos&amp;source=%2fposts%2fmultiple_git_remotes.html">
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
<path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-288.985,423.278l0,-225.717l-75.04,0l0,225.717l75.04,0Zm270.539,0l0,-129.439c0,-69.333 -37.018,-101.586 -86.381,-101.586c-39.804,0 -57.634,21.891 -67.617,37.266l0,-31.958l-75.021,0c0.995,21.181 0,225.717 0,225.717l75.02,0l0,-126.056c0,-6.748 0.486,-13.492 2.474,-18.315c5.414,-13.475 17.767,-27.434 38.494,-27.434c27.135,0 38.007,20.707 38.007,51.037l0,120.768l75.024,0Zm-307.552,-334.556c-25.674,0 -42.448,16.879 -42.448,39.002c0,21.658 16.264,39.002 41.455,39.002l0.484,0c26.165,0 42.452,-17.344 42.452,-39.002c-0.485,-22.092 -16.241,-38.954 -41.943,-39.002Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share Pushing a Single Local Git Repo to Multiple Remote Repos on reddit"
href="https://reddit.com/submit?url=%2fposts%2fmultiple_git_remotes.html&title=Pushing%20a%20Single%20Local%20Git%20Repo%20to%20Multiple%20Remote%20Repos">
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
<path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-3.446,265.638c0,-22.964 -18.616,-41.58 -41.58,-41.58c-11.211,0 -21.361,4.457 -28.841,11.666c-28.424,-20.508 -67.586,-33.757 -111.204,-35.278l18.941,-89.121l61.884,13.157c0.756,15.734 13.642,28.29 29.56,28.29c16.407,0 29.706,-13.299 29.706,-29.701c0,-16.403 -13.299,-29.702 -29.706,-29.702c-11.666,0 -21.657,6.792 -26.515,16.578l-69.105,-14.69c-1.922,-0.418 -3.939,-0.042 -5.585,1.036c-1.658,1.073 -2.811,2.761 -3.224,4.686l-21.152,99.438c-44.258,1.228 -84.046,14.494 -112.837,35.232c-7.468,-7.164 -17.589,-11.591 -28.757,-11.591c-22.965,0 -41.585,18.616 -41.585,41.58c0,16.896 10.095,31.41 24.568,37.918c-0.639,4.135 -0.99,8.328 -0.99,12.576c0,63.977 74.469,115.836 166.33,115.836c91.861,0 166.334,-51.859 166.334,-115.836c0,-4.218 -0.347,-8.387 -0.977,-12.493c14.564,-6.47 24.735,-21.034 24.735,-38.001Zm-119.474,108.193c-20.27,20.241 -59.115,21.816 -70.534,21.816c-11.428,0 -50.277,-1.575 -70.522,-21.82c-3.007,-3.008 -3.007,-7.882 0,-10.889c3.003,-2.999 7.882,-3.003 10.885,0c12.777,12.781 40.11,17.317 59.637,17.317c19.522,0 46.86,-4.536 59.657,-17.321c3.016,-2.999 7.886,-2.995 10.885,0.008c3.008,3.011 3.003,7.882 -0.008,10.889Zm-5.23,-48.781c-16.373,0 -29.701,-13.324 -29.701,-29.698c0,-16.381 13.328,-29.714 29.701,-29.714c16.378,0 29.706,13.333 29.706,29.714c0,16.374 -13.328,29.698 -29.706,29.698Zm-160.386,-29.702c0,-16.381 13.328,-29.71 29.714,-29.71c16.369,0 29.689,13.329 29.689,29.71c0,16.373 -13.32,29.693 -29.689,29.693c-16.386,0 -29.714,-13.32 -29.714,-29.693Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share Pushing a Single Local Git Repo to Multiple Remote Repos on facebook"
href="https://facebook.com/sharer/sharer.php?u=%2fposts%2fmultiple_git_remotes.html">
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
<path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-106.468,0l0,-192.915l66.6,0l12.672,-82.621l-79.272,0l0,-53.617c0,-22.603 11.073,-44.636 46.58,-44.636l36.042,0l0,-70.34c0,0 -32.71,-5.582 -63.982,-5.582c-65.288,0 -107.96,39.569 -107.96,111.204l0,62.971l-72.573,0l0,82.621l72.573,0l0,192.915l-191.104,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share Pushing a Single Local Git Repo to Multiple Remote Repos on whatsapp"
href="https://api.whatsapp.com/send?text=Pushing%20a%20Single%20Local%20Git%20Repo%20to%20Multiple%20Remote%20Repos%20-%20%2fposts%2fmultiple_git_remotes.html">
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
<path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-58.673,127.703c-33.842,-33.881 -78.847,-52.548 -126.798,-52.568c-98.799,0 -179.21,80.405 -179.249,179.234c-0.013,31.593 8.241,62.428 23.927,89.612l-25.429,92.884l95.021,-24.925c26.181,14.28 55.659,21.807 85.658,21.816l0.074,0c98.789,0 179.206,-80.413 179.247,-179.243c0.018,-47.895 -18.61,-92.93 -52.451,-126.81Zm-126.797,275.782l-0.06,0c-26.734,-0.01 -52.954,-7.193 -75.828,-20.767l-5.441,-3.229l-56.386,14.792l15.05,-54.977l-3.542,-5.637c-14.913,-23.72 -22.791,-51.136 -22.779,-79.287c0.033,-82.142 66.867,-148.971 149.046,-148.971c39.793,0.014 77.199,15.531 105.329,43.692c28.128,28.16 43.609,65.592 43.594,105.4c-0.034,82.149 -66.866,148.983 -148.983,148.984Zm81.721,-111.581c-4.479,-2.242 -26.499,-13.075 -30.604,-14.571c-4.105,-1.495 -7.091,-2.241 -10.077,2.241c-2.986,4.483 -11.569,14.572 -14.182,17.562c-2.612,2.988 -5.225,3.364 -9.703,1.12c-4.479,-2.241 -18.91,-6.97 -36.017,-22.23c-13.314,-11.876 -22.304,-26.542 -24.916,-31.026c-2.612,-4.484 -0.279,-6.908 1.963,-9.14c2.016,-2.007 4.48,-5.232 6.719,-7.847c2.24,-2.615 2.986,-4.484 4.479,-7.472c1.493,-2.99 0.747,-5.604 -0.374,-7.846c-1.119,-2.241 -10.077,-24.288 -13.809,-33.256c-3.635,-8.733 -7.327,-7.55 -10.077,-7.688c-2.609,-0.13 -5.598,-0.158 -8.583,-0.158c-2.986,0 -7.839,1.121 -11.944,5.604c-4.105,4.484 -15.675,15.32 -15.675,37.364c0,22.046 16.048,43.342 18.287,46.332c2.24,2.99 31.582,48.227 76.511,67.627c10.685,4.615 19.028,7.371 25.533,9.434c10.728,3.41 20.492,2.929 28.209,1.775c8.605,-1.285 26.499,-10.833 30.231,-21.295c3.732,-10.464 3.732,-19.431 2.612,-21.298c-1.119,-1.869 -4.105,-2.99 -8.583,-5.232Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share Pushing a Single Local Git Repo to Multiple Remote Repos on telegram"
href="https://telegram.me/share/url?text=Pushing%20a%20Single%20Local%20Git%20Repo%20to%20Multiple%20Remote%20Repos&amp;url=%2fposts%2fmultiple_git_remotes.html">
<svg version="1.1" xml:space="preserve" viewBox="2 2 28 28" height="30px" width="30px" fill="currentColor">
<path
d="M26.49,29.86H5.5a3.37,3.37,0,0,1-2.47-1,3.35,3.35,0,0,1-1-2.47V5.48A3.36,3.36,0,0,1,3,3,3.37,3.37,0,0,1,5.5,2h21A3.38,3.38,0,0,1,29,3a3.36,3.36,0,0,1,1,2.46V26.37a3.35,3.35,0,0,1-1,2.47A3.38,3.38,0,0,1,26.49,29.86Zm-5.38-6.71a.79.79,0,0,0,.85-.66L24.73,9.24a.55.55,0,0,0-.18-.46.62.62,0,0,0-.41-.17q-.08,0-16.53,6.11a.59.59,0,0,0-.41.59.57.57,0,0,0,.43.52l4,1.24,1.61,4.83a.62.62,0,0,0,.63.43.56.56,0,0,0,.4-.17L16.54,20l4.09,3A.9.9,0,0,0,21.11,23.15ZM13.8,20.71l-1.21-4q8.72-5.55,8.78-5.55c.15,0,.23,0,.23.16a.18.18,0,0,1,0,.06s-2.51,2.3-7.52,6.8Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share Pushing a Single Local Git Repo to Multiple Remote Repos on ycombinator"
href="https://news.ycombinator.com/submitlink?t=Pushing%20a%20Single%20Local%20Git%20Repo%20to%20Multiple%20Remote%20Repos&u=%2fposts%2fmultiple_git_remotes.html">
<svg version="1.1" xml:space="preserve" width="30px" height="30px" viewBox="0 0 512 512" fill="currentColor"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
<path
d="M449.446 0C483.971 0 512 28.03 512 62.554L512 449.446C512 483.97 483.97 512 449.446 512L62.554 512C28.03 512 0 483.97 0 449.446L0 62.554C0 28.03 28.029 0 62.554 0L449.446 0ZM183.8767 87.9921H121.8427L230.6673 292.4508V424.0079H281.3328V292.4508L390.1575 87.9921H328.1233L256 238.2489z" />
</svg>
</a>
</div>
</footer> </footer>
</article> </article>
</main> </main>

View File

@ -138,6 +138,11 @@ if (!doNotTrack) {
</div> </div>
</div> </div>
<ul id="menu"> <ul id="menu">
<li>
<a href="../posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
</header> </header>
@ -464,6 +469,60 @@ paste them from the <a href="https://github.com/NginxProxyManager/nginx-proxy-ma
</a> </a>
</nav> </nav>
<div class="share-buttons">
<a target="_blank" rel="noopener noreferrer" aria-label="share Tutorial: Move from NginxProxyManager to Nginx on twitter"
href="https://twitter.com/intent/tweet/?text=Tutorial%3a%20Move%20from%20NginxProxyManager%20to%20Nginx&amp;url=%2fposts%2fnpm_to_nginx_tutorial.html&amp;hashtags=git%2cbackups%2ccommandline">
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
<path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-253.927,424.544c135.939,0 210.268,-112.643 210.268,-210.268c0,-3.218 0,-6.437 -0.153,-9.502c14.406,-10.421 26.973,-23.448 36.935,-38.314c-13.18,5.824 -27.433,9.809 -42.452,11.648c15.326,-9.196 26.973,-23.602 32.49,-40.92c-14.252,8.429 -30.038,14.56 -46.896,17.931c-13.487,-14.406 -32.644,-23.295 -53.946,-23.295c-40.767,0 -73.87,33.104 -73.87,73.87c0,5.824 0.613,11.494 1.992,16.858c-61.456,-3.065 -115.862,-32.49 -152.337,-77.241c-6.284,10.881 -9.962,23.601 -9.962,37.088c0,25.594 13.027,48.276 32.95,61.456c-12.107,-0.307 -23.448,-3.678 -33.41,-9.196l0,0.92c0,35.862 25.441,65.594 59.311,72.49c-6.13,1.686 -12.72,2.606 -19.464,2.606c-4.751,0 -9.348,-0.46 -13.946,-1.38c9.349,29.426 36.628,50.728 68.965,51.341c-25.287,19.771 -57.164,31.571 -91.8,31.571c-5.977,0 -11.801,-0.306 -17.625,-1.073c32.337,21.15 71.264,33.41 112.95,33.41Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share Tutorial: Move from NginxProxyManager to Nginx on linkedin"
href="https://www.linkedin.com/shareArticle?mini=true&amp;url=%2fposts%2fnpm_to_nginx_tutorial.html&amp;title=Tutorial%3a%20Move%20from%20NginxProxyManager%20to%20Nginx&amp;summary=Tutorial%3a%20Move%20from%20NginxProxyManager%20to%20Nginx&amp;source=%2fposts%2fnpm_to_nginx_tutorial.html">
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
<path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-288.985,423.278l0,-225.717l-75.04,0l0,225.717l75.04,0Zm270.539,0l0,-129.439c0,-69.333 -37.018,-101.586 -86.381,-101.586c-39.804,0 -57.634,21.891 -67.617,37.266l0,-31.958l-75.021,0c0.995,21.181 0,225.717 0,225.717l75.02,0l0,-126.056c0,-6.748 0.486,-13.492 2.474,-18.315c5.414,-13.475 17.767,-27.434 38.494,-27.434c27.135,0 38.007,20.707 38.007,51.037l0,120.768l75.024,0Zm-307.552,-334.556c-25.674,0 -42.448,16.879 -42.448,39.002c0,21.658 16.264,39.002 41.455,39.002l0.484,0c26.165,0 42.452,-17.344 42.452,-39.002c-0.485,-22.092 -16.241,-38.954 -41.943,-39.002Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share Tutorial: Move from NginxProxyManager to Nginx on reddit"
href="https://reddit.com/submit?url=%2fposts%2fnpm_to_nginx_tutorial.html&title=Tutorial%3a%20Move%20from%20NginxProxyManager%20to%20Nginx">
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
<path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-3.446,265.638c0,-22.964 -18.616,-41.58 -41.58,-41.58c-11.211,0 -21.361,4.457 -28.841,11.666c-28.424,-20.508 -67.586,-33.757 -111.204,-35.278l18.941,-89.121l61.884,13.157c0.756,15.734 13.642,28.29 29.56,28.29c16.407,0 29.706,-13.299 29.706,-29.701c0,-16.403 -13.299,-29.702 -29.706,-29.702c-11.666,0 -21.657,6.792 -26.515,16.578l-69.105,-14.69c-1.922,-0.418 -3.939,-0.042 -5.585,1.036c-1.658,1.073 -2.811,2.761 -3.224,4.686l-21.152,99.438c-44.258,1.228 -84.046,14.494 -112.837,35.232c-7.468,-7.164 -17.589,-11.591 -28.757,-11.591c-22.965,0 -41.585,18.616 -41.585,41.58c0,16.896 10.095,31.41 24.568,37.918c-0.639,4.135 -0.99,8.328 -0.99,12.576c0,63.977 74.469,115.836 166.33,115.836c91.861,0 166.334,-51.859 166.334,-115.836c0,-4.218 -0.347,-8.387 -0.977,-12.493c14.564,-6.47 24.735,-21.034 24.735,-38.001Zm-119.474,108.193c-20.27,20.241 -59.115,21.816 -70.534,21.816c-11.428,0 -50.277,-1.575 -70.522,-21.82c-3.007,-3.008 -3.007,-7.882 0,-10.889c3.003,-2.999 7.882,-3.003 10.885,0c12.777,12.781 40.11,17.317 59.637,17.317c19.522,0 46.86,-4.536 59.657,-17.321c3.016,-2.999 7.886,-2.995 10.885,0.008c3.008,3.011 3.003,7.882 -0.008,10.889Zm-5.23,-48.781c-16.373,0 -29.701,-13.324 -29.701,-29.698c0,-16.381 13.328,-29.714 29.701,-29.714c16.378,0 29.706,13.333 29.706,29.714c0,16.374 -13.328,29.698 -29.706,29.698Zm-160.386,-29.702c0,-16.381 13.328,-29.71 29.714,-29.71c16.369,0 29.689,13.329 29.689,29.71c0,16.373 -13.32,29.693 -29.689,29.693c-16.386,0 -29.714,-13.32 -29.714,-29.693Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share Tutorial: Move from NginxProxyManager to Nginx on facebook"
href="https://facebook.com/sharer/sharer.php?u=%2fposts%2fnpm_to_nginx_tutorial.html">
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
<path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-106.468,0l0,-192.915l66.6,0l12.672,-82.621l-79.272,0l0,-53.617c0,-22.603 11.073,-44.636 46.58,-44.636l36.042,0l0,-70.34c0,0 -32.71,-5.582 -63.982,-5.582c-65.288,0 -107.96,39.569 -107.96,111.204l0,62.971l-72.573,0l0,82.621l72.573,0l0,192.915l-191.104,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share Tutorial: Move from NginxProxyManager to Nginx on whatsapp"
href="https://api.whatsapp.com/send?text=Tutorial%3a%20Move%20from%20NginxProxyManager%20to%20Nginx%20-%20%2fposts%2fnpm_to_nginx_tutorial.html">
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
<path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-58.673,127.703c-33.842,-33.881 -78.847,-52.548 -126.798,-52.568c-98.799,0 -179.21,80.405 -179.249,179.234c-0.013,31.593 8.241,62.428 23.927,89.612l-25.429,92.884l95.021,-24.925c26.181,14.28 55.659,21.807 85.658,21.816l0.074,0c98.789,0 179.206,-80.413 179.247,-179.243c0.018,-47.895 -18.61,-92.93 -52.451,-126.81Zm-126.797,275.782l-0.06,0c-26.734,-0.01 -52.954,-7.193 -75.828,-20.767l-5.441,-3.229l-56.386,14.792l15.05,-54.977l-3.542,-5.637c-14.913,-23.72 -22.791,-51.136 -22.779,-79.287c0.033,-82.142 66.867,-148.971 149.046,-148.971c39.793,0.014 77.199,15.531 105.329,43.692c28.128,28.16 43.609,65.592 43.594,105.4c-0.034,82.149 -66.866,148.983 -148.983,148.984Zm81.721,-111.581c-4.479,-2.242 -26.499,-13.075 -30.604,-14.571c-4.105,-1.495 -7.091,-2.241 -10.077,2.241c-2.986,4.483 -11.569,14.572 -14.182,17.562c-2.612,2.988 -5.225,3.364 -9.703,1.12c-4.479,-2.241 -18.91,-6.97 -36.017,-22.23c-13.314,-11.876 -22.304,-26.542 -24.916,-31.026c-2.612,-4.484 -0.279,-6.908 1.963,-9.14c2.016,-2.007 4.48,-5.232 6.719,-7.847c2.24,-2.615 2.986,-4.484 4.479,-7.472c1.493,-2.99 0.747,-5.604 -0.374,-7.846c-1.119,-2.241 -10.077,-24.288 -13.809,-33.256c-3.635,-8.733 -7.327,-7.55 -10.077,-7.688c-2.609,-0.13 -5.598,-0.158 -8.583,-0.158c-2.986,0 -7.839,1.121 -11.944,5.604c-4.105,4.484 -15.675,15.32 -15.675,37.364c0,22.046 16.048,43.342 18.287,46.332c2.24,2.99 31.582,48.227 76.511,67.627c10.685,4.615 19.028,7.371 25.533,9.434c10.728,3.41 20.492,2.929 28.209,1.775c8.605,-1.285 26.499,-10.833 30.231,-21.295c3.732,-10.464 3.732,-19.431 2.612,-21.298c-1.119,-1.869 -4.105,-2.99 -8.583,-5.232Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share Tutorial: Move from NginxProxyManager to Nginx on telegram"
href="https://telegram.me/share/url?text=Tutorial%3a%20Move%20from%20NginxProxyManager%20to%20Nginx&amp;url=%2fposts%2fnpm_to_nginx_tutorial.html">
<svg version="1.1" xml:space="preserve" viewBox="2 2 28 28" height="30px" width="30px" fill="currentColor">
<path
d="M26.49,29.86H5.5a3.37,3.37,0,0,1-2.47-1,3.35,3.35,0,0,1-1-2.47V5.48A3.36,3.36,0,0,1,3,3,3.37,3.37,0,0,1,5.5,2h21A3.38,3.38,0,0,1,29,3a3.36,3.36,0,0,1,1,2.46V26.37a3.35,3.35,0,0,1-1,2.47A3.38,3.38,0,0,1,26.49,29.86Zm-5.38-6.71a.79.79,0,0,0,.85-.66L24.73,9.24a.55.55,0,0,0-.18-.46.62.62,0,0,0-.41-.17q-.08,0-16.53,6.11a.59.59,0,0,0-.41.59.57.57,0,0,0,.43.52l4,1.24,1.61,4.83a.62.62,0,0,0,.63.43.56.56,0,0,0,.4-.17L16.54,20l4.09,3A.9.9,0,0,0,21.11,23.15ZM13.8,20.71l-1.21-4q8.72-5.55,8.78-5.55c.15,0,.23,0,.23.16a.18.18,0,0,1,0,.06s-2.51,2.3-7.52,6.8Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share Tutorial: Move from NginxProxyManager to Nginx on ycombinator"
href="https://news.ycombinator.com/submitlink?t=Tutorial%3a%20Move%20from%20NginxProxyManager%20to%20Nginx&u=%2fposts%2fnpm_to_nginx_tutorial.html">
<svg version="1.1" xml:space="preserve" width="30px" height="30px" viewBox="0 0 512 512" fill="currentColor"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
<path
d="M449.446 0C483.971 0 512 28.03 512 62.554L512 449.446C512 483.97 483.97 512 449.446 512L62.554 512C28.03 512 0 483.97 0 449.446L0 62.554C0 28.03 28.029 0 62.554 0L449.446 0ZM183.8767 87.9921H121.8427L230.6673 292.4508V424.0079H281.3328V292.4508L390.1575 87.9921H328.1233L256 238.2489z" />
</svg>
</a>
</div>
</footer> </footer>
</article> </article>
</main> </main>

View File

@ -138,6 +138,11 @@ if (!doNotTrack) {
</div> </div>
</div> </div>
<ul id="menu"> <ul id="menu">
<li>
<a href="../posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
</header> </header>
@ -190,6 +195,60 @@ such a regular basis, I need to ensure the project pulls from Meshtastic command
</a> </a>
</nav> </nav>
<div class="share-buttons">
<a target="_blank" rel="noopener noreferrer" aria-label="share My First Merged PR! on twitter"
href="https://twitter.com/intent/tweet/?text=My%20First%20Merged%20PR%21&amp;url=%2fposts%2fwhiptail-first-merged-pr.html&amp;hashtags=git%2copensource%2cdiy">
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
<path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-253.927,424.544c135.939,0 210.268,-112.643 210.268,-210.268c0,-3.218 0,-6.437 -0.153,-9.502c14.406,-10.421 26.973,-23.448 36.935,-38.314c-13.18,5.824 -27.433,9.809 -42.452,11.648c15.326,-9.196 26.973,-23.602 32.49,-40.92c-14.252,8.429 -30.038,14.56 -46.896,17.931c-13.487,-14.406 -32.644,-23.295 -53.946,-23.295c-40.767,0 -73.87,33.104 -73.87,73.87c0,5.824 0.613,11.494 1.992,16.858c-61.456,-3.065 -115.862,-32.49 -152.337,-77.241c-6.284,10.881 -9.962,23.601 -9.962,37.088c0,25.594 13.027,48.276 32.95,61.456c-12.107,-0.307 -23.448,-3.678 -33.41,-9.196l0,0.92c0,35.862 25.441,65.594 59.311,72.49c-6.13,1.686 -12.72,2.606 -19.464,2.606c-4.751,0 -9.348,-0.46 -13.946,-1.38c9.349,29.426 36.628,50.728 68.965,51.341c-25.287,19.771 -57.164,31.571 -91.8,31.571c-5.977,0 -11.801,-0.306 -17.625,-1.073c32.337,21.15 71.264,33.41 112.95,33.41Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share My First Merged PR! on linkedin"
href="https://www.linkedin.com/shareArticle?mini=true&amp;url=%2fposts%2fwhiptail-first-merged-pr.html&amp;title=My%20First%20Merged%20PR%21&amp;summary=My%20First%20Merged%20PR%21&amp;source=%2fposts%2fwhiptail-first-merged-pr.html">
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
<path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-288.985,423.278l0,-225.717l-75.04,0l0,225.717l75.04,0Zm270.539,0l0,-129.439c0,-69.333 -37.018,-101.586 -86.381,-101.586c-39.804,0 -57.634,21.891 -67.617,37.266l0,-31.958l-75.021,0c0.995,21.181 0,225.717 0,225.717l75.02,0l0,-126.056c0,-6.748 0.486,-13.492 2.474,-18.315c5.414,-13.475 17.767,-27.434 38.494,-27.434c27.135,0 38.007,20.707 38.007,51.037l0,120.768l75.024,0Zm-307.552,-334.556c-25.674,0 -42.448,16.879 -42.448,39.002c0,21.658 16.264,39.002 41.455,39.002l0.484,0c26.165,0 42.452,-17.344 42.452,-39.002c-0.485,-22.092 -16.241,-38.954 -41.943,-39.002Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share My First Merged PR! on reddit"
href="https://reddit.com/submit?url=%2fposts%2fwhiptail-first-merged-pr.html&title=My%20First%20Merged%20PR%21">
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
<path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-3.446,265.638c0,-22.964 -18.616,-41.58 -41.58,-41.58c-11.211,0 -21.361,4.457 -28.841,11.666c-28.424,-20.508 -67.586,-33.757 -111.204,-35.278l18.941,-89.121l61.884,13.157c0.756,15.734 13.642,28.29 29.56,28.29c16.407,0 29.706,-13.299 29.706,-29.701c0,-16.403 -13.299,-29.702 -29.706,-29.702c-11.666,0 -21.657,6.792 -26.515,16.578l-69.105,-14.69c-1.922,-0.418 -3.939,-0.042 -5.585,1.036c-1.658,1.073 -2.811,2.761 -3.224,4.686l-21.152,99.438c-44.258,1.228 -84.046,14.494 -112.837,35.232c-7.468,-7.164 -17.589,-11.591 -28.757,-11.591c-22.965,0 -41.585,18.616 -41.585,41.58c0,16.896 10.095,31.41 24.568,37.918c-0.639,4.135 -0.99,8.328 -0.99,12.576c0,63.977 74.469,115.836 166.33,115.836c91.861,0 166.334,-51.859 166.334,-115.836c0,-4.218 -0.347,-8.387 -0.977,-12.493c14.564,-6.47 24.735,-21.034 24.735,-38.001Zm-119.474,108.193c-20.27,20.241 -59.115,21.816 -70.534,21.816c-11.428,0 -50.277,-1.575 -70.522,-21.82c-3.007,-3.008 -3.007,-7.882 0,-10.889c3.003,-2.999 7.882,-3.003 10.885,0c12.777,12.781 40.11,17.317 59.637,17.317c19.522,0 46.86,-4.536 59.657,-17.321c3.016,-2.999 7.886,-2.995 10.885,0.008c3.008,3.011 3.003,7.882 -0.008,10.889Zm-5.23,-48.781c-16.373,0 -29.701,-13.324 -29.701,-29.698c0,-16.381 13.328,-29.714 29.701,-29.714c16.378,0 29.706,13.333 29.706,29.714c0,16.374 -13.328,29.698 -29.706,29.698Zm-160.386,-29.702c0,-16.381 13.328,-29.71 29.714,-29.71c16.369,0 29.689,13.329 29.689,29.71c0,16.373 -13.32,29.693 -29.689,29.693c-16.386,0 -29.714,-13.32 -29.714,-29.693Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share My First Merged PR! on facebook"
href="https://facebook.com/sharer/sharer.php?u=%2fposts%2fwhiptail-first-merged-pr.html">
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
<path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-106.468,0l0,-192.915l66.6,0l12.672,-82.621l-79.272,0l0,-53.617c0,-22.603 11.073,-44.636 46.58,-44.636l36.042,0l0,-70.34c0,0 -32.71,-5.582 -63.982,-5.582c-65.288,0 -107.96,39.569 -107.96,111.204l0,62.971l-72.573,0l0,82.621l72.573,0l0,192.915l-191.104,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share My First Merged PR! on whatsapp"
href="https://api.whatsapp.com/send?text=My%20First%20Merged%20PR%21%20-%20%2fposts%2fwhiptail-first-merged-pr.html">
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
<path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-58.673,127.703c-33.842,-33.881 -78.847,-52.548 -126.798,-52.568c-98.799,0 -179.21,80.405 -179.249,179.234c-0.013,31.593 8.241,62.428 23.927,89.612l-25.429,92.884l95.021,-24.925c26.181,14.28 55.659,21.807 85.658,21.816l0.074,0c98.789,0 179.206,-80.413 179.247,-179.243c0.018,-47.895 -18.61,-92.93 -52.451,-126.81Zm-126.797,275.782l-0.06,0c-26.734,-0.01 -52.954,-7.193 -75.828,-20.767l-5.441,-3.229l-56.386,14.792l15.05,-54.977l-3.542,-5.637c-14.913,-23.72 -22.791,-51.136 -22.779,-79.287c0.033,-82.142 66.867,-148.971 149.046,-148.971c39.793,0.014 77.199,15.531 105.329,43.692c28.128,28.16 43.609,65.592 43.594,105.4c-0.034,82.149 -66.866,148.983 -148.983,148.984Zm81.721,-111.581c-4.479,-2.242 -26.499,-13.075 -30.604,-14.571c-4.105,-1.495 -7.091,-2.241 -10.077,2.241c-2.986,4.483 -11.569,14.572 -14.182,17.562c-2.612,2.988 -5.225,3.364 -9.703,1.12c-4.479,-2.241 -18.91,-6.97 -36.017,-22.23c-13.314,-11.876 -22.304,-26.542 -24.916,-31.026c-2.612,-4.484 -0.279,-6.908 1.963,-9.14c2.016,-2.007 4.48,-5.232 6.719,-7.847c2.24,-2.615 2.986,-4.484 4.479,-7.472c1.493,-2.99 0.747,-5.604 -0.374,-7.846c-1.119,-2.241 -10.077,-24.288 -13.809,-33.256c-3.635,-8.733 -7.327,-7.55 -10.077,-7.688c-2.609,-0.13 -5.598,-0.158 -8.583,-0.158c-2.986,0 -7.839,1.121 -11.944,5.604c-4.105,4.484 -15.675,15.32 -15.675,37.364c0,22.046 16.048,43.342 18.287,46.332c2.24,2.99 31.582,48.227 76.511,67.627c10.685,4.615 19.028,7.371 25.533,9.434c10.728,3.41 20.492,2.929 28.209,1.775c8.605,-1.285 26.499,-10.833 30.231,-21.295c3.732,-10.464 3.732,-19.431 2.612,-21.298c-1.119,-1.869 -4.105,-2.99 -8.583,-5.232Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share My First Merged PR! on telegram"
href="https://telegram.me/share/url?text=My%20First%20Merged%20PR%21&amp;url=%2fposts%2fwhiptail-first-merged-pr.html">
<svg version="1.1" xml:space="preserve" viewBox="2 2 28 28" height="30px" width="30px" fill="currentColor">
<path
d="M26.49,29.86H5.5a3.37,3.37,0,0,1-2.47-1,3.35,3.35,0,0,1-1-2.47V5.48A3.36,3.36,0,0,1,3,3,3.37,3.37,0,0,1,5.5,2h21A3.38,3.38,0,0,1,29,3a3.36,3.36,0,0,1,1,2.46V26.37a3.35,3.35,0,0,1-1,2.47A3.38,3.38,0,0,1,26.49,29.86Zm-5.38-6.71a.79.79,0,0,0,.85-.66L24.73,9.24a.55.55,0,0,0-.18-.46.62.62,0,0,0-.41-.17q-.08,0-16.53,6.11a.59.59,0,0,0-.41.59.57.57,0,0,0,.43.52l4,1.24,1.61,4.83a.62.62,0,0,0,.63.43.56.56,0,0,0,.4-.17L16.54,20l4.09,3A.9.9,0,0,0,21.11,23.15ZM13.8,20.71l-1.21-4q8.72-5.55,8.78-5.55c.15,0,.23,0,.23.16a.18.18,0,0,1,0,.06s-2.51,2.3-7.52,6.8Z" />
</svg>
</a>
<a target="_blank" rel="noopener noreferrer" aria-label="share My First Merged PR! on ycombinator"
href="https://news.ycombinator.com/submitlink?t=My%20First%20Merged%20PR%21&u=%2fposts%2fwhiptail-first-merged-pr.html">
<svg version="1.1" xml:space="preserve" width="30px" height="30px" viewBox="0 0 512 512" fill="currentColor"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
<path
d="M449.446 0C483.971 0 512 28.03 512 62.554L512 449.446C512 483.97 483.97 512 449.446 512L62.554 512C28.03 512 0 483.97 0 449.446L0 62.554C0 28.03 28.029 0 62.554 0L449.446 0ZM183.8767 87.9921H121.8427L230.6673 292.4508V424.0079H281.3328V292.4508L390.1575 87.9921H328.1233L256 238.2489z" />
</svg>
</a>
</div>
</footer> </footer>
</article> </article>
</main> </main>

3
public/robots.txt Normal file
View File

@ -0,0 +1,3 @@
User-agent: *
Disallow:
Sitemap: /sitemap.xml

175
public/series.html Normal file
View File

@ -0,0 +1,175 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Series | Norm-working Packets 💾</title>
<meta name="keywords" content="">
<meta name="description" content="A semi-technical blog &amp; series of experiences working in tech and my homelab">
<meta name="author" content="Norm Rasmussen">
<link rel="canonical" href="./series.html">
<link crossorigin="anonymous" href="./assets/css/stylesheet.5cfc680b1eeaeef9efbced92d46c2a9e876b72ee14fba85846afc4cff9e6e6f8.css" integrity="sha256-XPxoCx7q7vnvvO2S1Gwqnodrcu4U&#43;6hYRq/Ez/nm5vg=" rel="preload stylesheet" as="style">
<link rel="icon" href="./favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="./favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="./rsmsncircles.ico">
<link rel="apple-touch-icon" href="./apple-touch-icon.png">
<link rel="mask-icon" href="./safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="./series/index.xml">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X8VR5M0K20"></script>
<script>
var doNotTrack = false;
if (!doNotTrack) {
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-X8VR5M0K20', { 'anonymize_ip': false });
}
</script>
<meta property="og:title" content="Series" />
<meta property="og:description" content="A semi-technical blog &amp; series of experiences working in tech and my homelab" />
<meta property="og:type" content="website" />
<meta property="og:url" content="/series.html" /><meta property="og:site_name" content="Norm-working Packets" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Series"/>
<meta name="twitter:description" content="A semi-technical blog &amp; series of experiences working in tech and my homelab"/>
</head>
<body class="list dark" id="top">
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="./" accesskey="h" title="Norm-working Packets 💾 (Alt + H)">Norm-working Packets 💾</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="./posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<header class="page-header">
<h1>Series</h1>
</header>
<ul class="terms-tags">
</ul>
</main>
<footer class="footer">
<span>&copy; 2023 <a href="./">Norm-working Packets 💾</a></span>
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>

10
public/series/index.xml Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Series on Norm-working Packets 💾</title>
<link>/series.html</link>
<description>Recent content in Series on Norm-working Packets 💾</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language><atom:link href="/series/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>

View File

@ -2,6 +2,39 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"> xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url> <url>
<loc>/posts/birdnet_homeassistant_part2.html</loc>
<lastmod>2023-10-04T10:35:23-04:00</lastmod>
</url><url>
<loc>/categories.html</loc>
<lastmod>2023-10-04T10:35:23-04:00</lastmod>
</url><url>
<loc>/tags/diy.html</loc>
<lastmod>2023-10-04T10:35:23-04:00</lastmod>
</url><url>
<loc>/tags/homeassistant.html</loc>
<lastmod>2023-10-04T10:35:23-04:00</lastmod>
</url><url>
<loc>/</loc>
<lastmod>2023-10-04T10:35:23-04:00</lastmod>
</url><url>
<loc>/posts.html</loc>
<lastmod>2023-10-04T10:35:23-04:00</lastmod>
</url><url>
<loc>/tags/selfhosted.html</loc>
<lastmod>2023-10-04T10:35:23-04:00</lastmod>
</url><url>
<loc>/tags.html</loc>
<lastmod>2023-10-04T10:35:23-04:00</lastmod>
</url><url>
<loc>/categories/tutorial.html</loc>
<lastmod>2023-10-04T10:35:23-04:00</lastmod>
</url><url>
<loc>/posts/birdnet_homeassistant.html</loc>
<lastmod>2023-09-30T11:21:55-04:00</lastmod>
</url><url>
<loc>/tags/python.html</loc>
<lastmod>2023-09-30T11:21:55-04:00</lastmod>
</url><url>
<loc>/tags/backups.html</loc> <loc>/tags/backups.html</loc>
<lastmod>2023-09-22T15:07:10-04:00</lastmod> <lastmod>2023-09-22T15:07:10-04:00</lastmod>
</url><url> </url><url>
@ -10,27 +43,15 @@
</url><url> </url><url>
<loc>/tags/git.html</loc> <loc>/tags/git.html</loc>
<lastmod>2023-09-22T15:07:10-04:00</lastmod> <lastmod>2023-09-22T15:07:10-04:00</lastmod>
</url><url>
<loc>/</loc>
<lastmod>2023-09-22T15:07:10-04:00</lastmod>
</url><url>
<loc>/posts.html</loc>
<lastmod>2023-09-22T15:07:10-04:00</lastmod>
</url><url> </url><url>
<loc>/posts/multiple_git_remotes.html</loc> <loc>/posts/multiple_git_remotes.html</loc>
<lastmod>2023-09-22T15:07:10-04:00</lastmod> <lastmod>2023-09-22T15:07:10-04:00</lastmod>
</url><url>
<loc>/tags.html</loc>
<lastmod>2023-09-22T15:07:10-04:00</lastmod>
</url><url> </url><url>
<loc>/posts/hosting_hugo_troubles.html</loc> <loc>/posts/hosting_hugo_troubles.html</loc>
<lastmod>2023-09-20T11:33:22-04:00</lastmod> <lastmod>2023-09-20T11:33:22-04:00</lastmod>
</url><url> </url><url>
<loc>/posts/npm_to_nginx_tutorial.html</loc> <loc>/posts/npm_to_nginx_tutorial.html</loc>
<lastmod>2023-08-05T15:23:51-05:00</lastmod> <lastmod>2023-08-05T15:23:51-05:00</lastmod>
</url><url>
<loc>/tags/diy.html</loc>
<lastmod>2022-09-01T13:25:02-04:00</lastmod>
</url><url> </url><url>
<loc>/posts/whiptail-first-merged-pr.html</loc> <loc>/posts/whiptail-first-merged-pr.html</loc>
<lastmod>2022-09-01T13:25:02-04:00</lastmod> <lastmod>2022-09-01T13:25:02-04:00</lastmod>
@ -38,6 +59,6 @@
<loc>/tags/opensource.html</loc> <loc>/tags/opensource.html</loc>
<lastmod>2022-09-01T13:25:02-04:00</lastmod> <lastmod>2022-09-01T13:25:02-04:00</lastmod>
</url><url> </url><url>
<loc>/categories.html</loc> <loc>/series.html</loc>
</url> </url>
</urlset> </urlset>

View File

@ -85,6 +85,11 @@ if (!doNotTrack) {
</div> </div>
</div> </div>
<ul id="menu"> <ul id="menu">
<li>
<a href="./posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
</header> </header>
@ -101,14 +106,23 @@ if (!doNotTrack) {
<a href="./tags/commandline.html">commandline <sup><strong><sup>3</sup></strong></sup> </a> <a href="./tags/commandline.html">commandline <sup><strong><sup>3</sup></strong></sup> </a>
</li> </li>
<li> <li>
<a href="./tags/diy.html">diy <sup><strong><sup>1</sup></strong></sup> </a> <a href="./tags/diy.html">diy <sup><strong><sup>3</sup></strong></sup> </a>
</li> </li>
<li> <li>
<a href="./tags/git.html">git <sup><strong><sup>4</sup></strong></sup> </a> <a href="./tags/git.html">git <sup><strong><sup>4</sup></strong></sup> </a>
</li> </li>
<li>
<a href="./tags/homeassistant.html">homeassistant <sup><strong><sup>2</sup></strong></sup> </a>
</li>
<li> <li>
<a href="./tags/opensource.html">opensource <sup><strong><sup>1</sup></strong></sup> </a> <a href="./tags/opensource.html">opensource <sup><strong><sup>1</sup></strong></sup> </a>
</li> </li>
<li>
<a href="./tags/python.html">python <sup><strong><sup>1</sup></strong></sup> </a>
</li>
<li>
<a href="./tags/selfhosted.html">selfhosted <sup><strong><sup>1</sup></strong></sup> </a>
</li>
</ul> </ul>
</main> </main>

View File

@ -85,11 +85,16 @@ if (!doNotTrack) {
</div> </div>
</div> </div>
<ul id="menu"> <ul id="menu">
<li>
<a href="../posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
</header> </header>
<main class="main"> <main class="main">
<header class="page-header"> <header class="page-header"><div class="breadcrumbs"><a href="../">Home</a></div>
<h1> <h1>
backups backups
</h1> </h1>
@ -111,6 +116,8 @@ I really enjoy self-hosting services that I use everyday. One of those includes
</article> </article>
<article class="post-entry tag-entry"> <article class="post-entry tag-entry">
<figure class="entry-cover"><img loading="lazy" src="../hugo-nginx-trouble.png" alt="Hugo Logo, Nginx Logo, Tired Face emoji">
</figure>
<header class="entry-header"> <header class="entry-header">
<h2>Trouble Hosting Hugo with Nginx <h2>Trouble Hosting Hugo with Nginx
</h2> </h2>

View File

@ -85,11 +85,16 @@ if (!doNotTrack) {
</div> </div>
</div> </div>
<ul id="menu"> <ul id="menu">
<li>
<a href="../posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
</header> </header>
<main class="main"> <main class="main">
<header class="page-header"> <header class="page-header"><div class="breadcrumbs"><a href="../">Home</a></div>
<h1> <h1>
commandline commandline
</h1> </h1>
@ -111,6 +116,8 @@ I really enjoy self-hosting services that I use everyday. One of those includes
</article> </article>
<article class="post-entry tag-entry"> <article class="post-entry tag-entry">
<figure class="entry-cover"><img loading="lazy" src="../hugo-nginx-trouble.png" alt="Hugo Logo, Nginx Logo, Tired Face emoji">
</figure>
<header class="entry-header"> <header class="entry-header">
<h2>Trouble Hosting Hugo with Nginx <h2>Trouble Hosting Hugo with Nginx
</h2> </h2>

View File

@ -85,16 +85,51 @@ if (!doNotTrack) {
</div> </div>
</div> </div>
<ul id="menu"> <ul id="menu">
<li>
<a href="../posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
</header> </header>
<main class="main"> <main class="main">
<header class="page-header"> <header class="page-header"><div class="breadcrumbs"><a href="../">Home</a></div>
<h1> <h1>
diy diy
</h1> </h1>
</header> </header>
<article class="post-entry tag-entry">
<figure class="entry-cover"><img loading="lazy" src="../birdnet-homeassistant-part2.png" alt="Part 2 of my foray into HomeAssistant dashboard featuring BirdNET-Pi Sensors">
</figure>
<header class="entry-header">
<h2>BirdNET-PI &amp; HomeAssistant: Part 2
</h2>
</header>
<div class="entry-content">
<p>Checking for Entities If youre following up on this from my first post, youve already added your AppDaemon script and confirmed that the AppDaemon logs dont show any errors. Now is the true test if its working: do you have the new sensors in HomeAssistant?!
The best way to do this is by just type e from any screen in the HomeAssistant UI! That will bring up a list of entities....</p>
</div>
<footer class="entry-footer"><span title='2023-10-04 10:35:23 -0400 EDT'>October 4, 2023</span>&nbsp;·&nbsp;10 min&nbsp;·&nbsp;1986 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to BirdNET-PI &amp; HomeAssistant: Part 2" href="../posts/birdnet_homeassistant_part2.html"></a>
</article>
<article class="post-entry tag-entry">
<figure class="entry-cover"><img loading="lazy" src="../birdnet-homeassistant.png" alt="BirdNET-Pi and HomeAssistant: Happier together!">
</figure>
<header class="entry-header">
<h2>Creating a BirdNetPi Dashboard in HomeAssistant - Part 1
</h2>
</header>
<div class="entry-content">
<p>This is Part One of a Two Part Series. You can find Part Two, here.
What you will need BirdNET-Pi HomeAssistant AppDaemon MQTT Broker (I use Mosquitto) Background In early 2023, at the height of the Raspberry Pi shortage I felt like a king with an extra Rpi laying around, not being used. Im a big fan of any sort of passive intake of information and had been looking around for various citizen science-style projects that can capture information from the world around me....</p>
</div>
<footer class="entry-footer"><span title='2023-09-30 11:21:55 -0400 EDT'>September 30, 2023</span>&nbsp;·&nbsp;10 min&nbsp;·&nbsp;1953 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Creating a BirdNetPi Dashboard in HomeAssistant - Part 1" href="../posts/birdnet_homeassistant.html"></a>
</article>
<article class="post-entry tag-entry"> <article class="post-entry tag-entry">
<figure class="entry-cover"><img loading="lazy" src="../merged-pr-accepted.png" alt="Git Pull Request with an arrow pointing to a check mark"> <figure class="entry-cover"><img loading="lazy" src="../merged-pr-accepted.png" alt="Git Pull Request with an arrow pointing to a check mark">
</figure> </figure>

View File

@ -6,7 +6,25 @@
<description>Recent content in diy on Norm-working Packets 💾</description> <description>Recent content in diy on Norm-working Packets 💾</description>
<generator>Hugo -- gohugo.io</generator> <generator>Hugo -- gohugo.io</generator>
<language>en-us</language> <language>en-us</language>
<lastBuildDate>Thu, 01 Sep 2022 13:25:02 -0400</lastBuildDate><atom:link href="/tags/diy/index.xml" rel="self" type="application/rss+xml" /> <lastBuildDate>Wed, 04 Oct 2023 10:35:23 -0400</lastBuildDate><atom:link href="/tags/diy/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>BirdNET-PI &amp; HomeAssistant: Part 2</title>
<link>/posts/birdnet_homeassistant_part2.html</link>
<pubDate>Wed, 04 Oct 2023 10:35:23 -0400</pubDate>
<guid>/posts/birdnet_homeassistant_part2.html</guid>
<description>A Follow up from the previous post, this tutorial takes all the sensors we created and loads them into a beautiful dashboard!</description>
</item>
<item>
<title>Creating a BirdNetPi Dashboard in HomeAssistant - Part 1</title>
<link>/posts/birdnet_homeassistant.html</link>
<pubDate>Sat, 30 Sep 2023 11:21:55 -0400</pubDate>
<guid>/posts/birdnet_homeassistant.html</guid>
<description>Learn how to take BirdNET-Pi Detections to create and display entities in HomeAssistant.</description>
</item>
<item> <item>
<title>My First Merged PR!</title> <title>My First Merged PR!</title>
<link>/posts/whiptail-first-merged-pr.html</link> <link>/posts/whiptail-first-merged-pr.html</link>

View File

@ -85,11 +85,16 @@ if (!doNotTrack) {
</div> </div>
</div> </div>
<ul id="menu"> <ul id="menu">
<li>
<a href="../posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
</header> </header>
<main class="main"> <main class="main">
<header class="page-header"> <header class="page-header"><div class="breadcrumbs"><a href="../">Home</a></div>
<h1> <h1>
git git
</h1> </h1>
@ -111,6 +116,8 @@ I really enjoy self-hosting services that I use everyday. One of those includes
</article> </article>
<article class="post-entry tag-entry"> <article class="post-entry tag-entry">
<figure class="entry-cover"><img loading="lazy" src="../hugo-nginx-trouble.png" alt="Hugo Logo, Nginx Logo, Tired Face emoji">
</figure>
<header class="entry-header"> <header class="entry-header">
<h2>Trouble Hosting Hugo with Nginx <h2>Trouble Hosting Hugo with Nginx
</h2> </h2>

View File

@ -85,16 +85,36 @@ if (!doNotTrack) {
</div> </div>
</div> </div>
<ul id="menu"> <ul id="menu">
<li>
<a href="../posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
</header> </header>
<main class="main"> <main class="main">
<header class="page-header"> <header class="page-header"><div class="breadcrumbs"><a href="../">Home</a></div>
<h1> <h1>
homeassistant homeassistant
</h1> </h1>
</header> </header>
<article class="post-entry tag-entry">
<figure class="entry-cover"><img loading="lazy" src="../birdnet-homeassistant-part2.png" alt="Part 2 of my foray into HomeAssistant dashboard featuring BirdNET-Pi Sensors">
</figure>
<header class="entry-header">
<h2>BirdNET-PI &amp; HomeAssistant: Part 2
</h2>
</header>
<div class="entry-content">
<p>Checking for Entities If youre following up on this from my first post, youve already added your AppDaemon script and confirmed that the AppDaemon logs dont show any errors. Now is the true test if its working: do you have the new sensors in HomeAssistant?!
The best way to do this is by just type e from any screen in the HomeAssistant UI! That will bring up a list of entities....</p>
</div>
<footer class="entry-footer"><span title='2023-10-04 10:35:23 -0400 EDT'>October 4, 2023</span>&nbsp;·&nbsp;10 min&nbsp;·&nbsp;1986 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to BirdNET-PI &amp; HomeAssistant: Part 2" href="../posts/birdnet_homeassistant_part2.html"></a>
</article>
<article class="post-entry tag-entry"> <article class="post-entry tag-entry">
<figure class="entry-cover"><img loading="lazy" src="../birdnet-homeassistant.png" alt="BirdNET-Pi and HomeAssistant: Happier together!"> <figure class="entry-cover"><img loading="lazy" src="../birdnet-homeassistant.png" alt="BirdNET-Pi and HomeAssistant: Happier together!">
</figure> </figure>
@ -106,7 +126,7 @@ if (!doNotTrack) {
<p>This is Part One of a Two Part Series. You can find Part Two, here. <p>This is Part One of a Two Part Series. You can find Part Two, here.
What you will need BirdNET-Pi HomeAssistant AppDaemon MQTT Broker (I use Mosquitto) Background In early 2023, at the height of the Raspberry Pi shortage I felt like a king with an extra Rpi laying around, not being used. Im a big fan of any sort of passive intake of information and had been looking around for various citizen science-style projects that can capture information from the world around me....</p> What you will need BirdNET-Pi HomeAssistant AppDaemon MQTT Broker (I use Mosquitto) Background In early 2023, at the height of the Raspberry Pi shortage I felt like a king with an extra Rpi laying around, not being used. Im a big fan of any sort of passive intake of information and had been looking around for various citizen science-style projects that can capture information from the world around me....</p>
</div> </div>
<footer class="entry-footer"><span title='2023-09-25 12:51:55 -0400 EDT'>September 25, 2023</span>&nbsp;·&nbsp;10 min&nbsp;·&nbsp;1953 words&nbsp;·&nbsp;Me</footer> <footer class="entry-footer"><span title='2023-09-30 11:21:55 -0400 EDT'>September 30, 2023</span>&nbsp;·&nbsp;10 min&nbsp;·&nbsp;1953 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Creating a BirdNetPi Dashboard in HomeAssistant - Part 1" href="../posts/birdnet_homeassistant.html"></a> <a class="entry-link" aria-label="post link to Creating a BirdNetPi Dashboard in HomeAssistant - Part 1" href="../posts/birdnet_homeassistant.html"></a>
</article> </article>
</main> </main>

View File

@ -6,11 +6,20 @@
<description>Recent content in homeassistant on Norm-working Packets 💾</description> <description>Recent content in homeassistant on Norm-working Packets 💾</description>
<generator>Hugo -- gohugo.io</generator> <generator>Hugo -- gohugo.io</generator>
<language>en-us</language> <language>en-us</language>
<lastBuildDate>Mon, 25 Sep 2023 12:51:55 -0400</lastBuildDate><atom:link href="/tags/homeassistant/index.xml" rel="self" type="application/rss+xml" /> <lastBuildDate>Wed, 04 Oct 2023 10:35:23 -0400</lastBuildDate><atom:link href="/tags/homeassistant/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>BirdNET-PI &amp; HomeAssistant: Part 2</title>
<link>/posts/birdnet_homeassistant_part2.html</link>
<pubDate>Wed, 04 Oct 2023 10:35:23 -0400</pubDate>
<guid>/posts/birdnet_homeassistant_part2.html</guid>
<description>A Follow up from the previous post, this tutorial takes all the sensors we created and loads them into a beautiful dashboard!</description>
</item>
<item> <item>
<title>Creating a BirdNetPi Dashboard in HomeAssistant - Part 1</title> <title>Creating a BirdNetPi Dashboard in HomeAssistant - Part 1</title>
<link>/posts/birdnet_homeassistant.html</link> <link>/posts/birdnet_homeassistant.html</link>
<pubDate>Mon, 25 Sep 2023 12:51:55 -0400</pubDate> <pubDate>Sat, 30 Sep 2023 11:21:55 -0400</pubDate>
<guid>/posts/birdnet_homeassistant.html</guid> <guid>/posts/birdnet_homeassistant.html</guid>
<description>Learn how to take BirdNET-Pi Detections to create and display entities in HomeAssistant.</description> <description>Learn how to take BirdNET-Pi Detections to create and display entities in HomeAssistant.</description>

View File

@ -6,7 +6,43 @@
<description>Recent content in Tags on Norm-working Packets 💾</description> <description>Recent content in Tags on Norm-working Packets 💾</description>
<generator>Hugo -- gohugo.io</generator> <generator>Hugo -- gohugo.io</generator>
<language>en-us</language> <language>en-us</language>
<lastBuildDate>Fri, 22 Sep 2023 15:07:10 -0400</lastBuildDate><atom:link href="/tags/index.xml" rel="self" type="application/rss+xml" /> <lastBuildDate>Wed, 04 Oct 2023 10:35:23 -0400</lastBuildDate><atom:link href="/tags/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>diy</title>
<link>/tags/diy.html</link>
<pubDate>Wed, 04 Oct 2023 10:35:23 -0400</pubDate>
<guid>/tags/diy.html</guid>
<description></description>
</item>
<item>
<title>homeassistant</title>
<link>/tags/homeassistant.html</link>
<pubDate>Wed, 04 Oct 2023 10:35:23 -0400</pubDate>
<guid>/tags/homeassistant.html</guid>
<description></description>
</item>
<item>
<title>selfhosted</title>
<link>/tags/selfhosted.html</link>
<pubDate>Wed, 04 Oct 2023 10:35:23 -0400</pubDate>
<guid>/tags/selfhosted.html</guid>
<description></description>
</item>
<item>
<title>python</title>
<link>/tags/python.html</link>
<pubDate>Sat, 30 Sep 2023 11:21:55 -0400</pubDate>
<guid>/tags/python.html</guid>
<description></description>
</item>
<item> <item>
<title>backups</title> <title>backups</title>
<link>/tags/backups.html</link> <link>/tags/backups.html</link>
@ -34,15 +70,6 @@
<description></description> <description></description>
</item> </item>
<item>
<title>diy</title>
<link>/tags/diy.html</link>
<pubDate>Thu, 01 Sep 2022 13:25:02 -0400</pubDate>
<guid>/tags/diy.html</guid>
<description></description>
</item>
<item> <item>
<title>opensource</title> <title>opensource</title>
<link>/tags/opensource.html</link> <link>/tags/opensource.html</link>

View File

@ -85,11 +85,16 @@ if (!doNotTrack) {
</div> </div>
</div> </div>
<ul id="menu"> <ul id="menu">
<li>
<a href="../posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
</header> </header>
<main class="main"> <main class="main">
<header class="page-header"> <header class="page-header"><div class="breadcrumbs"><a href="../">Home</a></div>
<h1> <h1>
opensource opensource
</h1> </h1>

View File

@ -85,11 +85,16 @@ if (!doNotTrack) {
</div> </div>
</div> </div>
<ul id="menu"> <ul id="menu">
<li>
<a href="../posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
</header> </header>
<main class="main"> <main class="main">
<header class="page-header"> <header class="page-header"><div class="breadcrumbs"><a href="../">Home</a></div>
<h1> <h1>
python python
</h1> </h1>
@ -106,7 +111,7 @@ if (!doNotTrack) {
<p>This is Part One of a Two Part Series. You can find Part Two, here. <p>This is Part One of a Two Part Series. You can find Part Two, here.
What you will need BirdNET-Pi HomeAssistant AppDaemon MQTT Broker (I use Mosquitto) Background In early 2023, at the height of the Raspberry Pi shortage I felt like a king with an extra Rpi laying around, not being used. Im a big fan of any sort of passive intake of information and had been looking around for various citizen science-style projects that can capture information from the world around me....</p> What you will need BirdNET-Pi HomeAssistant AppDaemon MQTT Broker (I use Mosquitto) Background In early 2023, at the height of the Raspberry Pi shortage I felt like a king with an extra Rpi laying around, not being used. Im a big fan of any sort of passive intake of information and had been looking around for various citizen science-style projects that can capture information from the world around me....</p>
</div> </div>
<footer class="entry-footer"><span title='2023-09-25 12:51:55 -0400 EDT'>September 25, 2023</span>&nbsp;·&nbsp;10 min&nbsp;·&nbsp;1953 words&nbsp;·&nbsp;Me</footer> <footer class="entry-footer"><span title='2023-09-30 11:21:55 -0400 EDT'>September 30, 2023</span>&nbsp;·&nbsp;10 min&nbsp;·&nbsp;1953 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Creating a BirdNetPi Dashboard in HomeAssistant - Part 1" href="../posts/birdnet_homeassistant.html"></a> <a class="entry-link" aria-label="post link to Creating a BirdNetPi Dashboard in HomeAssistant - Part 1" href="../posts/birdnet_homeassistant.html"></a>
</article> </article>
</main> </main>

View File

@ -6,11 +6,11 @@
<description>Recent content in python on Norm-working Packets 💾</description> <description>Recent content in python on Norm-working Packets 💾</description>
<generator>Hugo -- gohugo.io</generator> <generator>Hugo -- gohugo.io</generator>
<language>en-us</language> <language>en-us</language>
<lastBuildDate>Mon, 25 Sep 2023 12:51:55 -0400</lastBuildDate><atom:link href="/tags/python/index.xml" rel="self" type="application/rss+xml" /> <lastBuildDate>Sat, 30 Sep 2023 11:21:55 -0400</lastBuildDate><atom:link href="/tags/python/index.xml" rel="self" type="application/rss+xml" />
<item> <item>
<title>Creating a BirdNetPi Dashboard in HomeAssistant - Part 1</title> <title>Creating a BirdNetPi Dashboard in HomeAssistant - Part 1</title>
<link>/posts/birdnet_homeassistant.html</link> <link>/posts/birdnet_homeassistant.html</link>
<pubDate>Mon, 25 Sep 2023 12:51:55 -0400</pubDate> <pubDate>Sat, 30 Sep 2023 11:21:55 -0400</pubDate>
<guid>/posts/birdnet_homeassistant.html</guid> <guid>/posts/birdnet_homeassistant.html</guid>
<description>Learn how to take BirdNET-Pi Detections to create and display entities in HomeAssistant.</description> <description>Learn how to take BirdNET-Pi Detections to create and display entities in HomeAssistant.</description>

189
public/tags/selfhosted.html Normal file
View File

@ -0,0 +1,189 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>selfhosted | Norm-working Packets 💾</title>
<meta name="keywords" content="">
<meta name="description" content="A semi-technical blog &amp; series of experiences working in tech and my homelab">
<meta name="author" content="Norm Rasmussen">
<link rel="canonical" href="../tags/selfhosted.html">
<link crossorigin="anonymous" href="../assets/css/stylesheet.5cfc680b1eeaeef9efbced92d46c2a9e876b72ee14fba85846afc4cff9e6e6f8.css" integrity="sha256-XPxoCx7q7vnvvO2S1Gwqnodrcu4U&#43;6hYRq/Ez/nm5vg=" rel="preload stylesheet" as="style">
<link rel="icon" href="../favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="../rsmsncircles.ico">
<link rel="apple-touch-icon" href="../apple-touch-icon.png">
<link rel="mask-icon" href="../safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="../tags/selfhosted/index.xml">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X8VR5M0K20"></script>
<script>
var doNotTrack = false;
if (!doNotTrack) {
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-X8VR5M0K20', { 'anonymize_ip': false });
}
</script>
<meta property="og:title" content="selfhosted" />
<meta property="og:description" content="A semi-technical blog &amp; series of experiences working in tech and my homelab" />
<meta property="og:type" content="website" />
<meta property="og:url" content="/tags/selfhosted.html" /><meta property="og:site_name" content="Norm-working Packets" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="selfhosted"/>
<meta name="twitter:description" content="A semi-technical blog &amp; series of experiences working in tech and my homelab"/>
</head>
<body class="list dark" id="top">
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="../" accesskey="h" title="Norm-working Packets 💾 (Alt + H)">Norm-working Packets 💾</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="../posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<header class="page-header"><div class="breadcrumbs"><a href="../">Home</a></div>
<h1>
selfhosted
</h1>
</header>
<article class="post-entry tag-entry">
<figure class="entry-cover"><img loading="lazy" src="../birdnet-homeassistant-part2.png" alt="Part 2 of my foray into HomeAssistant dashboard featuring BirdNET-Pi Sensors">
</figure>
<header class="entry-header">
<h2>BirdNET-PI &amp; HomeAssistant: Part 2
</h2>
</header>
<div class="entry-content">
<p>Checking for Entities If youre following up on this from my first post, youve already added your AppDaemon script and confirmed that the AppDaemon logs dont show any errors. Now is the true test if its working: do you have the new sensors in HomeAssistant?!
The best way to do this is by just type e from any screen in the HomeAssistant UI! That will bring up a list of entities....</p>
</div>
<footer class="entry-footer"><span title='2023-10-04 10:35:23 -0400 EDT'>October 4, 2023</span>&nbsp;·&nbsp;10 min&nbsp;·&nbsp;1986 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to BirdNET-PI &amp; HomeAssistant: Part 2" href="../posts/birdnet_homeassistant_part2.html"></a>
</article>
</main>
<footer class="footer">
<span>&copy; 2023 <a href="../">Norm-working Packets 💾</a></span>
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>selfhosted on Norm-working Packets 💾</title>
<link>/tags/selfhosted.html</link>
<description>Recent content in selfhosted on Norm-working Packets 💾</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<lastBuildDate>Wed, 04 Oct 2023 10:35:23 -0400</lastBuildDate><atom:link href="/tags/selfhosted/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>BirdNET-PI &amp; HomeAssistant: Part 2</title>
<link>/posts/birdnet_homeassistant_part2.html</link>
<pubDate>Wed, 04 Oct 2023 10:35:23 -0400</pubDate>
<guid>/posts/birdnet_homeassistant_part2.html</guid>
<description>A Follow up from the previous post, this tutorial takes all the sensors we created and loads them into a beautiful dashboard!</description>
</item>
</channel>
</rss>

View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<title>/tags/selfhosted.html</title>
<link rel="canonical" href="../../../tags/selfhosted.html">
<meta name="robots" content="noindex">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=../../../tags/selfhosted.html">
</head>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB