Obliczenie ilości e...
 
Powiadomienia
Wyczyść wszystko

[Rozwiązany] Obliczenie ilości energii cieplnej wyprodukowanej przez źródło ciepła

32 Wpisów
2 Użytkownicy
6 Reactions
574 Wyświetleń
geoterm
(@geoterm)
Wpisów: 200
Pomocny
Autor tematu
 

Na stronie ESPEasy 

https://espeasy.readthedocs.io/en/latest/Rules/Rules.html

jest taki gotowy kod. Potrzebuję trochę wsparcia. 

Chcę stworzyć urządzenie, które zliczy mi ilość Kwh ciepła  wyprodukowane przez pompę ciepła, która pobiera moc elektryczną w Watach.

W Domoticzu nie wiem czy jest jakieś urządzenie, które to wykonane, ale chyba też potrzebny jest skrypt. 

Swoją drogą ciekawy jestem jak to wygląda np. w Home Asistancie, w którym chcę wylądować, czy też się trzeba tak męczyć ?

DO brzegu. Jak zrozumiałem:

Muszę stworzyć dummy device o nazwie "Power" z pozycjami:

1. sekundy ilośc miejsc po przecinku 0, "Seconds"

2. PowerUsed  : 0,0001

a var#4, var#3 ? czy mam zrobić takie w dummy device? A zmienne nr 1 i 5 ? int#1  i int#5

gdzie tu jest moc urządzenia w watach-moc źródłowa ?

Mowa jest o GPIO-14. Ja mam PZEM-004T działa po RX TX. 

Czy sobie dać spokój ? 

// Used variables: 1,3,4,5

On GPIO#14 Do // GPIO-14 = D5 on Wemos/NodeMCU ESP8266 boards
  If %eventvalue1%=0 // On state
    Let,1,%syssec_d% // Store current nr of seconds of today in var#1
  Else // Off state
    Event,CalcPower // Don't queue
    Event,TransmitPower // Send out to receiver
  Endif
  Let,5,!%eventvalue1% // 0 = On, to invert on/off state change to: Let,5,%eventvalue1%
  LogEntry,"Power [int#5#O#C], measured: [Power#Seconds] sec. [Power#PowerUsed#d.4] kWh"
Endon

