# HG changeset patch # User Edouard Tisserant # Date 1593763405 -7200 # Node ID a4bae7edca137fc2fce7dc146dbb74741b5d0d00 # Parent 87edf99601ffdca8f02f1308c4cf11ae841db567# Parent 703ebf57508abaae12b5c9dc26cb9cfdd77b453c Merge from default diff -r 87edf99601ff -r a4bae7edca13 bacnet/web_settings.py --- a/bacnet/web_settings.py Mon Jun 29 14:38:04 2020 +0200 +++ b/bacnet/web_settings.py Fri Jul 03 10:03:25 2020 +0200 @@ -34,14 +34,14 @@ # Will contain references to the C functions # (implemented in beremiz/bacnet/runtime/server.c) # used to get/set the BACnet specific configuration paramters -GetParamFuncs = {} -SetParamFuncs = {} +BacnetGetParamFuncs = {} +BacnetSetParamFuncs = {} # Upon PLC load, this Dictionary is initialised with the BACnet configuration # hardcoded in the C file # (i.e. the configuration inserted in Beremiz IDE when project was compiled) -_DefaultConfiguration = None +_BacnetDefaultConfiguration = None # Dictionary that contains the BACnet configuration currently being shown @@ -52,13 +52,13 @@ # The configuration viewed on the web will only be different to the current # configuration when the user edits the configuration, and when # the user asks to save the edited configuration but it contains an error. -_WebviewConfiguration = None +_BacnetWebviewConfiguration = None # Dictionary that stores the BACnet configuration currently stored in a file # Currently only used to decide whether or not to show the "Delete" button on the -# web interface (only shown if _SavedConfiguration is not None) -_SavedConfiguration = None +# web interface (only shown if _BacnetSavedConfiguration is not None) +_BacnetSavedConfiguration = None # File to which the new BACnet configuration gets stored on the PLC @@ -99,7 +99,7 @@ -def _CheckPortnumber(port_number): +def _CheckBacnetPortnumber(port_number): """ check validity of the port number """ try: portnum = int(port_number) @@ -112,7 +112,7 @@ -def _CheckDeviceID(device_id): +def _CheckBacnetDeviceID(device_id): """ # check validity of the Device ID # NOTE: BACnet device (object) IDs are 22 bits long (not counting the 10 bits for the type ID) @@ -133,25 +133,25 @@ -def _CheckConfiguration(BACnetConfig): +def _CheckBacnetConfiguration(BACnetConfig): res = True - res = res and _CheckPortnumber(BACnetConfig["port_number"]) - res = res and _CheckDeviceID (BACnetConfig["device_id"]) + res = res and _CheckBacnetPortnumber(BACnetConfig["port_number"]) + res = res and _CheckBacnetDeviceID (BACnetConfig["device_id"]) return res -def _CheckWebConfiguration(BACnetConfig): +def _CheckBacnetWebConfiguration(BACnetConfig): res = True # check the port number - if not _CheckPortnumber(BACnetConfig["port_number"]): + if not _CheckBacnetPortnumber(BACnetConfig["port_number"]): raise annotate.ValidateError( {"port_number": "Invalid port number: " + str(BACnetConfig["port_number"])}, _("BACnet configuration error:")) res = False - if not _CheckDeviceID(BACnetConfig["device_id"]): + if not _CheckBacnetDeviceID(BACnetConfig["device_id"]): raise annotate.ValidateError( {"device_id": "Invalid device ID: " + str(BACnetConfig["device_id"])}, _("BACnet configuration error:")) @@ -164,26 +164,26 @@ -def _SetSavedConfiguration(BACnetConfig): +def _SetBacnetSavedConfiguration(BACnetConfig): """ Stores in a file a dictionary containing the BACnet parameter configuration """ - global _SavedConfiguration - - if BACnetConfig == _DefaultConfiguration : - _DelSavedConfiguration() - _SavedConfiguration = None + global _BacnetSavedConfiguration + + if BACnetConfig == _BacnetDefaultConfiguration : + _DelBacnetSavedConfiguration() + _BacnetSavedConfiguration = None else : with open(os.path.realpath(_BACnetConfFilename), 'w') as f: json.dump(BACnetConfig, f, sort_keys=True, indent=4) - _SavedConfiguration = BACnetConfig - - -def _DelSavedConfiguration(): + _BacnetSavedConfiguration = BACnetConfig + + +def _DelBacnetSavedConfiguration(): """ Deletes the file cotaining the persistent BACnet configuration """ if os.path.exists(_BACnetConfFilename): os.remove(_BACnetConfFilename) -def _GetSavedConfiguration(): +def _GetBacnetSavedConfiguration(): """ # Returns a dictionary containing the BACnet parameter configuration # that was last saved to file. If no file exists, then return None @@ -194,67 +194,67 @@ except Exception: return None - if _CheckConfiguration(saved_config): + if _CheckBacnetConfiguration(saved_config): return saved_config else: return None -def _GetPLCConfiguration(): +def _GetBacnetPLCConfiguration(): """ # Returns a dictionary containing the current BACnet parameter configuration # stored in the C variables in the loaded PLC (.so file) """ current_config = {} for par_name, x1, x2, x3 in BACnet_parameters: - value = GetParamFuncs[par_name]() + value = BacnetGetParamFuncs[par_name]() if value is not None: current_config[par_name] = value return current_config -def _SetPLCConfiguration(BACnetConfig): +def _SetBacnetPLCConfiguration(BACnetConfig): """ # Stores the BACnet parameter configuration into the # the C variables in the loaded PLC (.so file) """ for par_name in BACnetConfig: value = BACnetConfig[par_name] - #PLCObject.LogMessage("BACnet web server extension::_SetPLCConfiguration() Setting " + #PLCObject.LogMessage("BACnet web server extension::_SetBacnetPLCConfiguration() Setting " # + par_name + " to " + str(value) ) if value is not None: - SetParamFuncs[par_name](value) + BacnetSetParamFuncs[par_name](value) # update the configuration shown on the web interface - global _WebviewConfiguration - _WebviewConfiguration = _GetPLCConfiguration() - - - -def _GetWebviewConfigurationValue(ctx, argument): + global _BacnetWebviewConfiguration + _BacnetWebviewConfiguration = _GetBacnetPLCConfiguration() + + + +def _GetBacnetWebviewConfigurationValue(ctx, argument): """ # Callback function, called by the web interface (NevowServer.py) # to fill in the default value of each parameter """ try: - return _WebviewConfiguration[argument.name] + return _BacnetWebviewConfiguration[argument.name] except Exception: return "" # The configuration of the web form used to see/edit the BACnet parameters -webFormInterface = [(name, web_dtype (label=web_label, default=_GetWebviewConfigurationValue)) +webFormInterface = [(name, web_dtype (label=web_label, default=_GetBacnetWebviewConfigurationValue)) for name, web_label, c_dtype, web_dtype in BACnet_parameters] -def OnButtonSave(**kwargs): +def OnBacnetButtonSave(**kwargs): """ # Function called when user clicks 'Save' button in web interface # The function will configure the BACnet plugin in the PLC with the values # specified in the web interface. However, values must be validated first! """ - #PLCObject.LogMessage("BACnet web server extension::OnButtonSave() Called") + #PLCObject.LogMessage("BACnet web server extension::OnBacnetButtonSave() Called") newConfig = {} for par_name, x1, x2, x3 in BACnet_parameters: @@ -264,20 +264,20 @@ # First check if configuration is OK. - if not _CheckWebConfiguration(newConfig): + if not _CheckBacnetWebConfiguration(newConfig): return # store to file the new configuration so that # we can recoup the configuration the next time the PLC # has a cold start (i.e. when Beremiz_service.py is retarted) - _SetSavedConfiguration(newConfig) + _SetBacnetSavedConfiguration(newConfig) # Configure PLC with the current BACnet parameters - _SetPLCConfiguration(newConfig) - - - -def OnButtonReset(**kwargs): + _SetBacnetPLCConfiguration(newConfig) + + + +def OnBacnetButtonReset(**kwargs): """ # Function called when user clicks 'Delete' button in web interface # The function will delete the file containing the persistent @@ -285,12 +285,12 @@ """ # Delete the file - _DelSavedConfiguration() + _DelBacnetSavedConfiguration() # Set the current configuration to the default (hardcoded in C) - _SetPLCConfiguration(_DefaultConfiguration) + _SetBacnetPLCConfiguration(_BacnetDefaultConfiguration) # Reset global variable - global _SavedConfiguration - _SavedConfiguration = None + global _BacnetSavedConfiguration + _BacnetSavedConfiguration = None @@ -317,25 +317,25 @@ # XXX TODO : stop reading from PLC .so file. This code is template code # that can use modbus extension build data - GetParamFuncs[name] = getattr(PLCObject.PLClibraryHandle, GetParamFuncName) - GetParamFuncs[name].restype = c_dtype - GetParamFuncs[name].argtypes = None + BacnetGetParamFuncs[name] = getattr(PLCObject.PLClibraryHandle, GetParamFuncName) + BacnetGetParamFuncs[name].restype = c_dtype + BacnetGetParamFuncs[name].argtypes = None - SetParamFuncs[name] = getattr(PLCObject.PLClibraryHandle, SetParamFuncName) - SetParamFuncs[name].restype = None - SetParamFuncs[name].argtypes = [c_dtype] + BacnetSetParamFuncs[name] = getattr(PLCObject.PLClibraryHandle, SetParamFuncName) + BacnetSetParamFuncs[name].restype = None + BacnetSetParamFuncs[name].argtypes = [c_dtype] # Default configuration is the configuration done in Beremiz IDE # whose parameters get hardcoded into C, and compiled into the .so file # We read the default configuration from the .so file before the values # get changed by the user using the web server, or by the call (further on) - # to _SetPLCConfiguration(SavedConfiguration) - global _DefaultConfiguration - _DefaultConfiguration = _GetPLCConfiguration() + # to _SetBacnetPLCConfiguration(BacnetSavedConfiguration) + global _BacnetDefaultConfiguration + _BacnetDefaultConfiguration = _GetBacnetPLCConfiguration() # Show the current PLC configuration on the web interface - global _WebviewConfiguration - _WebviewConfiguration = _GetPLCConfiguration() + global _BacnetWebviewConfiguration + _BacnetWebviewConfiguration = _GetBacnetPLCConfiguration() # Read from file the last used configuration, which is likely # different to the hardcoded configuration. @@ -344,13 +344,13 @@ # so the PLC will start off with this saved configuration instead # of the hardcoded (in Beremiz C generated code) configuration values. # - # Note that _SetPLCConfiguration() will also update - # _WebviewConfiguration , if necessary. - global _SavedConfiguration - _SavedConfiguration = _GetSavedConfiguration() - if _SavedConfiguration is not None: - if _CheckConfiguration(_SavedConfiguration): - _SetPLCConfiguration(_SavedConfiguration) + # Note that _SetBacnetPLCConfiguration() will also update + # _BacnetWebviewConfiguration , if necessary. + global _BacnetSavedConfiguration + _BacnetSavedConfiguration = _GetBacnetSavedConfiguration() + if _BacnetSavedConfiguration is not None: + if _CheckBacnetConfiguration(_BacnetSavedConfiguration): + _SetBacnetPLCConfiguration(_BacnetSavedConfiguration) WebSettings = NS.newExtensionSetting("BACnet extension", "bacnet_token") @@ -360,7 +360,7 @@ _("BACnet Configuration"), # description webFormInterface, # fields _("Apply"), # button label - OnButtonSave) # callback + OnBacnetButtonSave) # callback # Add the Delete button to the web interface WebSettings.addSettings( @@ -369,15 +369,15 @@ [ ("status", annotate.String(label=_("Current state"), immutable=True, - default=lambda *k:getConfigStatus())), + default=lambda *k:getBacnetConfigStatus())), ], # fields (empty, no parameters required!) _("Reset"), # button label - OnButtonReset) - - - -def getConfigStatus(): - if _WebviewConfiguration == _DefaultConfiguration : + OnBacnetButtonReset) + + + +def getBacnetConfigStatus(): + if _BacnetWebviewConfiguration == _BacnetDefaultConfiguration : return "Unchanged" return "Modified" @@ -392,11 +392,11 @@ NS.removeExtensionSetting("bacnet_token") - GetParamFuncs = {} - SetParamFuncs = {} - _WebviewConfiguration = None - _SavedConfiguration = None - - - - + BacnetGetParamFuncs = {} + BacnetSetParamFuncs = {} + _BacnetWebviewConfiguration = None + _BacnetSavedConfiguration = None + + + + diff -r 87edf99601ff -r a4bae7edca13 modbus/web_settings.py --- a/modbus/web_settings.py Mon Jun 29 14:38:04 2020 +0200 +++ b/modbus/web_settings.py Fri Jul 03 10:03:25 2020 +0200 @@ -213,14 +213,14 @@ -def _SetSavedConfiguration(WebNode_id, newConfig): +def _SetModbusSavedConfiguration(WebNode_id, newConfig): """ Stores a dictionary in a persistant file containing the Modbus parameter configuration """ WebNode_entry = _WebNodeList[WebNode_id] if WebNode_entry["DefaultConfiguration"] == newConfig: - _DelSavedConfiguration(WebNode_id) - WebNode_entry["SavedConfiguration"] = None + _DelModbusSavedConfiguration(WebNode_id) + WebNode_entry["ModbusSavedConfiguration"] = None else: @@ -237,12 +237,12 @@ with open(os.path.realpath(filename), 'w') as f: json.dump(save_info, f, sort_keys=True, indent=4) - WebNode_entry["SavedConfiguration"] = newConfig - - - - -def _DelSavedConfiguration(WebNode_id): + WebNode_entry["ModbusSavedConfiguration"] = newConfig + + + + +def _DelModbusSavedConfiguration(WebNode_id): """ Deletes the file cotaining the persistent Modbus configuration """ filename = _WebNodeList[WebNode_id]["filename"] @@ -252,7 +252,7 @@ -def _GetSavedConfiguration(WebNode_id): +def _GetModbusSavedConfiguration(WebNode_id): """ Returns a dictionary containing the Modbus parameter configuration that was last saved to file. If no file exists, or file contains @@ -284,7 +284,7 @@ -def _GetPLCConfiguration(WebNode_id): +def _GetModbusPLCConfiguration(WebNode_id): """ Returns a dictionary containing the current Modbus parameter configuration stored in the C variables in the loaded PLC (.so file) @@ -303,7 +303,7 @@ -def _SetPLCConfiguration(WebNode_id, newconfig): +def _SetModbusPLCConfiguration(WebNode_id, newconfig): """ Stores the Modbus parameter configuration into the the C variables in the loaded PLC (.so file) @@ -319,7 +319,7 @@ -def _GetWebviewConfigurationValue(ctx, WebNode_id, argument): +def _GetModbusWebviewConfigurationValue(ctx, WebNode_id, argument): """ Callback function, called by the web interface (NevowServer.py) to fill in the default value of each parameter of the web form @@ -335,7 +335,7 @@ -def OnButtonSave(**kwargs): +def OnModbusButtonSave(**kwargs): """ Function called when user clicks 'Save' button in web interface The function will configure the Modbus plugin in the PLC with the values @@ -346,7 +346,7 @@ "WebNode_id" argument, and call this function to do the work. """ - #PLCObject.LogMessage("Modbus web server extension::OnButtonSave() Called") + #PLCObject.LogMessage("Modbus web server extension::OnModbusButtonSave() Called") newConfig = {} WebNode_id = kwargs.get("WebNode_id", None) @@ -366,19 +366,19 @@ # store to file the new configuration so that # we can recoup the configuration the next time the PLC # has a cold start (i.e. when Beremiz_service.py is retarted) - _SetSavedConfiguration(WebNode_id, newConfig) + _SetModbusSavedConfiguration(WebNode_id, newConfig) # Configure PLC with the current Modbus parameters - _SetPLCConfiguration(WebNode_id, newConfig) + _SetModbusPLCConfiguration(WebNode_id, newConfig) # Update the viewable configuration - # The PLC may have coerced the values on calling _SetPLCConfiguration() + # The PLC may have coerced the values on calling _SetModbusPLCConfiguration() # so we do not set it directly to newConfig - _WebNodeList[WebNode_id]["WebviewConfiguration"] = _GetPLCConfiguration(WebNode_id) - - - -def OnButtonReset(**kwargs): + _WebNodeList[WebNode_id]["WebviewConfiguration"] = _GetModbusPLCConfiguration(WebNode_id) + + + +def OnModbusButtonReset(**kwargs): """ Function called when user clicks 'Delete' button in web interface The function will delete the file containing the persistent @@ -388,17 +388,17 @@ WebNode_id = kwargs.get("WebNode_id", None) # Delete the file - _DelSavedConfiguration(WebNode_id) + _DelModbusSavedConfiguration(WebNode_id) # Set the current configuration to the default (hardcoded in C) new_config = _WebNodeList[WebNode_id]["DefaultConfiguration"] - _SetPLCConfiguration(WebNode_id, new_config) + _SetModbusPLCConfiguration(WebNode_id, new_config) #Update the webviewconfiguration _WebNodeList[WebNode_id]["WebviewConfiguration"] = new_config - # Reset SavedConfiguration - _WebNodeList[WebNode_id]["SavedConfiguration"] = None + # Reset ModbusSavedConfiguration + _WebNodeList[WebNode_id]["ModbusSavedConfiguration"] = None @@ -461,17 +461,17 @@ # Upon PLC load, this Dictionary is initialised with the Modbus configuration # hardcoded in the C file # (i.e. the configuration inserted in Beremiz IDE when project was compiled) - WebNode_entry["DefaultConfiguration"] = _GetPLCConfiguration(WebNode_id) + WebNode_entry["DefaultConfiguration"] = _GetModbusPLCConfiguration(WebNode_id) WebNode_entry["WebviewConfiguration"] = WebNode_entry["DefaultConfiguration"] # Dictionary that stores the Modbus configuration currently stored in a file # Currently only used to decide whether or not to show the "Delete" button on the - # web interface (only shown if "SavedConfiguration" is not None) - SavedConfig = _GetSavedConfiguration(WebNode_id) - WebNode_entry["SavedConfiguration"] = SavedConfig + # web interface (only shown if "ModbusSavedConfiguration" is not None) + SavedConfig = _GetModbusSavedConfiguration(WebNode_id) + WebNode_entry["ModbusSavedConfiguration"] = SavedConfig if SavedConfig is not None: - _SetPLCConfiguration(WebNode_id, SavedConfig) + _SetModbusPLCConfiguration(WebNode_id, SavedConfig) WebNode_entry["WebviewConfiguration"] = SavedConfig # Define the format for the web form used to show/change the current parameters @@ -486,14 +486,14 @@ # even though we store it as an integer, which is the data type expected # by the set_***() C functions in mb_runtime.c def __GetWebviewConfigurationValue(ctx, argument): - return str(_GetWebviewConfigurationValue(ctx, WebNode_id, argument)) + return str(_GetModbusWebviewConfigurationValue(ctx, WebNode_id, argument)) webFormInterface = [(name, web_dtype (label=web_label, default=__GetWebviewConfigurationValue)) for name, web_label, c_dtype, web_dtype in WebNode_entry["WebParamList"]] # Configure the web interface to include the Modbus config parameters def __OnButtonSave(**kwargs): - OnButtonSave(WebNode_id=WebNode_id, **kwargs) + OnModbusButtonSave(WebNode_id=WebNode_id, **kwargs) WebSettings = NS.newExtensionSetting("Modbus #"+ str(WebNode_id), config_hash) @@ -505,9 +505,9 @@ __OnButtonSave) # callback def __OnButtonReset(**kwargs): - return OnButtonReset(WebNode_id = WebNode_id, **kwargs) + return OnModbusButtonReset(WebNode_id = WebNode_id, **kwargs) - def getConfigStatus(): + def getModbusConfigStatus(): if WebNode_entry["WebviewConfiguration"] == WebNode_entry["DefaultConfiguration"]: return "Unchanged" return "Modified" @@ -518,7 +518,7 @@ [ ("status", annotate.String(label=_("Current state"), immutable=True, - default=lambda *k:getConfigStatus())), + default=lambda *k:getModbusConfigStatus())), ], # fields (empty, no parameters required!) _("Reset"), # button label __OnButtonReset)