tu jest stare rozwiązanie
https://www.domoticz.com/forum/viewtopic.php?f=42&t=11333&hilit=kamstrup&start=20
chyba znalazłem -trzeba zminieć local host
parser.add_argument("--ip", type=str, help="Domoticz ip address. Defaults to localhost", default="localhost")
czyli moje ip domoticza ?
w skrypcie zostawiłem login i hasło oraz port domyślny 8082.
Robiłem testy na jednym pomiarze , czasem pokazuje odczyt w konsoli -ale pod koniec sypie się
Nie wiem co dalej...
http://192.168.1.50:8082/json.htm?type=command¶m=udevice&idx=115&svalue=4A to jak wrzucisz do pzeglądarki i nacisniesz enter to zaktualizuje ten czujnik ? ustawi mu wartość 4 ?
To wykonuje- na innych rejestrach też działa
Uff...głowa kwadratowa się robi już od tych maratonów...
Podsumowując :
-w skrypcie ustawiłem port domyślny jaki jest w moim domoticzu tj 8082 (Smarticz Isomowy) oraz ip maliny , login i hasło
-idx w domoticzu do zapisu danych z ciepłomierza działają (test z www)
-głowica przechodzi test odczytu danych w konsoli , przed każdym testem przyciskam dwa przyciski w ciepłomierzu do pokazania się "call"
-przedostatni post pokazuje wyraźnie ,że skrypt sczytał zadaną wartość (na zielono 5,5kW)
-pod tą wartością 5,5kW są zapisy dotyczące samego pythona , nie ma tam żadnej linijki ze skryptu
Wniosek jaki mi się nasuwa-czegoś brakuje w pythonie 3.7 (może mam zbyt nową wersję ,choć w opisie skryptu jest seria 3...)...ale oczywiście nie jestem tego pewien, bo się na tym nie znam
Po południu zrobię jeszcze test j/w ale bez loginu i hasła-zostawię w skrypcie tylko domyślny port 8082
Tymczasem
Jeszcze jeden pomysł.
Znalazłem taki skrypt :
https://github.com/bsdphk/PyKamstrup
wtedy wyślę komendę do odczytu na razie tylko mocy
sudo python /home/pi/domoticz/scripts/pyKamstrup_single.py /dev/ttyUSB0 80 110
Na razie crontabem się nie przejmuję-muszę doprowadzić do zapisu idx
Jeszcze info z tego forum :
Zwykle wystarczy wpisać poprawny adres IP w skryptach i podać poprawny port com, polecenie idx en w wierszu poleceń.
Aby sprawdzić, czy czujnik coś zwraca, zmień ostatnie dwie linie (zmieniłem adresacje na moją)
requestPost = urllib2.Request( " http://192.168.1.50:8082/json.htm?type=com ... evice&idx=" + str(index) + "&svalue=" + str(value) )
resultPost = json.load(urllib2.urlopen(requestPost))
to
print( int(value) )
Co ciekawe kiedy przeglądałem skrypt , to nie widzę w nim w/w zapisu json. W ogóle nie widzę info o ip i porcie...
Zobaczymy
Koniecznie pochwal się wynikami , ciekawe co zwróci twój ciepłomierz bo wyniki jakie można otrzymać korzystając z tego skryptu to
Testowany na liczniku energii elektrycznej Kamstrup 382J przy użyciu domowego głowica optyczna. Enjoy, Poul-Henning PS: Przykładowe wyjście: Energia wejściowa 6753,0 kWh Energia wyj. 0,0 kWh Energia wyj. hi-res 6753.3242 kWh Energia wyj. hi-res 0,0 kWh Napięcie p1 229,0 V Napięcie p2 227,0 V Napięcie p3 229,0 V Prąd p1 5,41 A Prąd p2 2,12 A Prąd p3 3,07 A Moc p1 0,976 kW Moc p2 0,475 kW Moc p3 0,595 kW
Tia...napięcie ,prąd...to torba..
Isom-tak jeszcze staram się zrozumieć...
Mam po usb podłączoną głowicę do maliny-po jaki grzyb w ogóle są mi potrzebne parametry logowania i komunikacji z www domoticza ?
Nie wystarczy samo ip maliny i idx w domoticzu ?
Strona tylko przecież wyświetla to co siedzi w malinie ...
To nie strona wyświetla tylko skrypt na podstawie odczytanych rejestrów najpierw zapisuje te parametry , potem wysyła do adresata korzystając z json , a json musi składać się z adresu IP, portu i ewentualnych danych uwierzytelniających.
Nawet jak chcesz aktualizować dowolny czujnik w samym domoticz np masz selektor który ma przełączać kilka lampek w zależności od poziomu selektora. W akcjach tego selektora wstawiasz pełny json z idx konkretnej lampki , sam idx już nie wystarczy .
PS a json dla każdego języka programowania ma specyficzną składnię i np dla pythona wygląda to tak
#!/usr/bin/python import urllib import urllib2 import requests ... url = 'http://192.168.178.12:8080/json.htm?type=command¶m=udevice&nvalue=0&idx='+idx+'&svalue='+sval try: request = urllib2.Request(url) response = urllib2.urlopen(request) except urllib2.HTTPError, e: print e.code; time.sleep(60) except urllib2.URLError, e: print e.args; time.sleep(60)
więc nie można sobie dowolnie modyfikować takiego url , tak jak Ty zrobiłeś .
Ok-już jaśniej...
Jeśli w domoticzu usunę logowanie , w skrypcie usunę te dane (http//login...) , zostawię w skrypcie port 8082 i local host mojej maliny tj 192.168.1.50 -to powinno zagadać na jednym rejestrze ciepłomierza...
No chyba ,że coś nie halo jest z tym pythonem-bo tam coś krzyczy...
Napisałem w punktach co powinieneś zrobić i nie będę tego powtarzał zaśmiecając to forum
Jeszcze dla pewności :
oryginał skryptu
parser.add_argument("--ip", type=str, help="Domoticz ip address. Defaults to localhost", default="localhost")
parser.add_argument("--port", type=int, help="Domoticz port. Defaults to 8080", default=8080)
zmieniam na moje ip i port 8082
ok ?
Napisałem w punktach co powinieneś zrobić i nie będę tego powtarzał zaśmiecając to forum
No ok-zrobię jak prawisz.
Ale dopytuje ,żeby zrozumieć
Jestem po próbach ,
zadziałało tylko bez logowania w domoticzu.
W oryginalnym skrypcie zmieniłem tylko local host i port (mój 8082).
Kolejna sprawa to komenda , działa bez ip i portu oraz przecinków , z 6 rejestrami nie ma problemu
/usr/bin/python3 ~/domoticz/plugins/multical402-4-domoticz/multical402-4-domoticz.py -d /dev/ttyUSB1 115:74:0 114:89:0 113:87:0 112:86:0 111:60:0 110:80:0
A oto poprawnie wykonane zadanie
pi@smarticz:~ $ /usr/bin/python3 ~/domoticz/plugins/multical402-4-domoticz/multi cal402-4-domoticz.py -d /dev/ttyUSB1 115:74:0 114:89:0 113:87:0 112:86:0 111:60: 0 110:80:0
================================================================================ =======
Kamstrup Multical 402 serial optical data received: 2022-01-20 15:19:00
Meter vendor/type: Kamstrup M402
-------------------------------------------------------------------------------- -------
Heat Energy (E1) 271.28000000000003 Gj
+ F0 Submit value 271.28 to 'ciepłomierz energia' (idx: 111)
Power 8.3 kW
+ F0 Submit value 8.3 to 'ciepłomierz moc' (idx: 110)
Temp1 41.480000000000004 C
+ F0 Submit value 41.48 to 'ciepłomierz T zasilania' (idx: 112)
Temp2 37.09 C
+ F0 Submit value 37.09 to 'ciepłomierz T powrotu' (idx: 113)
Tempdiff 4.39 K
+ F0 Submit value 4.39 to 'ciepłomierz delta K' (idx: 114)
Flow 1652.0 l/h
+ F0 Submit value 1652.0 to 'ciepłomierz przepływ' (idx: 115)
-------------------------------------------------------------------------------- -------
End data received: 2022-01-20 15:19:00
Nie chciałbym jednak zostawiać mojego domoticza bez hasła -jak by ktoś miał pomysł jak zmodyfikować skrypt , to będę bardzo wdzięczny.
Pzdr
Punkt Drugi w moim opisie co zrobić i po problemie
Dzięki,
już rozkminiłem komunikację w tym ciepłomierzu-jeśli ustawię call i wyrabiam się poniżej czasu zablokowania portu IR (podobno 30 min) , to wykonuje się regularnie komenda z kilkoma rejestrami.
Dodam tylko ,że bruździł mi drugi port USB z konwerterem RS485-kiedy robiłem restart , to zamieniały się porty USB0 na USB1.Jest na to chyba lekarstwo-
# Infoevent (moet 0 zijn, anders alert) [113] [x] python3 /home/pi/domoticz/scripts/python/kamstrup_single.py /dev/serial/by-id/usb-FTDI_FT230X_Basic_UART_D306YVGM-if00-port0 113 20
to jest ze starszej wersji-trzeba by spróbować przerobić zapisy na ID urządzeń , a nie na nr portu
Teraz walczę z crontabem , kiedy wpisuję tę np komendę (w konsoli crontab)
to jest tak i nie wykonuje się zadanie
pi@smarticz:~ $ crontab -e
crontab: installing new crontab
pi@smarticz:~ $
Nie wiem o co chodzi z tym nowym crontab ?
Tak to ma wyglądać
jak już wkleisz to zapisz i wyjdź, potem restart i wszystko w temacie
A możesz wkleić cały zapis ?
przecież jest cały :))