TVheadend Admin Panel V2 (mano kūrinys)

TVheadend Admin Panel V2 (mano kūrinys) 1

Skaitymo laikas: 5 minutės

Tekstas atnaujintas: 2020-09-04

Atnaujinau savo kreivą kūrinį apie kurį rašiau seniau. Kreivas nes sudėtas iš Google realiai 😆 tai gali būti klaidų kode, bet kadangi veikia tai… 😀

Nuo praeitos versijos padariau gan daug pakeitimų ypač vizualiai.

Supaprastinau patį įrašymo procesą, reikės supildyti tik vieną .env failą.

Bet apie viską nuo pradžių.

Prenumeruok 🤟

Gauk į paštą žinutę apie naujus įrašus 👍

Dizainas

Dizainą keičiau nes nepatiko man tas lentelės principas ir telefone atrodė kiek prasčiau, kai atsinaujina duomenys.

Kitaip sakant nelabai mobile friendly.

Prisijungimo langas dabar atrodo taip:

tvheadend admin panel

Prieš tai buvo mandras gan bet man nepatiko, labiau norėjau minimalaus varianto, tad radau template ir prisitaikiau.

TVheadend Admin Panel V2 (mano kūrinys) 2

Taip atrodo pagrindinis langas, kaip minėjau atsisakiau lentelės principo ir kažkiek moderniau atrodo.

Atsisakiau Bootstrap stiliaus ir pakeičiau į Uikit, kuris man atrodo labiau minimalistinis ir toks naujoviškesnis, Bootstrap kažkaip senoviškiau atrodo man 🤔

TVheadend Admin Panel V2 (mano kūrinys) 3

Taip atrodo vartotojų valdymas. Manau viskas ir taip aišku kas ką daro.

Viena klaida yra jog spaudžiant First Delete Password po perkrovimo nepasikeičia statusas jog nėra priskirta kodo bet tas kodas yra ištrintas.

Kitoje versijoje gal pavyks sutvarkyti.

IPTV list tai iš tvheadend sugeneruotas ir pritaikytas daugumai grotuvų.

VOD list yra iš Jellyfin, sąrašas pritaikytas irgi įvairiems grotuvams, jeigu nėra Jellyfin kliento įrenginyje tai galima pridėti, kaip VOD į Tivimate.

TVheadend Admin Panel V2 (mano kūrinys) 4

Paspaudus Create User atsidaro langas kuriame supildome duomenis.

Dar netikrinau bet man atrodo jog reikės turėti tokias pačias grupes kanalų, kaip ir pas mane.

TVheadend Admin Panel V2 (mano kūrinys) 5

Apie LT aiškinti nereikia manau 😆 Įvairūs eina naujiems vartotojams o Premium tai tik adminui matomi. Turiu įtarimą jog reikės tik LT ir įvairūs.

Gal kitoje versijoje tai sutvarkysiu su .env failu.

Automatinis vartotojų atjungimas

Principas nėra pats geriausias, bet tai veikia.

Reikia atidaryti tiesiog puslapį kuris pasiekiamas: /auto/index.php

Atidarius ten suveikia post ir atjungia vartotojus kuriems pasibaigė laikas.

Kad taip būtų automatiškai, reikia pridėti į Cron.

Pradžioje reikia slimerjs.

Instrukcijos surašytos jų puslapyje, realiai tai dėl to jog veiktų js naršyklėje be GUI.

Tada reikės Firefox, jeigu gerai pamenu reikės senesnės versijos tai tiesiog portable versiją reikia parsisiųsti.

Tada reikia sukurti sh failą arba tiesiog į Cron rašyti, kaip jau patogiau, asmeniškai mėgstu tokius dalykus rašytis į .sh

!/bin/bash
su - vartotojas_kuris_nera_root -c "/usr/bin/slimerjs /home/vartotojas/firefox/open.js --headless" 2>&1

Manau sintaksė labai paprasta, nurodome vartotoją su kuriuo reikia paleisti.

Slimerjs failą nurodome.

Ir nurodome open.js failą kuriame reikia tokio turinio:

var page = require("webpage").create();
page.open("https://nurodome_adresa/auto/index.php")
.then(function(status){
if (status == "success") {
console.log("The title of the page is: "+ page.title);
}
else {
console.log("Sorry, the page is not loaded");
}
page.close();
phantom.exit();
})

Pasikeičiame paryškintą vietą.

Nepamirštame:

chmod +x firefox.sh

Nurodome crontabe:

/usr/bin/sh /home/vartotojas/firefox/firefox.sh

