More than 40 years ago my Grandfather and Father, along with the help from of family and friends, built a cabin on the top of a mountain in the Davis Mountains of far west Texas. It's about 500sq-ft,accessible only by 4x4-, and off-grid with no utility water, power, or internet. But, being on the top of a mountain there's good 4G cell service and plenty of sunshine year round. We use water catchment for sinks & shower, and haul our own drinking water and propane up there so we RV-style services such as a water heater, small fridge, and stove. Also, a solar panel and small battery bank serves to power LED lights and charging for phones and laptops.
Being remote and hard to reach doesn't leave us immune to visitors and potential vandalism or theft though. Since our property commands an unparalleled 360° view we get occasional sight-seers and we've become increasingly concerned about trespassing and property damage. A camera system was in order but the limited power availability and somewhat limited locations for adequate cell service added to the challenges of implementing the idea.
Initially I tried a Browning Defender Wireless Cellular Trail Camera 4g LTE game camera. The unit tested well enough at home in the city but proved complicated to place adequately out in the field. The locations most desirable for camera replacement didn't have enough cell signal for the unit to reliably connect. I realized I needed a more powerful cellular connectivity solution and that would mean separating the cell network from the camera.
For my next test, I needed a separate hotspot and camera combination. I've used a Netgear Nighthawk M1 4g LTE before with great success so I bought another along with a data-only SIM from Google Fi, my cellular provider. The hotspot was placed indoors, close enough to the battery/power system to stay charged via USB and still have enough cell signal for connectivity. In the future I'll add an antenna to the hotspot to get better cell signal.
For the camera I choose a Reolink Argus 3 Pro with Solar Panel which is a 2K/4MP camera with WIFI. The camera was placed in a protected location looking down the driveway with the intent to capture good views of approaching vehicles including license plates. Now I could use the Reolink cloud connectivity capabilities to monitor and manage the camera remotely. Additionally I have the camera sending emails with video clips of all motion detection alerts.
I will play around with camera placement as this first location is a bit low to the ground and happens to be close to where a bird loves to frequent thereby triggering more false-positive motion alerts than I'd prefer. The solar panel on this camera works great if it can get enough direct sunlight and you are careful to tune the sensitivity of the camera to not trigger false motion alarms too often. The camera uses a PIR sensor and only "turns on" when there's motion or you use the app to view the camera field or settings. So if you're cautious about your settings the panel is good enough. Since I have a battery bank in the cabin, I'll ultimately tie into that but the panel is working (almost) well enough for now.
One of the limitations of this camera is access to the recorded images. Reolink battery-powered cameras have no API interface which kind of makes sense as the cameras only wake up when the PIR sensor detects motion in order to preserve battery power. There are 3 optional ways to access the videos from the camera, all of which have their drawbacks.
- An on-board SD card. At the highest resolution you can choose to keep up to 30 seconds of video after the motion alert. These videos are only downloadable via the mobile app and there is no API.
- Reolink Cloud. Multiple plans are available but they will only store the first 8-11 seconds of videos. Their cloud has no API so other than screen-scraping there's no easy way to download these videos in an automated way.
- Email. You can configure the camera to send emails containing either an image, the video, or both. These videos only contain the first 11 seconds of the recording.
For now I'm using the email option with a Node-Red automation configured to store the attachments onto my home NAS and send them to me via Slack using the RedBot plugins. If there's a video worth looking further into, I will download it manually from the mobile app.
In summary, I now have a full-time internet connection at the cabin with a security camera that's remotely manageable. Step one complete as far as base-requirements are concerned.
Now that I have a dedicated internet connection in place, I started thinking more about the Renogy Adventurer solar panel charging system and the bluetooth connectivity (Renogy BT-1) it offers to gather data remotely. When we're at the cabin we can take peeks into the current state of the battery, panel output, etc but we have no idea how the system is performing otherwise. If we had a way to collect data from the system 24/7/365 we would have a better idea how it performs. It turns out there's an open source project, renogy-bt1 to connect and gather this data. I just needed a platform running out at the cabin that was small, used very little power, and could connect to the Renogy Bluetooth system. I might be able to use an ESP32 device for something like this but I already have some RaspberryPi Zero W units laying around and since they run a full-blown OS I decided to use this as my platform for now.
Getting the renogy-bt1 project running on the Pi Zero was pretty simple. The only limitation of the BT-1 is that when the phone app is being used, it disallows additional connectivity so the monitoring breaks temporarily. Not a problem as long as I could build a data reporting solution that would negate the need for the app. I already have a pretty good MQTT-based home automation system running at home, so I just needed to get this data from the Pi running on a mountaintop 400 miles away into my home network.
Enter Tailscale VPN. It took all of 5min to get Tailscale up and running on the remote Pi, my local Mosquitto broker, and a handful of other systems. Now I have a cronjob collecting the Renogy data and publishing data back home to my MQTT broker. Then I use my standard IoT processing framework of Node-Red to listen to that MQTT topic and insert into a database. Right now my storage is just MariaDB but I'll likely move this to Influx or another time-series database more suited to the task.
There's a DevOps mentality of "measure all the things" that I take to heart. Now that I have the Pi Zero running as a generic platform to collect data, what other data could I gather? Obviously some monitoring stats from the Pi, but what else? Well we have a small indoor/outdoor thermometer from ThermPro that uses a standard 433MHz transmitter to listen to the outdoor sensors. With a cheap SDR USB dongle I could listen to that signal and publish it to MQTT as well. The brilliant rtl_433 project makes this pretty trivial as it has a built in MQTT publishing output. And I found a great tutorial for installing it and setting it up as a systemd service. While there are Raspbian packages for rtl_433 installing from source is highly advised as having the newer version is preferable. Now I have outdoor temperature and humidity data and dashboards to go along with it.
I also ran across an open source project, netgear-m1 to get data from the Netgear M1 hotspot. It gathers a ton of metrics but unfortunately not network RX/TX statistics. Battery status, temperature data, general device health and cellular uplink quality are all there. All in all, I'm collecting and storing fare more than I'll likely need but storage is cheap and I can always tune things later if needed.
Now that I was collecting all the data I could from the solar panel system, network up-link, RaspberryPi, and weather sensors, a Grafana dashboard was a pretty easy way to get some graphs and dashboards up and running.
- Eliminate the Reolink solar panel and wire the camera up to the cabin power system with USB.
- Reposition the camera, higher. Still need it to look in the same general direction but it needs to be above the deck.
- Add an antenna to the Netgear hotspot. Another bar or two of connection quality would be nice.
- Further Node-Red processing of the Reolink videos including possibly implementing an object detection machine learning pipeline.
- Improve the weather sensors with a full-blown weather station. Barometric pressure, wind, rain etc would be nice.
- Local e-ink display on the RPi. Total nice to have and not necessary but having all this data easy to see locally would be nice.
- Zigbee/ZWave door/motion sensors for when we're not there? USB dongle on the RPi might work. Might need full on HomeAssistant and a beefier RPi though. I do have a bunch of RPi 3's laying around unused. This would increase the power draw of the Pi however.
- SugarPi or other local small battery back for the Pi so it could more easily weather any power dips.