Hallo,
vielen Dank für Eure Hilfe. Ich denke, den Codeschnipsel einzufügen werde ich hinbekommen.
Leider habe ich noch ein anderes Problem. Ich benutze das Script von eservice-online zum Auslesen des Sensors. Beim ersten Ausführen (Anlegen der Variablen, etc.) erhalte ich folgenden Fehler:
Variablenprofil Betriebspannung angelegt
Notice: Undefined variable: vartype in [Hardware\1-Wire\Helligkeitssensor\Sensoren auslesen] on line 294
Hier noch das Script:
<?
/******************************************************************************
1-Wire Light Sensor (Einstrahl- und Helligkeitssensor), Auswerteskript
www.eservice-online.de
*******************************************************************************
Dieses Skript dient dazu die Spannungswerte für den 1-Wire Light Sensor
von E-Service (eservice-online.de) weitgehenst automatisch in IPS-Symcon einzurichten.
Erstellt von E-Service A. Geisler (http://www.eservice-online.de)
Version 1.0, 5-07-2011
*******************************************************************************
Nachfolgende fünf Schritte müßen Sie von Hand ausführen:
Schritt 1:
Kategorie für den 1-Wire Light + PV Sensor anlegen.
Name nach eigenen Wünschen
Schritt 2:
Ein neues Skript unterhalb der Kategorie (aus Schritt 1) erstellen.
Name nach eigenen Wünschen
Schritt 3:
Eine Instanz für den DS2438 unterhalb dieser Kategorie (aus Schritt 1) anlegen.
!!! Wichtig !!! Der Name muß lauten: 1-Wire Light Sensor (case sensitive)
andernfalls ist der Name in Zeile 73 zu ändern.
Lightsensor innerhalb der Instance zuordnen.
Wichtig, den 1-Wire Light Sensor erkennen Sie daran, dass der XSENS Wert immer 0 ist
Schritt 4:
Wenn Sie einen Helligkeitssensor haben überspringen Sie diesen Punkt
Eine Instanz für den DS2438 unterhalb dieser Kategorie (aus Schritt 1) anlegen.
!!! Wichtig !!! Der Name muß lauten: 1-Wire PV Sensor (case sensitive)
andernfalls ist der Name in Zeile 91 zu ändern.
Den PV-Sensor innerhalb der Instance zuordnen.
Wichtig, den 1-Wire PV Sensor erkennen Sie daran, dass der XSENS Wert einen Wert größer 0 hat (z.B. 0,137894)
Schritt 6:
Skript 1x per "Ausführen" starten
FERTIG !!!!!!!!
Ab jetzt wird das Skript bei einer Änderung der Variable VAD
getriggert.
*******************************************************************************/
//Hier bitte Einstellungen fuer das verwendete Modul eingeben
$modultyp = 2 ; // 1-Wire Light Sensor = 1, 1-Wire Solar Sensor = 2
//Setting Helligkeits- und Solarsensor
$tag_nacht = 10 ; // Bereich 10 - 100 Umschaltschwelle für Tag Nachterkennung
$pv_sensorabgleich = 1.0 ;
$beschattung = 900 ; // Bereich 100 - 1000 Umschaltschwelle für Steuerung einer Beschattung
// Debug-Modus an=true / aus=false
$debug = false;
$triggerintervall = 60 ; //Triggerzeit in Sekunden (Default 60)
/********************************************************************************
Ab hier nichts mehr ändern !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
********************************************************************************/
// Übergeordnete Kategorie ermitteln
$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];
// Manuelle Definition evtl. IDs
$DS2438_light = IPS_GetInstanceIDByName ( 'DS2438 1-Wire Light Sensor', $parentID );
if($debug) {echo "ID: $DS2438_light
";}
// Variablen zur Skriptverarbeitung einlesen und intern verfügbar machen
$temp_light_var = IPS_GetVariableIDByName( "Temperatur", $DS2438_light);
$VDD_light_var = IPS_GetVariableIDByName("VDD", $DS2438_light);
$VAD_light_var = IPS_GetVariableIDByName("VAD", $DS2438_light);
$XSENS_light_var = IPS_GetVariableIDByName("XSENS", $DS2438_light);
if($debug) {echo "temp:$temp_light_var
";}
if($debug) {echo "VDD: $VDD_light_var
";}
if($debug) {echo "VAD: $VAD_light_var
";}
if($debug) {echo "XSENSE: $XSENS_light_var
";}
If ($modultyp == 2)
{
//PV-Sensor
// Manuelle Definition evtl. IDs
$DS2438_pv = IPS_GetInstanceIDByName ( 'DS2438 1-Wire PV Sensor', $parentID );
if($debug) {echo "ID: $DS2438_pv
";}
// Variablen zur Skriptverarbeitung einlesen und intern verfügbar machen
$temp_pv_var = IPS_GetVariableIDByName( "Temperatur", $DS2438_pv);
$VDD_pv_var = IPS_GetVariableIDByName("VDD", $DS2438_pv);
$VAD_pv_var = IPS_GetVariableIDByName("VAD", $DS2438_pv);
$XSENS_pv_var = IPS_GetVariableIDByName("XSENS", $DS2438_pv);
if($debug) {echo "temp:$temp_pv_var
";}
if($debug) {echo "VDD: $VDD_pv_var
";}
if($debug) {echo "VAD: $VAD_pv_var
";}
if($debug) {echo "XSENSE: $XSENS_pv_var
";}
}
// Inhalt des benötigten Actionsskripts in Variable ablegen
$actionScript = "<?
if(\$IPS_SENDER == 'WebFront') {
SetValue(\$IPS_VARIABLE, \$IPS_VALUE);
}
";
// ***************** Start Erstinitialisierung *********************************
if($IPS_SENDER == "Execute") { // nur wenn bei "Ausführen"
// Variablenprofil für Betriebsspannung - Betriebspannung anlegen
//*****************************************************************
if(!IPS_VariableProfileExists('Betriebspannung')) {
IPS_CreateVariableProfile ('Betriebspannung',2);
IPS_SetVariableProfileText('Betriebspannung','',' V');
IPS_SetVariableProfileIcon ('Betriebspannung', 'Graph');
IPS_SetVariableProfileDigits('Betriebspannung', 1);
echo "Variablenprofil Betriebspannung angelegt
";
}
else {
if($debug) {echo "Variableprofil Betriebspannung besteht bereits
"; }
}
// Variablenprofil für W/m² anlegen
//*****************************************************************
if(!IPS_VariableProfileExists('Einstrahlung')) {
IPS_CreateVariableProfile ('Einstrahlung',2);
IPS_SetVariableProfileText('Einstrahlung','',' W/m²');
IPS_SetVariableProfileIcon ('Einstrahlung', 'Graph');
IPS_SetVariableProfileDigits('Einstrahlung', 0);
echo "Variablenprofil 'Einstrahlung' angelegt
";
}
else {
if($debug) {echo "Variableprofil Einstrahlung besteht bereits
";}
}
// Skript verstecken
IPS_SetHidden($IPS_SELF, true);
IPS_SetPosition($IPS_SELF, 99);
// Actionskript erzeugen (siehe function)
$ScriptID = CreateScriptByName("Aktionskript", $parentID, $actionScript);
if($debug) {echo "Actionskript angelegt
";}
//Triggerintervall für 1-Wire Lightsensor einstellen
//*****************************************************************
TMEX_SetInterval($DS2438_light, $triggerintervall); //normal 60 Sekunden
if($debug) {echo "DS2438 Lightsensor Triggerintervall programmiert
";}
If ($modultyp == 2)
{
//Triggerintervall für 1-Wire PV-Sensor einstellen
//*****************************************************************
TMEX_SetInterval($DS2438_pv, $triggerintervall); //normal 60 Sekunden
if($debug) {echo "DS2438 PV-Sensor Triggerintervall programmiert
";}
}
// Triggerbedingung/Ereignis auf 1-Wire Lighsensor für Skript erstellen falls nicht vorhanden
//*****************************************************************
$EreignisID_1 = @IPS_GetEventIDByName("VAD_light", $IPS_SELF);
if ($EreignisID_1 == 0) {
$eid = IPS_CreateEvent(0); // Ausgelöstes Ereignis
IPS_SetEventTrigger($eid, 0, $VAD_light_var); // Bei Änderung von Variable
IPS_SetParent($eid, $IPS_SELF); // Ereignis zuordnen
IPS_SetName($eid, "VAD_light"); // Ereignis umbennen
IPS_SetEventActive($eid, true); // Ereignis aktivieren
}
else { if($debug) {echo "Ereignis bereits erstellt
";} }
}
// ****************** Ende Erstinitialisierung *********************************
// ******************* Start Berechnung ****************************************
If ($modultyp == 1 or 2)
{
// 1-Wire Light Sensor
// Variablen IDs zuweisen und gegebenenfalls anlegen
$temp_light = GetValueFloat ( $temp_light_var );
$VAD_1_light = GetValueFloat ( $VAD_light_var );
$VDD_light = GetValueFloat ( $VDD_light_var );
//Kompensation von Unterspannungen der 5V
$VAD_light = (5 / $VDD_light) * $VAD_1_light ;
if ($VAD_light > 0) {
//Berechung
//******************************************************************
//Light Sensor
//***********************************************
// Variablen IDs zuweisen und gegebenenfalls anlegen
$helligkeit = CreateVariableByName($parentID, "Helligkeit", "Lux");
$Tag_Nacht = CreateVariableByName($parentID, "Tag-Nachterkennung Tag?", "OK" );
//Berechung
//***********************************************
$Helligkeit = (($VDD_light - $VAD_light) * 520) ; //Lightsensor ableich auf 1000 Lux
SetValue ($helligkeit , $Helligkeit); //Ausgabe
if($debug) { echo "Helligkeit: $Helligkeit Lux
"; } //Debug Ausgabe
//Tag-Nachterkennung
if ($Helligkeit >= $tag_nacht) {
SetValue ($Tag_Nacht , true);
if($debug) { echo "Tagbetrieb
"; } //Debug Ausgabe
}
else{ SetValue ($Tag_Nacht , false);
if($debug) { echo "Nachtbetrieb
"; } //Debug Ausgabe
}
//Betriebsspannung Modul
//***********************************************
// Variablen IDs zuweisen und gegebenenfalls anlegen
$temperatur_1 = CreateVariableByName($parentID, "Temperatur", "°C" );
$spannung = CreateVariableByName($parentID, "Betriebsspannung", "V" );
$spannung_OK = CreateVariableByName($parentID, "Betriebsspannung OK", "OK" );
//Ausgabe Temperatur
SetValue ($temperatur_1 , $temp_light);
//Ausgabe Betriebsspannung Modul
SetValue ($spannung , $VDD_light);
// Grenzwerte für Gut-Erkennung
$Grenzwert_5V = 4.50; //Schaltschwelle 4,5V
if ($VDD_light >= $Grenzwert_5V) {
SetValue ($spannung_OK , true);
if($debug) { echo "Betriebsspannung ist o.k.
"; } //Debug Ausgabe
}
else{
SetValue ($spannung_OK , false);
if($debug) { echo "Betriebsspannung zu gering!!
"; } //Debug Ausgabe
}
}
}
If ($modultyp == 2)
{
// PV-Sensor
//*********************************************************************
// Variablen IDs zuweisen und gegebenenfalls anlegen
$temp_pv = GetValueFloat ( $temp_pv_var );
$VAD_pv = GetValueFloat ( $VAD_pv_var );
$XSENS_pv = GetValueFloat ( $XSENS_pv_var );
$VDD_pv = GetValueFloat ( $VDD_pv_var );
// Variablen IDs zuweisen und gegebenenfalls anlegen
$einstrahlung = CreateVariableByName($parentID, "Einstrahlung", "W/m²");
$beschattung_var = CreateVariableByName($parentID, "Beschattung aktive?", "Active" );
//Kompensation von Unterspannungen der 5V
$VAD_pv_1 = (5 / $VDD_pv) * $VAD_pv ;
if ($VAD_pv_1 > 0)
{
//Berechung PV-Sensor
//******************************************************************
$leistung = (($VAD_pv_1 * $XSENS_pv) * 2000) * $pv_sensorabgleich ; //Grundabgleich auf 1000 Lux
SetValue ($einstrahlung , $leistung); //Ausgabe Einstrahlung
if($debug) { echo "Einstrahlung: $leistung W/m²
"; } //Debug Ausgabe
//Beschattungssteuerung
if ($leistung >= $beschattung) {//$beschattung
SetValue ($beschattung_var , false);
if($debug) { echo "Beschattung aktive
"; } //Debug Ausgabe
}
else{ SetValue ($beschattung_var , true);
if($debug) { echo "Keine Beschattung notwendig
"; } //Debug Ausgabe
}
}
}
// Ende Berechnung
// ****************************************************************************
// Funktionen
// Variablen erstellen falls nicht vorhanden und ID entsprechend zuordnen
function CreateVariableByName($id, $name, $type) {
global $IPS_SELF;
global $ScriptID;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid === false) {
//$vartype = 1; // $vartype: Boolean=0, Integer=1, Float=2, String=3
if ($type == '°C') $vartype = 2;
if ($type == 'W/m²') $vartype = 2;
if ($type == 'Lux') $vartype = 2;
if ($type == 'V') $vartype = 2;
if ($type == 'OK') $vartype = 0;
$vid = IPS_CreateVariable($vartype);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
if ($type == '°C') {
IPS_SetVariableCustomProfile ($vid, "~Temperature");
IPS_SetPosition($vid, 6); }
if ($type == 'V') {
IPS_SetVariableCustomProfile ($vid, "~Volt");
IPS_SetPosition($vid, 8); }
if ($type == 'Active') {
IPS_SetVariableCustomProfile ($vid, "~Switch");
IPS_SetVariableCustomAction($vid, $ScriptID);
IPS_SetPosition($vid, 10); }
if ($type == 'OK') {
IPS_SetVariableCustomProfile ($vid, "~Alert.Reversed");
IPS_SetVariableCustomAction($vid, $ScriptID);
IPS_SetPosition($vid, 12); }
if ($type == 'W/m²') {
IPS_SetVariableCustomProfile ($vid, "Einstrahlung");
IPS_SetPosition($vid, 14); }
}
return $vid;
}
// Eine Function um ein Script im Script-Verzeichnis zu erzeugen
// erstellt von hirschbrat, angepasst wgreipl
function CreateScriptByName($ScriptNAME, $ParentID, $ScriptTEXT)
{
global $IPS_SELF;
$ScriptID = @IPS_GetScriptIDByName($ScriptNAME, $ParentID);
if ($ScriptID == 0){
$ScriptID = IPS_CreateScript(0);
IPS_SetName($ScriptID, $ScriptNAME);
IPS_SetParent($ScriptID, $ParentID);
IPS_SetInfo($ScriptID, "This script was created by: #$IPS_SELF#");
$fh = fopen(IPS_GetKernelDir()."scripts\\".$ScriptID.".ips.php", 'w') or die("can't open file");
fwrite($fh, $ScriptTEXT);
fclose($fh);
$ScriptPath = $ScriptID.".ips.php"; //Skriptdatei
IPS_SetScriptFile($ScriptID, $ScriptPath);
IPS_SetHidden($ScriptID, true);
IPS_SetPosition($ScriptID, 50);
// echo "Die Skript-ID lautet: ". $ScriptID;
}
return $ScriptID;
}
?>
Der Variablen „Helligkeit“ wird auch kein Profil „Lux“ zugeordnet. Wo ist der Fehler in der Syntax ???
Gruß Proxima