Pelletsförderanlage steuern

Hallo,

habe meine Pelletsaustragung „homeatisiert“.

Jetzt muss ich folgenden Ablauf durchführen:

Kaminbefüllung zentral = TRUE

do
Kaminbefüllung Deckel = TRUE
35 Sekunden warten
Sauganlage = TRUE für 35sek, dann FALSE
Kaminbefüllung Deckel = FALSE für 30sek
until 10Mal durchgeführt

Kaminbefüllung zentral = FALSE

Wie kann ich das umsetzen ?
Danke für die Hilfe :loveips:

Hey,

ein paar mehr Infos wären schon nicht schlecht…

„Homematisiert“ ist dann doch ein bischen schwammig.

Also ich gehe davon aus dass Kaminbefüllung zentral eine IP-Symcon BooleanVar ist

Und der Rest Homematic Aktoren, ansonsten einfach anpassen.

Die Doku gibt eigentlich über alles was du machen willst Auskunft.

http://www.ip-symcon.de/service/dokumentation/konzepte/ereignisse/
http://www.ip-symcon.de/service/dokumentation/konzepte/skripte/systemvariablen/
http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/variablenzugriff/setvalueboolean/
http://www.ip-symcon.de/service/dokumentation/modulreferenz/homematic/hm-writevalueboolean/

http://php.net/manual/de/control-structures.for.php

Als auslösendes Ereigniss bei diesem Script die Kaminbefüllung zentral bei Variablenänderung nehmen.

Das einzige Problem an diesem Script ist das es dir einen PHP Thread blockt (wegen den 35 sec. sleep) um das zu verbessern bräuchte man ein paar mehr Infos über die verwendeten Geräte und was sich da genau tun soll.

Auszug aus der Doku

Da sich die Laufzeit des Skripts um Wartezeit verlängert, ist darauf zu achten, dass die in der Datei “php.ini“ definierte maximale Laufzeit nicht überschritten wird. Andernfalls wird das Skript mit einer Fehlermeldung abgebrochen. Längere Wartezeiten im Bereich von mehreren Sekunden und länger sollten mit anderen Methoden realisiert werden.


if($_IPS['VALUE'] == true ){
	
	for ($i = 1; $i <= 10; $i++){

		HM_WriteValueBoolean(12345, "STATE", true); //ID von Kaminbefüllung Deckel eintragen
		IPS_Sleep(35000);
		HM_WriteValueBoolean(23456, "STATE", true); // ID von Sauganlage
		IPS_Sleep(35000);	
		HM_WriteValueBoolean(23456, "STATE", false); // ID von Sauganlage
		HM_WriteValueBoolean(12345, "STATE", false); //ID von Kaminbefüllung Deckel eintragen
		IPS_Sleep(30000);
		HM_WriteValueBoolean(12345, "STATE", true); //ID von Kaminbefüllung Deckel eintragen		
	
	};
	
		
	SetValueBoolean($_IPS['VARIABLE'], false); //ID von Kaminbefüllung zentral steht im $_IPS Array

	
};

Das Script ist ungetested und aus dem Kopf geschrieben…

@Soundman33: Vielen Dank für deine Mühe … vom Ablauf her genau das was ich suche :smiley:

Das Problem ist die 35Sek-Begrenzung …

Eigentlich habe ich 2 Homeatic-Geräte zu steuern.
Gerät 1: Saugturbine mit Spindel
Gerät 2: Öffnung Vorratsbehälter

Zuerst wird Gerät 2 geschlossen damit die Saugturbine über Unterdruck Pellets ansaugen kann (Spindel dient nur dazu, dass sich nichts verlegen kann). Dann wird Gerät 2 geöffnet und die Pellets laufen in den Ofentank hinein.

Sicherheitshalber habe ich einen Ultraschallsensor, der die Saugturbine ausschaltet wenn genug Pellets im Ofentank sind (über Relais gesteuert und nicht in Homeatic realisiert).

S1: Gerät 2: AN -> Öffnung wird geschlossen (falls offen war - damit habe ich einen definierten Zustand)
nach 25Sek
S2: Gerät 1: AN -> Pellets werden angesaugt
nach 25Sek
S3: Gerät 1: AUS
S4: Gerät 2 AUS -> Öffnung wird aufgemacht
nach 25Sek
Gehe 10 Mal zu S1

Eigentlich sehr einfach, wenn nicht das Problem mit dem Timer wäre …
Danke für die Hilfe !

Also IPS_Sleep ist sicher der falsche Weg, habe mal die Suche bemüht und das gefunden:

Ein fertiges Skript kann ich nicht liefern, vielleicht erbarmt sich jemand.

Gruß
Bruno

Nach deinen letzten Angaben 25 Sekunden statt vorher 35 :confused: … habe ich mal etwas ohne Gewähr gebastelt, worauf du aufbauen könntest.
Aber teste es erstmal „soft“, ob du damit das erreichst, was du wolltest… kann ja sein ich habe noch einen Denkfehler, oder die Frage nicht korrekt verstanden bzw. kenne andere Einflüsse nicht…

<?
$ablauf = GetValueInteger($counter1ID);       // Ablauf-Zählervariable (INTVAR manuell anlegen)
$durchlauf = GetValueInteger($counter2ID);       // Durchgang-Zählervariable (INTVAR manuell anlegen)
$actor1ID = 12345;   // Gerät 1
$actor2ID = 54321;   // Gerät 2
      

if ($durchlauf < 10)
{
		switch($ablauf) {

		case 0: // S1
		HM_WriteValueBoolean($actor2ID, true);
		SetValueInteger($counter1ID , 1);
		IPS_SetScriptTimer($_IPS['SELF'],25);
		break;

		case 1: // S2
		HM_WriteValueBoolean($actor1ID, true);
		SetValueInteger($counter1ID, 2);
		IPS_SetScriptTimer($_IPS['SELF'],25);
		break;

		case 2: // S3
		HM_WriteValueBoolean($actor1ID, false);
		SetValueInteger($counter1ID, 3);
		IPS_SetScriptTimer($_IPS['SELF'],1);   // 1 Sekunde Sicherheit (notwendig?)
		break;

		case 3: // S4
		HM_WriteValueBoolean($actor2ID, false);
		SetValueInteger($counter1ID, 0);
		SetValueInteger($durchlauf, ($durchlauf+1));
		IPS_SetScriptTimer($_IPS['SELF'],25);
		break;
		}
}
else
{
IPS_SetScriptTimer($_IPS['SELF'],0);
SetValueInteger($durchlauf, 0);
}
?>

Hallo,

danke für die Hilfe :slight_smile:

counter1ID muss ich auch anlegen - oder ?
Bekomme da immer eine Fehlermeldung, dass die Variable nicht existiert …

Hatte ich so vermerkt;) … im Script. (Lese mal kurz die Hinweise und Anmerkungen die ich eingebettet habe)
Deine Variablen musst du allgemein „einfügen“… ist kein PnP-Script!

Tja, habe ich gelesen und die 2 CounterIDs als Integer angelegt. Alle anderen Variablen sind ja lokal und muss ich nicht anlegen. Trotzdem bekomme ich den Fehler …

Ich hoffe du hast nicht einfach c&p probiert?

Das wird sicherlich nichts!

$actor1ID = [b]1[/b]2345;   // Gerät 1
$actor2ID = [b]5[/b]4321;   // Gerät 2 

Sind selbstverständlich Dummys, die du durch deine ID’s ersetzen musst.
Das Script ist nur ein Beispiel, wie es funktionieren sollte(halbfertig). Aber anpassen und verfeinern musst du es selbst!

Ich habe meine Ids eingetragen, aber vorher schon das Problem mit den Ablauf und Durchlauf-Variablen.
Angelegt habe ich nur die Counter1ID und Counter2Id - variablen als Integer.

Na dann…

DIE Variable?

Notice: Undefined variable: counter1ID in C:\IP-Symcon\scripts\36502.ips.php on line 2

Habe die Variable direkt angelegt wo auch das Skript und der Timer angelegt werden.

Die Bezeichnung $Counter1ID und 2ID musst du mit der fünfstelligen Variablen-ID (xxxxx) deiner tatsächlich manuell angelegten Int-Var ersetzen!
Ich dachte, dass muss ich nicht erst erklären… :rolleyes:
Denk’s nochmal durch :wink:

Das muss man einem „Senior Member“ erklären :mad:

Ach wie schön ist es, wenn man über jemanden schimpfen kann weil man selber mehr kann und weiß. :o
Danke unserem Mod, der da mehr Geduld hat :slight_smile:

Der Sinn dieses Kommentars erschließt sich mir nicht wirklich, aber wenn es hilft :confused:

Im Skript fehlen einfach nur zwei Zeilen :

$counter1ID = 12345;   // Ablauf-Zählervariable
$counter2ID = 54321;   // Durchgang-Zählervariable

Die unterschiedliche Vorgehensweise innerhalb eines Skripts macht es natürlich nicht unbedingt einfacher, aber ist halt so passiert. Freut euch wenn das Ergebnis jetzt passt. :wink:

PS: Hängt der „Senior Member“ von der Zeit seit der Anmeldung ab oder von der Zahl der veröffentlichten Beiträge ?

Gruß
Bruno

Ich kann garfi35 nur zustimmen.

@quicksim: Sei doch mal etwas selbstkritisch. Ich mußte schmunzeln, als ich diesen Thread verfolgte und ja, ich erinnere mich genau an Deine ersten Zeit im Forum und ehrlich, das zieht sich bis heute wie ein roter Faden durch. Ich erkenne da kaum Entwicklung oder ein Interesse, dies zu ändern. Darf man so etwas nicht nach fast 2 Jahren und >220 Beiträgen erwarten? :rolleyes:

@Boui: Ja, hatte ein Brett vorm Kopf und nicht die Geduld - danke, dass du meinen roten Faden verfolgst - dann müßte dir auch bekannt sein, dass es wenige Beiträge zu Programmen, sondern mehr Richtung Hardware (Server, Wetterstation, …) bzw. Graphen waren … Ich möchte einfach in der wenigen Freizeit zu viele verschiedene Sachen ausprobieren - vielleicht spielt da auch schon digitale Demenz eine Rolle :rolleyes:

@Nancilla: Danke nochmals für die Geduld - trotz Basisfehler … werde das finale Skript posten … Beim Schalten fehlt das „STATE“ im HM_WriteValueBoolean. - Powerfreddys Hinweis wird ergänzt.

Ach ja… ich wusst’s … irgendwas vergisst man immer, wenn man nicht selbst testet.

Code unter:
http://www.ip-symcon.de/forum/threads/21263-Ablaufsteuerung-mit-Zeitverz�gerung?p=192914#post192914

Thema kann geschlossen werden.