Software oder Script ?

und schon wieder eine gute idee. licht entweder per handsender einschalten oder per bewegungsmelder … es gibt sooooo viele möglicheiten.
aber erstmal werde ich versuchen meinen verstärker per rs232 zu steuern und dann muss ich sehen ,dass ich einen ordentlichen rechner als server kriege.

Ja, Bewegungsmelder. Die FS20 Module haben ja bekanntlich 2Kanal oder 4Kanal Betrieb. Die Erfahrung hat mir jedoch jetzt gezeigt, das 4 Kanal zwar mehr ausbeutbar ist, jedoch Nachteile mit sich bringt, da die IPS Software (Ich denke auch die anderen) Probleme mit der Swap-Funktion haben, klare Zustände der lampe (des Schalters) zu erkennen. So kann z.B. mit Swap eine Lampe eingeschaltet werden, doch ein Timer sie wieder ausschalten. Doch die Variable der Lampe im Computer bleibt auf „True“.
Doch genau das kann mit 2Kanal (True und False-Erkennung) verhindert werden. Deshalb habe ich jetzt alle Schalter im Haus auf 2 Kanal umgeschaltet, user freundlich mit BERKER Schalter 503404 ausgestattet. Taster nach oben drücken, „ein“, nach unten drücken „Aus“.
Nur der PIRI will seinen Status nicht auf False zurück setzen, das muss man mit IPS erledigen. Und genau hier lag mein Problem, um den PIRI stumm zu halten, solange die Lampe mit Schalter betrieben wurde.

Naja, kleines Problem, viel Text dazu. Naja, kann nicht schlecht sein für Newbies. War auch einer 3 Wochen zuvor. BIn zwar noch Anfänger, jedoch fortgeschrittener Anfänger ! :smiley:

wenn ich in 3 wochen so weit bin, wäre ich schon mal zufreiden :wink:

ich habe meinen handsender auf 8 kanal betrieb gestellt von 4 kanal. macht das denn sinn ? ich wollte nur eine taste ein eine aus auf eine steckdose senden. das gint nur indem ich 8 tasten definiere und jede einzelne in ips bekanntgebe und ihr eine variable zuordne.
gibt es eine kurze anleitung wie man das am besten macht ?

danke, frank

Im 8 Kanal Modus arbeiten die Kanäle im SWAP Modus. Das heisst einfah nur „Umschalten“. Richtig „Einschalten“ und „Ausschalten“ wirst du nur mit 2 Tasten pro Funktion erreichen. Also auch das richtige Schalten der zugehörigen Variable in IPS

nur wie genau richte ich 2 schalter auf einer variable ein ??

Das erfolgt automatisch. Linke taste auf FB ist OFF uind rechte wird ON, nachdem du eine Adresse für das Tastenpaar zugewiesen hast

Hi,

also ich habe meine Fernsteuerungen alle auf doppelter Kanalanzahl liegen - schließlich kann ich dann aus einer 10er Fernbedienung den „Master of disaster“ machen, da ich 20 verschiedene Sachen darauf programmieren kann.

Beim Drücken einer Taste unterscheided FS20 wie folgt (zumindest bei der FS20 S20):

  • kurz drücken schaltet Value auf true (oder false) und die Data-Variable der Taste auf 18
  • lang drücken schaltet Value auf true (oder false) und die Data-Variable auf 21

Das getriggerte Skript fragt erstmal ab, ob die Taste auf True getriggert wurde, falls die Taste auf False steht, passiert nichts (sonst wär da wieder ne schöne Endlosschleife!).
Danach wird per Skript die Taste erstmal wieder auf false gesetzt und bei data=18 wird z.B. eine Lampe auf Timer-On für xx Minuten geschaltet (falls beim letzten Mal auch schon der Timer gesetzt wurde, wird dieser um xx Minuten verlängert) und bei data=21 wird die Lampe auf Dauer-On gestellt, falls die Lampe schon an war, wird sie ausgeschaltet.
Alle Daten schreibe ich mir zusätzlich in Zwischenvariablen.
Wenn das nächste Mal getriggert wird, passiert natürlich genau das selbe (also Timer-On oder Timer verlängern - oder On oder OFF)

Und das alles mit nur einer Taste.

Beispiele:

  1. Lampe ist aus, Taste kurz gedrückt -> Lampe geht für 30 Minuten an
  2. Lampe ist an (seit 10 Minuten auf Timer für 30 Minuten geschaltet) -> Lampe bleibt weitere 30, also insg. noch 50 Minuten an.
  3. Lampe ist an (Timer oder Dauer an), Taste lange gedrückt -> Lampe geht aus, Timer für Lampe aus wird gelöscht (auf 0 gesetzt)
  4. Lampe ist aus, Taste wird lange gedrückt -> Lampe geht auf Dauer-An

