{"id":494,"date":"2015-04-12T19:00:48","date_gmt":"2015-04-12T18:00:48","guid":{"rendered":"http:\/\/ipsview.brownson.at\/?p=494"},"modified":"2018-10-10T20:16:46","modified_gmt":"2018-10-10T19:16:46","slug":"toggle-switch-fuer-dimmer","status":"publish","type":"post","link":"https:\/\/ipsview.brownson.at\/?p=494","title":{"rendered":"Toggle Switch f\u00fcr Dimmer"},"content":{"rendered":"<p>Wer sich zu einem Dimmer auch noch einen Toggle Switch bauen m\u00f6chte, kann das mit dem Skript in diesem Betrag realisieren.<\/p>\n<p>Ein zus\u00e4tzlicher Toggle Switch f\u00fcr einen Dimmer hat den Vorteil, dass der eingestellte Dimmer Wert erhalten bleibt und nach dem Einschalten des Lichtes, sofort auf den letzten gew\u00e4hlten Wert gedimmt wird.<\/p>\n<p>Zur Installation einfach ein neues Skript in der betreffenden Instanz anlegen und die Statusvariable eingetragen, die den aktuellen Wert des Dimmers enth\u00e4lt.<\/p>\n<p>Nach dem erstmaligen manuellen Ausf\u00fchren des Skriptes werden 2 zus\u00e4tzliche Variablen angelegt, eine boolean Variable f\u00fcr den Switch und eine Float Variable f\u00fcr die Speicherung des letzten Dimmer Wertes.<\/p>\n<p>Diese beiden Variablen k\u00f6nnen gegebenenfalls auch f\u00fcr die Kategorisierung in IPSView verwendet werden, um den Dimmer in die generiereten Views einzubinden.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-title=\"DimmerSwitch\">&lt;?\r\n\t\/**\r\n\t * @file          IPSView_DimmerSwitch.ips.php\r\n\t * @author        brownson\r\n\t * @version\r\n\t *   Version 1.0, 2015-04-12 brownson: Initiale Version&lt;br\/&gt;\r\n\t *\r\n\t * Skript um eine Switch Variable f\u00fcr einen Dimmer zu realisieren\r\n\t *\r\n\t * Konfiguration Einstellungen:\r\n\t *   DEVICE_DIMMER_ID        ... ID der Variable zum Setzen des Dimmer Wertes\r\n\t *\r\n\t *\/\r\n\r\n\t\/*\r\n\t * Konfiguration:\r\n\t * -------------------------------------------------------------------------\r\n\t *\/\r\n\r\n\tdefine (&#039;DEVICE_DIMMER_ID&#039;,\t12345);\r\n\r\n\t\/*\r\n\t * Programmlogik:\r\n\t * -------------------------------------------------------------------------\r\n\t *\/\r\n\t$scriptID     = $_IPS[&#039;SELF&#039;];\r\n\t$sender       = $_IPS[&#039;SENDER&#039;];\r\n\t$parentID     = IPS_GetParent($scriptID);\r\n\r\n\t$variableIDSwitch  = CreateVariable(&#039;IPSView_Switch&#039;,  0, $parentID, 10, \r\n                                            &#039;~Switch&#039;, $scriptID);\r\n\t$variableIDDimmer  = CreateVariable(&#039;IPSView_Dimmer&#039;,  2, $parentID, 20, &#039;&#039;, \r\n                                            $scriptID, DEVICE_DIMMER_ID);\r\n\r\n\tif ($sender==&#039;Execute&#039;) {\r\n\t   \/\/ Only create Variables in manuell Mode\r\n\t} else {\r\n\t\t$variableId   = $_IPS[&#039;VARIABLE&#039;];\r\n\t\t$value        = $_IPS[&#039;VALUE&#039;];\r\n\t\tswitch ($variableId) {\r\n\t\t\tcase $variableIDDimmer:\r\n\t\t\t   Dimmer_SetDeviceValue($value);\r\n\t\t\t   SetValue($variableIDSwitch, ($value &gt; 0));\r\n\t\t\t   SetValue($variableIDDimmer, $value);\r\n\t\t      break;\r\n\t\t\tcase $variableIDSwitch:\r\n\t\t\t   if ($value)\r\n\t\t\t   \tDimmer_SetDeviceValue(GetValue($variableIDDimmer));\r\n\t\t\t\telse\r\n\t\t\t   \tDimmer_SetDeviceValue(0);\r\n\t\t\t   SetValue($variableId, $value);\r\n\t\t      break;\r\n\t\t\tdefault:\r\n\t\t      break;\r\n\t\t}\r\n\t}\r\n\t\/*\r\n\t * Funktionen:\r\n\t * -------------------------------------------------------------------------\r\n\t *\/\r\n\r\n\tfunction Dimmer_SetDeviceValue($value) {\r\n\t\t\/\/ Schalten der Instanz (ACHTUNG: hier wurden undokumentierte\r\n\t\t\/\/ Befehle zum allgemeinen Ansteuern einer Instanz verwendet.\r\n\t\t\/\/ Alternativ kann man auch normale Instanz Funktionen wie zum\r\n\t\t\/\/ Beispiel HM_WriteValueBoolean verwenden.\r\n\t\t$instanceID = IPS_GetParent(DEVICE_DIMMER_ID);\r\n\t\t$ident      = IPS_GetObject(DEVICE_DIMMER_ID)[&#039;ObjectIdent&#039;];\r\n\t\tIPS_RequestAction($instanceID, $ident, $value);\r\n\t}\r\n\r\n\tfunction CreateVariable ($name, $type, $parentId, $position=0, $profile=&quot;&quot;, \r\n                                 $action=null, $referenceID=null) {\r\n\t\t$variableId = @IPS_GetObjectIDByIdent($name, $parentId);\r\n\t\tif ($variableId === false) {\r\n \t\t\t$variableId = IPS_CreateVariable($type);\r\n\t\t\tIPS_SetParent($variableId, $parentId);\r\n\t\t\tIPS_SetName($variableId, $name);\r\n\t\t\tIPS_SetIdent($variableId, $name);\r\n\t\t\tIPS_SetPosition($variableId, $position);\r\n  \t\t\tif ($referenceID != null) {\r\n  \t\t\t   $variable = IPS_GetVariable($referenceID);\r\n  \t\t\t   $profile  = $variable[&#039;VariableProfile&#039;];\r\n\t\t\t}\r\n  \t\t\tIPS_SetVariableCustomProfile($variableId, $profile);\r\n \t\t\tIPS_SetVariableCustomAction($variableId, $action);\r\n\t\t}\r\n\t\treturn $variableId;\r\n\t}\r\n\r\n?&gt;\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>F\u00fcr Homematic User gibt es hier noch eine erweiterte Version des Skriptes, die auch eine R\u00fccksynchronisierung des Dimmerwertes von Homematic erm\u00f6glicht.<\/p>\n<p>Die Synchronisierung ist insbesondere deshalb problematisch, weil bei einer eingestellten \u201eRampen\u201c Zeit (langsames hochdimmen \u00fcber einen bestimmten Zeitraum), periodisch die tempor\u00e4ren Werte des Dimmers von Homematic gesendet werden.<\/p>\n<p>Diese tempor\u00e4ren Werte f\u00fchren aber zu einem Springen der Anzeige nach dem Setzen eines Wertes. Dieses Problem wird in dem Skript durch die Abfrage der Status Variable \u201eWorking\u201c gel\u00f6st (diese gibt an, ob der Aktor gerade eine Aktion ausf\u00fchrt oder nicht).<\/p>\n<p>[EDIT 2018-10-10] Die Abfrage der Working Variable funktioniert mittlerweile nicht mehr und dadurch wird durch den Sync der letzte Wert der Dimmer Variable immer \u00fcberschrieben. Diese hat zur Folge, dass der Dimmer beim Einschalten den letzten Wert nicht mehr setzen kann und immer auf 0 bleibt. Habe als Workaround nun eine Abfrage eingebaut, die den Wert beim Einschalten auf 80% korrigiert.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-title=\"\">&lt;?\r\n\t\/**\r\n\t * @file          IPSView_DimmerSynced.ips.php\r\n\t * @author        brownson\r\n\t * @version\r\n\t *   Version 1.0, 2015-04-12 brownson: Initiale Version&lt;br\/&gt;\r\n\t *\r\n\t * Skript um eine Switch Variable f\u00fcr einen Dimmer zu realisieren\r\n\t *\r\n\t * Konfiguration Einstellungen:\r\n\t *   DEVICE_DIMMER_ID        ... ID der LEVEL Variable zum Setzen des Dimmer\r\n\t *                               Wertes\r\n\t *   DEVICE_WORKING_ID       ... ID der WORKING Variable, diese steuert die\r\n\t *                               Synchronisierung des Wertes\r\n\t *\r\n\t *\/\r\n\r\n\t\/*\r\n\t * Konfiguration:\r\n\t * -------------------------------------------------------------------------\r\n\t *\/\r\n\r\n\tdefine (&#039;DEVICE_DIMMER_ID&#039;, 31568 \/*[Hardware\\Homematic\\Couch\\LEVEL]*\/);\r\n\tdefine (&#039;DEVICE_WORKING_ID&#039;,50107 \/*[Hardware\\Homematic\\Couch\\WORKING]*\/);\r\n\r\n\t\/*\r\n\t * Programmlogik:\r\n\t * -------------------------------------------------------------------------\r\n\t *\/\r\n\t$scriptID     = $_IPS[&#039;SELF&#039;];\r\n\t$sender       = $_IPS[&#039;SENDER&#039;];\r\n\t$parentID     = IPS_GetParent($scriptID);\r\n\r\n\t$variableIDSwitch  = CreateVariable(&#039;IPSView_Switch&#039;,  0, $parentID, 10,\r\n\t                                    &#039;~Switch&#039;, $scriptID);\r\n\t$variableIDDimmer  = CreateVariable(&#039;IPSView_Dimmer&#039;,  2, $parentID, 20, &#039;&#039;,\r\n\t                                    $scriptID, DEVICE_DIMMER_ID);\r\n\r\n\tif ($sender==&#039;Execute&#039;) {\r\n\t   CreateEvent (&#039;IPSView_DimmerSync&#039;, DEVICE_DIMMER_ID,  $scriptID);\r\n\t   CreateEvent (&#039;IPSView_WorkingSync&#039;, DEVICE_WORKING_ID, $scriptID);\r\n\t} else if ($sender==&#039;Variable&#039;) {\r\n\t   $value        = GetValue(DEVICE_DIMMER_ID);\r\n\t   if (DEVICE_WORKING_ID==0 or !GetValue(DEVICE_WORKING_ID)) {\r\n\t      SetValue($variableIDSwitch, ($value &gt; 0));\r\n\t      SetValue($variableIDDimmer, $value);\r\n\t   }\r\n\t} else {\r\n\t\t$variableId   = $_IPS[&#039;VARIABLE&#039;];\r\n\t\t$value        = $_IPS[&#039;VALUE&#039;];\r\n\t\tswitch ($variableId) {\r\n\t\t\tcase $variableIDDimmer:\r\n\t\t\t   Dimmer_SetDeviceValue($value);\r\n\t\t\t   SetValue($variableIDSwitch, ($value &gt; 0));\r\n\t\t\t   SetValue($variableIDDimmer, $value);\r\n\t\t           break;\r\n\t\t\tcase $variableIDSwitch:\r\n                           if ($value &amp;&amp; GetValue($variableIDDimmer)&lt;= 0.05)\r\n                              SetValue($variableIDDimmer, 0.8);\r\n\r\n\t\t\t   if ($value)\r\n\t\t\t      Dimmer_SetDeviceValue(GetValue($variableIDDimmer));\r\n\t\t\t   else\r\n\t\t\t      Dimmer_SetDeviceValue(0);\r\n\t\t\t   SetValue($variableId, $value);\r\n\t\t           break;\r\n\t\t\tdefault:\r\n\t\t           break;\r\n\t\t}\r\n\t}\r\n\t\/*\r\n\t * Funktionen:\r\n\t * -------------------------------------------------------------------------\r\n\t *\/\r\n\r\n\tfunction Dimmer_SetDeviceValue($value) {\r\n\t\t$instanceID = IPS_GetParent(DEVICE_DIMMER_ID);\r\n\t\t$ident      = IPS_GetObject(DEVICE_DIMMER_ID)[&#039;ObjectIdent&#039;];\r\n\t\tIPS_RequestAction($instanceID, $ident, $value);\r\n\t}\r\n\r\n\tfunction CreateVariable ($name, $type, $parentId, $position=0, $profile=&quot;&quot;,\r\n\t                         $action=null, $referenceID=null) {\r\n\t\t$variableId = @IPS_GetObjectIDByIdent($name, $parentId);\r\n\t\tif ($variableId === false) {\r\n \t\t\t$variableId = IPS_CreateVariable($type);\r\n\t\t\tIPS_SetParent($variableId, $parentId);\r\n\t\t\tIPS_SetName($variableId, $name);\r\n\t\t\tIPS_SetIdent($variableId, $name);\r\n\t\t\tIPS_SetPosition($variableId, $position);\r\n  \t\t\tif ($referenceID != null) {\r\n  \t\t\t   $variable = IPS_GetVariable($referenceID);\r\n  \t\t\t   $profile  = $variable[&#039;VariableProfile&#039;];\r\n\t\t\t}\r\n  \t\t\tIPS_SetVariableCustomProfile($variableId, $profile);\r\n \t\t\tIPS_SetVariableCustomAction($variableId, $action);\r\n\t\t}\r\n\t\treturn $variableId;\r\n\t}\r\n\r\n\tfunction CreateEvent ($name, $variableId, $scriptId) {\r\n\t\t$eventId = @IPS_GetObjectIDByIdent($name, $scriptId);\r\n\t\tif ($eventId === false) {\r\n\t\t\t$eventId = IPS_CreateEvent(0);\r\n\t\t\tIPS_SetParent($eventId, $scriptId);\r\n\t\t\tIPS_SetName($eventId, $name);\r\n\t\t\tIPS_SetIdent($eventId, $name);\r\n\t\t\tIPS_SetEventTrigger($eventId, 1\/*ByChange*\/, $variableId);\r\n\t\t\tIPS_SetEventActive($eventId, true);\r\n  \t\t}\r\n\t\treturn $eventId;\r\n\t}\r\n\r\n?&gt;\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wer sich zu einem Dimmer auch noch einen Toggle Switch  [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,6],"tags":[32,34,33],"class_list":["post-494","post","type-post","status-publish","format-standard","hentry","category-howto","category-skripte","tag-dimmer","tag-homematic","tag-switch"],"_links":{"self":[{"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=\/wp\/v2\/posts\/494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=494"}],"version-history":[{"count":5,"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=\/wp\/v2\/posts\/494\/revisions"}],"predecessor-version":[{"id":1549,"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=\/wp\/v2\/posts\/494\/revisions\/1549"}],"wp:attachment":[{"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=494"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}