Zeitverzögerung mit IPS?

Hallo,

gibt es eine Möglichkeit in IPS mit Zeitfunktionen wie Einschalt- oder Ausschaltverzögerung zu arbeiten?
Konkretes Anwendungsbeispiel wäre bei mir eine Variable für einen Zeitraum von 3 Minuten anstehen zu lassen wenn eine andere Variable aktualisiert wurde.

Grüße

z.B. mit einem Ereigniss Wie kann ich …

Besten Dank! Werde damit mal etwas testen;)

Irgendwie ist es doch nicht so selbsterklärend wenn man keine Ahnung von php hat:confused:

Wenn die Variable 14805 aktualisiert wird soll die Variable 16958 für 180 Sekunden auf true gesetzt werden. Was soll ich dann in das Skript eintragen?? Ich kann mit Sachen wie „TimerEvent“ oder $_IPS[‚SELF‘ nichts anfangen:(

Das ist hier erklärt:
Systemvariablen — IP-Symcon :: Automatisierungssoftware
Den ganzen Part ‚Grundlagen‘ in der Doku muss man einmal durcharbeiten, sonst fehlen einem elementare Zusammenhänge.
Michael

Man würde denken, daß IPS sowas einfach in einem Einzeiler lösen kann, aber dem ist nicht so.

Der Lösungsweg ist also grob gesagt, daß du mit dem oben verlinkten Script zunächst die Variable auf True setzt und einen Timer setzt, der dasselbe Script nach 180s nochmal aufruft. Das Script kann intern erkennen, von wo es aufgerufen wurde und schaltet beim zweiten Aufruf (angestossen durch den Timer) deine Variable auf false und ebendiesen Timer wieder aus.

Danke für die Lösungsansätze:)

Ich habe gehofft dass es etwas einfacher wäre.
Mit der Anleitung zu den Systemvariablen kann ich nicht viel anfangen. Ein Videotutorial wäre da vielleicht hilfreich um die Zusammenhänge mal zu verstehen.

Bisher habe ich solche Funktionen in einer WAGO SPS mit KNX gelöst. Da klickt man paar Bausteine zusammen und es funktioniert. Wollte diese Funktionen ins IPS verlagern, bleibe momentan aber besser bei SPS…

Das Problem ist einfach, dass eventgesteuerte Systeme im Allgemeinen für Menschen, insbesondere wenn sie absolut unvorbelastet sind, nicht immer leicht zu durchschauen sind.

Alle wollen immer kleine, schlanke und zuverlässige Systeme. Das hier ist die Lösung und du hast den einzig echten Nachteil grade gefunden. Um die Ecke denken müssen ist dann leider Pflicht. :rolleyes: Das ist kein „Problem“ von IPS, sondern von einer ganzen Sparte von Steuerungen, auch von Professionellen.

Gruß,

Toni

Was du vorhast klingt sehr nach dem, was das Modul Treppenhauslichtsteuerung anbietet. Vielleicht passt das ja? Dann müsstest du gar nicht coden:
SymconMisc/Treppenhauslichtsteuerung at master · symcon/SymconMisc · GitHub

Oder du machst dir ne Datei mit Hilfsfunktionen. Einfach eine Datei im Ordner Scripts anlegen mit Namen z.B. „_Hilfsfunktionen.inc.php“. Der Unterstrich sortiert dir die Datei nach vorne, damit du sie leichte wiederfindest. Das .inc soll dir sagen, dass es sich um eine sogenannte Include-Datei handelt. Du kanst sie aber auch einfach „Dingsbums.php“ nennen. Der Inhalt könnte zum Beispiel so aussehen:

    
<?PHP    
  function SwitchSeconds($VariableID, $Seconds, $Value = true)    // Welche Variable, wie lange, true oder false (true standard)
  {       
    if($_IPS['SENDER'] == "TimerEvent")        
    {            
      SetValue($VariableID, ! $Value);            
      IPS_SetScriptTimer($_IPS['SELF'], 0);       
     }         
    else         
    {            
      SetValue($VariableID, $Value);            
      IPS_SetScriptTimer($_IPS['SELF'], $Seconds);        
    }    
  } 
 ?> 

Dann brauchst du zukünftig nur noch sowas in dein Script schreiben:


<?  
  require_once('_Hilfsfunktionen.inc.php'); // einmalig oben im Script
   
  SwitchSeconds(50094, 10); // so oft du willst im ganzen Script
?>

Mit dem Autoinclude (ggf. Forensuche verwenden) kannst du dir die erste Zeile sogar sparen. Die Funktion würde im ganzen System, man sagt dazu „global“, verfügbar und du hast dir deine erste eigene IPS-Funktion erschaffen. :wink: Dann sind wir wirklich bei einer einzigen Zeile.

[FONT=arial]
Wenn IPS für jeden User alle seine kleinen Minilösungen für Spezialprobleme mitschleppen würde, würde sehr viel Power dadurch verloren gehen, dass bei jedem einzelnen Script jedes Mal wenn es ausgeführt werden soll dieser ganze Rattenschwanz mit in den Speicher geladen werden müsste. Das kostet Zeit (also dickere CPU nötig) und mehr Speicher (RAM aufrüsten). Warum also?

Gruß,

Toni[/FONT]

Wäre es meine Software, so gäbe es standardmässig eine Funktion wie die von dir dankenswerterweise gezeigte. Die braucht man doch ziemlich oft.

Bedienbarkeit. Ich konzipiere seit Anfang der 1990er kleine und große Softwaretools im Bereich Electronic Design Automation, die von den Usern sehr gelobt werden für ihre intuitive Bedienbarkeit. Und wenn ich sehe, daß viele User ratlos vor demselben Problem stehen, dann suche ich den Fehler in meiner Software. Und versuche sie so umzubauen, daß es weniger solche Stolpersteine gibt.

Für solche Anforderungen gibt es das Autoinclude. Du kannst da sehr sehr lange Scripte und ganze Funktionssammlungen hinterlegen. Es gab mal Tests und man kann damit sein System deutlich ausbremsen.

Um es auf die Spitze zu treiben könnte man daraus den Rückschluß formulieren, dass ein optimal bedienbares System auf kleiner, billiger Hardware nicht mehr lauffähig ist. Grade das finde ich aber wichtig.

[Edit]Abgesehen davon, dass mein Lösungsansatz praktisch 1:1 ja in der Doku steht, hat Dr. Niels ja zusätzlich auch eine Lösung mit quasi Nullaufwand aufgezeigt.[/Edit]

„Optimal bedienbar“ ist eben unterschiedlich auslegbar, je nachdem welche Zielgruppe man hat.

Das Timer-Thema ist einer der wiederkehrenden Stolpersteine. Wie gut das Anfänger mit der Doku hinbekommen sieht man hier - ich finde die Doku etwas zu reduziert (man versteht das Codebeispiel nicht, wenn man die Funktionsweise nicht schon vorher verstanden hatte).

Aber mir soll’s egal sein, ist zum Glück nicht meine Software. :smiley:

Ich finde es zumindest ebenfalls persönlich schade dass man dazu überhaupt ein Skript bemühen muss. Schließlich gibt es ja Ereignisse in IP-Symcon unterschiedlicher Art da wäre schön so einen Standard Wunsch auch einfach mit einem speziellen Timer Typ lösen zu können.

Na ohne Script gehts wohl nicht. Die Frage ist wohl ob das mit einer Zeile geht. Da muss ich leider sagen: Nein, nicht out of the box - aber es steht in der Doku wie man es macht.

IPS ist ein Werkzeugkoffer, wie ich immer sage. Mit ihm habe ich alles an der Hand was ich als Hausautomatisierer brauche. Da draußen, in der realen Welt, gibt es eine Unzahl von unterschiedlichen Hämmern. Jeder davon ist speziell zu einem besonderen Zweck designed worden. Jedes Gewerk und jedes Berufsbild hat seine Vorlieben und individuellen Bedürfnisse. Wie viele Hämmer hat man aber üblicherweise zuhause in einem Werkzeugkoffer? Einen Einzigen. Wie man einen Zweiten in den IPS Koffer packt habe ich gezeigt.

Macht es eine Werkzeugkisste leichter zu tragen (CPU/RAM) oder besser bedienbar (Editor) wenn unzählige Hämmer darin sind und man nicht versteht welcher davon welchem Zweck dient und wo der Unterschied ist? Ich denke nicht. Eine Werkzeugkiste, um bei diesem Sinnbild zu bleiben, die mit fünf verschiedenen Hämmern (Schlosserhammer, Maurerhammer, Zimmermannshammer, Sprenglerhammer, Karosseriehammer, etc) und sieben 13mm Schraubenschlüsseln (Maulschlüssel, Ringschlüssel, gekröpft, Vielzahn, mit Ratsche, gehärtet, isoliert, etc) daher kommt ist zu fett, zu unbeweglich, unhandlich, zu schwer und unübersichtlich.

Die Frage ist halt was man braucht, und genau das muss rein. Raus nehmen kann man bei IPS nichts, reinpacken kann man aber unendlich viel. Eine Frage des persönlichen Geschmacks.

Es gibt Systeme die bringen so eine Funktion mit, das alte FS20 zum Beispiel, Anderen fehlt es. Mit IPS bekommt man das bei allen Systemen aller Hersteller nachgerüstet. Mit nur einer Zeile? Ja, wenn man das wirklich braucht auch mit einer Zeile. Aber eben nicht out of the box.

Toni

Um das hier etwas abzukürzen… Wir haben dafür konzeptionell schon etwas in der Schublade. Nur noch nicht die Zeit gehabt es umzusetzen. :frowning:

Ich bin ganz Volkers Meinung, dass wir Dinge leichter machen müssen, die eben immer wieder vorkommen/Leuten Probleme bereiten :slight_smile:

paresy

Ich wäre jetzt den Weg einer intuitiveren Doku gegangen, die den User mehr an die Hand nimmt und führt. Aber so gehts natürlich auch :slight_smile:

Toni

Freut mich das seitens Symcon da noch was kommen soll:) Werde erst mal bei meiner Lösung mit der SPS bleiben und abwarten;) Vielleicht versuche ich es per Skript wenn ich etwas Ruhe und Zeit habe…

Mit den Anleitungen, wie z.B. zu den Systemvariablen, kann ich nicht wirklich was anfangen. Vielleicht wären hier Videotutorials hilfreich?

Grüße

Hallo Toni,

eine Frage: 50094 ist die Variable, die dann für 10 sekunden angeschalten wird?


<?  
  require_once('_Hilfsfunktionen.inc.php'); // einmalig oben im Script
   
  SwitchSeconds(50094, 10); // so oft du willst im ganzen Script
?>

Gruß

Oliver

Ja, genau. True ist Standard