Vorlagen für Sonos Visualisierung mit IP-Symcon in NEO

Haussteuerung mittels mediola

Moderator: Co-Administratoren

Fonzo
Beiträge: 6744
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 486 Mal

Vorlagen für Sonos Visualisierung mit IP-Symcon in NEO

Beitrag von Fonzo » 07.03.2016, 02:18

Um mit NEO Variablen in IP-Symcon togglen zu können werden Scripte benötigt die dann von NEO aufgerufen werden.

Folgendes Script erstellt für die Visualisierung von Sonos in NEO automatisch Scripte.

Grundvoraussetzung:
- IP Symcon in Version 4
- SonosSymcon PHP Modul für IP-Symcon 4 installiert
https://github.com/tkugelberg/SymconSonos
- Für die Visualisierung in NEO das IP-Symcon Plugin von Mediola für NEO

Bevor das Script ausgeführt wird ist eine Kategorie in IP-Symcon anzulegen unter der dann die Scripte angelegt werden. Die ObjectID der Kategorie ich am Anfang des Scriptes zu ergänzen. dann einfach Inhalt in IP-Symcon kopieren und ausführen.

Code: Alles auswählen

<?
//Konfig
// Angabe des ObjectID der Kategorie unter der die Scripte und Variablen angelegt werden sollen
$KatID = 13456 /*[Geräte\Heimkino\Audio\Sonos\Sonos Erweiterte Variablen]*/;

//Variable für Slideranzeige des Fortschritts anlegen true für setzten der Variable / false wenn diese nicht gesetzt werden soll
$visiblePosition = true;

//-----------------------
$InstanzenListe = IPS_GetInstanceListByModuleID("{F6F3A773-F685-4FD2-805E-83FD99407EE8}");
$InstanzCount = 0;

foreach ($InstanzenListe as $InstanzID) {
   createMuteScript($InstanzID, $KatID);
   createLoudnessScript($InstanzID, $KatID);
   createCrossfadeScript($InstanzID, $KatID);
   createPlayPauseScript($InstanzID, $KatID);
   createIncreaseVolScript($InstanzID, $KatID);
   createDecreaseVolScript($InstanzID, $KatID);
   createPositionVar($InstanzID, $KatID);
   if ($visiblePosition == True)
   {
   
	}
	 $InstanzCount++;
    $Childs[] = IPS_GetChildrenIDs($InstanzID);
}

$Variablen = flatten($Childs);
$Variablen = count(array_unique($Variablen));

echo "Es wurden $InstanzCount Sonos Instanzen gefunden!\n";
echo "Es wurden $Variablen Variablen in den Sonos Instanzen gefunden!\n";


function flatten(array $array) {
    $return = array();
    array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
    return $return;
}


function createMuteScript($InstanzID, $KatID)
{
   $name = IPS_GetName($InstanzID)." Mute Toggle";
 	$ScriptID = IPS_CreateScript(0);
	IPS_SetName($ScriptID, $name);
	IPS_SetParent($ScriptID, $KatID);


$content = '
<?
$InstanceID = '.$InstanzID.';
$MuteID = @IPS_GetVariableIDByName("Mute", $InstanceID);
$status = GetValueFormatted($MuteID); // Status des Geräts auslesen
IPS_LogMessage( "'.$name.' Mute:" , "Mute $status ausführen" );
if ($status == "Off")// Befehl ausführen
	{
  	SNS_SetMute($InstanceID, true);
	}
elseif ($status == "On")// Befehl ausführen
	{
  	SNS_SetMute($InstanceID, false);
	}
?>';

	IPS_SetScriptContent($ScriptID, $content);

}

function createPlayPauseScript($InstanzID, $KatID)
{
   $name = IPS_GetName($InstanzID)." Play Pause Toggle";
 	$ScriptID = IPS_CreateScript(0);
	IPS_SetName($ScriptID, $name);
	IPS_SetParent($ScriptID, $KatID);


$content = '
<?
$InstanceID = '.$InstanzID.';
$StatusID = @IPS_GetVariableIDByName("Status", $InstanceID);
$status = GetValueFormatted($StatusID); // Status des Geräts auslesen
var_dump($status);
if ($status == "Stop" || $status == "Pause")// Play ausführen
	{
		SNS_Play($InstanceID);
		IPS_LogMessage( "'.$name.' Play /Pause Toggle:" , "Play ausführen" );
	}
elseif ($status == "Play")// Pause ausführen
	{
		SNS_Pause($InstanceID);
		IPS_LogMessage( "'.$name.' Play /Pause Toggle:" , "Pause ausführen" );
	}
?>';

	IPS_SetScriptContent($ScriptID, $content);

}

