diff --git a/utils/domoticz/Makefile b/utils/domoticz/Makefile index 8a330be17..0351ea6d5 100644 --- a/utils/domoticz/Makefile +++ b/utils/domoticz/Makefile @@ -11,7 +11,7 @@ PKG_NAME:=domoticz PKG_VERSION_MAJOR:=3 PKG_VERSION_PATCH:=8153 PKG_VERSION:=$(PKG_VERSION_MAJOR).$(PKG_VERSION_PATCH) -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/domoticz/domoticz/archive/$(PKG_VERSION)/$(PKG_SOURCE) @@ -72,7 +72,7 @@ define Build/Prepare buienradar_rain_example.pl \ _domoticz_main* \ download_update.sh \ - dzVents/{.gitignore,documentation,examples} \ + dzVents/{.gitignore,documentation,examples,generated_scripts} \ dzVents/runtime/{integration-tests,misc/smoothing.xlsx,tests} \ logrotate/ \ lua_parsers/example* \ diff --git a/utils/domoticz/files/domoticz.init b/utils/domoticz/files/domoticz.init index d714b9738..26e0c42d4 100644 --- a/utils/domoticz/files/domoticz.init +++ b/utils/domoticz/files/domoticz.init @@ -20,9 +20,9 @@ start_domoticz() { [ -n "$loglevel" ] && procd_append_param command -loglevel "$loglevel" [ -n "$syslog" ] && procd_append_param command -syslog "$syslog" [ -n "$userdata" ] && { - mkdir -p "$userdata" - chmod 0770 "$userdata" - chown domoticz:domoticz "$userdata" + mkdir -p "${userdata}/generated_scripts" + chmod -R 0770 "$userdata" + chown -R domoticz:domoticz "$userdata" procd_append_param command -userdata "$userdata" } [ -n "$sslcert" -a "${sslwww:-0}" -gt 0 ] && { diff --git a/utils/domoticz/patches/903_disable-libusb.patch b/utils/domoticz/patches/902_disable-libusb.patch similarity index 100% rename from utils/domoticz/patches/903_disable-libusb.patch rename to utils/domoticz/patches/902_disable-libusb.patch diff --git a/utils/domoticz/patches/902_add-scripts-path.patch b/utils/domoticz/patches/903_fhs.patch similarity index 70% rename from utils/domoticz/patches/902_add-scripts-path.patch rename to utils/domoticz/patches/903_fhs.patch index 031321e91..11e531af5 100644 --- a/utils/domoticz/patches/902_add-scripts-path.patch +++ b/utils/domoticz/patches/903_fhs.patch @@ -1,3 +1,27 @@ +diff --git a/hardware/EvohomeScript.cpp b/hardware/EvohomeScript.cpp +index 5258fc55..0a44e97c 100644 +--- a/hardware/EvohomeScript.cpp ++++ b/hardware/EvohomeScript.cpp +@@ -30,7 +30,7 @@ + + #include + +-extern std::string szUserDataFolder; ++extern std::string szScriptsFolder; + + + CEvohomeScript::CEvohomeScript(const int ID) +@@ -143,7 +143,7 @@ void CEvohomeScript::RunScript(const char *pdata, const unsigned char length) + std::string scriptname = OnAction.substr(9); + #if !defined WIN32 + if (scriptname.find("/") != 0) +- scriptname = szUserDataFolder + "scripts/" + scriptname; ++ scriptname = szScriptsFolder + "scripts/" + scriptname; + #endif + std::string scriptparams=""; + //Add parameters +diff --git a/hardware/OpenZWave.cpp b/hardware/OpenZWave.cpp +index 1f5c341c..24db61c9 100644 --- a/hardware/OpenZWave.cpp +++ b/hardware/OpenZWave.cpp @@ -948,7 +948,7 @@ bool COpenZWave::OpenSerialConnector() @@ -9,18 +33,31 @@ std::string UserPath = ConfigPath; if (szStartupFolder != szUserDataFolder) { +diff --git a/main/EventSystem.cpp b/main/EventSystem.cpp +index 4eff02fd..f2b17b97 100644 --- a/main/EventSystem.cpp +++ b/main/EventSystem.cpp -@@ -33,7 +33,7 @@ extern "C" { +@@ -33,9 +33,11 @@ extern "C" { #endif } --extern std::string szUserDataFolder; +extern std::string szScriptsFolder; + extern std::string szUserDataFolder; extern http::server::CWebServerHelper m_webservers; ++static std::string dzv_Dir; static std::string m_printprefix; -@@ -149,7 +149,7 @@ void CEventSystem::StartEventSystem() + + #ifdef ENABLE_PYTHON +@@ -115,7 +117,6 @@ static const _tJsonMap JsonMap[] = + { NULL, NULL, tString } + }; + +- + CEventSystem::CEventSystem(void) + { + m_stoprequested = false; +@@ -149,7 +150,7 @@ void CEventSystem::StartEventSystem() GetCurrentScenesGroups(); GetCurrentUserVariables(); #ifdef ENABLE_PYTHON @@ -29,19 +66,22 @@ #endif m_thread = boost::shared_ptr(new boost::thread(boost::bind(&CEventSystem::Do_Work, this))); -@@ -181,9 +181,9 @@ void CEventSystem::LoadEvents() +@@ -179,11 +180,11 @@ void CEventSystem::SetEnabled(const bool bEnabled) + + void CEventSystem::LoadEvents() { - std::string dzv_Dir,s; +- std::string dzv_Dir,s; ++ std::string s; #ifdef WIN32 - dzv_Dir = szUserDataFolder + "scripts\\dzVents\\generated_scripts\\"; -+ dzv_Dir = szScriptsFolder + "dzVents\\generated_scripts\\"; ++ dzv_Dir = szUserDataFolder + "generated_scripts\\"; #else - dzv_Dir = szUserDataFolder + "scripts/dzVents/generated_scripts/"; -+ dzv_Dir = szScriptsFolder + "dzVents/generated_scripts/"; ++ dzv_Dir = szUserDataFolder + "generated_scripts/"; #endif boost::unique_lock eventsMutexLock(m_eventsMutex); _log.Log(LOG_STATUS, "EventSystem: reset all events..."); -@@ -274,18 +274,18 @@ void CEventSystem::LoadEvents() +@@ -274,18 +275,18 @@ void CEventSystem::LoadEvents() void CEventSystem::Do_Work() { #ifdef WIN32 @@ -66,7 +106,7 @@ #endif #endif m_stoprequested = false; -@@ -1426,9 +1426,9 @@ void CEventSystem::EvaluateEvent(const s +@@ -1426,9 +1427,9 @@ void CEventSystem::EvaluateEvent(const std::string &reason, const uint64_t Devic { std::string dzv_scripts; #ifdef WIN32 @@ -78,7 +118,7 @@ #endif DirectoryListing(FileEntries, dzv_scripts, false, true); for (itt = FileEntries.begin(); itt != FileEntries.end(); ++itt) -@@ -2404,7 +2404,7 @@ bool CEventSystem::parseBlocklyActions(c +@@ -2404,7 +2405,7 @@ bool CEventSystem::parseBlocklyActions(const std::string &Actions, const std::st } #if !defined WIN32 if (sPath.find("/") != 0) @@ -87,7 +127,7 @@ #endif m_sql.AddTaskItem(_tTaskItem::ExecuteScript(0.2f, sPath, sParam)); -@@ -3508,11 +3508,11 @@ void CEventSystem::EvaluateLua(const std +@@ -3508,13 +3509,16 @@ void CEventSystem::EvaluateLua(const std::string &reason, const std::string &fil { std::stringstream lua_DirT; @@ -101,8 +141,13 @@ + "dzVents/"; #endif ++ lua_pushstring(lua_state, "generated_script_path"); ++ lua_pushstring(lua_state, dzv_Dir.c_str()); ++ lua_rawset(lua_state, -3); lua_pushstring(lua_state, "script_path"); -@@ -4695,9 +4695,9 @@ namespace http { + lua_pushstring(lua_state, lua_DirT.str().c_str()); + lua_rawset(lua_state, -3); +@@ -4695,9 +4699,9 @@ namespace http { std::stringstream template_file; #ifdef WIN32 @@ -114,6 +159,33 @@ #endif std::ifstream file; std::stringstream template_content; +diff --git a/main/EventsPythonModule.cpp b/main/EventsPythonModule.cpp +index f69e7219..2d97562e 100644 +--- a/main/EventsPythonModule.cpp ++++ b/main/EventsPythonModule.cpp +@@ -108,7 +108,7 @@ + + int PythonEventsInitalized = 0; + +- bool PythonEventsInitialize(std::string szUserDataFolder) { ++ bool PythonEventsInitialize(std::string szScriptsFolder) { + + if (!Plugins::Py_LoadLibrary()) + { +@@ -131,9 +131,9 @@ + + std::string ssPath; + #ifdef WIN32 +- ssPath = szUserDataFolder + "scripts\\python\\;"; ++ ssPath = szScriptsFolder + "python\\;"; + #else +- ssPath = szUserDataFolder + "scripts/python/:"; ++ ssPath = szScriptsFolder + "python/:"; + #endif + + std::wstring sPath = std::wstring(ssPath.begin(), ssPath.end()); +diff --git a/main/LuaHandler.cpp b/main/LuaHandler.cpp +index 8fdcb278..c2ad98ff 100644 --- a/main/LuaHandler.cpp +++ b/main/LuaHandler.cpp @@ -22,7 +22,7 @@ extern "C" { @@ -125,7 +197,7 @@ int CLuaHandler::l_domoticz_updateDevice(lua_State* lua_state) { -@@ -155,9 +155,9 @@ bool CLuaHandler::executeLuaScript(const +@@ -155,9 +155,9 @@ bool CLuaHandler::executeLuaScript(const std::string &script, const std::string { std::stringstream lua_DirT; #ifdef WIN32 @@ -137,6 +209,8 @@ #endif std::string lua_Dir = lua_DirT.str(); +diff --git a/main/SQLHelper.cpp b/main/SQLHelper.cpp +index 491aa5a2..d529243a 100644 --- a/main/SQLHelper.cpp +++ b/main/SQLHelper.cpp @@ -633,6 +633,7 @@ const char *sqlCreateMobileDevices = @@ -147,7 +221,7 @@ extern std::string szUserDataFolder; CSQLHelper::CSQLHelper(void) -@@ -3683,9 +3684,9 @@ uint64_t CSQLHelper::UpdateValueInt(cons +@@ -3683,9 +3684,9 @@ uint64_t CSQLHelper::UpdateValueInt(const int HardwareID, const char* ID, const //Execute possible script std::string scriptname; #ifdef WIN32 @@ -159,7 +233,7 @@ #endif if (file_exist(scriptname.c_str())) { -@@ -6641,7 +6642,7 @@ bool CSQLHelper::HandleOnOffAction(const +@@ -6641,7 +6642,7 @@ bool CSQLHelper::HandleOnOffAction(const bool bIsOn, const std::string &OnAction std::string scriptname = OnAction.substr(9); #if !defined WIN32 if (scriptname.find("/") != 0) @@ -168,7 +242,7 @@ #endif std::string scriptparams=""; //Add parameters -@@ -6675,7 +6676,7 @@ bool CSQLHelper::HandleOnOffAction(const +@@ -6675,7 +6676,7 @@ bool CSQLHelper::HandleOnOffAction(const bool bIsOn, const std::string &OnAction std::string scriptname = OffAction.substr(9); #if !defined WIN32 if (scriptname.find("/") != 0) @@ -177,6 +251,8 @@ #endif std::string scriptparams = ""; int pindex = scriptname.find(' '); +diff --git a/main/WebServer.cpp b/main/WebServer.cpp +index f8471791..d2cf10b2 100644 --- a/main/WebServer.cpp +++ b/main/WebServer.cpp @@ -59,6 +59,7 @@ @@ -199,6 +275,8 @@ #endif if (!file_exist(scriptname.c_str())) return; +diff --git a/main/domoticz.cpp b/main/domoticz.cpp +index 5ef96f68..52599b14 100644 --- a/main/domoticz.cpp +++ b/main/domoticz.cpp @@ -136,6 +136,7 @@ static const _facilities facilities[] = @@ -229,6 +307,8 @@ if (cmdLine.HasSwitch("-startupdelay")) { if (cmdLine.GetArgumentCount("-startupdelay") != 1) +diff --git a/main/mainworker.cpp b/main/mainworker.cpp +index 803690e1..e89a783b 100644 --- a/main/mainworker.cpp +++ b/main/mainworker.cpp @@ -159,6 +159,7 @@ @@ -250,6 +330,8 @@ if (bIsBetaChannel) strparm += " /beta"; +diff --git a/notifications/NotificationHTTP.cpp b/notifications/NotificationHTTP.cpp +index decff3b4..632e4e66 100644 --- a/notifications/NotificationHTTP.cpp +++ b/notifications/NotificationHTTP.cpp @@ -6,7 +6,7 @@ @@ -261,7 +343,7 @@ CNotificationHTTP::CNotificationHTTP() : CNotificationBase(std::string("http"), OPTIONS_NONE) { -@@ -105,7 +105,7 @@ bool CNotificationHTTP::SendMessageImple +@@ -105,7 +105,7 @@ bool CNotificationHTTP::SendMessageImplementation( std::string scriptparams = ""; #if !defined WIN32 if (scriptname.find("/") != 0) @@ -270,6 +352,8 @@ #endif //Add parameters uPos = scriptname.find(" "); +diff --git a/push/GooglePubSubPush.cpp b/push/GooglePubSubPush.cpp +index 359a7d7c..46e489f6 100644 --- a/push/GooglePubSubPush.cpp +++ b/push/GooglePubSubPush.cpp @@ -22,7 +22,7 @@ extern "C" { @@ -281,7 +365,7 @@ // this should be filled in by the preprocessor extern const char * Python_exe; -@@ -231,11 +231,11 @@ void CGooglePubSubPush::DoGooglePubSubPu +@@ -231,11 +231,11 @@ void CGooglePubSubPush::DoGooglePubSubPush() #ifdef ENABLE_PYTHON_DECAP #ifdef WIN32 @@ -297,46 +381,27 @@ #endif wchar_t * argv[1]; ---- a/hardware/EvohomeScript.cpp -+++ b/hardware/EvohomeScript.cpp -@@ -30,7 +30,7 @@ - - #include - --extern std::string szUserDataFolder; -+extern std::string szScriptsFolder; - - - CEvohomeScript::CEvohomeScript(const int ID) -@@ -143,7 +143,7 @@ void CEvohomeScript::RunScript(const cha - std::string scriptname = OnAction.substr(9); - #if !defined WIN32 - if (scriptname.find("/") != 0) -- scriptname = szUserDataFolder + "scripts/" + scriptname; -+ scriptname = szScriptsFolder + "scripts/" + scriptname; - #endif - std::string scriptparams=""; - //Add parameters ---- a/main/EventsPythonModule.cpp -+++ b/main/EventsPythonModule.cpp -@@ -108,7 +108,7 @@ - - int PythonEventsInitalized = 0; - -- bool PythonEventsInitialize(std::string szUserDataFolder) { -+ bool PythonEventsInitialize(std::string szScriptsFolder) { - - if (!Plugins::Py_LoadLibrary()) - { -@@ -131,9 +131,9 @@ - - std::string ssPath; - #ifdef WIN32 -- ssPath = szUserDataFolder + "scripts\\python\\;"; -+ ssPath = szScriptsFolder + "python\\;"; - #else -- ssPath = szUserDataFolder + "scripts/python/:"; -+ ssPath = szScriptsFolder + "python/:"; - #endif - - std::wstring sPath = std::wstring(ssPath.begin(), ssPath.end()); +diff --git a/scripts/dzVents/runtime/dzVents.lua b/scripts/dzVents/runtime/dzVents.lua +index d0dfa869..8370d6a9 100644 +--- a/scripts/dzVents/runtime/dzVents.lua ++++ b/scripts/dzVents/runtime/dzVents.lua +@@ -1,8 +1,9 @@ + local currentPath = globalvariables['script_path'] ++local generatedScriptPath = globalvariables['generated_script_path'] + local triggerReason = globalvariables['script_reason'] + + _G.scriptsFolderPath = currentPath .. 'scripts' -- global +-_G.generatedScriptsFolderPath = currentPath .. 'generated_scripts' -- global ++_G.generatedScriptsFolderPath = generatedScriptPath -- global + _G.dataFolderPath = currentPath .. 'data' -- global + + package.path = package.path .. ';' .. currentPath .. '?.lua' +@@ -10,7 +11,7 @@ package.path = package.path .. ';' .. currentPath .. 'runtime/?.lua' + package.path = package.path .. ';' .. currentPath .. 'runtime/device-adapters/?.lua' + package.path = package.path .. ';' .. currentPath .. 'dzVents/?.lua' + package.path = package.path .. ';' .. currentPath .. 'scripts/?.lua' +-package.path = package.path .. ';' .. currentPath .. 'generated_scripts/?.lua' ++package.path = package.path .. ';' .. generatedScriptPath .. '?.lua' + package.path = package.path .. ';' .. currentPath .. 'data/?.lua' + + local EventHelpers = require('EventHelpers')