@ -0,0 +1,28 @@ |
||||
Title: Fake Dog for Home Security |
||||
Date: 2022-06-27 |
||||
Category: Creations |
||||
Summary: Fake dog barking for home security while on vacation. |
||||
Short: 7 |
||||
|
||||
I set up a fake dog that barks if my surveillance cameras are triggered while I'm out of town on vacation. It's a pair of computer speakers plugged into a Raspberry Pi, which is an inexpensive single-board computer. One speaker faces the front door and the other faces the side door. |
||||
|
||||
When the front door camera is triggered my surveillance camera system sends a message to the Raspberry Pi. A simple program plays an audio clip of a big dog barking through the side speaker and then the front speaker. The change in speakers simulates a dog moving towards the front door. The opposite happens if the side door camera is triggered. |
||||
|
||||
You can find the [source code](https://git.tannercollin.com/tanner/woof) on my Gitea. |
||||
|
||||
![[fake-dog.jpg]] |
||||
|
||||
## Technical Details |
||||
My surveillance cameras sit on a separate network without internet access and their RTSP streams are consumed by the Blue Iris NVR software running on a dedicated Windows box. When an object is detected moving through a defined area for certain cameras, Blue Iris is configured to send an MQTT message to the `iot/cameras` topic via the Mosquitto broker running on my media server. |
||||
|
||||
A Python script kept alive by Supervisor runs on the Raspberry Pi and listens to the topic using the `asyncio-mqtt` module. It receives and tries to decode a json message like `{"serial": "SE-N-ZoneB"}`. If the camera's serial is found in a dict at the top of the script, the corresponding audio file is played using Pygame. Controlling which speaker barks is done by muting the left or right channel in the stereo audio file. |
||||
|
||||
![[fake-dog2.png]] |
||||
## Efficacy |
||||
So is it worth it? According to [former burglars](https://news.t0.vc/TRMA), barking dogs and security cameras are some of the best deterrents to home invasions. The dog sounds kind of fake to me, but I know it isn't real. I'm hoping that a rushing burglar won't spend time pondering if the barking is from an elaborate speaker setup and will just move on to a different house. |
||||
|
||||
Is it needed in my neighbourhood? I think so. I already caught a prowler who went in my backyard and checked my garage door handle to see if it was locked. He then broke into my neighbour's truck and garage after. If you know this guy, shoot me an email: |
||||
|
||||
![[fake-dog3.jpg]] |
||||
|
||||
The extra peace of mind while I'm away is worth the evening it took to set up. It was very easy to make because I reused the code I wrote for [[Protospace]]'s PA system doorbell that you can find on [GitHub](https://github.com/protospace/doorbell). It operates similarly by playing an audio file based on which 433 MHz doorbell is pressed. |
@ -0,0 +1,41 @@ |
||||
Title: Things I Recommend |
||||
Date: 2022-06-24 |
||||
Category: Writing |
||||
Summary: Software and products that I recommend you use. |
||||
Wide: true |
||||
Short: 1 |
||||
|
||||
This outlines some software and devices I recommend you use: uBlock Origin, Sponsorblock, ThruNite T1 flashlights, Logitech G Pro Wireless mice, and ThinkPad Laptops. Nothing here was sponsored. |
||||
|
||||
[TOC] |
||||
|
||||
## Software |
||||
### uBlock Origin |
||||
uBlock Origin is an open source ad blocker and something I install immediately on all my devices. Running an ad blocker makes browsing the web way better. It removes distracting ads (even from YouTube), invasive tracking, and makes you safer by removing potentially fake links. It's the best piece of software I use even though it mostly remains unseen. And it even works on your phone. |
||||
|
||||
You can install it on [Firefox Desktop](https://addons.mozilla.org/en-CA/firefox/addon/ublock-origin/), [Firefox Android](https://addons.mozilla.org/en-CA/android/addon/ublock-origin/), and [Chrome Desktop](https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm?hl=en). Make sure you install the correct "Origin" version and avoid "ublock.org". |
||||
|
||||
### SponsorBlock |
||||
SponsorBlock automatically skips over sponsored segments in YouTube videos. Not YouTube ads (that's what uBlock Origin is for), but the actual parts of the video sponsored by companies to advertise their products. It uses a crowd-sourced database of timestamps to seamlessly jump over those parts. It also allows you to skip to the highlight of some videos by pressing "enter" so you aren't wasting time watching exposition. |
||||
|
||||
You can install it on [Firefox Desktop](https://addons.mozilla.org/en-CA/firefox/addon/sponsorblock/) and [Chrome Desktop](https://chrome.google.com/webstore/detail/sponsorblock-for-youtube/mnjggcdmjocbbbhaepdhchncahnbgone?hl=en). |
||||
|
||||
![[recommend1.png]] |
||||
|
||||
![[recommend2.png]] |
||||
|
||||
## Devices |
||||
### ThruNite T1 Flashlight |
||||
This is a tiny rechargeable flashlight that can output 1500 lumens, enough to hurt your eyes if you look directly into it. It has a magnet on the back to stick to things and an optional pocket-hat clip. I liked it so much I've bought three of them and gave one to a friend who then bought himself a couple more. |
||||
|
||||
![[recommend3.png]] |
||||
|
||||
### Logitech G Pro Wireless Mice |
||||
I've used a lot of wireless mice, and this one is by far my favourite. It has a USB dongle which I prefer because Bluetooh pairing annoys me. If you disable the LEDs the battery lasts for a few weeks of solid usage. |
||||
|
||||
I like it so much that I own five of them: one for my office desk, nook desk, laptop bag, home theatre, and surveillance cameras NVR. I leave the last one plugged in so that when a mouse battery dies, I can swap it with a fully charged mouse that's ready to go. It also ensures they wear at a somewhat even rate. |
||||
|
||||
### ThinkPad Laptops |
||||
I've had several different laptops over the years and have settled on buying ThinkPads going forward. I hate Lenovo as company because of their [Superfish scandal](https://en.wikipedia.org/wiki/Superfish#Lenovo_security_incident), but I can't deny that ThinkPads are absolutely solid. I currently own a ThinkPad X1 Carbon 6th Gen. |
||||
|
||||
A lot of Linux developers use ThinkPads which means Linux is well supported on them and the drivers just work. The laptops are easy to pop open and service. Many parts are user-replaceable. My laptop charges off a small USB-C phone charger that I carry around. In a state of sickness-induced exhaustion, I spilled an entire glass of Gatorade on it and then drenched it in water to try and flush it away. I took the back off, drained it, and then pointed a fan at it for 24 hours. The laptop was working fine the next day. |
After Width: | Height: | Size: 468 KiB |
After Width: | Height: | Size: 277 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 153 KiB |
After Width: | Height: | Size: 9.3 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 140 KiB |
@ -1,57 +1,80 @@ |
||||
{% extends "base.html" %} |
||||
{% block meta %} |
||||
<meta charset=UTF-8> |
||||
{% endblock %} |
||||
|
||||
{% block style %} |
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<title>{{ article.title|striptags }} - t0.vc</title> |
||||
<meta charset=UTF-8> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
||||
{% if article.date %} |
||||
<meta name="date" content="{{article.date}}" /> |
||||
{% endif %} |
||||
{% if article.summary %} |
||||
<meta name="description" content="{{article.summary|striptags}}" /> |
||||
<meta name="summary" content="{{article.summary|striptags}}" /> |
||||
{% endif %} |
||||
{% if article.category %} |
||||
<meta name="category" content="{{article.category}}" /> |
||||
{% endif %} |
||||
{% for tag in article.tags %} |
||||
<meta name="tags" content="{{tag}}" /> |
||||
{% endfor %} |
||||
{% endblock %} |
||||
|
||||
<style> |
||||
a.external { |
||||
background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12'%3E%3Cpath fill='%23fff' stroke='%23000' d='M1.5 4.518h5.982V10.5H1.5z'/%3E%3Cpath fill='%23000' d='M5.765 1H11v5.39L9.427 7.937l-1.31-1.31L5.393 9.35l-2.69-2.688 2.81-2.808L4.2 2.544z'/%3E%3Cpath fill='%23fff' d='m9.995 2.004.022 4.885L8.2 5.07 5.32 7.95 4.09 6.723l2.882-2.88-1.85-1.852z'/%3E%3C/svg%3E%0A"); |
||||
background-position: center right; |
||||
background-repeat: no-repeat; |
||||
padding-right: 15px; |
||||
} |
||||
.toclink:not(:hover) { |
||||
text-decoration: none; |
||||
outline: none; |
||||
} |
||||
.content { |
||||
max-width: 600px; |
||||
} |
||||
.toclink { |
||||
color: black; |
||||
} |
||||
.highlight > pre { |
||||
margin: 0; |
||||
padding: 0.5rem; |
||||
overflow-x: auto; |
||||
background-color: #eee; |
||||
} |
||||
:not(pre)>code { |
||||
padding: 0 2px; |
||||
font-size: 0.8rem; |
||||
background-color: #eee; |
||||
} |
||||
.aside { |
||||
display: none; |
||||
} |
||||
.toc { |
||||
display: none; |
||||
} |
||||
img { |
||||
width: 600px; |
||||
height: auto; |
||||
} |
||||
</style> |
||||
{% endblock %} |
||||
{% block style %} |
||||
<style> |
||||
a.external { |
||||
background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12'%3E%3Cpath fill='%23fff' stroke='%23000' d='M1.5 4.518h5.982V10.5H1.5z'/%3E%3Cpath fill='%23000' d='M5.765 1H11v5.39L9.427 7.937l-1.31-1.31L5.393 9.35l-2.69-2.688 2.81-2.808L4.2 2.544z'/%3E%3Cpath fill='%23fff' d='m9.995 2.004.022 4.885L8.2 5.07 5.32 7.95 4.09 6.723l2.882-2.88-1.85-1.852z'/%3E%3C/svg%3E%0A"); |
||||
background-position: center right; |
||||
background-repeat: no-repeat; |
||||
padding-right: 15px; |
||||
} |
||||
.toclink:not(:hover) { |
||||
text-decoration: none; |
||||
outline: none; |
||||
} |
||||
.content { |
||||
max-width: 600px; |
||||
} |
||||
.toclink { |
||||
color: black; |
||||
} |
||||
.highlight > pre { |
||||
margin: 0; |
||||
padding: 0.5rem; |
||||
overflow-x: auto; |
||||
background-color: #eee; |
||||
} |
||||
:not(pre)>code { |
||||
padding: 0 2px; |
||||
font-size: 0.8rem; |
||||
background-color: #eee; |
||||
} |
||||
.aside { |
||||
display: none; |
||||
} |
||||
.toc { |
||||
display: none; |
||||
} |
||||
img { |
||||
width: 600px; |
||||
max-width: 100%; |
||||
height: auto; |
||||
} |
||||
</style> |
||||
</head> |
||||
{% endblock %} |
||||
|
||||
{% block content %} |
||||
<div class="content"> |
||||
<h1>{{ article.title }}</h1> |
||||
{{ article.summary }} |
||||
{{ article.locale_date }} |
||||
<hr /> |
||||
{{ article.content }} |
||||
</div> |
||||
{% block content %} |
||||
<body> |
||||
<div class="content"> |
||||
<p>← <a href="/">Return Home</a></p> |
||||
<h1>{{ article.title }}</h1> |
||||
{{ article.summary }} |
||||
{{ article.locale_date }} |
||||
<hr /> |
||||
{{ article.content }} |
||||
</div> |
||||
</body> |
||||
</html> |
||||
{% endblock %} |
||||
|