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 datetimesensor = 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 = Falsewhile 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¶m=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¶m=udevice&idx=60&svalue=1")
print ("Prad 2 taryfa"),nowtime
else:
httpresponse = urllib.urlopen ("http://192.168.1.249:8080/json.htm?type=command¶m=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 🙂