PHP Skript auf Webserver übergibt keine korrekten Parameter mehr seit IPS4.0

Guten Morgen,

ich habe ein PHP Skript im user Verzeichnis liegen, welches ich (für die Anwesenheitserkennung) mit dem Browser aufrufe.

Vereinfacht dargestellt für Fehleranalyse:

Aufruf im Browser:
http://SERVER:PORT/user/android.php

Inhalt von android.php:
setvalue(37497,„1“);

37491 ist eine Boolean Variable in IPS

Egal, ob mit setvalue 0 oder 1 übergeben wird, in IPS aktualisiert sich die Variable immer auf den Wert 0. :mad:
Mit IPS 3.2 funktionierte dies jedoch einwandfrei.

Hat jemand eine Idee woran das liegen könnte?

Danke!

Moin,
hast du es mal mit

setvalue(37497, true);

versucht?

In Klammern ist doch eigentlich ein String oder nicht!?

Gruß,
Peter

Das alles geht:


setvalue(37497,true) ; 
setvalue(37497,1) ; 
setvalue(37497,"True") ; 
setvalue(37497,"1" > 0) ; 

Du hast aber Recht, dass dies eine Inkonsistenz ist zur 3.4. Habe ich notiert.

paresy

Sorry, die Hochkommas müssen natürlich weg… dann funktioniert es direkt auch.
Die sind mir bei der Fehleranalyse reingerutscht.

Das eigentliche Problem, das der Bool-Parameter nicht korrekt übergeben wird ist jedoch noch vorhanden:

http://SERVER:PORT/user/android.php?b=Anw_S3&level=0

Egal, ob level 0 oder 1 bzw. true oder false, in IPS aktualisiert sich die Bool Variable immer auf den Wert 0.

Bei Übergabe in eine Integer Variable funktioniert es jedoch korrekt!

Ja, das liegt daran, dass der Parameter ein Integer ist. Caste den Wert mal mit (int) explizit auf Integer :slight_smile:

paresy

Mit
$level = (boolean) $level;
funktioniert es jetzt aus dem Browser aufgerufen wieder.

Leider aber immer noch nicht wenn ich es aus der Tasker App aufrufe.

Unter IPS 3.2 funktionierte es mit folgenden Tasker Parametern:

HTTP Post
Server:Port: http://SERVERNAME:PORT
Pfad: /android.php
Data/File: b=Anw_S2 level=1

Die android.php musste ich für IPS4 vom Ordner web in webfront/user verschieben.

Den Pfad Parameter habe ich entsprechend angepasst:
Pfad: /user/android.php

In IPS ändert sich jedoch die Variable nicht mehr.

Was hat sich am Webserver in IPS4 noch verändert, das der Aufruf aus Tasker nicht mehr funktioniert?

Danke!

Also nach stundenlangen Testen habe ich rausgefunden, das ein Skript mit einem reinen setvalue über Tasker ausgeführt wird.

Mein Skript mit Parameterübergabe jedoch nicht:


<?$b=$_GET["b"];switch ($b){case "Anw_S3":$level=$_GET["level"];setvalue(38217,$level);break;}?>

38217 ist eine Integer Variable.

Beim Aufruf über den Browser geht es wie gesagt. Was hat sich in IPS4 geändert das es über den Tasker nicht mehr funktioniert?
Das ist für mich leider essentiell wichtig und so kann ich IPS4 nicht verwenden…:mad:

Vielen Dank!!!

Die Lösung steht schon in Post 5.
Michael

@NallChan: das Problem von oben dürfte für integer eigentlich kein Problem sein.
@mrcommand: magst du mal die $level Variable dir über IPS_LogMessage ausgeben lassen? Damit wir den genauen Inhalt wissen?

paresy

Über den Browser aufgerufen (da funktioniert es):

07.03.2016 06:38:31 | 0 | Anw_S3

Über Tasker (hier funktioniert es nicht):

07.03.2016 06:39:47 | 0 |

Oh… jetzt fällt mir erst auf, du machst mit Tasker ja HTTP-Post, fragst im Script aber $_GET ab und nicht $_POST.
Michael

Ah ok! Komisch das es vor IPS4 funktionierte…
Ich habe es jetzt sowieso umgestrickt das keine Parameter mehr abgefragt werden.
Vielen Dank trotzdem!