UWAGA: Strona oraz Forum Smart'ny Dom nie będzie dostępne 23 Grudnia 2024 ze względu na przenoszenie serwisu na mocniejszą maszynę.
W tym czasie polecam poświęcenie swojego czasu na pomoc partnerowi w przygotowaniu udanych Świąt 😉
Za niedogodności z góry przepraszam, admin
Mam zmienną, której wartość muszę przekazać do OH jako np pomnożoną x10 lub przesuniętą np +100. Jak w Things lub Items zdefiniować ją aby uwzględnić te przeliczenia, np /10 i -100? W ioBrokerze jest to wprost podawane w konfiguracji zmiennej, tu niestety nie mogę się dokopać. W dokumentacji zero na ten temat.
Nie prawda 🙂 Do tego służy transform, jest ich kilka, najbardziej uniwersalny jest Javascript: https://www.openhab.org/addons/transformations/javascript/
Można go wykorzystać w bindingu (np w MODBUS binding) albo w definicji kanału.
Jest też transform Scale, który służy do zamiany przedziałów wartości na jedną wartość.
@kamikac, dziękuję za naprowadzenie, jednak kompletnie nie ma w dokumentacji nic, co by naprowadziło jak to praktycznie zrobić. Jest kilka transformacji do zainstalowania, co na próbę zrobiłem, jednakże obsługa tegoż zagadkowa, to mało powiedziane. Okienko na nazwę pliku albo pole na wyrażenie i koniec.
Przykład poniżej z transformacją RexEx, która wydaje się najwłaściwsza do tego co chcę zrobić. A chcę tylko podzielić /10 i dodać jednostkę. Niby banalne a tu schody do nieba. Próbuję wykombinować wyrażenie regularne na tą okoliczność i nic nie działa, nawet przykłady z instrukcji.
A przetestowałeś to swoje wyrażenie? Bo według mnie ono będzie działąć tylko w przypadku, gdy masz 5 znaków lub więcej. Przy czym u Ciebie te znaki mogą być dowolne (litery równieź), więc np "UNDEF" zostanie przekształcony na "UN.DEF"
Na stronie o Regex w OH masz linki do stron, które pozwalają przetestować wyrażenia regularne i od przetestowania powinieneś zacząć.
Tutaj test Twojego wyrażenia s/(.{2})(.{3})/$1.$2/g
https://regex101.com/r/9MyUm2/1
A tutaj test wyrażenia, które działa tak, jak chciałeś s/(\d*)(\d{1})/$1.$2/g
https://regex101.com/r/nN0uly/1
Dopiero jak będziesz miał prawidłowe wyrażenie regularne, powinieneś je wrzucić do OH. Podobnie z JS transform.
Mam zmienną, której wartość muszę przekazać do OH jako np pomnożoną x10 lub przesuniętą np +100. Jak w Things lub Items zdefiniować ją aby uwzględnić te przeliczenia, np /10 i -100? W ioBrokerze jest to wprost podawane w konfiguracji zmiennej, tu niestety nie mogę się dokopać. W dokumentacji zero na ten temat.
Niestety, ale mnożenie i dzielenie a odejmowanie to są dwie odrębne rzeczy. Skalowanie można robić automatycznie jeśli kanały z urządzenia korzystają z jednostek miar.
Dla przykładu przykład. Jeżeli binding zwraca stan `2400 kWh` dla kanału a item ma ustawiony State Description pattern na `%.2f MWh` to w UI powinieneś widzieć `2.40 MWh`. Z tego co kojarzę nowsza wersja modbus binding wprowadziła obsługę jednostki miar.
Co do drugiego punktu z odejmowaniem - czy możesz powiedzieć skąd bierze się -100? Jeśli masz sterownik PLC to w sumie on tą operację może przeprowadzać. 😉 Inny sposób to kombinowanie z regułami lub transformacjami https://github.com/smarthomej/addons/tree/main/bundles/org.smarthomej.transform.chain https://github.com/smarthomej/addons/tree/main/bundles/org.smarthomej.transform.math. Pierwsza pozwoli wykonać kilka operacji natomiast druga zrobi prostą arytmetykę (skalowanie, dodawanie). Możesz sprawdzić czy uda Ci się dodać -100 do wartości, którą odbierasz. 🙂
Pozdrawiam i życzę powodzenia,
Łukasz
Modbus na urządzeniach WAGO, jakie używam, nie mogą przekazać niczego poza wartością liczbową dodatnią. Stąd wymóg -100 przy przekazywaniu temperatury z PLC do OH.
@tom01 Rozumiem, w takim razie spróbuj z smarthomej. To są dodatki kompatybilne z OH, aczkolwiek z paru powodów utrzymywane oddzielnie.