Asystent AI
Zużycie energii prz...
 
Powiadomienia
Wyczyść wszystko

Zużycie energii przez zliczanie impulsów - bieda licznik.

1 Wpisów
1 Użytkownicy
0 Reactions
3,136 Wyświetleń
almurik
(@almurik)
Wpisów: 25
Praktykant
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 
[#1455]

Witam

W internecie, także na tym forum, są wątki odnośnie zliczania zużycia energii przez zliczanie mrugnięć diody licznika, jednak wszystkie bazują na esp. Ponieważ mam 'kabelki' miedzy licznikiem a RPI i nie znalazłem informacji jak to spiąć, zmajstrowałem coś po swojemu. Ponoć nie jest to super dokładana metoda pomiaru ale na potrzeby analizy myślę, że wystarczy. Metoda tania bo licznik z fotorezystorem to koszt kilkunastu złotych a licznik pracuje 3 dni i odczyt w RPI zgadza się z licznikiem energii - zobaczymy po miesiącu. Przed podłączeniem pod licznik energii, zliczacz impulsów liczył testowo mrugnięcia diody wlan routera więc ... miał co robić, z obserwacji wynika że dobrze reagował nawet na tak szybkie zmiany.

 

Podłączyłem więc 'zliczacz' pod RPI, w moim przypadku GPIO 24. Wydłubałem trochę kodu w pythonie z którego zrobiłem w RPI usługę. Można powiedzieć, że jestem programistą jednak Python jest mi obcy, więc przyjmę krytykę razem z ewentualną sugestią poprawy modyfikacji co jest mile widziane :). Skrypt inkrementuje trzy urządzenia w domoticzu:

#!/usr/bin/python

import RPi.GPIO as GPIO
import time
import urllib
import datetime

sensor = 24
time13 = datetime.time(13,00,00)
time15 = datetime.time(15,00,00)
time22 = datetime.time(22,00,00)
time24 = datetime.time(23,59,59)
time00 = datetime.time(00,00,00)
time07 = datetime.time(7,00,00)

GPIO.setmode(GPIO.BCM)
GPIO.setup(sensor, GPIO.IN, GPIO.PUD_DOWN)

previous_state = False
current_state = False

while True:
time.sleep(0.100)
previous_state = current_state
current_state = GPIO.input(sensor)
if current_state != previous_state:
nowtime = datetime.datetime.now().time()
print ("Prad sumarycznie"), nowtime
httpresponse = urllib.urlopen ("http://192.168.1.249:8080/json.htm?type=command&param=udevice&idx=58&svalue=1")

if (nowtime > time13 and nowtime < time15) or (nowtime > time22 and nowtime < time24) or (nowtime > time00 and nowtime < time07):
httpresponse = urllib.urlopen ("http://192.168.1.249:8080/json.htm?type=command&param=udevice&idx=60&svalue=1")
print ("Prad 2 taryfa"),nowtime
else:
httpresponse = urllib.urlopen ("http://192.168.1.249:8080/json.htm?type=command&param=udevice&idx=59&svalue=1")
print ("Prad 1 taryfa"), nowtime

 

Jak widać mam dwie taryfy więc dodałem 3xCouter w domoticzu gdzie:

IDX 58 - suma

IDX 59 - 1 taryfa (7-13 i 15-22)

IDX 60 - 2 taryfa (13-15 i 22-7)

 

Ogólnie działa tylko nie ogarniam zasady zapisywania danych w domoticz. Przykładowo jak mamy przejście między taryfami, jak zaczyna się jakaś taryfa, urządzenia które teoretycznie nie powinno już zliczać, potrafić COŚ zliczyć. Przykładowo po godzinie 7 rano 2 taryfa (IDX60) powinna nie mieć wpisów w bazie, tymczasem jakieś wpisy w badzie domoticza pojawiają się jeszcze do 7:55 i nie wiem czym to jest spowodowane. Czasami, jak niżej, są to te same wartości 12083 czyli teoretycznie nic, czasami wpadnie w złą godzinę kilka sztuk Wh:

sqlite> select * from meter where DeviceRowID = 60 and Date between "2020-01-20 06:00:00" and "2020-01-20 09:10:00";

60|11227|0|2020-01-20 06:00:00
60|11249|0|2020-01-20 06:05:02
60|11271|0|2020-01-20 06:10:02
60|11323|0|2020-01-20 06:15:02
60|11397|0|2020-01-20 06:20:01
60|11445|0|2020-01-20 06:25:04
60|11505|0|2020-01-20 06:30:03
60|11730|0|2020-01-20 06:35:02
60|11845|0|2020-01-20 06:40:02
60|11889|0|2020-01-20 06:45:01
60|11955|0|2020-01-20 06:50:04
60|11995|0|2020-01-20 06:55:01

--od tego miejsca przez godzinę jeszcze, w bazie lądują jakieś śmieci
60|12083|0|2020-01-20 07:00:01
60|12083|0|2020-01-20 07:05:01
60|12083|0|2020-01-20 07:10:04
60|12083|0|2020-01-20 07:15:02
60|12083|0|2020-01-20 07:20:01
60|12083|0|2020-01-20 07:25:03
60|12083|0|2020-01-20 07:30:04
60|12083|0|2020-01-20 07:35:01
60|12083|0|2020-01-20 07:40:05
60|12083|0|2020-01-20 07:45:02
60|12083|0|2020-01-20 07:50:05
60|12083|0|2020-01-20 07:55:00

 

Dodatkowo nie bardzo ogarniam dlaczego w bazie domoticz te wpisy (wszystkie z tych czujników) pojawiają się co ok 5 min choć teoretycznie skrypt python ma sleep 100 ms ?  - jak pisałem, przez 3 dni liczenia odczyt RPI zgadza się z licznikiem energii więc jak już jakieś dane się tracą to jest ich niewiele, czyli co  - przed zapisem dane są 'zbierane w paczki po 5 minut' ?

Jak ktoś ogarnia to chętnie przyjmę jakąś wiedzę, jak i dlaczego to w ogóle działa 🙂

 

 

 

 

 

licznik

 
Dodane : 20/01/2020 12:01 pm
Udostępnij: