Witam
Potrzebuje z sumować trzy liczniki energii PZEM004T podłączone do trzech klimatyzatorów tak a żebym od razu widział ile dziennie zużywają mi prądu wszystkie trzy klimatyzatory razem.
utworzyłem zdarzenie które powinno mi zsumować trzy pierwsze pozycje (327,328,330) i wypluć sumę w pozycji 331 ale pewnie mam kilka błędów w tej formuje. ktoś może podpowiedzieć mi co należy zmienić aby mi to zaczęło liczyć, bo sam niestety nie jestem w stanie rozgryźć. Nie bardzo wiem co wpisać w formule zamiast RFXMeter, bo to na pewno jest nie poprawne
@adamdudek chcesz aktualizować licznik, którego wartość powinna cały czas rosnąć , tak jak w liczniku zakładu energetycznego, wyłączysz klimy i będą bzdury. Użyj CustomSensor jako (331)
Jak chcesz zbierać wartości dzienne to powinno być domoticz.devices(327).counterToday
a aktualizowany czujnik domoticz.devices(331).updateCustomSensor
Witam,
mam podobny temat. Dwa lata temu wymieniłem podlicznik do pompy ciepła na elektroniczny. W domoticzu mam dane z ciepłomierza i z tego nowego podlicznika-potrzebuję uaktualnić obliczanie SCOP pompy ciepła (średnia sprawność) o zużycie grzałki CWU (załącza się na 10 min przy wzroście napięcia z fotowoltaiki).
Czy poniższy zapis jest ok ?
return { on = { devices = {'Energia PC kWh'} }, logging = { level = domoticz.LOG_DEBUG, -- zmien na domoticz.LOG_ERROR, gdy skrypt bedzie Ok marker = "Energia PC kWh" }, execute = function(domoticz, device) local p = tonumber(domoticz.devices('PC zużycie kWh').state) local k = tonumber(domoticz.devices('Energia PC kWh').state) local w = domoticz.devices('SCOP od 04012020') local z = tonumber(domoticz.devices('Grzałka CWU zużycie').state) -- Obliczenia local w = domoticz.utils.round( (k - z - 29838) / (p - 28) ,2) domoticz.log('SCOP od 04012020' , domoticz.LOG_INFO) w.updateCustomSensor('SCOP od 04012020') end }
Chodzi mi głównie o ten zapis (k - z - 29838).
No i czy zapis dot logów jest ok
domoticz.log('SCOP od 04012020' , domoticz.LOG_INFO) w.updateCustomSensor('SCOP od 04012020')
Dodam tylko ,że błędami nie sypie -ale "tajemniczo" nic się nie zmienia...SCOP taki sam
Tajemniczy to jest cały ten wpis, :)) Nic nie wiadomo o urządzeniach a na dodatek nadużywany jest local
Jednak pojawiły się błędy :
2022-08-20 14:28:02.421 Error: dzVents: Error: (3.1.7) Energia PC kWh: An error occurred when calling event handler SCOP od 04012020 2022-08-20 14:28:02.421 Error: dzVents: Error: (3.1.7) Energia PC kWh: ...z/scripts/dzVents/generated_scripts/SCOP od 04012020.lua:17: attempt to index a number value (local 'w')
Tajemniczy to jest cały ten wpis, :)) Nic nie wiadomo o urządzeniach a na dodatek nadużywany jest local
Dane p,k,z działaja prawidłowo -są odczyty w tych samych jednostkach (kWh).
Co jest nieprawidłowo ? Local użyłem wg Twojego pomysłu-jak można to zmienić ,to ok...tylko nie wiem jak i dlaczego 😮
Zrobiłem jeszcze korektę , zobaczymy...
Dodałem scop jako w-nie wiem czy to dobrze rozumiem
return { on = { devices = {'Energia PC kWh'} }, logging = { level = domoticz.LOG_DEBUG, -- zmien na domoticz.LOG_ERROR, gdy skrypt bedzie Ok marker = "Energia PC kWh" }, execute = function(domoticz, device) local p = tonumber(domoticz.devices('PC zużycie kWh').state) local k = tonumber(domoticz.devices('Energia PC kWh').state) local w = domoticz.devices('SCOP od 04012020') local z = tonumber(domoticz.devices('Grzałka CWU zużycie').state) -- Obliczenia local scop = domoticz.utils.round( (k - z - 29838) / (p - 28) ,2) domoticz.log('SCOP pompy'..scop..'SCOP' , domoticz.LOG_INFO) w.updateCustomSensor(scop) end }
Local użyłem wg Twojego pomysłu
Jak robisz coś bezmyślnie, to nie powołuj się proszę na moje pomysły :))
Local jest tylko po to ,że by nie używać długich nazw-jeśli jest jakieś więcej zadanie , to nie wiem...
Nie wiem co jest nie tak z używaniem local ?
Ot , i tyle
Local jest tylko po to ,że by nie używać długich nazw
To prawda , więc dlaczego skoro raz użyłeś local w = xxxxxx, potem w obliczeniach znów to powielasz ? przecież już wiadomo jaka to nazwa :))
Local jest tylko po to ,że by nie używać długich nazw
To prawda , więc dlaczego skoro raz użyłeś local w = xxxxxx, potem w obliczeniach znów to powielasz ? przecież już wiadomo jaka to nazwa :))
Ale w tym poprawionym zapisie jest poprawione to.
Zrobiłem małą modyfikację i co ciekawe skrypt zadziałał tj zmieniła się wartość SCOP i nie ma błędów (na razie).
return { on = { devices = {'Energia PC kWh'} }, logging = { level = domoticz.LOG_DEBUG, -- zmien na domoticz.LOG_ERROR, gdy skrypt bedzie Ok marker = "Energia PC kWh" }, execute = function(domoticz, device) local p = tonumber(domoticz.devices('PC zużycie kWh').state) local k = tonumber(domoticz.devices('Energia PC kWh').state) local w = domoticz.devices('SCOP od 04012020') local z = tonumber(domoticz.devices('Grzałka CWU zużycie').state) -- Obliczenia local scop = domoticz.utils.round( (k - z - 29838) / (p - 28) ,2) domoticz.log('SCOP pompy'..scop..'SCOP' , domoticz.LOG_INFO) w.updateCustomSensor(scop) end }
Nie rozumiem tego zapisu :
domoticz.log('SCOP pompy'..scop..'SCOP' , domoticz.LOG_INFO)
Chodzi mi to konkretnie : ('SCOP pompy'..scop..'SCOP'
Wzorowałem się (tak , na małpę-przyznaję bez bicia) na podobnym zapisie-czy w tym nawiasie nie może być sam scop ?
Dlaczego są z przodu te opisy i z tyłu ?
Ok-dokopałem się do informacji odnośnie opisu w logach-chodzi o pomocnicze treści.
Jeszcze jedna sprawa-zauważyłem ,że mam przekłamanie przy przeliczaniu Gj na kWh.
Wygląda jakby zapis nie mnożył wartości po przecinku -tak to wygląda :
local p = tonumber(dz.devices('ciepłomierz energia').state) local w = dz.devices('Energia PC kWh') -- Obliczenia local kWh = dz.utils.round( p * 277.77 ,2)
Wartość p jest z dwoma miejscami po przecinku-działanie mnoży jakby tylko wartości całkowite. Czy jest na to jakiś sposób ?
Niestety nie znalazłem rozwiązania-więc zacząłem robić eksperymenty...
Najpierw przemnożyłem x100 odczyt z ciepłomierza o wartości 308,85Gj...wynik wyszedł jak należy tj 30885.
Zmieniłem zatem zapis w przeliczniku-jak domoticz "nie widzi" wartości po przecinku , to pomnożyłem x100 , a potem podzieliłem...i jest ok. Nie potrafię zrobić jak należy ,zrobiłem jak mogłem.
Oto działający zapis :
return { on = { devices = {'ciepłomierz energia'} }, logging = { level = domoticz.LOG_DEBUG, -- zmien na domoticz.LOG_ERROR, gdy skrypt bedzie Ok marker = "przelicznik kWh" }, execute = function(dz, device) local p = tonumber(dz.devices('ciepłomierz energia').state) local w = dz.devices('Energia PC kWh') -- Obliczenia local kWh = dz.utils.round( (p * 100 * 277.77) / 100 ,2) dz.log('PC Gj na kWh' .. kWh.. 'kWh' , dz.LOG_INFO) w.updateCustomSensor(kWh) end }
Ok, a teraz idę na winko i jakiś film. O!
Tymczasem
local kWh = dz.utils.round( (p * 100 * 277.77) / 100 ,2)
Dlaczego taki bezsensowny zapis ? Chyba wiem "Małpa" rządzi a nie głowa :)) . Co robi dz.utils.round ? Poczytaj
Nie mogę nic konkretnego znaleźć-poproszę o link.
Znalazłem tylko info na zagranicznym forum -round zaokrągla.
Nie wiem jaka komenda będzie lepsza od round
Witam niby proste a jednak, cos ciągle źle robię
chciałbym na 1 kafelku zsumować 2 liczniki które mam od 2 falowników
mianowicie 1 kafelek produkcja z 2 kafelków na domoticzu - General kWh
na 2 produkcja dzienne z obu liczników - General kWh
poproszę o pomoc
cos ciągle źle robię
Wstaw to co robisz, nie ma się co wstydzić każdy kiedyś zaczynał. Zobaczymy czy da się coś poprawić
return {
on = {
devices = { 575 }
},
execute = function(domoticz, item)
local fotowoltaikadach = domoticz.devices(575)
local fotowoltaikaogrod = domoticz.devices(847)
local totalfotowoltaika = domoticz.devices(856)
totalfotowoltaika.updateElectricity(
fotowoltaikadach.WhActual + fotowoltaikaogrod.WhActual,
fotowoltaikadach.WhToday + fotowoltaikaogrod.WhToday
)
end
}
w logach domoticza
skryptu sam nie pisalem jedynie przerobiłem
Dodaj te przerobine wypociny jako skrypt dzVents, a nie LUA i zobacz co będzie.
Działa! piwo mailem? Dziękuje, taki niby banał a jednak brakowało mi pomysłu. Jeszcze jednak prośba, co dopisać i gdzie by skrypt miał wykonanie co 1 min