Problem bei Abarbeitung mehrerer Schaltvorgänge

Aktuell bin ich daran meine Heizung mithilfe von 1-Wire zu automatisieren.

Folgendes wird automatisiert:

  • Kreislaufpumpen (AN / AUS)
  • Kreislaufmischer

Aktuell steuere ich die zwei Pumpen über jeweils 1 x Script.
Pro Pumpe ein Script mit an + aus. Das funktioniert auch super ohne Probleme.

Jetzt habe ich mir noch einen Button programmiert der heist „Heizperiode“ dort habe ich zur Auswahl „Sommer“ und „Winter“ wenn ich jetzt auf „Winter“ klicke, dann sollen sich beide Pumpen einschalten und laufen.

Bei diesem Schritt laufen mehrer 1-Wire-Befehle ab, ich habe folgendes Problem:

  1. Das Skript läuft durch, aber sporadisch hab ich das Problem das ein Befehl nicht ausgeführt wird.
  2. Das wäre fatal beim Steuern des Mischers, da wenn er den Stop-Befehl nicht annimmt, der Mischer bzw. der Ausgang dadurch nicht ausgeschalten wird, ich den Mischer quasi in „beide Richtungen“ fahren lassen würde, was ihn dann zerstört.

Folgendes habe ich versucht:
Ich habe versucht zwischen den Befehlen eine Pause einzubauen, sodass zwischen dem einzelnen absenden der Befehle eine Pause ist, ich dachte mir vielleicht kommt der Bus nicht so schnell hinterher, leider hat das nicht geholfen.

Mein aktuelles Skript sieht wie folgt aus:


<?

$ist_vorlauf_heizkoerper = GetValueFloat(28162 /*[Devices\Heizungsraum\Heizkörper\Ist-Vorlauf]*/ );
$soll_vorlauf_heizkoerper = GetValueInteger(55714 /*[Devices\Heizungsraum\Heizkörper\Soll-Vorlauf]*/ );
$soll_vorlauf_nachtabsenkung = GetValueInteger(14609 /*[Devices\Heizungsraum\Nachtabsenkung\Soll-Vorlauf]*/ );



#echo $soll_vorlauf_heizkoerper;
#echo("
");
#echo $ist_vorlauf_heizkoerper;
#echo("
");
#echo $soll_vorlauf_nachtabsenkung;



if ($ist_vorlauf_heizkoerper > $soll_vorlauf_heizkoerper)
	{
     RegVar_SendText(57132 /*[1-Wire Controller E-Service Online\RegisterVariable 1-Wire Controller]*/, "set,owd,out,4,7,1" . chr(13));
     IPS_Sleep(5000);
     RegVar_SendText(57132 /*[1-Wire Controller E-Service Online\RegisterVariable 1-Wire Controller]*/, "set,owd,out,4,7,0" . chr(13));
	}
elseif ($ist_vorlauf_heizkoerper == $soll_vorlauf_heizkoerper)
	{
		RegVar_SendText(57132 /*[1-Wire Controller E-Service Online\RegisterVariable 1-Wire Controller]*/, "set,owd,out,4,7,0" . chr(13));
	}
else
	{
	//	RegVar_SendText(57132 /*[1-Wire Controller E-Service Online\RegisterVariable 1-Wire Controller]*/, "set,owd,out,4,7,0" . chr(13));
     echo "an2";
     IPS_Sleep(2000);
     echo "aus2";
	}
?>


Hat jemand vielleicht schon ein ähnliches Problem gehabt, oder hat eine Idee an was es liegen könnte?

Hi Daniel!

Das Problem mit dem 1-Wire Bus und einem freien Slot :smiley: Ich hatte da auch mal meinen „Spaß“ damit g Deswegen bin ich persönlich kein Freund von 1-Wire :smiley:

Aber du könntest einen Schaltbefehl senden, dann eine Schleife mit X Versuchen in der der aktuelle Zustand abgefragt wird und wenn der Zustand noch nicht so ist wie gewünscht, dann nochmal schalten, usw… Ist der Zustand dann sofort oder irgendwann korrekt, dann kommt der nächste Schaltbefehl und wieder mit einer Schleife. Weißt du wie ich meine? :slight_smile: Jeweils mit einem kleinen Sleep. Ist zwar nichts für „schnelles“ schalten. Aber wenn es auf die Sekunde nicht an kommt und man auf Nummer sicher gehen will, dann geht das so.

Grüße,
Chris

Hi Bayaro,
jop, ich weiß was du meinst, da hatte ich auch schon dran gedacht, in die Richtung.
Anders wird es nicht gehen denke ich.

Ist für die Heizungssteuerung, also nicht zeitkritisch oder ähnliches.

Danke dir heut zum zweiten Mal. :slight_smile:

Den Sleep-Befehl dann zwischen den Schleifen, oder?

Allgemein Thema freier Slot:
Ich habe die Schalter direkt, ohne das es über ein Skript läuft, zig mal hin und her geschalten, hierbei sind mir keine „Aussetzter“ aufgefallen, was ich bisschen komisch finde.

Ich würde es so aufbauen:

- Schaltbefehl1
--- while Schaltzustand1 != Schaltbefehl1
------ Sleep 2 Sekunden
------ Schaltbefehl1

- Schaltbefehl2
--- while Schaltzustand2 != Schaltbefehl2
------ Sleep 2 Sekunden
------ Schaltbefehl2

So würde er immer wieder probieren zu schalten, bis er im richtigen Zustand ist. Wenn du es nur X-Mal probieren willst, dann baue noch einen Zähler mit in die WHILE-Schleife ein und jede Runde Zähler++. Dann ein IF in die WHILE rein mit „IF Zähler == 5“ dann „break“.

Was auch nur sehr zu empfehlen ist, alles über eine Semaphore leiten. Dann können sich die ganzen Skripte nicht mehr so schlimm in die Quere kommen. Seit ich bei mir, egal ob HomeMatic oder Z-Wave, ALLES durch eine Semaphore schicke und so immer nur einer die Verbindung belegen darf, habe ich VIEL weniger Probleme und alles funktioniert VIEL zuverlässiger! Denke das kann bei 1-Wire auch nicht schaden, aber da hab ich nicht wirklich Ahnung von…konnte mich damit ja, wie gesagt, nicht anfreunden :slight_smile:

Grüße,
Chris

  1. Das wäre fatal beim Steuern des Mischers, da wenn er den Stop-Befehl nicht annimmt, der Mischer bzw. der Ausgang dadurch nicht ausgeschalten wird, ich den Mischer quasi in „beide Richtungen“ fahren lassen würde, was ihn dann zerstört.

das hört sich für mich so an, dass du zwei unabhängige Schaltrelais hast, um den Mischer in die eine Richtung (Relais 1) fahren zu lassen und das andere Relais (2) für die andere Richtung.
Wenn das so sein sollte, dann würde ich ein Schaltrelais verwenden, was entweder den einen oder den anderen Ausgang mit Spannung versorgt, aber nie beide gleichzeitig.

Viele Grüße
Wickie

Servus

also ich steuere mein Heizung komplett, also incl. Pumpen, Ventile,Mischer,Brenner schon seit vielen Jahren per 1Wire.
Soweit 0 Probleme, 100% zuverlässig.

An deiner Stelle würde ich mal schauen ob im Log irgendwelche Fehlermeldungen bzw. 1Wire sind. Wenn ja hast ein Problem mit dem Bus. Auf Dauer kann nur eine ordentliche Behebung die Lösung sein. Einen Befehl 3x schicken weil er viellicht 2x nicht ankommt ist fraglich, wieweit willst das treiben ?

Wenn du Angst hast das etwas kaputtgeht wenn ein Schaltbefehl nicht ankommt, dann mußt sowiso was unternehmen.
Was ist wenn IPs grad zu einem blöden Zeitpunkt abstürzt ?

Hab das bei mir per Watchdog gelöst. Ein 1Wite Ausgang wird alle 30sek ganz kurz geschalten. Damit triggere ich ein Monoflop welches bei ausbleiben des Triggers über ein Relais allen anderen Relais die Spannung wegnimmt. Die Defaultstellungen aller Relais sind so gewählt das sich ein sicherer Zustand ergibt.
OK, der Mischer steht halt grad dort wo er war, aber es wird nix kaputt, und Notbetrieb ist gewährleistet.

gruß
bb

Sehr viele gute Tipp dabei.

@ Wickie:
Normalerweiße, habe ich so einen schalter für den Mischer, aber dieser hat irgendwie den Geist aufgegeben. Um vorerst weiterzumachen, arbeite ich aktuell mit einfachen Relaisausgängen, wo es bei „ungünstiger Schaltung“ zu einem defekt kommen kann. Grundsätzlich gebe ich dir aber vollkommen recht, das entweder oder geschalten werden muss.

@ Bayaro:
Interessant, das mit der Semaphore habe ich zuvor noch nie gehört in Bezug auf IP-Symcon, schau ich mir genauer an.

@ bbernhard:
Grundsätzlich die Frage, die ich mir gerade Stelle, in Bezug auf 1-Wire:
Kann es sein das Befehle nicht ankommen, da sie aktuell einfach keinen „freien Slot“ erwischt haben, oder
dürft der Befehl wenn dann überhaupt nur verspätet ankommen?

Ich weiß es jetzt nicht 100%tig, glaube aber das es im Treiber eine Art Queue gibt, und der Befehl dann halt in paar msec später rausgeht.
Ein Befehl dauert nur wenige msec.
Du müßtets alos schon einen sehr sehr großen Heizungskeller haben das du Probleme mit der Bandbeite des Busses bekommst.

gruß
bb

Welche 1-Wire Technik verwendest du denn? Hast du zwischen IPS und „Heizungsaktoren“ zufällig eine WLAN-Strecke? Das hatte bei mir diesen massiven Probleme verursacht, weil der TMEX-Treiber extrem Timing-Empfindlich ist. Erst bei den neuen 1-Wire Controllern wäre das wohl kein Problem mehr, weil das da irgendwie anders abläuft und man den Treiber nicht mehr braucht.

Grüße,
Chris

Das ist mit 2 Relais wesentlich einfacher.

Relais 1: Spannung Ein (Schliesserkontakt)
Relais 2: Richtung (Wechslerkontakt)

Somit können nie beide Richtungen des Mischers angesteuert werden.

Gruß
Dieter

Jetzt wo dus sagst, mein IP-Symcon Server ist über WLAN am Router.
Das ist aber kein Problem, den werde ich per Kabel anbinden. (Steht gleich in der Nähe)

Ich verwende den Ethernet Controller von eService.
Bei diesem Controller spielt der Temax Treiber keine Rolle mehr, soweit bekannt.

Bezüglich der Heizungsgröße:
Die Verkabelung der Heizung ist nicht groß, die Bus-Bandbreite nutzt ich nicht komplett aus.

Das ist eben das komische bei mir, ich würde ja nichts sagen, wenn der Schaltvorgang durch die Queue später erfolgt, aber das er gar nicht schalte ist schon komisch.