function createIncreaseVolScript($InstanzID, $KatID)
{
   $name = IPS_GetName($InstanzID)." Volume plus";
 	$ScriptID = IPS_CreateScript(0);
	IPS_SetName($ScriptID, $name);
	IPS_SetParent($ScriptID, $KatID);


$content = '
<?
$InstanceID = '.$InstanzID.';
$increment = 5; // Lautstärke jeweils um 5 erhöhen
$VolumeID = @IPS_GetVariableIDByName("Volume", $InstanceID);
$volume = GetValue($VolumeID); // Volume des Geräts auslesen
if ($volume == 100)// nichts tun
	{
		// Volume is max
	}
else // Volume erhöhen
	{
		SNS_ChangeVolume($InstanceID, $increment);
		$newvolume = $volume + $increment;
		IPS_LogMessage( "'.$name.'" , "Set Volume to ".$newvolume." %" );
	}
?>';

	IPS_SetScriptContent($ScriptID, $content);

}

function createDecreaseVolScript($InstanzID, $KatID)
{
   $name = IPS_GetName($InstanzID)." Volume minus";
 	$ScriptID = IPS_CreateScript(0);
	IPS_SetName($ScriptID, $name);
	IPS_SetParent($ScriptID, $KatID);


$content = '
<?
$InstanceID = '.$InstanzID.';
$increment = -5; // Lautstärke jeweils um 5 erniedrigen
$VolumeID = @IPS_GetVariableIDByName("Volume", $InstanceID);
$volume = GetValue($VolumeID); // Volume des Geräts auslesen
if ($volume == 0)// nichts tun
	{
		// Volume is min
	}
else // Volume erniedrigen
	{
		SNS_ChangeVolume($InstanceID, $increment);
		$newvolume = $volume - $increment;
		IPS_LogMessage( "'.$name.'" , "Set Volume to ".$newvolume." %" );
	}

?>';

	IPS_SetScriptContent($ScriptID, $content);

}

function createLoudnessScript($InstanzID, $KatID)
{
   $name = IPS_GetName($InstanzID)." Loudness Toggle";
 	$ScriptID = IPS_CreateScript(0);
	IPS_SetName($ScriptID, $name);
	IPS_SetParent($ScriptID, $KatID);


$content = '
<?
$$InstanceID = '.$InstanzID.';
$LoudnessID = @IPS_GetVariableIDByName("Loudness", $InstanceID);
$status = GetValueFormatted($LoudnessID); // Status des Geräts auslesen
IPS_LogMessage( "'.$name.' Mute:" , "Mute $status ausführen" );
if ($status == "Off")// Befehl ausführen
	{
  	SNS_SetLoudness($InstanceID, true);
	}
elseif ($status == "On")// Befehl ausführen
	{
  	SNS_SetLoudness($InstanceID, false);
	}
?>';

	IPS_SetScriptContent($ScriptID, $content);

}

function createCrossfadeScript($InstanzID, $KatID)
{
   $name = IPS_GetName($InstanzID)." Crossfade Toggle";
 	$ScriptID = IPS_CreateScript(0);
	IPS_SetName($ScriptID, $name);
	IPS_SetParent($ScriptID, $KatID);


$content = '
<?
$$InstanceID = '.$InstanzID.';
$CrossfadeID = @IPS_GetVariableIDByName("Crossfade", $InstanceID);
$status = GetValueFormatted($CrossfadeID); // Status des Geräts auslesen
IPS_LogMessage( "'.$name.' Mute:" , "Mute $status ausführen" );
if ($status == "Off")// Befehl ausführen
	{
  	SNS_SetCrossfade($InstanceID, true);
	}
elseif ($status == "On")// Befehl ausführen
	{
  	SNS_SetCrossfade($InstanceID, false);
	}
?>';

	IPS_SetScriptContent($ScriptID, $content);

}

