IPSComponentSwitch KMTronic Webrelay 8

Hallo zusammen,

ich hab mal eine Switch Komponente für das KMTronic Webrelay 8 zusammengekleistert.
KMTronic LAN Ethernet IP 8 channels WEB Relay board

Vielleicht kann es ja jemand gebrauchen.

Nicht schön aber selten… sagt man bei uns in Schwaben. :slight_smile:
Viele Grüße
Chris

<?
	/**@addtogroup ipscomponent
	 * @{
	 *
 	 *
	 * @file          IPSComponentSwitch_KMTronicWebRelay8.class.php
	 * @author        Christian Lechner
	 *
	 *
	 */

   /**
    * @class IPSComponentSwitch_KMTronicWebReplay8
    *
    * Definiert ein IPSComponentSwitch_KMTronicWebReplay8 Object, das ein IPSComponentSwitch Object für das KMTronic WebRelay 8 implementiert.
    *
    * @author Christian Lechner
    * @version
    * Version x.xx.x, 12.12.2015<br/>
    */

	IPSUtils_Include ('IPSComponentSwitch.class.php', 'IPSLibrary::app::core::IPSComponent::IPSComponentSwitch');

	class IPSComponentSwitch_KMTronicWebRelay8 extends IPSComponentSwitch {
		
		private $IPAddress;
		private $Relais;

		/**
		 * @public
		 *
		 * Initialisierung eines IPSComponentSwitch_KMTronicWebRelay8 Objektes
		 *
		 * @param string $IPAddress IP Adresse des KMTronic
		 * @param integer $Relay welches Relais geschalten werden soll
		 * Username und Passwort sind derzeit hardcoded.
		 */
		public function __construct($IPAddress, $Relais) {
			$this->IPAddress     = $IPAddress;
			$this->Relais = $Relais;
		}

		/**
		 * @public
		 *
		 * Function um Events zu behandeln, diese Funktion wird vom IPSMessageHandler aufgerufen, um ein aufgetretenes Event
		 * an das entsprechende Module zu leiten.
		 *
		 * @param integer $variable ID der auslösenden Variable
		 * @param string $value Wert der Variable
		 * @param IPSModuleSwitch $module Module Object an das das aufgetretene Event weitergeleitet werden soll
		 */
		public function HandleEvent($variable, $value, IPSModuleSwitch $module){
			$module->SyncState($value, $this);
		}

		/**
		 * @public
		 *
		 * Funktion liefert String IPSComponent Constructor String.
		 * String kann dazu benützt werden, das Object mit der IPSComponent::CreateObjectByParams
		 * wieder neu zu erzeugen.
		 *
		 * @return string Parameter String des IPSComponent Object
		 */
		public function GetComponentParams() {
			return get_class($this).','.$this->IPAddress.','.$this->Relais;
		}
		/**
        *  @brief Sends command to the KMTronic WebRelay8 using HTTP
        *
        *  @param [in] $IP IP Adresse des KMTronic WebRelays
        *  @param [in] $rel Relais Kanal des KMTronic WebRelays
        *  @param [in] $val Value
        *  @return Gibt den Status des Relais zurück
        *
        */
        private function KMTronic_SendCommand($IP, $rel, $val) {
             IPS_LogMessage("IPAdresse", $IP);
             IPS_LogMessage("Relais", $rel);
             IPS_LogMessage("State", $val);
				$default_opts = array(
				  'http'=>array(
				    'header'=>"Authorization: Basic ".base64_encode("admin:admin"),
				    'ignore_errors'=>True,
				  )
				);

				$cred = stream_context_set_default($default_opts);
				 //$cred = stream_context_create(array('http' => array('header'  => "Authorization: Basic ".base64_encode("admin:admin"))));
			 If ($val) {
				$KMTronicReturn = file_get_contents("http://".$IP."/FF0".$rel."01",false,$cred);
				}
			 Else {
			   $KMTronicReturn = file_get_contents("http://".$IP."/FF0".$rel."00",false,$cred);
			 }
			$site = file_get_contents("http://".$IP."/relays.cgi",false,$cred);
			$status1 = explode("Status:",$site);
			$status2 = explode("Relay1:",$status1[1]);
			$status3 =  explode(" ",str_replace("  ", " ", trim($status2[0])));
			if ($status3[$rel]) {
				Return TRUE;
			}
			else {
				Return FALSE;
			}
        }
		/**
		 * @public
		 *
		 * Zustand Setzen
		 *
		 * @param boolean $value Wert für Schalter
		 */
		public function SetState($value, $onTime = false) {
    		$this->KMTronic_SendCommand($this->IPAddress, $this->Relais, $value);
		}

		/**
		 * @public
		 *
		 * Liefert aktuellen Zustand
		 *
		 * @return boolean aktueller Schaltzustand
		 */
		public function GetState() {
			$cred = stream_context_create(array('http' => array('header'  => "Authorization: Basic ".base64_encode("admin:admin"))));
			$site = file_get_contents("http://".$IP."/relays.cgi",false,$cred);
			$status1 = explode("Status:",$site);
			$status2 = explode("Relay1:",$status1[1]);
			$status3 =  explode(" ",str_replace("  ", " ", trim($status2[0])));
			if ($status3[$this->Relais]) {
					Return TRUE;
				}
			else {
					Return FALSE;
			}
		}

	}

	/** @}*/
?>