Wer eine IP-Symcon Entwicklungsumgebung betreibt (also eine Kopie seines normalen IP-Symcon Systems), der wird immer wieder mal auf das Problem stoßen, dass er eine modifizierte View zurück auf sein Produktionssystem bringen muss oder umgekehrt.

Bei modifizierten Views kann man das noch relativ einfach durch kopieren des Files im Media Verzeichnis machen, bei neuen Views ist das schon um einiges komplizierten, da die View am Remote Rechner ja noch gar nicht vorhanden ist.

Anbei ein Script, mit dem man alle Views auf einen Remote Rechner synchronisieren kann:

Achtung:
Das Skript ersetzt alle Views auf dem Remote Server mit dem Inhalt des aufrufenden Server. Fehlende Views werden auf dem Remote Server neu angelegt! Es wird empfohlen vor dem Ausführen des Skripts ein Backup des Remote Servers zu machen.

Voraussetzung:
Das IP-Symcon auf dem Remote Rechner muss ein Clone des bestehenden Systems sein, da ansonsten die IDs in den Views nicht zusammenpassen (eine IP-Symcon Development Umgebung).

<?
	/**
	 * @file          IPSView_SyncViewsToRemoteServer.php
	 * @author        brownson
	 * @version
	 *   Version 1.0, 2014-08-16 brownson: Initiale Version<br/>
	 *
	 * Skript um alle Views auf einen Remote Server zu synchronisieren
	 *
	 * Konfiguration Einstellungen:
	 *   + $remoteAddress - spezifiziert die Adresse der IP-Symcon Remote Json API
	 *                      Beispiel: http://name@domain.de:pwd@192.168.0.1:82/api/
	 *
	 */

	// Konfiguration
	$remoteAddress = "http://<<IPSymconLizenzName>>:<<MeinPasswort>>@<<IPAdresse>>:<<Port>>/api/";

	// -------------------------------------------------------------------------

	$rpc = new JSONRPC($remoteAddress);
	$mediaList = IPS_GetMediaList();
	foreach ($mediaList as $mediaID) {
		echo "Process Media with ID=".$mediaID.PHP_EOL;
		$mediaName = IPS_GetName($mediaID);
		$nameArray = explode('.', $mediaName);
		if (count($nameArray) >= 2 and $nameArray[count($nameArray)-1]=='ipsView') {
			echo "Found View with ID=".$mediaID.', Name='.$mediaName.PHP_EOL;
			$mediaContent = IPS_GetMediaContent($mediaID);
			$media        = IPS_GetMedia($mediaID);
			$mediaFile    = $media['MediaFile'];
			try {
				echo "Found View with ID=".$mediaID.', Name='.$mediaName.PHP_EOL;
				$rpcMediaID = @$rpc->IPS_GetMediaIDByName($mediaName, 0);
			} catch (Exception $e) {
				$rpcMediaID = 0;
			}
			if ($rpcMediaID==0) {
				$rpcMediaID = $rpc->IPS_CreateMedia(0);
				echo "Created new Media wiht ID=".$rpcMediaID.' on Remote HOST'.PHP_EOL;
			}
			echo "Sync IPSView MediaData wiht ID=".$rpcMediaID.' on Remote HOST'.PHP_EOL;
			$rpc->IPS_SetName($rpcMediaID, $mediaName);
			$rpc->IPS_SetMediaFile($rpcMediaID, $mediaFile, false);
			$rpc->IPS_SetMediaContent($rpcMediaID, $mediaContent);
		}
	}

	// -------------------------------------------------------------------------

?>