Mam w domu dwa wodomierze; jeden główny na cały dom i ogród, a drugi osobny tylko na ogród. Chodzi mi o wyliczenie różnicy między wskazaniami wodomierza głównego i tego na ogród. Próbowałem coś naskrobać przy pomocy ChatGPT, ale nie do końca udało mi się osiągnąć mój cel. Każdy skrypt który wypluł mi wspomniany ChatGPT po każdym uruchomieniu dodaje wyliczoną różnicę dwóch liczników do wyliczonej w poprzednim uruchomieniu wartości zapisanej w liczniku woda i ściek co powoduje, że wartość tego licznika rośnie w nieskończoność. Poniżej skrypt, który działa właśnie tak jak wyżej opisałem. Czy mógłby ktoś rzucić na niego okiem i powiedzieć co z nim jest nie tak?
return { on = { timer = { 'every 1 minutes' -- Uruchamia skrypt co jedną minutę } }, execute = function(domoticz) local counter1 = domoticz.devices('NazwaLicznika1') -- Zastąp 'NazwaLicznika1' nazwą pierwszego licznika local counter2 = domoticz.devices('NazwaLicznika2') -- Zastąp 'NazwaLicznika2' nazwą drugiego licznika local resultCounter = domoticz.devices('woda i ściek') -- Zastąp 'woda i ściek' nazwą licznika, do którego zapisywana jest różnica local count1 = counter1.counter -- Pobiera wartość licznika 1 local count2 = counter2.counter -- Pobiera wartość licznika 2 local difference = count1 - count2 -- Oblicza różnicę resultCounter.updateCounter(difference) -- Aktualizuje wartość trzeciego licznika o obliczoną różnicę end }
co z nim jest nie tak?
Użycie licznika do wskazywania różnicy jest nie tak 🙂 Użyj do tych wskazań Custom Sensor wtedy przy każdej aktualizacji u Ciebie co minutę stara wartość zostanie nadpisana nową.
Urządzenie typu Licznik ma za zadanie dodawać do poprzedniej wartości nową bo mierzy coś w interwale czasowym, np co godzinę, więc jeśli w pierwszej godzinie zużyto 2 a w drugiej 4, to licznik ma to zsumować a nie podmienić 2 na 4.
Jak poświęcisz trochę więcej czasu niż ślepe przepisanie tego co zasugerował ChatGPT i prześledzisz to forum, to znajdziesz prawie gotowe przykłady z użyciem CustomSensor zamiast Counter.
Twoja podpowiedź jak zwykle okazała się przełomowa. Chciałbym jednak dokonać jeszcze pewnej korekty wyświetlania wartości. Obecnie wygląda to u mnie tak:
Jak widać matematycznie wygląda to tak: Woda = Woda ogólny - Woda ogród. W Custom sensor Woda widać wyliczoną jedynie różnicę ogólną liczników. Czy da się zrobić, żeby w Custom sensor (lub też innym urządzeniu) wyliczana była również różnica dobowego zużycia wody?
Dodałem jeszcze oprócz Custom sensora urządzenie Licznik. Różnica ogólna zliczana jest prawidłowo, zarówno w Custom Sensorze jak i w Liczniku, ale nie aktualizuje się różnica dobowa, cały czas widnieje 0.
Skrypt jak poniżej. Czy jakaś dobra dusza podpowie co należy dopisać aby również dobowa różnica była obliczana?
return { active = true, on = { devices = { 'Woda ogólny', 'Woda ogród' } }, logging = { level = domoticz.LOG_DEBUG, marker = "Counter Difference Script" }, execute = function(domoticz, device) domoticz.log('Skrypt uruchomiony z powodu zmiany stanu urządzenia: ' .. device.name, domoticz.LOG_DEBUG) local count1 = domoticz.devices('Woda ogólny').counter local count2 = domoticz.devices('Woda ogród').counter local resultCounter = domoticz.devices('licznik woda test') domoticz.log('Woda ogólny: ' .. tostring(count1), domoticz.LOG_DEBUG) domoticz.log('Woda ogród: ' .. tostring(count2), domoticz.LOG_DEBUG) if count1 ~= nil and count2 ~= nil then local difference = count1 - count2 domoticz.log('Różnica: ' .. tostring(difference), domoticz.LOG_DEBUG) resultCounter.updateCounter(difference) else domoticz.log('Jedno z urządzeń ma wartość nil', domoticz.LOG_ERROR) end end }