Scripte zusammen hängen

Nein. leider schaltet gar nix aus…

Habe mal dieses probiert:

<?
tmex_F3A_SetPin(25864 /*[Brenner]*/, 0, True); //Gerät einschalten
tmex_F3A_SetPin(39013 /*[Switch]*/, 1, True); //Gerät einschalten


// Holt den Temperaturwert von Sensor in Maische
$temperatur_maische = GetValueFloat(55135 /*[Temperaturfühler\Maische Temperatur]*/);

if ($temperatur_maische > 30)
{
TMEX_F3A_SetPin(25864 /*[Brenner]*/, 0, false);  // Brenner einschalten
TMEX_F3A_SetPin(39013 /*[Switch]*/, 1, false);  // Rührwerk einschalten
}


?>

aber auch da, kein ausschalten…

bin verzweifelt… wenn ich das eine Script ausführe, schalten die Switch ein; wenn ich nachher das andere Script manuel ausführe, schalten sie wieder aus. Natürlich nur wenn die Temp. auch erreicht ist.

Fazit: da stimmt was nicht…

Liebe Leute, hat keiner eine zündende IDEE…

Hallo Urs,

bei Deiner Variante schaltest Du gleichzeitig ein und aus (bei über 30°) - das kann nicht gehen und ist sinnfrei.

Mach Dir bitte Testvariablen unter IPS, ändere diese per Hand und sieh was Dein Script macht.

Kronos Variante sieht aus meiner Sicht okay aus.

Es gibt viele Anleitungsseiten. Du tust Dir einen Gefallen mit der Anfängerseite (nicht böse gemeint - alle haben mal angefangen) z.B.PHP Lernen - PHP Tutorial, Anleitung
Um ein Schwingen um die 30° zu vermeiden würde ich noch eine Hysterese vorsehen - aber erst im zweiten Schritt

herbert

Ich vermute auch, dass da die Eingangswerte für die IF-Abfrage einen Hund drin haben.

Der zweite Weg von Kronos ist der beste. Den solltest du weiter verfolgen. Was passiert, wenn du in dem Beispiel testhalber im TMEX Aufruf false eingibst? Schaltet er denn dann aus?

Wartest du darauf, dass das Script das Rührwerk selbständig ausschaltet bei erreichen der Temp. > 30?

Dann musst du natürlich noch ein Ereignis anlegen, z.B. beim ändern der Temperatur aber das weisst du bestimmt.

Gruß Doc

Ich sage mal danke, bin da ein bisschen festgefahren…
Lege die ganze Sache für 24 Stunden auf Eis, das hilft meistens…

Gruss

So ich schreib mal zurück, vielleicht hilfts jemand anderem auch.

Habe das ganze einwenig frisiert und dies ist dabei herausgekommen.
Merci Doctor Snuggles für den Hint. mit dem Ereignis.

 <?
// Holt den Temperaturwert von Sensor in Maische
$temperatur_maische = GetValueFloat(55135 /*[Temperaturfühler\Maische Temperatur]*/);
$status = false;
if ($temperatur_maische > 20 and $temperatur_maische <=29)
{
$status = true;
}
TMEX_F3A_SetPin(25864 /*[Brenner]*/, 0, $status);  // Brenner schalten

IPS_SetScriptTimer($IPS_SELF, 10); //10 Sekunden aktiv lassen
//
//ende
//
if ($temperatur_maische >=29)
{
$status = false;
}

TMEX_F3A_SetPin(25864 /*[Brenner]*/, 0, $status);  // Brenner ausschalten

?>

wenn man jetzt am Ende noch ein
IPS_SetScriptTimer($IPS_SELF, 0); //Timer ausschalten
}

hinzufügt, sollte das ganze stimmen…

Grüsse aus der Schweiz und nochmals merci

Urs

… überlege mal genau. Dann wird das Script genau nur 1x ausgeführt, genau so, als wenn du den Scripttimer nicht gesetzt hättest.

Das Beste war eigentlich das Script von kronos, welches du nur zyklisch ausführen müsstest. Evtl. noch einen Stop einfügen, falls mal nix im Kessel ist.
Was ist eigentlich, wenn die Maische kleiner 20 Grad ist? Soll dann nix passieren?

Grüße,
Doc

Hallo Doc
Leider hat bei mir KRONOS Script nicht funktioniert, diese Variante schon…
Die Temperatur geht nicht unter diese 20 Grad, da in einem anderen Script über Nacht eingemaischt zuweilen die Geschmackstoffe oder Oele gelöst werden. Somit liegt die Temperatur schon beim umfüllen bei 25 Grad…

Da kommt noch eine Zuckerrast dazu, diese liegt bei 55 bis 65 Grad, da gehe ich ja immer mit der Temperatur nach oben.

Beispiel

  1. Rast bei 55 Grad, 20 Min.
  2. Radt bei 65 Grad 30 Min.
  3. Rast bei 72 Grad 20 Min.
    abfiltern bei 78 Grad…

Gruss

Huhu mal so ne doofe Frage … was machst du da eigentlich genau ? Bier ?

abfiltern bei 78 Grad… => Abmaischen heißt das xD

Hallo Flobo

ja genau, oder so…
eigentlich Sirup und Tee, jedoch das mit dem Bier haben wir auch schon ausprobiert, war lecker…

Doch das mit den Script frunzt noch nicht so ganz, die wollen einfach nicht so wie gerne hätte…

Jedes einzelne Script geht, jedoch wenn ich diese zusammen ausführen möchte (also nacheinander), habe ich immer ein Problem. Das mit den Pausen krieg ich einfach nicht hin…

Gruss

Sehr rätselhaft. Dann poste doch nochmal den aktuellen Stand deines Scriptes und zusätzlich Bilder deiner Konsole mit dem Script und dem/den Event(s).

Ha…
Das Script von Kronos habe ich jetzt weiterverfolgt, wenn man am Ende ein Set Script Timer einfügt, schaltet der Switch ab…

Hier…

<?
// Holt den Temperaturwert von Sensor in Maische
$temperatur_maische = GetValueFloat(55135 /*[Temperaturfühler\Maische Temperatur]*/);
$status = false;

if ($temperatur_maische > 10 and $temperatur_maische <=30)
{
$status = true;
}

TMEX_F3A_SetPin(25864 /*[Brenner]*/, 0, $status);  // Brenner schalten

IPS_SetScriptTimer ($IPS_SELF, 5); // 5 Sek. aktiv halten

?>

Nun noch eine zusätzliche Pause von 20 Minuten und dann den nächsten Temperaturstop… ???

Jedes einzelne Script geht, jedoch wenn ich diese zusammen ausführen möchte (also nacheinander), habe ich immer ein Problem. Das mit den Pausen krieg ich einfach nicht hin…

Ich bin zwar kein PHP-Programmierprofi, beim mitlesen kommt mir jedoch der Verdacht, dass du hier ein Script in das Forum stellst und erwartest dass deine Anforderungen über den kompletten Ablauf erfüllt werden.

Definiere doch erst mal wie das ganze ablaufen soll, in einzelnen, möglichst kleinen Schritten so wie du es auch manuell machst, dann wird dir auch ein PHP-Profi gezielt helfen können.
Bsp.:

[ul]
[li]Wenn Temperatur kleiner 30° dann Brenner einschalten[/li][li]Wenn Temperatur größer 30° dann Brenner ausschalten[/li][li]20 min. Pause einlegen[/li][li]Wenn Temperatur kleiner 50° dann Brener einschalten[/li][li]Wenn Temperatur größer 60° dann Brenner ausschalten[/li][li]30 min Pause einlegen[/li][li]usw.[/li][/ul]

Was noch interessant wäre: Handelt es sich um einen, bzw. immer den selben Brenner(Switch) der geschaltet werden muss oder mehrere, also wie sind die hardwaremäßigen Voraussetzungen?

Da haben wir was gemeinsam, ich bin auch kein PHP Profi… :slight_smile:

Ich erwarte nicht, dass mir jemand ein Script vor die Füsse knallt, das wäre ja am Ziel vorbei geschossen, ich lebe nach dem Motto „mach es selbst“, nur so lernt man etwas… " Kaufen kann jeder"

Ich bin doch schon so weit, dass dieses Script jetzt bei mir frunzt, prima… Haben sich doch die Stunden mit probieren, lesen und schreiben ausbezahlt.

Wie ich schon mal erwähnt habe, gehen alle meine kleinen Scripte, ist auch prima, so weiss ich, dass ich auf dem richtigen Weg bin.

Natürlich sollte die Steuerung einmal ein kompl. Script geben, bis an hin habe ich die einzelnen manuell geschalten. Das Ziel ist es Temperatur und Zeitgesteuert gewisse Abläufe auszuführen.

Aufheizen bis
Temperaturrast
Aufheizen bis
Temperaturrast
usw…

So genug gequatscht…
Ich stelle jetzt doch noch eine Frage, was muss ich berücksichtigen, wenn ich nach meinem obigen Script eine zeitliche, temperaturüberwachte Pause einlegen möchte. Diese sollte „sagen wir mal“ 45 Minuten dauern…

So wie es jetzt ist wird alle 5 Sekunden dass Script neu gestartet, den TimerEvent kann ich ja nicht verstellen, sonst wird ja nur alle 45 Minuten neu gestartet.
Wenn ich ein sleep einsetzte, dann schläft ja alles ein… ODER…

In diesem Sinne, hoffentlich bis bald, Gruss aus der kleinen Schweiz

Denke auch, dass Du hier mal vernünftig / vollständig erklären solltest, was wie ablaufen soll und nicht nur irgendwelche Brocken … „und da noch 20 min.“ …, wenn Du Hilfe haben möchtest. Wenn ich mir allein das obige Programm anschaue, bin ich nicht der Überzeugung, dass Du „auf dem richtigen Weg“ bist. Allein schon der letzte Skripttimer macht in dieser Form keinen Sinn, da er nicht steuerbar ist.

Die Abläufe werden auch keine Geheimnisse sein, von dem her … :rolleyes:

Gruß
Bruno

was muss ich berücksichtigen, wenn ich nach meinem obigen Script eine zeitliche, temperaturüberwachte Pause einlegen möchte. Diese sollte „sagen wir mal“ 45 Minuten dauern…

So ganz grob(immer noch in Unkenntnis was genau du machen möchtest):

[ul]
[li]Bei Erreichen der gewünschten Temperatur die Zeit auslesen.[/li][li]Zu dieser Zeit 45 min. dazu addieren[/li][li]Mit der neu errechneten Zeit einen Timer füttern der wiederum das nächste Scipt startet.[/li][/ul]

Also ganz so wie du es auch manuell machst. Beim erreichen der Temperatur auf die Uhr schauen, etwas schalten, 45 min. dazua addieren und dann wieder etwas schalten.

OK?

So ganz grob(immer noch in Unkenntnis was genau du machen möchtest):

hallo zusammen

ich finde, ich mache kein Geheimnis aus dem was ich machen will.

Hardware:
Kochkessel 250 Liter, elektrisch beheitz, werden gesteuert über 1Wire, jedoch manuel, wie kaha auch schon heraus gefunden hat.„über verschiedene kleine Scripe“
Ja diese gehen, ob sinnvoll geschrieben, dass ist ein anderes Thema.

in der Produktion von Tee oder Sirup mit " Holunderblühten oder Zitronengras, ist die Temperatur sehr wichtig, zu heiss wird alles sehr bitter.

Nun will ich

Bei Erreichen der gewünschten Temperatur die Zeit auslesen.
Zu dieser Zeit 45 min. dazu addieren
Mit der neu errechneten Zeit einen "Timer" füttern der wiederum das nächste Scipt startet.

Bei Erreichen der gewünschten Temperatur die Zeit auslesen.
Zu dieser Zeit 30 min. dazu addieren
und das Script beendet

Beginnend mit dem 1ten Script

 <?
// Holt den Temperaturwert von Sensor in Maische
$temperatur_maische = GetValueFloat(55135 /*[Temperaturfühler\Maische Temperatur]*/);
$status = false;

if ($temperatur_maische > 10 and $temperatur_maische <=30)
{
$status = true;
}

TMEX_F3A_SetPin(25864 /*[Brenner]*/, 0, $status);  // Brenner schalten

IPS_SetScriptTimer ($IPS_SELF, 5); // 5 Sek. aktiv halten

?> 

Ob ich den IPS_SetScriptTimer dann noch brauche, weiss ich natürlich auch nicht.

Rezept:

1te Temperatur bis max 30°, da kommt der Holunder oder das Zitronengras dazu.
Pause 45 Minuten, dann kommt alles wieder raus und der Zucker kommt dazu.
2te Temperatur bis max 55°
Pause 30 Minuten, in dieser Zeit kommen noch Geschmacksverstärker dazu (sorry, ist aber so).

Fertig

Wie gesagt, was muss ich berücksichtigen im Bezug auf diese Pause von 45 Minuten?

Gruss Urs

Hier ein Beispiel mit einem Scrip1 das die erste Temperaturspanne überwacht und anschließend nach einer Pause das zweite Script startet. Sollte so funktionieren, kann sicher noch effizienter und komfortabler programmiert werden. Zeiten und Temperaturen musst du anpassen. Vorschlag: Lass es einfach mal Testweise laufen in dem du nur deinen aktuellen Sensor verwendest und als Aktor einfach eine Testvariable nimmst. Als Anlage zum Verständnis noch die von mir angelegten Variablen und Timer.

Script 1, muss manuell gestarte werden.

 <?

// Holt den Temperaturwert von Sensor in Maische
#$temperatur_maische = GetValueFloat(55135 /*[Objekt #55135 existiert nicht]*/);
$temperatur_maische = GetValue(42596 /*[Test-Live\urs\Testtemperarur]*/); #Testtemperatur, manuell ändern

IPS_SetScriptTimer ($IPS_SELF, 5); // 5 Sek. aktiv halten

if ($temperatur_maische > 10 and $temperatur_maische <=30)
{
#TMEX_F3A_SetPin(25864 /*[Objekt #25864 existiert nicht]*/, 0, true);  // Brenner einschalten
#TMEX_F3A_SetPin(39013 /*[Objekt #39013 existiert nicht]*/, 1, true);  // Rührwerk einschalten
setvalue(15815 /*[Test-Live\urs\Brenner]*/,true); #Test-Gerät einschalten

}

