Moin zusammen,
ich bin immer auf der Suche nach APIs und Standards gewesen und habe mir dazu zumeist unabhängige Funktionen und Libaries programmiert, welche den nicht Programmierern unter den IPS Anwendern sicher auch helfen können!
Ich veröffentliche hier einfach einen Teil meines Arbeitsstandes - auf dem Weg meine pers. Hausautomatisierung zu strukturieren und zu verbessern selektiv und hoffe es hilft Jemandem weiter.
Meine Libs sollten zumeist direkt sinnvoll eingesetzt werden können oder sie suchen sich die notwendigen Informationen aus der Ip-Symcon Hierarchie (bei Beachtung der Anleitung) selber. Vorraussetzungen wie z.B. eine bestimmte Hierarchie werden erläutert und Hintergründe sind in Kommentaren des Codes aufgeführt…
Nutzung
- Skripte in den Ordner IP-Symcon\scripts kopieren
- Include im eigenen Skript machen
require ("functions.inc.php")
- Ggf. die einzelnen Skriptdateien in IP-Symcon erstellen (spezieller Name und Datei hochladen) um die Dateien als Funktionsreferenz über den Objektbaum im Zugriff zu haben
Beispiel: „Alle Lichter aus“
Vorraussetzung: Lichter müssen „Licht“ im Namen enthalten um gefunden zu werden.
<?
require ("functions.inc.php");
// br_searchinst sucht hier alle Objekte mit Licht im Namen und liefert ein Array
// Der Wrapper br_switch bearbeitet bei Übergabe eines Arrays alle Elemente
// und schaltet über false aus.
// Wenn die 0 als Parent für die Suche auf die Kategorie eines Raums gesetzt
// wird, werden z.B. nur die Lichter in diesem Raum abgeschaltet.
br_switch(br_searchinst(0,"Licht"),false);
?>
Historie
22.05.2010 20:00 Neue Version, Problem mit doppelten
<?[/CODE> Tags behoben
15.06.2010 Neue Version, Improvements beim Object Handling und -Zusammenführung mit meiner pers Entwicklung (der Quellcode enthält allerdings vermutlich immer mehr Funktionen als meine Beschreibungen in diesem Thread)
19.11.2010 Kleinere Korrekturen
21.11.2010 1.5 Abgleich mit meiner Entwicklungskopie(!)
- Hinzufügen von br_piri (zur Verwaltung eines PIRI in einer Category)
- Vorbereitungen um Konfigurationen in eigene Dateien auszulagern
- Verbesserungen in dem Kommentaren und taggen der Dateien mittels PHP define um Versionsinformationen (Major, Minor und eindeutigem und sprechenden Tag) unterzubringen (aktuell werden die Informationen nicht abgefragt und nur gesetzt). Zukünftig kann darüber ggf. eine Abwärstkompatibilität gewährleistet werden.
[b][u]Aktuellste Version:[/u][/b]
[b]25.11.2010 1.5.1 Bugfix $NAME_SI in br_searchinst
- Bugfix $NAME_SI in br_searchinst ist nicht definiert bzw. im Scope: Auslagern von NAME_SI in $cfg_br_ips['si_default_name'] in einer config.inc.php
- Einführung config.inc.php für globale Parameter und Defaults[/b]
- (PRE - SONOS Routinen)
[b]An dieser Stelle, nochmals Vielen Dank für das bisher erhaltene Feedback![/b]
Bitte sendet mir bei veröffentlichten Logik oder Programmcodefehlern gerne direkt eine PM, so dass ich den Fehler schnellstmöglich korrigieren kann, damit sich Niemand bei der - nicht notwendigen Suche - von Fehlern aufhalten muss.
Grüße, Benjamin
[b][u]Pre 1.5.7 löst unlinked Sonos Groups ggf. nicht auf / Fix in br_sonos.inc.php:[/u][/b]
```php
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// TAG_TODO_BR Intelligenz zum Aufbau der Zonen Topologie hier einbauen
// We are slave and save to coord rincon
$curCoord=$match[1];
$arrzonegroups[$curCoord]['Coordinator']=(string) $curCoord;
$arrzonegroups[$curCoord]['Member'][$arrzoneplayers[$curzoneplayerid]['Rincon']]['ID'] = $arrzoneplayers[$curzoneplayerid]['ID'];
$arrzonegroups[$curCoord]['Member'][$arrzoneplayers[$curzoneplayerid]['Rincon']]['Rincon'] = $arrzoneplayers[$curzoneplayerid]['Rincon'];
$arrzonegroups[$curCoord]['Member'][$arrzoneplayers[$curzoneplayerid]['Rincon']]['CurrentZoneName'] = $arrzoneplayers[$curzoneplayerid]['CurrentZoneName'];
$arrzonegroups[$curCoord]['Member'][$arrzoneplayers[$curzoneplayerid]['Rincon']]['CurrentIcon'] = $arrzoneplayers[$curzoneplayerid]['CurrentIcon'];
$arrzonegroups[$curCoord]['Member'][$arrzoneplayers[$curzoneplayerid]['Rincon']]['IPSId'] = $arrzoneplayers[$curzoneplayerid]['IPSId'];
// So unset our Master entry
unset($arrzonegroups[$arrzoneplayers[$curzoneplayerid]['Rincon']]);
if (function_exists('IPSLogger_Dbg'))
{ IPSLogger_Dbg(__file__ , "== Line ".__line__." == " .
"We are slave " . $arrzoneplayers[$curzoneplayerid]['Rincon'] . " and save to coord " . $curCoord
); }
// $arrzoneplayers[$match['ID']]['IPAddress'];
} else {
$curCoord=$arrzoneplayers[$curzoneplayerid]['Rincon'];
$arrzonegroups[$curCoord]['Coordinator']=$curCoord;
$arrzonegroups[$curCoord]['Member'][$curCoord]['ID'] = $arrzoneplayers[$curzoneplayerid]['ID'];
$arrzonegroups[$curCoord]['Member'][$curCoord]['Rincon'] = $arrzoneplayers[$curzoneplayerid]['Rincon'];
$arrzonegroups[$curCoord]['Member'][$curCoord]['CurrentZoneName'] = $arrzoneplayers[$curzoneplayerid]['CurrentZoneName'];
$arrzonegroups[$curCoord]['Member'][$curCoord]['CurrentIcon'] = $arrzoneplayers[$curzoneplayerid]['CurrentIcon'];
$arrzonegroups[$curCoord]['Member'][$curCoord]['IPSId'] = $arrzoneplayers[$curzoneplayerid]['IPSId'];
// We are master so delete our slave entries
// br fixed bug for unlinking zones
foreach ($arrzonegroups as $curzonegroup) {
$thisCoord=$curzonegroup['Coordinator'];
foreach ($curzonegroup['Member'] as $curmember) {
if (is_string($curzonegroup)) {
echo "
====
Coord:" . $curzonegroup;
} else {
if($curmember['Rincon']==$curCoord){
// echo "Should unset now!
";
unset($arrzonegroups[$thisCoord]['Member'][$arrzoneplayers[$curzoneplayerid]['Rincon']]);
}
}
}
}
if (function_exists('IPSLogger_Dbg'))
{ IPSLogger_Dbg(__file__ , "== Line ".__line__." == " .
"We are coord " . $curzoneplayerid . "AKA " . $curCoord
);}
}
br_ips_1.5.1.zip (13.6 KB)
br_ips_1.5.7PRE.zip (38.5 KB)