Licznik Orno OR-WE-...
 
Powiadomienia
Wyczyść wszystko

Licznik Orno OR-WE-514 modbus rs485

28 Wpisów
6 Użytkownicy
1 Likes
5,025 Wyświetleń
 jarn
(@jarn)
Wpisów: 43
Praktykant
Autor tematu
 

Podzielę się informacją jak odczytywać z ww licznika informację w OH2.4:

- Instalujemy w PaperUI binding-modbus - 2.4.0, transformation-javascript - 2.4.0

- w things tworzymy plik np. modbus.things, konfigurujemy w nim nasz port szeregowy port="/dev/ttyUSB1"

Bridge modbus:serial:localSerial [port="/dev/ttyUSB1", id=1, baud=9600, stopBits="1", parity="none", dataBits=8, encoding="rtu"]
{
Bridge poller kWh [ start=40960, length=2, refresh=60000, type="holding" ]
{
Thing data kWh [ readStart="40960", readValueType="uint32", readTransform="JS(divide100.js)" ]
}
    Bridge poller biernakWh [ start=40990, length=2, refresh=60000, type="holding" ]
{
Thing data biernakWh [ readStart="40990", readValueType="uint32", readTransform="JS(divide100.js)" ]
}
    Bridge poller Hz [ start=304, length=1, refresh=10000, type="holding" ]
    {
        Thing data Hz [ readStart="304", readValueType="uint16", readTransform="JS(divide100.js)" ]
    }
    Bridge poller volt [ start=305, length=1, refresh=10000, type="holding" ]
    {
        Thing data V [ readStart="305", readValueType="uint16", readTransform="JS(divide100.js)" ]
    }   
    Bridge poller ampery [ start=313, length=2, refresh=10000, type="holding" ]
    {
        Thing data A [ readStart="313", readValueType="uint32", readTransform="JS(divide1000.js)" ]
        
    }
    Bridge poller power [ start=320, length=2, refresh=10000, type="holding" ]
    {
        Thing data P [ readStart="320", readValueType="uint32" ]
        
    }
    Bridge poller biernapower [ start=328, length=2, refresh=10000, type="holding" ]
    {
        Thing data biernaP [ readStart="328", readValueType="uint32" ]
        
    }
    Bridge poller pozornapower [ start=336, length=2, refresh=10000, type="holding" ]
    {
        Thing data pozornaP [ readStart="336", readValueType="uint32" ]
        
    }   
    Bridge poller fimocy [ start=344, length=1, refresh=10000, type="holding" ]
    {
        Thing data fimocy [ readStart="344", readValueType="uint16", readTransform="JS(divide1000.js)" ]
        
    }           
}

- w transform divide10.js, divide100.js, divide1000.js, 

- w items:

