Medion Life P85025 / MD 86955 mit IP Symcon steuern

180ms…das ist grenzwertig.

Bekommst du einen eindeutigen Fehler zurück, wenn die SID nicht mehr gültig ist? Wenn ja, dann würde ich z.B. einmal Nachts eine Anmeldung machen und die SID in einer Variable zwischenspeichern. Dann so lange die SID verwenden, bis der Fehler kommt, diesen dann abfangen und automatisch eine neue SID holen, wieder in die Variable speichern und dann den Befehl mit der neuen SID wiederholen. Weißte wie ich meine? :slight_smile:

Hier in diesem Thread kannst du dir noch einiges an Infos „klauen“ bzgl. Variablen über ein Skript generieren lassen, Events, Timer, Uhrzeiten, und und und :slight_smile:
IP-Symcon - Wie kann ich… 2.0

Grüße,
Chris

Habe das versucht mit Funktionen umzusetzen, grundsätzlich geht das auch aber macht für mich irgendwie wenig sinn.
So habe ich nun eben einen Funktionssammler dem alle Variablen hinterlegt sind, und viele Scripte für die Aufrufe der Funktionen.
Bisher hatte ich die Funktion gleich in dem jeweiligen Skript.

Oder mache ich da was falsch und die Aufrufe können auch zusammengefasst in einem Skript sein? Aber woher weiß ich dann welche Funktion ausgeführt werden soll, dazu benötige ich doch wieder einzelne Skripts, welche durch ein Ereignis ausgeführt werden, oder ?!?:confused:

Abend!

Jedem möglichen Befehl/Kommando in eine Funktion zu stecken hat mehrere Vorteile, was du noch ganz von alleine merken wirst :slight_smile:

Aber mal ein Beispiel:
Du hast ein Medion-Skript in dem alle Funktionen stecken. Dieses kann wie gesagt mit „include“ eingebunden werden.

Dann hast du ein weiteres Skript, welches sich um die manuellen Kommandos (WebFront, App, …) kümmert. In diesem Skript steht ganz oben das include für dein Medion-Skript mit den Funktionen.
Dann wählst du z.B. per Slider im WebFront die Lautstärke, dann wird diese in eine Integer Variable geschrieben. Diese Variable wird per Ereignis auf Änderung überwacht und startet das erwähnte „Kommando-Skript“.
In diesem Skript fragst du dann z.B. ab „if ($_IPS[‚EVENT‘] == $IDvomEVENTfuerLautstaerke) {“ usw. und in dieses IF dann jeweils den Befehl „Medion_SetVolume($_IPS[‚VALUE‘]);“, um beim Beispiel mit der Lautstärke zu bleiben.

Dieser Weg hat den Vorteil, dass du jetzt nicht nur die Steuerung über WebFront übersichtlich zusammengefasst hast, sondern zusätzlich noch in beliebige andere Skripte (später z.B. für Sprachausgabe), nur einen include vom Medion-Skript im jeweiligen Skript machen musst und schon kannst du auf deine Funktion deines Medion zurückgreifen.

Edit: Ein weiterer Vorteile wäre z.B., wenn sich irgendwann durch ein FirmwareUpdate eine der URLs ändert oder ein Befehl, dann muss man das nur an einer Stelle ändern und schon funktionieren alle Skripte/Szenen/Sprachausgaben/… wieder :wink:

Ich hoffe du kannst mir folgen :slight_smile: Das ist jetzt auch nur ein möglicher Weg und nicht DER Weg :slight_smile: Da hat sicher jeder so seine Vorlieben :slight_smile:

Grüße,
Chris

Guten Abend,
du hast mich überzeugt, versuche das dann doch nochmal mit den Funktionen.
Habe das wie von dir vorgeschlagen versucht, doch bei der Ersten Funktion schon ein Problem. Ich bekomme das Gerät EIN geschalten aber nicht AUS geschalten.
Siehst jemand einen Fehler?

DANKE

Moin!

Mit $_IPS[‚VALUE‘] übergebst du den Wert, der in der Variable steht.

Ich denke mal, dass der Befehl für Power-AUS einfach etwas anderes in VALUE stehen haben müsste, als es aktuell der Fall ist!?

Bau mal im Skript „MD_Functions“ in zwischen Zeile 7 und 8 das hier ein:

IPS_LogMessage("MEDION-TEST", "Wert in value = $value");

Und dann bekommst du beim Ausführen eine passende Ausgabe in der IPS-Console im „Meldungen-Fenster“, dann weißt du ob der Wert richtig ist für Power-Aus, oder nicht…

>> Und bitte von Skripten keine Screenshots mehr! Skripte einfach hier rein kopieren und mit dem PHP-Tag „umschließen“ :wink: Sieht dann aus wie der PHP Code hier im Post :slight_smile: So muss man alles neu tippen und kann nicht einfach dein Skript kopieren und bearbeiten…

Grüße,
Chris

Guten Abend,

danke für den Hinweis mit LogMessage
Das Problem lag an dem Befehl $_IPS[‚Event‘], das muss $_IPS[‚VARIABLE‘] verwendet werden.

So Funktioniert der Code nun.

<?
include ('MD_functions.ips.php');
$IP = GetValue(@IPS_GetVariableIDByName("strIP", $IPS_SELF));    // IP vom Medion Gerät
$PIN = GetValue(@IPS_GetVariableIDByName("strPIN", $IPS_SELF));  // PIN vom Medion Gerät
$SID = GetValue(@IPS_GetVariableIDByName("strSID", $IPS_SELF));  // SID vom Medion Gerät

$PowerEventID = @IPS_GetVariableIDByName("bPower",$IPS_SELF);

// Medion Ein-/Ausschalten
if ($_IPS['VARIABLE'] == $PowerEventID)
{
setPower($IP, $PIN, $SID, $_IPS['VALUE']);
IPS_LogMessage("MEDION-TEST", "Command Ausschalten wurde aufgerufen");
}
?>

Grüße Christoph

Abend :slight_smile:

Dann hast du ja jetzt eine gute Basis, auf der du weitere Funktionen in dein Medion-Funktionen-Skript einbauen kannst und diese kannst du dann je nach Bedarf überall einsetzen :slight_smile: Ob du dann auf Events oder Links schaust und darüber dann irgendwelche Aktionen ausführst, das bleibt dir überlassen :slight_smile:

Wenn du noch ein paar Sachen eingebaut hast, dann poste mal einen Zwischenstand und ich schau gerne nochmal drüber. Aber bisher siehts gut aus :cool:

Grüße,
Chris

OK, dann zeige ich euch hier mal die Scripte.

Objektbaum

MD Function:

<?
// SchaltFunktionen
//Medion Ein-/Ausschalten
function setPower($IP, $PIN, $SID, $value)
{
$url = "http://$IP/fsapi/SET/netRemote.sys.Power?pin=$PIN&sid=$SID&value=$value";
$result = Sys_GetURLContent($url);
}

//Medion Lautstärke ändern
function setVolume($IP, $PIN, $SID, $value)
{
$url = "http://$IP/fsapi/SET/netRemote.sys.audio.volume?pin=$PIN&sid=$SID&value=$value";
$result = Sys_GetURLContent($url);
}

//Medion Mute
function setMute($IP, $PIN, $SID, $value)
{
$url = "http://$IP/fsapi/SET/netRemote.sys.audio.mute?pin=$PIN&sid=$SID&value=$value";
$result = Sys_GetURLContent($url);
}


//Medion presets ändern
function setPreControl($IP, $PIN, $SID, $value)
{
	switch ($value) {
    case 0:
        $url1 = "http://$IP/fsapi/SET/netRemote.play.shuffle?pin=$PIN&sid=$SID&value=0";
        $url2 = "http://$IP/fsapi/SET/netRemote.play.repeat?pin=$PIN&sid=$SID&value=0";
        break;
    case 1:
        $url1 = "http://$IP/fsapi/SET/netRemote.play.shuffle?pin=$PIN&sid=$SID&value=0";
        $url2 = "http://$IP/fsapi/SET/netRemote.play.repeat?pin=$PIN&sid=$SID&value=1";
        break;
    case 2:
        $url1 = "http://$IP/fsapi/SET/netRemote.play.shuffle?pin=$PIN&sid=$SID&value=1";
        $url2 = "http://$IP/fsapi/SET/netRemote.play.repeat?pin=$PIN&sid=$SID&value=0";
        break;
	}

$result1 = Sys_GetURLContent($url1);
$result2 = Sys_GetURLContent($url2);
}

//Medion source ändern
function setSource($IP, $PIN, $SID, $value)
{
$url = "http://$IP/fsapi/SET/netRemote.sys.mode?pin=$PIN&sid=$SID&value=$value";
$result = Sys_GetURLContent($url);
}

//Medion Control (0=Stop, 1=Play, 2=Paue, 3=Next, 4=Privious)
function setControl($IP, $PIN, $SID, $value)
{
$url = "http://$IP/fsapi/SET/netRemote.play.control?pin=$PIN&sid=$SID&value=$value";
$result = Sys_GetURLContent($url);
}



//Informationen und Statusabfragen

//Medion Power Status
function getPower($IP, $PIN, $SID)
{
$url = "http://$IP/fsapi/GET/netRemote.sys.Power?pin=$PIN&sid=$SID";
$result = Sys_GetURLContent($url);
return $result;
}

//Medion Lautstärke Status
function getVolume($IP, $PIN, $SID)
{
$url = "http://$IP/fsapi/GET/netRemote.sys.audio.volume?pin=$PIN&sid=$SID";
$result = Sys_GetURLContent($url);
}

//Medion Mute Status
function getMute($IP, $PIN, $SID)
{
$url = "http://$IP/fsapi/GET/netRemote.sys.audio.mute?pin=$PIN&sid=$SID";
$result = Sys_GetURLContent($url);
}

//Medion Titel Status
function getTitel($IP, $PIN, $SID)
{
$url = "http://$IP/fsapi/GET/netRemote.play.info.name?pin=$PIN&sid=$SID";
$result = Sys_GetURLContent($url);
$result = substr($result, 56, -37);
return $result;
}

//Medion Album Status
function getAlbum($IP, $PIN, $SID)
{
$url = "http://$IP/fsapi/GET/netRemote.play.info.album?pin=$PIN&sid=$SID";
$result = Sys_GetURLContent($url);
$result = substr($result, 56, -37);
return $result;
}

//Medion Artist Status
function getArtist($IP, $PIN, $SID)
{
$url = "http://$IP/fsapi/GET/netRemote.play.info.artist?pin=$PIN&sid=$SID";
$result = Sys_GetURLContent($url);
$result = substr($result, 56, -37);
return $result;
}

//Medion Titellänge [ms]
function getDuration($IP, $PIN, $SID)
{
$url = "http://$IP/fsapi/GET/netRemote.play.info.duration?pin=$PIN&sid=$SID";
$result = Sys_GetURLContent($url);
}

//Medion aktuelle playtime [ms]
function getPosition($IP, $PIN, $SID)
{
$url = "http://$IP/fsapi/GET/netRemote.play.position?pin=$PIN&sid=$SID";
$result = Sys_GetURLContent($url);
}

?>

MD_command

<?
include ('MD_functions.ips.php');
$IP = GetValue(@IPS_GetVariableIDByName("strIP", $IPS_SELF));    // IP vom Medion Gerät
$PIN = GetValue(@IPS_GetVariableIDByName("strPIN", $IPS_SELF));  // PIN vom Medion Gerät
$SID = GetValue(@IPS_GetVariableIDByName("strSID", $IPS_SELF));  // SID vom Medion Gerät


$AlbumID = @IPS_GetVariableIDByName("strAlbum", $IPS_SELF);  // Aktuelles Album
$TitelID = @IPS_GetVariableIDByName("strTitel", $IPS_SELF);  // Aktueller Titel
$ArtistID = @IPS_GetVariableIDByName("strArtist", $IPS_SELF);  // Aktueller Künstler
$DurationID = @IPS_GetVariableIDByName("iDuration", $IPS_SELF);  // Aktueller Künstler
$PositionID = @IPS_GetVariableIDByName("iPosition", $IPS_SELF);  // Aktueller Künstler

$PowerEventID = @IPS_GetVariableIDByName("bPower",$IPS_SELF);
$PreControlEventID = @IPS_GetVariableIDByName("iPreControl",$IPS_SELF);
$SourceEventID = @IPS_GetVariableIDByName("iSource",$IPS_SELF);
$VolumeEventID = @IPS_GetVariableIDByName("iVolume",$IPS_SELF);
$MuteEventID = @IPS_GetVariableIDByName("bMute",$IPS_SELF);
$ControlEventID = @IPS_GetVariableIDByName("iControl",$IPS_SELF);


// Medion Ein-/Ausschalten (1=EIN, 0=AUS)
if ($_IPS['VARIABLE'] == $PowerEventID)
{
setPower($IP, $PIN, $SID, $_IPS['VALUE']);
}

// Medion PreControl anpassen (0=Normal, 1=Repeat all, 2=Shuffle)
if ($_IPS['VARIABLE'] == $PreControlEventID)
{
setPreControl($IP, $PIN, $SID, $_IPS['VALUE']);
}

// Medion Quelle auswählen (0=Internetradio, 1=Musikplayer, 2=DAB, 3=FM-Radio, 4=AUX)
if ($_IPS['VARIABLE'] == $SourceEventID)
{
setSource($IP, $PIN, $SID, $_IPS['VALUE']);
}

// Medion Lautstärke ändern (0 - 20)
if ($_IPS['VARIABLE'] == $VolumeEventID)
{
setVolume($IP, $PIN, $SID, $_IPS['VALUE']);
}

// Medion Mute (1=Mute, 0=unmute)
if ($_IPS['VARIABLE'] == $MuteEventID)
{
setMute($IP, $PIN, $SID, $_IPS['VALUE']);
}

// Medion Control (0=Stop, 1=Play, 2=Paue, 3=Next, 4=Previous)
if ($_IPS['VARIABLE'] == $ControlEventID)
{
setControl($IP, $PIN, $SID, $_IPS['VALUE']);
}


// Informationenund Status Abfragen

// Titelinformationen
if ($_IPS['VARIABLE'] == $ControlEventID)
{
$value = getAlbum($IP, $PIN, $SID);
setvalue($AlbumID, $value);
$value = getTitel($IP, $PIN, $SID);
setvalue($TitelID, $value);
$value = getArtist($IP, $PIN, $SID);
setvalue($ArtistID, $value);
}


?>

Soweit ich das getestet habe funktioniert auch alles :wink:

Hi,

ich weiß deine letzte Antwort auf das Thema ist schon einige Zeit her, aber evtentuell kannst du mir ja trotzdem helfen.
Ich hab alle Skripte und Variablen jetzt wie in deinem Screenshot angelegt, aber ich kann nix bedienen und bekomme beim ausführen der „MD Command“ immer Fehler.

Was mach ich falsch bzw wo muss ich bei den Variablen welche Aktion setzten ? Ich hab dir gerade mal unten ein paar Bilder angehängt, wie der aktuelle Stand bei mir ist. Wie gesagt deine Skripte hab ich 1 zu 1 kopiert und auch korrekt benannt.

Dankeschön.

Gruß Philip

Hi,

laut deinem Screenshot hast du die MD_functions nicht umbenannt. Diese heißt noch 58637.ips.php
Versuche mal diese in MD_functions.ips.php umzubenennen und starte das script erneut.

Hi,

Hab das ganze passend im anderen Skript benannt (dort wo du include verwendest), dass sollte passen.

Hab jetzt die korrekte SID drin ( war vorher falsch ) und die bPower variable mit dem Profil Switch belegt.

Ich kann jetzt auf „Ein“ drücken es kommt auch keine Meldung, aber der Button bleibt nicht auf „Ein“ und es passiert auch nix … hmmm

Ist es denn korrekt das ich MD_command als Action-Skript unter die Buttons lege ?

action.JPG

Gesendet von iPhone mit Tapatalk

So sieht die MD_comand aus

<? 
include ('48173.ips.php'); 
$IP = GetValue(@IPS_GetVariableIDByName("strIP", $IPS_SELF));    // IP vom Medion Gerät 
$PIN = GetValue(@IPS_GetVariableIDByName("strPIN", $IPS_SELF));  // PIN vom Medion Gerät 
$SID = GetValue(@IPS_GetVariableIDByName("strSID", $IPS_SELF));  // SID vom Medion Gerät 


$AlbumID = @IPS_GetVariableIDByName("strAlbum", $IPS_SELF);  // Aktuelles Album 
$TitelID = @IPS_GetVariableIDByName("strTitel", $IPS_SELF);  // Aktueller Titel 
$ArtistID = @IPS_GetVariableIDByName("strArtist", $IPS_SELF);  // Aktueller Künstler 
$DurationID = @IPS_GetVariableIDByName("iDuration", $IPS_SELF);  // Aktueller Künstler 
$PositionID = @IPS_GetVariableIDByName("iPosition", $IPS_SELF);  // Aktueller Künstler 

$PowerEventID = @IPS_GetVariableIDByName("bPower",$IPS_SELF); 
$PreControlEventID = @IPS_GetVariableIDByName("iPreControl",$IPS_SELF); 
$SourceEventID = @IPS_GetVariableIDByName("iSource",$IPS_SELF); 
$VolumeEventID = @IPS_GetVariableIDByName("iVolume",$IPS_SELF); 
$MuteEventID = @IPS_GetVariableIDByName("bMute",$IPS_SELF); 
$ControlEventID = @IPS_GetVariableIDByName("iControl",$IPS_SELF); 


// Medion Ein-/Ausschalten (1=EIN, 0=AUS) 
if ($_IPS['VARIABLE'] == $PowerEventID) 
{ 
setPower($IP, $PIN, $SID, $_IPS['VALUE']); 
} 

// Medion PreControl anpassen (0=Normal, 1=Repeat all, 2=Shuffle) 
if ($_IPS['VARIABLE'] == $PreControlEventID) 
{ 
setPreControl($IP, $PIN, $SID, $_IPS['VALUE']); 
} 

// Medion Quelle auswählen (0=Internetradio, 1=Musikplayer, 2=DAB, 3=FM-Radio, 4=AUX) 
if ($_IPS['VARIABLE'] == $SourceEventID) 
{ 
setSource($IP, $PIN, $SID, $_IPS['VALUE']); 
} 

// Medion Lautstärke ändern (0 - 20) 
if ($_IPS['VARIABLE'] == $VolumeEventID) 
{ 
setVolume($IP, $PIN, $SID, $_IPS['VALUE']); 
} 

// Medion Mute (1=Mute, 0=unmute) 
if ($_IPS['VARIABLE'] == $MuteEventID) 
{ 
setMute($IP, $PIN, $SID, $_IPS['VALUE']); 
} 

// Medion Control (0=Stop, 1=Play, 2=Paue, 3=Next, 4=Previous) 
if ($_IPS['VARIABLE'] == $ControlEventID) 
{ 
setControl($IP, $PIN, $SID, $_IPS['VALUE']); 
} 


// Informationenund Status Abfragen 

// Titelinformationen 
if ($_IPS['VARIABLE'] == $ControlEventID) 
{ 
$value = getAlbum($IP, $PIN, $SID); 
setvalue($AlbumID, $value); 
$value = getTitel($IP, $PIN, $SID); 
setvalue($TitelID, $value); 
$value = getArtist($IP, $PIN, $SID); 
setvalue($ArtistID, $value); 
} 


?>

$IPS* gibt es seit vielen Versionen nicht mehr. Die ganzen Variablen müssten eigentlich $_IPS[’*’] werden.

Also z. B. $IPS_SELF müsste $_IPS[‚SELF‘] sein.

Okay, dann sollte ich das mal anpassen,
bei mir funktioniert das allerdings noch so, auch unter IPS5.0

Dann hast du die Kompatibilitätsfunktionen aktiv.
Schalte die am besten aus, weil irgendwann holt es dich ein, wenn IPS diese abgekündigten Funktionen und Variablen endgültig entfernt.
Michael