function createPositionVar($InstanzID, $KatID)
{
	$Icon = "Move";
	$ProfilName = "SONOS.PositionP";
	$Name = IPS_GetName($InstanzID);
	RegisterProfileInteger($ProfilName, $Icon, "", " %", 0, 100, 1, 0);
	CreateProfileP( $Name, $ProfilName, $KatID);
}

function RegisterProfileInteger($Name, $Icon, $Prefix, $Suffix, $MinValue, $MaxValue, $StepSize, $Digits)
	{

        if(!IPS_VariableProfileExists($Name)) {
            IPS_CreateVariableProfile($Name, 1);
        } else {
            $profile = IPS_GetVariableProfile($Name);
            if($profile['ProfileType'] != 1)
            throw new Exception("Variable profile type does not match for profile ".$Name);
        }

        IPS_SetVariableProfileIcon($Name, $Icon);
        IPS_SetVariableProfileText($Name, $Prefix, $Suffix);
		IPS_SetVariableProfileDigits($Name, $Digits); //  Nachkommastellen
        IPS_SetVariableProfileValues($Name, $MinValue, $MaxValue, $StepSize);

    }

function CreateProfileP ($Name, $Profilname, $KatID)
{
$VarID_ProfileP = IPS_CreateVariable(1);
IPS_SetName($VarID_ProfileP, $Name." PositionP"); // Variable benennen
IPS_SetParent($VarID_ProfileP, $KatID); // Variable einsortieren unter dem Objekt mit der ID
IPS_SetVariableCustomProfile($VarID_ProfileP, $Profilname);
}
    

?>
Anschließend können dann die Scripte für einen Button in NEO aufgerufen werden um bei Mute, Loudness und Crossfade zu togglen.


Um ein Cover aus IP-Symcon von Sonos in NEO anzeigen zu können wird zur Zeit ein Webseitenelement benötigt. Dazu ist in IP-Symcon unterhalb von webfront/user der Ordner neo anzulegen und unterhalb des Ordners neo zwei neue Ordner js und css .

In den Unterordner js legen wir die datei reflex.js von
http://www.netzgesta.de/reflex/
ab.

Im Ordner css legen wir die Datei neowebelement.css mit dem folgenden Inhalt ab

neowebelement.css

Code: Alles auswählen

@charset "utf-8";
#webelementwrapper {
	position: relative;
}
.button .icon img {
	background-image: -webkit-linear-gradient(270deg,rgba(255,255,255,1.00) 0%,rgba(83,75,75,0.60) 100%);
	background-image: -moz-linear-gradient(270deg,rgba(255,255,255,1.00) 0%,rgba(83,75,75,0.60) 100%);
	background-image: -o-linear-gradient(270deg,rgba(255,255,255,1.00) 0%,rgba(83,75,75,0.60) 100%);
	background-image: linear-gradient(180deg,rgba(255,255,255,1.00) 0%,rgba(83,75,75,0.60) 100%);
	top: 160px;
	left: 141px;
	position: absolute;
	border-radius: 64px;
	-webkit-box-shadow: 2px 2px 3px rgba(46,44,44,1.00);
	box-shadow: 2px 2px 3px rgba(46,44,44,1.00);
}
body {
	background-color: transparent;
}

Im Ordner neo legen wir die Datei zum Abrufen und anzeigen des Covers innerhalb eines Webseitenelements in NEO ab.

SonosCover.php

Code: Alles auswählen

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Sonos Bad</title>
<script type="text/javascript" src="js/reflex.js"></script><script type="text/javascript" src="js/moment-with-locales.min.js"></script>
<link href="css/neowebelement.css" rel="stylesheet" type="text/css">
</head>
<body marginheight="0" marginwidth="0">
<?php

//Prüft ob POST oder GET

//POST
if (isset($_POST["objektid"]))
	{
		// ObjektID auslesen
		$objektid  = $_POST["objektid"];
		if(isset($_POST["size"]))
		{
		$size = $_POST["size"];
		}
		else
		{
		$size = 340;
		}
		getdataips($objektid, $size);						
	}
//GET
elseif (isset($_GET["objektid"]))
	{
		// ObjektID auslesen
		
		$objektid = $_GET["objektid"];
		
		if(isset($_GET["size"]))
		{
		$size = $_GET["size"];
		}
		else
		{
		$size = 340;
		}
		getdataips($objektid, $size);
	}

