suche Script mit Timer und Schleife.

Hallo zusammen,

komme jetzt nach Monaten mal wieder dazu an meiner Steuerung
zu basteln.

Da ich mich noch nicht tiefgreifend in PHP eingearbeitet habe möchte ich anfragen ob hier jemand
ein Script hat was ich eventuell nutzen kann.

Zu meinem Problem.

Ich muss 1* am Tag die Füllung meiner Pelletesheizung ansteuern. (FS20 Steckdose
alternativ Homematic Steckdose da ich schrittweise auf Homematic umstelle)
Hierzu gibt es einen Sauger, der ca. 30Sek saugt, dann ca. 20Sek ausgeht.
Dieser Vorgang soll sich entweder automatisch 10* wiederholen oder 10Min laufen
zusätzlich möchte ich den Vorgang 30sek an 20sek aus mit einer Fernbedienung starten
und solange wiederholen lassen bis ich diesen mit der Fernbedienung wieder stoppe.

im Homeputer Studio hatte ich dieses am Laufen, war da aber etwas einfacher
wegen der internen „wenn dann“ Schleifen.

Würde mich freuen wenn jemand einen Lösungsansatz für mich hätte.

gruß

Udo

na das wäre doch jetzt die Möglichkeit schlechthin, mit PHP anzufangen :smiley:

fangen wir doch mal Schritt für Schritt an. Fragen:

  1. Zitat: "…Sauger, der ca. 30Sek saugt, dann ca. 20Sek ausgeht…’

  2. Frage: wer steuert das Intervall? Wenn nicht IPS: wie bekommt IPS den Intervall mit?

  3. Zitat: „…entweder automatisch 10* wiederholen oder 10Min laufen…“

  4. Frage: über welches Kriterium wird das „oder“ entschieden?

  5. Zitat: „…mit der Fernbedienung wieder stoppe…“

  6. Frage: sind die manuell gesendeten Kommandos der FB in IPS verfügbar?

  7. Frage: wer oder was startet den Sauger?

zu1 Der Intervall soll im IPS laufen und hier irgendwo anpassbar sein

zu2 Muss nur eines von beiden gehen. Die Zeit oder die Anzahl muss sich nur anpassen lassen
Ich bin noch auf der Suche nach einem vern�ftigen F�llstandsgeber das ich sp�ter automatisch
abschalten kann. Ist aber etwas schwierig wegen dem Pelletsstaub.
zu3 Falls bei der automatischen F�llung was schief geht (Sauger verstofft etc.)
muss ich �ber eine Fernbedienung im Keller den Vorgang von Hand starten
Die Fernbedienung m�chte ich im IPS auslesen.
zu4Das Script wird t�glich um z.b. 19.00 Uhr z.B. gestartet und steuert eine FS20 Steckdose f�r den Sauger
sp�ter eine Homematicsteckdose.

Die Dauer oder Anzahl zu2 m�chte ich je nach Jahreszeit etwas anpassen, �berf�llen geht nicht, da
wenn der Beh�lter voll ist die Auslaufklappe des Staubsaugers nicht mehr zu geht und daher
der Sauger nichts mehr ansaugt.
Vielleicht setze ich den Wert der zu2 sp�ter anhand der Au�entemperatur Kalt = lange f�llen warm = kurz f�llen.

Zur Zeit habe ich ein zyklisches Ereignis t�glich von 19.00 - 19.10 laufen wo ich dann eine FS20 jede Minute f�r 30Sek
einschalte. Damit kriege ich aber keinen Trigger �ber Fernbedienung hin. und keinen Beinflussung der Dauer �ber Temperatur

Ich habe da noch ein paar Ideen die ich aber, denke ich sp�ter, selber hinkriege.

Abr�tteln des Staubsaugers f�r 1 Min vor oder nach dem saugen. Da muss ich aber Relais oder Unterputzschalter
in den Staubsauger bauen. da die Abr�ttlung mit dem Einschalter veriegelt ist. Bin Elektriker daher kein Problem.
F�llstandsgeber f�r min und max

ich denke, wir gehen mal Schritt für Schritt vor.
Da könnte ich mir folgendes Konstrukt vorstellen:

1 Variable für Steuerung (On/Off), Typ: BooleanEin-Ausfunktion für die gesamte Saugersteuerung

  1. Variable: Sauger Ein/Aus, Typ Boolean
    über diese Variable wird der Schaltzustand des Saugers angezeigt
  2. Variable für Eingabe des Off-Intervalls, Typ Integer
    hierüber wird eingegeben, wie lange das Off-Intervall dauern soll
  3. Variable für Eingabe des On-Intervalls, Typ Integer
    hierüber wird eingegeben, wie lange das On-Intervall dauern soll

Die Idee ist folgende:
Über 1 setzt Du das ganze Hexenwerk in gang oder schaltest es aus. Bei „Ein“ wird ein Script gestartet, welches zunächst die Werte aus den Intervall-variablen ausliest. Anschließend steuert das Script den Sauger an (Einschalten) und setzt einen Timer auf das Einschaltintervall (30sec). Wenn der Timer abgelaufen ist, triggert er wieder das Script, das Script weiß, dass der Trigger vom Timer kommt und kann daher ableiten: aha, der nächste Intervall kann nur „Off“ sein. Es liest also den Wert aus der „Off“ var und setz den selben Timer auf diesen Wert (20sec).
Und das geht die nächsten 3 Milliarden Jahre so weiter, bis einer der 1. var sagt: es reicht (Off).

wenn du dich damit anfreunden kannst, kannst du die Variablen schon mal anlegen, dann kommen wir zum Steuerscript und dem Timer.

Hallo,

schon mal vielen Dank für die ersten Schritte.

Bin kurzfristig ein paar Tage im Krankenhaus gewesen.
und noch nicht ganz 100%ig fit.

Werde die Variablen zwischendurch schon mal anlegen.
und mich nochmal melden

such doch mal bei ebay nach Pellet Füllstandschalter den habe ich bei meinem Bruder eingebaut als Signal geber wenn der Behälter fast lehr ist .

Holger . .

Gesendet von meinem GT-I9100 mit Tapatalk 2

Hallo Raketenschnecke,

ich möchte das Thema nochmals aufgreifen, denn ich bin auf der Suche nach genau einer solchen Funktion,
allerdings möchte ich nur eine Status LED blinken lassen, angestossen von einer Variablen, die vom KNX kommt.

Kannst Du mir hier weiterhelfen, bin noch neu hier und nicht wirklich fit mit PHP und Skripten.

Danke und Grüße

Joerg

Hallo Joerg,

sag doch einfach mal was genau Du möchtest und dann schauen wir mal was man da machen kann…

Hallo mcbelly,

ist bestimmt ganz einfach wenn man weiß wie es geht :slight_smile:

Ich habe bei mir einen KNX Alarmbaustein von ABB verbaut. Dieser gibt verschiedene Meldungen (1 Bit Werte )
auf den Bus:

  1. Alarmanlage scharf
  2. Alarmanlage unscharf
  3. Verzögerungszeit aktiv

Im Moment zeige ich diese drei Meldungen über einen 230 V Aktor mit Möller Leuchtmeldern einzeln an.

Gedanke / Vorstellung ist die, dass ich für „Anlage scharf“ und „Verzögerungszeit aktiv“ den selben Leuchtmelder verwende, da ich für eine schaltbare Steckdose einen Aktorkanal, der mir von Verzögerungszeit aktiv belegt wird, benötige.

Bei „Anlage scharf“ soll der LM leuchten, bei „Verzögerungszeit aktiv“ blinken. Verknüpfen möchte ich sie über eine „oder“ Logik. Beide Zustände treten nie gemeinsam auf.

Ich hab noch eine Skizze von Ist und Sollzustand angehängt.

Wäre toll wenn Du mir helfen würdest.

Danke und Grüße

JOerg

Scan.pdf (159 KB)

Warum machst Du das nicht mit drei einfachen if-Schleifen ? Spricht ja nichts dagegen jeweils den gleichen Ausgang zu nutzen. Also Fall 1 -> Schalter ein, Fall2 -> gleicher Schalter blinkt. Fall 3 -> Schalter 2 ein

Ich habe kein KNX oder enocean und kenne somit die passenden Schaltbefehle nicht - aber das bekommst Du sicherlich hin

3 Variablen (Bool) erstellen - in dieser schreibst Du den entsprechenden Status.


<?
$scharf = GetValueBoolean(Variable1);
$verzoegerung= GetValueBoolean(Variable2);
$unscharf = GetValueBoolean(Variable3);

if ($scharf)
{ //Leuchtmelder ein ;
}

if ($verzoegerung)
{ //Leuchtmelder blinken ;
}

if ($unscharf)
{ //Leuchtmelder 2 ein ;
}
?>

Oder habe ich die Problemstellung falsch verstanden ?

Gruß
Martin

Hallo Martin,

die Verknüpfung der drei Eingänge ist nicht das Thema.

Mir geht’s darum wie ich den die zweite Bedingung zum blinken
Kriege, d.h. Eingang zwei ist True, IPS bringt jetzt die Blinkfunktion
und die geht wieder zurück auf den Bus und den Aktorausgang blinken.

Ich weiß nicht ob das jetzt verständlich erklärt ist.

Danke für Deine Hilfe!

Joerg

Hallo Jörg

probier mal:

<?

 //Fügen Sie hier Ihren Skriptquellcode ein

if ($_IPS['SENDER'] == "Execute") {
     $eid = IPS_CreateEvent(1);
     IPS_SetEventCyclic($eid,0,0,0,1,1,5);		 //Eregnis: 5 Sekunden Rythmus
     IPS_SetParent($eid, $_IPS['SELF']);  		 //Eregnis zuordnen
	IPS_SetEventActive($eid, true);  		 //Eregnis aktivieren
}
elseif ($_IPS['SENDER'] == "TimerEvent") {
     $id_eibswitch=12345;                      //EIB Instanz
     $id_eibstatus=12346;                      //EIB Value Instanz
     EIB_Switch($id_eibswitch,!GetValue($id_eibstatus));
}

?>

Nur einmal ausführen um das Ereignis anzulegen.

Weiters kannst du mit IPS_SetEventActive(false) das Ereignis deaktivieren, und
mit IPS_SetEventActive(true) wieder aktivieren.

Eleganter ist aber (nachdem du KNX verwendest), einen Schaltaktor mit einem Blinkmodus (verfügt dann über ein eingebautes Blinkrelais) zu verbauen. Dann ist während des Blinkens IPS nicht mehr belastet.

Gruß
Günter

Hallo Günter,

herzlichen Dank für das Skript.

Es blinkt bei mir wie wild, nachdem ich das Skript ausgeführt habe.

Aber ich kapier leider nicht wie ich da ganze dann über eine KNX Instanz ein und ausschalten kann.

„Weiters kannst du mit IPS_SetEventActive(false) das Ereignis deaktivieren, und
mit IPS_SetEventActive(true) wieder aktivieren.“ Wie verknüpfe ich dies mit meiner Instanz?

Bin noch ganz am Anfang mit IPS und Skripten…

Danke und Grüße

Joerg

Nachdem ich nur raten kann wie du deine Aktoren verwendest …
Hab’ zur Einfachheit halber den Ereignistimer durch einen Scripttimer ersetzt.
Probier mal folgende ALL IN ONE Lösung:

[ul]
[li]ein Script mit folgendem Inhalt erstellen
[/li][li]die Variablen in der Deklaration lt. deinen ID der Alarminstanzen anpassen
[/li][li]die Variablen in der Deklaration lt. deinen ID der Lampeninstanzen anpassen
[/li][li]3 Variablentrigger zum Script hinzufügen (je einen für die Zustandsvariable ALARM SCHARF, ALARM VERZÖGERT, ALARM UNSCHARF
[/li][/ul]

<?
/* ***************************************
		Zustandserkennung der Alarmanlage
	*************************************** */

// Deklarationen
$id_eib_alarmscharf_value       = 11111 /* ALARM SCHARF */;
$id_eib_alarmverzoegerung_value = 22222 /* ALARM VERZÖGERUNG */;
$id_eib_alarmunscharf_value     = 33333 /* ALARM UNSCHARF*/;

$id_eibswitch_scharf            = 44444 /* ID der INSTANZ von LAMPE SCHARF / VERZÖGERUNG */;
$id_eibswitch_unscharf          = 55555 /* ID der INSTANZ von LAMPE UNSCHARF */;

$blink_rythmus                  = 2 	 /* BLINKRYTHMUS IN SEKUNDEN */;

// Hilfsfunktion zur Feststellung des aktuellen Zustandes einer KNX Instanz
function GetKNXStatusIDByParentID($id_eib_instance) {
		$id_return=0;
		foreach (IPS_GetChildrenIDs($id_eib_instance) as $id_value) {
		   if (IPS_GetName($id_value)=="Value") {
				$id_return=$id_value;
				break;
			}
		}
		return $id_return;
}
/* ****************************
		Ausführungsteil
	**************************** */

if (($_IPS['SENDER'] == "Variable") && ($_IPS['VARIABLE']==$id_eib_alarmscharf_value)) {
	// Dauerlicht SCHARF durchführen
	EIB_Switch($id_eibswitch_scharf,$_IPS['VALUE']);
	EIB_Switch($id_eibswitch_unscharf,false);
	// Sekundentimer AUSSCHALTEN
	IPS_SetScriptTimer($_IPS['SELF'],0);
}

elseif (($_IPS['SENDER'] == "TimerEvent") || (($_IPS['SENDER'] == "Variable") && ($_IPS['VARIABLE']==$id_eib_alarmverzoegerung_value))) {
	if ($_IPS['SENDER'] != "TimerEvent") {
		// Sekundentimer EIN- oder AUSSCHALTEN
		EIB_Switch($id_eibswitch_scharf,$_IPS['VALUE']);
		EIB_Switch($id_eibswitch_unscharf,false);
	   IPS_SetScriptTimer($_IPS['SELF'],$blink_rythmus*$_IPS['VALUE']);   
	} else if ($_IPS['SENDER'] == "TimerEvent") {
		// Blinken SCHARF durchführen
	   $id_eibswitch_scharf_status=GetKNXStatusIDByParentID($id_eibswitch_scharf);
		EIB_Switch($id_eibswitch_scharf,!GetValue($id_eibswitch_scharf_status));
	}
}

elseif (($_IPS['SENDER'] == "Variable") && ($_IPS['VARIABLE']==$id_eib_alarmunscharf_value)) {
	// Dauerlicht UNSCHARF durchführen
	EIB_Switch($id_eibswitch_unscharf,$_IPS['VALUE']);
	EIB_Switch($id_eibswitch_scharf,false);
	// Sekundentimer AUSSCHALTEN
	IPS_SetScriptTimer($_IPS['SELF'],0);
}

?>

Gruß
Günter

Hallo Günter,

vielen Dank für das Script. Ich komme im Moment leider zu gar nichts.

Versuche es aber auf jeden Fall und melde mich dann wieder.

Einen schönen Abend und Grüße

Joerg