Pas mane kas valandą pasileidžia.

Dėl sistemos apkrovos

Reikės Glances programos.

Manau paprasčiausias variantas paimti informaciją apie CPU ir RAM.

Įrašymas paprastas, komandos pateiktos jų GitHub.

Paleidimo komanda:

/usr/bin/glances -w --disable-webui --disable-process --disable-plugin sensors,docker,gpu,wifi,hddtemp,raid,amps,ports,folders,cloud,connections,irq,fs,processlist,processcount,diskio,quicklook,ip,network,alert,smart

Atjungia visus dalykus kurių nereikia nes pastebėjau jog didoka apkrova jeigu viskas paleista.

Dėl skirtingų versijų sistemose gali neveikti toks atjungimas tai tada užtenka:

/usr/bin/glances -w

Aišku reiktų į startup įdėti.

sudo systemctl enable glances

Pajungimas

Pas mane Nginx ir PHP 7.4 bei MySQL

Įrašius PHP reikia nepamiršti įrašyti taip pat:

PHP Mysqli modulį ir PHP Curl, kaip įrašyti reikės susirasti su Google pagalba.

Duomenų bazės pajungimas.

Reikia susikurti duomenų bazę.

Ir toje duomenų bazėje įvesti:

TVheadend Admin Panel V2 (mano kūrinys) 6
PHPmyadmin
CREATE TABLE users ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP );

Nginx konfigūracija:

location /iptv {
rewrite ^/iptv/(.*)/(.*)$ /tvh.php?user=$1&pass=$2;
}
location /vod {
rewrite ^/vod/(.*)/(.*)$ /dvr.php?user=$1&pass=$2;
}
location /auto/index.php {
allow 10.66.66.0/24;
allow 192.168.1.0/24;
allow 88.88.88.88/32;
deny all;
}

Pakeičiam paryškintą vietą į savo išorinį IP adresą. Apsaugom su Nginx, kad negalėtų prie /auto/ prieiti. Taip pat suformuoti adresą: ip/iptv/vartotojas/kodas ir gauname playlistą.

Jeigu naudoji Apache tai reikės pagrindiniame aplankale .htaccess su tokiu turiniu:

RewriteEngine On
RewriteRule ^/iptv/(.*)/(.*)$ /tvh.php?user=$1&pass=$2 [L]
RewriteRule ^/vod/(.*)/(.*)$ /dvr.php?user=$1&pass=$2 [L]

Auto aplankale irgi reikės .htaccess su tokiu turiniu:

Order Allow,Deny
Allow from 10.66.66.0/24
Allow from 192.168.1.0/24
Allow from 88.88.88.88/32
Deny from all

Taip pat reikia pakeisti paryškintą IP adresą į savo išorinį (nesu tikras dėl apache, duokite žinoti jeigu tikrai suveikė).

Tarp failų galima rasti .env kuriame reikės viską supildyti.

URL=vartotojas:[email protected]:9981
GLANCESCPU=https://glances_adresas/api/3/cpu?refresh_time=5
GLANCESMEM=https://glances_adresa/api/3/mem?refresh_time=5
PUBLICIP=isorinis_ip_adresas
LOCALIP=vidinis_ip_adreas
IPTVADRESS=https://playlisto_paemimas/iptv
VODADRESS=https://vod_paemimas/vod
ONLYMAINADRESS=tvh_adresas:5
JELLYAPI=api_key=api_raktas
JELLYUSER=user
JELLYURL=https://adreas_jelly
EPG=https://epg_adresas
DBIP=localhost
DBUSERNAME=dbvartotojas
DBPASSWORD=dbkodas
DBNAME=dbpavadinimas
REGISTER=submit

URL – prisijungimo duomenys admino ir IP adresas su Tvheadend prievadu.

Glances – pilnas adresas, reikia tik pasikeisti pradžią, jeigu be domeno tai reikės prievadą pridėti :61208. Jeigu naudojama Glances V2 tai adresas bus:

/api/2/cpu?refresh_time=5
/api/2/cpu?refresh_time=5

Taip pat pajunginėjant klientui radau jog Glances reikalingas Python Bottle paketas.

pip3 install bottle

Jeigu pip neveikia tada reikia ir tą įsidiegti į sistemą.

PUBLICIP – viešas IP adresas, realiai, kaip URL tik čia reikia IP adreso ir be prievado.

LOCALIP – vidinis adresas, gali būti jog reikės tiesiog 192.168.1.1

IPTVADRESS VODADRESS – playlisto paėmimo adresas, čia reikės su Nginx pasitvarkyti dar.