On CalcPower Do
  TaskValueSet,Power,Seconds,[Power#Seconds]+%syssec_d%-[int#1] // Add run time to Power#Seconds
  Let,4,[Power#Seconds]*[var#3] // Wattseconds
  If [var#4]>0
    TaskValueSet,Power,PowerUsed,[var#4]/3600000 // Wattseconds to kWh
  Endif
  TaskRun,Power
Endon

On TransmitPower Do
  // Send value of [Power#Seconds] and [Power#PowerUsed] to wherever you need it, adjust as needed
  PostToHTTP,192.168.1.20,8080,/receiver.php,'','%lcltime% !!! Total RunningTime = [Power#Seconds] Seconds, PowerUsed = [Power#PowerUsed] kWh'
Endon

On Clock#Time=All,00:00 Do // At midnight
  // Include power used until midnight
  If [Plugin#GPIO#PinState#14]=0 // Still on?
    Event,CalcPower // Don't queue
  Endif
  Let,1,0 // Reset start time
  Event,TransmitPower // Send out remainder of the day
  TaskValueSet,Power,Seconds,0 // Reset total counter
  TaskValueSet,Power,PowerUsed,0 // Reset total power
Endon

On System#Boot Do
  Monitor,gpio,14 // Generate an event when the GPIO state changes
  Let,3,250 // Wattage of the load, adjust as needed
Endon

 
Dodane : 18/12/2025 9:37 pm
isom
 isom
(@isom)
Wpisów: 5306
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Jak masz pzem to ten zestaw reguł nie jest dla Ciebie. 

Ten kod mierzy, jak długo urządzenie podłączone do GPIO 14 jest włączone, liczy na tej podstawie zużycie energii elektrycznej, zapisuje to w logach, wysyła na serwer po http i resetuje liczniki każdego dnia o północy. Takie coś można użyć gdy masz np grzałkę o  znanej mocy 500W i chcesz żeby policzyć ile zużyła przez dzień.

Tyle i aż tyle, wiec twój pzem ma się do tego nijak 🙂


 
Dodane : 18/12/2025 10:53 pm
geoterm zareagował
geoterm
(@geoterm)
Wpisów: 200
Pomocny
Autor tematu
 

No i elegancko, idziemy tą drogą. 


 
Dodane : 19/12/2025 7:25 am
isom
 isom
(@isom)
Wpisów: 5306
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

To szerokiej drogi. Nie wiem jak chcesz obliczać współczynnik wydajności pompy ciepła korzystając z tego zestawu reguł.

Obejrzyj sobie ten materiał i odpowiedź sam znajdziesz https://www.youtube.com/watch?v=xjKClsN_dL0


 
Dodane : 19/12/2025 8:39 am
geoterm zareagował
geoterm
(@geoterm)
Wpisów: 200
Pomocny
Autor tematu
 

Oglądałem już ten film. Mam obliczany współczynnik cop w Domoticzu, ale w ESP też umiem to zrobić, żeby obliczył COP. 


 
Dodane : 19/12/2025 10:09 am
isom
 isom
(@isom)
Wpisów: 5306
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

No ale ciepłomierza ten kod też nie zrobi, bo on bazuje na stałej wartości pobieranej mocy i czasie. Nie oblicza mocy urządzenia podłączonego do GPIO. To jest taki średnio dokładny wskaźnik ile mogło pobrać przez dobę coś co jest włączone przez określony czas.

A średnio dokładny dlatego, że nawet moc grzałki zależy od wartości napięcia, a ono u nikogo nie jest wartością stałą i wiadomo dlaczego 🙂


 
Dodane : 19/12/2025 10:30 am
geoterm
(@geoterm)
Wpisów: 200
Pomocny
Autor tematu
 

Już na pewno wiesz, że momentami kuleję w tej automatyce, ale jak już kółeczka zrobią mi klik klik to wtedy sobie raczkuję. Ważne aby do przodu. Ja jestem prostym mechanikiem z wykształcenia więc jeśli chodzi o inżynierię sanitarną, zatem moc, przepływy, itp. to już moja bajka. 

Zrobił w Espeasy moc, cop pompy ciepła :). 

image
image

Ale jeszcze wątek poboczny. Czy da się w tasmocie podłączyć kilka wyświetlaczy 7 segmentowych do jednej płytki ESP? Bo w esp easy można tylko jeden. 


 
Dodane : 19/12/2025 10:41 am
geoterm
(@geoterm)
Wpisów: 200
Pomocny
Autor tematu
 

Rozumiem, to działa, zakłada, że moc pobierana przez grzałkę jest constans.

Ale liczenie samego czasu raczej jest precyzyjne. 

Dlatego PZEM004T


 
Dodane : 19/12/2025 10:43 am
geoterm
(@geoterm)
Wpisów: 200
Pomocny
Autor tematu
 

Dobra, przypomniało mi się, że robiłem kiedyś skrypt w DZ VENTS DEVICE czas pracy turbiny wiatrowej,

return {
on = { timer = {'every minute'} 
},
logging = 
{
level = domoticz.LOG_ERROR,
marker = 'Licznik',
},
execute = function(domoticz, _ )
local myDevice = domoticz.devices(115)
local aktlicznik = domoticz.devices(120).counter
if myDevice.state == "On" then
aktlicznik = aktlicznik + 1
domoticz.devices(120).updateCounter(aktlicznik)
end
end 
}

Więc zrobię to w domoticzu, ale jak utknę to poproszę Cię o pomoc. I już spytam, bo jak zrozumiałem, to będzie to liczyć co każdą minutę, czy też liczy co sekundę ale do worka wrzuca co minutę ?


 
Dodane : 19/12/2025 10:55 am
isom
 isom
(@isom)
Wpisów: 5306
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

To Ty kolego podstawiasz wartość mocy a nie pzem , tak na początek musisz

On System#Boot Do
  Monitor,gpio,14     // Monitoruj zmiany stanu GPIO14
  Let,3,500           // Przyjęta moc urządzenia: 500 W
EndOn

Tu określasz jakiej mocy urządzenie jest na GPIO14 czyli co załącza przekaźnik 

Potem jest obliczany czas włączonego przekaźnika 

A skrypt, którego używasz, to zwykły licznik czasu, który co minutę sprawdza czy urządzenie jest włączone i jeśli tak zwiększa wartość wirtualnego licznika o 1 

 


 
Dodane : 19/12/2025 11:04 am
geoterm zareagował
geoterm
(@geoterm)
Wpisów: 200
Pomocny
Autor tematu
 

@isom a dziękuję, to już mi dużo tłumaczy,  czemu zamiast wartości constans nie można tam wstawić pozycji z tabelki [pzem#W] ?


 
Dodane : 19/12/2025 11:07 am
isom
 isom
(@isom)
Wpisów: 5306
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Dlatego że w dalszej części kodu ta wartość nie jest sprawdzana a tylko podstawiana 


 
Dodane : 19/12/2025 11:13 am
geoterm zareagował
geoterm
(@geoterm)
Wpisów: 200
Pomocny
Autor tematu
 

Hmmmm, to na razie zostawię ten skrypt LUA i domoticza. 

Jest też taki skrypt z ESPEasy : czas pracy urządzenia.

Czyli tamten skrypt liczy czas włączenia GPIO, a ten liczy i włączenia i wyłączenia i jest warunek progowy-idealny do mojego PZEM-a:) -będzie się miał nie nijak .

OD tego zacznę bo już mam pomysła:

Aby rejestrować dzienny czas aktywności urządzenia (w sekundach), opracowano poniższe reguły (na forum).

Wymagane zadania urządzenia:

  • Czujnik (w przykładzie temperatura)

  • Urządzenie pozorne (nazwane Dummyw tym przykładzie, minimalne 2 wartości LoggingONi LoggingOFF), Interwał można ustawić na 0

Zmieniono: 2025-03-21 Użyj zmiennych nazwanych zamiast zmiennych numerowanych.

On System#Boot Do
  TaskValueSet,Dummy,LoggingON,1 // Make sure timer is started and Heater ON message is sent
Endon

On DS1#Temperature Do // Check tmeperature
  If %eventvalue1% < 40
    GPIO,5,0
    AsyncEvent,HeaterON=%eventvalue1%
  Endif
  If %eventvalue1% > 55
    GPIO,5,1
    AsyncEvent,HeaterOFF=%eventvalue1%
  Endif
Endon

On HeaterON Do // Optional 1st argument is the temperature, defaults to the value of DS1#Temperature if not provided
  If [Dummy#LoggingON] = 1
    Let,secs,%syssec_d% // Store current nr of seconds of today in var#secs
    PostToHTTP,192.168.1.20,8080,/receiver.php,'','%lcltime% !!! Temp = %eventvalue1|[DS1#Temperature]% -> Heater ON'
    TaskValueSet,Dummy,LoggingON,0
    TaskValueSetAndRun,Dummy,LoggingOFF,1
  Endif
Endon

On HeaterOFF Do // Optional 1st argument is the temperature, defaults to the value of DS1#Temperature if not provided
  If [Dummy#LoggingOFF] = 1
    Inc,total,%syssec_d%-[int#secs] // Add run time to var#total
    PostToHTTP,192.168.1.20,8080,/receiver.php,'','%lcltime% !!! Temp = %eventvalue1|[DS1#Temperature]% -> Heater OFF'
    TaskValueSet,Dummy,LoggingON,1
    TaskValueSetAndRun,Dummy,LoggingOFF,0
  Endif
Endon

On Clock#Time=All,00:00 Do // At midnight
  // Send value of [int#total] to wherever you need it
  PostToHTTP,192.168.1.20,8080,/receiver.php,'','%lcltime% !!! Total RunningTime = [int#total] Seconds'
  Let,secs,0 // Reset start time
  Let,total,0 // Reset total counter
Endon

 
Dodane : 19/12/2025 11:24 am
geoterm
(@geoterm)
Wpisów: 200
Pomocny
Autor tematu
 

Zrobiłem tak, ale coś nie liczy. Nie skonfigurowałem na razie tego http-wysyłanie logów-do domoticza, ale to chyba nie jest przyczyną, że nie liczy czasu włączenia gdy t1>55*C. Przekaźnik załączyło. Jak W rules 1 użyłem raz już system#boot to chyba drugi raz użyć system#boot ?

image
On System#Boot Do
  TaskValueSet,Dummy,LoggingON,1 // Make sure timer is started and Heater ON message is sent
Endon

On t#t1 Do // Check tmeperature
  If %eventvalue1% > 55
    GPIO,12,0
    AsyncEvent,HeaterON=%eventvalue1%
  Endif
  If %eventvalue1% < 45
    GPIO,12,1
    AsyncEvent,HeaterOFF=%eventvalue1%l
  Endif
Endon

On HeaterON Do // Optional 1st argument is the temperature, defaults to the value of t#t1 if not provided
  If [Dummy#LoggingON] = 1
    Let,secs,%syssec_d% // Store current nr of seconds of today in var#secs
    PostToHTTP,192.168.1.20,8080,/receiver.php,'','%lcltime% !!! Temp = %eventvalue1|[t#t1]% -> HeaterON'
    TaskValueSet,Dummy,LoggingON,0
    TaskValueSetAndRun,Dummy,LoggingOFF,1
  Endif
Endon

On HeaterOFF Do // Optional 1st argument is the temperature, defaults to the value of t#t1 if not provided
  If [Dummy#LoggingOFF] = 1
    Inc,total,%syssec_d%-[int#secs] // Add run time to var#total
    PostToHTTP,192.168.1.20,8080,/receiver.php,'','%lcltime% !!! Temp = %eventvalue1|[t#t1]% -> HeaterOFF'
    TaskValueSet,Dummy,LoggingON,1
    TaskValueSetAndRun,Dummy,LoggingOFF,0
  Endif
Endon

On Clock#Time=All,00:00 Do // At midnight
  // Send value of [int#total] to wherever you need it
  PostToHTTP,192.168.1.20,8080,/receiver.php,'','%lcltime% !!! Total RunningTime = [int#total] Seconds'
  Let,secs,0 // Reset start time
  Let,total,0 // Reset total counter
Endon

 
Dodane : 19/12/2025 12:49 pm
geoterm
(@geoterm)
Wpisów: 200
Pomocny
Autor tematu
 
image

 
Dodane : 19/12/2025 1:04 pm
isom
 isom
(@isom)
Wpisów: 5306
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

A w jakim interwale aktualizuje się to twoje t1 ? Bo ten zestaw reguł to zwykły termostat i wymaga czujnika temperatury.

On System#Boot jak sama nazwa wskazuje jest wywoływany tylko przy restarcie esp więc jaki drugi chcesz ?


 
Dodane : 19/12/2025 1:40 pm
geoterm
(@geoterm)
Wpisów: 200
Pomocny
Autor tematu
 

@isom temperaturę mam co 1 s interwał.

Chodziło mi o to, że zauważyłem, że esp rules nie lubi jak się np. robi jakąś regułę nową,  i się powołuje na to samo urządzenie. Czyli np.

on t#t1 do

iff

endon

i już drugiego takiego warunku z 0n t#t1 do nie mogę użyć. Dlatego pytałem o ten system#boot, ale to nie problem. 


 
Dodane : 19/12/2025 1:47 pm
isom
 isom
(@isom)
Wpisów: 5306
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Weź utwórz sobie w domoticz czujnik wirtualny typ text 

i spróbuj z wersją uproszczoną, ale liczącą czas działania.

Reszta informacji w komentarzach

On System#Boot Do
  Let,1,0        // zeruj czas startu
  Let,2,0        // zeruj licznik czasu
EndOn


On DS1#Temperature Do // podstaw swój czujnik temperatury

  // WŁĄCZ
  If %eventvalue1% < 40 and [int#1]=0
    GPIO,12,1
    Let,1,%syssec_d%   // zapamiętaj start
  EndIf

  // WYŁĄCZ 
  If %eventvalue1% > 55 and [int#1]>0
    GPIO,12,0
    Let,2,[int#2] + %syssec_d% - [int#1]   // dodaj czas pracy
    Let,1,0                                // reset startu

    // Wyślij do Domoticz (czas w sekundach)zmień adres i idx na swój
    PostToHTTP,192.168.1.20,8080,
    /json.htm?type=command&param=udevice&idx=12&nvalue=0&svalue=[int#2],
    ,
  EndIf

EndOn

On Clock#Time=All,00:00 Do
  // raport dzienny
  PostToHTTP,192.168.1.20,8080,
  /json.htm?type=command&param=udevice&idx=12&nvalue=0&svalue=[int#2],
  ,

  Let,1,0
  Let,2,0
EndOn

Krótki opis co to robi:

Temp < 40 włącz przekaźnik i zapamiętaj czas startu.

Po wzroście temp >55 wyłącz przekaźnik policz czas pracy przekaźnika, wyślij do czujnika w domoticz i zresetuj czas startu

O pólnocy wyślij do domoticz dzienny czas pracy i wyzeruj liczniki.


 
Dodane : 19/12/2025 8:46 pm
geoterm zareagował
geoterm
(@geoterm)
Wpisów: 200
Pomocny
Autor tematu
 

@isom dzięki, do domoticza to send http, ale to już mam, ogarnę.


 
Dodane : 19/12/2025 9:56 pm
geoterm
(@geoterm)
Wpisów: 200
Pomocny
Autor tematu
 

Ja mam taką propozycję step by step, żeby znaleźć trolla. Bo coś nie liczy tego czasu pracy pinu. Czy też warunku. Termostat działa. 

image
image

 

On System#Boot Do
  Let,1,0        // zeruj czas startu
  Let,2,0        // zeruj licznik czasu
Endon


On ads#t Do // podstaw swój czujnik temperatury
  If %eventvalue1% < 40 and [int#1]=0
    GPIO,12,1
    Let,1,%syssec_d%   // zapamiętaj start
  Endif
  If %eventvalue1% > 55 and [int#1]>0
    GPIO,12,0
    Let,2,[int#2] + %syssec_d% - [int#1]   // dodaj czas pracy
    Let,1,0                                // reset startu
  Endif
Endon

 
Dodane : 19/12/2025 10:36 pm
Strona 1 / 2
Udostępnij: