Wirtualny przełączn...
 
Powiadomienia
Wyczyść wszystko

Wirtualny przełącznik-selektor i skrypt LUA  

  RSS
Piotr Mackowiak
(@piotrmackowiak)
Nowy

Używam wirtualnego przełącznika do włączania/wyłączania, zmiany kanału w górę/w dół odbiornika radiowego.
Aktualna definicja dla czujnika/przełącznika-selektora  „Radio” zawiera 3 poziomy - 0,10 i 20. A akcje powiązane z tymi poziomami to "script:///home/pi/Pobrane/radio 0" "script:///home/pi/Pobrane/radio 10" i "script:///home/pi/Pobrane/radio 20". Reagują one na stan przełącznika-selektora "wyłączony", "Stacja +" i "Stacja -"

Moim celem jest przeniesienie odpowiednich poleceń z definicji czujnika do skryptu LUA.

Jednak skrypt LUA, jak pokazano poniżej, nie działa. Oczywiście w przypadku korzystania z LUA, definicje akcji z definicji czujnika są usuwane.

local sensor = 'Radio'

commandArray = {}

if (devicechanged[sensor] == 'Wyłączone') then
 os.execute ("/home/pi/Pobrane/radio 0")
elseif (devicechanged[sensor] == 'Stacja +') then
 os.execute ("/home/pi/Pobrane/radio 100")
elseif (devicechanged[sensor] == 'Stacja -') then
 os.execute ("/home/pi/Pobrane/radio 101")
end

return commandArray

Jaki błąd robię? Masz pomysł, żeby coś poprawić / zmodyfikować?

Cytuj
Dodane : 12/09/2020 7:42 pm
Tagi tematu
isom
 isom
(@isom)
Prezes Moderator Zasłużony dla Forum, Donator 2019, Donator 2K20

@piotrmackowiak przypuszczam, że w logach domoticza dostajesz informację że skrypt nie możne wykonać polecenia z powodu braku uprawnień. Chcesz wywołać skrypt z wewnątrz domoticza (skrypt LUA) , więc domoticz powinień mieć uprawnienia do wykonania skryptu "radio"

W dzVents próbował bym tak

os.execute ("sudo/home/pi/Pobrane/radio 0")

albo

os.execute("runuser -l pi -c /home/pi/Pobrane/radio 0")

Myślę że możesz spróbować

OdpowiedzCytuj
Dodane : 12/09/2020 9:52 pm
Piotr Mackowiak
(@piotrmackowiak)
Nowy

@isom To nie jest kwestia uprawnień. Skrypt uruchomiony ręcznie z konsoli z użytkownika który jest dedykowany do obsługi Domoticza, wykonuje się prawidłowo. Ponadto kiedy skrypt jest uruchamiany z definicji czujnika, też wykonuje się prawidłowo. Poza tym mam ok 40 różnych skryptów LUA w swojej implementacji Domoticza i wszystkie pracują prawidłowo.

Myślę że to jest jakoś immanentnie związane z definicją samego przełącznika-selektora poziomów i sygnałów jakie generuje. A są to stany "Wyłączone". "Stacja +" i "Stacja -". Tak pokazują logi tego przełącznika, o ile skrypt jest uruchamiany z definicji akcji selektora.

Natomiast po przeniesieniu wyzwalania akcji do skryptu LUA brak jakichkolwiek logów.

Kurcze, dołączył bym zrzut ekranu z definicją przełącznika ale nijak nie mogę dołączyć na tym forum ani pliku jpg ani pdf. Pewnie coś robię nie tak. Ale daję "Załącz plik", niby się pokazuje że dołączyłem ale w wynikowym poście go nie ma.

OdpowiedzCytuj
Dodane : 13/09/2020 9:44 am
isom
 isom
(@isom)
Prezes Moderator Zasłużony dla Forum, Donator 2019, Donator 2K20

@piotrmackowiak nie wiem co to za skrypty , które chcesz uruchamiać z poziomu LUA , skrypty bash uruchamiają się na 100%  może zobacz z linijką print  wtedy powinieneś dostać w logach aktualny stan 

commandArray = {}
if (devicechanged['Radio'] == 'Wyłączone') then
os.execute("/home/...................")
print('Radio OFF')
elseif (devicechanged['Radio'] == 'Stacja +') then
os.execute("/home/...................")
print('Stacja plus')
elseif (devicechanged['Radio'] == 'Stacja -') then
os.execute("/home/...................")
print('Stacja minus')
end
return commandArray
OdpowiedzCytuj
Dodane : 13/09/2020 2:28 pm
Piotr Mackowiak
(@piotrmackowiak)
Nowy

@isom Kurcze, drugi raz w życiu miałem taką sytuację. W stanie desperacji zrobiłem hex dump pliku ze skryptem LUA i zaczynał się on od jakiegoś "krzaczka". Ten dodatkowy znak nie był widoczny pod vi. No i interpreter LUA "głupiał". Skąd ten znak tam się wziął - nie mam zielonego pojęcia.

Niemniej - problem rozwiązany.

OdpowiedzCytuj
Dodane : 13/09/2020 5:26 pm
Udostępnij: