Home Assistant

From My Wiki
Revision as of 18:40, 20 June 2020 by Meadmin (talk | contribs)

Jump to: navigation, search

Send VPS statistics to HA

Update token ($apitoken), address ($apiaddr) and disk device ($disk)

#!/bin/bash

apitoken="xxxxxx"
apiaddr="https://ha.myhome:8123/api/states/"
apiheaders=" -H \"Authorization: Bearer $apitoken\" -H \"Content-Type: application/json\" "
apihost=`hostname|sed "s/\./_/g"`
apiurl="sensor.$apihost"

disk="/dev/vda"

srvuptime=`uptime -p`
srvmem=`free -m |grep "Mem"|awk '{print ($4+$7)"M"}'`
srvprocs=`ps -ef|wc -l`
diskuse=`df -h $disk |grep "/$"|awk '{print $5}'|tr -d '%'`
diskio=`df -ih $disk |grep "/$"|awk '{print $5}'|tr -d '%'`
netcons=`netstat -ant|grep ESTA|wc -l`
mailqu=`/usr/sbin/exim -bpc`

srvtmp=`cat /proc/loadavg`
read -r -a srvla <<< "$srvtmp"

apidata=" -d '{\"state\":\"$srvuptime\", \"attributes\": {\"friendly_name\":\"$apihost\",\"uptime\":\"$srvuptime\",\"freemem\":\"$srvmem\",\"load\":${srvla[0]},\"procs\":$srvprocs,\"disk_use_$disk\":\"$diskuse\",\"disk_io_use_$disk\":\"$diskio\",\"connections\":$netcons,\"mail_queue\":$mailqu}}'"

bash -c "curl $apiaddr$apiurl $apiheaders -X POST $apidata -k"
daybefore=`date +%d/%b/%Y --date="last day"`
IFS=$'\n'; for i in `cat /etc/domainusers`; do
       IFS=":"; read -r -a arr <<< "$i"
       domacc=${arr[0]}
       domdom=`echo ${arr[1]}|xargs`
       domtotal=`zgrep "$daybefore" /home/$domacc/logs/* 2>/dev/null |wc -l`
       domres=`zgrep "$daybefore" /home/$domacc/logs/* 2>/dev/null |cut -d"[" -f2-|awk '{print $6}'|sort|uniq -c|sort -h|awk '{print $2 " " $1}'`
       apiurl="sensor.${apihost}_${domacc}"
       sensordata="'{\"state\":\"$domdom\", \"attributes\": {\"friendly_name\":\"$domdom\",\"total_yesterday\":\"$domtotal\""

       IFS=$'\n'; for q in $domres; do
               IFS=" "; read -r -a res <<< "$q"
               sensordata="${sensordata},\"responsecode_${res[0]}\":${res[1]}"
       done
       sensordata="${sensordata}}}'"
       apidata=" -d $sensordata"
       bash -c "curl $apiaddr$apiurl $apiheaders -X POST $apidata -k"
done