Busch-Radio iNet Skript

Hallo zusammen,

ich habe ein kleines Skript für das Busch-Radio iNet geschrieben.

  • Weitere Funktionen bei Bedarf
  • Ich würde mich über einen Stern (Star) auf GitHub freuen, wenn euch das Modul gefällt

Gruß Basti

Bilder:


Sehr schönes Script!
Ich werd’s heute nachmittag gleich mal ausprobieren und dir dann Feedback geben!

Schon mal danke für deine Arbeit!

Gruß
mirank

Ja das würde mich freuen! Ich dachte schon, ich bleibe der einzige Nutzer :slight_smile: Anfangs sollte es nur ein ganz kleines Skript werden. Die letzten Tage habe ich es aber immer weiter ausgebaut. Jetzt sollte alles soweit stabil laufen (siehe Changelog). Falls es Fragen oder Probleme gibt, einfach melden :slight_smile:

Also das Script is echt Top!
Hat auf sofort funktioniert.

Was ich noch nicht raus gefunden hab ob ich das Radio auch über IPS Ein- und Ausschalten kann.
Wenn man im ausgeschalteten Zustand einen Sender auswählt, schaltet sich das Radio automatisch ein das ist auch gut so.

Aber ich hätte noch gerne einen Ein- Auschaltknopf!

Ansonsten bin ich wie gesagt restlos begeistert von deinem Script!!! Ganz großes LOB!!!

Vielen Dank und Beste Grüße

Mirank

Hallo Mirank,

super dass es sofort bei dir funktioniert hat und vielen Dank für das Lob. Den selben Wunsch habe ich auch. Allerdings bietet das Radio so eine Funktion nicht. Schau mal auf dem Webinterface von deinem Radio http://IP-VOM-RADIO. Nur diese Funktionen werden angeboten. Ich werde mal eine Mail schicken und fragen, ob diese Funktion in einem Firmwareupdate mit eingebunden werden kann, ich vermute aber das wird nichts. Momentan ist es nur möglich das Radio einzuschalten, indem man einen Sender auswählt. Ausschalten ginge nur über einen Schlaf-Timer was ca. eine Minute dauert. Das ist also keine gute Lösung für einen An/Aus-Schalter.

Gruß Basti

@Mirank: Was mich noch Interessieren würde: Welche IPS Version verwendest du und welche Firmware Version hat das Radio? Findest du unter http://<IP_VOM_RADIO>/de/general.shtml ganz unten. Hab mal ne Mail an Busch-Jäger geschickt, mal sehen ob ich ne Antwort bekomme.

Also ich verwende IPS 3.4 das Update auf V4 ist geplant aber ich trau mich noch nicht.

Firmware ist die 01.19 ich glaub es gibt auch keine neuer als die.

Ich bin gespannt ob die Herren von BuschJäger was rauslassen.

Gruß
Mirank

Ja ich vermute, dass das Skript auch nicht ohne Anpassungen unter 4.0 läuft, ich warte aber bis zur final. Ich packe die neue Version auch hier rein wenns so weit ist.

So ich habe gerade eben die v1.4 veröffentlicht:

v1.4 - 28.02.2016:

  • Kompatibel mit IP-Symcon v4.0 (Windows und Linux)

Das Skript ist jetzt unabhängig vom Betriebssystem und läuft mit IP-Symcon 3.4 und 4.0.

Bei einem Update sollte in „Busch-Radio iNet Konfiguration“ die URL vom PHP Simple HTML DOM Parser Skript angepasst werden, da SourceForge auf https umgestellt hat:


// Download URL vom PHP Simple HTML DOM Parser Skript http://simplehtmldom.sourceforge.net/
define("RADIO_SIMPLEHTMLDOM", "https://sourceforge.net/projects/simplehtmldom/files/simple_html_dom.php/download");

Die v1.5 ist draußen:


 v1.5 - 24.04.2016
	* Lautstaerke-Automatik Reset: Beim Ausschalten des Radios wird die Lautstärke (falls sie geändert wurde) auf
	  die Lautstärke für den Tag/ die Nacht zurückgesetzt
	  Hinweis: Diese Option ist nur aktiv, wenn auch die Lautstärke-Automatik aktiv ist
	  Hinweis: Diese Automatik-Funktion ist für Radios mit Verbindung zum Lichtschalter gedacht. So kann die Lautstaerke
	  nach dem Ausschalten des Radios automatisch auf die eingestellte Laustaerke fuer den Tag oder die Nacht zurueckgesetzt werden.

Gruß Basti

Vielen Dank für das Script. Läuft super.

Ist das Script auch als Modul geplant oder schon in Arbeit? :slight_smile:

Gruß

Prima, freut mich! Falls es Probleme oder Fragen gibt einfach melden.

Ein Modul ist momentan noch nicht geplant. Ich habe mich einfach noch nicht mit dem Thema Modulprogrammierung beschäftigt und die Zeit ist momentan so knapp…

Vielen Dank für das Skript. Funktioniert soweit echt gut. Bei der Installation gibts zwar erst mal Fehlermeldungen, aber sobald die IP-Adresse konfiguriert ist, läuft alles sauber.
Das einzige, was mir wirklich fehlt und in der originalen iNetRadio-App von Busch-Jäger mit enthalten ist: Die Ein/Ausschaltfunktion.

Oder habe ich was übersehen?

Wäre toll, wenn das noch mit dazu kommt - selbst kann ich das, denke ich nicht so einfach realisieren.

Grüße
Stefan

Als ich das Skript geschrieben habe gab es die Funktion noch nicht und auch keine App. Welche Firmwareversion hat dein Radio? Dann schaue ich mal

Vielen Dank für die Antwort.

Meine Firmware-Version ist 02.03

Wäre ja toll, wenn das klappen würde.

Grüße
Stefan

Hallo,
eigentlich habe ich danach gesucht, wie ich einen upnp/dlna stream auf mein Busch-Jäger Radio bekomme und bin dabei auf folgendes gestoßen:
https://forum.fhem.de/index.php/topic,47240.msg721069.html#msg721069

Hier wird beschrieben, wie man mit dem Radio kommunizieren kann und welche Befehle es gibt. Gesendet wird an UDP Port 4244, antworten kommen als Broadcast auf 4242.

Also einfach einen UDP-Socket angelegt und getestet.


USCK_SendText(12345, "COMMAND:SET
RADIO_OFF
ID:FHEM

"); 

Funktioniert einwandfrei. Die anderen Befehle hab ich noch nicht getestet, außer RADIO_ON.

Grüße
Stefan

Hallo Stefan,

sorry für die späte Antwort. Hm eigentlich müsste ich ein komplett neues Modul schreiben welches auf der UDP Schnittstelle beruht. Aktuell spreche ich die HTTP Schnittstelle an. Allerdings bedeutet das schon einiges an Arbeit beim Umbauen.

Gruss baba

Für mich nicht notwendig. Funktioniert ja gut das Modul und das Ein/Ausschalten hab ich so dazu gemacht.

Hallo Zusammen,

kann mir bitte jemand den im ersten Post eingestellten Code noch einmal zu kommen lassen. Der ist dort irgendwie ein wenig verschoben. Und ich mit meinen php Kenntnissen :confused:

Hab es probiert, aber es will nicht klappen:D

Danke schon einmal

bis dann

Hallo Zusammen,

habe immer noch ein Problem mit dem Code.:frowning:

<?
// Busch-Radio iNet by baba (baba@baba.tk) v1.5
// Für IP-Symcom

// Hinweis: Das Radio sollte unter Energieeinstellungen auf "Premium" (oder "Standby") gestellt werden.
// In der Standardeinstellung "Eco" ist das Radio im ausgeschalteten Zustand nicht mit dem Netzwerk verbunden.

// Thread im Forum: https://www.symcon.de/forum/threads/30290-Busch-Radio-iNet-Skript

/* Changelog:
 v1.0 - 23.01.2016:
    * Kompatibel mit IP Symcon v3.4 (andere Versionen nicht getestet)
    * Kompatibel mit Firmware-Version 01.19 (andere Versionen nicht getestet)
    * Stationen abspielen und Stationsnamen anzeigen
    * Lautstärke anzeigen und regeln
    * Momentan abgespielte Station anzeigen
 v1.1 - 23.01.2016:
    * Fix: Variable "Zur Zeit läuft" wird nun korrekt mitgefuehrt
 v1.2 - 25.01.2016:
    * Lautstaerke-Automatik: Die Lautstaerke des Radios wird zu festen Uhrzeiten, welche in einem Wochenkalender
      eingetragen werden, auf eine bestimmte Lautsaerke gestellt (0 bis 31). Beispiel: 10 Uhr -> 4 und 22 Uhr -> 2
      Hinweis: Diese Automatik-Funktion ist für Radios mit Verbindung zum Lichtschalter gedacht. So kann nachts die Lautstaerke
      gesenkt und morgens wieder angehoben werden.
    * Fix: Lautstaerkeumrechnung von 0-31 auf 0-100% uebernimmt jetzt IPS über ein Variablenprofil "RadioBusch.Volume"
    * Fix: Beim Lautstärke einstellen und Station auswählen, wird nun auf Rückmeldung gewartet und ggf. ein Fehler ausgegeben
    * Fix: Eine index.cgi Abfrage führt zum aufleuchten des Displays, index.shtml nicht. Jetzt wird beim Nachführen der Variable index.shtml abgefragt
 v1.3 - 26.01.2016:
    * Fix: Im Webinterface vom Radio wird bei der Variable ZurZeitlaueft nur die Stationsnummer richtig mitgeführt, der Stationsname wird erst beim
      nächsten aktualisieren nachgeführt. Nun wird nurnoch die Stationsnummer ausgelesen und anhand der Stationsliste der Stationsname ermittelt
    * Fix: Bei der Lautstaerke-Automatik wird nun auf Antwort gewartet und ggf. ein Fehler auf der Konsole ausgegeben
 v1.4 - 28.02.2016:
    * Kompatibel mit IP-Symcon v4.0 (Windows und Linux)
 v1.5 - 24.04.2016
    * Lautstaerke-Automatik Reset: Beim Ausschalten des Radios wird die Lautstärke (falls sie geändert wurde) auf
      die Lautstärke für den Tag/ die Nacht zurückgesetzt
      Hinweis: Diese Option ist nur aktiv, wenn auch die Lautstärke-Automatik aktiv ist
      Hinweis: Diese Automatik-Funktion ist für Radios mit Verbindung zum Lichtschalter gedacht. So kann die Lautstaerke
      nach dem Ausschalten des Radios automatisch auf die eingestellte Laustaerke fuer den Tag oder die Nacht zurueckgesetzt       werden.
*/

/*****************
  Code
*****************/
IPS_SetScriptTimer($_IPS['SELF'], 0);

if ($_IPS['SENDER'] == "Execute") {
   setDummyModuleAsParent();
}

$configId = updateConfigScript();
if ($configId !== false) {
    require_once(IPS_GetKernelDir() . "/scripts/" . IPS_GetScriptFile($configId));
} else {
   echo "ERROR: Busch-Radio iNet Konfiguration nicht gefunden.";
    return;
}

$funcId = updateFunctionsScript();
if ($funcId !== false) {
    require_once(IPS_GetKernelDir() . "/scripts/" . IPS_GetScriptFile($funcId));
} else {
   echo "ERROR: Busch-Radio iNet Funktionen nicht gefunden.";
    return;
}

if (($_IPS['SENDER'] == "TimerEvent") or ($_IPS['SENDER'] == "Execute")) {
   onExecute();
   if (radioIsOnline() === false) {
      echo "ERROR: Busch-Radio iNet nicht erreichbar.";
      IPS_SetScriptTimer($_IPS['SELF'], RADIO_REFRESHRATE);
      return;
    }

    $indexData = getIndexData();
    updateStationScripts($indexData);
    updateVolumeVar($indexData["Lautstaerke"]);
    updateNowPlayingVar($indexData);
    
    if ($indexData["ZurZeitlaeuft"]["stationNr"] === 0) {
        resetVolume($indexData["Lautstaerke"]["value"]);
    }
}

if ($_IPS['SENDER'] == "WebFront") {
   $ident = IPS_GetObject($_IPS['VARIABLE'])["ObjectIdent"];

   if (strcmp($ident, "Lautstaerke") === 0) {
      setVolume($_IPS["VALUE"]);
    }
}
IPS_SetScriptTimer($_IPS['SELF'], RADIO_REFRESHRATE);

/*****************
  Funktionen
*****************/

function setDummyModuleAsParent() {
    $parent = IPS_GetParent($_IPS["SELF"]);
    if (IPS_GetObject($parent)["ObjectType"] !== 1) {
        $insID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
        IPS_SetParent($insID, $parent);
        IPS_SetParent($_IPS["SELF"], $insID);
        IPS_SetName($insID, "Busch-Radio iNet");
    }
}

function updateConfigScript() {
    if ($_IPS["SENDER"] === "TimerEvent") {
        $parent = IPS_GetParent(IPS_GetParent($_IPS["EVENT"]));
    } else {
        $parent = IPS_GetParent($_IPS["SELF"]);
    }
    
    $configId = @IPS_GetObjectIDByIdent("config", $parent);

    if ($configId === false) {
       $configId = IPS_CreateScript(0);
       IPS_SetParent($configId, $parent);
        IPS_SetName($configId, "Busch-Radio iNet Konfiguration");
        IPS_SetIdent($configId, "config");
        IPS_SetHidden($configId, true);
        IPS_SetPosition($configId, 98);
        IPS_SetScriptContent($configId, getConfigContent());
    }

    return $configId;
}

function getConfigContent() {
$beginTag = "<?
";
$endTag = "
?>";
$title = "

";
/********************************************
    Busch-Radio iNet by baba (baba@baba.tk)
                 Konfiguration
********************************************/
$config =
/***************************
  Konfiguration Allgemein
***************************/

// IP Adresse vom Busch-Radio iNet
// Hinweis: Bei Aenderung dieser Konsante muss das Aktionsskript einmal manuell ausgefuehrt werden
define("RADIO_IP", "0.0.0.0");

// Aktualisierungsrate der Variablen in Sekunden
// Hinweis: Der Wert sollte zwischen 5 und 60 Sekunden liegen. Empfohlen: 30
define("RADIO_REFRESHRATE", 30);

/*************************************************
  (Optional) Konfiguration Lautstärke-Automatik
*************************************************/

// Lautstärke-Automatik verwenden (true = Ja und false = Nein)
// Hinweis: Bei Aenderung dieser Konsante muss das Aktionsskript einmal manuell ausgefuehrt werden
define("RADIO_VOLUMEAUTO", false);

// Lautstärke für den Tag (von 0 bis 31)
// Hinweis: Bei Aenderung dieser Konsante muss das Aktionsskript einmal manuell ausgefuehrt werden
define("RADIO_VOLUMEAUTO_DAY", 5);

// Lautstärke für die Nacht (von 0 bis 31)
// Hinweis: Bei Aenderung dieser Konsante muss das Aktionsskript einmal manuell ausgefuehrt werden
define("RADIO_VOLUMEAUTO_NIGHT", 2);

// Beim Ausschalten des Radios wird die Lautstärke (falls sie geändert wurde) auf
// die Lautstärke für den Tag/ die Nacht zurückgesetzt
// Hinweis: Diese Option ist nur aktiv, wenn auch die Lautstärke-Automatik angestellt ist
// Hinweis: Bei Aenderung dieser Konsante muss das Aktionsskript einmal manuell ausgefuehrt werden
define("RADIO_VOLUMEAUTO_RESETVOL", false);

/***************************************
  (Optional) Erweiterte Konfiguration
***************************************/

// Download URL vom PHP Simple HTML DOM Parser Skript http://simplehtmldom.sourceforge.net/
define("RADIO_SIMPLEHTMLDOM", "https://sourceforge.net/projects/simplehtmldom/files/simple_html_dom.php/download");
return $beginTag . $title . $config . $endTag;
}

function updateFunctionsScript() {
    $parent = IPS_GetParent($_IPS['SELF']);
    $funcId = @IPS_GetObjectIDByIdent("functions", $parent);

    if ($funcId === false) {
       $funcId = IPS_CreateScript(0);
       IPS_SetParent($funcId, $parent);
        IPS_SetName($funcId, "Busch-Radio iNet Funktionen");
        IPS_SetIdent($funcId, "functions");
        IPS_SetHidden($funcId, true);
        IPS_SetPosition($funcId, 100);
        IPS_SetScriptContent($funcId, getFunctionsContent());
    } else if ($_IPS['SENDER'] == "Execute") {
       IPS_SetScriptContent($funcId, getFunctionsContent());
    }

    return $funcId;
}

function getFunctionsContent() {
$beginTag = "<?
";
$endTag = "
?>";
$title = "

";
/********************************************
    Busch-Radio iNet by baba (baba@baba.tk)
                 Funktionen
********************************************/ 
$functions =
$parent = getParent();
$configId = @IPS_GetObjectIDByIdent("config", $parent);
if ($configId !== false) {
    require_once(IPS_GetKernelDir() . "/scripts/" . IPS_GetScriptFile($configId));
} else {
   echo "ERROR: Busch-Radio iNet Konfiguration nicht gefunden.";
    return;
}

function getParent() {
   if ($_IPS["SENDER"] === "TimerEvent") {
      if (IPS_GetObject($_IPS["EVENT"])["ObjectIdent"] === "volumeAuto") {
         return IPS_GetParent($_IPS["EVENT"]);
      } else {
          return IPS_GetParent(IPS_GetParent($_IPS["EVENT"]));
      }
    } else {
        return IPS_GetParent($_IPS["SELF"]);
    }
}

function setVolume($volume) {
    if ($volume < 0 || $volume > 31) {
       echo "ERROR: Ungültige Lautstärke (Erlaubt: 0-31).";
       return false;
    }

    if (!radioIsOnline()) {
       echo "ERROR: Busch-Radio iNet nicht erreichbar.";
      return false;
    }

   $simplehtmldomId = getSimplehtmldom();
    if ($simplehtmldomId === false) {
        echo "ERROR: PHP Simple HTML DOM Parser nicht gefunden.";
        return false;
    }

    require_once(IPS_GetKernelDir() . "/scripts/" . IPS_GetScriptFile($simplehtmldomId));

   if (!function_exists("file_get_html")) {
        echo "ERROR: Funktion file_get_html() nicht gefunden.";
        return false;
    }

   $html = file_get_html("http://" . RADIO_IP . "/de/index.cgi?vo=" . $volume);
   if ($html === false) {
      echo "ERROR: Keine HTML Daten erhalten.";
        return false;
    }

   $result = extractIndexValuesFromHtml($html);
   $newVolume = intval($result["Lautstaerke"]["value"]);

    if ($volume !== $newVolume) {
       echo "ERROR: Lautstärke konnte nicht korrekt gesetzt werden.";
       return false;
    }

    if (isset($_IPS["SENDER"]) && $_IPS["SENDER"] == "WebFront") {
        SetValueInteger($_IPS["VARIABLE"], $newVolume);
    } else {
       $parent = getParent();
          $volumeId = @IPS_GetObjectIDByIdent("Lautstaerke", $parent);
          if ($volumeId !== false) {
           SetValueInteger($volumeId, $newVolume);
        }
    }

    return true;
}

function setStation($stationNr) {
    if ($stationNr < 1 || $stationNr > 8) {
       echo "ERROR: Ungültige Station (Erlaubt: 1-8).";
       return false;
    }

    if (!radioIsOnline()) {
       echo "ERROR: Busch-Radio iNet nicht erreichbar.";
      return false;
    }

   $simplehtmldomId = getSimplehtmldom();
    if ($simplehtmldomId === false) {
        echo "ERROR: PHP Simple HTML DOM Parser nicht gefunden.";
        return false;
    }

   require_once(IPS_GetKernelDir() . "/scripts/" . IPS_GetScriptFile($simplehtmldomId));

   if (!function_exists("file_get_html")) {
        echo "ERROR: Funktion file_get_html() nicht gefunden.";
        return false;
    }

   $html = file_get_html("http://" . RADIO_IP . "/de/index.cgi?p" . $stationNr);
   if ($html === false) {
      echo "ERROR: Keine HTML Daten erhalten.";
        return false;
    }

   $indexValues = extractIndexValuesFromHtml($html);
   $newStationNr = $indexValues["ZurZeitlaeuft"]["stationNr"];
   $newStationName = $indexValues["Station" . $newStationNr]["value"];

    if ($stationNr !== $newStationNr) {
       echo "ERROR: Station konnte nicht korrekt gesetzt werden.";
       return false;
    }

 $parent = IPS_GetParent($_IPS["SELF"]);
    $playingStationId = @IPS_GetObjectIDByIdent("ZurZeitlaeuft", $parent);
    if ($playingStationId !== false) {
        SetValueString($playingStationId, $newStationName);
    }

    return true;
}

function updateStationScripts($indexData) {
    $parent = IPS_GetParent($_IPS["SELF"]);

    foreach ($indexData as $key => $value) {
        if (strpos($key, "Station") !== false) {
            $stationNr = intval(substr($value["name"], 8));
         $content = getStationScriptContent($stationNr);
           updateIPSscript($parent, trim($value["name"]) . ": " . trim($value["value"]), trim($value["name"]), $content, $stationNr - 1);
        }
    }
}

function getStationScriptContent($stationNr) {
$beginTag = "<?
";
$endTag = "
?>";
$title = "

";
/********************************************
    Busch-Radio iNet by baba (baba@baba.tk)
                 Station \' . $stationNr . \'
********************************************/ 
$content = $parent = IPS_GetParent($_IPS["SELF"]);
$funcId = @IPS_GetObjectIDByIdent("functions", $parent);

if ($funcId !== false) {
    require_once(IPS_GetKernelDir() . "/scripts/" . IPS_GetScriptFile($funcId));
} else {
   echo "ERROR: Busch-Radio iNet Funktionen nicht gefunden.";
    return;
}

setStation(' . $stationNr . ');
return $beginTag . $title . $content . $endTag;
}

function updateVolumeVar($value) {
    $parent = IPS_GetParent($_IPS["SELF"]);
   $varId = updateIPSvar($parent, trim($value["name"]), intval($value["value"]), 1, 8);
   if ($_IPS["SENDER"] == "Execute") {
      createVolumeVariableProfile();
       IPS_SetVariableCustomProfile($varId, "RadioBusch.Volume");
       IPS_SetVariableCustomAction($varId, $_IPS["SELF"]);
    }
}

function updateNowPlayingVar($indexValues) {
    $parent = IPS_GetParent($_IPS["SELF"]);

   $newStationNr = $indexValues["ZurZeitlaeuft"]["stationNr"];
   if ($newStationNr < 1 || $newStationNr > 8) {
      $newStationName = "";
   } else {
      $newStationName = $indexValues["Station" . $newStationNr]["value"];
    }

   $varId = updateIPSvar($parent, trim($indexValues["ZurZeitlaeuft"]["name"]), trim($newStationName), 3, 9);
   if ($_IPS["SENDER"] == "Execute") {
       IPS_SetIcon($varId, "Speaker");
    }
}

function getIndexData() {
   $simplehtmldomId = getSimplehtmldom();
    if ($simplehtmldomId === false) {
        echo "ERROR: PHP Simple HTML DOM Parser nicht gefunden.";
        return false;
    }

   require_once(IPS_GetKernelDir() . "/scripts/" . IPS_GetScriptFile($simplehtmldomId));

   if (!function_exists("file_get_html")) {
        echo "ERROR: Funktion file_get_html() nicht gefunden.";
        return false;
    }

    $html = file_get_html("http://" . RADIO_IP . "/de/index.shtml");

    if ($html === false) {
        return false;
    }

   $result = extractIndexValuesFromHtml($html);

    return $result;
}

function extractIndexValuesFromHtml($html) {
   $result = array();

    foreach($html->find("form[action=index.cgi]") as $form) {
        foreach($form->find("legend") as $legend) {
            foreach($form->find("input[type=text]") as $input) {
                $name = utf8_decode(trim(html_entity_decode($legend->plaintext)));
                $key = str_replace(array(".",":","-","_"," ",utf8_decode("ä"),utf8_decode("ö"),utf8_decode("ü"),utf8_decode("ß"),"ä","ö","ü","ß"), array("","","","","","ae","oe","ue","ss","ae","oe","ue","ss"), $name);
                $result[$key] = array("name" => $name, "value" => utf8_decode(html_entity_decode(trim($input->value))));
                if (strcmp($key, "ZurZeitlaeuft") === 0) {
                   $result[$key]["stationNr"] = extractPlayingStationNrFromHtml($html);
                }
          }
        }
    }

    return $result;
}

function extractPlayingStationNrFromHtml($html) {
    foreach($html->find("p") as $p) {
       $strpos = strpos($p, ":");
        if ($strpos !== false) {
           $str = trim($p->plaintext);
          return intval(substr($str,  ($strpos - 1) - (strlen($str)), 1));
        }
    }
    return false;
}

function getSimplehtmldom() {
    $parent = getParent();
    $simplehtmldomId = @IPS_GetObjectIDByIdent("simplehtmldom", $parent);

    if ($simplehtmldomId === false) {
       $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, RADIO_SIMPLEHTMLDOM);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_exec($ch);
        
        $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
        $content = Sys_GetURLContent($url);
       
       if ($content === false) {
          echo "ERROR: PHP Simple HTML DOM Parser Skript konnte nicht heruntergeladen werden. Bitte Downloadlink anpassen (siehe Erweiterte Konfiguration).";
          return false;
       }

       $simplehtmldomId = IPS_CreateScript(0);
       IPS_SetParent($simplehtmldomId, $parent);
       IPS_SetName($simplehtmldomId, "Busch-Radio iNet PHP Simple HTML DOM Parser Skript");
       IPS_SetScriptContent($simplehtmldomId, $content);
       IPS_SetIdent($simplehtmldomId, "simplehtmldom");
       IPS_SetHidden($simplehtmldomId, true);
       IPS_SetPosition($simplehtmldomId, 200);
    }

    return $simplehtmldomId;
}

function onExecute() {
    if ($_IPS["SENDER"] == "Execute") {
       IPS_SetName($_IPS["SELF"], "Busch-Radio iNet Aktionsskript");
       IPS_SetPosition($_IPS["SELF"], 99);
       IPS_SetHidden($_IPS["SELF"], true);
       setVolumeAuto();
    }
}

function setVolumeAuto() {
    $parent = IPS_GetParent($_IPS["SELF"]);
    $wpId = @IPS_GetObjectIDByIdent("volumeAuto", $parent);

    if (RADIO_VOLUMEAUTO === true) {
        if ($wpId === false) {
           $wpId = IPS_CreateEvent(2);
         IPS_SetEventScheduleGroup($wpId, 0, 127);
           IPS_SetParent($wpId, $parent);
           IPS_SetName($wpId, "Lautstärke-Automatik");
           IPS_SetIdent($wpId, "volumeAuto");
              IPS_SetPosition($wpId, 10);
              IPS_SetIcon($wpId, "Clock");
        }
        IPS_SetEventScheduleAction($wpId, 0, "Tag", 0xFFFFFF, getWeeklyScheduleContent(RADIO_VOLUMEAUTO_DAY));
        IPS_SetEventScheduleAction($wpId, 1, "Nacht", 0x585858, getWeeklyScheduleContent(RADIO_VOLUMEAUTO_NIGHT));
    } else {
       if ($wpId !== false) {
          IPS_DeleteEvent($wpId);
       }
    }
}

function resetVolume($volume) {
    if (RADIO_VOLUMEAUTO === false || RADIO_VOLUMEAUTO_RESETVOL === false) {
        return false;
    }
    $time = time();

   $parent = IPS_GetParent($_IPS["SELF"]);
    $wpId = @IPS_GetObjectIDByIdent("volumeAuto", $parent);

    $e = IPS_GetEvent($wpId);
    $actionID = false;

    foreach($e["ScheduleGroups"] as $g) {
        if ($g["Days"] & date("N") > 0) {
            foreach($g["Points"] as $p) {
                if (date("H") * 3600 + date("i") * 60 + date("s") >= $p["Start"]["Hour"] * 3600 + $p["Start"]["Minute"] * 60 + $p["Start"]["Second"]) {
                    $actionID = intval($p["ActionID"]);
                } else {
                    break;
                }
            }
            break;
        }
    }

    if ($actionID === 0 && $volume != RADIO_VOLUMEAUTO_DAY) {
      setVolume(RADIO_VOLUMEAUTO_DAY);
        return true;
    } else if ($actionID === 1 && $volume != RADIO_VOLUMEAUTO_NIGHT) {
       setVolume(RADIO_VOLUMEAUTO_NIGHT);
       return true;
    } else if ($actionID === false) {
          echo "ERROR: Busch-Radio iNet konnte Lautstärke nicht zurücksetzen.";
    }

    return false;
}

function getWeeklyScheduleContent($volume) {
$content = $parent = IPS_GetParent($_IPS["EVENT"]);
$funcId = @IPS_GetObjectIDByIdent("functions", $parent);
if ($funcId !== false) {
    require_once(IPS_GetKernelDir() . "/scripts/" . IPS_GetScriptFile($funcId));
} else {
   echo "ERROR: Busch-Radio iNet Funktionen nicht gefunden.";
    return;
}

setVolume(' . $volume . ');

return $content;
}

function createVolumeVariableProfile() {
    $profileName = "RadioBusch.Volume";

    if (IPS_VariableProfileExists($profileName)) {
       return;
    }

   IPS_CreateVariableProfile($profileName, 1);
   IPS_SetVariableProfileValues($profileName, 0, 31, 1);
   IPS_SetVariableProfileText($profileName, "", "%");
   IPS_SetVariableProfileIcon($profileName, "Intensity");
}

function deleteVolumeVariableProfile() {
    $profileName = "RadioBusch.Volume";

    if (!IPS_VariableProfileExists($profileName)) {
       return;
    }

   IPS_DeleteVariableProfile($profileName);
}

function updateIPSscript($parent, $name, $ident, $content, $pos=0) {
   $ident = str_replace(array(".",":","-","_"," ",utf8_decode("ä"),utf8_decode("ö"),utf8_decode("ü"),utf8_decode("ß"),"ä","ö","ü","ß"), array("","","","","","ae","oe","ue","ss","ae","oe","ue","ss"), $ident);
    if (!ctype_alnum($ident)) {
        echo "ERROR: Konnte Variable nicht hinzufügen. Name kann nicht als Ident verwendet werden: " . $ident . PHP_EOL;
        return;
    }
    $varId = @IPS_GetObjectIDByIdent($ident, $parent);
    if ($varId === false) {
        $varId = IPS_CreateScript(0);
        IPS_SetName($varId, $name);
        IPS_SetIdent($varId, $ident);
        IPS_SetParent($varId, $parent);
        IPS_SetPosition($varId, $pos);
        IPS_SetScriptContent($varId, $content);
    } else {
        if (strpos($ident, "Station") !== false) {
            if (strcmp(IPS_GetName($varId), $name) != 0) {
                IPS_SetName($varId, $name);
            }
        }
       if ($_IPS["SENDER"] == "Execute") {
          IPS_SetScriptContent($varId, $content);
       }
    }

    return $varId;
}

function updateIPSvar($parent, $name, $value, $type, $pos=0) {
    $ident = str_replace(array(".",":","-","_"," ",utf8_decode("ä"),utf8_decode("ö"),utf8_decode("ü"),utf8_decode("ß"),"ä","ö","ü","ß"), array("","","","","","ae","oe","ue","ss","ae","oe","ue","ss"), $name);
    if (!ctype_alnum($ident)) {
        echo "ERROR: Konnte Variable nicht hinzufügen. Name kann nicht als Ident verwendet werden: " . $ident . PHP_EOL;
        return;
    }
    if (is_int($type)) {
        $ipsType = $type;
    } else {
        switch ($type)
        {
            case "int":
                $ipsType = 1;
                break;
            case "boolean":
                $ipsType = 0;
                break;
            case "string":
                $ipsType = 3;
                break;
            default:
                echo "ERROR: Unbekannter Datentyp:" . $type . PHP_EOL;
                return;
                break;
        }
    }
    $varId = @IPS_GetObjectIDByIdent($ident, $parent);
    if ($varId === false) {
        $varId = IPS_CreateVariable($ipsType);
        IPS_SetName($varId, $name);
        IPS_SetIdent($varId, $ident);
        IPS_SetParent($varId, $parent);
        IPS_SetPosition($varId, $pos);
    }
    switch ($ipsType) {
        case 0:
           if (GetValueBoolean($varId) <> (bool)$value) {
              SetValueBoolean($varId, (bool)$value);
           }
            break;
        case 1:
            if (GetValueInteger($varId) <> (int)$value) {
               SetValueInteger($varId, (int)$value);
            }
            break;
        case 2:
            if (GetValueFloat($varId) <> round((float)$value, 2)) {
               SetValueFloat($varId, round((float)$value, 2));
            }
            break;
        case 3:
            if (GetValueString($varId) <> $value) {
               SetValueString($varId, $value);
            }
            break;
    }

    return $varId;
}

function radioIsOnline() {
   if (ping(RADIO_IP) === false) {
      return false;
    } else {
       return true;
    }
}

//Quelle: http://stackoverflow.com/questions/9841635/how-to-ping-a-server-port-with-php
function ping($host, $timeout = 1) {
    /* ICMP ping packet with a pre-calculated checksum */
    $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
    $socket  = socket_create(AF_INET, SOCK_RAW, 1);
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => $timeout, "usec" => 0));
    @socket_connect($socket, $host, null);
    $ts = microtime(true);
    @socket_send($socket, $package, strLen($package), 0);
    if (@socket_read($socket, 255)) {
        $result = microtime(true) - $ts;
    } else {
        $result = false;
    }
    socket_close($socket);
    return $result;
}

return $beginTag . $title . $functions . $endTag;
}

?>

das sagt er mir:
Fatal error: Uncaught Error: Call to undefined function getParent() in /mnt/data/symcon/scripts/36707.ips.php:209
Stack trace:
#0 /mnt/data/symcon/scripts/36707.ips.php(192): getFunctionsContent()
#1 /mnt/data/symcon/scripts/36707.ips.php(58): updateFunctionsScript()
#2 {main}
thrown in /mnt/data/symcon/scripts/36707.ips.php on line 209

ich wäre euch super dankbar, wenn sich das mal jemand anschauen könnte.