Fußbodenheizung - Steuerung/Infrarotheizung-Steuerung

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

twoxx
Beiträge: 534
Registriert: 16.03.2015, 18:57
Hat sich bedankt: 1 Mal
Danksagung erhalten: 26 Mal

Re: Fußbodenheizung - Steuerung/Infrarotheizung-Steuerung

Beitrag von twoxx » 09.01.2020, 20:51

BA hat geschrieben:
09.01.2020, 00:41
Hallo twoxx

Danke für die ausführliche Rückmeldung.......

hallo Björn,
ich melde mich am Wochenende.
Frdl. Gruß
Twoxx
- Charly - Raspymatic mit Redmatic, 420 Systemvariablen, 440 Programmen, 101 Direktverknüpfungen, 121 Geräten
- CCU3- Raspymatic mit Redmatic und Verbindung zur PV-Anlage/Wechselrichter
- Charly - Raspymatic mit Redmatic und Sprachsteuerung per Alexa

twoxx
Beiträge: 534
Registriert: 16.03.2015, 18:57
Hat sich bedankt: 1 Mal
Danksagung erhalten: 26 Mal

Re: Fußbodenheizung - Steuerung/Infrarotheizung-Steuerung

Beitrag von twoxx » 11.01.2020, 01:02

BA hat geschrieben:
09.01.2020, 00:41
Hallo twoxx

Danke für die ausführliche Rückmeldung......
Danke schonmal und gruß
Björn
Hallo Björn,

hier jetzt der Workaround:

1. Erstelle die Direktverknüpfung zwischen dem Wired-Aktor und der virtuellen Taste der CCU2
Stelle hier eine "Verweildauer" von 10 Stunden ein (damit der Aktor sicherheitshalber nach spätestens 10 Stunden ausschaltet, falls die
CCU ausgefallen ist)

2. Installiere CUXD auf der CCU2.
3. Erstelle ein Timer-Device in CUXD:
Timer Device.JPG
Wenn du das Device in CUXD speicherst, erscheint es in der CCU im Posteingang (so wie wenn das Gerät angelernt worden wäre).

4. Erstelle ein Programm in welchem die VIRTUELLE TASTE (nicht der Schaltaktor) betätigt wird, wenn der CUXD-Timer "AUSGESCHALTET"
WIRD (TRIGGER: Bei Veränderung).
Achtung! es ist wichtig, das die virtuelle Taste betätigt wird,wenn der TIMER AUSgeschaltet wird.
"Timer - AUS" bedeutet hier technisch: Schaltaktor EIN
Aktor EIN.JPG
5. Erstelle ein Programm in welchem der SCHALTAKTOR (nicht die virtuelle Taste) AUSgeschaltet wird, wenn der CUXD-Timer "EIN-geschaltet" wird.
(Trigger: bei Aktualisierung).
Aktor AUS.JPG
6. Ersetze Script 4 durch folgendes auf Deine Situation abgeändertes Script:

Code: Alles auswählen

!--------Steuerung Fussbodenheizung
!----- RaumreglerEGBuro und Aktor identifizieren
string RaumreglerEGBuro = "BidCos-RF.XXXXXXXXXXX";
string CUXDTIMER = "CUxD.XXXXXXXXXXXX";
string CUXDKANAL ="XXX";
string AktorEGBuro = "BidCos-RF.XXXXXXXXXXX";
string AktorKanalEGBuro = "X";

