Domoticz ciepłomier...
 
Powiadomienia
Wyczyść wszystko

Domoticz ciepłomierz Kamstrup Multical 402

242 Wpisów
3 Użytkownicy
1 Reactions
13.7 K Wyświetleń
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

tu jest stare rozwiązanie

https://www.domoticz.com/forum/viewtopic.php?f=42&t=11333&hilit=kamstrup&start=20

 
Dodane : 19/01/2022 9:42 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

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 ?

 
Dodane : 19/01/2022 9:49 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

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ę 

pi@smarticz:~ $ /usr/bin/python3 ~/domoticz/plugins/multical402-4-domoticz/multical402-4-domoticz.py -d /dev/ttyUSB0 --ip 192.168.1.50 --port 8082 110:80:0
=======================================================================================
Kamstrup Multical 402 serial optical data received: 2022-01-19 22:30:08
Meter vendor/type: Kamstrup M402
---------------------------------------------------------------------------------------
Power                     5.5 kW
Traceback (most recent call last):
  File "/usr/lib/python3.7/urllib/request.py", line 1324, in do_open
    encode_chunked=req.has_header('Transfer-encoding'))
  File "/usr/lib/python3.7/http/client.py", line 1260, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.7/http/client.py", line 1306, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.7/http/client.py", line 1255, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.7/http/client.py", line 1030, in _send_output
    self.send(msg)
  File "/usr/lib/python3.7/http/client.py", line 970, in send
    self.connect()
  File "/usr/lib/python3.7/http/client.py", line 942, in connect
    (self.host,self.port), self.timeout, self.source_address)
  File "/usr/lib/python3.7/socket.py", line 707, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
  File "/usr/lib/python3.7/socket.py", line 748, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known
 
During handling of the above exception, another exception occurred:
 
Traceback (most recent call last):
  File "/home/pi/domoticz/plugins/multical402-4-domoticz/multical402-4-domoticz.py", line 381, in <module>
    device_data = json.load(reader(urllib.request.urlopen(requestGet)))
  File "/usr/lib/python3.7/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib/python3.7/urllib/request.py", line 525, in open
    response = self._open(req, data)
  File "/usr/lib/python3.7/urllib/request.py", line 543, in _open
    '_open', req)
  File "/usr/lib/python3.7/urllib/request.py", line 503, in _call_chain
    result = func(*args)
  File "/usr/lib/python3.7/urllib/request.py", line 1352, in http_open
    return self.do_open(http.client.HTTPConnection, req)
  File "/usr/lib/python3.7/urllib/request.py", line 1326, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [Errno -2] Name or service not known>
pi@smarticz:~ $

Nie wiem co dalej...

 
Dodane : 19/01/2022 10:34 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 
Dodane przez: @marcingajda
 http://192.168.1.50:8082/json.htm?type=command&param=udevice&idx=115&svalue=4 

A 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

 
Dodane : 19/01/2022 10:45 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

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  

 
Dodane : 20/01/2022 7:42 am
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

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

 
Dodane : 20/01/2022 11:49 am
isom
 isom
(@isom)
Wpisów: 5170
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

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
 
Dodane : 20/01/2022 12:17 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

Tia...napięcie ,prąd...to torba..

 
Dodane : 20/01/2022 12:24 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

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 ...

 
Dodane : 20/01/2022 12:27 pm
isom
 isom
(@isom)
Wpisów: 5170
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

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&param=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ś .

 
Dodane : 20/01/2022 12:34 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

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... 

 
Dodane : 20/01/2022 12:40 pm
isom
 isom
(@isom)
Wpisów: 5170
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Napisałem w punktach co powinieneś zrobić i nie będę tego powtarzał zaśmiecając to forum

 
Dodane : 20/01/2022 12:48 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

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 ?

 
Dodane : 20/01/2022 12:51 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 
Dodane przez: @isom

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ć

 
Dodane : 20/01/2022 12:53 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

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

 

 
Dodane : 20/01/2022 3:28 pm
isom
 isom
(@isom)
Wpisów: 5170
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Punkt Drugi w moim opisie co zrobić i po problemie 

 
Dodane : 20/01/2022 4:37 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

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)

*/1 * * * * /usr/bin/python3 /path/to/your/script/multical402-4-domoticz.py -d /dev/ttyUSB0 115:74:0 114:89:0 113:87:0 112:86:0 111:60:0 110:80:0
 

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 ?

 
Dodane : 20/01/2022 4:54 pm
isom
 isom
(@isom)
Wpisów: 5170
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Tak to ma wyglądać

1

 jak już wkleisz to zapisz i wyjdź, potem restart i wszystko w temacie 

 
Dodane : 20/01/2022 5:27 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

A możesz wkleić cały zapis ?

 

 
Dodane : 20/01/2022 5:32 pm
isom
 isom
(@isom)
Wpisów: 5170
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

przecież jest cały :))

 

 
Dodane : 20/01/2022 5:33 pm
Strona 10 / 13
Udostępnij: