Undefinierte Variable w_text

Hallo,

das folgende Script

<?

$richtung = GetValue(31597 /*[Smarthome\W27\Hardware\HM\Batteriebetrieb\W27-WS-BK-01\Windrichtung Grad°]*/ );

if (($richtung <  22.5) and($richtung >= 337.5)) $w_text = "Nord";
if (($richtung <  67.5) and($richtung >= 22.5)) $w_text = "Nord-Ost";
if (($richtung < 125.5) and($richtung >= 67.5)) $w_text = "Ost";
if (($richtung < 157.5) and($richtung >= 125.5)) $w_text = "Süd-Ost";
if (($richtung < 202.5) and($richtung >= 157.5)) $w_text = "Süd";
if (($richtung < 247.5) and($richtung >= 202.5)) $w_text = "Süd-West";
if (($richtung < 292.5) and($richtung >= 247.5)) $w_text = "West";
if (($richtung < 337.5) and($richtung >= 292.5)) $w_text = "Nord-West";
SetValueString(52716/*[Wetter\Windsensor\Windrichtung Text]*/, $w_text); //Zeile 14

?>

kommt immer mal wieder in völlig unterschiedlichen Zeiträumen mit der

Notice: Undefined variable: w_text Error in Script C:\IP-Symcon\scripts\40046.ips.php on Line 14 134 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out) 44 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err) 14 in scripts\40046.ips.php (call IPSLogger_PhpErrorHandler)

Fehlermeldung hoch.

Findet jemand den Fehler ?! - Ich bin mal wieder zu blöd :frowning:

Diese Bedingung trifft wohl nie ein !!


if (($richtung <  22.5) and($richtung >= 337.5)) $w_text = "Nord";

korrekt ist hier eine Oder Verknüpfung:


if (($richtung <  22.5) or ($richtung >= 337.5)) $w_text = "Nord";

oder besser gleich ganz weg:


 <?

$richtung = GetValue(31597 /*[Smarthome\W27\Hardware\HM\Batteriebetrieb\W27-WS-BK-01\Windrichtung Grad°]*/ );

$w_text = "Nord";
if (($richtung <  67.5) and($richtung >= 22.5)) $w_text = "Nord-Ost";
if (($richtung < 125.5) and($richtung >= 67.5)) $w_text = "Ost";
if (($richtung < 157.5) and($richtung >= 125.5)) $w_text = "Süd-Ost";
if (($richtung < 202.5) and($richtung >= 157.5)) $w_text = "Süd";
if (($richtung < 247.5) and($richtung >= 202.5)) $w_text = "Süd-West";
if (($richtung < 292.5) and($richtung >= 247.5)) $w_text = "West";
if (($richtung < 337.5) and($richtung >= 292.5)) $w_text = "Nord-West";
SetValueString(52716/*[Wetter\Windsensor\Windrichtung Text]*/, $w_text); //Zeile 14

?> 

if (($richtung <  22.5) or ($richtung >= 337.5)) $w_text = "Nord"; 

Das sollte das Problem lösen. Der Fall funktioniert mit AND nicht, da du ja über die Null vergleichen willst. Somit ist es nie < 22.5 UND > 337.5 :slight_smile:

EDIT: Ah. Zu langsam :smiley:

paresy

:rolleyes:

Das kommt davon wenn man immer Paste & Copy kann…

Vielen Dank euch beiden!

ist von der Struktur nicht besonders elegant :smiley:

Auch wenn Deine Assistenten den logischen Fehler gefunden haben, würde ich von solchen Kettenabfragen abraten und etwas in der Art bevorzugen (was auch fehlerresistenter ist):

function Windrose($Winkel) {
    $Segmente = array ( 'N', 'N NO', 'NO', 'O NO', 'O', 'O SO', 'SO', 'S SO', 'S', 'S SW', 'SW', 'W SW', 'W', 'W NW', 'NW', 'N NW', 'N' );
    $Step = (360 / (count($Segmente) - 1) );
    $St = ($Step / 2);
    foreach ( $Segmente as $Name ) {
        if ( $St >= $Winkel )
            return $Name;
        $St += $Step;
    }
}

Wenn Du unbedingt nur 8 Windrichtungen anzeigen willst, nimm einfach die Strings ‚N NO‘, ‚O NO‘ usw. aus dem Segmente-array raus.

Viele Grüsse
Harald

Hallo T30,

vielen Dank für die Function. Hab sie zwar noch nicht eingebaut (meine Wetterdatenbasis (wetter24) ist seit einigen Tagen weggbrochen), ist aber schon so gut wie eingebaut wenn ich wieder Daten bekomme.