Rural LTE Networking via Mofi

I wanted to be able to access my up north cameras remotely. This comes with some challenges in a rural area with very limited high speed internet options. No DSL or cable options, my area is all out of coverage range. Only line of sight provider(but provider would not take new customers.) The solution was a Mofi type LTE router MOFI4500-4GXeLTE. The router needed an antenna upgrade as the latency is was high and speeds were poor.

Dual LTE 698-755 MHz Yagi Antenna 14 dBi from Excel Wireless connected to two Lightning Arrestor N Male to Female B to two N Male to SMA Male , LMR400 Jumper 25 feet
After the antenna upgrade

Synology NAS in Fireproof Safe – UPDATE

This is a very non-scientific method!! Take this anecdote for what it’s worth, but here is an update to my original post about the Synology box in my fireproof safe.  Notes: safe has been opened at least every few days, the AC is running at times in my home, the windows open others. So just my observations, not a bulletproof study by all means.
I have been running the Synology two bay disk station in my Liberty safe for about 6 months now. Here in Michigan we are into the summer warmer months. I’ve included two charts of the internal disk temp and the temp inside my home for the past 60 days. The safe seems to be large enough to circulate the air and keep the temp within normal spec. I’m confident enough to keep this setup running as is year round as the NAS hardware and drives seem to be just fine.

Disk Sensor (this disk usually tends to run a degree warmer)


Home temp sensor from the Accurite weather station

Jeep Heated Truck-Lite LEDs

These lights are much better than stock Jeep Wrangler lights. Buy them but they are not perfect (see the fit & install.) Light quality is great, cut off looks good.

Emily is coming up on a year in the Jeep. She has mentioned the stock halogen headlights leave something to be desired. Researching replacements brought me to HIDs or LEDs. A large vendor of HID projectors never answers the phone… so I went with LEDs.
One of the problems with LEDs headlights is that when driving during snow, the snow can build up on the headlight. LED headlights do not get warm enough to melt the snow thus blocking the light. The Jeep JK/Wrangler design probably makes this worse because the headlight cups are not very aerodynamic.
Ridged Industries have released a LED with a heating element that keeps snow off the headlight. I went a head an purchased the Truck-Lite 55004 kit, which includes two lights and the wiring harness so they plug up to the JK.

Fit & Install

Driver side, a lot of play. You could physically wiggle the light up/down left/right and it would move a quarter inch. I uninstalled and reinstalled a few times but it is just not a great fit. Called Ridged Industries and they told me to add a little bit of tape for a shim. Not a great answer, but it doesn’t move as much with four pads of tape around the light as a shim.
.

Acurite Weather Station Monitoring PRTG

My weather station uploads to wunderground but I wanted a way to collect historical stats and monitor my indoor temp remotely. Since I already have PRTG running in a virtual machine, this is a good solution for me.

foto_no_exif

My Weather Station AcuRite 5 – in – 1 Color Weather Station – $80 from Costco


First you’ll need the Acurite software and hardware USB interface to start outputting a CSV to your PRTG host.
2016-10-20_0920

Acurite software config


2016-10-20_0826

Sample Output


Save the following powershell file into your PRTG Custom Sensors\EXEXML directory. Edit the first line to the path of your acurite CSV. Then open PRTG and add a new sensor with type of EXEXML, selecting the scrip  you just saved.
Essentially the script just parses the CSV, sets labels and limits. The CSV file will eventually grow very large, I’ll deal with that then. In my case I had to setup another script to transfer to the CSV to my PRTG box, but you can figure that out. I’m sure there are more efficient ways to do this, but it works well for my case.

