1-Wire Solar- Helligkeits- Tempsensor -- Ausgabe in Lux

Hallo,

ich habe einen „1-Wire Solar- Helligkeits- Tempsensor“ von eservice-online. Ausserdem nutze ich das Auswertescript aus dessen Downloadbereich.
Mit dem Script bekomme ich zwar einen Helligkeitswert, dieser liest aber auch NUR den Helligkeitssensor aus (Begrenzung bei ca. 2700 Lux). Für den restlichen Helligkeitsbereich (lt. Beschreibung bis 50.000 Lux) soll (so mein Verständnis) der PV-Sensor her halten. Doch für diesen wird nicht die Helligkeit in Lux, sondern die Globalstrahlung in W/m² ausgegeben. Ich brauche aber, wie in der Beschreibung angegeben, die Helligkeit in Lux bis 50.000 Lux.

Wie bekomme ich nun den Helligkeitswert ??? Umrechnen W/m² nach Lux, oder kann der Helligkeitswert aus den VAD oder VDD Werten des Sensors abgeleitet werden ??? Und vor allem WIE ???

Gruß Proxima

Hallo,

benutzt keiner diesen Sensor ???

Gruß Proxima

Umrechnen. Die Spannung zum Verhältnis der Helligkeit. Hab jetzt die Werte nicht im Kopf, aber das müsste ja in der Beschreibung vom Sensor stehen.

Muss ich mal nachsehen, kann aber ein bißchen dauern.

Gruß Manfred

Gesendet von meinem C6603 mit Tapatalk

Näherungsweise so bei mir im Einsatz:



<?
$helligkeit=getvalue(35075 /*[Energie\Photovoltaik\Einstrahlung\Helligkeit]*/);
$wm=getvalue(32834 /*[Energie\Photovoltaik\Einstrahlung\Einstrahlung]*/);
$convert_factor=130; //130 lux entsprechen 1W/m2 im Freiland

$lux=$wm*$convert_factor;
	if ($helligkeit > $lux) {
		setvalue(19187 /*[Energie\Photovoltaik\Einstrahlung\Lux]*/,$helligkeit);
	}
	else {
		setvalue(19187 /*[Energie\Photovoltaik\Einstrahlung\Lux]*/,$lux);
	}
?>


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

Ich bekomme bei dem Ding nicht mal Daten … alles bleibt auf 0

Was mach ich denn da falsch ??
Im Konfigurator finde ich den „DS2438 Temperature, A/D“

Kannst Du mal bitte deinen Objektbaum zeigen. Müssen da jetzt 2 Instanzen für angelegt werden ?

OK, im 1-Wire-Viewer kommt auch nix an…

Baustein defekt ? oder kann was im Netz nicht i.O. sein ?