Das Skript hat mich ca. 5 h gekostet und hat leider immernoch Probleme:

  • Lampe durch „Frau“ direkt an der Steckdose eingeschaltet (und IPS weiß nix davon). Das kriege ich aber einmal pro Nacht durch ein Notaus-Skript wieder synchronisiert)
  • leider ist das Skript absolut untauglich für direkte Adresscodierung (Taste und Lampe gleich) und funktioniert nur, wenn der PC auch funktioniert :smiley:

Falls jemand 'ne zündende Idee hat, wie man die Probleme elegant los wird, immer her damit.

Gruß

cAtMaX

PS: Skript ist leider nicht wirklich zur Veröffentlichung geeignet - zum einen benutze ich nie Instance-IDs, sondern immer Variablen an der Stelle, zum anderen habe ich sehr viele Zusatzvariablen, die noch nicht wirklich supersprechende Namen haben :wink:

Ok, ich versuchs trotzdem mal mit der Veröffentlichung…vielleicht versteht ja jemand meine Logik :smiley: (glaub aber eher nicht)

Ist vielleicht nicht das schönste Skript, funktioniert aber bei mir


<?
 /*
*******************************
IP-SYMCON Event Scripting
*******************************
Trigger: Taste1.Data, Taste1.Status

*/


/*Externe Variablen
Flurlicht_oben.firsttimer - Integer
Flurlicht_oben.lastswitch - Integer
*/
$timer=30 * 60; //Angabe in Sekunden!
$zeit = time();

//Trigger des Skripts ausfindig machen
$trigger = "none";
if (isset($IPS_VARIABLE)) {
   $trigger = $IPS_VARIABLE;
}
//Skript beenden, wenn durch sich selbst getriggert (oder durch sehr langes Tastenhalten)
if(GetValueBoolean("Taste1.Status") == false) {
   if ($trigger == "Taste1.Data") {
      if(GetValueInteger("Taste1.Data") == 18) {
         exit;
      }
   }
}

//Skript nur ausführen, wenn es nicht in der letzten Sekunde gelaufen ist
//Damit kann man dann endlich mal zwischen data=18 und data=21 unterscheiden, ohne
//dass das skript permanent dazwischenfunkt ;-)
$lastrun = GetValueInteger("Flurlicht_oben.lastswitch");
$timediff = $zeit - $lastrun;
if ($timediff <= 1 ) {
//   SetValueInteger("Flurlicht_oben.lastswitch", $zeit);
   if(GetValueBoolean("Taste1.Status") == true) {
     SetValueBoolean("Taste1.Status",false);
   }
   exit;
}

//Wenn über Taster getriggert anschalten bzw zeit verlängern oder ausschalten


  if(GetValueBoolean("Taste1.Status") == true) {
      if (GetValueInteger("Taste1.Data") == 18) {
         //kurz gedrückt -> Timer-Event
         echo "Flurlicht oben + 30 Minuten an.";
         $altertimer = IPS_GetScriptTimer("Flurlicht_oben_OFF");
         $alteuhrzeit = GetValueInteger("Flurlicht_oben.firsttimer");
         $timerrest = time() - $alteuhrzeit;
         $timerrest2 = $altertimer - $timerrest;
         if (GetValueBoolean("Flurlicht_oben.Status") == true) {
            //Licht is schon an, also timer verlängern
            IPS_SetScriptTimer("Flurlicht_oben_OFF", $timer + $timerrest2);
         } else {
            //Licht ist aus, für 30 Minuten einschalten
            IPS_SetScriptTimer("Flurlicht_oben_OFF", $timer);
            SetValueInteger("Flurlicht_oben.firsttimer",$zeit);
         }
         FS20_SwitchMode(GetValueInteger("ID_Flurlichtoben"),true);
      }
  }

if ($trigger == "Taste1.Data") {
      if (GetValueInteger("Taste1.Data") == 21) {
         //Taste lang gedrück _> Dauer-Ein oder Dauer AUS
         if (GetValueBoolean("Flurlicht_oben.Status") == true) {
            //Licht is schon an, also aus und Timer löschen
            FS20_SwitchMode(GetValueInteger("ID_Flurlichtoben"), FALSE);
            IPS_SetScriptTimer("Flurlicht_oben_OFF", 0);
         } else {
            //Licht ist aus, also Dauer-Ein
            FS20_SwitchMode(GetValueInteger("ID_Flurlichtoben"),TRUE);
         }
      }
}
//Taste wieder auf False setzen
SetValueInteger("Flurlicht_oben.lastswitch", $zeit);
SetValueBoolean("Taste1.Status",false);

?>

Gruß

cAtMaX

Junge

…und das alles um eine Lampe mit PIRI zu schalten ???

Wenn man bedenkt was das Skript alles macht und abfängt ist das ganicht so viel.

Schon mal versucht in nem 50.000 Zeilen (netto) Code den Überblick zu behalten?

Toni

Ermmm, nee, PHP ist nicht so mein ding. Doch ich kann es mir schon vorstellen, da ich Programmierer für eine grosse Software Firma bin, die Software entwickelt für Roboter-Ärme (FANUC), Siemens S7 (SPS) , weiss ich, es gibt nicht schlimmeres als seitenweise code und keine Kommentare.