+ Antworten
Ergebnis 1 bis 8 von 8
  1. #1
    Registriert seit
    Sep 2013
    Beiträge
    117

    Standard Welche Schleife muss ich nutzen und wie????

    Hallo zusammen,

    ich möchte gern folgendes realisieren, aber mir fehlt die nötige php-Erfahrung:

    Ich habe 5 Türen (HM-Türkontakte).
    Nun möchte ich bei einem Ereignis das mir eine push Nachricht gesendet wird, welche Türen alle offen sind.

    Überlegt habe ich mir, das wenn das Skript ausgelöst wird, das jede Tür die STATE "true" führt, eine Variable $XY füllt. z.B.:
    Tür 1 und 3 sind offen, dann soll in
    $XY = 'Garagentor und Kellertür' stehen.
    Wenn keine Tür offen steht soll in
    $XY = 'keine' stehen
    und wenn nur Tür 1 offen steht soll in
    $XY = 'Garagentor' stehen.
    Diese Variable kann ich dann in meine funktionierende Prowl - Funktion packen.

    ABER wie programmiere ich eine "Schleife???" Die meine 5 Eingangsvariablen $T1, $T2, $T3, $T4 und $T5 auf true auswertet und dann die Variable $XY entsprechend füllt.

    Mit eine if-Schleife gehts ja glaube ich nicht, da ja auch mehrere Türen offen stehen können und dann steht immer der "letzte" Texte in $XY.

    Kann mir da einer helfen??

  2. #2
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    21,841

    PHP-Code:
    $tueren = Array();
    if(
    GetValue($var_id1))
      
    $tueren[] = "Keller";
    if(
    GetValue($var_id2))
      
    $tueren[] = "Garage";

    ....

    if(
    sizeof($tueren) == 0)
      
    $text "keine";
    else
      
    $text implode(" und "$tueren); 
    Schnell mal als Idee getippt... Müsste soweit laufen

    paresy

    PS: Für "if-Schleife" würde dich ein Informatiker ein klein wenig hauen müssen. Bitte nie wieder sagen
    Geändert von paresy (05.11.13 um 19:01 Uhr)

  3. #3
    Registriert seit
    Sep 2013
    Beiträge
    117

    Hallo, danke für die Antwort.

    Ich habe das mal wie folgt abgetippt:

    PHP-Code:
    <?
    $var_id1 
    GetValueBoolean(48136 /*[Geräte\Sensoren\Türschalter\Sen_Tor_Garage\STATE]*/);
    $var_id2 GetValueBoolean(28320 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Garage\STATE]*/);
    $var_id3 GetValueBoolean(50609 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Garten\STATE]*/);
    $var_id4 GetValueBoolean(32321 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Keller\STATE]*/);
    $var_id5 GetValueBoolean(56097 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Wohnung\STATE]*/);

    $tueren = Array();
    if(
    GetValue($var_id1))
      
    $tueren[] = "Garagentor";
    if(
    GetValue($var_id2))
      
    $tueren[] = "Garagentür";
    if(
    GetValue($var_id3))
      
    $tueren[] = "Gartentür";
    if(
    GetValue($var_id4))
      
    $tueren[] = "Kellertür";
    if(
    GetValue($var_id5))
      
    $tueren[] = "Wohnungstür";

    if(
    sizeof($tueren) == 0)
      
    $text "keine";
    else
      
    $text implode(" und "$tueren);

    echo 
    $text;


    ?>
    leider kommt folgende Fehlermeldung mit der ich erstmal nichts anfangen kann:

    IPS-Err-PHP 2013-11-05 19:29:43.469 Warning: Variable #0 existiert nicht Error in Script C:\IP-Symcon\scripts\16898.ips.php on Line 9 133 in IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out) 37 in IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHa ndler.inc.php (call IPSLogger_Err) in IPSLogger_PhpErrorHandler 9 in 16898.ips.php (call GetValue)

    Warning: Variable #0 existiert nicht in C:\IP-Symcon\scripts\16898.ips.php on line 9
    IPS-Err-PHP 2013-11-05 19:29:43.481 Warning: Variable #0 existiert nicht Error in Script C:\IP-Symcon\scripts\16898.ips.php on Line 11 133 in IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out) 37 in IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHa ndler.inc.php (call IPSLogger_Err) in IPSLogger_PhpErrorHandler 11 in 16898.ips.php (call GetValue)

    Warning: Variable #0 existiert nicht in C:\IP-Symcon\scripts\16898.ips.php on line 11

    ...



    PS. Sorry für die if- .... => das hätte ich zumindest wissen sollen!

  4. #4
    Registriert seit
    Sep 2013
    Beiträge
    117

    Ahhhh, schon selbst gemerkt,
    die oberen Zeilen sind doppelt gemoppelt.....

    so macht es Sinn:

    PHP-Code:
    $var_id1 = (48136 /*[Geräte\Sensoren\Türschalter\Sen_Tor_Garage\STATE]*/);
    $var_id2 = (28320 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Garage\STATE]*/);
    $var_id3 = (50609 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Garten\STATE]*/);
    $var_id4 = (32321 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Keller\STATE]*/);
    $var_id5 = (56097 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Wohnung\STATE]*/); 
    Erlaube mir aber noch eine Frage:

    Was macht dieser Befehlsblock (für Unwissende in klartext):

    PHP-Code:
    $tueren = Array();
    if(
    GetValue($var_id1))
      
    $tueren[] = "Garagentor"

  5. #5
    Registriert seit
    Oct 2010
    Ort
    Paderborn
    Beiträge
    2,324

    Leeres Array anlegen;

    Wenn Wert von variablen wahr ist

    Dann

    die Zeichenkette "..." als Element dem Array hinzufügen;

    Gruß

    Burkhard
    HM per RaspberryMatic | EKM-868 | LGS-868 | 1 Wire | Fibaro Motion Sensor & Aeon Labs Z-Stick S2 | SONOS | Denon AVR 3312 | Vu+ Ultimo 4K | Sony KD-75XE9405 | Fritzbox 6360 | AXIS 1344-E | Echo Dot + Show | Vaillant eBUS | Intel NUC i3 | IPS V5.3 Beta

  6. #6
    Registriert seit
    May 2011
    Ort
    Dortmund
    Beiträge
    200

    Hallo zusammen,

    ich stehe grade vor einem ähnlichen Problem. Ich frage bei meinen Fenstern zwei Stellungen bzw. drei
    Stellungen ab. 0= geschlossen 1= Kippstellung 2= geöffnet


    Zur Zeit sieht die Auswertung so aus
    PHP-Code:
    if (sizeof($Fenster) == 1)
      
    $text implode(" und "$Fenster);
    else
      
    $text implode(" und "$Fenster);
      
    if (
    sizeof($Fenster) == 2)
      
    $text implode(" und "$Fenster); 
    .
    Da ich kein php experte bin habe ich keine Idee für einen Lösungsansatz wie man eine Unterscheidung hinbekommen kann das Angezeigt wird welche Fenster auf Kippe oder geöffnet ist . Hintergrund ist ich möchte eine Meldung erzeugen die mir bei Verlassen des Hauses angezeigt welches Fenster offen bzw. welches auf Kippe steht.
    EIB-KNX mit Hager Gateway, Raspberry PI3, 2x 22Zoll Touchscreen (Iiyama ProLite T2250MTS), FritzBox, Qnap,

  7. #7
    Registriert seit
    Nov 2010
    Ort
    Dreieich (Hessen)
    Beiträge
    704

    Also erst mal machst Du im IF und im ELSE Zweig das gleiche, das ist irgendwie unsinnig ...

    Aber entweder habe ich es falsch verstanden oder mangels Zeit in pseudo ungetestetem Code sollte das ganze für ein einzelnes Fenster

    PHP-Code:
    switch (sizeof($fenster)) {
        case 
    0:
            
    $text $Fenster " geschlossen"
            break;
        case 
    1:
            
    $text $Fenster " Kipp"
            break;
        case 
    2:
            
    $text $Fenster " geöffnet"
            break;

    helfen ...

    Warum auch immer sizeof($fenster) und nicht der Inhalt der Variable selbst ...
    router: fritz!box 7270v3 inkl. OS X / Win / 2x I-Phone + iPad VPN, fritz!box 7050 ISDN asterisk PBX
    macMini Server 24/7 WinXP Prof. 32bit IP-Symcon Parallels 6 VM / Kerio I-Phone Push, IPS I-Phone App
    Hardware: HM CCU (6x Heizung + Fensterkontakte + Außenthermostat) / 3x AudioMax + 12 Lautsprecher
    ips v2.70#2731 Unlimited / touch: iPad 2 (Wandhalterung + 23' TouchScreen kommt noch ...)

  8. #8
    Registriert seit
    May 2011
    Ort
    Dortmund
    Beiträge
    200

    Nein Das ist für 15 Fenster
    PHP-Code:
    <?

     
    //Ablauf beim Verlassen


     // Zustände Fenster EG Einlesen
    $Fenster_1 = (29677 /*[KNX\Fenster\Skripte\Wohnzimmerfenster 1\Wohnzimmerfenster 1]*/);
    $Fenster_2 = (33535 /*[KNX\Fenster\Skripte\Wohnzimmerfenster 2\Wohnzimmerfenster 2]*/);
    $Fenster_3 = (32354 /*[KNX\Fenster\Skripte\Wohnzimmerfenster 3\Wohnzimmerfenster 3]*/);
    $Fenster_5 = (42044 /*[KNX\Fenster\Skripte\Küchenfenster 1 (Garten)\Küchenfenster 1]*/);
    $Fenster_6 = (12622 /*[KNX\Fenster\Skripte\Küchenfenster 2 (Strasse)\Küchenfenster 2]*/);
    $Fenster_7 = (13041 /*[KNX\Fenster\Skripte\Bürofenster\Bürofenster]*/);
    $Fenster_8 = (38403 /*[KNX\Fenster\Skripte\Gäste WC\Fenster Gäste WC]*/);
    $Fenster_9 = (21816 /*[KNX\Fenster\Skripte\Fenster HWR\Fenster HWR]*/);
    $Fenster_4 = (27253 /*[KNX\Fenster\Kippstellung\Wohnzimmer Schiebetür\Value]*/);
    $Fenster_EG_alle = (33718 /*[Sonstiges\Makros\Fenstermeldung EG\Status der Fenster im EG]*/);

    // Zustände Fenster OG Einlesen
    $Fenster_10 = (39319 /*[KNX\Fenster\Skripte\Fenster Badezimmer gross\Fenster Badezimmer gross]*/);
    $Fenster_11 = (43635 /*[KNX\Fenster\Skripte\Zimmerfenster Luisa\Zimmerfenster Luisa]*/);
    $Fenster_12 = (13049 /*[KNX\Fenster\Skripte\Schlafzimmerfenster  links\Schlafzimmerfenster links]*/);
    $Fenster_13 = (37588 /*[KNX\Fenster\Skripte\Schlafzimmerfenster rechts\Schlafzimmerfenster rechts]*/);
    $Fenster_14 = (12245 /*[KNX\Fenster\Skripte\Zimmerfenster Lucas\Zimmerfenster Lucas]*/);
    $Fenster_15 = (13716 /*[KNX\Fenster\Skripte\Zimmerfenster Noah\Zimmerfenster Noah]*/);
    $Fenster_OG_alle = (34900 /*[Sonstiges\Makros\Fenstermeldung OG\Status der Fenster im OG]*/);


    $Fenster = array();

    if(
    GetValue($Fenster_1))
      
    $Fenster[] = "Wohnzimmerfenster 1";
    if(
    GetValue($Fenster_2))
      
    $Fenster[] = "Wohnzimmerfenster 2";
    if(
    GetValue($Fenster_3))
      
    $Fenster[] = "Wohnzimmerfenster 3";
    //if(GetValue($Fenster_4))
    //  $Fenster[] = "Schiebetür";
    if(GetValue($Fenster_5))
      
    $Fenster[] = "Küchenfenster zum Garten";
    if(
    GetValue($Fenster_6))
      
    $Fenster[] = "Küchenfenster zur Straße";
    if(
    GetValue($Fenster_7))
      
    $Fenster[] = "Fenster Büro";
    if(
    GetValue($Fenster_8))
      
    $Fenster[] = "Fenster Gäste WC";
    if(
    GetValue($Fenster_9))
      
    $Fenster[] = "Fenster HWR";
    if(
    GetValue($Fenster_10))
      
    $Fenster[] = "Fenster Badezimmer";
    if(
    GetValue($Fenster_11))
      
    $Fenster[] = "Fenster Luisa";
    if(
    GetValue($Fenster_12))
      
    $Fenster[] = "Fenster Schlafzimmer links";
    if(
    GetValue($Fenster_13))
      
    $Fenster[] = "Fenster Schlafzimmer rechts";
    if(
    GetValue($Fenster_14))
      
    $Fenster[] = "Fenster Lucas";
    if(
    GetValue($Fenster_15))
      
    $Fenster[] = "Fenster Noah";

    if (
    sizeof($Fenster) == 1)
      
    $text implode(" und "$Fenster);
    else
      
    $text "keins";
      
    if (
    sizeof($Fenster) == 2)
      
    $text2 implode(" und "$Fenster);
    else
      
    $text2 "keins";

    echo 
    "Auf kippe $text und geöffnet $text2;




    ?>
    EIB-KNX mit Hager Gateway, Raspberry PI3, 2x 22Zoll Touchscreen (Iiyama ProLite T2250MTS), FritzBox, Qnap,

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 23.06.13, 20:41
  2. Antworten: 5
    Letzter Beitrag: 25.02.10, 16:17
  3. Hoppe Türgriff und welche Einheit benötige ich ?
    Von brdiver677 im Forum EnOcean
    Antworten: 11
    Letzter Beitrag: 10.12.09, 13:24
  4. Antworten: 16
    Letzter Beitrag: 14.12.08, 19:14
  5. Was muss ich beachten?
    Von Softsphere im Forum Allgemeine Diskussion
    Antworten: 20
    Letzter Beitrag: 28.04.06, 11:13