Container scripts gebruiken voor LUA-scripts in Domoticz

Container scripts gebruiken voor LUA-scripts in Domoticz

Domoticz is verslavend als je er eenmaal aan begonnen bent.

Ooit ben je begonnen met één simpel LUA script, maar hoeveel heb je er nu inmiddels?

Ik heb er zo’n 20 scripts draaien.

Op zich geen probleem, de Raspberry Pi 3 is er snel genoeg voor, maar toch merkte ik dat bijvoorbeeld het schakelen van lampen langzamer ging.

Niet veel, maar wel nét hinderlijk. Tijd om een oplossing te zoeken!

Na enig speurwerk bedacht ik me ineens dat time-based scripts iedere minuut lopen, terwijl sommige scripts maar één keer per dag iets hoeven te doen.

1439 van de 1440 keer op een dag hoefde die scripts dus niets te doen. Een efficiëntie van 0,07% !

Bij device-based script is die efficiëntie nog veel lager!

Ik besloot om twee container scripts aan te maken, één voor de tijd en één voor de devices.

Benodigdheden:

  • Raspberry Pi
  • Raspbian software
  • Domoticz software

De eerste stap is om een nieuwe map aan te maken onder

/home/pi/domoticz/.

Ik heb deze map scripts genoemd. Vervolgens heb ik in de map scripts submappen aangemaakt, waardoor ik direct kan zien waar ik een bepaald soort scripts (bash, lua, python, etc.) kan vinden. Op zich zijn deze submappen niet noodzakelijk (maar wel handig).

Vervolgens heb ik alle zelf aangemaakte scripts die in

/home/pi/domoticz/scripts/lua/ stonden verplaatst naar

/home/pi/domoticz/scripts/lua/.

De map /home/pi/domoticz/scripts/lua/ bevat nu alleen nog het bestand JSON.lua.

Bij alle LUA-scripts in de map

/home/pi/domoticz/scripts/lua

Moet je de regels met commandArray = {} en return commandArray verwijderen.

In de map

/home/pi/domoticz/scripts/lua/

maak je nu twee bestanden aan:

  • script_time_container.lua
  • script_device_container.lua.
advertentie :

Iedere minuut (of bij een wijziging van een device) zullen nu nog maar twee scripts draaien.

In deze twee scripts geven we aan welke scripts er nog meer gedraaid moeten gaan worden.

Onderstaand nog een voorbeeldje hoe de mappenstructuur moet zijn:

Container script_time_container.lua

In het script_time_container.lua geef je aan op welke tijden de time-based scripts moeten draaien.

Hieronder vind je een voorbeeld van het script_time_container.lua bestand, wat je naar eigen wens kunt aanpassen.

Je ziet bijvoorbeeld dat het script energiekosten_jaar.lua

Na alleen nog maar om 23.59 uur zal draaien in plaats van iedere minuut (1440 keer per dag!).

if (time.min % 1)==0

zorgt ervoor dat het script iedere minuut (bv. 11.00 uur , 11.01 uur, 11.02 uur, 11.03 uur, etc.) uitgevoerd wordt.

if (time.min % 5)==0

zorgt ervoor dat het script iedere 5 minuten (bv. 11.00 uur, 11.05 uur, 11.10 uur, 11.15 uur, etc.) uitgevoerd wordt.

if ((time.min+2)%5)==0

zorgt ervoor dat het script iedere 5 minuten (bv. 11.03 uur, 11.08 uur, 11.13 uur, 11.18 uur, etc.) uitgevoerd wordt.

if time.hour == 6 and time.min == 45

zorgt ervoor dat het script alleen om 6.45 uur uitgevoerd wordt.

— Get System Time/Date

time = os.date(“*t”)

weekday = os.date(“%A”)

minutes = time.min + time.hour * 60

— Set Lua Path

lua_path = “/home/pi/domoticz/scripts/lua/”

commandArray = {}

if (time.min % 1)==0 then dofile(lua_path..”humidity.lua”) end

if (time.min % 5)==0 then dofile(lua_path..”gemiddelde_temperatuur_binnen.lua”)

dofile(lua_path..”gemiddelde_temperatuur_buiten.lua”)

dofile(lua_path..”reistijd_waze.lua”) end

if (time.min % 15)==0 then dofile(lua_path..”buienradar.lua”) end

if ((time.min+2)%5)==0 then dofile(lua_path..”weer.lua”) end

if ((time.min+1)%10)==0 then dofile(lua_path..”reistijd.lua”) end

if time.hour == 6 and time.min == 45 then dofile(lua_path..”verlichting_keukenleds.lua”) end

if time.hour == 7 and time.min == 00 then dofile(lua_path..”alarm_uit_dag_nacht.lua”) end

if time.hour == 7 and time.min == 30 then dofile(lua_path..”variabelen_resetten.lua”) end

if time.hour == 7 and time.min == 49 then dofile(lua_path..”rolgordijn_open_dicht.lua”) end

if time.hour == 8 and time.min == 00 then dofile(lua_path..”verlichting_keukenleds.lua”) end

if time.hour == 8 and time.min == 30 then dofile(lua_path..”verlichting_keukenleds.lua”) end

if time.hour == 9 and time.min == 30 then dofile(lua_path..”rolgordijn_open_dicht.lua”) end

if time.hour == 10 and time.min == 00 then dofile(lua_path..”variabelen_resetten.lua”)

dofile(lua_path..”stofzuigen.lua”) end

if time.hour == 17 and time.min == 30 then dofile(lua_path..”verlichting_keukenleds.lua”) end

if time.hour == 20 and time.min == 00 then dofile(lua_path..”batterij_check.lua”) end

if time.hour == 23 and time.min == 00 then dofile(lua_path..”alarm_aan_dag_nacht.lua”) end

if time.hour == 23 and time.min == 59 then dofile(lua_path..”energiekosten_jaar.lua”) end

return commandArray

Container script_device_container.lua

In het script_device_container.lua script geeft je aan welke script moet draaien als één bepaald device gewijzigd is.

Het script verlichting_hal.lua

zal dus alleen nog maar draaien indien device DWS_Voordeur of Sirene Woonkamer gewijzigd is.

— Get System Time/Date

time = os.date(“*t”)

weekday = os.date(“%A”)

minutes = time.min + time.hour * 60

— Set Lua Path

lua_path = “/home/pi/domoticz/scripts/lua/”

commandArray = {}

if devicechanged[‘DWS_Voordeur’] then dofile(lua_path..”verlichting_hal.lua”)

dofile(lua_path..”alarm_trigger.lua”) end

if devicechanged[‘DWS_Meterkast’] then dofile(lua_path..”alarm_trigger.lua”) end

if devicechanged[‘DWS_Achterdeur’] then dofile(lua_path..”alarm_trigger.lua”) end

if devicechanged[‘DWS_Slaapkamerraam’] then dofile(lua_path..”alarm_trigger.lua”) end

if devicechanged[‘DWS_Washok’] then dofile(lua_path..”alarm_trigger.lua”) end

if devicechanged[‘DWS_Schuurdeur’] then dofile(lua_path..”alarm_trigger.lua”) end

if devicechanged[‘Sirene Woonkamer’] then dofile(lua_path..”verlichting_hal.lua”)end

if devicechanged[‘Donker buiten’] then dofile(lua_path..”verlichting_voordeur.lua”) end

if devicechanged[‘FAN1’] then dofile(lua_path..”ventilatie.lua”) end

if devicechanged[‘FAN2’] then dofile(lua_path..”ventilatie.lua”) end

if devicechanged[‘FAN3’] then dofile(lua_path..”ventilatie.lua”) end

if devicechanged[‘Xiaomi Mi 8’] then dofile(lua_path..”iemand_thuis.lua”) end

if devicechanged[‘Geofencing_Thuis’] then dofile(lua_path..”iemand_thuis.lua”) end

if devicechanged[‘Iemand thuis’] then dofile(lua_path..”pc_aan_uit.lua”)

dofile(lua_path..”tv_aan_uit.lua”)

dofile(lua_path..”alarm_aan_uit_thuis_weg.lua”)

dofile(lua_path..”stofzuigen.lua”) end

if devicechanged[‘TV Slaapkamer’] then dofile(lua_path..”tv_aan_uit.lua”) end

if devicechanged[‘Alarm situatie’] then dofile(lua_path..”alarm_situatie.lua”) end

if devicechanged[‘Deurbel’] then dofile(lua_path..”deurbel.lua”) end

if devicechanged[‘Donker buiten’] then dofile(lua_path..”rolgordijn_open_dicht.lua”) end

if devicechanged[‘Temperatuur Binnen’] then dofile(lua_path..”gecombineerde_sensoren.lua”) end

if devicechanged[‘Svetlana – Status’] then dofile(lua_path..”stofzuigen.lua”) end

return commandArray

Indien je alle scripts in de interne Domoticz editor hebt staan, dan zal bovenstaande niet werken.

Je zal dan eerst alle scripts in de map

/home/pi/domoticz/scripts/lua/ moeten zetten en verwijderen (of uitschakelen) in de Domoticz editor.

Let erop dat de namen van de LUA-bestand in bovenstaande scripts exact overeenkomen met de namen van de werkelijke bestand. Een onterechte hoofdletter zorgt er bijvoorbeeld voor dat het script niet zal draaien!

Als je bovenstaande stappen hebt uitgevoerd zal je zeker merken dat alle schakelingen een stuk vlotter gaan! Vragen? Stel ze hieronder…

bon :https://ehoco.nl/container-scripts-gebruiken-domoticz/

Deel dit artikel, kies je platform!
0 0 Stem
Artikelbeoordeling
Abonneer
Abonneren op
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Reacties
Inline feedback
Bekijk alle reacties