Logik Funktion für KNX

Guten Abend,

ich steh noch ganz am Anfang und hab meine KNX Anlage inzwischen soweit visualisiert.

Jetzt möchte ich die erste Logikfunktion in IPS anlegen und bin am Durchdrehen. Ich hab keine Ahnung von Scripten und
bis jetzt auch nicht von PHP.

Folgendes möchte ich realisieren ( und ich kriegs ein fach nicht hin)

Zwei Fensterkontakte ( Eingänge ), die Instanzen hab ich als KNX Switch angelegt.
Ein Ausgang für den Frostschutz der Heizung. Und das ganze als oder Gatter.

Folgendes hab ich als Script angelegt:

<?
if ((EIB_Switch(29338 /[Test\E 1]/, true) || EIB_Switch(12002 /[Test\E 2]/, true)
(
EIB_Switch(13436 /[Test\A 3]/, true);
)
?>

Kann mir jemand sagen wo mein Fehler liegt.

Hab das Forum seit Stunden durchforstet, ich komm aber einfach nicht weiter. Un d bitte so, dass es ein Anfänger versteht.

Danke und einen schönen Abend!

Joerg

Um es zu verstehen, musst du dich mit der PHP-Syntaxbeschäftigen.

Und mit den Variablen im IPS.

Ich habe kein EIB, aber ich vermute, damit „EIB_Switch(12002 /[Test\E 2]/, true)“ schaltest du.

Du möchtest aber den Zustand auswerten und etwas anderes schalten.


<?
$var1 = GetValueBoolean(29338);
$var2 = GetValueBoolean(12002);
if ($var1 || $var2)) {
EIB_Switch(13436 /*[Test\A 3]*/, true);
}
?>

Hallo Joerg,

Da die StatusVariablen deiner beiden EIB Instanzen eintragen.

Gruß

Frank

Herzlichen Dank Euch beiden.

Werde es heute Nachmiitag versuchen.

Die nächsten Fragen kommen bestimmt bald.

@ Frank: wo kann ich denn eine Übersicht über den Aufbau /die Syntax
von PHP finden?

Grüße

Joerg

Du könntest einfach meinen Link anklicken:;). Aber das ist nur eine von unendlich vielen Möglichkeiten im Internet.

Hallo nochmals,

das Skript passt jetzt zumindest von der Symntax mal. Das hab ich jetzt hinbekommen.

<?
$var1 = GetValueBoolean(16597 /[Test\E 1]/, true);
$var2 = GetValueBoolean(24141 /[Test\E 2]/, true);
if ($var1 && $var2){
EIB_Switch(18932 /[Test\A 1]/, true);
}
?>

Aber wenn ich auf Ausführen gehe kommt nachstehende Fehlermeldung:

Warning: Wrong parameter count for GetValueBoolean() in C:\IP-Symcon\scripts\42735.ips.php on line 2

Warning: Wrong parameter count for GetValueBoolean() in C:\IP-Symcon\scripts\42735.ips.php on line 3

Ich interpretiere die Meldung so, dass die ich die Eingänge falsch angelegt habe. Es handelt sich doch aber definitv um einen 1 Bit Wert, der von den Fensterkontakten ( offen oder zu ) gesendet wird.
Ich hab die Instant als EIB Switch angelegt. ( Lesen ist in IPS freigegeben und in der Tasterschnittstelle ist das lesen Flag gesetzt )

Wo liegt denn hier mein Fehler?

Danke für Eure Hilfe!

Joerg

Hast Du die Boolean-Variable genommen?

Mach doch mal 'ne Hardcopy von der Instance und nutze hier zum Schreiben den PHP-Schalter.

Gruß Helmut

Hallo Helmut,

ja die Variable ist Boolean. Die Variable bezieht sich auf die Instanzen der Eingänge E 1 und E 2.
Hab die Instanzen als EIB Switch angelegt ( nicht invertiert, wobaui da je im Moment egal ist ) und die entsprechnden
Gruppenadressen ninterlegt. Das passt soweit acuh. Die Zustände werden in der Baumansicht korrekt angezeigt und ändern sich auch, sobald ich vom Bus ein Telegramm schicke.

Sorry was meinst Du mit Hardcopy und PHP Schalter?

Grüße

Joerg

So jetzt bin ich mal ein Stück weiter.

Tut mir leid, dass ich Euch hier mit meinen Dummie Fragen auf den Nerv gehe.

Die Variablen Abfrage der Eingänge passt…

Und wie kriege ich IPS jetzt dazu, dass das Eregebnis der oder Verknüpfung auf den Bus gesendet wird. In der Instatnt ist schreiben aktiviert, angelegt ist die Instant als Boolean ( EIB Switch ). Ich hab zum Testen einen Tastsensor angeschlossen, die Eingänge werden bei den entsprechenden Variablen richtig angezeigt. Das Script hat auch keinen Syntax Fehler mehr. Aber IPS schickt mir nichts auf dem Bus.

Der Befehl ist doch SetValueBoolean, verknüpft mit der ID der Instanz. Ich hab schon alles durch, ID der Instanz, ID der variablen.

Es passiert einfach nichts. Weder in der Baumansicht von IPS noch am Busmonitor in der ETS.

Bin inzwischen echt total gefrustet.

Hallo!
Fang doch mal „klein“ an. Geht Ein-Ausschalten mit diesem Script?

EIB_Switch(32391 /*[Obergeschoß\Buero\Deckenlampe]*/,!GetValueBoolean(18063 /*[Obergeschoß\Buero\Deckenlampe\Value]*/))

Schönen Gruß:)
Egon

Moin…

… ich hoffe das Nord-Süd-Gefälle steht uns nicht wieder im Weg, aber warum machst Du es nicht so wie es Dir hier gasagt wird und schreibst Dir irgendwas hin und sagst dann der Syntax stimmt aber es kommt ne Fehlermeldung?!

Beschäftige Dich mit den Grundlagen von PHP und probiere auch das aus was Dir hier vorgeschlagen wird, schliesslich fragst Du hier nach Hilfe.

Was ralf Dir gestern geschrieben hat stimmte soweit, nur das er die falschen Variablen genommen hatte, bzw. die Instanzen. Auf den Fehler hat Dich aber fraggle aufmerksam gemacht mit seinem Post danach!

Wenn Du Dir jetzt den Post von ralf anschaust…

 <?
$var1 = GetValueBoolean(29338);
$var2 = GetValueBoolean(12002);
if ($var1 || $var2)) {
EIB_Switch(13436 /*[Test\A 3]*/, true);
}
?> 

und dann deinen PHP-Code…


<?
$var1 = GetValueBoolean(16597 /*[Test\E 1]*/, true);
$var2 = GetValueBoolean(24141 /*[Test\E 2]*/, true);
if ($var1 && $var2){
EIB_Switch(18932 /*[Test\A 1]*/, true);
}
?>

… sollten Dir die unterschiede auffallen. Ob Du Sie versteht ist was anderes, aber das Skript von ralf funktioniert, das von Dir schmeisst verständlicherweise Fehler, weil es falsch ist!

Verstehe mich bitte nicht falsch, ich helfe gerne und vorallem Neu-KNXler hier im Forum, aber wenn sich Leute hier schon die Mühe machen Dir zu antworten, dann probiere es auch mal so aus!

Gruß,
Peter

PS:

So sollte es funzen… um die Nord-Süd-Differenzen aus der Welt zu schaffen!! :slight_smile:


<?
$var1 = GetValueBoolean(16597 /*[Test\E 1]*/); // OHNE TRUE .... Du holst Dir mit GetValue den WERT der Variable ab.
$var2 = GetValueBoolean(24141 /*[Test\E 2]*/); // siehe oben!
if (($var1 || $var2) == true){
EIB_Switch(18932 /*[Test\A 1]*/, true); // Bei EIB_Switch etc. immer die INSTANZ-ID nehmen.. nicht der VARIABLEN
}
?>

Guten Morgen,

nee das nord Süd Gefälle steht uns nicht im Weg.

Kurz mal zu mir:
PHP und IPS sind für mich absolut neu.
KNX allerdings nicht. Ich mach das seit über 15 Jahren, habe in dieser zeit unzählige Projekte gebaut und programmiert / parametriet. Und die meisten dieser Projekte betreue ich auch.

Jetzt steht in drei Projekten der Austausch der alten MT 701 Tableaus an.

Und hier genau ist der Ansatz für IPS in Verbindung mit iPad oder anderen Tabs ( je nach Nutzer ).
Ich möchte es im Moment / Anfangsstudium nur für KNX nutzen. Was noch kommt kann ich nicht sagen.

Jetzt zu dieser unsäglichen Oder Verknüpfung. Ich hab den gestern 5 Stunden alle möglichen Varianten versucht, angefangen mit dem Script von Ralf und und und…

Dein Script ist für mich absolut nachvollziehbar.

Werte vom Bus lesen, Verknüpfen mit oder und das Ergebnis wieder auf den Bus senden.

Hab gerade alle nochmals gelöscht, genau nach Deiner Vorgabe aufgebaut und getestet.

Die Werte kommen korrekt in IPS an, werden in der Baumansicht auch geändert, aber da ergebnis wird leider nicht wieder auf den Bus gesendet.

Am Script kann es eigentlich nicht liegen. Aber woran dann?

Ich hab mal noch Screenshots vom Objektbaum und vom Script angehängt.

Schönen Sonntag und Danke schon Mal für Deine Unterstützung

Joerg

Hallo!

Kannst du mit den Testcenter Buttons Ein-Aus schalten?

Schönen Gruß
Egon

Bei EIB_Switch fehlt ein Komma

Hllo Egon,

ja ich kann sowohl Eingänge als den Ausgang mit denm Testcenter schalten.

Die Telegramme kommen auch auf dem Bus an. die Eingänge sehe ich im Gruppenmonitor, der Ausgang schaltet auch meine Schreibtischleuchte, die ich zu testzwecken auf dem Ausgang gelegt habe.

Hast Du eine IDee?

Grüße

Joerg

Hallo!
Nochmal: Ganz einfach-funktioniert das wenn du Ausführenbutton drückst?

 EIB_Switch(40459 /*[Heizung\Warmwasser\Zirkulationspumpe]*/, True);

Schönen Gruß
Egon

Hallo Egon,

ja das funktioniert ohne Probleme!

Die verbundene Leuchte schaltet ein

und ein zweites Script mit false zum Ausschltengeht ebenfalls

Wenn das Script funktioniert, Komma ist dann wohl da, muß es noch getriggert werden, auslösendes Ereigniss könnten Deine Variablen sein oder sekündlich.

Gruß Helmut

ah ok… jetzt wird es für mich nachvollziehbar!

Hab gerade noch das Script kopiert und die Bedingungen auf false gelegt. Ausschalten funktioniert auch!

Und die Ereignisse waren jetzt vollends einfach :wink:

Danke, danke , danke mein erstes Logikgatter funktioniert und der Sonnatg ist gerettet!!!

Euch allen einen schönen restlichen Sonntag!!!