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;
	}
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
	 * 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();
Esempio n. 4
0
 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;
     }
 }
Esempio n. 5
0
 /**
  * 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");