if ($temperatur_maische > 30)
{
#TMEX_F3A_SetPin(25864 /*[Objekt #25864 existiert nicht]*/, 0, false);  // Brenner ausschalten
#TMEX_F3A_SetPin(39013 /*[Objekt #39013 existiert nicht]*/, 1, false);  // Rührwerk ausschalten
setvalue(15815 /*[Test-Live\urs\Brenner]*/,false); #Test-Gerät ausschalten
$beginnpause1 = time();
$endepause1 = $beginnpause1+75; #Pausezeit(in Sek.) zu Pausebeginn addieren
$H = intval(strftime ( '%H', $endepause1 )); #Stunde extrahieren und umwandeln
$M = intval(strftime ( '%M', $endepause1 )); #Minute extrahieren und umwandeln
IPS_SetEventCyclicTimeFrom(46185 /*[Test-Live\urs\Script2\]*/, $H, $M,0); # Timerzeit(Ende der Pause) setzen
IPS_SetEventActive(46185 /*[Test-Live\urs\Script2\]*/, true); #Timer für Script2 aktivieren
IPS_SetScriptTimer($IPS_SELF, 0); #Script1 anhalten

}



# Zeiten anzeigen für Test
#print $H.":".$M;
#print "
";
#print $beginnpause1. "
"; #Pausbeginn1 Zeitstempel
#print "Beginn Pause1 : ".strftime ( '%A, %d-%m-%Y %H:%M', $beginnpause1 ). " Uhr"; #Pausebeginn1 in leserlichem Format
#print "
";
#print $endepause1. "
"; #Pausbeginn1 Zeitstempel
#print "  Ende Pause1 : ".strftime ( '%A, %d-%m-%Y %H:%M', $endepause1 ). " Uhr"; #Pausebeginn1 in leserlichem Format

?>

Script 2, wird von Script 1 gestartet und beendet sich nach errreichen der eingestellten Temperatur.

 <?

// Holt den Temperaturwert von Sensor in Maische
#$temperatur_maische = GetValueFloat(55135 /*[Objekt #55135 existiert nicht]*/);
$temperatur_maische = GetValue(42596 /*[Test-Live\urs\Testtemperarur]*/); #Testtemperatur, manuell ändern

IPS_SetScriptTimer ($IPS_SELF, 5); // 5 Sek. aktiv halten

if ($temperatur_maische > 25 and $temperatur_maische <=55)
{
#TMEX_F3A_SetPin(25864 /*[Objekt #25864 existiert nicht]*/, 0, true);  // Brenner einschalten
#TMEX_F3A_SetPin(39013 /*[Objekt #39013 existiert nicht]*/, 1, true);  // Rührwerk einschalten
setvalue(15815 /*[Test-Live\urs\Brenner]*/,true); #Test-Gerät einschalten

}

if ($temperatur_maische > 55)
{
#TMEX_F3A_SetPin(25864 /*[Objekt #25864 existiert nicht]*/, 0, false);  // Brenner ausschalten
#TMEX_F3A_SetPin(39013 /*[Objekt #39013 existiert nicht]*/, 1, false);  // Rührwerk ausschalten
setvalue(15815 /*[Test-Live\urs\Brenner]*/,false); #Test-Gerät ausschalten
$beginnpause2 = time();
$endepause2 = $beginnpause2+65; #Pausezeit(in Sek.) zu Pausebeginn addieren
IPS_SetEventActive(46185 /*[Test-Live\urs\Script2\]*/, false);# Timer für Script2 deaktivieren
IPS_SetScriptTimer($IPS_SELF, 0); #Script2 anhalten
}



# Zeiten anzeigen für Test
#print $beginnpause2. "
"; #Pausbeginn1 Zeitstempel
#print "Beginn Pause1 : ".strftime ( '%A, %d-%m-%Y %H:%M', $beginnpause2 ). " Uhr"; #Pausebeginn1 in leserlichem Format
#print "
";
#print $endepause2. "
"; #Pausbeginn1 Zeitstempel
#print "  Ende Pause1 : ".strftime ( '%A, %d-%m-%Y %H:%M', $endepause2 ). " Uhr"; #Pausebeginn1 in leserlichem Format

?>

Objekte.JPG

Hallo KH

Das sieht ja mega aus, bin leider noch nicht zum Testen gekommen, jetzt aber, müssen das 2 Scripte sein.
Kann man das nicht in eines zusammen packen, ich habe etwa 20 Rezepte, diese müsste ich ja sonst einzel auseiander nehmen und für jeden Step ein eigenes Script schreiben.

Gruss Urs