//kein GET oder POST
else 
	{
		echo "Es wurden keine Daten empfangen";
	}


function getdataips($objektid, $size)
	{
			
		// HTMLBox ausgeben
		$sonoscover = GetValue($objektid);
		if($sonoscover == "")
		{
			$img = imagecreatetruecolor($size, $size);
			imagesavealpha($img, true);
			$color = imagecolorallocatealpha($img, 0, 0, 0, 127);
			imagefill($img, 0, 0, $color);
			imagepng($img, 'transparentcover.png');
			echo '<a href="sonos://"><img src="transparentcover.png" width="'.$size.'" height="'.$size.'" border="0" alt="Cover Sonos"></a>';
		}
		else
		{
			echo '<a href="sonos://"><img class="reflex" src="'.$sonoscover.'" width="'.$size.'" height="'.$size.'" border="0" alt="Cover Sonos"></a>';
		}	
	}

	
?>

</body>

</html>
Die Datei Sonoscover.php rufen wird dann in NEO auf mit
http:// [IP-Symcon IP]:3777/user/neo/SonosCover.php?objektid=12345
Wobei 12345 durch die 5 stellige ObjektID der Variable CoverURL der Sonos Instanz in IP-Symcon ersetzt wird.

IP-Symcon IP [IP-Symcon IP] IP Adresse vom IP-Symcon Server

Wenn die Größe des Covers angepasst werden soll kann noch der Parameter size aufgerufen werden. Bei einer Größe von 200x200 wäre der Aufruf der Seite:
http:// [IP-Symcon IP]:3777/user/neo/SonosCover.php?objektid=12345&size=200
Zuletzt geändert von Fonzo am 20.10.2016, 23:27, insgesamt 5-mal geändert.

CarnivoreD
Beiträge: 82
Registriert: 29.10.2015, 09:28

Re: Vorlagen für Sonos Visualisierung mit IP-Symcon in NEO

Beitrag von CarnivoreD » 18.10.2016, 09:06

Hallo Fonzo,

zunächst vielen Dank für die tolle Anleitung, die auch für einen Laien wie mich, der bei IPS echt Schwierigkeiten hat, wenn es um individuelle Dinge geht, bestens geeignet ist.

Ich bin gerade erst auf IP Symcon "umgestiegen", bisher habe ich meine Sonos-Player über HM-6-fach-Taster mit dieser Methode

http://homematic-forum.de/forum/viewtop ... &start=250

gesteuert, so konnte ich über die kurzen und langen Tastendrücke jeweils 12 Funktionen ansteuern und auch einfach Skripte auf eine Taste legen, die etwa die Playlist leert, um dann nur die Lieder aus einer vorgegebenen Playlist abzuspielen.

Nun soll der Weg über IPS führen.

Bislang hatte ich die Möglichkeit, Play/Pause mit einer einzelnen Taste zu toggeln und die Lautstärke in individuell festlegbaren Schritten über eine Taste zu erhöhen und über eine andere Taste zu reduzieren.

Funktioniert das über IPS auch? Ich habe mir Dein Toggle-Skript für Play/Pause angesehen und angefangen, es zu ergänzen, bin aber leider bereits daran kläglich gescheitert.

Wie ich das ganze dann auf die Tasten des HM-Tasters bekomme und dann ggf. auch mehrere Schritte (wie etwa Playlist leeren und dann die Lieder aus einer vorgegebenen Playlist abspielen), muss ich mir danach anschauen...

Vielen Dank vorab für Deine Hilfe

C.

Fonzo
Beiträge: 6744
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 486 Mal

Re: Vorlagen für Sonos Visualisierung mit IP-Symcon in NEO

Beitrag von Fonzo » 18.10.2016, 10:00

CarnivoreD hat geschrieben: zunächst vielen Dank für die tolle Anleitung, die auch für einen Laien wie mich, der bei IPS echt Schwierigkeiten hat, wenn es um individuelle Dinge geht, bestens geeignet ist.
Das wird schon man muss sich erst ein wenig in IP-Symcon einarbeiten dann ist aber vieles einfacher zu lösen.
CarnivoreD hat geschrieben: Bislang hatte ich die Möglichkeit, Play/Pause mit einer einzelnen Taste zu toggeln und die Lautstärke in individuell festlegbaren Schritten über eine Taste zu erhöhen und über eine andere Taste zu reduzieren.