!----Ausführintervall Script und diverses festlegen
dom.GetObject("SicherheitsheizzeitEGBuro").State(240.000); !---- Heizzeit, falls errechnete Heizzeit im Minus
dom.GetObject("SchaltschwelleniedertempEGBuro").State(190.000); !--- Sofern errechnete Schaltzeit kleiner, dann nicht einschalten
dom.GetObject("SchaltschwellehochtempEGBuro").State(190.000); !---- Sofern errechnete Schaltzeit kleiner, dann nicht einschalten
dom.GetObject("ScriptwiederholungEGBuromax").State(5.0); !-----------Wiederholung des Scripts bis Wärmeerhaltung
dom.GetObject("ScriptwiederholungEGBuroHeizzeit").State(241.0); !---- Heizzeit bei Wärmeerhaltung
!----- Temperaturen feststellen
dom.GetObject("isttemperaturEGBuro").State((0.0000 + dom.GetObject(RaumreglerEGBuro#":2.ACTUAL_TEMPERATURE").Value()));
dom.GetObject("solltemperaturEGBuro").State((0.0000 + dom.GetObject(RaumreglerEGBuro#":2.SET_TEMPERATURE").Value()));
var schaltzustandEGBuro = dom.GetObject(AktorEGBuro#":"#AktorKanalEGBuro#".STATE").Value();
!------ GrenzTemperaturen berechnen
dom.GetObject("hochtempEGBuro").State((0.000 + dom.GetObject("solltemperaturEGBuro").Value() + 0.5));
dom.GetObject("toleranzniederEGBuro").State(1.0);
dom.GetObject("niedertempEGBuro").State((0.000 + dom.GetObject("solltemperaturEGBuro").Value() - dom.GetObject("toleranzniederEGBuro").Value()));
dom.GetObject("hochstillEGBuro").State((0.000 + dom.GetObject("solltemperaturEGBuro").Value() + 0.1));
dom.GetObject("niederstillEGBuro").State((0.000 + dom.GetObject("solltemperaturEGBuro").Value() - 0.2));
dom.GetObject("toleranzEGBuro").State((0.000 + dom.GetObject("hochtempEGBuro").Value() - dom.GetObject("niedertempEGBuro").Value()));
dom.GetObject("EGBuroFBTempDiff2").State(dom.GetObject("EGBuroFBTempDiff").Value());
if ((dom.GetObject("EGBuroFBTempDiff").Value()) <= 0.000)
{
dom.GetObject("EGBuroFBTempDiff").State(0.010);
WriteLine("TempDiff kleiner gleich 0"); WriteLine(dom.GetObject("EGBuroFBTempDiff").Value());
}
else
{
WriteLine ("TempfDiff größer 0"); WriteLine(dom.GetObject("EGBuroFBTempDiff").Value());
}
!---------------------- Einschaltzeit berechnen -----------------
if ((dom.GetObject("isttemperaturEGBuro").Value()) <= (dom.GetObject("solltemperaturEGBuro").Value()))
{
WriteLine("Isttemperatur kleinergleich solltemperatur");
dom.GetObject("heizleistungEGBuro").State((0.0000 + ((((dom.GetObject("solltemperaturEGBuro").Value() + 0.2000) - dom.GetObject("isttemperaturEGBuro").Value()) / dom.GetObject("toleranzEGBuro").Value()) * 100.0000)));
dom.GetObject("heizzeit1EGBuro").State((0.0000 + ((dom.GetObject("ScriptintervallEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000)));
dom.GetObject("einschaltzeitvergleichtempEGBuro").State((0.0000 + ((dom.GetObject("EGBuroFBTempDiff").Value() * dom.GetObject("heizzeit1EGBuro").Value()) / dom.GetObject("EGBuroDiffStartEndHeizzeit").Value()))) 
dom.GetObject("OrigHeizEGBuro").State(dom.GetObject("heizzeit1EGBuro").Value());
if (((dom.GetObject("toleranzEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000) >= dom.GetObject("einschaltzeitvergleichtempEGBuro").Value())
{
WriteLine("heizzeit im original übernommen"); dom.GetObject("heizzeitEGBuro").State((dom.GetObject("heizzeit1EGBuro").Value() * 60.0000));
}
else
{
WriteLine("reduzierte heizzeit übernommen"); 
dom.GetObject("tempdifferenzkalkrealEGBuro").State((0.0000 + (dom.GetObject("einschaltzeitvergleichtempEGBuro").Value() - ((dom.GetObject("toleranzEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000))));
dom.GetObject("reduzierungszeitEGBuro").State(0.0000 + ((dom.GetObject("tempdifferenzkalkrealEGBuro").Value() * dom.GetObject("EGBuroDiffStartEndHeizzeit").Value()) / dom.GetObject("EGBuroFBTempDiff").Value()));
dom.GetObject("neueheizzeitEGBuro").State((0.0000 + (dom.GetObject("heizzeit1EGBuro").Value() - dom.GetObject("reduzierungszeitEGBuro").Value())));
if (dom.GetObject("neueheizzeitEGBuro").Value() <= 0.0000)
{
dom.GetObject("heizzeitEGBuro").State((0.0000 + dom.GetObject("SicherheitsheizzeitEGBuro").Value())); WriteLine("sicherheitshalber 4 Minuten heizen");
}
else
{
dom.GetObject("heizzeitEGBuro").State((0.0000 + (dom.GetObject("neueheizzeitEGBuro").Value() * 60.0000))); WriteLine("neueheizzeit übernommen");
}
}
}
else
{
WriteLine("Isttemperatur größer solltemperatur");
dom.GetObject("heizleistungEGBuro").State((0.0000 + (((dom.GetObject("hochtempEGBuro").Value() - dom.GetObject("isttemperaturEGBuro").Value()) / dom.GetObject("toleranzEGBuro").Value()) * 100.0000)));
dom.GetObject("heizzeit1EGBuro").State((0.0000 + ((dom.GetObject("ScriptintervallEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000)));
dom.GetObject("einschaltzeitvergleichtempEGBuro").State((0.0000 + (dom.GetObject("EGBuroFBTempDiff").Value() * dom.GetObject("heizzeit1EGBuro").Value() / dom.GetObject("EGBuroDiffStartEndHeizzeit").Value())));
dom.GetObject("OrigHeizEGBuro").State(dom.GetObject("heizzeit1EGBuro").Value());
if (((dom.GetObject("toleranzEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000) >= dom.GetObject("einschaltzeitvergleichtempEGBuro").Value())
{
WriteLine("heizzeit im original übernommen"); dom.GetObject("heizzeitEGBuro").State((dom.GetObject("heizzeit1EGBuro").Value() * 60));
}
else
{
WriteLine("reduzierte heizzeit übernommen"); 
dom.GetObject("tempdifferenzkalkrealEGBuro").State(0.0000 + (dom.GetObject("einschaltzeitvergleichtempEGBuro").Value() - ((dom.GetObject("toleranzEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000)));
dom.GetObject("reduzierungszeitEGBuro").State(0.0000 + ((dom.GetObject("tempdifferenzkalkrealEGBuro").Value() * dom.GetObject("EGBuroDiffStartEndHeizzeit").Value()) / dom.GetObject("EGBuroFBTempDiff").Value()));
dom.GetObject("neueheizzeitEGBuro").State(0.0000 + (dom.GetObject("heizzeit1EGBuro").Value() - dom.GetObject("reduzierungszeitEGBuro").Value()));
if (dom.GetObject("neueheizzeitEGBuro").Value() <= 0.0000)
{
dom.GetObject("heizzeitEGBuro").State(0.0000 + dom.GetObject("SicherheitsheizzeitEGBuro").Value()); WriteLine("sicherheitshalber 4 Minuten heizen");
}
else
{
dom.GetObject("heizzeitEGBuro").State(0.0000 + (dom.GetObject("neueheizzeitEGBuro").Value() * 60.0000)); WriteLine("neueheizzeit übernommen");
}
}
}
!-----------------------Heizzeit in Systemvariable schreiben
dom.GetObject("EGBuroFBEinschaltzeit").State(dom.GetObject("heizzeitEGBuro").Value());
dom.GetObject("EGBuroFBeinschaltzeitvergleichtemp").State(dom.GetObject("einschaltzeitvergleichtempEGBuro").Value());

!------------------- Künftige Temperatur bei doppelter Schaltzeit vorausrechnen
dom.GetObject("tempvorausrechnungEGBuro").State(0.0000 + ((dom.GetObject("EGBuroFBTempDiff2").Value() * (dom.GetObject("ScriptintervallEGBuro").Value() * 2.000) / dom.GetObject("EGBuroDiffStartEndHeizzeit").Value())));
dom.GetObject("NeueisttemperaturEGBuro").State(0.0000 + dom.GetObject("isttemperaturEGBuro").Value() + dom.GetObject("tempvorausrechnungEGBuro").Value());
!--------------TEST Temperaturen anzeigen
!----- Schaltungen ausführen
if ((dom.GetObject("isttemperaturEGBuro").Value() < dom.GetObject("hochtempEGBuro").Value()) && (dom.GetObject("isttemperaturEGBuro").Value() > dom.GetObject("niedertempEGBuro").Value())) 
 {
if ((dom.GetObject("EGBuroFBVergleichTemp").Value() == dom.GetObject("isttemperaturEGBuro").Value()) && (dom.GetObject("isttemperaturEGBuro").Value() > dom.GetObject("solltemperaturEGBuro").Value()))
{
dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value()); WriteLine("Ist = Vergleichstemperatur");
if (schaltzustandEGBuro == "true")
   {
    WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
    }
    else
    {
     WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
     }
}
else
{
 WriteLine("innerhalb toleranz"); dom.GetObject("EGBuroFBTempIstinToleranz").State(true);
  if ((dom.GetObject("isttemperaturEGBuro").Value() <= dom.GetObject("hochstillEGBuro").Value()) && (dom.GetObject("isttemperaturEGBuro").Value() >= dom.GetObject("niederstillEGBuro").Value()))
  {
   WriteLine("innerhalb stille");
    if (schaltzustandEGBuro == "true")
   {
    WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
    }
    else
    {
     WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
     }
   }
   else
   {
   WriteLine("ausserhalb stille");
   if (dom.GetObject("isttemperaturEGBuro").Value() < dom.GetObject("niederstillEGBuro").Value())
   {
    if (dom.GetObject("heizzeitEGBuro").Value() < dom.GetObject("SchaltschwelleniedertempEGBuro").Value())
    {
    WriteLine("Schaltzeit zu klein");dom.GetObject("EGBuroFBTempIstinToleranz").State(true);
    if (schaltzustandEGBuro == "true")
    {
    WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value()); 
    }
    else
    {
     WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
     }
    }
    else
    {
    WriteLine("kleiner niederstill"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".TIMER_SET").State(dom.GetObject("heizzeitEGBuro").Value()); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(false); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value()); 
    }
   }
    else
    {
    if (dom.GetObject("EGBuroFBVergleichTemp").Value() < dom.GetObject("isttemperaturEGBuro").Value())
    {
    dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value()); WriteLine("über hochstill gestiegen"); 
    if (schaltzustandEGBuro == "true")
    {
    WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
    }
    else
    {
     WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
     }
     }
    else
    {
    if (dom.GetObject("heizzeitEGBuro").Value() < dom.GetObject("SchaltschwellehochtempEGBuro").Value())
    {
    WriteLine("Schaltzeit zu klein"); dom.GetObject("EGBuroFBTempIstinToleranz").State(true);
    if (schaltzustandEGBuro == "true")
   {
    WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
    }
    else
    {
     WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
     }
    }
    else
    {
     WriteLine("größer als hochstill"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".TIMER_SET").State(dom.GetObject("heizzeitEGBuro").Value()); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(false); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
     }
     }
   }
  }
}
}
else
  {
  if (dom.GetObject("isttemperaturEGBuro").Value() >= dom.GetObject("hochtempEGBuro").Value())
  {
  WriteLine("Isttemperatur größer als hochtemp");
  if (schaltzustandEGBuro == "true")
   {
    if (dom.GetObject("NeueisttemperaturEGBuro").Value() <= dom.GetObject("solltemperaturEGBuro").Value())
    {
     WriteLine("Neue Isttemp kleiner gleich Solltemperatur");
     WriteLine("ist eingeschaltet und soll eingeschaltet sein");
     dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
     }
     else
     {
     WriteLine("Neue Isttemp grösser Solltemperatur");
     WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
     }
    }
    else
    {
    if (dom.GetObject("NeueisttemperaturEGBuro").Value() <= dom.GetObject("solltemperaturEGBuro").Value())
    {
     WriteLine("Neue Isttemp kleiner gleich Solltemperatur");
     WriteLine("ist ausgeschaltet und soll eingeschaltet sein");
dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".TIMER_SET").State(36000); 
     dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(false); dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
dom.GetObject("EGBuroFBEinschaltzeit").State(888);
     }
     else
     {
     WriteLine("Neue Isttemp grösser Solltemperatur");
     WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
     }
     }
  }
  else
  {
   if (dom.GetObject("isttemperaturEGBuro").Value() == dom.GetObject("niedertempEGBuro").Value())
  {
   if (schaltzustandEGBuro == "true")
   {
    if (dom.GetObject("NeueisttemperaturEGBuro").Value() >= dom.GetObject("niederstillEGBuro").Value())
    {
     WriteLine("Neue Isttemp größer gleich Niederstill");
     WriteLine("ist eingeschaltet und soll ausgeschaltet sein");
     dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
     }
     else
     {
     WriteLine("Neue Isttemp kleiner Niederstill");
     WriteLine("ist eingeschaltet und soll eingeschaltet sein");
     dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
     }
    }
    else
    {
     if (dom.GetObject("NeueisttemperaturEGBuro").Value() >= dom.GetObject("niederstillEGBuro").Value())
    {
     WriteLine("Neue Isttemp größer gleich Niederstill");
     WriteLine("ist ausgeschaltet und soll eingeschaltet sein"); dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
     }
     else
     {
     WriteLine("Neue Isttemp kleiner Niederstill");
     WriteLine("ist ausgeschaltet und soll eingeschaltet sein");
dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".TIMER_SET").State(36000);  dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(false);dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
dom.GetObject("EGBuroFBEinschaltzeit").State(888);
     }
     }
    }
   else
   {
   WriteLine("Isttemperatur ist kleiner als niedertemp"); 
   if (schaltzustandEGBuro == "true")
   {
    if (dom.GetObject("NeueisttemperaturEGBuro").Value() >= dom.GetObject("niederstillEGBuro").Value())
    {
     WriteLine("Neue Isttemp größer gleich Niederstill");
     WriteLine("ist eingeschaltet und soll ausgeschaltet sein");
     dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
     }
     else
     {
     WriteLine("Neue Isttemp kleiner Niederstill");
     WriteLine("ist eingeschaltet und soll eingeschaltet sein");
     dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
     }
    }
    else
    {
     if (dom.GetObject("NeueisttemperaturEGBuro").Value() >= dom.GetObject("niederstillEGBuro").Value())
    {
     WriteLine("Neue Isttemp größer gleich Niederstill");
     WriteLine("ist ausgeschaltet und soll eingeschaltet sein"); dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
     }
     else
     {
     WriteLine("Neue Isttemp kleiner Niederstill");
     WriteLine("ist ausgeschaltet und soll eingeschaltet sein");
dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".TIMER_SET").State(36000); 
dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(false); dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
dom.GetObject("EGBuroFBEinschaltzeit").State(888);
     }
     }
   }
  }
}
if ((dom.GetObject("solltemperaturEGBuro").Value() < 5.600) && (dom.GetObject("ScriptwiederholungEGBuromax").Value() == dom.GetObject("ScriptwiederholungEGBuro").Value()) && (dom.GetObject("Aussentemp").Value() == 2.0))
{
dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".TIMER_SET").State(dom.GetObject("ScriptwiederholungEGBuroHeizzeit").Value()); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(false); dom.GetObject("ScriptwiederholungEGBuro").State(0.0);
dom.GetObject("EGBuroFBEinschaltzeit").State(999);
}
else
{
WriteLine("nix");
dom.GetObject("ScriptwiederholungEGBuro").State(dom.GetObject("ScriptwiederholungEGBuro").Value() + 1.0);
if (dom.GetObject("ScriptwiederholungEGBuro").Value() > dom.GetObject("ScriptwiederholungEGBuromax").Value())
{
dom.GetObject("ScriptwiederholungEGBuro").State(0.0); 
}
else
{
dom.GetObject("ScriptwiederholungEGBuro").State(dom.GetObject("ScriptwiederholungEGBuro").Value());
}
}
WriteLine("Ende");
Dadurch das der WIRED-Aktor keine "ON-Time"-Funktion besitzt, die man per Script oder Programm ansprechen kann,
geben wir die ON-Time aus dem Heizungsscript an das CUXD-Device weiter.
Solange die ON-Time im Device abläuft ist das CUXD Device im Status "AUS" - durch das Programm wird hier der Schaltaktor über die
virtuelle Taste eingeschaltet (damit die Sicherheitsabschaltung greift).
Wenn die ON-Time im Cuxd-Device abgelaufen ist, schaltet das Device "ein" und durch das Programm wird der Schaltaktor direkt
abgeschaltet.
- Charly - Raspymatic mit Redmatic, 420 Systemvariablen, 440 Programmen, 101 Direktverknüpfungen, 121 Geräten
- CCU3- Raspymatic mit Redmatic und Verbindung zur PV-Anlage/Wechselrichter
- Charly - Raspymatic mit Redmatic und Sprachsteuerung per Alexa

BA
Beiträge: 34
Registriert: 02.08.2007, 00:53

Re: Fußbodenheizung - Steuerung/Infrarotheizung-Steuerung

Beitrag von BA » 13.01.2020, 20:15

Moin

Danke für die ausführliche Anleitung.

Ich habe jetzt alles so für einen Raum einmal umgesetzt. Habe es mehrfach kontrolliert.
Leider funktioniert es nicht richtig.

Problem ist, das der Aktor überhaupt nicht eingeschaltet wird.

Habe heute einmal ins Log der CCu2 geschaut und folgenden Eintrag gefunden.
Dieser kommt genau alle 20min und das seit ich alles am WE eingerichtet habe.

Code: Alles auswählen

Jan 13 18:40:04 homematic-ccu2 local0.err ReGaHss: ERROR: ScriptRuntimeError: !--------Steuerung Fussbodenheizung !----- RaumreglerOGKind und Aktor identifizieren string RaumreglerOGKind = "BidCos-RF.OEQxxxxxxx"; string CUXDTIMER = "CUxD.CUXxxxxxxx"; string CUXDKANAL ="1"; st
Jan 13 19:00:04 homematic-ccu2 local0.err ReGaHss: ERROR: ScriptRuntimeError: !--------Steuerung Fussbodenheizung !----- RaumreglerOGKind und Aktor identifizieren string RaumreglerOGKind = "BidCos-RF.OEQxxxxxxx"; string CUXDTIMER = "CUxD.CUXxxxxxxx"; string CUXDKANAL ="1"; st
Jan 13 19:20:04 homematic-ccu2 local0.err ReGaHss: ERROR: ScriptRuntimeError: !--------Steuerung Fussbodenheizung !----- RaumreglerOGKind und Aktor identifizieren string RaumreglerOGKind = "BidCos-RF.OEQxxxxxxx"; string CUXDTIMER = "CUxD.CUXxxxxxxx"; string CUXDKANAL ="1"; st
Jan 13 19:21:50 homematic-ccu2 daemon.info cuxd[309]: save paramsets(/usr/local/addons/cuxd/cuxd.ps) size:621
Jan 13 19:40:04 homematic-ccu2 local0.err ReGaHss: ERROR: ScriptRuntimeError: !--------Steuerung Fussbodenheizung !----- RaumreglerOGKind und Aktor identifizieren string RaumreglerOGKind = "BidCos-RF.OEQxxxxxxx"; string CUXDTIMER = "CUxD.CUXxxxxxxx"; string CUXDKANAL ="1"; st
Scheint ja, das die CCu2 alle 20 min das Programm 3 mit den 3 Scripten auszuführen versucht, aber scheinbar beim "Steuerung Fussbodenheizung"-Script hängt, oder?

Hier einmal mein Script dazu:

Code: Alles auswählen

!--------Steuerung Fussbodenheizung
!----- RaumreglerOGKind und Aktor identifizieren
string RaumreglerOGKind = "BidCos-RF.OEQxxxxxxx";
string CUXDTIMER = "CUxD.CUXxxxxxxx";
string CUXDKANAL ="1";
string AktorOGKind = "BidCos-RF.MEQxxxxxxx";
string AktorKanalOGKind = "17";

!----Ausführintervall Script und diverses festlegen
dom.GetObject("SicherheitsheizzeitOGKind").State(240.000); !---- Heizzeit, falls errechnete Heizzeit im Minus
dom.GetObject("SchaltschwelleniedertempOGKind").State(190.000); !--- Sofern errechnete Schaltzeit kleiner, dann nicht einschalten
dom.GetObject("SchaltschwellehochtempOGKind").State(190.000); !---- Sofern errechnete Schaltzeit kleiner, dann nicht einschalten
dom.GetObject("ScriptwiederholungOGKindmax").State(5.0); !-----------Wiederholung des Scripts bis Wärmeerhaltung
dom.GetObject("ScriptwiederholungOGKindHeizzeit").State(241.0); !---- Heizzeit bei Wärmeerhaltung
!----- Temperaturen feststellen
dom.GetObject("isttemperaturOGKind").State((0.0000 + dom.GetObject(RaumreglerOGKind#":2.ACTUAL_TEMPERATURE").Value()));
dom.GetObject("solltemperaturOGKind").State((0.0000 + dom.GetObject(RaumreglerOGKind#":2.SET_TEMPERATURE").Value()));
var schaltzustandOGKind = dom.GetObject(AktorOGKind#":"#AktorKanalOGKind#".STATE").Value();
!------ GrenzTemperaturen berechnen
dom.GetObject("hochtempOGKind").State((0.000 + dom.GetObject("solltemperaturOGKind").Value() + 0.5));
dom.GetObject("toleranzniederOGKind").State(1.0);
dom.GetObject("niedertempOGKind").State((0.000 + dom.GetObject("solltemperaturOGKind").Value() - dom.GetObject("toleranzniederOGKind").Value()));
dom.GetObject("hochstillOGKind").State((0.000 + dom.GetObject("solltemperaturOGKind").Value() + 0.1));
dom.GetObject("niederstillOGKind").State((0.000 + dom.GetObject("solltemperaturOGKind").Value() - 0.2));
dom.GetObject("toleranzOGKind").State((0.000 + dom.GetObject("hochtempOGKind").Value() - dom.GetObject("niedertempOGKind").Value()));
dom.GetObject("OGKindFBTempDiff2").State(dom.GetObject("OGKindFBTempDiff").Value());
if ((dom.GetObject("OGKindFBTempDiff").Value()) <= 0.000)
{
dom.GetObject("OGKindFBTempDiff").State(0.010);
WriteLine("TempDiff kleiner gleich 0"); WriteLine(dom.GetObject("OGKindFBTempDiff").Value());
}
else
{
WriteLine ("TempfDiff größer 0"); WriteLine(dom.GetObject("OGKindFBTempDiff").Value());
}
!---------------------- Einschaltzeit berechnen -----------------
if ((dom.GetObject("isttemperaturOGKind").Value()) <= (dom.GetObject("solltemperaturOGKind").Value()))
{
WriteLine("Isttemperatur kleinergleich solltemperatur");
dom.GetObject("heizleistungOGKind").State((0.0000 + ((((dom.GetObject("solltemperaturOGKind").Value() + 0.2000) - dom.GetObject("isttemperaturOGKind").Value()) / dom.GetObject("toleranzOGKind").Value()) * 100.0000)));
dom.GetObject("heizzeit1OGKind").State((0.0000 + ((dom.GetObject("ScriptintervallOGKind").Value() * dom.GetObject("heizleistungOGKind").Value()) / 100.0000)));
dom.GetObject("einschaltzeitvergleichtempOGKind").State((0.0000 + ((dom.GetObject("OGKindFBTempDiff").Value() * dom.GetObject("heizzeit1OGKind").Value()) / dom.GetObject("OGKindDiffStartEndHeizzeit").Value()))) 
dom.GetObject("OrigHeizOGKind").State(dom.GetObject("heizzeit1OGKind").Value());
if (((dom.GetObject("toleranzOGKind").Value() * dom.GetObject("heizleistungOGKind").Value()) / 100.0000) >= dom.GetObject("einschaltzeitvergleichtempOGKind").Value())
{
WriteLine("heizzeit im original übernommen"); dom.GetObject("heizzeitOGKind").State((dom.GetObject("heizzeit1OGKind").Value() * 60.0000));
}
else
{
WriteLine("reduzierte heizzeit übernommen"); 
dom.GetObject("tempdifferenzkalkrealOGKind").State((0.0000 + (dom.GetObject("einschaltzeitvergleichtempOGKind").Value() - ((dom.GetObject("toleranzOGKind").Value() * dom.GetObject("heizleistungOGKind").Value()) / 100.0000))));
dom.GetObject("reduzierungszeitOGKind").State(0.0000 + ((dom.GetObject("tempdifferenzkalkrealOGKind").Value() * dom.GetObject("OGKindDiffStartEndHeizzeit").Value()) / dom.GetObject("OGKindFBTempDiff").Value()));
dom.GetObject("neueheizzeitOGKind").State((0.0000 + (dom.GetObject("heizzeit1OGKind").Value() - dom.GetObject("reduzierungszeitOGKind").Value())));
if (dom.GetObject("neueheizzeitOGKind").Value() <= 0.0000)
{
dom.GetObject("heizzeitOGKind").State((0.0000 + dom.GetObject("SicherheitsheizzeitOGKind").Value())); WriteLine("sicherheitshalber 4 Minuten heizen");
}
else
{
dom.GetObject("heizzeitOGKind").State((0.0000 + (dom.GetObject("neueheizzeitOGKind").Value() * 60.0000))); WriteLine("neueheizzeit übernommen");
}
}
}
else
{
WriteLine("Isttemperatur größer solltemperatur");
dom.GetObject("heizleistungOGKind").State((0.0000 + (((dom.GetObject("hochtempOGKind").Value() - dom.GetObject("isttemperaturOGKind").Value()) / dom.GetObject("toleranzOGKind").Value()) * 100.0000)));
dom.GetObject("heizzeit1OGKind").State((0.0000 + ((dom.GetObject("ScriptintervallOGKind").Value() * dom.GetObject("heizleistungOGKind").Value()) / 100.0000)));
dom.GetObject("einschaltzeitvergleichtempOGKind").State((0.0000 + (dom.GetObject("OGKindFBTempDiff").Value() * dom.GetObject("heizzeit1OGKind").Value() / dom.GetObject("OGKindDiffStartEndHeizzeit").Value())));
dom.GetObject("OrigHeizOGKind").State(dom.GetObject("heizzeit1OGKind").Value());
if (((dom.GetObject("toleranzOGKind").Value() * dom.GetObject("heizleistungOGKind").Value()) / 100.0000) >= dom.GetObject("einschaltzeitvergleichtempOGKind").Value())
{
WriteLine("heizzeit im original übernommen"); dom.GetObject("heizzeitOGKind").State((dom.GetObject("heizzeit1OGKind").Value() * 60));
}
else
{
WriteLine("reduzierte heizzeit übernommen"); 
dom.GetObject("tempdifferenzkalkrealOGKind").State(0.0000 + (dom.GetObject("einschaltzeitvergleichtempOGKind").Value() - ((dom.GetObject("toleranzOGKind").Value() * dom.GetObject("heizleistungOGKind").Value()) / 100.0000)));
dom.GetObject("reduzierungszeitOGKind").State(0.0000 + ((dom.GetObject("tempdifferenzkalkrealOGKind").Value() * dom.GetObject("OGKindDiffStartEndHeizzeit").Value()) / dom.GetObject("OGKindFBTempDiff").Value()));
dom.GetObject("neueheizzeitOGKind").State(0.0000 + (dom.GetObject("heizzeit1OGKind").Value() - dom.GetObject("reduzierungszeitOGKind").Value()));
if (dom.GetObject("neueheizzeitOGKind").Value() <= 0.0000)
{
dom.GetObject("heizzeitOGKind").State(0.0000 + dom.GetObject("SicherheitsheizzeitOGKind").Value()); WriteLine("sicherheitshalber 4 Minuten heizen");
}
else
{
dom.GetObject("heizzeitOGKind").State(0.0000 + (dom.GetObject("neueheizzeitOGKind").Value() * 60.0000)); WriteLine("neueheizzeit übernommen");
}
}
}
!-----------------------Heizzeit in Systemvariable schreiben
dom.GetObject("OGKindFBEinschaltzeit").State(dom.GetObject("heizzeitOGKind").Value());
dom.GetObject("OGKindFBeinschaltzeitvergleichtemp").State(dom.GetObject("einschaltzeitvergleichtempOGKind").Value());

!------------------- Künftige Temperatur bei doppelter Schaltzeit vorausrechnen
dom.GetObject("tempvorausrechnungOGKind").State(0.0000 + ((dom.GetObject("OGKindFBTempDiff2").Value() * (dom.GetObject("ScriptintervallOGKind").Value() * 2.000) / dom.GetObject("OGKindDiffStartEndHeizzeit").Value())));
dom.GetObject("NeueisttemperaturOGKind").State(0.0000 + dom.GetObject("isttemperaturOGKind").Value() + dom.GetObject("tempvorausrechnungOGKind").Value());
!--------------TEST Temperaturen anzeigen
!----- Schaltungen ausführen
if ((dom.GetObject("isttemperaturOGKind").Value() < dom.GetObject("hochtempOGKind").Value()) && (dom.GetObject("isttemperaturOGKind").Value() > dom.GetObject("niedertempOGKind").Value())) 
 {
if ((dom.GetObject("OGKindFBVergleichTemp").Value() == dom.GetObject("isttemperaturOGKind").Value()) && (dom.GetObject("isttemperaturOGKind").Value() > dom.GetObject("solltemperaturOGKind").Value()))
{
dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value()); WriteLine("Ist = Vergleichstemperatur");
if (schaltzustandOGKind == "true")
   {
    WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
    }
    else
    {
     WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
     }
}
else
{
 WriteLine("innerhalb toleranz"); dom.GetObject("OGKindFBTempIstinToleranz").State(true);
  if ((dom.GetObject("isttemperaturOGKind").Value() <= dom.GetObject("hochstillOGKind").Value()) && (dom.GetObject("isttemperaturOGKind").Value() >= dom.GetObject("niederstillOGKind").Value()))
  {
   WriteLine("innerhalb stille");
    if (schaltzustandOGKind == "true")
   {
    WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("OGKindFBTempIstinToleranz").State(true); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
    }
    else
    {
     WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("OGKindFBTempIstinToleranz").State(true); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
     }
   }
   else
   {
   WriteLine("ausserhalb stille");
   if (dom.GetObject("isttemperaturOGKind").Value() < dom.GetObject("niederstillOGKind").Value())
   {
    if (dom.GetObject("heizzeitOGKind").Value() < dom.GetObject("SchaltschwelleniedertempOGKind").Value())
    {
    WriteLine("Schaltzeit zu klein");dom.GetObject("OGKindFBTempIstinToleranz").State(true);
    if (schaltzustandOGKind == "true")
    {
    WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("OGKindFBTempIstinToleranz").State(true); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value()); 
    }
    else
    {
     WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("OGKindFBTempIstinToleranz").State(true); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
     }
    }
    else
    {
    WriteLine("kleiner niederstill"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".TIMER_SET").State(dom.GetObject("heizzeitOGKind").Value()); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(false); dom.GetObject("OGKindFBTempIstinToleranz").State(true); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value()); 
    }
   }
    else
    {
    if (dom.GetObject("OGKindFBVergleichTemp").Value() < dom.GetObject("isttemperaturOGKind").Value())
    {
    dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value()); WriteLine("über hochstill gestiegen"); 
    if (schaltzustandOGKind == "true")
    {
    WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
    }
    else
    {
     WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
     }
     }
    else
    {
    if (dom.GetObject("heizzeitOGKind").Value() < dom.GetObject("SchaltschwellehochtempOGKind").Value())
    {
    WriteLine("Schaltzeit zu klein"); dom.GetObject("OGKindFBTempIstinToleranz").State(true);
    if (schaltzustandOGKind == "true")
   {
    WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("OGKindFBTempIstinToleranz").State(true); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
    }
    else
    {
     WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("OGKindFBTempIstinToleranz").State(true); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
     }
    }
    else
    {
     WriteLine("größer als hochstill"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".TIMER_SET").State(dom.GetObject("heizzeitOGKind").Value()); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(false); dom.GetObject("OGKindFBTempIstinToleranz").State(true); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
     }
     }
   }
  }
}
}
else
  {
  if (dom.GetObject("isttemperaturOGKind").Value() >= dom.GetObject("hochtempOGKind").Value())
  {
  WriteLine("Isttemperatur größer als hochtemp");
  if (schaltzustandOGKind == "true")
   {
    if (dom.GetObject("NeueisttemperaturOGKind").Value() <= dom.GetObject("solltemperaturOGKind").Value())
    {
     WriteLine("Neue Isttemp kleiner gleich Solltemperatur");
     WriteLine("ist eingeschaltet und soll eingeschaltet sein");
     dom.GetObject("OGKindFBTempIstinToleranz").State(false); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
     }
     else
     {
     WriteLine("Neue Isttemp grösser Solltemperatur");
     WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("OGKindFBTempIstinToleranz").State(false); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
     }
    }
    else
    {
    if (dom.GetObject("NeueisttemperaturOGKind").Value() <= dom.GetObject("solltemperaturOGKind").Value())
    {
     WriteLine("Neue Isttemp kleiner gleich Solltemperatur");
     WriteLine("ist ausgeschaltet und soll eingeschaltet sein");
dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".TIMER_SET").State(36000); 
     dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(false); dom.GetObject("OGKindFBTempIstinToleranz").State(false); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
dom.GetObject("OGKindFBEinschaltzeit").State(888);
     }
     else
     {
     WriteLine("Neue Isttemp grösser Solltemperatur");
     WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("OGKindFBTempIstinToleranz").State(false); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
     }
     }
  }
  else
  {
   if (dom.GetObject("isttemperaturOGKind").Value() == dom.GetObject("niedertempOGKind").Value())
  {
   if (schaltzustandOGKind == "true")
   {
    if (dom.GetObject("NeueisttemperaturOGKind").Value() >= dom.GetObject("niederstillOGKind").Value())
    {
     WriteLine("Neue Isttemp größer gleich Niederstill");
     WriteLine("ist eingeschaltet und soll ausgeschaltet sein");
     dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("OGKindFBTempIstinToleranz").State(false); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
     }
     else
     {
     WriteLine("Neue Isttemp kleiner Niederstill");
     WriteLine("ist eingeschaltet und soll eingeschaltet sein");
     dom.GetObject("OGKindFBTempIstinToleranz").State(false); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
     }
    }
    else
    {
     if (dom.GetObject("NeueisttemperaturOGKind").Value() >= dom.GetObject("niederstillOGKind").Value())
    {
     WriteLine("Neue Isttemp größer gleich Niederstill");
     WriteLine("ist ausgeschaltet und soll eingeschaltet sein"); dom.GetObject("OGKindFBTempIstinToleranz").State(false); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
     }
     else
     {
     WriteLine("Neue Isttemp kleiner Niederstill");
     WriteLine("ist ausgeschaltet und soll eingeschaltet sein");
dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".TIMER_SET").State(36000);  dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(false);dom.GetObject("OGKindFBTempIstinToleranz").State(false); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
dom.GetObject("OGKindFBEinschaltzeit").State(888);
     }
     }
    }
   else
   {
   WriteLine("Isttemperatur ist kleiner als niedertemp"); 
   if (schaltzustandOGKind == "true")
   {
    if (dom.GetObject("NeueisttemperaturOGKind").Value() >= dom.GetObject("niederstillOGKind").Value())
    {
     WriteLine("Neue Isttemp größer gleich Niederstill");
     WriteLine("ist eingeschaltet und soll ausgeschaltet sein");
     dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(true); dom.GetObject("OGKindFBTempIstinToleranz").State(false); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
     }
     else
     {
     WriteLine("Neue Isttemp kleiner Niederstill");
     WriteLine("ist eingeschaltet und soll eingeschaltet sein");
     dom.GetObject("OGKindFBTempIstinToleranz").State(false); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
     }
    }
    else
    {
     if (dom.GetObject("NeueisttemperaturOGKind").Value() >= dom.GetObject("niederstillOGKind").Value())
    {
     WriteLine("Neue Isttemp größer gleich Niederstill");
     WriteLine("ist ausgeschaltet und soll eingeschaltet sein"); dom.GetObject("OGKindFBTempIstinToleranz").State(false); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
     }
     else
     {
     WriteLine("Neue Isttemp kleiner Niederstill");
     WriteLine("ist ausgeschaltet und soll eingeschaltet sein");
dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".TIMER_SET").State(36000); 
dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(false); dom.GetObject("OGKindFBTempIstinToleranz").State(false); dom.GetObject("OGKindFBVergleichTemp").State(dom.GetObject("isttemperaturOGKind").Value());
dom.GetObject("OGKindFBEinschaltzeit").State(888);
     }
     }
   }
  }
}
if ((dom.GetObject("solltemperaturOGKind").Value() < 5.600) && (dom.GetObject("ScriptwiederholungOGKindmax").Value() == dom.GetObject("ScriptwiederholungOGKind").Value()) && (dom.GetObject("Aussentemp").Value() == 2.0))
{
dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".TIMER_SET").State(dom.GetObject("ScriptwiederholungOGKindHeizzeit").Value()); dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(false); dom.GetObject("ScriptwiederholungOGKind").State(0.0);
dom.GetObject("OGKindFBEinschaltzeit").State(999);
}
else
{
WriteLine("nix");
dom.GetObject("ScriptwiederholungOGKind").State(dom.GetObject("ScriptwiederholungOGKind").Value() + 1.0);
if (dom.GetObject("ScriptwiederholungOGKind").Value() > dom.GetObject("ScriptwiederholungOGKindmax").Value())
{
dom.GetObject("ScriptwiederholungOGKind").State(0.0); 
}
else
{
dom.GetObject("ScriptwiederholungOGKind").State(dom.GetObject("ScriptwiederholungOGKind").Value());
}
}
WriteLine("Ende");
Ich habe dann einmal versucht, dieses script direkt über den Button "Skript Testen" zu starten. Ohne Erfolg. Es ist nichts passiert. Im Fenster "Ausgabe" wurde nichts angezeigt.

Hast Du einen Tipp, wo ich anfangen zu suchen kann.

Danke und Gruß
Björn

BA
Beiträge: 34
Registriert: 02.08.2007, 00:53

Re: Fußbodenheizung - Steuerung/Infrarotheizung-Steuerung

Beitrag von BA » 13.01.2020, 20:42

moin

da hab ich noch einen:

Ich finde in Deinen Scripten sehr häufig Enträge wie diesen:

Code: Alles auswählen

WriteLine("reduzierte heizzeit übernommen"); 
Was ja bedeutet, das der Text in den Anführungszeichen Ausgegeben wird. Bin leider immer noch nicht 100% sicher bei der CCu Programmierung. Wo finde ich denn diese Ausgabe? Im Log?

Kannst Du mir dann sagen in welchen und was eingestellt sein muss, damit ich die Ausgabe dort finde..

Danke und Gruß
Björn

twoxx
Beiträge: 534
Registriert: 16.03.2015, 18:57
Hat sich bedankt: 1 Mal
Danksagung erhalten: 26 Mal

Re: Fußbodenheizung - Steuerung/Infrarotheizung-Steuerung

Beitrag von twoxx » 14.01.2020, 20:16

BA hat geschrieben:
13.01.2020, 20:42
moin

da hab ich noch einen:

Ich finde in Deinen Scripten sehr häufig Enträge wie diesen:

Code: Alles auswählen

WriteLine("reduzierte heizzeit übernommen"); 
Was ja bedeutet, das der Text in den Anführungszeichen Ausgegeben wird. Bin leider immer noch nicht 100% sicher bei der CCu Programmierung. Wo finde ich denn diese Ausgabe? Im Log?

Kannst Du mir dann sagen in welchen und was eingestellt sein muss, damit ich die Ausgabe dort finde..

Danke und Gruß
Björn
Hallo Björn,
die Ausgabe "WriteLine" wird nur angezeigt, wenn Du das Script manuell bei "Script testen" in der Webui laufen lässt.
Danach siehst Du unten in der Ausgabe dann den Text
- Charly - Raspymatic mit Redmatic, 420 Systemvariablen, 440 Programmen, 101 Direktverknüpfungen, 121 Geräten
- CCU3- Raspymatic mit Redmatic und Verbindung zur PV-Anlage/Wechselrichter
- Charly - Raspymatic mit Redmatic und Sprachsteuerung per Alexa

BA
Beiträge: 34
Registriert: 02.08.2007, 00:53

Re: Fußbodenheizung - Steuerung/Infrarotheizung-Steuerung

Beitrag von BA » 14.01.2020, 21:48

Moin

ah ok.
Hast Du auch den Eintrag von mir davor gesehen?
Irgendwas läuft bei mir ja nicht und das manuelle Ausführen klappt ja auch nicht..

Gruß Björn

twoxx
Beiträge: 534
Registriert: 16.03.2015, 18:57
Hat sich bedankt: 1 Mal
Danksagung erhalten: 26 Mal

Re: Fußbodenheizung - Steuerung/Infrarotheizung-Steuerung

Beitrag von twoxx » 16.01.2020, 07:14

BA hat geschrieben:
14.01.2020, 21:48
Moin

ah ok.
Hast Du auch den Eintrag von mir davor gesehen?
Irgendwas läuft bei mir ja nicht und das manuelle Ausführen klappt ja auch nicht..

Gruß Björn
bei xxxxxxxxxx musst du natürlich die jeweilige geräteadresse anliefern. das xxxxxxxx ist ein platzhalter


teste erstmal ob mit folgendem script dein aktor einschaltet:

Code: Alles auswählen

    

string CUXDTIMER = "CUxD.CUXxxxxxxx";
string CUXDKANAL ="1";

dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".TIMER_SET").State(36000); 
     dom.GetObject(CUXDTIMER#":"#CUXDKANAL#".STATE").State(false);




trenn das steuerungsscript in teile auf und erweitere immer um den nächsten block.

schreib am ende des scriptteils immer ein WriteLine("durchgelaufen") hin.

dann siehst du beim testen ob der scriptteil funktioniert hat.

fang so an:

Code: Alles auswählen

   !--------Steuerung Fussbodenheizung
!----- RaumreglerOGKind und Aktor identifizieren
string RaumreglerOGKind = "BidCos-RF.OEQxxxxxxx";
string CUXDTIMER = "CUxD.CUXxxxxxxx";
string CUXDKANAL ="1";
string AktorOGKind = "BidCos-RF.MEQxxxxxxx";
string AktorKanalOGKind = "17";

WriteLine("durchgelaufen");
   
wenn der teil sauber durchläuft, erweiterst du ihn um den nächsten block:

Code: Alles auswählen

   


!--------Steuerung Fussbodenheizung
!----- RaumreglerOGKind und Aktor identifizieren
string RaumreglerOGKind = "BidCos-RF.OEQxxxxxxx";
string CUXDTIMER = "CUxD.CUXxxxxxxx";
string CUXDKANAL ="1";
string AktorOGKind = "BidCos-RF.MEQxxxxxxx";
string AktorKanalOGKind = "17";

!----Ausführintervall Script und diverses festlegen
dom.GetObject("SicherheitsheizzeitOGKind").State(240.000); !---- Heizzeit, falls errechnete Heizzeit im Minus
dom.GetObject("SchaltschwelleniedertempOGKind").State(190.000); !--- Sofern errechnete Schaltzeit kleiner, dann nicht einschalten
dom.GetObject("SchaltschwellehochtempOGKind").State(190.000); !---- Sofern errechnete Schaltzeit kleiner, dann nicht einschalten
dom.GetObject("ScriptwiederholungOGKindmax").State(5.0); !-----------Wiederholung des Scripts bis Wärmeerhaltung
dom.GetObject("ScriptwiederholungOGKindHeizzeit").State(241.0); !---- Heizzeit bei Wärmeerhaltung
WriteLine("durchgelaufen");  
und so weiter
- Charly - Raspymatic mit Redmatic, 420 Systemvariablen, 440 Programmen, 101 Direktverknüpfungen, 121 Geräten
- CCU3- Raspymatic mit Redmatic und Verbindung zur PV-Anlage/Wechselrichter
- Charly - Raspymatic mit Redmatic und Sprachsteuerung per Alexa

BA
Beiträge: 34
Registriert: 02.08.2007, 00:53

Re: Fußbodenheizung - Steuerung/Infrarotheizung-Steuerung

Beitrag von BA » 16.01.2020, 22:46

also Dein testscript zum einschalten des Aktors für eine Zeit X funktioniert.
- Aktor wird eingeschlatet und nach zeit x wieder ausgeschaltet.

Dann habe ich die einzelnen Blöcke des Scripte getestet.

Es bleibt hängen bei:

Code: Alles auswählen

var schaltzustandOGKind = dom.GetObject(AktorOGKind#":"#AktorKanalOGKind#".STATE").Value();
Alles davor kein Problem, danach habe ich noch nicht weiter getestet.

Wenn ich das richtig verstehe, ist das ja eine Variablen names "schaltzustandOGKind", die es nur in diesem Script dann gibt, ist keine Systemvariable, richtig? Gibt es als Systemvariable auch nicht.

BA
Beiträge: 34
Registriert: 02.08.2007, 00:53

Re: Fußbodenheizung - Steuerung/Infrarotheizung-Steuerung

Beitrag von BA » 16.01.2020, 23:08

Habe mich grade nochmal durch die Scripte Sprache gelesen und versucht die Zeile, wo er hängen bleibt nach zu vollziehen.

Was soll ich sagen:
Da ich ja einen HM Wired Aktor habe, muss ich natürlich auch den Ansprechbefehl darauf anpassen:

statt BidCos-RF dann ja BidCos-Wired....

Und schon bekomm ich eine Ausgabe:

Code: Alles auswählen

TempDiff kleiner gleich 0
0.010000
Isttemperatur größer solltemperatur
reduzierte heizzeit übernommen
sicherheitshalber 4 Minuten heizen
Isttemperatur größer als hochtemp
Neue Isttemp grösser Solltemperatur
ist ausgeschaltet und soll ausgeschaltet sein
nix
Ende
Jetzt lass ich das mal laufen und schau morgen mal, was es so macht.

gruß Björn

twoxx
Beiträge: 534
Registriert: 16.03.2015, 18:57
Hat sich bedankt: 1 Mal
Danksagung erhalten: 26 Mal

Re: Fußbodenheizung - Steuerung/Infrarotheizung-Steuerung

Beitrag von twoxx » 17.01.2020, 11:50

wunderbar!
- Charly - Raspymatic mit Redmatic, 420 Systemvariablen, 440 Programmen, 101 Direktverknüpfungen, 121 Geräten
- CCU3- Raspymatic mit Redmatic und Verbindung zur PV-Anlage/Wechselrichter
- Charly - Raspymatic mit Redmatic und Sprachsteuerung per Alexa

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“