ich habe zu Hause folgende Ereignisse und Scripts laufen und würde nun gerne wissen, wie ich hier Prioritäten festlegen kann.
Rollladen soll bei Regen und geöffnetem Fenster schliessen.
Rollladen soll bei Sonnenschein (Helligkeitswert > 120) auf 50% fahren.
Bei manchen Situationen kollidieren jedoch diese 2 Eregnisse, nämlich dann, wenn die Helligkeit über 120 liegt und es regnet.
Was macht dann der Rollladen ?
Fährt er ständig hoch und runter???
Wie kann ich hier die Prioritäten festlegen, z.B. dass bei Regen generell immer der Rollladen geschlossen wird und das andere Script dann „Angehalten“ wird?
wie hast Du das genau gelöst? Mit einem Trigger? Wenn Du beide Sachen einzeln abfragst, würde er eventuell permament hoch und runter fahren.
Ich habe keine elektrischen Rollläden, aber vom Prinzip würde ich sagen, Du legst ein (und nicht 2) Script an und rufst jede Minute per Trigger dieses Script auf.
Dort könntest Du per PHP selbst entscheiden was wann passieren soll; ungefähr so:
if (Helligkeit > 120) ]{
if (regnet es und ist das Fenster offen) {
fahre den Rolladen komplett runter
}
// es ist heller als 120, aber es regnet nicht
fahre Rollladen auf 50%
}
else {
// es ist dunkler als 120
öffne den Rolladen auf 100%
}
Wer Skripte jede Minute aufruft, macht höchstwahrscheinlich was falsch. Dafür hat IP-Symcon die „Auslösenden Trigger“. Wenn er an sein Skripte alle drei Variablen per Ereignis hängt (Regen, Helligkeit, Fensterstatus), dann kann er dort alle Variationen wie von dir beschrieben abfragen und entsprechend reagieren.
Aber: Jede Minute aufrufen ist vergeudete CPU-Zeit.
Ich hab einen auslösenden Trigger auf den Regensensor und einen
Trigger auf die Helligkeit gesetzt.
Werde mal einige Varianten ausprobieren.
Aber gibt es eine gernelle Funktion in IPS, um z.B. ausserhalb von PHP
eine Prioritätenliste anzulegen? Wäre doch eineglich ne gute Idee.
Bsp. Man hat 4 Scripts, die priorisiert laufen sollen.
Wenn man nun z,B. eine Art Dummy Modul (Prio Modul) anlegt
und die Scripts hier verknüpft, könnte man doch mit der Sortierung
eine Art Prio-Liste erstellen.
Natürlich müsste dies im Hintergrund von IPS richtig gecodet werden.
danke für den Tipp. Aber Gegenfrage: bei 3 Variablen sind wir uns völlig einig, dass Auslösende Trigger das prima lösen.
Aber im Bezug auf meine Heizungssteuerung habe ich mir da auch gerade Gedanken gemacht. Ich lerne gerne willig jeden Tag dazu
Den Trigger für die Heizung rufe ich alle 2 Minuten auf. Er checkt ca. 50 Variablen inkl. HomeMatic Temperaturen und dymanisch angelegter Variablen die jede Woche ihre ID verändern.
Macht es in deinen Augen Sinn, auch hier Auslösende Trigger auf allen Variablen zu verwenden? Dann würde doch aber jede 0,1° Änderung das Script aufrufen. Das wäre irgendwie wahrscheinlich noch viel öfter als alle 2 Minunten mit der Hand.
Deswegen schrieb ich ja auch höchstwahrscheinlich. Man muss halt abwegen, wie of am Tag läuft das Skript, wenn ich jede Minute starte und wie oft, wenn ich alle notwendigen Trigger drin haben (+der Arbeit die dadurch entsteht)
Bei dem Heizungsskript, wo du vielleicht noch eine gleichmäßige Zeitkomponente brauchst, ist der Alle X Minuten Ansatz wahrscheinlich der bessere
Yup, auch bei mir läuft die Heizungs&Solarregelung per zyklisch aufgerufenem all-in-one Script.
Kürzlich hab ich dann die Steuerung für den Aquarium-Wasserwechsel welcher vormals auf einer C-Control lief nach IPS übernommen. Hier wollte ich das aus verschiedenen Gründen schön sauber ereignisgesteuert abbilden.
Na das war gar nicht so einfach. An der C-Control wars eine simple Endlosschleife, welche permanent alles Sensoren checkte.
Schnell programiert, leicht zu lesen und unkaputtbar robust.
In IPS mit ereignisgesteuertem Ansatz war es recht anspruchsvoll und mehrere Abende Aufwand das gleich nachzubauen. Ich brauchte einige Semaphoren und sich gegenseitig aufrufende Scripte um auch nur annähernd die gleiche Funktionalität hinzubekommen. Hinsichtlich Robustheit ists auch jetzt noch einiges zu tun, hab aber keinen Bock mehr.
Einziges plus zur Zeit: Ich kanns übers WF bedienen.
irgendwie verstehe ich das Problem hier nicht. Wenn Regen und Helligkeit die einzigen Parameter sind, warum dann nicht einfach ein Scirpt schreiben, welches auf diese Werte reagiert, dann aber halt codiert entscheidet, was zu tun ist (alsoalle benötigten Variablen nachliest). Ist dann doch ein einfaches IF…