Další porce informací
V tomo přípdě se vracím k tomu, co jsem už kdysi řešil v addon Monitor. Chystám se tento addon resuscitovat, ale zatím jsem si sadu nových infomací vyzkoušel jako tradičně s pomocí sh scriptu.
Zajímají mě stavy komunikace, informace o serveru a pak také stav Tvheadend serveru. To poslední proto, protože hlavní domácí server mi běží na hlavním obývákovém Kodi (Beelink GT King + CE) a já o něm chci mít přehled. Pojal jsme to opět co možná nejjednodušeji a nejrychleji. Script běží v nekonečné smyčce a spouští se se samotným spuštěním Kodi pomocí service.autoexec.
Je to hodně triviální a neoptimalizované, ale funkční.
Co sleduji a jak?
Takhle nějak vypadá výsledek, vesměs je všechno v pravém horní rohu, počínaje ikonou Tvheadend, až do konce:
Pro všechny ping mám nastavenou krátkou prodlevu čekání na odpověď, takže mi občas problikne výpadek (text zčervená), ale mám to úmyslně, alespoň vidím jak je to citlivé v tu kterou denní dobu.
Ve skinu to vypadá takto:
Nutné dopočty jsou ve skinu pak tyto:
V tomo přípdě se vracím k tomu, co jsem už kdysi řešil v addon Monitor. Chystám se tento addon resuscitovat, ale zatím jsem si sadu nových infomací vyzkoušel jako tradičně s pomocí sh scriptu.
Zajímají mě stavy komunikace, informace o serveru a pak také stav Tvheadend serveru. To poslední proto, protože hlavní domácí server mi běží na hlavním obývákovém Kodi (Beelink GT King + CE) a já o něm chci mít přehled. Pojal jsme to opět co možná nejjednodušeji a nejrychleji. Script běží v nekonečné smyčce a spouští se se samotným spuštěním Kodi pomocí service.autoexec.
Kód:
#! /bin/sh
path=$(dirname $(realpath $0))/
. ${path}/monitor.ini
echo MONITOR Start
echo end=${end} delay=${delay}
nas_code=-1 ; kodi-send -a "ClearProperty(nas_code,10000)"
lan_code=-1 ; kodi-send -a "ClearProperty(lan_code,10000)"
wan_code=-1 ; kodi-send -a "ClearProperty(wan_code,10000)"
scc_code=-1 ; kodi-send -a "ClearProperty(scc_code,10000)"
cfl_code=-1 ; kodi-send -a "ClearProperty(cfl_code,10000)"
tvh_code=-1 ; kodi-send -a "ClearProperty(tvh_code,10000)"
cli_code=-1 ; kodi-send -a "ClearProperty(cli_code,10000)"
sub_code=-1 ; kodi-send -a "ClearProperty(sub_code,10000)"
while [ ${end} == 0 ] ; do
# LAN
ping -c 1 -W 1 -q 10.0.0.1
if [ $? == 0 ] ; then
if [ ${lan_code} != 1 ] ; then
kodi-send -a "SetProperty(lan_code,1,10000)"
lan_code=1
fi
else
if [ ${lan_code} != 0 ] ; then
kodi-send -a "SetProperty(lan_code,0,10000)"
lan_code=0
fi
fi
# NAS
ping -c 1 -W 1 -q 10.0.0.10
if [ $? == 0 ] ; then
if [ ${nas_code} != 1 ] ; then
kodi-send -a "SetProperty(nas_code,1,10000)"
nas_code=1
fi
else
if [ ${nas_code} != 0 ] ; then
kodi-send -a "SetProperty(nas_code,0,10000)"
nas_code=0
fi
fi
# WAN
ping -c 1 -W 2 -q www.google.com
if [ $? == 0 ] ; then
if [ ${wan_code} != 1 ] ; then
kodi-send -a "SetProperty(wan_code,1,10000)"
wan_code=1
fi
else
if [ ${wan_code} != 0 ] ; then
kodi-send -a "SetProperty(wan_code,0,10000)"
wan_code=0
fi
fi
# SCC
ping -c 1 -W 2 -q plugin.sc2.zone
if [ $? == 0 ] ; then
if [ ${scc_code} != 1 ] ; then
kodi-send -a "SetProperty(scc_code,1,10000)"
scc_code=1
fi
else
if [ ${scc_code} != 0 ] ; then
kodi-send -a "SetProperty(scc_code,0,10000)"
scc_code=0
fi
fi
# Cloudflare
if [ ${scc_code} == 1 ] ; then
json=$(curl -s https://plugin.sc2.zone)
error=$(echo ${json} | jq -r '.error')
if [ "${error}" == "Not Found" ] ; then
if [ ${cfl_code} != 1 ] ; then
kodi-send -a "SetProperty(cfl_code,1,10000)"
cfl_code=1
fi
else
if [ ${cfl_code} != 0 ] ; then
kodi-send -a "SetProperty(cfl_code,0,10000)"
cfl_code=0
fi
fi
else
kodi-send -a "SetProperty(cfl_code,0,10000)"
cfl_code=0
fi
# Tvheadend
subscription=$(curl -s "http://localhost:9981/api/status/subscriptions" | jq '.totalCount')
client=$(curl -s "http://localhost:9981/api/status/connections" | jq -r '.totalCount')
if [ $? == 0 ] ; then
if [ ${tvh_code} != 1 ] ; then
kodi-send -a "SetProperty(tvh_code,1,10000)"
tvh_code=1
fi
else
if [ ${tvh_code} != 0 ] ; then
kodi-send -a "SetProperty(tvh_code,0,10000)"
tvh_code=0
fi
fi
# Tvheadend client
if [ ${tvh_code} == 1 ] ; then
if [ "${cli_code}" != "${client}" ] ; then
kodi-send -a "SetProperty(cli_code,${client},10000)"
cli_code=${client}
fi
else
if [ "${cli_code}" != "" ] ; then
kodi-send -a "ClearProperty(cli_code,10000)"
cli_code=
fi
fi
# Tvheadend substription
if [ ${tvh_code} == 1 ] ; then
if [ "${sub_code}" != "${subscription}" ] ; then
kodi-send -a "SetProperty(sub_code,${subscription},10000)"
sub_code=${subscription}
fi
else
if [ "${sub_code}" != "" ] ; then
kodi-send -a "ClearProperty(sub_code,10000)"
sub_code=
fi
fi
. ${path}/monitor.ini
sleep ${delay}
done
echo MONITOR End
exit 0
Co sleduji a jak?
- dostupnost LAN, pomocí ping na hlavní domácí router - LAN
- dostupnost NAS serveru, pomocí ping - NAS
- dostupnosr WAN, úpomocé ping na google.com - WAN
- dostupnost SCC serveru, ping na pligin.sc2.zone - SCC
- následně i analýza response api rozhraní - tady to je ještě nevyřešené, zatím tedy jen jakési torzo
- následně i analýza response api rozhraní - tady to je ještě nevyřešené, zatím tedy jen jakési torzo
- dostupnost Tvheadend serveru, analýza response api rozhraní - ikona Tvheadend
- zjištění počtu aktivních HTSP clientů - první číslo za ikonou Tvheadned a :
- zjištění počtu aktivních subscriptions - číslo za /
- zjištění počtu aktivních HTSP clientů - první číslo za ikonou Tvheadned a :
Takhle nějak vypadá výsledek, vesměs je všechno v pravém horní rohu, počínaje ikonou Tvheadend, až do konce:
Pro všechny ping mám nastavenou krátkou prodlevu čekání na odpověď, takže mi občas problikne výpadek (text zčervená), ale mám to úmyslně, alespoň vidím jak je to citlivé v tu kterou denní dobu.
Ve skinu to vypadá takto:
Kód:
<control type="image" id="1"> <!-- EASY+ TVH state -->
<top>6</top>
<width>16</width>
<height>16</height>
<fadetime>300</fadetime>
<aspectratio aligny="center" align="center">keep</aspectratio>
<texture>special://skin/extras/icons/tvh.png</texture>
<visible>String.IsEqual(Window(Home).Property(tvh_code),1)</visible>
</control>
<control type="label" id="1"> <!-- EASY+ TVH subscription -->
<left>-1</left>
<width>auto</width>
<aligny>center</aligny>
<font>font_flag</font>
<label>$INFO[Window(Home).Property(cli_code),:]$INFO[Window(Home).Property(sub_code),/]</label>
</control>
<control type="label" id="1"> <!-- EASY+ LAN state -->
<width>auto</width>
<aligny>center</aligny>
<textcolor>$VAR[lan_state_color]</textcolor>
<font>font_flag</font>
<label>[B]LAN[/B]</label>
</control>
<control type="label" id="1"> <!-- EASY+ NAS state -->
<width>auto</width>
<aligny>center</aligny>
<textcolor>$VAR[nas_state_color]</textcolor>
<font>font_flag</font>
<label>[B]NAS[/B]</label>
</control>
<control type="label" id="1"> <!-- EASY+ WAN state -->
<width>auto</width>
<aligny>center</aligny>
<textcolor>$VAR[wan_state_color]</textcolor>
<font>font_flag</font>
<label>[B]WAN[/B]</label>
</control>
<control type="label" id="1"> <!-- EASY+ SCC state -->
<width>auto</width>
<aligny>center</aligny>
<textcolor>$VAR[scc_state_color]</textcolor>
<font>font_flag</font>
<label>[B]SCC[/B]</label>
</control>
Nutné dopočty jsou ve skinu pak tyto:
Kód:
<variable name="lan_state_color">
<value condition="String.IsEqual(Window(Home).Property(lan_code),1)">green</value>
<value condition="String.IsEqual(Window(Home).Property(lan_code),0)">red</value>
<value>grey</value>
</variable>
<variable name="nas_state_color">
<value condition="String.IsEqual(Window(Home).Property(nas_code),1)">green</value>
<value condition="String.IsEqual(Window(Home).Property(nas_code),0)">red</value>
<value>grey</value>
</variable>
<variable name="wan_state_color">
<value condition="String.IsEqual(Window(Home).Property(wan_code),1)">green</value>
<value condition="String.IsEqual(Window(Home).Property(wan_code),0)">red</value>
<value>grey</value>
</variable>
<variable name="scc_state_color">
<value condition="String.IsEqual(Window(Home).Property(scc_code),1) + String.IsEqual(Window(Home).Property(cfl_code),1)">green</value>
<value condition="String.IsEqual(Window(Home).Property(scc_code),1) + String.IsEqual(Window(Home).Property(cfl_code),0)">yellow</value>
<value condition="String.IsEqual(Window(Home).Property(scc_code),0)">red</value>
<value>grey</value>
</variable>