Probleme beim Zurücksetzen einer KNX-Variable mit RequestAction

Hallo zusammen,

ich hab Probleme damit, eine KNX Variable mit dem Befehl RequestAction zurückzusetzen.

Die Variable in IPS, mit der ich die KNX Variable schalten möchte, kommt aus dem iCal Modul und hat grundsätzlich den richtigen Wert. Meine KNX Variable bleibt aber auf „true“.

Folgendes Script nutze ich dafür:

<?php

if (35367 == true) 	{                                                                                // Papiertonne wird laut iCal Modul heute geleert
             RequestAction(13888, true);                 // KNX Gruppenadresse für 'Papiertonne heute' setzen                            
		         }
               else     {                                    
                RequestAction(13888, false);             // KNX Gruppenadresse für 'Papiertonne heute' zurücksetzen
             }

?>

Kann mir jemand einen Tip geben, woran das scheitert?

Danke und viele Grüße
BBK

Schritt eins: Reicht nicht ein Ereignis → Schalte Variable auf auslönden Wert?

Schritt zwei: Das If prüft ob eine Zahl true ist, das ist aber NIE der Fall. Du möchtest vielleicht ein if(GetValueBoolean(35367)) machen? Das ==true ist implizit dabei.

Anders herum:D
Eine Zahl ist immer true, außer der 0. Die ist false.
Darum wird auch immer nur ein, und nie ausgeschaltet.
Michael

Auch nicht :wink: Integer 0 ist nicht Bit 0 :wink: False entspricht einem Bit das 0 ist :smiley:
DuckUndWeg

Bitte noch mal die PHP Doku lesen :wink:
PHP vergleicht bei == keinen Typ und somit wird hier ein INT zu einem BOOL gecastet.
Somit ist alles außer 0 immer true.
Siehe hier:
image
Nur bei dem typenstarken Vergleich mit === kommt immer false raus.
image
Quelle:
https://www.php.net/manual/de/types.comparisons.php
Michael

Ok, dann ist das die Eigenart von PHP. Ich hab jetzt nur meine Erfahrung herangezogen bzw. was ich weiß. Gut, was gelernt. Danke :slight_smile:
Wobei mir persönlich niemals in den Sinn kommen würde, eine Int mit einer Bool Variable zu vergleichen. Für mich ist 0 (der Integer Wert) was völlig anderes als FALSE.

@tobiasr Ich hab es jetzt mit je einem eigenen Ereignis für ON und für OFF gelöst. Finde ich zwar jetzt nicht so elegant, aber zumindest scheint es zu funktionieren…

@Nall-chan Aber auf eine Zahl frag ich doch gar nicht ab, sondern nur auf einen boolschen Zustand? Da sollte das doch funktionieren?

Danke und viele Grüße
BBK

Dein Grundproblem ist nicht der Vergleich, sondern die fehlerhafte Abfrage. Du vergleichst die Zahl mit true.

„35367 == true“ stimmt nicht :wink:

GetValue(35367) == true sollte dir etwas mehr sinnvolles liefern ;-).

Oder noch besser GetValueBoolean(…)

Okay, jetzt hab ichs kapiert :grimacing:

Danke!

Oder doch, wie wir vorhin gelernt haben. :rofl:
Es ergibt immer true, also wahr.

Aber natürlich ist diese Abfrage hier falsch und so wie es schon @tobiasr im zweiten Beitrag und @ralf eben schrieben korrekt.
Michael