• Vítejte na XBMC-Kodi.cz
  • Česko-slovenská komunita fanoušků XBMC/Kodi
Vítejte návštevníku! Přihlášení Registrace


Hodnocení tématu:
  • 1 Hlas(ů) - 4 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Zobrazení stavových infomací Kodi a addon
#4
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.
 
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
Je to hodně triviální a neoptimalizované, ale funkční.

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  1 - 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
  •  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 /
Opět data zapisuji do Kodi properties, zápis probíhá změnově, tzn. že se zapisuje jen pokud od posledního zápisu došlo k nějaké změně (nuluje se to při startu scriptu).

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>
 
Citovat
  


Příspěvků v tématu
RE: Zobrazení stavových infomací Kodi a addon - od JiRo - 29.10.2022, 22:03

Přejít na fórum:


Prochází: 1 host(ů)