Tag Archives: domoticz

How to monitor your diskhealth with domoticz’s virtual percentage sensors


I was wondering how much I wore down my SSD after a few years of heavy domoticz usage. I really like the graphing functionality of domoticz to keep track of stuff and I have implemented a script that notifies me with Telegram when interesting stuff happens, so I wanted to monitor my disk health with domoticz, thought I’d share.


Install smartmontools

sudo apt-get install smartmontools

2. Create 1 [u]Virtual Sensor of the type ‘Percentage'[/u] (for SSD Health-value) and remember the idx (you need that later on) in Domoticz.


Create a script (Let’s call it ssdhealth2domo.sh) with:

# no need to edit
ssdhealth=$(sudo smartctl --all /dev/sda | grep Wear_Leveling_Count | awk '{print $4}')
#output if you run it manually
echo "SSD Health = $ssdhealth%"
curl -s -i -H "Accept: application/json" "http://$username:$password@$host:$port/json.htm?type=command¶m=udevice&idx=$ssdhealthidx&svalue=$ssdhealth"

I ‘grep’ the Wear_Leveling_Count out of the test-results-table because this gives me the best indication of wear-and-tear of my disk (Samsung) after what I have read. Some manufacturers use ‘one of the other’ indicators, so do some reading on what is the best indicator for your type of disk.

Don’t forget to make it executable (I always do … ):

chmod +x ssdhealth2domo.sh

And add the stuff to the crontab:

@daily sudo /usr/sbin/smartctl -t long /dev/sda
@daily /path/to/script/ssdhealth2domo.sh

smartctl now does a daily ‘long’ test on your /dev/sda disk at midnight. Because this is spawned to the background and ‘takes a while’ (in my case about 20 minutes) the second line in crontab will probably send the test-results from ‘yesterday’ to domoticz. But hey, better safe & late than sorry & never right ;)


If setup correctly, domoticz will receive your disk-health daily, so when it breaks you might be there in time to replace it without loss of data (no guarantees from me ofcourse :) )


Telegram & domoticz hand in hand


I have been a Telegram-fan since the beginning. It’s snappy, pluggable, and allows for alot more customization then WhatsApp or other more ‘closed’ instant messengers. And ever since Facebook ‘owns’ Whatsapp it’s supposed to be ‘more private’ (but who knows). Next to that is has IM-clients for every platform, which is useful.

The ‘Telegram Bot’ functionality is especially fun and I have been using it since it was available for sending ‘push notifications’ to my iPhone. It can be added as a custom notifier to domoticz quite easily, but I always forget how to, so here’s my post on how I did it (for future reference).

First, setup a Telegram-bot. very nice guide here. Also pay attention on how to use it with ‘wget’ or ‘curl’. Very useful in scripting, I use that alot as well.


Add all the relevant stuff here (under Setup -> Settings -> Notifications):


After that you can use it on everything that has the ‘Notifications’ button:


Add a notification with a ‘relevant’ threshold:


You can use the ‘$name’ & ‘$value’ to send the name of the current device and the current value in the message itself. Oh and I like the pretty Apple emoticons too much, I know …



Oooh pretty! Thanks Jarvis!

push speedtest results to domoticz


I needed to monitor my internet bandwith because it was flappy.

Decided to push speedtest information to domoticz (easy graphs, easy notifications).

1. install speedtest (apt-get install speedtest-cli)
2. create 3 virtual counters in domoticz (and remember the idx’s)
3. create a script, put in the variables and chmod +x it
4. crontab -e it (I cron it @hourly)


# no need to edit
speedtest-cli --simple > output.txt
ping=$(cat output.txt | sed -ne 's/^Ping: \([0-9]*\.[0-9]*\).*/\1/p')
download=$(cat output.txt | sed -ne 's/^Download: \([0-9]*\.[0-9]*\).*/\1/p')
upload=$(cat output.txt | sed -ne 's/^Upload: \([0-9]*\.[0-9]*\).*/\1/p')
#output if you run it manually
echo "ping = $ping ms"
echo "download = $download Mbps"
echo "upload = $upload Mbps"

# Push -> domoticz
curl -s -i -H "Accept: application/json" "http://$username:$password@$host:$port/json.htm?type=command&param=udevice&idx=$pingidx&svalue=$ping"
curl -s -i -H "Accept: application/json" "http://$username:$password@$host:$port/json.htm?type=command&param=udevice&idx=$downloadidx&svalue=$download"
curl -s -i -H "Accept: application/json" "http://$username:$password@$host:$port/json.htm?type=command&param=udevice&idx=$uploadidx&svalue=$upload"