• 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:
  • 0 Hlas(ů) - 0 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Monitoring RPi
#1
Název je možná trochu zavádějící. Nejde o monitorování stavu RPi (i když by také mohlo být tímto způsobem realizováno), ale o monitoring pomocí RPi. Téma jsem založil na základě privátní diskuse s @Petrvald, ve které šlo o to, jak dostat na Home stránku Kodi běžící v LibreELEC údaje z teploměru připojeného ke GPIO Header RPi. Jistě, existuje celá řada lepších nebo horších hotových řešení, ale znáte to. Největší radost má člověk z toho, když si něco vymyslí a udělá sám. Na mně bylo poradit, jak změřené hodnoty dostat na obrazovku. Postupně vzniklo několik řešení, aby vzápětí byla některá z nich rovnou, jiná později, zavržena:

1. Přenos pomocí aplikace kodi_sendkterá umožňuj do Kodi zaslat interní příkaz ze systému. Příkaz by obsahovat nastavení hodnoty proměnné skinu Skin.SetString. Tento způsob byl zavržen vzápětí, díky jeho nepříjemnému side effectu, protože použití tohoto příkazu Kodi vyhodnotí jako akci uživatele, se všemi důsledky z toho plynoucími.

2. Nastavení "proměnné" okna setPropertyto by mohlo probíhat podobně jako ad. 1 (ale to bychom si moc nepomohli) a nebo prostřednictvím procedury zadávané z python scriptu, který by ale musel být spuštěn z Kodi (to kvůli knihovnám Kodi, které jsou v takovém způsobu řešení potřeba). Řešení se ukázalo být velmi jednoduché.

Tato varianta řešení obsahuje tři části a, b, c:

a. Python script (ve kterém bude nakonec kód pro měření teploty, který jsem ale pro účely testování nahradil kódem, který vrací aktuální čas ve formě řetězce). Tento řetězec se ukládá do proměnné Time okna s Id=10000 (10000 = Home).

/storage/test.py:
Kód:
import xbmc, xbmcgui
import time

xbmcgui.Window(10000).setProperty('Time', 'Cas: %s' % (time.strftime('%H:%M:%S')))

b. Periodické spouštění scriptu. To je možné řešit různým způsobem, ale musí být, s ohledem na použité knihovny, prováděno z Kodi. Já jsme si zvolil poměrně jednoduchý způsob, a to spuštění prostřednictvím funkce Startup ve skinu. Tato metoda má jednu nevýhodu, a  to, že ji nelze zrealizovat v případě, používáte-li výchozí skin Estuary ve standardní instalaci LibreELEC. U něj totiž soubor Startup.xml nemůžete editovat.

Do souboru Startup.xml tedy vložíte řádek se příkazem pro periodické (např. každých 10 s) spouštění scriptu:.
Kód:
<?xml version="1.0" encoding="UTF-8"?>
<window>
    <onload>ReplaceWindow($INFO[System.StartupWindow])</onload>
    <onload>Alarmclock(Time,RunScript(/storage/test.py),00:10,silent,loop)</onload>
    <controls />
</window>

Bohužel se ukázalo, že uvedenou metodu Kodi příliš "nemiluje". Sice uvedený příkaz vykonává s požadovanou periodou, ale pokaždé o tom do logu zapíše varování:
Kód:
15:13:01.255 T:140299720447744 WARNING: CPythonInvoker(54): Script invoked without an addon. Adding all addon modules installed to python path as fallback. This behaviour will be removed in future version.

Postavit řešení na fukci, která může být odstraněna asi není příliš šťastné. Proto přišel čas na verzí třetí. Teprve po čase jsem zjistil, že tento stav v Kodi trvá již několik let a vyhrůžka, že bude z budoucí verze odstraněno, se neustále opakuje.

c. Zobrazení v Home stránce Kodi. Tato část je samozřejmě závislá na skinu a platí pro ni to, co už bylo napsáno výše. Že ji nelze realizovat u základního Estuary ve standardní instalaci LibreELEC. Já uvedu příklad pro Estuary Steram-Cinema, ale platí, že úprava téměř jakéhokoliv skinu je velmi jednoduchá.

