Mój domowy system oparty na Domoticzu sukcesywnie się rozbudowuje. Coraz więcej urządzeń wysyła i odbiera dane. Z każdym tygodniem wzrasta ilość podłączonych do sieci czujników i przekaźników. W poniższym wpisie pokaże w jaki sposób monitorować, jak długo dane urządzenie jest aktywne. Może się to przydać np. do określenia jak długo dzieci oglądały TV lub grały na Playstation czy ile czasu było włączone oświetlenie zewnętrzne.
Wykorzystamy do tego prosty skrypt w języku LUA. Na początku dodajemy nowy sprzęt System Alive Checker i konfigurujemy ustawienia. Sprawdza on po prostu, przy pomocy pinga czy urządzenie jest aktywne w sieci.
Następnie dodajemy wirtualny czujnik, który będzie odpowiedzialny za wizualizacje danych.
Ustawiamy typ czujnika na „licznik przyrostowy”
Sprawdzamy jakie idx zostało przydzielone dla nowego czujnika. Przechodzimy do katalogu domoticz/scripts/lua i tworzymy nowy skrypt
local timer_device_ID = 52 commandArray = {} commandArray['UpdateDevice'] = timer_device_ID .. '|0|0' local TotalMinutesOn = otherdevices_svalues['Licznik'] if otherdevices['OSMC'] == 'On' then TotalMinutesOn = TotalMinutesOn + 1 end commandArray['UpdateDevice'] = timer_device_ID .. '|0|' .. tostring(TotalMinutesOn) return commandArray
gdzie:
XX – idx czujnika, Media center timer – nazwa licznika, Czas pracy media center – nazwa urządzenia
W zakładce Urządzenia pojawi się nasz licznik. Uzupełniamy pola jak poniżej.
Efekt końcowy wygląda jak poniżej. Oczywiście pamiętamy o restarcie systemu.



Miłego szpiegowania 🙂
Zalecam ostrożność z System Alive Checker w Domoticz. W wielu przypadkach pokazywał mi nieprawdziwe dane, sumował dane z różnych czujników, nie powiązanych ze sobą.
PolubieniePolubienie
Dziękuje bardzo za ostrzeżenie. Sprawdziłem i na razie pokazuje prawidłowe dane. Może przy większej ilości monitorowanych urządzeń pojawią się problemy. Będę czujny i w razie błędów opiszę w poście.
Pozdrawiam i dziękuje za komentarz.
PolubieniePolubienie
U mnie bardzo często wariował ten licznik i pokazywał kosmiczne wartości. Znasz jakąś lepszą alternatywę ?
PolubieniePolubienie
Witam,
Przepraszam, że zadaje zapewne takie błahe pytania ale jestem początkującym.
proszę o wyjaśnienie tej kwestii, jak to po kolei zrobić:
„Sprawdzamy jakie idx zostało przydzielone dla nowego czujnika (to wiem jak zrobić ;)). ale chodzi mi o to dalej – Przechodzimy do katalogu domoticz/scripts/lua i tworzymy nowy skrypt
local timer_device_ID = XX
commandArray = {}
local TotalMinutesOn = otherdevices_svalues[‚Media center timer’]
if otherdevices[‚Czas pracy media center’] == ‚On’ then
TotalMinutesOn = TotalMinutesOn + 1
end
commandArray[‚UpdateDevice’] = timer_device_ID .. ‚|0|’ .. tostring(TotalMinutesOn)
return commandArray
gdzie:
XX – idx czujnika, Media center timer – nazwa licznika, Czas pracy media center – nazwa urządzenia”
jak utworzyć skrypt, jak go nazwać co on ma dokładnie zawierać.
Z góry dziękuję za pomoc
PolubieniePolubienie
Witam.
Po kolei. Logujemy się do Domoticza z konsoli.
ssh pi@192.168.1.xxx ( adres raspberry pi w sieci )
Przechodzimy do katalogu /lua
cd domoticz/scripts/lua
Uruchamiamy edytor nano i tworzymy plik ( u mnie np. script_time_playstation_update.lua )
sudo nano script_time_playstation_update.lua
Otworzy nam się pusty plik. Kopiujemy skrypt CTRL+C z postu i wklejamy do konsoli ( prawy klik ). Naciskamy CTRL+X i zapisujemy Y.
I już. Restartujemy system i działa 🙂
PS. Jeżeli używasz Raspbiana w trybie graficznym robisz wszystko w trybie okienkowym. W Windows używasz PUTTY do połączenia ssh. Można też użyć FileZilla.
Mam nadzieję, że pomogłem. W razie problemów służę radą. Pozdrawiam.
PolubieniePolubione przez 1 osoba
Ten moment „script_time_playstation_update.lua” (swoją drogą warto zmienić w stosunku do przykładu 😉 ) jest ważny i wart dopisania w głównym tekście – faktem jest, że nazwa pliku nie jest sugerowana, a bez jej poprawnej składni skrypt nie zostanie uruchomiony.
Skrypty uruchamiane czasowo muszą mieć początek nazwy script_time_XXX.lua. Inaczej nie będą regularnie wyzwalane przez demona Domoticz.
PolubieniePolubione przez 1 osoba
Witam. Bardzo dziękuję za uwagi. Bardzo istotny komentarz. Uzupełnienie w tekście. Nie wiedziałem dokładnie jak działają skrypty lua. Teraz jest to zdecydowanie jaśniejsze.
Pozdrawiam.
PolubieniePolubienie
Dziękuję za szybką odpowiedź.
Jeszcze dwa pytania do tematu.
1.
Screenshot_20170108_171656.png – na stronie nie widze tego obrazka, co tam sie kryje?
2.
wklejamy to wszystko?
<<<<>>>
PolubieniePolubienie
Przepraszam nie wkleiło.
to wszystko nalezy wkleic do tworzonego skryptu?
local timer_device_ID = XX
commandArray = {}
local TotalMinutesOn = otherdevices_svalues[‚Media center timer’]
if otherdevices[‚Czas pracy media center’] == ‚On’ then
TotalMinutesOn = TotalMinutesOn + 1
end
commandArray[‚UpdateDevice’] = timer_device_ID .. ‚|0|’ .. tostring(TotalMinutesOn)
return commandArray
PolubieniePolubienie
Tak. W linii – local timer_device_ID = XX zamieniamy XX na numer idx wirtualnego czujnika. Z użyciem edytora nano powinno wkleić. Koniecznie przez prawy klik myszy i wklei ( CTRL + V nie działa ). W ostateczności proponuje przepisać uważając na literówki.
Dla pewności można jeszcze nadać prawa do wykonywania:
sudo chmod 777 script_time_playstation_update.lua
U nie nie było takiej potrzeby.
PolubieniePolubienie
Screenshot_20170108_171656.png – na stronie nie widze tego obrazka, co tam sie kryje?
PolubieniePolubienie
Poprawiłem post. Obraz powinien być widoczny.
PolubieniePolubienie
Witam
pojawił się u mnie następujący błąd
Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_czas.lua: /home/pi/domoticz/scripts/lua/script_time_czas.lua:5: unexpected symbol near char(226)
z czego może on wynikać?
PolubieniePolubienie
Witam.
„unexpected symbol near char(226)” oznacza, że jest użyty nierozpoznawany znak. Pewnie znowu WordPress coś źle wyświetla. Popatrzę na skrypt. Na maila wyślę mój działający skrypt. Proszę o informacje czy zadziałał. Sukcesywnie będę umieszczał skrypty w załącznikach, pdf-ach lub na Dropboxie, ponieważ widzę, że WordPress faktycznie nie nadaje się do publikacji kodu. Proszę o cierpliwość.
PolubieniePolubienie
Nie działa. Log poprawny – co minutę „2017-01-21 22:13:00.293 EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_time_osmc_timer.lua”; IDX prawidłowy – a mimo to czas nie zostaje naliczony i czujnik cały czas pokazuje wartość 0. Proszę o sugestie.
PolubieniePolubienie
Podeślij mi swój skrypt na raspberywpraktyce@gmail.com. Rzucę okiem.
PolubieniePolubienie
Witam
Właśnie tak podejrzewałem po zapytaniu wujka Google – natomiast błedu nadal nie znalazłem a maila nie otrzymałem
PolubieniePolubienie
Skrypt poszedł mailem. Sprawdziłem i działa. Powodzenia
PolubieniePolubienie
prześlij mi swój działający skrypt na email herigo@gmail.com nie mogę sobie z tym poradzić cały czas w logach
„Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_play.lua: /home/pi/domoticz/scripts/lua/script_time_play.lua:5: unexpected symbol near char(226)”
PolubieniePolubienie
Te błędy to znak , – trzeba ręcznie je skasować i dawać znak apostrofu z klawiatury. Ok – mój problem rozwiązałem – skrypt działa w końcu (trzeba dokładnie powpisywać nazwy urządzenia i czujnika). Ale ten „System Alive Checker” jest jakiś niedopracowany – on wykrywa urządzenie w stanie „on” ale ma problem z wykryciem w stanie „off” – raz działa, raz nie działa; czasami zmienia to losowo mimo faktu, iż urządzenie jest wyłączone. nie mogę sobie z tym poradzić…
PolubieniePolubienie
I nie poradzisz. Na forum Domoticz ten komponent jest uwzględniany jako błędny. Postaram się wrzucić alternatywne rozwiązanie dzisiaj na blogu i zalinkować.
PolubieniePolubienie
wyślij mi swój skrypt lua na email herigo@gmail.com nie mogę sobie z tym poradzić
PolubieniePolubienie
cezarski – właśnie czytałem na forum domoticz o problemach. będę bardzo wdzięczny za Twoje rozwiązanie. dzięki 🙂
PolubieniePolubienie
Postaram się to dzisiaj ogarnąć. Będzie ciężko, bo po wczorajszym wybiciu bezpieczników w domu musiałem system na malinie stawiać od nowa 😉
Zrobiłem to na podstawie monitorowania adresów MAC urządzeń. To rozwiązanie było na forum Domoticz – http://www.domoticz.com/forum/viewtopic.php?f=23&t=5256.
Jest trochę trudniejsze. Wymaga zastosowania zmiennej użytkownika oraz arping. Do tego baza Domoticz się rozrasta, ale to akurat nie jest żadnym problemem.
PolubieniePolubienie
Herigo – zamień – po skopiowaniu skryptu do edytora w konsoli RPi – wszystkie znaki , na ‚.
PolubieniePolubienie
Herigo – raz jeszcze, bo tutaj w WordPress nie da się tego poprawnie napisać: zamień znaki , na apostrof
PolubieniePolubienie
Ok zmieniłem skrypt się wykonuje ale licznik nie liczy muszę jeszcze sprawdzić nazwy i numery ale z tym to chyba sobie poradzę dzięki za pomoc
PolubieniePolubienie
Herigo – z tym, że ten „System Alive Checker” to bubel raczej. Czekamy na skrypt od @cezarski, jeśli będzie tak miły 🙂
PolubieniePolubienie
Cały czas pokazuje 0 min choć skrypt wykonuje się co 1 min i urządzenie jest aktywne, próbowałem już wszystkich możliwości z nazwami i nr. Proszę o radę z tymi nazwami
local TotalMinutesOn = otherdevices_svalues[‚Media center timer’]
tu nazwa licznika przyrostowego w opisanym przypadku „Media center timer” ?
if otherdevices[‚Czas pracy media center’] == ‚On’ then
czyli nazwa utworzonego sprzętu System Alive Checker o opisanym przypadku „Czas pracy TV ” ?
a nr idx to nr wirtualnego licznika z zakładki urządzenia czy może sprzęt ?
PolubieniePolubienie
Zawsze z zakładki Urządzenia. Jak zauważyli koledzy w postach powyżej „System Alive Checker” potrafi być humorzasty. U mnie po jakimś czasie też zgłupiał. Generalnie faktycznie lepiej sobie z ON a z ponownym włączeniem czasami jest różnie. Zrobię wszystko od początku i dam znać.
PolubieniePolubienie
Sprawdziłem i działa.
W zakładce Sprzęt. „System Alive Checker” – nazwa OSMC, Wirtualny przełącznik ” Licznik” ( Custom sensor ), idx z zakładki Urządzenia. Musi działać. Aktualny skrypt ze zmienionymi nazwami poniżej.
https://drive.google.com/open?id=0Bzpt9erf7jrsdGV5czlzZEN0Mlk
Daj znać czy działa.
U mnie wygląda tak.
https://drive.google.com/open?id=0Bzpt9erf7jrsSG9EenhJSEpxVG8
PolubieniePolubienie
Jak mówiłem – u mnie też działa ale sam „System Alive Checker” jest zawodny i chyba nie warto mu ufać. Ale – sprawdź to proszę; powinno być zdecydowanie lepiej:
http://domoticz.com/wiki/Presence_detection
Jeszcze nie testowałem, ale zamierza,. Przetestuj proszę, jeżeli uznasz to za stosowne 🙂
PolubieniePolubienie
Nie wygląda na zbyt skomplikowane. Oczywiście przetestuje w wolnej chwili. Dziękuje za podrzucenie pomysłu.
Moim zdaniem ten skrypt sprawdza tylko czy urządzenie jest w sieci i na tej podstawie zmienia stan przełącznika. Nic nie zlicza. Podobnie działa u mnie przełącznik KODI. Nie tylko sprawdza czy Kodi jest uruchomione ( zapisuje stany ) ale pozwala również sterować odtwarzaczem. Można to wykorzystać ( po zmianie typu przełącznika ) do monitorowania innych urządzeń.
PolubieniePolubienie
@Up – tak masz rację, ale przecież o to nam chodzi – ten skrypt ma zastąpić niedziałający poprawnie „System Alive Checker”. A skrypt zliczający to osobna sprawa i może być ten co zaproponowałeś (jest na forum Domoticz również).
Druga sprawa – jest ciekawy skrypt tutaj:
https://www.domoticz.com/forum/viewtopic.php?f=38&t=11985&start=20#p99409
T jeden skrypt, który ma działąć dla wielu urządzeń, których stan chcemy zliczać. Z tym, że jest problem – pomimo prawidłowych ustawień zlicza tylko ostatnie urządzenie. Ale warto by się nad tym pochylić – możesz zerknąć?
PolubieniePolubienie
Ciągle nie mam czasu dokończyć wpisu, ale z tego co widzę, mam na to rozwiązanie. Zlicza mi czas działania, PS4, laptopów, itd. Sprawdzę go jednak dodatkowo, bo może mi się tylko tak wydaje 😉 Postaram się go w końcu opublikować.
PolubieniePolubienie
OK. Dzięki
PolubieniePolubienie
Coś było nie tak z moim postem, że nie przeszedł moderacji?
PolubieniePolubienie
Wszystkie komentarze zatwierdzam. Nie moderuje komentarzy. Może gdzieś mi umknął. Przepraszam.
PolubieniePolubienie
Dałem link do ciekawego skryptu w temacie niniejszego wątku.
PolubieniePolubienie
Udało mi się chyba znaleźć sposób na osadzanie kodu w WordPressie. Poprawię post aby zgadzał się z kodem. Sukcesywnie będę poprawiał wszystkie skrypty. Mam nadzieją, że teraz będzie wszystko OK.
PolubieniePolubienie
Fajnie 🙂
PolubieniePolubienie
Testuję http://domoticz.com/wiki/Presence_detection i wydaję mi się, że działa w porządku w zakresie poprawnego wykrywania on lub off urządzeń w sieci.
PolubieniePolubienie
Próbowałem również uruchomić ten skrypt ale u mnie nie poszedł. Jeżeli możesz to prześlij mi swój skrypt na raspberrywpraktyce@gmail.com. Zobaczę co robiłem źle.
PolubieniePolubienie
@up – który skrypt? ten z http://domoticz.com/wiki/Presence_detection ? Jest dokładną kopią tej strony; tylko zmieniłem dane w sekcji # Settings for the domoticz server
PolubieniePolubienie
Ok. Testowałem ten skrypt z forum i były jakieś błędy. Sprawdzę ten oficjalny.
PolubieniePolubienie
Póki co bez zarzutu – sprawnie wykrywa on/off
PolubieniePolubienie
Potwierdzam. Działa. W wolnej chwili opiszę na blogu, żeby było w jednym miejscu. Może komuś się przyda.
PolubieniePolubienie
Cieszę się 🙂
PolubieniePolubienie
U mnie w logach taki problem
EventSystem: in /home/pi/domoticz/scripts/lua/script_time_update.lua: /home/pi/domoticz/scripts/lua/script_time_update.lua:4: attempt to concatenate global ‚timer_device_ID’ (a nil value) i nie mogę sobie z tym poradzić
PolubieniePolubienie
Nie mogę znaleźć przyczyny. Pogrzebałem w goolach ale ten problem może dotyczyć wielu rzeczy. Generalnie chyba jest błąd składni w skrypcie. Może jest jakaś literówka. Poniżej mój skrypt. Może pomoże.
local timer_device_ID = 41
commandArray = {}
commandArray[‚UpdateDevice’] = timer_device_ID .. ‚|0|0’
local TotalMinutesOn = otherdevices_svalues[‚Media center timer’]
if otherdevices[‚Czas pracy TV’] == ‚On’ then
TotalMinutesOn = TotalMinutesOn + 1
end
commandArray[‚UpdateDevice’] = timer_device_ID .. ‚|0|’ .. tostring(TotalMinutesOn)
return commandArray
PolubieniePolubienie
Cześć
Nie działa mi Twój skrypt. W logach pojawia się komunikat EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_time_macmini.lua i nie za bardzo wiem o co chodzi 😦
PolubieniePolubienie
Witajcie morze ktoś opublikować skrypt z liczenia np czasu pracy kotła czy włączonej żarówki ?
PolubieniePolubienie
Witam,
Przerabiam (zmieniając wpisy nazw i urządzeń) ten prosty skrypt i ciągle się nie kompiluje.
Powstawiałem Twoje nazwy i również nic. Dostaję comunikat:
lua: ./lua/script_time_czas_pracy_urzadzen.lua:4: attempt to index global ‚otherdevices_svalues’ (a nil value)
stack traceback:
./lua/script_time_czas_pracy_urzadzen.lua:4: in main chunk
[C]: ?
Może coś nie tak z ustawieniami w Domoticzu odnośnie skryptów LUA?
Na pewno skrypt sie wykonuje bo licznik min działa.
Pozdrawiam,
PolubieniePolubienie
Witam, u mnie też nie działa. i mam kilka pytań co do tego:
1. local timer_device_ID = xx (podajemy tu IDX mierzonego urządzenia, czy IDX utworzonego licznika?)
2. local TotalMinutesOn = otherdevices_svalues[‚Licznik’] (nazwę czego wpisujemy w polu [‚LICZNIK’]?)
3. if otherdevices[‚OSMC’] == ‚On’ then (nazwę czego wpisujemy w polu [‚OSMC’]?)
W tutorialu jest to niezrozumiale opisane, i motam się z tym dłuższy czas
PolubieniePolubienie
1. utworzony licznik
2. nazwę utworzonego licznika
3. nazwę wyłącznika urządzenia Switch On/Off
Polecam jednak jako urządzenie pomiarowe nie ten z domoticz tylko skrypt napisany przez cezarego
https://cezarowy.blogspot.com/2017/10/monitorowanie-aktywnosci-urzadzen-w.html?m=1
Niestety ten z domoticz nie działa poprawnie. Pokazuje stan On w momencie odpytania jest nil.
PolubieniePolubienie
Wszystko śmiga, dzięki. Tak używam tego drugiego skryptu 🙂
PolubieniePolubienie
Skrypt działa do restartu maliny, po restarcie pokazuje kosmiczne wartości. np. dzisiaj: 18446744073709551615 min.
PolubieniePolubienie
>Skrypt działa do restartu maliny, po restarcie pokazuje kosmiczne wartości. np. dzisiaj: 18446744073709551615 min.
potwierdzam mam ten sam błąd 😦
najciekawsze jest to ze wgrywając backup liczniki maja prawidłowe wartości natomiast seiczka robi sie jak dodam byle jakie urzadzenie czujnik itp itd wtedy jest wartosc z kosmou 18446744073709551615 min.
PolubieniePolubienie
Mam tak samo – jakieś kosmiczne wartości. Ale ja muszę uruchamiać przez crontab. Nie działa mi script_time_Presence.lua
Mój script_time_Presence.lua
CODE: SELECT ALL
function splitString(str, delim, maxNb)
— Eliminate bad cases…
if string.find(str, delim) == nil then
return { str }
end
if maxNb == nil or maxNb < 1 then
maxNb = 0 — No limit
end
local result = {}
local pat = "(.-)" .. delim .. "()"
local nb = 0
local lastPos
for part, pos in string.gmatch(str, pat) do
nb = nb + 1
result[nb] = part
lastPos = pos
if nb == maxNb then break end
end
— Handle the last field
if nb ~= maxNb then
result[nb + 1] = string.sub(str, lastPos)
end
return result
end
commandArray = {}
maclist= uservariables['PRESENCE_LIST']
Lines=splitString(maclist,"|")
for i,line in pairs(Lines) do
–print (i.." "..line)
macs=splitString(line,";")
print ("MAC Address to Poll: "..macs[1].." On IDX:"..macs[2])
execcommand="sudo /home/domoticz/domoticz/scripts/Check_MAC.sh "..macs[1].." "..macs[2].." &"
os.execute(execcommand)
end
Domoticz Log
2019-12-07 16:04:00.300 Status: LUA: MAC Address to Poll: 90:2c:34:1f:12:4b On IDX:37
2019-12-07 16:04:00.316 Status: LUA: MAC Address to Poll: d0:f8:8c:10:3b:eb On IDX:41
2019-12-07 16:04:00.334 Status: LUA: MAC Address to Poll: d0:f8:6b:8c:57:bf On IDX:42
2019-12-07 16:04:00.359 Status: LUA: MAC Address to Poll: 90:10:34:1a:b5:03 On IDX:39
2019-12-07 16:05:00.296 Status: LUA: MAC Address to Poll: 4c:2b:34:1f:bb:4b On IDX:35
jak uruchomię ręcznie lub z crontab
sudo /home/domoticz/domoticz/scripts/Check_MAC.sh d0:f8:6b:8c:57:bf 42
Domoticz log jest:
2019-12-07 16:33:25.577 (Czasy) Light/Switch (Ania telefon czas)
2019-12-07 16:33:25.570 Status: User: Admin initiated a switch command (42/Ania telefon czas/Off)
jakby był jakiś problem z komendą LUA os.execute(execcommand)
Używam Orange PI One z Armbian_19.11.3_Orangepione_buster_current_5.3.9
PolubieniePolubienie
Po aktualizacji Domoticza do wersji 2020.1 skrypt całkiem oszalał (w poprzedniej wersji domotiza miałem podobnie – przy restarcie Domoticza pokazywało kosmiczne wartości, ale radziłem sobie z tym edytując bazę Domoticza (co prawda w nowej wersji 2020.1 jest problem z importem bazy, bo po imporcie muszę restartować Domoticza – nie widzi starych ustawień :(), ale teraz skrypt nie działa tak jak powinien (dodaje ilość minut bez względu na to czy urządzenie jest włączone czy nie i to po kilkadziesiąt jednostek na raz!.
Czy mozna prosić o „naprawienie” skryptu, a może ktoś do „przetłumaczy” do na dzVents.
PolubieniePolubienie
Witam. Zamiast „Licznika przyrostowego” wybierz „Licznik” i skrypt znowu działa poprawnie.
PolubieniePolubienie