function IPSModuleManagerGUI_GetLock($action='', $refresh=false) { $result = IPS_SemaphoreEnter('IPSModuleManagerGUI', 10); if (!$result and $action<>'') { IPSLogger_Wrn(__file__, 'IPSModuleManager Action "'.$action.'" ignored - other Action already in progess!!!'); } if ($refresh) { IPSModuleManagerGUI_Refresh(); } return $result; }
private function lock($ident) { for ($i = 0; $i < 100; $i++) { if (IPS_SemaphoreEnter('Logamatic_' . (string) $this->InstanceID . (string) $ident, 1)) { return true; } else { IPS_Sleep(mt_rand(1, 5)); } } return false; }
* Voraussetzung für den Refresh mit Event ist, dass der Konfigurations Parameter EDIP_CONFIG_REFRESHMETHOD * auf dem Wert EDIP_REFRESHMETHOD_EVENT steht. * */ include_once "IPSEDIP.class.php"; $eventName = IPS_GetName($_IPS['EVENT']); foreach (IPSEDIP_GetConfiguration() as $configId=>$configData) { if (substr($eventName,0,strlen($configId))==$configId) { if ($configData[EDIP_CONFIG_REFRESHMETHOD]==EDIP_REFRESHMETHOD_EVENT or $configData[EDIP_CONFIG_REFRESHMETHOD]==EDIP_REFRESHMETHOD_BOTH) { $result = IPS_SemaphoreEnter($configId, 0); if (!$result) { IPSLogger_Trc(__file__, "Refresh is already in Process - ignore ..."); return; } IPSLogger_Trc(__file__, "Refresh EDIP by Event=$eventName"); IPS_Sleep(1000); IPS_SemaphoreLeave($configId); $instanceClass = $configData[EDIP_CONFIG_CLASSNAME]; $instanceId = IPS_GetObjectIDByIdent($configId, EDIP_ID_PROGRAM); include_once $instanceClass.'.class.php'; $edip = new $instanceClass($instanceId); $edip->RefreshDisplay();
public function SendMsg(string $Text, integer $Type, integer $Timeout) { if ($this->GetPowerState() == 1) { if (IPS_SemaphoreEnter("Enigma2BY_SendMsg", 20000)) { $IP = $this->ReadPropertyString("Enigma2IP"); $WebPort = $this->ReadPropertyInteger("Enigma2WebPort"); $Text = urlencode(trim($Text)); $Text = str_replace('%A7', '%0A', $Text); $url = "http://" . $IP . ":" . $WebPort . "/web/message?text=" . $Text . "&type=" . $Type . "&timeout=" . $Timeout; $xml = @simplexml_load_file($url); $result = $this->ResultAuswerten($xml->e2state); if ($Type == 0) { $this->SendKey("ArrowDown", "short"); IPS_Sleep($Timeout * 1000 + 1000); $xml = @simplexml_load_file("http://" . $IP . ":" . $WebPort . "/web/messageanswer?getanswer=now"); if (trim($xml->e2statetext) == "Answer is NO!" or trim($xml->e2statetext) == "Antwort lautet NEIN!") { $AntwortINT = 0; } elseif (trim($xml->e2statetext) == "Answer is YES!" or trim($xml->e2statetext) == "Antwort lautet JA!") { $AntwortINT = 1; } elseif (trim($xml->e2statetext) == "No answer in time" or trim($xml->e2statetext) == "Keine rechtzeitige Antwort") { $AntwortINT = 2; if ($this->DistroCheck() == true) { $this->SendKey("Exit", "short"); } else { $this->SendKey("OK", "short"); } } $this->SetValueInteger("FrageAntwortVAR", $AntwortINT); IPS_SemaphoreLeave("Enigma2BY_SendMsg"); return $AntwortINT; } IPS_SemaphoreLeave("Enigma2BY_SendMsg"); return $result; } else { return false; } } else { return false; } }
/** * WriteSingleRegister * @param integer $UnitId * @param integer $Reference * @param integer $Data */ protected function WriteSingleRegister($UnitId, $Reference, $Data) { include_once __DIR__ . "/lib/ModbusMaster.php"; $URL = "http://" . $this->ReadPropertyString("IPAddress"); //$headers = @get_headers($URL); if (!Sys_Ping($this->ReadPropertyString("IPAddress"), 1000)) { $this->SetStatus(201); trigger_error("Invalid IP-Address", E_USER_ERROR); exit; } $this->SetStatus(102); if ($this->ReadPropertyInteger("GatewayMode") === 0) { $modbus = new ModbusMasterTcp($this->ReadPropertyString("IPAddress")); } else { $modbus = new ModbusMasterUdp($this->ReadPropertyString("IPAddress")); } //FC 6 try { if (IPS_SemaphoreEnter("ModbusMaster", 1000)) { $this->Log("WriteSingleRegister({$UnitId}|{$Reference}|{$Data})"); $modbus->writeSingleRegister($UnitId, $Reference, array($Data), array("INT")); IPS_SemaphoreLeave("ModbusMaster"); } } catch (Exception $e) { $this->SetStatus(200); trigger_error("ModbusMaster: " . $e->getMessage() . "!", E_USER_ERROR); exit; } }
/** * Enter/Lock semaphore * @param $resource * @return bool */ protected function SemEnter($resource) { for ($i = 0; $i < 100; $i++) { if (IPS_SemaphoreEnter($this->name . "-" . $resource, 1)) { return true; } else { IPS_Sleep(mt_rand(1, 3)); } } return false; }
* @version * Version 2.50.1, 31.01.2012<br/> * * Script zur Anbindung des NetPlayers. Dieses Script ist in der Entertainment Konfiguration * Entertainment_Configuration.ips.php als Empfangs Script für den NetPlayer hinterlegt * und wird immer aufgerufen sobald sich die spezifizierte Variable des NetPlayers ändert. * * Anbindung des NetPlayers * */ include_once "Entertainment.inc.php"; IPSUtils_Include ("NetPlayer.inc.php", "IPSLibrary::app::modules::NetPlayer"); IPS_SemaphoreEnter('NetPlayer', 1000); if($IPS_SENDER == "Variable") { $variableName = IPS_GetName($IPS_VARIABLE); switch ($variableName) { case 'Power': if ($IPS_VALUE) { Entertainment_ReceiveData(array(c_Comm_NetPlayer, 'netplayer', 'poweron'), c_MessageType_Info); } else { Entertainment_ReceiveData(array(c_Comm_NetPlayer, 'netplayer', 'poweroff'), c_MessageType_Info); } break; case 'RemoteControl': $ControlId = get_ControlIdByDeviceName(c_Device_NetPlayer, c_Control_RemoteSourceType); if (GetValue(NP_ID_CONTROLTYPE) <> GetValue($ControlId)) { IPSLogger_Com(__file__, "Receive RemoteControlType ".GetValue(NP_ID_CONTROLTYPE)." for NetPlayer");