Funktioniert das über IPS auch? Ich habe mir Dein Toggle-Skript für Play/Pause angesehen und angefangen, es zu ergänzen, bin aber leider bereits daran kläglich gescheitert.
An was bist Du denn gescheitert? Hier das Script:

Code: Alles auswählen

$InstanceID = 28677 /*[Geräte\Heimkino\Audio\Sonos\Sonos Bad]*/;
$StatusID = @IPS_GetVariableIDByName("Status", $InstanceID);
$status = GetValueFormatted($StatusID); // Status des Geräts auslesen
if ($status == "Stop" || $status == "Pause")// Play ausführen
	{
		SNS_Play($InstanceID);
		IPS_LogMessage( "Sonos Bad Play /Pause Toggle:" , "Play ausführen" );
	}
elseif ($status == "Play")// Pause ausführen
	{
		SNS_Pause($InstanceID);
		IPS_LogMessage( "Sonos Bad Play /Pause Toggle:" , "Pause ausführen" );
	}

Die Funktionen sind alle unter
https://github.com/tkugelberg/SymconSonos#6-funktionen
dokumentiert.

In NEO würde ich einen Slider zur Lautstärkeregelung benutzten. Wenn Du das mit der Fernbedienung machen willst musst Du ein Skript für lauter und leiser anlegen und dies dann durch den Tastendruck der Fernbedienung in IP-Symcon triggern.

Lauter:

Code: Alles auswählen

$InstanceID = 28677 /*[Geräte\Heimkino\Audio\Sonos\Sonos Bad]*/;
$increment = 5; // Lautstärke jeweils um 5 erhöhen
$VolumeID = @IPS_GetVariableIDByName("Volume", $InstanceID);
$volume = GetValue($VolumeID); // Volume des Geräts auslesen
if ($volume == 100)// nichts tun
	{
		// Volume is max
	}
else // Volume erhöhen
	{
		SNS_ChangeVolume($InstanceID, $increment);
		$newvolume = $volume + $increment;
		IPS_LogMessage( "Sonos Bad" , "Set Volume to ".$newvolume." %" );
	}
Leiser:

Code: Alles auswählen

$InstanceID = 28677 /*[Geräte\Heimkino\Audio\Sonos\Sonos Bad]*/;
$increment = -5; // Lautstärke jeweils um 5 erniedrigen
$VolumeID = @IPS_GetVariableIDByName("Volume", $InstanceID);
$volume = GetValue($VolumeID); // Volume des Geräts auslesen
if ($volume == 0)// nichts tun
	{
		// Volume is min
	}
else // Volume erniedrigen
	{
		SNS_ChangeVolume($InstanceID, $increment);
		$newvolume = $volume - $increment;
		IPS_LogMessage( "Sonos Bad" , "Set Volume to ".$newvolume." %" );
	}

CarnivoreD
Beiträge: 82
Registriert: 29.10.2015, 09:28

Re: Vorlagen für Sonos Visualisierung mit IP-Symcon in NEO

Beitrag von CarnivoreD » 18.10.2016, 14:28

Super, Fonzo, vielen Dank!!!

Ich hatte anstelle der "==" immer nur "=" und nur Pause/Play und nicht auch Stop/Play, was natürlich nur die halbe Miete war :?

Werde es nach Möglichkeit heute Abend einmal ausprobieren...

Fonzo
Beiträge: 6744
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 486 Mal

Re: Vorlagen für Sonos Visualisierung mit IP-Symcon in NEO

Beitrag von Fonzo » 18.10.2016, 15:18

CarnivoreD hat geschrieben: Ich hatte anstelle der "==" immer nur "=" und nur Pause/Play und nicht auch Stop/Play, was natürlich nur die halbe Miete war :?
Mit = setzt Du in PHP die Variable auf den Wert, Du must also == oder === verwenden, je nachdem was Du brauchst.
Siehe auch
http://php.net/manual/de/language.opera ... arison.php

CarnivoreD
Beiträge: 82
Registriert: 29.10.2015, 09:28

Re: Vorlagen für Sonos Visualisierung mit IP-Symcon in NEO

Beitrag von CarnivoreD » 18.10.2016, 21:04

Prima, klappt alles bestens...

Vielen Dank noch einmal, Fonzo!

CarnivoreD
Beiträge: 82
Registriert: 29.10.2015, 09:28

Re: Vorlagen für Sonos Visualisierung mit IP-Symcon in NEO

Beitrag von CarnivoreD » 20.10.2016, 14:15

Hallo Fonzo,

ich wollte nun noch die Cover-Visualisierung umsetzen. Dazu habe ich folgende Frage:
Im Ordner neo legen wir die Datei zum Abrufen und anzeigen des Covers innerhalb eines Webseitenelements in NEO ab.

SonosCover.php

...

ObjektID [OBJEKTID] 5 stellige Zahl der Variable CoverURL der Sonos Instanz in IP-Symcon.
Jetzt ist jedem Sonos-Player eine eigene CoverURL-Variable mit unterschiedlicher Objekt-ID zugeordnet. Die Daten zum Cover werden über die JSON-API ausgelesen. Funktioniert das auch, wenn ich für jeden Player eine Cover.php erstelle, die dann unterschiedliche Namen haben? Oder wie ist das richtige Vorgehen?

Wieder einmal Danke für Deine Hilfe...

Fonzo
Beiträge: 6744
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 486 Mal

Re: Vorlagen für Sonos Visualisierung mit IP-Symcon in NEO

Beitrag von Fonzo » 20.10.2016, 19:48

CarnivoreD hat geschrieben: Jetzt ist jedem Sonos-Player eine eigene CoverURL-Variable mit unterschiedlicher Objekt-ID zugeordnet. Die Daten zum Cover werden über die JSON-API ausgelesen. Funktioniert das auch, wenn ich für jeden Player eine Cover.php erstelle, die dann unterschiedliche Namen haben? Oder wie ist das richtige Vorgehen?
Ich hatte das bei mir mal geändert weil es mir zu umständlich war mehrere PHP Dateien zu haben, nur hier im Thread hatte ich das nicht angepasst, das habe ich jetzt nachgeholt.

Kopiere Dir nochmals den Code oben von der SonosCover.php, der hat sich nämlich jetzt geändert. User und Passwort musst Du keines eintragen, das habe ich rausgeschmissen. Dies wäre nur relevant wenn die Seite irgendwo liegen würde, da Sie aber im User Ordner von IP-Symcon liegt geht das auch ohne.

Das ObjektID wird nun auch nicht mehr angepasst. Stattdessen nimmst Du einfach ein und die selbe Seite und übergibst an diese einfach die ObjektID der CoverURL Variable die Du auslesen willst.

Wenn die ObjektID der CoverURL Variable 22222 lautet wäre dann der Aufruf
http:// [IP-Symcon IP]:3777/user/neo/SonosCover.php?objektid=22222

(exakte Gross- und Kleinschreibung sind zu beachten)

Fonzo
Beiträge: 6744
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 486 Mal

Re: Vorlagen für Sonos Visualisierung mit IP-Symcon in NEO

Beitrag von Fonzo » 20.10.2016, 19:59

Beim Radio Hören wird momentan die Variable CoverURL nicht aktualisierst. Dies kannst Du aber selbst beheben indem Du wie https://www.symcon.de/forum/threads/275 ... post302873
beschrieben mit einem Skript die CoverURL ausliest. Dann kannst Du bei Variablenaktualisierung von der Variable Details das Skript ausführen lassen und ergänzt noch das die Variable CoverURL beschrieben wird.

CarnivoreD
Beiträge: 82
Registriert: 29.10.2015, 09:28

Re: Vorlagen für Sonos Visualisierung mit IP-Symcon in NEO

Beitrag von CarnivoreD » 20.10.2016, 20:49

Super Fonzo, vielen Dank - klappt wie immer bestens... :D

Noch zwei (hoffentlich) letzte Fragen:

Welche Zeilen in der php sind denn für die Größe des Webelements verantwortlich und wie bekomme ich das Cover quadratisch (wie in Sonos selbst - im Moment ist es ja etwas schräg)?

In der Neo-Vorschau flackert das Cover im Intervall der Seitenaktualisierung - bekommt man das weg?

Viele Grüße!

Antworten

Zurück zu „mediola“