Da man für die Abfrage die Seriennummer der Geräte wissen muss habe ich auch bei jedem Gerät eine Stringvariable mit dem Namen SNR eingefügt. Im Nachhinein könnte ich mir auch vorstellen die Seriennummer beim Device abzufragen. Vielleicht weiß jemand wie das geht.
Nachdem ich das gelesen hatte, habe ich das speziell mal für HM-Devices geschrieben. Das war mir dann doch zuviel, das händisch zu machen
<?
/*
*************************************************************************
Legt für Homematic-Instanzen die String-Variable mit der Seriennummmer an
*************************************************************************
*************************************
File : HM-Seriennummer in Variablen.php
Trigger : Runscript
Interval : Start
*/
$alleInstanzen = IPS_GetInstanceListByModuleType(3); // nur I/O Instanzen auflisten
$string = $alleInstanzen;
$newname = "Serien-Nummer"; // Name der neuen String-Variable
$instname = "HomeMatic Device"; // Welcher Instanz-Name soll gesucht werden
// Array sortieren
//asort($string);
// Array ausgeben
foreach($string AS $id)
{
$instanz = IPS_GetInstance($id);
$instanz = $instanz['ModuleInfo'];
$instanz = $instanz['ModuleName'];
if ($instanz == $instname) // Vergleich ob das Array den Instanz-Name ausgibt
{
$adresse = HM_GetAddress($id); // HM-Seriennummer ermitteln
//$adresse = substr($adresse,0,10); // HM-Seriennummer ohne Sub-Adresse(:xx)
if ( (!IPS_GetVariableIDByName($newname, $id) ) > 0) // Überprüfen ob String-Variable schon existiert, Ergebnis = NEIN
{
$newid = IPS_CreateVariable(3); // String-Variable anlegen
IPS_SetName($newid, $newname); // Name für String-Variable schreiben
IPS_SetParent($newid, $id); // Unter Parent-ID verschieben
SetValueString($newid, $adresse); // Seriennummer in String-Variable schreiben
}
else
{
$newid = IPS_GetVariableIDByName($newname, $id); // Überprüfen ob String-Variable schon existiert, Ergebnis = JA
if ( (GetValueString($newid)) != $adresse)
{
SetValueString($newid, $adresse); // Seriennummer in String-Variable schreiben
}
}
//echo "$id $instanz $adresse"."
"; // Instanzen kontrollieren
}
}
?>
Wenn einem im Nachhinein die Bezeichnung($newname) der Variable nicht mehr gefällt, dann muss man sie aber vorerst noch von Hand löschen. Das habe ich noch nicht automatisiert. Also am besten vorher überlegen, wie sie heißen soll.
Tag u. Nachtbetrieb?
Das heisst eigentlich nur, dass die am Thermostat eingestellte(programmierte) Temperatur abgesenkt wird. Aber ob man jetzt auslesen kann, ob da ein Mond oder eine Sonne auf dem Display steht?.. Ich mag es bezweifeln
@Schablone
Eigentlich bin ich ja auch nicht faul(Ich weiss schon, wie du das meinst :D), nur das Script hat den Vorteil, dass man es immer wieder laufen lassen kann, wenn man mehrere neue HM-Devices angelegt hat und spart sich dabei jedesmal die manuelle Eintragung.
Man kann es ja auch noch beliebig umbauen und erweitern, für andere „Aufgaben“ und Variablen …das war mein Hintergedanke. Wenn man einmal 100 HM-Komponenten in IPS eingebunden und mit der Konsole im Baum strukturiert hat… wer mag da schon sich durchhangeln und entsprechend viele Variablen von Hand anlegen wollen. Wenn man mehrere Fernbedienungen z.B. hat, kommt da schnell einiges zusammen.
Ich habe das Script nochmals überarbeitet und das Löschen und Umbenennen mit eingefügt (dazu hatte ich gestern Abend keine Lust mehr :D):
Aber Achtung, wenn man gelöscht hat und danach neu anlegt, ändern sich die Var-ID’s!
<?
/*
*******************************************************************************************
Erstellen, Löschen u. Umbenennen von String-Variablen mit der Seriennummmer an HM-Instanzen
*******************************************************************************************
File : HM-Seriennummer in Variablen
Trigger : Runscript
Interval : Start
*/
$newname = "Serien-Nummer"; // Name der String-Variable (beim erstmaligen ERSTELLEN)
$altname = "S-NR"; // Alternativer Name der String-Variable (beim UMBENENNEN)
$instname = "HomeMatic Device"; // Welcher Instanz-Name soll gesucht werden
$create = 1; // ERSTELLEN [Variable 1=Anlegen(Beibehalten) / 0=Löschen]
$rename = 0; // UMBENENNEN [1=JA / 0=NEIN]
if (!$create) $rename = 0; // Wenn Löschen, dann nicht gleichzeitig Umbenennen
$alleInstanzen = IPS_GetInstanceListByModuleType(3); // nur I/O Instanzen auflisten
// Array sortieren
//asort($alleInstanzen);
// Array ausgeben
foreach($alleInstanzen AS $id)
{
$instanz = IPS_GetInstance($id);
$instanz = $instanz['ModuleInfo'];
$instanz = $instanz['ModuleName'];
if ($instanz == $instname) // Vergleich ob das Array den Instanz-Name ausgibt
{
if ($create)
{
$adresse = HM_GetAddress($id); // HM-Seriennummer ermitteln
//$adresse = substr($adresse,0,10); // HM-Seriennummer ohne Sub-Adresse(:xx)
if ( (!IPS_GetVariableIDByName($newname, $id) ) > 0) // Überprüfen ob String-Variable schon existiert, Ergebnis = NEIN
{
$newid = IPS_CreateVariable(3); // String-Variable anlegen
IPS_SetName($newid, $newname); // Name für String-Variable schreiben
IPS_SetParent($newid, $id); // Unter Parent-ID verschieben
SetValueString($newid, $adresse); // Seriennummer in String-Variable schreiben
}
else
{
$newid = IPS_GetVariableIDByName($newname, $id); // Überprüfen ob String-Variable schon existiert, Ergebnis = JA
if ($rename)
{
IPS_SetName($newid, $altname); // Name für String-Variable schreiben
}
else
{
if ( (GetValueString($newid)) != $adresse)
{
SetValueString($newid, $adresse); // Seriennummer in String-Variable schreiben
}
}
}
}
else
{
$newid = IPS_GetVariableIDByName($newname, $id); // Überprüfen ob String-Variable existiert, Ergebnis = JA
IPS_DeleteVariable($newid); // String-Variablen ($newname) löschen
}
//echo "$id $instanz $adresse"."
"; // Instanzen kontrollieren
}
}
?>
@wesseli
HSC-Tool?
Was ist das? Was macht das?
Ich glaube, ich habe davon schonmal auf homematic-inside.de gelesen, mich aber nicht weiter dafür interessiert…
Genau so soll es auch sein. Man kann sich das Leben schwer machen so wie ich, oder erst mal nachdenken so wie Du. Ich habe erst im Nachhinein gesehen das die Seriennummern bereits in den Devices hinterlegt ist. Da hatte ich aber schon alles fertig.
Ich dachte zuerst darüber nach, eine Copy der „settings.xml“ zu parsen, aber das erschien mir weit aufwendiger und komplizierter. Dann habe ich in der „functionlist“ den (leider bisher undokumentierten) Befehl „HM_GetAddress“ gefunden und was „drumrum gebaut“. Was dabei raus kam, steht hier und stimmte mich erstmal zufrieden. Vorallem lässt sich das individuell weiter ausbauen und mit anderen Ideen „verknüpfen“
P.S. So, ich glaube, nun haben wir die Frage des TO ziemlich „diffusioniert“. Eventuell sollte man die Themen trennen
Sry, zman0801!