$myFileName = "e:\temp\acuriteweather.CSV"
# Get last one row of file into variable
$lastDataRow = (Get-Content $myFileName)[-1]
#parse data
$dataArray = $lastDataRow.Split(",")
$dataArray = $dataArray -replace '"', ""
$Timestamp = $dataArray[0]
$OutdoorTemperature = $dataArray[1]
$OutdoorHumidity = $dataArray[2]
$DewPoint = $dataArray[3]
$HeatIndex = $dataArray[4]
$WindChill = $dataArray[5]
$BarometricPressure = [math]::Round($dataArray[6],2)
$Rain = $dataArray[7]
$WindSpeed = [math]::Round($dataArray[8],2)
$WindAverage = [math]::Round($dataArray[9],2)
$PeakWind = [math]::Round($dataArray[10],2)
$WindDirection = $dataArray[11]
$IndoorTemperature = $dataArray[12]
$IndoorHumidity = $dataArray[13]
#rainfall fix, resets counter every night at midnight
$yesterday = (Get-Date).AddDays(-1).ToString('MM/dd/yyyy')
$yesterday = $yesterday + " 11:48:00 PM"
$dayinput = Select-String -Path $myFileName -Pattern "$yesterday" | select line
$yesterdaysrainfall = $dayinput -split ','
$yesterdaysrainfall = $yesterdaysrainfall[7] -split '"'
$yesterdaysrainfall = [double]$yesterdaysrainfall[1]
$todaysrain = [math]::Round($rain -$yesterdaysrainfall,2)
write-host "<prtg>"
write-host "<result>"
write-host "<channel>Outdoor Temp</channel>"
write-host "<customUnit>F</customUnit>"
write-host "<float>1</float>"
write-host "<LimitMode>1</LimitMode>"
write-host "<LimitMaxWarning>95</LimitMaxWarning>"
write-host "<LimitMaxError>105</LimitMaxError>"
write-host "<LimitMinWarning>10</LimitMinWarning>"
write-host "<LimitMinError>0</LimitMinError>"
write-host "<LimitWarningMsg>Ourdoor Temp Warning</LimitWarningMsg>"
write-host "<LimitErrorMsg>Ourdoor Temp Error</LimitErrorMsg>"
write-host "<value>$OutdoorTemperature</value>"
write-host "</result>"
write-host "<result>"
write-host "<channel>Outdoor Humidity</channel>"
write-host "<customUnit>%</customUnit>"
write-host "<value>$OutdoorHumidity</value>"
write-host "</result>"
write-host "<result>"
write-host "<channel>Outdoor Dewpoint</channel>"
write-host "<value>$DewPoint</value>"
write-host "<customUnit>F</customUnit>"
write-host "</result>"
write-host "<result>"
write-host "<channel>Outdoor Heat Index</channel>"
write-host "<value>$HeatIndex</value>"
write-host "<customUnit>F</customUnit>"
write-host "</result>"
write-host "<result>"
write-host "<channel>Outdoor Wind Chill</channel>"
write-host "<value>$WindChill</value>"
write-host "<customUnit>F</customUnit>"
write-host "</result>"
write-host "<result>"
write-host "<channel>Outdoor Barometric Pressure</channel>"
write-host "<float>1</float>"
write-host "<DecimalMode>2</DecimalMode>"
write-host "<value>$BarometricPressure</value>"
write-host "</result>"
write-host "<result>"
write-host "<channel>Rain</channel>"
write-host "<customUnit>inches</customUnit>"
write-host "<float>1</float>"
write-host "<value>$todaysrain</value>"
write-host "</result>"
write-host "<result>"
write-host "<channel>Wind Speed</channel>"
write-host "<customUnit>mph</customUnit>"
write-host "<float>1</float>"
write-host "<LimitMaxWarning>20</LimitMaxWarning>"
write-host "<LimitMaxError>30</LimitMaxError>"
write-host "<LimitWarningMsg>Wind Warning</LimitWarningMsg>"
write-host "<LimitErrorMsg>Wind very high</LimitErrorMsg>"
write-host "<value>$WindSpeed</value>"
write-host "</result>"
write-host "<result>"
write-host "<channel>Wind Speed Average</channel>"
write-host "<float>1</float>"
write-host "<customUnit>mph</customUnit>"
write-host "<DecimalMode>2</DecimalMode>"
write-host "<LimitMaxWarning>20</LimitMaxWarning>"
write-host "<LimitMaxError>30</LimitMaxError>"
write-host "<LimitWarningMsg>Wind Warning</LimitWarningMsg>"
write-host "<LimitErrorMsg>Wind very high</LimitErrorMsg>"
write-host "<value>$WindAverage</value>"
write-host "</result>"
write-host "<result>"
write-host "<channel>Peak Speed Wind</channel>"
write-host "<float>1</float>"
write-host "<DecimalMode>2</DecimalMode>"
write-host "<customUnit>mph</customUnit>"
write-host "<value>$PeakWind</value>"
write-host "</result>"
write-host "<result>"
write-host "<channel>Wind Direction</channel>"
write-host "<float>1</float>"
write-host "<customUnit>degrees</customUnit>"
write-host "<DecimalMode>2</DecimalMode>"
write-host "<value>$WindDirection</value>"
write-host "</result>"
write-host "<result>"
write-host "<channel>Indoor Temperature</channel>"
write-host "<float>1</float>"
write-host "<value>$IndoorTemperature</value>"
write-host "<customUnit>F</customUnit>"
write-host "<LimitMode>1</LimitMode>"
write-host "<LimitMaxWarning>81</LimitMaxWarning>"
write-host "<LimitMaxError>85</LimitMaxError>"
write-host "<LimitMinWarning>65</LimitMinWarning>"
write-host "<LimitMinError>62</LimitMinError>"
write-host "<LimitWarningMsg>Indoor Temp Warning</LimitWarningMsg>"
write-host "<LimitErrorMsg>Indoor Temp Error</LimitErrorMsg>"
write-host "</result>"
write-host "<result>"
write-host "<channel>Indoor Humidity</channel>"
write-host "<value>$IndoorHumidity</value>"
write-host "<customUnit>%</customUnit>"
write-host "<LimitMode>1</LimitMode>"
write-host "<LimitMaxWarning>90</LimitMaxWarning>"
write-host "<LimitMaxError>95</LimitMaxError>"
write-host "<LimitMinWarning>30</LimitMinWarning>"
write-host "<LimitMinError>35</LimitMinError>"
write-host "<LimitWarningMsg>Indoor Humidity Warning</LimitWarningMsg>"
write-host "<LimitErrorMsg>Indoor Humidity Error</LimitErrorMsg>"
write-host "</result>"
write-host "</prtg>"