Pro Estuary Steram-Cinema se edituje soubor Includes.xml. Do sekvence kódu, kterým se definuje obsah 2. řádku záhlaví, kde je zobrazeno počasí, teplota, atd. se vloží zobrazení obsahu proměnné okna HomeTime:
Kód:
                    <control type="label"> <!-- Test  -->
                        <height>50</height>
                        <width>auto</width>
                        <aligny>center</aligny>
                        <font>font10</font>
                        <label>$INFO[Window(Home).Property(Time)] </label>
                    </control>

Vypadat to může pak např. takto:
[attachment=4001]

3. Použití addon - toto v podstatě kopíruje předchozí způsob. Je vytvořen addon typu služba, tedy spouštěná po startu Kodi a trvale běžící, které v definované periodě provádí kód čtení teploty. V dále uvedeném příkladu je opět nahrazeno kódem vracejícím aktuální čas.
Kód:
# -*- coding: utf-8 -*-

import xbmc
import xbmcgui
import xbmcaddon
import time

if __name__ == '__main__':
   monitor = xbmc.Monitor()

   _period_ = 10

   period = 0  
   while not monitor.abortRequested():
       if monitor.waitForAbort(5):
           break
       period -= 5
       if period > 0:
           continue
       period = _period_

       xbmcgui.Window(10000).setProperty('Time', 'Čas: %s' % (time.strftime('%H:%M:%S')))

Vyrobil jsem instalační soubor výše uvedeného základu*) addon, je připojen na konci příspěvku, po jeho nainstalování je samozřejmě možné příslušnou úpravou kódu doplnit vlastním čtení teploty, případně jiných údajů získaných na rozhraní RPi GPIO, ale i kdekoliv jinde. Můžeme tedy tímto způsobem realizovat i monitoring vlastního RPi tak, jak o tom píšu na začátku. Tvořivosti se meze nekladou.

*) Jde skutečně o absolutní minimum, tedy žádné nastavením protokolování běhu, zpracování chyb, atp. S tím by se ale měl zkušený programátor v Python poradit. Ostatně takovým je ten dnešní příspěvek i celé téma věnováno.

Zobrazení hodnot pak proběhne stejně, jako v 2. c. V tomto směru není mezi těmito dvěma způsoby řešení žádný rozdíl.

Každý si samozřejmě může addon přejmenovat a vytvořit si vlastní, který si může dále rozvíjet. Já jsme v tomto návodu použil mé znalosti Kodi a tvorby addon. Jsme si vědom, že jsou pouze omezené. Jistě by šlo použít i další funkce a metody, které Kodi a Python podporuje a nabízí, ale to už překračuje rámec mých aktuálních znalostí, schopností a taky času, který jsme tomu chtěl věnovat.

Poznámka na závěr:

Pro mnoho z vás bude patrně největší problém to, jak dostat do Home stránky zobrazení. S tím můžou pomoci ti, kteří znají a jsou schopní příslušné skiny upravovat na úrovni jejich definičních xml souborů. Já sám jsem ochotný pomoci, pokud to tedy nebude nad moje síly. Je třeba si uvědomit, že úprava u skinu který nepoužívám obnáší jeho instalaci, analýzu jeho struktury a kódu, která teprve vyústí v nalezení místa, kde je třeba příslušný kód pro zobrazení měřené teploty vložit. Taky je třeba si uvědomit, že ne vždy bude ten vlastní kód odpovídat tomu kódu, který je uveden výše u Estuary Stream-Cinema. Použitý kód musí respektovat kontext, v jakém je použit a to ho může poměrně zásadním způsobem změnit, bude-li použit v kontextu jiném.

Instalační soubor základu addon service.monitoring.rpi, verze 0.0.1:
[attachment=4002]
 
Citovat
  


Přejít na fórum:


Prochází: 2 host(ů)