# Procedures > Symcon documentation · English · generated on 2026-09-26 > Index: https://www.symcon.de/en/llms.txt Source: https://www.symcon.de/en/service/documentation/procedures/ In the following section, basic and often used functions are explained. A general start is found at [Quick Start](getting-started.md). ## Add object Source: https://www.symcon.de/en/service/documentation/procedures/add-object/ In order to "Add a new object", the "+" in the lower right corner of the object tree must be clicked. The following dialog and selection of various objects appears: ![Add object in the object tree](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/objekt-hinzufuegen/d4d178ceca-1790424938/objekt-hinzufuegen-objektbaum.png) Alternatively, "right mouse button" can be used within the object tree to click on the desired position in the tree. The following context menu opens: ![Add object using the context menu](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/objekt-hinzufuegen/05edd2a7f2-1790424938/objekt-hinzufuegen-kontextmenue.png) ## Replace devices Source: https://www.symcon.de/en/service/documentation/procedures/replace-devices/ If a device is defective and has to be physically replaced, this can be implemented in IP-Symcon without creating a new instance. This has the advantage that the object IDs of the instance and the associated variables do not change. This means that any linked scripts do not have to be adapted to the new IDs. ### Replace Device within an Instance Devices are addressed and integrated in IP-Symcon via so-called instances. System-specific addresses are often available on the configuration page of the respective entity. This can be changed without changing the object ID. > **Note:** If the system used has a configurator, it can be updated and also adopts the changes ### Examples #### KNX For replacement, the configuration of the defective device must be opened in IP-Symcon and the three-level address of the old device must be exchanged with that of the new one. The address can be checked in the configurator. * Open the KNX configurator * "Search" but do not "Create" an instance * Memorise the new address and open the configuration of the old device * Enter new address (see screenshot) and save with "Apply". * Return to the configurator and update via "Search". The new address should now have an InstanceID. ![KNX replace device](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/geraete-austauschen/5c50737220-1790424938/knx-geraettauschen.png) The three-level address in the marked area must be replaced and saved with "Apply". #### Homematic For replacement, the configuration of the defective device must be opened in IP-Symcon and the address of the old device must be replaced with that of the new one. The address is either on the device itself or can be selected via "Search". ![Replace Homematic device](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/geraete-austauschen/3e79d9fb35-1790424938/homematic-konfiguration-geraeteaustauschen.png) The address in the highlighted area must be replaced and saved with "Apply". #### OneWire For replacement, the configuration of the defective device must be opened in IP-Symcon and the 16-digit address of the old device must be replaced for that of the new one. The address can be checked in the configurator. * Open OneWire configurator * "Search" but do not "Create" an instance * Memorise the new address and open the configuration of the old device * Enter new address (see screenshot) and save with "Apply". * Return to the configurator and update via "Search". The new address should now have an InstanceID. ![Replace OneWire device](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/geraete-austauschen/9e063ddec7-1790424938/onewire-geraettauschen.png) The 16-digit address in the marked area must be replaced and saved with "Apply". #### Z-Wave For replacement, the configuration of the defective device must be opened in IP-Symcon and the NodeID of the old device must be replaced for that of the new one. The NodeID can be checked in the configurator. * Open Z-Wave Configurator * Teach device but do not "Create" an instance * Memorise NodeID and open the configuration of the old device * Enter new NodeID (see screenshot) and save with "Apply". * Return to the configurator and "Refresh" The new NodeID should now have an InstanceID. ![Z-Wave device replacement](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/geraete-austauschen/9a593c136d-1790424938/zwave-geraettauschen.png) The NodeID in the marked area must be replaced and saved with "Apply". ## Integrate devices Source: https://www.symcon.de/en/service/documentation/procedures/integrate-devices/ Devices are addressed in IP-Symcon via so-called instances. > **Note:** The principle of creating the devices has changed fundamentally from version 1 onwards. I/O instances, splitters or similar no longer have to be created/connected. IP-Symcon does this automatically. IP-Symcon also creates the status variables automatically. ### Create instance [Configurators](concepts.md) are available for the following systems for a more convenient configuration of devices. The appropriate configurator can be added to the object tree within the web-based Management Console using the "+" button. * [digitalStrom](modules/digitalstrom.md) * [Eaton xComfort](modules/xcomfort.md) * [KNX](modules/knx.md) * [HomeMatic](modules/homematic.md) * [LCN](modules/lcn.md) * [MQTT](modules/mqtt.md) * [Siemens OZW](modules/siemens-ozw.md) * [Z-Wave](modules/z-wave.md) * [1-Wire](modules/1-wire.md) For all other systems, the respective device must be added by creating a suitable instance. The creation dialog can be accessed in the object tree using the "+" -> "Instance" button. IP-Symcon takes care of creating the required gateways, splitters and I/O's. In the "Messages" tab it can be checked whether an instance has an error. A message with a yellow or red background is interesting. This means there is still one setting missing for an instance to work. A "double click" on the respective message leads directly to the section of IP-Symcon where the said setting is still required. Access to the gateway and I/O interfaces belonging to each device is possible via the "Configure gateway" or "Configure interface" gear wheel in the device "Configuration" tab. The required settings can be checked there and improved if necessary. The "[Module reference](modules/index.md) " area contains the setup instructions for the respective devices/instances, either as a description or as a video tutorial. ## Search devices Source: https://www.symcon.de/en/service/documentation/procedures/search-devices/ IP-Symcon has a very convenient function that allows the user to quickly and easily add new devices to the system. The prerequisite is that the new, to be taught devices send messages of their own accord (e.g. wireless temperature sensors). Alternatively, the user can - or must - press a "teach button" or simply a button on the remote control. With some systems, such as the 1-Wire system, IP-Symcon can specifically search for connected, unknown devices. According to the motto: "Hello, who is it?". And the devices respond with: "It's me, the brightness sensor". > **Note:** Devices can be searched for via the [Configurators](concepts.md) of the respective systems. ### Examples The following example shows the received devices of the HomeMatic system: ![HM: search-found](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/geraete-suchen/82c2ebdaec-1790424938/hm-suchen-gefunden.png) > **Note:** It may take several minutes for all devices to appear in the list! A green background indicates a new module. It can then be selected by double-clicking. Depending on the properties of the device, IP-Symcon automatically creates variables that reflect the functionality. The names and the location can be changed at any time. The following example shows the three variables of a wireless switch or remote control of the HomeMatic system: ![HM: search variables](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/geraete-suchen/c38362cfec-1790424938/hm-suchen-variablen.png) With the HomeMatic system, it must also be specified for the search whether wireless or wired devices are to be searched for. If the BidCoS serial number is known, it can also be entered directly: ![HM: search](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/geraete-suchen/9a9c5b0075-1790424938/hm-suchen.png) > **Note:** Please note that its variables are only filled with values the second time a data record is received from the respective device. ## Connect Systems via Events Source: https://www.symcon.de/en/service/documentation/procedures/connect-systems-via-events/ IP-Symcon offers the very comfortable option to transfer values from one system directly to another. For this purpose an [Event](concepts.md) can be added, which can set another value to the trigger value when the trigger value is changed. It is irrelevant whether the two values belong to different systems. In the example below, a KNX dimmer value is transferred to a Z-Wave dimmer. ### Example A KNX dimmer value can be transmitted to a Z-Wave lamp with dimmer value. For this purpose, a change of the KNX value is reacted to and the new value is transferred to the dimming value of the Z-Wave lamp which is then being switched. In the object tree, the two device instances have already been created and are functioning properly on their own. Now an event must be created. To do this, an event can be added via the "+" at the bottom right of the object tree. The event must be configured as follows. The dimming value, whose value is to be transferred on change, is selected as the triggering variable. In this example it is the value of DPT 005.001. Under Action, the intensity of the Z-Wave lamp with dimmer actuator is selected as "Target". As action type "Switch variable" and as action "Switch to triggering value" must be selected. By clicking "OK" the event is created and the configuration is saved. ![event configuration](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/systeme-verbinden-ueber-ereignisse/7ae8d4ba44-1790424938/systemeverbindenereignisse-konfigereignis.png) From now on, every time the KNX dimmer value changes, the intensity of the Z-Wave instance will be dimmed to the same value. The object tree should then look like this. ![object tree](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/systeme-verbinden-ueber-ereignisse/b6c5cc13ca-1790424938/systemeverbindenereignisse-objektbaum.png) ## Reuse scripts Source: https://www.symcon.de/en/service/documentation/procedures/reuse-scripts/ > **Note:** This is an example that can also be mapped with events. This article is more about [System variables](concepts/automations.md) and reusability of script sections. This example is about a corridor light control that is the same on all floors. If possible, this should not be programmed three times. One possibility would be to create 3 scripts and then copy and paste the content of one script into the individual scripts. This is certainly possible for a quick fix. However, this also leads to a certain redundancy and if something needs to be improved at one point in the script, this does not have to be done once but three times. As an example for code reusing, a script with the name "light control (xComfort, Corridor, Motion detector, Brightness control)" can be created. The name should be descriptive and include what systems, devices and status it uses. The following code could be the content: ```php //If no movement - see "System Variables" documentation for meaning of $_IPS['VALUE'] if(!$_IPS['VALUE']) { MXC_SwitchMode($lampID, false); } //If motion was detected else { //Only after sunset if(!GetValueBoolean($istTag)) { //If it is between 10:30 p.m. and 06:00 a.m | if((time() > strtotime("22:30")) || (time() < strtotime("06:00"))) { | MXC_DimSet($lampID, 15); } else { MXC_DimSet($lampID, 50); } } } ``` This script must be called by a [triggering event](concepts.md) - here usually by one/several motion detectors. The light is then set to a different dimming level depending on the time of day. As soon as the motion detector no longer detects any movement and sends the FALSE impulse, the device switches off. The logic is thus outsourced and only scripts have to be created that set the missing variables and are called by an event. Below is an example: ```php //Triggering of the event by motion detector variable! //Unique Device-ID $lampID = 54321 /*[ground floor\corridor\ceiling lamp]*/; //Day/night variable from the location control $isDay = 56789 /*[IsDay]*/; includeScript(12345 /*[scenarios\light control]*/); //Function to insert script content function includeScript($scriptID) { $s = IPS_GetScript($scriptID); include($s['ScriptFile']); } ``` In this way, "function templates" can be created and then fed with the necessary IDs. In these scripts then are the IDs of the devices/variables for which IP-Symcon creates complete and meaningful names (provided the object tree structure was created [properly](concepts.md)). If required, the script can also be adapted for other systems and the correct function can be called dynamically using the [transferred InstanceID](functions/management-instances.md) or the system-specific changes can be made. ## Password protected category in WebFront Source: https://www.symcon.de/en/service/documentation/procedures/password-protected-category-in-webfront/ In order to protect certain categories from the object tree in the WebFront with a password, the following steps must be observed. The category to be saved must be moved away from the rest of the WebFront in the object tree . Then a [new WebFront must be set up](components/webfront-visualization.md). Once this is done, any password can be set up in the [Security of the WebFront](getting-started.md) . In the second WebFront, everything must be removed via the [Editor](components/webfront-visualization.md) and the category that is to display the password-protected content needs to be added. The second WebFront must then be added to the first WebFront as an external page via a path. ![Set up WebFront in the editor](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/passwort-geschuetztes-webfront/92c3e2b82e-1790424938/gesichertekategorie-webfrontkonfig.png) The call to the external page then looks as follows. ![WebFront with external page](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/passwort-geschuetztes-webfront/6166d27a53-1790424938/gesichertekategorie-webfrontfertig.png) ## Use links Source: https://www.symcon.de/en/service/documentation/procedures/use-links/ The following example illustrates the principle of [Links](concepts.md). For example, a number of smoke detectors are installed and connected in a house. For safety reasons, the smoke detectors are now to be checked every three months. An initial check was quite time-consuming. When structuring the visualization, the structure was sensibly designed according to floor -> room -> device. However, each room now has to be checked individually in order to check each smoke detector. This seems too time-consuming. ![Visualization](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/links-verwenden/58da026b05-1790424938/linksverwenden-visualisierung.png) A category called "Smoke detectors" is now created next to the floors and all smoke detectors are moved to this category using "drag and drop". Because all smoke detectors have been assigned to a new category in Symcon, they are no longer visible in the individual rooms in the visualization. Unfortunately, this means that the smoke detectors are now missing in the individual rooms in which they are installed. Symcon offers the option of creating links to individual objects. To create these links, right-click on a selected object in the object tree - in this case, a smoke detector. ![context menu](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/links-verwenden/a2de0470ea-1790424938/linksverwenden-kontextmenue.png) As soon as "Link object" is clicked, the object has been moved to the clipboard for linking. A link to the originally selected object can now be created anywhere in the object tree by right-clicking and selecting "Insert object". This can be repeated with all smoke detectors and the smoke detectors can be easily checked in the visualization without constantly clicking back and forth. Nevertheless, they can still be found in their respective rooms. In addition, links can be given their own name and icon by right-clicking on "Edit object". ## Send push notifications to different user groups Source: https://www.symcon.de/en/service/documentation/procedures/send-push-notifications-to-different-user-groups/ The procedure for sending push notifications to different user groups is explained below. In this example, a user group consists of several terminal devices (smartphones) registered to a WebFront. ### Setup User groups for push notifications are implemented in IP-Symcon via separate WebFronts or WebFront visualizations. > **Warning:** In order to be able to set up more than one WebFront, an __IP-Symcon Professional__ or __IP-Symcon Unlimited__ version is required. How an additional WebFront can be set up can be seen under "[Set up additional WebFront](components/webfront-visualization.md) ". These WebFronts can then be set up separately according to personal needs. > **Note:** In order to be able to use the same instances in different WebFronts, [Links](concepts.md) are required. See "[Use links](how-to.md) " for an example. ### Registration in the user groups As described above, user groups are implemented via WebFronts. It is sufficient to register once in the respective WebFront with the app on the smartphone that is to be registered. This automatically adds the device to the respective user group. From this point on, the smartphone app automatically receives every push notification. In this way, the smartphone can be registered with any number of user groups. > **Warning:** Logging into the respective WebFront via the mobile phone browser does not result in an entry in the user group. ### Logout from a user group __Logout from individual user group:__ In the WebFront visualization, the registered devices can be managed in the "Notifications" tab. This means that a single smartphone can be deregistered from a user group. __Logout from all user groups:__ If a smartphone is to be deregistered from all user groups, this can be done via the "Notification Control" core instance. All mobile devices that are registered in a WebFront can be seen in the configuration tab. Is the device deleted here, the smartphone is logged off from all user groups. ### Sending push notifications A push notification can be created with [WFC_PushNotification](modules/webfront-visualization.md). This needs the ObjectID of the respective WebFront to which the push notification is to be sent. All smartphones registered on this WebFront then receive the notification via the app. ### Tips & Tricks If a password is set up for the respective WebFront via the "Security" tab, it is easy to prevent "accidentally" registering for a user group. ### Application Examples A household with multiple WebFronts. * __A WebFront for administrators:__ Only administrators are in this user group and are notified of supposed system problems. * __A WebFront for a single family member:__ Includes personal interests and sends messages that only interest that person. * __A WebFront for all family members:__ The refrigerator reports "The milk is empty, someone has to go shopping", The weather module reports "It's about to rain" or a burglar alarm. ## How can I...? Source: https://www.symcon.de/en/service/documentation/procedures/how-can-i/ > **Warning:** Many of these scripts use special IP-Symcon functions. > The [Command Reference](functions/index.md)/[Module Reference](modules/index.md) entail further information on how exactly these functions work. [... switch on a device and switch it off again after 60 seconds](how-to.md) [... get a list of module names including GUID](how-to.md) [... configure an instance from PHP](how-to.md) [... find out the remaining number of seconds of a ScriptTimer](how-to.md) [... directly include a script by ID](how-to.md) [... Output UpdateTime in a separate string variable (1 script - n variables)](how-to.md) [... create a timer & variable from PHP](how-to.md) [... download a file from the Internet](how-to.md) [... load a folder recursively into the MediaPlayer playlist](how-to.md) [... export a variable profile](how-to.md) ### ... switch on a device and switch it off again after 60 seconds ```php if($_IPS['SENDER'] == "TimerEvent") { //From function ... //Turn off the timer IPS_SetScriptTimer($_IPS['SELF'], 0); } else { //To function ... //Turn on the timer IPS_SetScriptTimer($_IPS['SELF'], 60); } ``` ### ... get a list of module names and GUID ```php foreach(IPS_GetModuleList() as $mid) { $m = IPS_GetModule($mid); echo $mid."=".$m['ModuleName']."\n"; } ``` ### ... configure an instance from PHP ```php //Change property WWWReader_SetPage($id,"http://www.google.com"); //Apply changes IPS_ApplyChanges($id); //Get new URL WWWReader_UpdatePage($id); ``` ### ... find out the remaining number of seconds of a ScriptTimer ```php echo GetTimeRemaining($_IPS['SELF']); //Find out by yourself function GetTimeRemaining($id) { $eid=@IPS_GetEventIDByName("ScriptTimer", $id); if($eid === false) { return -1; } else { $e=IPS_GetEvent($eid); if($e['NextRun'] == 0) { return -1; } else { return $e['NextRun'] - microtime(true); } } } ``` ### ... directly include a script by ID ```php //Include script with ID 14871 include(IPS_GetScriptFile(14871)); ``` ### ... Output UpdateTime in a separate string variable (1 script - n variables) ```php //Evaluate event if($_IPS['SENDER'] != "Variable") return; SetValue(CreateVariableIDByName($_IPS['VARIABLE'], 'Updated', 3), date("d.m.y H:i:s")); function CreateVariableIDByName($id, $name, $type) { $vid = @IPS_GetVariableIDByName($name, $id); if($vid===false) { $vid = IPS_CreateVariable($type); IPS_SetParent($vid, $id); IPS_SetName($vid, $name); IPS_SetInfo($vid, "This Variable was created by Script #".$_IPS['SELF']); } return $vid; } ``` ### ... create a timer & variable from PHP > **Note:** When the script runs, it sets a timer that starts every six hours and then puts a variable with the time of day as a value between 0-3 into the variable. ```php //NOTE: //~~~~~~~~ //This script sets itself up automatically when run // //- A variable is set depending on the time of day (0-3) // 0 = 0-6 // 1 = 6-12 // 2 = 12-18 // 3 = 19-24 //----------------------------------------------------------------------------- //From this point nothing needs to be changed //----------------------------------------------------------------------------- if($_IPS['SENDER'] == "Execute") { $eventid = @IPS_GetEventIDByName("Timer", $_IPS['SELF']); if($eventid === false) { $eventid = IPS_CreateEvent(1); //Cyclic IPS_SetEventActive($eventid, true); IPS_SetName($eventid, "Timer"); IPS_SetEventScript($eventid, $_IPS['SELF']); IPS_SetEventCyclic($eventid, 0, 0, 0, 0, 3, 6); } $variableid = @IPS_GetVariableIDByName("Daytime", $_IPS['SELF']); if($variableid === false) { $variableid = IPS_CreateVariable(1); IPS_SetName($variableid, "Daytime"); IPS_SetParent($variableid, $_IPS['SELF']); } } SetValue(IPS_GetVariableIDByName("Daytime", $_IPS['SELF']), floor(date("H") / 6)); ``` ### ... download a file from the Internet ```php $remoteImage = "https://www.google.com/images/srpr/logo3w.png"; $localImage = IPS_GetKernelDir()."\\media\\image.jpg"; //Download $content = @file_get_contents($remoteImage); if((strpos($http_response_header[0], "200") === false)) { return; } //Save to computer file_put_contents( $localImage, $content ); ``` ### ... load a folder recursively into the MediaPlayer playlist ```php function WAC_PlayDir($id, $dir) { function ReadRecursive($dir, $subdir = "") { $result = Array(); $files = scandir($dir."/".$subdir); foreach($files as $file) { if(($file != ".") && ($file != "..")) { if(is_dir($dir."/".$subdir."/".$file)) { $res = ReadRecursive($dir, $subdir."/".$file); $result = array_merge($res, $result); } else { $filedir = $subdir."/".$file; $filedir = substr($filedir, 1, strlen($filedir)); $result[] = $filedir; } } } return $result; } $allowed = Array("mp3", "wma"); $files = ReadRecursive($dir); //Use PHP's random number generator //shuffle($files); WAC_ClearPlaylist($id); foreach($files as $file) { $ext = pathinfo($dir."/".$file, PATHINFO_EXTENSION); if(in_array(strtolower($ext), $allowed)) { WAC_AddFile($id, $dir."/".$file); } } WAC_Play($id); } ``` ### ... export a variable profile ```php getVariableProfileCreationCode("~Temperature.FHT"); getVariableProfileCreationCode("~Temperature.FHT", "TemperatureTest"); // first function parameter: Profile name, second parameter (optional): new profile name function getVariableProfileCreationCode ($profileName, $newProfileName = "") { $profile = IPS_GetVariableProfile($profileName); if ($profile !== false) { $profileName = (strlen($newProfileName) > 0) ? $newProfileName : $profileName; echo 'IPS_CreateVariableProfile("'.$profileName.'", '.$profile['ProfileType'].');'."\n"; echo 'IPS_SetVariableProfileText("'.$profileName.'", "'.$profile['Prefix'].'", "'.$profile['Suffix'].'");'."\n"; echo 'IPS_SetVariableProfileValues("'.$profileName.'", '.$profile['MinValue'].', '.$profile['MaxValue'].', '.$profile['StepSize'].');'."\n"; echo 'IPS_SetVariableProfileDigits("'.$profileName.'", '.$profile['Digits'].');'."\n"; echo 'IPS_SetVariableProfileIcon("'.$profileName.'", "'.$profile['Icon'].'");'."\n"; foreach ($profile['Associations'] as $association) { echo 'IPS_SetVariableProfileAssociation("'.$profileName.'", '.$association['Value'].', "'.$association['Name'].'", "'.$association['Icon'].'", '.$association['Color'].');'."\n"; } echo "\n"; } } ``` ## Keyboard Shortcuts Source: https://www.symcon.de/en/service/documentation/procedures/keyboard-shortcuts/ ### General Keyboard Shortcuts | __Shortcut__ | __Description__ | | ------------ | --------------------- | | Esc | Close the current tab | ### Keyboard Shortcuts in Script Editor | __Shortcut__ | __Description__ | | -------------------------- | -------------------------- | | F3 | Search next | | Shift + F3 | Search previous | | Ctrl + A | Select all | | Ctrl + C | Copy text via Ctrl + V | | Ctrl + E | Execute | | Ctrl + F | Search | | Ctrl + H | Replace | | Ctrl + O | Select object | | Ctrl + R | Rename script | | Ctrl + S | Save | | Ctrl + D | Display events | | Ctrl + X | Move text via Ctrl + V | | Ctrl + Shift + K | Delete row | | Ctrl + V | Insert text from clipboard | | Ctrl + Z | Undo | | Ctrl + Shift + Z, Ctrl + Y | Redo | | Ctrl + Space | Display function list | | Ctrl + Shift + F | Search in all scripts | | Ctrl + Shift + H | Replace in all scripts | ### Tastenkombinationen im Objektbaum | __Shortcut__ | __Description__ | | ------------ | ---------------------------------------------------- | | Enter | Open object or edit object if it cannot be opened | | Del | Delete object | | Alt + 0 | Add category | | Alt + 1 | Add instance | | Alt + 2 | Add variable | | Alt + 3 | Add script | | Alt + 4 | Add event | | Alt + 5 | Add media | | Alt + 6 | Add link | | Ctrl + C | Copy object via Ctrl + V, copy ObjectID to clipboard | | Ctrl + L | Create link to object via Ctrl + V | | Ctrl + X | Move object via Ctrl + V | | Ctrl + V | Copy, insert, or move object | | Ctrl + E | Execute object | | Ctrl + F | Search ID | | Ctrl + R, F2 | Rename object | | Ctrl + Enter | Edit object | ## Save CSV data from WebFront to Excel Source: https://www.symcon.de/en/service/documentation/procedures/save-csv-data-from-webfront-to-excel/ Graphs in the WebFront are displayed using CSV data sets. In order to make these available in a neat and legible form for further use in Excel, there is the "Text-To-Columns" functionality. This works for any CSV data set. The CSV data broken up in this way can, for example, be used for Excel graphics or the like of. ### Example #### Step 1 - CSV Export Copy Record Within the WebFront the graph symbol and then the menu item "CSV" have to be clicked on. In the popup (see picture) the data records simply have to be marked and copied with "Ctrl + C". ![CSV Export](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/csv-daten-aus-webfront-speichern/21860e14ac-1790424938/csvexcel-csvexport.png) #### Step 2 - Paste The data needs to be pasted into an empty table with "Ctrl + V". If necessary, the font color must be changed to black, as the white font color may have been adopted. ![insert](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/csv-daten-aus-webfront-speichern/d3e1d1d038-1790424938/csvexcel-einfuegen.png) #### Step 3 - Text to Columns The "Text to Columns" function is used to split the data records. To do this, the "Data" tab must be selected and all data records highlighted. Then the "Text to columns" button must be clicked on and a dialog opens. ![text to columns](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/csv-daten-aus-webfront-speichern/63313e31d7-1790424938/csvexcel-textinspalten.png) #### Step 4 - Dialog The dialog proceeds in 3 steps. ![dialog step 1](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/csv-daten-aus-webfront-speichern/826a9be282-1790424938/csvexcel-dialog1.png) Click "Next". ![dialog step 2](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/csv-daten-aus-webfront-speichern/15fb0bdc6a-1790424938/csvexcel-dialog2.png) Select a semicolon as it separates the records. Click "Next". ![dialog step 3](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/csv-daten-aus-webfront-speichern/db14c45fe7-1790424938/csvexcel-dialog3.png) Click "Finish". #### Result The table should then look like this. ![result](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/csv-daten-aus-webfront-speichern/c829898a41-1790424938/csvexcel-ergebnis.png) ## Using FTP Source: https://www.symcon.de/en/service/documentation/procedures/using-ftp/ It is possible to access files that are stored on an FTP server via script. ### Prepare FTP server If this was not done already, it is required to set up and configure an FTP server. The explanation will be given for the tool [FileZilla Server](https://filezilla-project.org/download.php?type=server) . However, the process is similar for other tools. During the installation, FileZilla Server already initializes an FTP server on the local host, if needed. ![Connect to Server](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/ftp-benutzen/2f9c27b6a6-1790424938/ftp-enter-server.png) When launching the tool, the shown dialog is opened. It is used to connect to the created FTP server. If the default settings from the installation were used, the data can be used as shown in the screenshot, i.e., "Host": "localhost", "Port": 14147, and no password. > **Note:** In most cases, the firewall needs to be configured to allow access to the FTP server. The process is explained for Filezilla [here](https://wiki.filezilla-project.org/Network_Configuration) #### Creating a Group The next step is setting up a group for users. Groups can be used to categorize users and provide different rights or accessible folders. However, it is also possible to simply create a single group that is used for all users, thus providing the same rights to every user. ![Edit -> Groups](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/ftp-benutzen/ce6dc9b61e-1790424938/ftp-edit-groups.png) ![Add Group](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/ftp-benutzen/1ccab9193e-1790424938/ftp-group-add.png) ![Select Group Name](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/ftp-benutzen/9e1b60a6bc-1790424938/ftp-group-name.png) The Groups settings can be accessed via the menu "Edit->Groups". In the shown dialog, a new group can be added via "Add" below the initially empty list of groups. After entering a name and confirming the choice, a new group is created. ![Add Shared Folder](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/ftp-benutzen/5021ffab1c-1790424938/ftp-group-folder.png) ![Select Folder](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/ftp-benutzen/bb3e4b1e10-1790424938/ftp-group-folder-select.png) In the category "Shared folders", the folder that is meant to be accessed via FTP is chosen by clicking "Add" below the initially empty list of directories. This will open a dialog to select a folder. ![Configure Rights](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/ftp-benutzen/7e8a8af1aa-1790424938/ftp-group-folder-settings.png) After adding a shared folder, it is possible to configure the rights of accessing the folder. By default, the files in the folder and its subdirectories can be read but not modified. #### Creating a User ![Edit -> Users](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/ftp-benutzen/882351b9ee-1790424938/ftp-edit-users.png) ![Add User](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/ftp-benutzen/dd16fffc15-1790424938/ftp-user-add.png) ![Choose User Name and Group](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/ftp-benutzen/b895a782d0-1790424938/ftp-user-name-group.png) New users are added in the Users settings that are accessed via "Edit->Users". A new user is added by clicking "Add" below the initially empty list of users. In the shown dialog, a user name and a group is chosen. After confirming the choice, the user is added. ![Set Password](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/ftp-benutzen/39ae90ebb8-1790424938/ftp-user-password.png) A password can be set for the newly created user by activating the checkbox "Password" and entering a chosen password. > **Note:** If only one user exists, the creation of a group can be skipped. Instead, the user is assigned a shared folder directly. ### Access a File from the FTP Server via Script ```php // Read content $address = "ftp://my-user:password@localhost/test.txt"; $content = file_get_contents($address); ``` ```php echo $content; // Write content $targetAddress = "ftp://my-user:password@localhost/test.txt"; $newContent = "Hello World! This is new content."; file_put_contents($zielAdresse, $neuerInhalt); ``` A file on an FTP server can be accessed like it was a local file. Merely the address of the file changes. The code example reads and outputs the content of the file "test.txt" on the local FTP server. The address is structered as follows: "ftp://<user>(:<password>)@<servername>/<path-to-file>". > **Note:** It is also possible to use special FTP functions when accessing an FTP server as shown [here](https://www.php.net/manual/en/book.ftp.php) ## Replace I/O of a gateway Source: https://www.symcon.de/en/service/documentation/procedures/replace-io-of-a-gateway/ Sometimes it is necessary to replace the I/O instance of a gateway. This would be the case if, for example, TCP-based communication is to be used instead of serial. Or another/new gateway is used. > **Note:** A list of the different I/O's can be found under [Instances -> Connection components](concepts.md) . The easiest way to access the gateway for the respective device instance is via ‘Configure gateway’ in the upper area of the instance configuration. In the instance configuration of the gateway, the parent instance, in this case the I/O instance, can now be adjusted via ‘Change interface’ in the upper area. In the dialogue box that appears, you can select an existing compatible I/O or alternatively create a new I/O by clicking on ‘New’. ![gateway configuration page](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/io-eines-gateways-austauschen/e75cc5940f-1790424938/io-austauschen-gateway.png) ![I/O replacement menu](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/io-eines-gateways-austauschen/d1d1cc53ff-1790424938/io-austauschen-iotausch.png) ## E-Mail notification Source: https://www.symcon.de/en/service/documentation/procedures/e-mail-notification/ IP-Symcon offers the possibility to send e-mails via [SMTP-Instance](modules/smtp.md). For example, this offers the possibility to inform whether the front door or a window (requiring sensors) was opened in the SmartHome, whether a certain person is present (requiring the Presence Control Module) or the general status of various data and consumption. On the one hand, this can provide increased security (e.g. if a burglar tampers with a window or door) or, on the other hand, it can also increase comfort (e.g. general SmartHome information). Notifications at a specific point in time (e.g. as a reminder, monthly report) can also be implemented. ### Create Instance In order to send an email at a specific time, an [Instance](concepts.md) must first be created. Instances represent, for example, devices that are connected to IP-Symcon. These can be both configured and receive functions. A new SMTP instance can be created by clicking on "+" in the [Object tree](components/management-console.md) of the [Management Console](components/management-console.md) or by selecting the item "Add object" -> "Instance" from the context menu. The second option has the advantage that the instance is created directly below the selected object in the object tree and does not have to be sorted afterwards. In the "Add Instance" menu, "Email" can be searched for via the quick filter and "Email, Send (SMTP)" can be added. ![add SMTP](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/email-benachrichtigung/fd70761349-1790424938/emailbenachrichtigung-smtpadd.png) The personal access data must be entered on the "E-Mail, Send (SMTP)" configuration page. ![SMTP configuration page](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/email-benachrichtigung/ffd14d8b86-1790424938/emailbenachrichtigung-smtpconfig.png) "Host", "Port" and "Use SSL" (encryption) must be configured. With the respective provider the correct settings (keyword: SMTP) can be searched for. The username and password of the e-mail account must be entered under "Use authentication". The "Sender Name" can be chosen freely. This will later be displayed as the sender in the recipient's mailbox. E-mail addresses must be entered for "Sender address" and for "Recipient". > **Note:** The "Sender address" is the address that is later displayed as the sender address when an e-mail arrives, while "Recipient" is the address to which IP-Symcon sends a message. After everything has been filled out correctly, the configuration must be saved with "Apply". A test message can now be sent to the "recipient" email address within the test environment in the lower area of the configuration page. #### Examples #### 1. Email at a specific time In this example, a reminder email is supposed to be sent at a specific time. ##### Create Event A [Cyclic Event](concepts.md) must be created. Events can start specific operations on specific conditions or times. A new event can be created by clicking on "+" in the [Object tree](components/management-console.md) of the [Management Console](components/management-console.md) or by selecting the item "Add object" -> "Event" -> "Cyclic" via the context menu. The second option has the advantage that the instance is created directly below the selected object in the object tree and does not have to be sorted in afterwards. ![Add cyclic event](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/email-benachrichtigung/10551167c5-1790424938/emailbenachrichtigung-periodiceventadd.png) Now it has to be entered exactly when the reminder is to be sent by e-mail. This is useful if, for example, one wants to be reminded by e-mail during work in the office (Monday to Friday) that a certain medication needs to be taken after the lunch break (at 2:20 p.m.). ![configure event](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/email-benachrichtigung/40387e047f-1790424938/emailbenachrichtigung-periodiceventconfig.png) The previously created SMTP instance must be selected for "Action" "Switch instance" and for "Target". "SMTP_SendMail" must be selected for "Function", otherwise no e-mail will be sent. The message that is to be sent by e-mail at the selected time can now be entered under Parameter. An e-mail will now be sent every day from Monday to Friday, reminding about medication intake. #### 2. Email for specific event In this example, an e-mail is to be sent which is linked to a specific event. For example, an e-mail should be sent on the go, if a window or door was opened without permission and a burglar might be at work. ##### Create Variable and Event To implement the example, an event can be linked to an existing status variable or a self-created variable. [Variables](concepts.md) are data holders that enable switching on and off (e.g. the door sensor) to work and be displayed in the WebFront. In this example, the self-created variable represents an imaginary door sensor. A new variable can be created by clicking on "+" in the [Object tree](components/management-console.md) of the [Management Console](components/management-console.md) or by selecting the item "Add object" -> "Variable" -> "Add variable" via the context menu. The second option has the advantage that the variable is created directly below the object selected by in the object tree and does not have to be sorted in afterwards. "Boolean" must now be selected for "Type" in the "Add variable" menu, because an e-mail should be sent when the door sensor is activated. ![Create variable](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/email-benachrichtigung/3846586585-1790424938/emailbenachrichtigung-variableadd.png) Then "~Presence" can be selected as "Own Profile", since the presence of a person or an open door in the house should be displayed. Then a name for the variable must be chosen. It is recommended to choose descriptive names (e.g.: "Presence"). Now, instead of a "Cyclic" a "Triggered event" must be created. In the configuration of the event, the created presence variable must be selected under "Variable". ![Add triggered event](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/email-benachrichtigung/6a7e8d931d-1790424938/emailbenachrichtigung-triggereventadd.png) “Trigger” in this example is “At specific value”. The "Value" must be set to "True" (True=Present; False=Away) and "Run subsequent events" must be checked. ![configure event](https://www.symcon.de/media/pages/service/dokumentation/vorgehensweisen/email-benachrichtigung/df94204496-1790424938/emailbenachrichtigung-triggereventconfig.png) In "Action" "Switch instance" and in "Target" the previously created SMTP instance must be selected. "SMTP_SendMail" must be selected for "Function", otherwise no e-mail will be sent. The message that is to be sent by e-mail at the selected time must now be entered in the parameter. Now an email is sent when the variable is set to true (imaginary door opened).