Link/Skript-Sammlung

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Benutzeravatar
JPS
Beiträge: 1093
Registriert: 07.08.2010, 22:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 8 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Script Probleme (überarbeitete Skripts)

Beitrag von JPS » 11.08.2016, 14:48

Auslösenden Rauchmelder erkennen
umgeschrieben von JPS, gegenüber dem verlinkten Skript mit Pushover statt E-Mail AddOn:

Code: Alles auswählen

! Daten holen Feuermelder
var tmpA=dom.GetObject("Sicherheit");
string tmpB;
string tmpC;
tmpC="";
foreach(tmpB,tmpA.EnumUsedIDs())
{
  var tmpD=dom.GetObject(tmpB);
  if(tmpD.IsTypeOf(OT_CHANNEL))
  {
    var tmpE=dom.GetObject(tmpD.Device());
    if(tmpE.HssType()=="HM-Sec-SD")
    {
       var tmpF=tmpD.DPByHssDP("STATE");
       if(tmpF.Value())
       {
          tmpC=tmpC+tmpE.Name();
       }
    }
  }
}
!
! Daten holen Systemdaten
string tmpG = dom.GetObject("tmpG").Value();
! Variablen für die Mail
string tmpH;
string tmpI = system.Date("%j/%Y, %A, %d.%m.%Y, %T Uhr");
tmpH = "Achtung, im Haus wurde " # tmpI # " FEUERALARM ausgeloest. Ausloesende Rauchmelder: " # tmpC # "";
string tmpJ;
string tmpK = "";
foreach(tmpJ, tmpH.Split(" "))
{
	tmpK = tmpK # "+" # tmpJ;
}
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -d token=TOKEN-d user=USER-d message='"#tmpK#"' -d priority=2 -d retry=30 -d  expire=3600 -d sound=persistent http://api.pushover.net/1/messages.json");
Verwendung meiner Hinweise und Skripte auf eigenes Risiko | Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung

Benutzeravatar
JPS
Beiträge: 1093
Registriert: 07.08.2010, 22:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 8 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Script Probleme (überarbeitete Skripts)

Beitrag von JPS » 11.08.2016, 14:50

Inventur-Skript zuletzt von Uwe111 angepasst, umgeschrieben von JPS.

Die Nutzung macht nur Sinn, wenn das Skript automatisch regelmäßig ausgeführt wird. Wenn es nur einmalig über Skript testen ausgeführt wird, kann auch das originale Skript bedenkenlos eingesetzt werden.

Code: Alles auswählen

    string tmpA;
    object tmpB;
    integer tmpC = 0;
    integer tmpD = 0;

    string tmpE;
    object tmpF;
    integer tmpG = 0;
    integer tmpH = 0;

    string tmpI = "";

    string tmpJ;

    foreach(tmpA, dom.GetObject(ID_DEVICES).EnumUsedIDs()) {
      var tmpB = dom.GetObject(tmpA);
      boolean tmpK = tmpB.Address().Substr(0,3) == "CUX";
      if ((tmpB.Address() != "BidCoS-Wir") && (tmpB.Address() != "BidCoS-RF")) {
        if (tmpK) {
          tmpD = tmpD + 1;
          tmpJ = tmpD.ToString();
        } else {
          tmpC = tmpC + 1;
          tmpJ = tmpC.ToString();
        }
        if (tmpC < 10) { tmpJ = " " # tmpJ; }
        if (tmpC < 100) { tmpJ = " " # tmpJ; }
        if (tmpK) { tmpJ = "C" # tmpJ; }
        else { tmpJ = " " # tmpJ; }
        WriteLine(tmpJ # " " # tmpB.Address() # " " # tmpB.HssType() # " (" # tmpB.Name() # ")");
        if (tmpK) { tmpI = tmpI # tmpB.Address().Substr(0,5) # "\t"; }
        else { tmpI = tmpI # tmpB.HssType() # "\t"; }
        foreach(tmpE, tmpB.Channels().EnumUsedIDs()) {
          if (tmpK) { tmpH = tmpH + 1; }
          else { tmpG = tmpG + 1; }
          tmpF = dom.GetObject(tmpE);
          tmpJ = "               :" # tmpF.Address().StrValueByIndex(":",1);
          WriteLine(tmpJ # " " # tmpF.Name() );
        }
      }
    }

    WriteLine("--------------------------------------------");

    Write(tmpG # " Kanäle in " # tmpC # " Geräten");
    if (tmpD > 0) { Write(" und "#tmpH # " CUxD-Kanäle in " # tmpD # " CUxD-Geräten"); }
    WriteLine(":");

    string tmpL;
    string tmpM;
    string tmpN = "";
    integer tmpO;
    foreach (tmpL, tmpI) {
    ! EnergyStar 13.10.2010 vvv
    ! den Suchstring um ein Komma und ein Leerzeichen erweitern um kein Teilstringproblem zu bekommen
          if (tmpN.Find(tmpL # ", ") == -1) {
    ! EnergyStar 13.10.2010 ^^^
          tmpO = 0;
          foreach (tmpM, tmpI) {
            if (tmpM == tmpL) {
              tmpO = tmpO + 1; }
            }
    ! EnergyStar 13.10.2010 vvv
    ! immer ein Komma und ein Leerzeichen anfügen
            tmpN = tmpN # tmpO # "x " # tmpL # ", ";
    ! EnergyStar 13.10.2010 ^^^
          }
        }

    ! EnergyStar 13.10.2010 vvv
    ! überflüssiges Komma und Leerzeichen am Ende entfernen
        WriteLine(tmpN.Substr(0, tmpN.Length() - 2));
    ! EnergyStar 13.10.2010 ^^^

        WriteLine("--------------------------------------------");
Verwendung meiner Hinweise und Skripte auf eigenes Risiko | Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung

Benutzeravatar
JPS
Beiträge: 1093
Registriert: 07.08.2010, 22:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 8 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Script Probleme (überarbeitete Skripts)

Beitrag von JPS » 11.08.2016, 14:52

Skript zum Zählen der Skriptvariablen von BadenPower, umgeschrieben von JPS.

Die Nutzung macht nur Sinn, wenn das Skript automatisch regelmäßig ausgeführt wird. Wenn es nur einmalig über Skript testen ausgeführt wird, kann auch das originale Skript bedenkenlos eingesetzt werden.

Code: Alles auswählen

!Skriptvariable-Counter Version 1.0.2
!*****************************************
!www.homematic-forum.de (c) by BadenPower

string tmpA = "";  !hier Progammname eingeben, um nur ein Programm zu prüfen
boolean tmpB = true;  !true: gibt die Variabelnamen aus / false: verhindert die Ausgabe der Variabelnamen

!-------- Ende Einstellungen --------

boolean tmpC = true;
string tmpD = "";
string tmpE = "";
integer tmpF = 0;
integer tmpG = 0;
integer tmpH = 0;
integer tmpI = 0;
integer tmpJ = 0;
string tmpK = "";

object tmpL = dom.GetObject(ID_PROGRAMS);
object tmpM;
object tmpN;
object tmpO;
object tmpP;
object tmpQ;
integer tmpR = 0;

boolean tmpS = true;
boolean tmpT = false;
boolean tmpU = false;
boolean tmpV = false;
boolean tmpW = false;
boolean tmpX = true;
boolean tmpY = false;
boolean tmpZ = false;
integer tmpA1 = 0;
integer tmpB1 = 0;
integer tmpC1 = 0;
integer tmpD1 = 0;
integer tmpE1 = 0;
string tmpF1 = "";
string tmpG1 = "";
!string tmpH1 = "abcdegijlmnorstvxy";
string tmpI1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_";
string tmpJ1 = "biorstvx";
string tmpK1 = "abdeimnot";
string tmpL1 = "ajlmort";
string tmpM1 = "eilr";
string tmpN1 = "cegnr";
string tmpO1 = "aegt";
string tmpP1 = "nry";
string tmpQ1 = "\t";
string tmpR1 = "\n";
string tmpS1 = "\ ";

if(tmpA <> "")
{
  tmpM = tmpL.Get(tmpA);
  if(tmpM)
  {
    !WriteLine(tmpM.ID());
  }
  else
  {
    WriteLine("Programm-Objekt nicht gefunden. Bitte den Programmnamen prüfen!");
    quit;
  }
}

foreach (tmpD, tmpL.EnumNames())
{
  if((tmpA == "") || (tmpA == tmpD))
  {
    tmpC1 = tmpC1 + 1;
    tmpM = tmpL.Get(tmpD);
    if(tmpM)
    {
      tmpN = tmpM.Rule();
      tmpC = true;
      while(tmpC)
      {
        tmpC = false;
        if(tmpN)
        {
          tmpP = tmpN.RuleDestination();
          if(tmpP)
          {
            tmpR = tmpP.DestSingleCount();
            if(tmpR > 0)
            {
              foreach(tmpE, system.GenerateEnum(0,(tmpR - 1)))
              {
                tmpQ = tmpP.DestSingleDestination(tmpE);
                if(tmpQ)
                {
                  if(tmpQ.DestinationParam() == ivtString)
                  {
                    tmpB1 = tmpB1 + 1;
                    tmpI = (tmpQ.DestinationValue()).Length();
                    if(tmpI > 0)
                    {
                      tmpK = "";
                      tmpF1 = "";
                      tmpS = true;
                      tmpT = false;
                      tmpU = false;
                      tmpV = false;
                      tmpW = false;
                      tmpX = true;
                      tmpY = false;
                      tmpZ = false;
                      tmpA1 = 0;
                      tmpF = 0;
                      tmpG = 1;
                      while((tmpI > tmpF) && (tmpG <= 5000))
                      {
                        tmpH = 1;
                        while((tmpI > tmpF) && (tmpH <= 5000))
                        {
                          tmpK = (tmpQ.DestinationValue()).Substr(tmpF,1);
                          if(tmpS)
                          {
                            tmpZ = false;
                            tmpJ = tmpF1.Length();
                            if((tmpK == " ") || (tmpK == tmpQ1))
                            {
                              if(tmpJ > 0)
                              {
                                if(    (tmpF1 == "boolean") || (tmpF1 == "idarray") || (tmpF1 == "integer")
                                    || (tmpF1 == "object") || (tmpF1 == "real") || (tmpF1 == "string")
                                    || (tmpF1 == "time") || (tmpF1 == "var") || (tmpF1 == "xml")
                                  )
                                {
                                  tmpS = false;
                                  tmpT = true;
                                }
                                tmpZ = true;
                              }
                            }
                            else
                            {
                              tmpA1 = tmpA1 + 1;
                              tmpZ = true;
                              if(tmpA1 == 1)
                              {
                                if(tmpJ1.Find(tmpK) <> -1)
                                {
                                  tmpF1 = tmpF1 # tmpK;
                                  tmpZ = false;
                                }
                              }
                              if(tmpA1 == 2)
                              {
                                if(tmpK1.Find(tmpK) <> -1)
                                {
                                  tmpF1 = tmpF1 # tmpK;
                                  if(    (tmpF1 == "bo") || (tmpF1 == "id") || (tmpF1 == "in")
                                      || (tmpF1 == "ob") || (tmpF1 == "re") || (tmpF1 == "st")
                                      || (tmpF1 == "ti") || (tmpF1 == "va") || (tmpF1 == "xm")
                                    )
                                  {
                                    tmpZ = false;
                                  }
                                }
                              }
                              if(tmpA1 == 3)
                              {
                                if(tmpL1.Find(tmpK) <> -1)
                                {
                                  tmpF1 = tmpF1 # tmpK;
                                  if(    (tmpF1 == "boo") || (tmpF1 == "ida") || (tmpF1 == "int")
                                      || (tmpF1 == "obj") || (tmpF1 == "rea") || (tmpF1 == "str")
                                      || (tmpF1 == "tim") || (tmpF1 == "var") || (tmpF1 == "xml")
                                    )
                                  {
                                    tmpZ = false;
                                  }
                                }
                              }
                              if(tmpA1 == 4)
                              {
                                if(tmpM1.Find(tmpK) <> -1)
                                {
                                  tmpF1 = tmpF1 # tmpK;
                                  if(    (tmpF1 == "bool") || (tmpF1 == "idar") || (tmpF1 == "inte")
                                      || (tmpF1 == "obje") || (tmpF1 == "real") || (tmpF1 == "stri")
                                      || (tmpF1 == "time")
                                    )
                                  {
                                    tmpZ = false;
                                  }
                                }
                              }
                              if(tmpA1 == 5)
                              {
                                if(tmpN1.Find(tmpK) <> -1)
                                {
                                  tmpF1 = tmpF1 # tmpK;
                                  if(    (tmpF1 == "boole") || (tmpF1 == "idarr") || (tmpF1 == "integ")
                                      || (tmpF1 == "objec") || (tmpF1 == "strin")
                                    )
                                  {
                                    tmpZ = false;
                                  }
                                }
                              }
                              if(tmpA1 == 6)
                              {
                                if(tmpO1.Find(tmpK) <> -1)
                                {
                                  tmpF1 = tmpF1 # tmpK;
                                  if(    (tmpF1 == "boolea") || (tmpF1 == "idarra") || (tmpF1 == "intege")
                                      || (tmpF1 == "object") || (tmpF1 == "string")
                                    )
                                  {
                                    tmpZ = false;
                                  }
                                }
                              }
                              if(tmpA1 == 7)
                              {
                                if(tmpP1.Find(tmpK) <> -1)
                                {
                                  tmpF1 = tmpF1 # tmpK;
                                  if(    (tmpF1 == "boolean") || (tmpF1 == "idarray") || (tmpF1 == "integer")
                                    )
                                  {
                                    tmpZ = false;
                                  }
                                }
                              }
                            }
                            if(tmpZ)
                            {
                              tmpS = false;
                              tmpA1 = 0;
                              tmpF1 = "";
                            }
                          }
                          else
                          {
                            if(tmpT)
                            {
                              if(tmpI1.Find(tmpK) <> -1)
                              {
                                tmpF1 = tmpF1 # tmpK;
                              }
                              else
                              {
                                if(    (tmpF1.Length() > 0)
                                    || (    (tmpF1.Length() == 0) 
                                         && (tmpK <> " ")
                                         && (tmpK <> tmpQ1)
                                       )
                                  )  
                                {
                                  tmpD1 = tmpD1 + 1;
                                  if(tmpG1.Find(tmpQ1 # tmpF1 # tmpQ1) == -1)
                                  {
                                    tmpG1 = tmpG1 # tmpQ1 # tmpF1 # tmpQ1;
                                  }
                                  tmpT = false;
                                  tmpF1 = "";
                                } 
                              }
                            }
                          }

                          if((tmpU) || (tmpV))
                          {
                            if(tmpY == false)
                            {
                              if(tmpU)
                              {
                                if(tmpK == "'")
                                {
                                  tmpU = false;
                                }
                              }
                              else
                              {
                                if(tmpK == '"')
                                {
                                  tmpV = false;
                                }
                              }
                            }
                          }
                          else
                          {
                            if(tmpW == false)
                            {
                              if(tmpK == "'")
                              {
                                tmpU = true;
                              }
                              if(tmpK == '"')
                              {
                                tmpV = true;
                              }
                              if(tmpK == "{")
                              {
                                tmpS = true;
                              }
                              if(tmpK == "}")
                              {
                                tmpS = true;
                              }
                              if(tmpK == ";")
                              {
                                tmpS = true;
                              }
                              if(tmpK == "!")
                              {
                                if(tmpX)
                                {
                                  tmpW = true;
                                }
                              }
                            }

                            if(tmpK == tmpR1)
                            {
                              tmpW = false;
                              tmpS = true;
                            }

                            if((tmpK == ";") || (tmpK == "{") || (tmpK == "}") || (tmpK == tmpR1))
                            {
                              tmpX = true;
                            }
                            else
                            {
                              if((tmpK <> " ") && (tmpK <> tmpQ1))
                              {
                                tmpX = false;
                              }
                            }
                          }
                          tmpY = (tmpK == tmpS1.Substr(0,1));
                          tmpF = tmpF + 1;
                          tmpH = tmpH + 1;
                        }
                        tmpG = tmpG + 1;
                      }
                    }
                  }
                }
              }
            }
          }

          tmpO = null;
          if(tmpN.ElseIfFlag())
          {
            tmpO = tmpN.RuleSubRule();
          }

          if(tmpO)
          {
            tmpC = true;
            tmpN = tmpO;
          }
        }
      }
    }
  }
}

if(tmpA == "")
{
  WriteLine("durchsuchte Programme: " # tmpC1);
}
else
{
  WriteLine("durchsuchtes Programm: " # tmpA);
}
WriteLine("gefundene Skripte: " # tmpB1);
WriteLine("gefundene Deklarationen: " # tmpD1);
if(tmpB)
{
  WriteLine("");
  WriteLine("Liste aller verwendeten Skriptvariabel-Namen:");
  WriteLine("");
}
tmpD = "";
foreach(tmpD,tmpG1)
{
  if(tmpD <> "")
  {
    tmpE1 = tmpE1 + 1;
    if(tmpB)
    {
      WriteLine(tmpD);
    }
  }
}
WriteLine("");
WriteLine("gefundene Variabelnamen: " # tmpE1);
WriteLine("");
WriteLine("---Auswertung beendet---");
Verwendung meiner Hinweise und Skripte auf eigenes Risiko | Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung

Benutzeravatar
JPS
Beiträge: 1093
Registriert: 07.08.2010, 22:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 8 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Script Probleme (überarbeitete Skripts)

Beitrag von JPS » 11.08.2016, 14:56

Das Tageszeitenskript, umgeschrieben von JPS:

Code: Alles auswählen

! Tageszeiten
! Tagesbeginn - 2   Nacht
! Tagesbeginn - 2    Tagesbeginn - 1   frühmorgens
! Tagesbeginn - 1    Tagesbeginn       Morgengrauen
! Tagesbeginn        Mittag - 1        Vormittag
! Mittag - 1         Mittag + 1        Mittag
! Mittag + 1         Tagesende         Nachmittag
! Tagesende          Tagesende + 1     Dämmerung
! Tagesende + 1      Tagesende + 2     Abend
! Tagesende + 2                        Nacht

real tmpA = (0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger();
real tmpB = (0.01 * system.SunriseTime("%M").ToInteger()) + system.SunriseTime("%H").ToInteger();
real tmpC = (0.01 * system.SunsetTime("%M").ToInteger()) + system.SunsetTime("%H").ToInteger();
real tmpD = 13.00; ! Mittagszeit

integer tmpE = 0; ! Nacht

if (tmpA < tmpC + 2) {
 tmpE = 7; ! Abend
}

if (tmpA < tmpC + 1) {
 tmpE = 6; ! Abenddaemmerung
}

if (tmpA < tmpC) {
 tmpE = 5; ! Nachmittag
}

if (tmpA < tmpD + 1) {
 tmpE = 4; ! Mittag
}

if (tmpA < tmpD - 1) {
 tmpE = 3; ! Vormittag
}

if (tmpA < tmpB) {
 tmpE = 2; ! Morgengrauen
}

if (tmpA < tmpB - 1) {
 tmpE = 1; ! fruemorgens;
}

if (tmpA < tmpB - 2) {
 tmpE = 0; ! Nacht
}

dom.GetObject("Tageszeit").State(tmpE);
Zuletzt geändert von JPS am 11.08.2016, 14:58, insgesamt 1-mal geändert.
Verwendung meiner Hinweise und Skripte auf eigenes Risiko | Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung

Benutzeravatar
JPS
Beiträge: 1093
Registriert: 07.08.2010, 22:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 8 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Script Probleme (überarbeitete Skripts)

Beitrag von JPS » 11.08.2016, 14:57

Das Wunderground Wetter Skript ohne TCL von Eugen Stall, umgeschrieben von JPS:

Code: Alles auswählen

!Stand 03.04.2014  http://homematic-forum.de/forum/viewtopic.php?f=31&t=17209
        !zuerst folgende Systemvariablen anlegen
        !Achtung: keine vergessen und exakte Schreibweise mit Drag&Drop
        !W_Station                        Zeichenkette
        !W_Aktualisierung             Zeichenkette
        !W_Bedingungen               Zeichenkette
        !W_Temperatur                  Zahl                     °C
        !W_Luftfeuchte                  Zahl                      %
        !W_Windbedingungen       Zeichenkette
        !W_Windrichtung               Zeichenkette
        !W_Windrichtg                   Zahl                       °
        !W_Windgeschwindigkeit   Zahl                     km/h
        !W_Windboeen                  Zahl                     km/h
        !W_Luftdruck                      Zahl                      mb
        !W_Luftdrucktrend             Zeichenkette
        !W_Taupunkt                      Zahl                     °C
        !W_UV                                Zeichenkette
 
        var tmpA = "http://api.wunderground.com/api/XXXXXXXXXXXXX/conditions/lang:DL/q/Germany/XXXXXXXXX.xml";
 
        !hier ist die Abfrage mit CUxD
        dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#tmpA#"'");
        dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
        string tmpB = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
 
        !hier ist die Abfrage mit system.Exec
        !string stdout;
        !string stderr;
        !system.Exec("wget -q -O - '"#tmpA#"'", &stdout, &stderr);
        !WriteLine(stdout);
        !string tmpB = stdout;
        !WriteLine(tmpB);
 
        !Beim XML-File den ueberfluessigen Header entfernen
        integer tmpD = tmpB.Length();
        integer tmpE = tmpB.Find("display_location");
        tmpB = tmpB.Substr(tmpE, (tmpD - tmpE));
        !WriteLine(tmpB);
 
        !Daten mit Suchworten aus XML-File ausfiltern:
 
        !string tmpG = "full";
        string tmpG = "city";
        integer tmpC = tmpG.Length();
        integer tmpF = tmpB.Find(tmpG);
        string tmpH = tmpB.Substr((tmpF + tmpC +1), 100);
        integer tmpF = tmpH.Find(tmpG);
        tmpH = tmpH.Substr(0, (tmpF -2));
        dom.GetObject("W_Station").State(tmpH);
 
        !string tmpG = "observation_time";
        string tmpG = "observation_time_rfc822";
        integer tmpC = tmpG.Length();
        integer tmpF = tmpB.Find(tmpG);
        string tmpH = tmpB.Substr((tmpF + tmpC +1), 100);
        integer tmpF = tmpH.Find(tmpG);
        !tmpH = tmpH.Substr(0, (tmpF -2));
        tmpH = tmpH.Substr(0, (tmpF -11));
        dom.GetObject("W_Aktualisierung").State(tmpH);
 
        string tmpG = "weather";
        integer tmpC = tmpG.Length();
        integer tmpF = tmpB.Find(tmpG);
        string tmpH = tmpB.Substr((tmpF + tmpC +1), 100);
        integer tmpF = tmpH.Find(tmpG);
        tmpH = tmpH.Substr(0, (tmpF -2));
        dom.GetObject("W_Bedingungen").State(tmpH);
 
        string tmpG = "temp_c";
        integer tmpC = tmpG.Length();
        integer tmpF = tmpB.Find(tmpG);
        string tmpH = tmpB.Substr((tmpF + tmpC +1), 100);
        integer tmpF = tmpH.Find(tmpG);
        tmpH = tmpH.Substr(0, (tmpF -2));
        real tmpI = tmpH.ToFloat();
        dom.GetObject("W_Temperatur").State(tmpI);
 
        string tmpG = "relative_humidity";
        integer tmpC = tmpG.Length();
        integer tmpF = tmpB.Find(tmpG);
        string tmpH = tmpB.Substr((tmpF + tmpC +1), 100);
        integer tmpF = tmpH.Find(tmpG);
        tmpH = tmpH.Substr(0, (tmpF -2));
        integer tmpI = tmpH.ToFloat();
        dom.GetObject("W_Luftfeuchte").State(tmpI);
 
        string tmpG = "wind_string";
        integer tmpC = tmpG.Length();
        integer tmpF = tmpB.Find(tmpG);
        string tmpH = tmpB.Substr((tmpF + tmpC +1), 100);
        integer tmpF = tmpH.Find(tmpG);
        tmpH = tmpH.Substr(0, (tmpF -2));
        dom.GetObject("W_Windbedingungen").State(tmpH);
 
        string tmpG = "wind_dir";
        integer tmpC = tmpG.Length();
        integer tmpF = tmpB.Find(tmpG);
        string tmpH = tmpB.Substr((tmpF + tmpC +1), 100);
        integer tmpF = tmpH.Find(tmpG);
        tmpH = tmpH.Substr(0, (tmpF -2));
        tmpC =tmpH.Length();
        string tmpJ = tmpH.Substr(0,1);
        ! Umlaute korrigieren
        !
        ! N # Nord ***
        if (tmpJ == "N") {
           !
            if (tmpH == "Nordwest") {tmpH = "Nord-West" ;}
        }
 
        ! S # Süd ***
        if (tmpJ == "S") {
           ! 4 # Süd
           if (tmpC == 4)  {tmpH = "Süd";}
           ! 8 # Südwest
           if (tmpC == 8)  {tmpH = "Süd-West";}
           ! 12 # Süd-Südost
           if (tmpC == 12) {tmpH = "Süd-Süd-Ost" ;}
             ! 13
           if (tmpC == 13) {tmpH = "Süd-Süd-West" ;}
        }
 
        ! W # Westen
        if (tmpJ == "W") {
           ! 13 # West-Südwest
            if (tmpC == 13) {tmpH = "West-Süd-West" ;}
        }
 
        ! O # Osten
        if (tmpJ == "O") {
           ! 11 # Ost-Südost
           if (tmpC == 11) {tmpH = "Ost-Süd-Ost" ;}
        }
        dom.GetObject("W_Windrichtung").State(tmpH);
        !WriteLine(tmpH);
 
 
        string tmpG = "wind_degrees";
        integer tmpC = tmpG.Length();
        integer tmpF = tmpB.Find(tmpG);
        string tmpH = tmpB.Substr((tmpF + tmpC +1), 100);
        integer tmpF = tmpH.Find(tmpG);
        tmpH = tmpH.Substr(0, (tmpF -2));
        integer tmpI = tmpH.ToFloat();
        dom.GetObject("W_Windrichtg").State(tmpI);
 
        string tmpG = "wind_kph";
        integer tmpC = tmpG.Length();
        integer tmpF = tmpB.Find(tmpG);
        string tmpH = tmpB.Substr((tmpF + tmpC +1), 100);
        integer tmpF = tmpH.Find(tmpG);
        tmpH = tmpH.Substr(0, (tmpF -2));
        integer tmpI = tmpH.ToFloat();
        dom.GetObject("W_Windgeschwindigkeit").State(tmpI);
 
        string tmpG = "wind_gust_kph";
        integer tmpC = tmpG.Length();
        integer tmpF = tmpB.Find(tmpG);
        string tmpH = tmpB.Substr((tmpF + tmpC +1), 100);
        integer tmpF = tmpH.Find(tmpG);
        tmpH = tmpH.Substr(0, (tmpF -2));
        integer tmpI = tmpH.ToFloat();
        dom.GetObject("W_Windboeen").State(tmpI);
 
        string tmpG = "pressure_mb";
        integer tmpC = tmpG.Length();
        integer tmpF = tmpB.Find(tmpG);
        string tmpH = tmpB.Substr((tmpF + tmpC +1), 100);
        integer tmpF = tmpH.Find(tmpG);
        tmpH = tmpH.Substr(0, (tmpF -2));
        integer tmpI = tmpH.ToFloat();
        dom.GetObject("W_Luftdruck").State(tmpI);
 
        string tmpG = "pressure_trend";
        integer tmpC = tmpG.Length();
        integer tmpF = tmpB.Find(tmpG);
        string tmpH = tmpB.Substr((tmpF + tmpC +1), 100);
        integer tmpF = tmpH.Find(tmpG);
        tmpH = tmpH.Substr(0, (tmpF -2));
        dom.GetObject("W_Luftdrucktrend").State(tmpH);
 
        string tmpG = "dewpoint_c";
        integer tmpC = tmpG.Length();
        integer tmpF = tmpB.Find(tmpG);
        string tmpH = tmpB.Substr((tmpF + tmpC +1), 100);
        integer tmpF = tmpH.Find(tmpG);
        tmpH = tmpH.Substr(0, (tmpF -2));
        real tmpI = tmpH.ToFloat();
        dom.GetObject("W_Taupunkt").State(tmpI);
 
        string tmpG = "UV";
        integer tmpC = tmpG.Length();
        integer tmpF = tmpB.Find(tmpG);
        string tmpH = tmpB.Substr((tmpF + tmpC +1), 100);
        integer tmpF = tmpH.Find(tmpG);
        tmpH = tmpH.Substr(0, (tmpF -2));
        real tmpI = tmpH.ToFloat();
        dom.GetObject("W_UV").State(tmpI);
Verwendung meiner Hinweise und Skripte auf eigenes Risiko | Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung

Benutzeravatar
JPS
Beiträge: 1093
Registriert: 07.08.2010, 22:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 8 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Script Probleme (überarbeitete Skripts)

Beitrag von JPS » 11.08.2016, 14:59

Das Skript zur Berechnung des Mittelwertes der Sonnentemperatur von Eugen Stall, umgeschrieben von JPS:

Code: Alles auswählen

!skript zur berechnung des mittelwertes der sonnentemperatur
real tmpA = 0.1;   ! 1 = keine mittelung ; kleinere werte, umso stärker ist mittelung
real tmpB = dom.GetObject("BidCos-RF.KEQ0XXXXXX:3.TEMPERATURE").Value();
!WriteLine(tmpB);
real tmpC = dom.GetObject("sonne_diff_mittel").Value();
!WriteLine(tmpC);
real Diff= tmpB - tmpC;
tmpC = tmpC + (tmpA * Diff);
!WriteLine(tmpC);
dom.GetObject("sonne_diff_mittel").State(tmpC );
Verwendung meiner Hinweise und Skripte auf eigenes Risiko | Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung

Benutzeravatar
JPS
Beiträge: 1093
Registriert: 07.08.2010, 22:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 8 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Script Probleme (überarbeitete Skripts)

Beitrag von JPS » 11.08.2016, 15:19

HomeMatic – Sonnenstandberechnung von JPS, umgeschrieben von JPS:

Im Vergleich zu der hier ebenfalls verlinkten Version von Eugen Stall, in der Azimut und Elevation präzise in einzelne Systemvariablen geschrieben werden, wird hier auf Grundlage des Tageszeitenskripts der Sonnenstand nach "unter Horizont, Ost, Süd-Ost, Süd, Süd-West und West" in eine Systemvariable geschrieben.

Code: Alles auswählen

! Sonnenstand Analemma

real tmpA = system.Date("%j").ToInteger();
real tmpB = (0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger();
real tmpC = (0.01 * system.SunriseTime("%M").ToInteger()) + system.SunriseTime("%H").ToInteger();
real tmpD = (0.01 * system.SunsetTime("%M").ToInteger()) + system.SunsetTime("%H").ToInteger();
integer tmpE = 0; ! Sonne unter Horizont
 
! Analemma 23.12. bis 10.02.
if ((tmpA > 356) || ((tmpA > 0) && (tmpA < 41)))
{
	if (tmpB < tmpD) {
		tmpE = 4; ! Süd/West
	}
	if (tmpB < tmpD - 2) {
		tmpE = 3; ! Süd
	}
	if (tmpB < tmpC + 2) {
		tmpE = 2; ! Süd/Ost
	}
	if (tmpB < tmpC -1) {
		tmpE = 0; ! Sonne unter Horizont
	}
}
! Analemma 11.02. bis 07.03. und 01.11. bis 22.12.
if (((tmpA > 304) && (tmpA < 357)) || ((tmpA > 40) && (tmpA < 67)))
{
	if (tmpB < tmpD) {
		tmpE = 4; ! Süd/West
	}
	if (tmpB < tmpD - 3) {
		tmpE = 3; ! Süd
	}
	if (tmpB < tmpC + 3) {
		tmpE = 2; ! Süd/Ost
	}
	if (tmpB < tmpC -1) {
		tmpE = 0; ! Sonne unter Horizont
	}
}
! Analemma 08.03. bis 12.04. und 05.10. bis 31.10.
if (((tmpA > 277) && (tmpA < 305)) || ((tmpA > 66) && (tmpA < 103)))
{
	if (tmpB < tmpD) {
		tmpE = 5; ! West
	}
	if (tmpB < tmpD - 1) {
		tmpE = 4; ! Süd/West
	}
	if (tmpB < tmpD - 4) {
		tmpE = 3; ! Süd
	}
	if (tmpB < tmpC + 4) {
		tmpE = 2; ! Süd/Ost
	}
	if (tmpB < tmpC + 1) {
		tmpE = 1; ! Ost
	}	
	if (tmpB < tmpC -1) {
		tmpE = 0; ! Sonne unter Horizont
	}
}
! Analemma 13.04. bis 30.04. und 30.08. bis 04.10.
if (((tmpA > 241) && (tmpA < 278)) || ((tmpA > 102) && (tmpA < 121)))
{
	if (tmpB < tmpD) {
		tmpE = 5; ! West
	}
	if (tmpB < tmpD - 3) {
		tmpE = 4; ! Süd/West
	}
	if (tmpB < tmpD - 5) {
		tmpE = 3; ! Süd
	}
	if (tmpB < tmpC + 5) {
		tmpE = 2; ! Süd/Ost
	}
	if (tmpB < tmpC + 3) {
		tmpE = 1; ! Ost
	}	
	if (tmpB < tmpC -1) {
		tmpE = 0; ! Sonne unter Horizont
	}
}
! Analemma 01.05. bis 09.06. und 12.08. bis 29.08.
if (((tmpA > 192) && (tmpA < 242)) || ((tmpA > 120) && (tmpA < 161)))
{
	if (tmpB < tmpD) {
		tmpE = 5; ! West
	}
	if (tmpB < tmpD - 4) {
		tmpE = 4; ! Süd/West
	}
	if (tmpB < tmpD - 6) {
		tmpE = 3; ! Süd
	}
	if (tmpB < tmpC + 6) {
		tmpE = 2; ! Süd/Ost
	}
	if (tmpB < tmpC + 4) {
		tmpE = 1; ! Ost
	}	
	if (tmpB < tmpC -1) {
		tmpE = 0; ! Sonne unter Horizont
	}
}
! Analemma 10.06. bis 11.08. und 01.11. bis 22.12.
if ((tmpA > 160) && (tmpA < 193))
{
	if (tmpB < tmpD) {
		tmpE = 5; ! West
	}
	if (tmpB < tmpD - 5) {
		tmpE = 4; ! Süd/West
	}
	if (tmpB < tmpD - 7) {
		tmpE = 3; ! Süd
	}
	if (tmpB < tmpC + 7) {
		tmpE = 2; ! Süd/Ost
	}
	if (tmpB < tmpC + 5) {
		tmpE = 1; ! Ost
	}	
	if (tmpB < tmpC -1) {
		tmpE = 0; ! Sonne unter Horizont
	}
}
dom.GetObject("Sonnenstand").State(tmpE);
Zuletzt geändert von JPS am 11.08.2016, 15:40, insgesamt 1-mal geändert.
Verwendung meiner Hinweise und Skripte auf eigenes Risiko | Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung

Benutzeravatar
JPS
Beiträge: 1093
Registriert: 07.08.2010, 22:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 8 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Script Probleme (überarbeitete Skripts)

Beitrag von JPS » 11.08.2016, 15:21

HomeMatic – Raumklimaüberwachung und Entfeuchtung von JPS, umgeschrieben von JPS:

Beispiel 1: Schimmelgefahranalyse in einem unisolierten Kellerraum mit manueller Lüftung (Fenster) und einem elektrischen Luftentfeuchter:

Falls jemand diese Skripte nutzten möchte, bitte zuerst die in der Überschrift verlinkte Anleitung lesen und nicht vergessen, die entsprechenden SystemVariablen anzulegen sowie die Gerätenamen auf die eigenen Sensoren und Aktoren anzupassen:
  • Name des Sensors innen: „RaumXY_Raumregler“
    Systemvariable für das Lüften – Werteliste: keine Gefahr;Warnung;Alarm: „RaumXY_Schimmel“
    Systemvariable für die Lüftungsempfehlung – Logikwert: wahr = ist wahr, falsch = ist falsch: „RaumXY_Lueften“
    Name des Sensors außen: „Aussen_TempFeuSens“
Weiterhin sind die eigenen Wünsche/Werte für die folgenden Konstanten einzutragen:
  • Oberer Raumtemperaturgrenzwert in °C: „XX.X“
    Unterer Raumtemperaturgrenzwert in °C: „YY.Y“
    Mittels eigener Messung ermittelter Gesamtwärmeübergangswiderstand R_{ges} : „Z.ZZZ“
Auswertung:

Code: Alles auswählen

    object tmpA = dom.GetObject("RaumXY_Raumregler:1");
    object tmpB = tmpA.DPByHssDP("TEMPERATURE");
    object tmpC = tmpA.DPByHssDP("HUMIDITY");
    object tmpD = dom.GetObject("RaumXY_Schimmel");
	object tmpE = dom.GetObject("RaumXY_Lueften");
    object tmpF = dom.GetObject("Aussen_TempFeuSens:1");
    object tmpG = tmpF.DPByHssDP("TEMPERATURE");
    object tmpH = tmpF.DPByHssDP("HUMIDITY");
	! Programmteil Lüftungsempfehlung
	! Lokale Variablen
    real tmpI = tmpB.Value(); ! Temperatur in °C innen
    integer tmpJ = tmpC.Value(); ! relative Feuchte in % innen
	real tmpK;  ! absolute feuchte in g/kg innen
	real tmpL = tmpG.Value(); ! Temperatur in °C außen
    integer tmpM = tmpH.Value(); ! relative Feuchte in % außen
 	real tmpN; ! absolute feuchte in g/kg außen
	! Berechnung der absoluten Feuchte innen
    if (tmpI < 0.0) {tmpI = 0.0;}
    if (tmpI < 10.0)
    { tmpK = (3.78 + (0.285 * tmpI) + (0.0052 * tmpI * tmpI) + (0.0005 * tmpI * tmpI * tmpI));
    }
    else
    { tmpK = (7.62 + (0.524 * (tmpI-10.0)) + (0.0131 * (tmpI-10.0) * (tmpI-10.0)) + (0.00048 * (tmpI-10.0) * (tmpI-10.0) * (tmpI-10.0)));
    }
	tmpK = (tmpK * tmpJ) / (100.0 + tmpK * (100.0 - tmpJ) / 622);
	! Berechnung der absoluten Feuchte außen
	if (tmpL < 0.0) {tmpL = 0.0;}
    if (tmpL < 10.0)
    { tmpN = (3.78 + (0.285 * tmpL) + (0.0052 * tmpL * tmpL) + (0.0005 * tmpL * tmpL * tmpL));
    }
    else
    { tmpN = (7.62 + (0.524 * (tmpL-10.0)) + (0.0131 * (tmpL-10.0) * (tmpL-10.0)) + (0.00048 * (tmpL-10.0) * (tmpL-10.0) * (tmpL-10.0)));
    }
	tmpN = (tmpN * tmpM) / (100.0 + tmpN * (100.0 - tmpM) / 622);
	! Berechnung der Lüftungsempfehlung mit 0,5 g/kg und 0,7 K Hysterese
	if ((tmpN <= (tmpK - 0.8)) && (tmpL <= (tmpI - 1.0)) && (tmpI > X.XX))
	{tmpE.State(true);}
	else
	{ if ((tmpN >= (tmpK - 0.3)) || (tmpL >= (tmpI - 0.3)) || (tmpI <= Y.YY))
	{tmpE.State(false);}
	}
	! Programmteil Schimmelwarnung
	! Berechnung der Oberflächentemperatur der Außenwandecke
    real tmpO; ! Oberfächentemperatur der Außenwandecke in °C
    real tmpP = tmpG.Value(); ! Außentemperatur in °C
    real tmpQ = tmpB.Value(); ! Raumtemperatur in °C
    tmpO = tmpQ + ((0.13 / Z.ZZZ) * (tmpP - tmpQ)); ! Rges = Z.ZZZ empirisch ermittelt
	! Lokale Variablen
    real    tmpR;    ! Temperatur in °C
    integer tmpS; ! relative Feuchte in %
    real    tmpT;  ! Schimmelwarn-Grenzfeuchte in g/kg
    real    tmpU;  ! Schimmelalarm-Grenzfeuchte in g/kg
    tmpR = tmpO;
    ! Berechnung Warn-Grenzfeuchte
    tmpS = 70;
    if (tmpR < 0.0) {tmpR = 0.0;}
    if (tmpR < 10.0)
    { tmpT = (3.78 + (0.285 * tmpR) + (0.0052 * tmpR * tmpR) + (0.0005 * tmpR * tmpR * tmpR));
    }
    else
    { tmpT = (7.62 + (0.524 * (tmpR-10.0)) + (0.0131 * (tmpR-10.0) * (tmpR-10.0)) + (0.00048 * (tmpR-10.0) * (tmpR-10.0) * (tmpR-10.0)));
    }
	tmpT = (tmpT * tmpS) / (100.0 + tmpT * (100.0 - tmpS) / 622);
    ! Berechnung Alarm-Grenzfeuchte
    tmpS = 80;
    if (tmpR < 0.0) {tmpR = 0.0;}
    if (tmpR < 10.0)
    { tmpU = (3.78 + (0.285 * tmpR) + (0.0052 * tmpR * tmpR) + (0.0005 * tmpR * tmpR * tmpR));
    }
    else
    { tmpU = (7.62 + (0.524 * (tmpR-10.0)) + (0.0131 * (tmpR-10.0) * (tmpR-10.0)) + (0.00048 * (tmpR-10.0) * (tmpR-10.0) * (tmpR-10.0)));
    }
	tmpU = (tmpU * tmpS) / (100.0 + tmpU * (100.0 - tmpS) / 622);
 	! Schimmelwarnung
	! 0 - keine Gefahr
	! 1 - Warnung
	! 2 - Alarm
	if ((tmpK > tmpU) && (tmpJ > 64 )) {tmpD.State(2);}
        else {
            if ((tmpK > tmpU) || (tmpK > tmpT)) {tmpD.State(1);}
            else {tmpD.State(0);}
        }
Entfeuchter:

Code: Alles auswählen

object tmpA = dom.GetObject("BidCos-RF.FEQ0XXXXXX:1.HUMIDITY");
object tmpB = dom.GetObject("BidCos-RF.FEQ0XXXXXX:1.STATE");
object tmpC = dom.GetObject("UG-Werkstatt_Schimmel");
time tmpD = tmpB.Timestamp();
time tmpE = system.Date("%Y-%m-%d %H:%M:%S").ToTime();
integer tmpF = tmpE.ToInteger() - tmpD.ToInteger();
if (tmpF > 2700) {
  if ((tmpA.Value() > 64) && (tmpB.Value() == 0) && (tmpC.Value() > 1)) {
     tmpB.State(1);
  }
  if ((tmpA.Value() < 64) && (tmpB.Value() == 1)) {
     tmpB.State(0);
  }
}
Beispiel 2: Schimmelgefahranalyse in einem isolierten Badezimmer mit Sauna und einem einfachen Wandlüfter:

Code: Alles auswählen

    object tmpA = dom.GetObject("RaumXY_Raumregler:1");
    object tmpB = tmpA.DPByHssDP("TEMPERATURE");
    object tmpC = tmpA.DPByHssDP("HUMIDITY");
    object tmpD = dom.GetObject("RaumXY_Schimmel");
	object tmpE = dom.GetObject("RaumXY_Lueften");
    object tmpF = dom.GetObject("Aussen_TempFeuSens:1");
    object tmpG = tmpF.DPByHssDP("TEMPERATURE");
    object tmpH = tmpF.DPByHssDP("HUMIDITY");
	object tmpI = dom.GetObject("BidCos-RF.HEQ0XXXXXX:2.STATE");
	object tmpJ = dom.GetObject("BidCos-RF.HEQ0XXXXXX:1.STATE");
	! Programmteil Lüftungsempfehlung
	! Lokale Variablen
    real tmpK = tmpB.Value(); ! Temperatur in °C innen
    integer tmpL = tmpC.Value(); ! relative Feuchte in % innen
	real tmpM;  ! absolute feuchte in g/kg innen
	real tmpN = tmpG.Value(); ! Temperatur in °C außen
    integer tmpO = tmpH.Value(); ! relative Feuchte in % außen
 	real    tmpP; ! absolute feuchte in g/kg außen
	! Berechnung der absoluten Feuchte innen
    if (tmpK < 0.0) {tmpK = 0.0;}
    if (tmpK < 10.0)
    { tmpM = (3.78 + (0.285 * tmpK) + (0.0052 * tmpK * tmpK) + (0.0005 * tmpK * tmpK * tmpK));
    }
    else
    { tmpM = (7.62 + (0.524 * (tmpK-10.0)) + (0.0131 * (tmpK-10.0) * (tmpK-10.0)) + (0.00048 * (tmpK-10.0) * (tmpK-10.0) * (tmpK-10.0)));
    }
	tmpM = (tmpM * tmpL) / (100.0 + tmpM * (100.0 - tmpL) / 622);
	! Berechnung der absoluten Feuchte außen
	if (tmpN < 0.0) {tmpN = 0.0;}
    if (tmpN < 10.0)
    { tmpP = (3.78 + (0.285 * tmpN) + (0.0052 * tmpN * tmpN) + (0.0005 * tmpN * tmpN * tmpN));
    }
    else
    { tmpP = (7.62 + (0.524 * (tmpN-10.0)) + (0.0131 * (tmpN-10.0) * (tmpN-10.0)) + (0.00048 * (tmpN-10.0) * (tmpN-10.0) * (tmpN-10.0)));
    }
	tmpP = (tmpP * tmpO) / (100.0 + tmpP * (100.0 - tmpO) / 622);
	! Berechnung der Lüftungsempfehlung mit 0,5 g/kg und 0,7 K Hysterese
	if ((tmpP <= (tmpM - 0.8)) && (tmpN <= (tmpK - 1.0)) && (tmpK > XX.X))
	{tmpE.State(true);}
	else
	{ if ((tmpP >= (tmpM - 0.3)) || (tmpN >= (tmpK - 0.3)) || (tmpK <= YY.Y))
	{tmpE.State(false);}
	}
	! Programmteil Schimmelwarnung
	! Berechnung der Oberflächentemperatur der Außenwandecke
    real tmpQ; ! Oberfächentemperatur der Außenwandecke in °C
    real tmpR = tmpG.Value(); ! Außentemperatur in °C
    real tmpS = tmpB.Value(); ! Raumtemperatur in °C
    tmpQ = tmpS + ((0.13 / Z.ZZZ) * (tmpR - tmpS)); ! Rges = Z.ZZZ empirisch ermittelt
	! Lokale Variablen
    real    tmpT;    ! Temperatur in °C
    integer tmpU; ! relative Feuchte in %
    real    tmpV;  ! Schimmelwarn-Grenzfeuchte in g/kg
    real    tmpW;  ! Schimmelalarm-Grenzfeuchte in g/kg
    tmpT = tmpQ;
    ! Berechnung Warn-Grenzfeuchte
    tmpU = 70;
    if (tmpT < 0.0) {tmpT = 0.0;}
    if (tmpT < 10.0)
    { tmpV = (3.78 + (0.285 * tmpT) + (0.0052 * tmpT * tmpT) + (0.0005 * tmpT * tmpT * tmpT));
    }
    else
    { tmpV = (7.62 + (0.524 * (tmpT-10.0)) + (0.0131 * (tmpT-10.0) * (tmpT-10.0)) + (0.00048 * (tmpT-10.0) * (tmpT-10.0) * (tmpT-10.0)));
    }
	tmpV = (tmpV * tmpU) / (100.0 + tmpV * (100.0 - tmpU) / 622);
    ! Berechnung Alarm-Grenzfeuchte
    tmpU = 80;
    if (tmpT < 0.0) {tmpT = 0.0;}
    if (tmpT < 10.0)
    { tmpW = (3.78 + (0.285 * tmpT) + (0.0052 * tmpT * tmpT) + (0.0005 * tmpT * tmpT * tmpT));
    }
    else
    { tmpW = (7.62 + (0.524 * (tmpT-10.0)) + (0.0131 * (tmpT-10.0) * (tmpT-10.0)) + (0.00048 * (tmpT-10.0) * (tmpT-10.0) * (tmpT-10.0)));
	}
	tmpW = (tmpW * tmpU) / (100.0 + tmpW * (100.0 - tmpU) / 622);
 	! Schimmelwarnung
	! 0 - keine Gefahr
	! 1 - Warnung
	! 2 - Alarm
	if ((tmpM > tmpW) && (tmpL > 64 )) {tmpD.State(2);}
        else {
            if ((tmpM > tmpW) || (tmpM > tmpV)) {tmpD.State(1);}
            else {tmpD.State(0);}
        }
	! Programmteil Ventilatorsteuerung
    ! Prüfen, ob Raum schon zu kalt
	if (tmpS > 20.0)
		{ if ((tmpP <= (tmpM - 0.8)) && (tmpR <= (tmpS - 1.0)) && (tmpJ.Value() == 0) && (tmpD.Value() == 2))
			{tmpI.State(1);}
			else
			{ if ((tmpP >= (tmpM - 0.3)) || (tmpR >= (tmpS - 0.3)) || (tmpJ.Value() == 1) || (tmpD.Value() == 1) || (tmpD.Value() == 0))
			{tmpI.State(0);}
			}
		}
	else
		{ if (tmpS <= 19.5)
		{tmpI.State(0);}
		}
Zuletzt geändert von JPS am 13.08.2016, 21:24, insgesamt 2-mal geändert.
Verwendung meiner Hinweise und Skripte auf eigenes Risiko | Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung

Benutzeravatar
JPS
Beiträge: 1093
Registriert: 07.08.2010, 22:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 8 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Script Probleme (überarbeitete Skripts)

Beitrag von JPS » 11.08.2016, 15:22

HomeMatic – Verbrauchs- und Betriebsstundenzähler für Ölheizungen von JPS, umgeschrieben von JPS:

Einschaltskript:

Code: Alles auswählen

var tmpA= dom.GetObject("Brenner letzte Einschaltzeit");
tmpA.State(system.Date("%F %T")); !Speichern der Einschaltzeit
Ausschaltskript:

Code: Alles auswählen

var tmpB= dom.GetObject("Brenner letzte Ausschaltzeit");
var tmpA= dom.GetObject("Brenner letzte Einschaltzeit");
var tmpC= dom.GetObject("Brenner Tankinhalt bei letzter Fuellung").Value();
var tmpD= dom.GetObject("Brenner Tankinhalt aktuell");
var tmpE= dom.GetObject("Brenner Betriebsstunden seit letzter Fuellung");
var tmpF= dom.GetObject("Brenner Verbrauch seit letzter Fuellung");
var tmpG= dom.GetObject("Brenner Betriebsstunden laufendes Kalenderjahr");
var tmpH= dom.GetObject("Brenner Verbrauch laufendes Kalenderjahr");
var tmpI= dom.GetObject("Brenner Betriebsstunden laufender Monat");
var tmpJ= dom.GetObject("Brenner Verbrauch laufender Monat");
var tmpK= dom.GetObject("Brenner Betriebsstunden laufende Woche");
var tmpL= dom.GetObject("Brenner Verbrauch laufende Woche");
var tmpM= dom.GetObject("Brenner Betriebsstunden heute");
var tmpN= dom.GetObject("Brenner Verbrauch heute");

! Speichern der Ausschaltzeit
tmpB.State(system.Date("%F %T"));

! Den Einschaltzeit String aus der Systemvariablen in ein Zeitobjekt umwandeln
time tmpO = tmpA.Variable().ToTime();

! Die aktuelle (Ausschalt)Zeit String erzeugen und in ein Zeitobjekt umwandeln
time tmpP = system.Date("%F %T").ToTime();

! Das Zeitobjekt Einschaltzeit in Sekunden seit 1.1.1970 umwandeln
var tmpQ = tmpO.ToInteger();

! Das Zeitobjekt aktuelle Zeit in Sekunden seit 1.1.1970 umwandeln
var tmpR = tmpP.ToInteger();

!Die Differenz ist die Einschaltdauer in Stunden umgerechnet
var tmpS = 0.01*(tmpR-tmpQ)/36;

! Die Einschaltdauer seit der letzten Füllung kumulieren = Betriebsstunden seit der letzten Füllung
var tmpT = tmpS + tmpE.Variable();

! Die Betriebsstunden seit der letzten Füllung in die Systemvariable einstellen
tmpE.State (tmpT);

! Berechnung von Verbrauch in Liter mit 1,87 kg/h seit der letzten Füllung
var tmpU = tmpT * 1.87 * 1.197;

! Verbrauch seit der letzten Füllung in die Systemvariable einstellen
tmpF.State (tmpU);

! Berechnung Tankinhalts in Litern
var tmpV = tmpC - tmpU;

! Tankinhalt in die Systemvariable einstellen
tmpD.State (tmpV);

! Die Einschaltdauer im laufenden Kalenderjahr kumulieren = Betriebsstunden
var tmpW = tmpS + tmpG.Variable();

! Die Betriebsstunden im laufenden Kalenderjahr in die Systemvariable einstellen
tmpG.State (tmpW);

! Berechnung von Verbrauch in Liter mit 1,87 kg/h im laufenden Kalenderjahr
var tmpX = tmpW * 1.87 * 1.197;

! Verbrauch im laufenden Kalenderjahr in die Systemvariable einstellen
tmpH.State (tmpX);

! Die Einschaltdauer im laufenden Kalendermonat kumulieren = Betriebsstunden
var tmpY = tmpS + tmpI.Variable();

! Die Betriebsstunden im laufenden Kalendermonat in die Systemvariable einstellen
tmpI.State (tmpY);

! Berechnung von Verbrauch in Liter mit 1,87 kg/h im laufenden Kalendermonat
var tmpZ = tmpY * 1.87 * 1.197;

! Verbrauch im laufenden Kalendermonat in die Systemvariable einstellen
tmpJ.State (tmpZ);

! Die Einschaltdauer in der laufenden Kalenderwoche kumulieren = Betriebsstunden
var tmpA1 = tmpS + tmpK.Variable();

! Die Betriebsstunden in der laufenden Kalenderwoche in die Systemvariable einstellen
tmpK.State (tmpA1);

! Berechnung von Verbrauch in Liter mit 1,87 kg/h in der laufenden Kalenderwoche
var tmpB1 = tmpA1 * 1.87 * 1.197;

! Verbrauch in der laufenden Kalenderwoche in die Systemvariable einstellen
tmpL.State (tmpB1);

! Die Einschaltdauer heute kumulieren = Betriebsstunden
var tmpC1 = tmpS + tmpM.Variable();

! Die Betriebsstunden heute in die Systemvariable einstellen
tmpM.State (tmpC1);

! Berechnung von Verbrauch in Liter mit 1,87 kg/h heute
var tmpD1 = tmpC1 * 1.87 * 1.197;

! Verbrauch in der laufenden Kalenderwoche in die Systemvariable einstellen
tmpN.State (tmpD1);
Verwendung meiner Hinweise und Skripte auf eigenes Risiko | Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung

Benutzeravatar
JPS
Beiträge: 1093
Registriert: 07.08.2010, 22:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 8 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Script Probleme (überarbeitete Skripts)

Beitrag von JPS » 11.08.2016, 15:26

HomeMatic – Stromzähler auswerten Version 2 mit HM-EM-TX-WM von JPS, umgeschrieben von JPS:

Auswerteskript:

Code: Alles auswählen

object tmpA = dom.GetObject("BidCos-RF.MEQ00XXXXX:1.POWER");
object tmpB = dom.GetObject("BidCos-RF.MEQ00XXXXX:1.ENERGY_COUNTER");
var tmpC = dom.GetObject("Strom ENERGY_COUNTER");
var tmpD = dom.GetObject("Strom Referenz Zaehlerstand");
var tmpE = dom.GetObject("Strom Zaehlerstand");
var tmpF = dom.GetObject("Strom Leistungsaufnahme aktuell");
var tmpG = dom.GetObject("Strom Referenz Verbrauch seit letzter Ablesung");
var tmpH = dom.GetObject("Strom Verbrauch seit letzter Ablesung");
var tmpI = dom.GetObject("Strom Referenz Verbrauch heute");
var tmpJ = dom.GetObject("Strom Verbrauch heute");
var tmpK = dom.GetObject("Strom Referenz Verbrauch laufende Woche");
var tmpL = dom.GetObject("Strom Verbrauch laufende Woche");
var tmpM = dom.GetObject("Strom Referenz Verbrauch laufender Monat");
var tmpN = dom.GetObject("Strom Verbrauch laufender Monat");
var tmpO = dom.GetObject("Strom Referenz Verbrauch laufendes Kalenderjahr");
var tmpP = dom.GetObject("Strom Verbrauch laufendes Kalenderjahr");
	if ((tmpB.State() + 0.001) < tmpC.State()) {
	tmpD.State(tmpD.State() + 838.8607);
	}
tmpC.State(tmpB.State());
tmpE.State(tmpD.State() + (tmpB.State()/1000));
tmpF.State(tmpA.State());
tmpH.State(tmpE.State() - tmpG.State());
tmpJ.State(tmpE.State() - tmpI.State());
tmpL.State(tmpE.State() - tmpK.State());
tmpN.State(tmpE.State() - tmpM.State());
tmpP.State(tmpE.State() - tmpO.State());
Rücksetzskripte:

Code: Alles auswählen

var tmpA = dom.GetObject("Strom Verbrauch heute");
var tmpB = dom.GetObject("Strom Referenz Verbrauch heute");
tmpB.State(tmpA.State() + tmpB.State());

Code: Alles auswählen

var tmpA = dom.GetObject("Strom Verbrauch laufende Woche");
var tmpB = dom.GetObject("Strom Referenz Verbrauch laufende Woche");
tmpB.State(tmpA.State() + tmpB.State());

Code: Alles auswählen

var tmpA = dom.GetObject("Strom Verbrauch laufender Monat");
var tmpB = dom.GetObject("Strom Referenz Verbrauch laufender Monat");
tmpB.State(tmpA.State() + tmpB.State());

Code: Alles auswählen

var tmpA = dom.GetObject("Strom Verbrauch laufendes Kalenderjahr");
var tmpB = dom.GetObject("Strom Referenz Verbrauch laufendes Kalenderjahr");
tmpB.State(tmpA.State() + tmpB.State());

Code: Alles auswählen

var tmpA = dom.GetObject("Strom Verbrauch seit letzter Ablesung");
var tmpB = dom.GetObject("Strom Referenz Verbrauch seit letzter Ablesung");
tmpB.State(tmpA.State() + tmpB.State());
Verwendung meiner Hinweise und Skripte auf eigenes Risiko | Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“