JELLYAPI=api_key=api_raktas pasikeisti tik paryškintą dalį, api randamas admin nustatymuose api skilties nustatymuose, jeigu neturime Jellyfin dedame #

JELLYUSER – admin nustatymuose atsidarome savo vartotoją ir matome id:

TVheadend Admin Panel V2 (mano kūrinys) 7

Jeigu neturime Jellyfin dedame #

JELLYURL – tiesiog Jellyfin adresas. Jeigu neturime Jellyfin dedame #

EPG – EPG adresas.

DBIP=localhost (DB adresas, dažniausiai tas ir bus)

DBUSERNAME=DB vartotojas

DBPASSWORD=DB kodas

DBNAME=DB pavadinimas

Vartotojo registracija vyksta /register.php adresu.

Ten atsidaro forma ir suvedam vartotoją ir kodą. Pakūrus vartotoją permes į prisijungimo langą.

Norint atjungti registraciją reikia .env faile susirasti REGISTER=submit ir pakeisti į REGISTER=submit1

Realiai kas surastų adresą galėtų prisiregistruoti, tad geriau atjungti.

TVheadend Admin Panel failai, tolimesni planai ir parama

Pridedu Firefox, turėtų veikti senoji versija, bei pagrindiniai failai.

Ateities planai, kai bus laiko ir noro:

  • Sutvarkyti registraciją.
  • Šiuo metu planuose yra sutvarkyti mobilų meniu dabar jis nesusitraukia ir palieka, kaip ant didelio ekrano, kadangi meniu tik su dvejais punktais tai pasilikau kitam kartui.
  • Perdaryti vartotojų tvarkymą nes šiuo metu tas lentos principas nelabai patinka, na realiai pagalvoti, kaip gražiau padaryti.
  • Pridėti naktinį režimą (dark mode).
  • Gal dar pridėti kažką į tools dalį, ką dažniausiai tenka naudoti.
  • Taip pat yra bėdų su Firefox ir informacijos atnaujinimu, reiktų pasigilinti kame problema.
  • Pakurti Docker Image lengvam įrašymui.

Jeigu nori paremti mane tai gali perversti į PayPal: [email protected] arba tiesiai susisiek su manimi paštu.

Taip pat jeigu sudėtinga pasijungti irgi galiu padėti už paramos mokestį 🙃

Prie progos permesiu į GitHub.

P.S. radau: TVheadend status manager.

Kadangi senokai kurtas tai dėjau į Docker Base Image Ubuntu 16.04.

Dockerfile:

FROM ubuntu:16.04
LABEL maintainer="evpro"
LABEL maintainer_email="[email protected]"
LABEL version="1.0"
RUN apt-get update -y && apt-get install -y\
curl git-core php7.0 php7.0-cli php7.0-sqlite php7.0-xml\
unzip
RUN mkdir -p /opt/tvheadend-status-manager
RUN git clone https://github.com/Jalle19/tvheadend-status-manager.git /opt/tvheadend-status-manager
WORKDIR /opt/tvheadend-status-manager
RUN curl -sS https://getcomposer.org/installer | php
RUN php composer.phar install
RUN php vendor/bin/propel sql:insert
RUN php vendor/bin/propel migration:migrate
RUN cp app/config.yml.example app/config.yml
RUN cp app/settings.js.example src/client/app/js/settings.js
VOLUME /opt/tvheadend-status-manager/app
VOLUME /opt/tvheadend-status-manager/sql
VOLUME /opt/tvheadend-status-manager/src
ENTRYPOINT ["php", "/opt/tvheadend-status-manager/app/tvheadend-status-manager", "https://cdn.evpro.lt/opt/tvheadend-status-manager/app/config.yml", "-vv"]

Kuris kaupia statistiką ir atrodo taip:

TVheadend Admin Panel V2 (mano kūrinys) 8

Dizainas nelabai man patinka, bet jog pakeisti jį daug knistis reikia, tad bus gerai.

Ar patiko įrašas?

Spausk jog įvertinti.

Vidutinis įvertinimas / 5. Įvertino:

Įvertinimų nėra, būk pirmas!

Jeigu įrašas patiko...

Pasidalink!

Jeigu įrašas nepatiko.

Padėk patobulinti įrašą!

Būtų malonu sužinoti kodėl?


Jeigu patiko įrašas, siūlau prenumeruoti, kaip tai padaryti aprašiau čia (el. paštu, telegram ir discord kanalai, facebook, twitter).

Gal patiks ir kiti įrašai