Number OU_kWh   "Stan licznika energii [%.2f kWh]" <line> (OU_Liczniki, gLiczniki )    {channel="modbus:data:localSerial:kWh:kWh:number"}
Number:Power OU_P   "Moc chwilowa [%d W] " <line> (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:power:P:number"}
Number:ElectricPotential OU_V   "Napięcie [%.2f V]"    <line> (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:volt:V:number"}
Number:ElectricCurrent OU_A "Prąd [%.2f A]"   <line> (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:ampery:A:number"}
Number:Frequency OU_Hz  "Częstotliwość [%.2f Hz]"  <line> (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:Hz:Hz:number"}
Number OU_fimocy    "Współczynnik mocy" <line> (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:fimocy:fimocy:number"}
Number:Power OU_biernaP "Moc bierna chwilowa [%d var]"  <line> (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:biernapower:biernaP:number"}
Number:Power OU_pozornaP    "Moc pozorna chwilowa [%d VA]"  <line> (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:pozornapower:pozornaP:number"}
Number OU_biernakWh "Stan licznika energia bierna [%.2f kvar]" <line> (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:biernakWh:biernakWh:number"}
 


 
Dodane : 23/02/2019 9:24 am
matulekpl
(@matulekpl)
Wpisów: 71
Kontrybutor
 

ok a możesz wytłumaczyć jak go podłączyłeś do sieci??

 
Dodane : 08/04/2019 2:12 pm
 jarn
(@jarn)
Wpisów: 43
Praktykant
Autor tematu
 
Dodane przez: matulekpl

ok a możesz wytłumaczyć jak go podłączyłeś do sieci??

Faza z licznika na L-IN(1) neutralny na N i L-out(3) faza na odbiorniki

 
Dodane : 08/04/2019 6:13 pm
matulekpl
(@matulekpl)
Wpisów: 71
Kontrybutor
 

Nie tej sieci:) chodziło mi o sieć internetowa

 
Dodane : 08/04/2019 6:38 pm
 jarn
(@jarn)
Wpisów: 43
Praktykant
Autor tematu
 

RS485 do komputera poprzez przejściówkę RS485->USB za 8zł. Resztę obrabia OpenHab. To nie leci przez sieć LAN/WAN.

Wykres z grafany: GRAF

 
Dodane : 08/04/2019 6:44 pm
matulekpl
(@matulekpl)
Wpisów: 71
Kontrybutor
 

a jak nie mam możliwości podłączenia do komputera?? skrzynka prądowa jest w garażu. PC nie posiadam, a openhab jest na Raspberry. Czyli podłączyć na USB do raspberry??

 

 
Dodane : 08/04/2019 8:29 pm
 jarn
(@jarn)
Wpisów: 43
Praktykant
Autor tematu
 

Tak do komputera z zainstalowanym OpenHab. Jeśli używasz do tego raspberry, to do niego podłączasz.

 
Dodane : 09/04/2019 6:01 pm
matulekpl
(@matulekpl)
Wpisów: 71
Kontrybutor
 

to jeszcze podpytam jak podłączyłeś przewód RS485 do tego licznika? bo tam są dwa wejścia a kabel ma 4 żyły??

 
Dodane : 22/05/2019 11:19 am
(@andry)
Wpisów: 16
Praktykant
 

Chciałbym podłączyć OR-WE-504 Modbus. Bardzo podobny liczni i ta sama firma tylko inaczej ma podobno rejestry poukładane od adresu 0x0. Mam pytanie ponieważ właśnie uczę się pracy na OH3 to chciałbym się dowiedzieć czy ta konfiguracja ( https://www.smartnydom.pl/forum/openhab/licznik-orno-or-we-514-modbus-rs485/#post-7108) jak powyżej opisana jest wykonalna dla OH3 bo jakoś nie bardzo mogę się połapać gdzie i jak wpisać. Nie bardzo wiem gdzie tam można utworzyć plik. Czy to robić przez terminal albo WinSCP np.?

 
Dodane : 12/01/2021 5:32 pm
(@kamikac)
Wpisów: 226
Pomocny
 

Z tego co widzę, to w OH3 jest tak samo, jak w OH2.

Pliki wrzucasz do folderów w konfiguracji (pliki .things do folderu things, a .items do folderu items).

Najwygodniej przez WinSCP, jako edytor polecam notepad++ albo coś polecanego na stronie OpenHAB. Można przez terminal, ale to niezbyt wygodne. Najlepiej ustawić notepad++ jako domyślny edytor. Jak wybierzesz w WinSCP edycję, to plik Ci się otworzy w notepad++. Jak klikniesz Zapisz w notepadzie to WinSCP zaktualizuje plik na RPi czy gdzie tam masz tego OpenHABa.

Zastanawiałem się, dlaczego każdy rejestr ma osobny poller w powyższym kodzie, bo wiadomo, że szybciej się odczyta 30 rejestrów ciągiem niż 10 pojedynczo, ale na elektrodzie piszą, że licznik się nie wyrabia jak dane idą za szybko, pewnie dlatego.

Jeśłi Twój licznik ma kolejne rejestry np. od 300 i da radę, to możesz zrobić pojedynczy poller w ten sposób:

modbus.things

Bridge modbus:serial:localSerial [port="/dev/ttyUSB1", id=1, baud=9600, stopBits="1", parity="none", dataBits=8, encoding="rtu"]
{
	Bridge poller Licznik [ start=300, length=16, refresh=60000, type="holding" ]
	{
	Thing data kWh [ readStart="300", readValueType="uint32", readTransform="JS(divide100.js)" ]
	Thing data biernakWh [ readStart="302", readValueType="uint32", readTransform="JS(divide100.js)" ]
        Thing data Hz [ readStart="304", readValueType="uint16", readTransform="JS(divide100.js)" ]
        Thing data V [ readStart="305", readValueType="uint16", readTransform="JS(divide100.js)" ]
        Thing data A [ readStart="306", readValueType="uint32", readTransform="JS(divide1000.js)" ]
        Thing data P [ readStart="308", readValueType="uint32" ]
        Thing data biernaP [ readStart="310", readValueType="uint32" ]
        Thing data pozornaP [ readStart="312", readValueType="uint32" ]
        Thing data fimocy [ readStart="314", readValueType="uint16", readTransform="JS(divide1000.js)" ]
	}
}

modbus.items

Number OU_kWh   "Stan licznika energii [%.2f kWh]"  (OU_Liczniki, gLiczniki )    {channel="modbus:data:localSerial:Licznik:kWh:number"}
Number:Power OU_P   "Moc chwilowa [%d W] "  (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:Licznik:P:number"}
Number:ElectricPotential OU_V   "Napięcie [%.2f V]"     (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:Licznik:V:number"}
Number:ElectricCurrent OU_A "Prąd [%.2f A]"    (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:Licznik:A:number"}
Number:Frequency OU_Hz  "Częstotliwość [%.2f Hz]"   (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:Licznik:Hz:number"}
Number OU_fimocy    "Współczynnik mocy"  (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:Licznik:fimocy:number"}
Number:Power OU_biernaP "Moc bierna chwilowa [%d var]"   (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:Licznik:biernaP:number"}
Number:Power OU_pozornaP    "Moc pozorna chwilowa [%d VA]"   (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:Licznik:pozornaP:number"}
Number OU_biernakWh "Stan licznika energia bierna [%.2f kvar]"  (OU_Liczniki, gLiczniki) {channel="modbus:data:localSerial:Licznik:biernakWh:number"}

UWAGA: Nie mam dokumentacji, więc numery rejestrów są przypadkowe, należy je poprawić wg rozpiski producenta

Trzeba też dopisać transformaty divide100.js i divide1000.js i wrzucić do folderu transform. W razie czego pomogę.

 
Dodane : 12/01/2021 6:30 pm
(@andry)
Wpisów: 16
Praktykant
 

Cześć @kamikac, bardzo fajnie, że można sobie te pliki modyfikować Notepadem++. Jestem trochę zielony jeśli chodzi o te ustawienia ale powoli jakoś załapię. Dzięki za pomoc 🙂  Na razie wrzuciłem według instrukcji no i  na stronce OH  mam coś takiego w załączniki zrzut. Te oznaczone removing to moje pozostałości po poprzednich eksperymentach. Ciekawe, że nie chcą się usunąć. Może po restarcie OH? W każdym razie zastanawia mnie dlaczego wrzuciło tyle thingsów skoro licznik ma mieć jeden pool na 16 rejestrów. To intuicyjnie wydawało mi się że będzie jedno things oraz 16 items. Ale muszę się jeszcze sporo nauczyć z strony openhaba, aby nie katować kolegów banalnymi pytaniami.

 things
 
Dodane : 12/01/2021 7:31 pm
(@andry)
Wpisów: 16
Praktykant
 

Przy okazji zapytam gdzie są ukryte things i items które dodaję przez stronę openHab-> things-> (+) Choose Binding

Mógłbym wtedy zmodyfikować kanały.

 

 
Dodane : 12/01/2021 7:44 pm
(@edass)
Wpisów: 216
Weteran
 

Nie ma dostępu do tekstowej konfiguracji things i items dodanych przez paperUI. 

Po zmianie things (edycja, usunięcie) powinieneś zrestartować OH. Ewentualnie przejdź na OH3 - na niej zarządzanie things działa trochę lepiej. 

 
Dodane : 12/01/2021 11:02 pm
(@kamikac)
Wpisów: 226
Pomocny
 

@andry W OH2 te dane są w plikach .json w folderze userdata/jsondb/. Nie zaleca się jednak ich edytowania ręcznie, gdyż składnia jest skomplikowana i łatwo o pomyłkę.

Wszystkie przykłady w necie są podawane w postaci plików, tak jest łatwiej nad tym zapanować niż przeklikiwać dziesiątki pozycji w poszukiwaniu tej, w której zrobiliśmy byka.

Na początku coś tam grzebałem w GUI, ale szybko to porzuciłem. Okazało się, że szybciej było np wygenerować things do modbusa w arkuszu kalkulacyjnym i przekopiować do notepada, niż pisać to ręcznie (aktualnie ma 275 linii i wciąż rośnie).

Po zabawach w GUI warto wszystko wyczyścić, bo jak się zdefiniuje item w pliku i jednocześnie w GUI to się dzieją dziwne rzeczy.

Korzystanie z plików na jeszcze jedną zaletę: wystarczy folder conf skopiować w bezpieczne miejsce i mamy prawie całą konfigurację OpenHaba zabezpieczoną.

Tak po chłopsku: things powstaje w bindingu czyli interfejsie z urządzeniem/usługą. Item jest definicją obiektu w OpenHAB. Item sam z siebie nie ma stanu, chyba, że go ręcznie wymusimy (np przez BasicUI), zlinkujemy z thing lub wpiszemy regułą.

Nie znam na razie OH3, ale intuicja mi podpowiada, że po restarcie OH (można jeszcze wyczyścić cache) powinno się to wyprostować.

Co do niektórych informacji mogę się mylić, bo ja mam OH2.5 na QNAPie i pewne rzeczy mogą się różnić w stosunku do RPi czy innego linuxa jak i OH3.

@edass andry ma właśnie OH3, stąd pewne rzeczy, o których piszę mogą u niego nie działać.

 
Dodane : 12/01/2021 11:31 pm
(@sliver001)
Wpisów: 9
Bywalec
 
Dodane przez: @kamikac

Trzeba też dopisać transformaty divide100.js i divide1000.js i wrzucić do folderu transform. W razie czego pomogę.

Cześć.

Jak dopisać te transformaty divide100.js i divide1000.js ? Korzystam z OH 2.5 i folderze /transform mam tylko pliki .map

 
Dodane : 22/09/2022 11:23 am
 jarn
(@jarn)
Wpisów: 43
Praktykant
Autor tematu
 

Stwórz pliki z zawartością:

divide100.js

(function(inputData) {
    // on read: the polled number as string
    // on write: openHAB command as string
    var DIVIDE_BY = 100;
    return parseFloat(inputData) / DIVIDE_BY;
})(input)

divide1000.js

(function(inputData) {
    // on read: the polled number as string
    // on write: openHAB command as string
    var DIVIDE_BY = 1000;
    return parseFloat(inputData) / DIVIDE_BY;
})(input)
 
Dodane : 22/09/2022 12:12 pm
sliver001 reacted
(@sliver001)
Wpisów: 9
Bywalec
 

Kupiłem licznik DTS1946-4P - VCX, który ma u dokumentacji inną adresację modbus. Za pomocą kodu Pythona potrafię odczytać np. napięcie na wszystkich fazach, gdzie rejestr od L1 to 0x200, od L2 0x201 i 0x202

from pymodbus.client.sync import ModbusSerialClient as ModbusClient

client = ModbusClient(method='rtu', port='/dev/ttyUSB1', timeout=1, stopbits = 1, bytesize = 8,  parity='N', baudrate= 9600)
client.connect()
request = client.read_holding_registers(0x200,1,unit=10)
print request.registers

Niestety nie potrafię poradzić sobie z plikiem .things - próbowałem różnych kombinacji ale zawsze jest błąd...

Bridge modbus:serial:localSerial [port="/dev/ttyUSB1", id=1, baud=9600, stopBits="1", parity="none", dataBits=8, encoding="rtu"] 
{
         Bridge poller Faza1   [ start=512, length=1, refresh=10000, type="holding" ]
{
            Thing data Faza1    [readStart="512",readValueType="uint16",readTransform="JS(divide100.js)"]
}
         Bridge poller Faza2   [ start=512, length=2, refresh=10000, type="holding" ]
{
            Thing data Faza2    [readStart="513",readValueType="uint32",readTransform="JS(divide100.js)"]
}
         Bridge poller Faza3   [ start=512, length=4, refresh=10000, type="holding" ]
{ 
           Thing data Faza3    [readStart="514",readValueType="uint32",readTransform="JS(divide100.js)"]
}
}

 Jaką wpisać wartość dla lenght i readValueType? Czy poprawnie zmieniam wartość HEX np. 0x200 na 512?

Producent dał taką dokumentację do modbus: https://vcx.com.pl/wp-content/uploads/2022/02/DTS1946-4P-INSTRUKCJA-KOMUNIKACJI.doc

 
Dodane : 26/09/2022 1:58 pm
(@kamikac)
Wpisów: 226
Pomocny
 

@sliver001

  • nie ma potrzeby dla każdej danej robić osobnego pollera tym bardziej, że są Faza1-Faza3 to są kolejne rejestry (w Twoim .things wymuszasz komunikację 3 razy, aby otrzymać 3 wartości - strata czasu,
  • początek przeliczyłeś dobrze (200 w hex to 512 w dec), potem się trochę pogubiłeś z tymi pollerami, długościami i ilością bitów

Spróbuj tak:

Bridge modbus:serial:localSerial [port="/dev/ttyUSB1", id=1, baud=9600, stopBits="1", parity="none", dataBits=8, encoding="rtu"] {
	Bridge poller Licznik   [start=512, length=3, refresh=10000, type="holding" ] {
		Thing data NapFaza1    [readStart="512", readValueType="int16", readTransform="JS(divide10.js)"]
		Thing data NapFaza2    [readStart="513", readValueType="int16", readTransform="JS(divide10.js)"]
		Thing data NapFaza3    [readStart="514", readValueType="int16", readTransform="JS(divide10.js)"]
		}
	}

Jak to działa?

Poller odpytuje 3 rejestry (w jednej "transakcji").

Następnie interpretuje pierwszy rejestr jako NapFaza1, drugi jako NapFaza2 itd. i dokonuje ich transformacji (jednostką jest 0,1V, więc trzeba podzielić przez 10, nie przez 100).

 

 
Dodane : 26/09/2022 8:00 pm
(@sliver001)
Wpisów: 9
Bywalec
 

Zmieniłem kod ale nadl coś jest nie tak🤔

 

obraz

 

 
Dodane : 26/09/2022 8:35 pm
(@kamikac)
Wpisów: 226
Pomocny
 

PortInUseException

Czyli albo coś korzysta z portu, albo openHAB  jakiegoś powodu nie może go otworzyć.

Czytałeś ten artykuł?

Jaki jest wynik poniższego polecenia w konsoli?

lsof /dev/ttyUSB1
 
Dodane : 26/09/2022 9:34 pm
Strona 1 / 2
Udostępnij: