Hallo Experten,
ich habe ein Problem und finde einfach den Fehler nicht. Meine Haussteuerung soll im Urlaub ( Im Script $home genannt ) eine anderes Program ablaufen lassen als wenn ich arbeiten gehe (durch variabel $arbeit signalisiert ). Diese Variabelen setzte ich über meinen touchscreen. Die variabelen sind auch korekt im Baum gesetzt und angezeigt. Die erste Schleife $home == true ) läuft auch Fehlerfrei, aber wenn die Variabele $arbeit == true ist, springt mein script nicht in diese Schleife. Hat jemand einen Tip für mich? Ich stehe echt auf dem Schlauch. Hier mein Script.
bitte setze das Script in PHP-Tags, sonst macht sich kaum jemand die Mühe, das durchzugehen, weil schlecht nachzuvollziehen ist… gerade bei längeren Scripts.
Sorry für die fehlenden Tags.
$home wird automatish false wenn $arbei true ist.
Ich dachte immer es heist else if, jedenfalls funktioniert es so bei der Zeitabfrage in der $home schleife. Aber ich werde es gleich mal probieren.
Danke auf jeden fall schon mal euch alen,
ralph
Geht leider immer noch nicht.
Ich beschreibe nochmal was ich genau machen will.
Ipsymcon steuert über ein USB board eine andere Automatisation ( Honeywell) die sowohl die Heizung als auch das Licht und die Rollos steuert. Hier werden sogenannte Lifestyles hinterlegt die z.B. Räume auf bestimmet Temp halten usw. Zusätzlich soll Ipsymcon mein Multiroomsystem steuern. Alles möchte ich über meinen Touchscreen aktivieren. Hierbei verbinde ich jeweils Radiobutton mit den Variablen.
$home soll automatisch ablaufen wenn ich Zuhause bin
$arbeit soll tagsüber Geräte ausschalten und die Heizung bis abends absenken
$manuell soll die Lifestyles manuell aktivieren, bis ich sie wieder ausschalte (also ohne Zeitprogram)
Die Funktion manuel und home gehen, nur die tagabsenkung (2.Schleife) wird nicht angesprungen obwohl $home auf true steht und $arbeit auf false.
Hat noch jemand einen Tip?
ralph
Meinst du den zweiten Teil deiner ersten if-Bedingung, also unter „/* Tagabsenkung */“?
Schleifen sind was anderes…
Woran erkennst du, dass PHP dort nicht hinkommt? Schreib da mal direkt einen Debug-Code rein, ohne irgendeine andere Bedingung auf die Zeit.
Wolltest du das nicht genau andersherum? Also wenn $home auf true steht und $arbeit auf false dann der erste Teil?
Eine Kleinigkeit, die mir noch aufgefallen ist: ($time >= „05:55“ and $time <= „006:00“)
Das ist nie wahr, denn die Stunde kann nie >= 05 und gleichzeitig <= 00 sein.
Was triggert eigentlich das Script?
Das Setzen der Variablen oder wird es zyklisch getriggert?
Sollen die Zeiten durch „else if“ tatsächlich voneinander abhängig sein, oder soll gerade DAS ausgeführt werden, was in einer angegebenen Zeitspanne liegt… unabhängig von anderen?
Hallo Stefan,
also das mit der Zeit ist wirklich blöd von mir, danke, schon behoben. Also wenn $home true ist, wird der erste teil angesprungen, das funktioniert auch. Und wenn $arbeit true ist ist $home automatisch false und es soll auf den zweiten teil gesprungen werden „Tagabsenkung“, das geht nicht. Ich sehe nur dass es nicht angsprungen wird, da keine Variabele in den Meldungen geändert wird. Da ich gerade erst mit php und Ipsymcon angefangen habe, kenne ich den debug mode nicht. Kannst Du mir das kurz erklären?
Ich triggere das script wenn $manuel == false ist und dann alle 2 minuten zyclisch, daher diese Zeitbereiche. Dann schaltet das USB Board mit der ttl Flanke von low nach high meine andere Haussteuerung. Das funktioniert wie gesagt auch beim ersten teil des scripts und im Manuellen modus.
Icxh bin echt ratlos warum der zweite teil nicht angesprungen wird.
Danke für die rege Hilfe,
Ralph
Hallo Ralph um Fehler in Scripten zu finden sollte man diese zur Erprobung ersteinmal kürzen um diese selber besser zu verstehen und um die Errorquelle zu lokalisieren.
Das ist quasi was Du willst:
Ich glaube aber nicht das bei Dir diese Bedingung erfüllt wird und darum solltest Du in den zweiten Block (der mit Arbeit == true) erstmal alles andere rausnehmen und eine Debugvariable schreiben(quasi SetValue(12345, true); und prüfen ob diese in IPS geschrieben wird. Dazu im Objektbaum einen Doppelklick auf diese machen und auf Wert editiern gehen, dieses Fenster an der Seite andocken und schauen ob diese Var mit Zeitstempel angezeigt wird. Mit dieser Var kannst Du dann beim Triggern etc. rumprobieren und diese im Script immer an andere Stellen setzen um zu schauen an welche Stellen der PHP Interpreter kommt.
Im übrigen ist elseif und else if fast identisch, in Deinem Fall so ok.
danke Euch allen,
ich wedre mal den debuglevel ausprobieren. Jetzt habe ich jedenfalls genügend ansetzte zum fehler finden.
Super forum !!
Ich schreibe Euch wenn ich denb Fehler gefunden habe,
ralph