Script für Abfrage UVR1611-Daten über CMI-JSON-API Schnittstelle der CMI von TA abzufragen und in der CCU zu speichern

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

Moderator: Co-Administratoren

Antworten
wesseli
Beiträge: 17
Registriert: 29.04.2015, 14:55

Script für Abfrage UVR1611-Daten über CMI-JSON-API Schnittstelle der CMI von TA abzufragen und in der CCU zu speichern

Beitrag von wesseli » 24.08.2018, 23:00

Hallo,

anbei ein TCL-Script, was ich ich nutze, um die Eingangs- und Ausgangsdaten einer UVR1611 über die CMI-JSON-API-Schnittstelle abfragen und in einer CCU in separate Systemvariablen speichern zu können. Das Script wertet den die Daten aus und erkennt, ob die Variablen als analoge oder digitale Werte zur Verfügung gespeichert werden müssen. Die Systemvariablen müssen in der CCU aber korrekt angelegt werden. Hinweise dazu sind im Script als Kommentare hinterlegt.

Vorteil: Es muß nur einmal eine Abfrage über das Netzwerk an die CMI gesendet werden, um alle Eingangs- und Ausgangsdaten zu erhalten. Damit werden Fehler wegen zu vieler Anfragen durch die CMI vermieden.

Beispiel: Daten einer UVR1611, die über eine CMI-JSON-API-Schnittstelle einer CMI von TA nach folgendem Format zur Verfügung gestellt werden:
{ "Header":{ "Version":3, "Device":"80", "Timestamp":1535150343 }, "Data":{ "Inputs":[ { "Number":1, "AD":"A", "Value":{ "Value":20.7, "Unit":"1" } } , { "Number":2, "AD":"A", "Value":{ "Value":60.2, "Unit":"1" } } , { "Number":3, "AD":"A", "Value":{ "Value":46.4, "Unit":"1" } } , { "Number":4, "AD":"A", "Value":{ "Value":58.4, "Unit":"1" } } , { "Number":5, "AD":"A", "Value":{ "Value":29.7, "Unit":"1" } } , { "Number":6, "AD":"A", "Value":{ "Value":42.4, "Unit":"1" } } , { "Number":7, "AD":"A", "Value":{ "Value":30.9, "Unit":"1" } } , { "Number":8, "AD":"A", "Value":{ "Value":59.2, "Unit":"1" } } , { "Number":9, "AD":"A", "Value":{ "Value":59.2, "Unit":"1" } } , { "Number":10, "AD":"A", "Value":{ "Value":39.3, "Unit":"1" } } , { "Number":11, "AD":"A", "Value":{ "Value":30.6, "Unit":"1" } } , { "Number":12, "AD":"A", "Value":{ "Value":20.6, "Unit":"1" } } , { "Number":13, "AD":"D", "Value":{ "Value":0, "Unit":"43" } } , { "Number":14, "AD":"A", "Value":{ "Value":48.0, "Unit":"1" } } , { "Number":15, "AD":"D", "Value":{ "Value":0, "Unit":"43" } } , { "Number":16, "AD":"A", "Value":{ "Value":0, "Unit":"3" } } ], "Outputs":[ { "Number":1, "AD":"A", "Value":{ "State":0,"Value":0, "Unit":"0" } } , { "Number":2, "AD":"A", "Value":{ "State":0,"Value":0, "Unit":"0" } } , { "Number":3, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":4, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":5, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":6, "AD":"A", "Value":{ "State":0,"Value":0, "Unit":"0" } } , { "Number":7, "AD":"A", "Value":{ "State":0,"Value":0, "Unit":"0" } } , { "Number":8, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":9, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":10, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":11, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":12, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":13, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } ]}, "Status":"OK", "Status code":0 }
Grundlage: CMI-JSON-API-Schnittstelle der CMI , Version 3

Code: Alles auswählen

!*************************************************************************************************
!*************************** Anfang - Individueller Anpassungsbereich ****************************
!Script fuer Abfrage UVR 1 oder 2 - 1 = Abfrage UVR1; 2 = Abfrage UVR2
integer b = 1;

!CMI Zugriffsdaten
string User_CMI = "xxxxx";
string PWD_CMI = "yyyyyyyy";
string IP_Adr_CMI = "xxx.xxx.x.x";

!UVR1 I/O-Bezeichnungen - Reihenfolge I1,I2 ... I16 oder A1,A2 ... A16
!-----------------------------------------------------------------------------------------------
!Die Systemvariablen muessen auch mit den Bezeichnungen identisch nach dem Schema UVR1_S1_XXXXXX ... UVR1_S16_XXXXXX (analog oder digital wie in der UVR) fuer die Eingaenge und UVR1_A1_XXXXXX ... UVR1_A16_XXXXXX in der CCU angelegt werden
!Unbenutzte Ein- oder Ausgaenge muessen nicht in der CCU angelegt werden. Script prüft das Vorhandensein der Variablen vor dem Speichern der Werte.
!Zusaetzlich ist eine Systemvariable UVR1_Aktualisierung (string) für die Speicherung des Aktualisierungszeitpunkts in der CCU anzulegen
!-----------------------------------------------------------------------------------------------
string Bez_Inp_UVR1 = ",TKollektor1,Puffer1oben,Puffer2unten,TWarmwasser,Solar-RL.pri,Solar-VL.sek,Solar-VL.pri,Puffer1oben2,Puffer1mitte,TKessel-RL1,TZirku.RL,TKollektor2,unbenutzt,TKessel-VL1,unbenutzt,Durchfl.Sol.";
string Bez_Outp_UVR1 = ",Solarpu.sek,Ladep.WW.,Topladung,Solarpu.pri,Anf.Kessel1,Ladep.Kessel1,unbenutzt,unbenutzt,Ventil.Solar2,Ventil.Solar1,Pumpe-Zirku,unbenutzt,unbenutzt,Datenleitung,Analogausgang,Analogausgang";

!UVR2 I/O-Bezeichnungen - Reihenfolge I1,I2 ... I16 oder A1,A2 ... A16
!-----------------------------------------------------------------------------------------------
!Die Systemvariablen muessen auch mit den Bezeichnungen identisch nach dem Schema UVR2_S1_XXXXXX ... UVR2_S16_XXXXXX (analog oder digital wie in der UVR) fuer die Eingaenge und UVR2_A1_XXXXXX ... UVR2_A16_XXXXXX in der CCU angelegt werden
!Unbenutzte Ein- oder Ausgaenge muessen nicht in der CCU angelegt werden. Script prüft das Vorhandensein der Variablen vor dem Speichern der Werte.
!Zusaetzlich ist eine Systemvariable UVR2_Aktualisierung (string) für die Speicherung des Aktualisierungszeitpunkts in der CCU anzulegen
!-----------------------------------------------------------------------------------------------
string Bez_Inp_UVR2 = ",T.W-tauscher,TBecken-RL1,TBecken-VL1,DS-VL-Pool1,unbenutzt,unbenutzt,unbenutzt,unbenutzt,Puffer2oben,THeizkr.RL1,THeizkr.RL2,Temp.Aussen,THeizkr.VL1,THeizkr.VL2,unbenutzt,unbenutzt";
string Bez_Outp_UVR2 = ",unbenutzt,Pumpe-Hzkr1,Misch.Hzkr1_AUF,Misch.Hzkr1_ZU,Filterpumpe,unbenutzt,Pumpe-Hzkr2,Misch.Hzkr2_AUF,Misch.Hzkr2_ZU,RL-Umschalt.1,RL-Umschalt.2,unbenutzt,unbenutzt,Datenleitung,Analogausgang,Analogausgang";

!Optionale Experteneinstellungen: OpenWeather-Daten per CUxD abrufen
!Falls Sie in Ihrer Homematic die Software CUX-Daemon installiert haben, setzt dieses Script den wget-Command standardm‰flig per
!CUxD "System-Devices" (28) bzw. Device CUxD.CUX2801001:1 ab. Hier gegebenenfalls den Namen des Devices nach dem Schema "CUxD.<Seriennummer>:1" aendern.

string cuxCMDName = 'CUxD.CUX2801001:9';
!*************************** Ende - Individueller Anpassungsbereich ****************************
!***********************************************************************************************

!Pruefen, ob CUX-Daemon Devices vorhanden sind
!***************************************************
boolean cuxCMD = false;

if(dom.GetObject(cuxCMDName#'.CMD_SETS')){cuxCMD = true;}

if(cuxCMD)
{
  ! CMI-JSON-API Abfrage - Daten aller I/O-Werte der UVR
  var url = "http://"#User_CMI#":"#PWD_CMI#"@"#IP_Adr_CMI#"/INCLUDE/api.cgi?jsonnode="#b#"&jsonparam=I,O";

  dom.GetObject(cuxCMDName#'.CMD_SETS').State("wget -q --auth-no-challenge -O - '"#url#"'");
  dom.GetObject(cuxCMDName#'.CMD_QUERY_RET').State(1);
  string sData_V = dom.GetObject(cuxCMDName#'.CMD_RETS').State();
  
  !WriteLine(sData_V);
  
} else {
  
  !WriteLine("Keine CUX");
  quit;
  
}

!Pruefen, ob XML-String geholt wurde, ansonsten abbrechen
!*********************************************************
if(sData_V == ""){quit;}
if(!sData_V.Contains("OK")){quit;}

! Header-Daten auswerten
!*********************************************************
! Timestamp Header
integer iZeitzone = 7200; ! 2 Stunden = (60*60)*2 = 7200 Sekunden - Bitte anpassen;
var posValue_TS_Start = "Timestamp";
var posValue_TS_End = "\n},\n\"Data";
var posValue_TS = sData_V.Find(posValue_TS_Start) + posValue_TS_Start.Length() + 2;
var sData_V_H_TS = sData_V.Substr(posValue_TS, sData_V.Find(posValue_TS_End) - posValue_TS).ToInteger() - iZeitzone;
time tDat_Time = sData_V_H_TS.ToTime();

! Aufbereitung Timestamp
!*********************************************************
string sDate = tDat_Time.Format("%d.%m.%Y"); ! sDate = "24.12.2008";
string sTime = tDat_Time.Format("%c"); ! sTime = "18:30:00";
string sName_Zeitz = tDat_Time.Format("%Z"); ! sNZeitz = "CET";
string sZeitabst_GMT = tDat_Time.Format("%z"); ! sZeitabst_GMT = "+0200";

!Tag-Namen-Suche vorbereiten
!*********************************************************
var posValueStart = "Inputs";
var posValueEingEnd = "]";
var posValueAusgEnd = "\n]},";

var posValue = sData_V.Find(posValueStart) + posValueStart.Length()+4;
var Length_Z =  sData_V.Find(posValueAusgEnd) - posValue;

!Geholten XML-String parsen
!*********************************************************
var sEing_V = sData_V.Substr(posValue, Length_Z).StrValueByIndex(posValueEingEnd, 0);
var sAusg_V = sData_V.Substr(posValue, Length_Z).StrValueByIndex(posValueEingEnd, 1);
!WriteLine(sEing_V);
!WriteLine(sAusg_V);

boolean bStart_Outp = false;
integer iData_Outp = 0;
integer i = 0;
integer k = 0;

string sData_V_DS = "";
string sData_Outp = 0;
string sData_V_DS_n = "";
string sData_V_DS_n_Number = "";
string sData_V_DS_n_AD = "";
string sData_V_DS_n_Value = "";
string sData_V_DS_n_State = "";
string sData_V_DS_n_Unit = "";

string slist = "";

foreach(sData_V_DS, sData_V.Substr(posValue, Length_Z).Split(posValueEingEnd))
{

    !WriteLine(sData_V_DS);

    i = i + 1;
	
    !bStart_Outp = sData_V_DS.StartsWith(",\n\"Outputs\":");
    bStart_Outp = sData_V_DS.Contains("Outputs");

    !quit;
    
    if (bStart_Outp)
    {
	sData_Outp = sData_V_DS.LTrim(",\n\"Outputs\":\[\n");
        sData_V_DS = sData_Outp;
	iData_Outp = 1; 
    }
   
    !WriteLine(sData_V_DS);
    !WriteLine(iData_Outp);

    !quit;

    foreach(sData_V_DS_n, sData_V_DS.Split("{"))
    {
	!WriteLine(sData_V_DS_n);
        !WriteLine(sData_V_DS_n.StrValueByIndex(",",2));
        !k = k + 1;
        !quit;

        if (sData_V_DS_n.StrValueByIndex(",",0).Contains("Number"))
	    {
	        sData_V_DS_n_Number = sData_V_DS_n.StrValueByIndex(",",0).StrValueByIndex(":",1);
                k = k + 1;
                !WriteLine(k);
                !quit;
	    
	        if (!bStart_Outp)
	        {
	           slist = slist#"I"#sData_V_DS_n_Number#",";
	       
	        } else {
	    
	           slist = slist#"O"#sData_V_DS_n_Number#",";
	        }
	    }

        !quit;
        if (sData_V_DS_n.StrValueByIndex(",",1).Contains("AD"))
	    {
	
	        sData_V_DS_n_AD = sData_V_DS_n.StrValueByIndex(",",1).StrValueByIndex(":", 1).LTrim("\"").RTrim("\"");
	   
	        if (sData_V_DS_n_AD == "A") {
	   
	            slist = slist#sData_V_DS_n_AD#":Analog,";
	       
	        } elseif (sData_V_DS_n_AD == "D") {
	    
	            slist = slist#sData_V_DS_n_AD#":Digital,";
	       
	        }
	    }

         if (!bStart_Outp)
            {
               if (sData_V_DS_n.StrValueByIndex(",",0).Contains("Value") && !sData_V_DS_n.StrValueByIndex(",",0).EndsWith(":"))
	          {
	    
	            sData_V_DS_n_Value = sData_V_DS_n.StrValueByIndex(",",0).StrValueByIndex(":", 1);
	            slist = slist#"V:"#sData_V_DS_n_Value#",";
	           }

                if (sData_V_DS_n.StrValueByIndex(",",1).Contains("Unit"))
	           {
	    
	           sData_V_DS_n_Unit = sData_V_DS_n.StrValueByIndex(",",1).StrValueByIndex(":", 1).LTrim("\"").RTrim("\"\n}\n}\n");
	           slist = slist#"U:"#sData_V_DS_n_Unit#";";
	            !quit; 
	           }
               
             } else {

                if (sData_V_DS_n.StrValueByIndex(",",0).Contains("State"))
                {
                    !WriteLine(sData_V_DS_n.StrValueByIndex(",",0);
                    sData_V_DS_n_State = sData_V_DS_n.StrValueByIndex(",",0).StrValueByIndex(":",1);
                    slist = slist#"S:"#sData_V_DS_n_State#",";

                    if (sData_V_DS_n.StrValueByIndex(",",1).Contains("Value"))
                    {
                       sData_V_DS_n_Value = sData_V_DS_n.StrValueByIndex(",",1).StrValueByIndex(":", 1);
                       slist = slist#"V:"#sData_V_DS_n_Value#",";
                    }

                    if (sData_V_DS_n.StrValueByIndex(",",2).Contains("Unit"))
                    {
                       sData_V_DS_n_Unit = sData_V_DS_n.StrValueByIndex(",",2).StrValueByIndex(":", 1).LTrim("\"").RTrim("\"\n}\n}\n");
                       slist = slist#"U:"#sData_V_DS_n_Unit#";";
                    }

                 } elseif (sData_V_DS_n.StrValueByIndex(",",0).Contains("Value") && !sData_V_DS_n.StrValueByIndex(",",0).EndsWith(":"))
                 {
                    sData_V_DS_n_Value = sData_V_DS_n.StrValueByIndex(",",0).StrValueByIndex(":", 1);
                    slist = slist#"V:"#sData_V_DS_n_Value#",";

                    if (sData_V_DS_n.StrValueByIndex(",",1).Contains("Unit"))
                    {
                       sData_V_DS_n_Unit = sData_V_DS_n.StrValueByIndex(",",1).StrValueByIndex(":", 1).LTrim("\"").RTrim("\"\n}\n}\n");
                       slist = slist#"U:"#sData_V_DS_n_Unit#";";
                    }
                  
                 }

             }

         !if (k == 2){quit;}
      
    }

    !quit;

}

! Beispiel slist: "I1,A:Analog,V:55.9,U:1;I2,A:Analog,V:59.5,U:1;......;O1,A:Analog,S:1,V:21,U:0"
!*********************************************************
slist = slist.Substr(0, slist.Length()-1);

! Unit-Bezeichnungen ermitteln
!*********************************************************
string Unit_ID = ",°C,W/m2,l/h,Sek,Min,l/Imp,K,%,,kW,kWh,MWh,V,mA,Std,Tage,Imp,kΩ,l,km/h,Hz,l/min,bar,,km,m,mm,m3,,,,,,,l/d,m/s,m3/min,m3/h,m3/d,mm/min,mm/h,mm/d,AUS/EIN,NEIN/JA,,°C,,,,€,$,g/m3,,°,,°,Sek,,%,Uhr,,,A,,mbar,Pa,ppm";

integer p = 0;
string slist_n;
string slist_n_U;
string slist_Data;
foreach(slist_n, slist.Split(";"))
{

 p = p + 1;

 !WriteLine(slist_n.StrValueByIndex(",",2));
 slist_Data = slist_Data#slist_n.StrValueByIndex(",",0)#","#slist_n.StrValueByIndex(",",1)#",";

 if (!slist_n.Contains("S"))
 {

    if (slist_n.StrValueByIndex(",",1).StrValueByIndex(":", 0) == "D") 
    {

       if (slist_n.StrValueByIndex(",",2).StrValueByIndex(":", 1) == "0") 
       {
          slist_Data = slist_Data#"V:"#"AUS"#",";
       } else {
          slist_Data = slist_Data#"V:"#"EIN"#",";
       }

    } else {
       slist_Data = slist_Data#slist_n.StrValueByIndex(",",2)#",";
    }

    slist_n_U = slist_n.StrValueByIndex(",",3).StrValueByIndex(":", 1);

    !WriteLine(slist_n_U);
    if (slist_n_U == "43") {
           !WriteLine(Unit_ID.StrValueByIndex(",", slist_n_U).StrValueByIndex("/", 0));

           if (slist_n.StrValueByIndex(",",2).StrValueByIndex(":", 1) == "0")
           {
              ! AUS oder NEIN
              slist_Data = slist_Data#"U:"#Unit_ID.StrValueByIndex(",", slist_n_U).StrValueByIndex("/", 0)#";";
           } else {
              ! EIN oder JA
              slist_Data = slist_Data#"U:"#Unit_ID.StrValueByIndex(",", slist_n_U).StrValueByIndex("/", 1)#";";
           }

           !slist_Data = slist_Data#"U:"#Unit_ID.StrValueByIndex(",", slist_n_U)#";";

    } elseif (slist_n_U == "0"){
        slist_Data = slist_Data.Substr(0, slist_Data.Length()-1)#";";

    } else {
        slist_Data = slist_Data#"U:"#Unit_ID.StrValueByIndex(",", slist_n_U)#";";  
    }

 } else {

    if (slist_n.StrValueByIndex(",",2).StrValueByIndex(":", 1) == "0") {
       slist_Data = slist_Data#"S:"#"AUS"#",";
    } else {
       slist_Data = slist_Data#"S:"#"EIN"#",";
    }

    slist_Data = slist_Data#slist_n.StrValueByIndex(",",3)#",";

    slist_n_U = slist_n.StrValueByIndex(",",4).StrValueByIndex(":", 1);
    !WriteLine(slist_n_U);
    if (slist_n_U == "43") {
           !WriteLine(Unit_ID.StrValueByIndex(",", slist_n_U).StrValueByIndex("/", 0));

           if (slist_n.StrValueByIndex(",",3).StrValueByIndex(":", 1) == "0")
           {
              ! AUS oder NEIN
              slist_Data = slist_Data#"U:"#Unit_ID.StrValueByIndex(",", slist_n_U).StrValueByIndex("/", 0)#";";
           } else {
              ! EIN oder JA
              slist_Data = slist_Data#"U:"#Unit_ID.StrValueByIndex(",", slist_n_U).StrValueByIndex("/", 1)#";";
           }

           !slist_Data = slist_Data#"U:"#Unit_ID.StrValueByIndex(",", slist_n_U)#";";

    } elseif (slist_n_U == "0"){
        slist_Data = slist_Data.Substr(0, slist_Data.Length()-1)#";";

    } else {
        slist_Data = slist_Data#"U:"#Unit_ID.StrValueByIndex(",", slist_n_U.ToInteger())#";";    
    }

 }

 !slist_n_U = slist_n.Substr(slist_n.Length()-1, 1);
 !if (p == 1) {quit;}

}

! Format slist_Data": "I1,A:Analog,V:28.8,U:°C;I2,A:Analog,V:29.0,U:°C;I3,A:Analog,V:28.9,U:°C;I4,D:Digital,V:EIN,U:EIN;I5,D:Digital,V:AUS,U:AUS;.... I10,A:Analog,V:24.5,U:°C;....O1,A:Analog,S:AUS,V:0;O2,A:Analog,S:AUS,V:0;O3,D:Digital,V:AUS;...O11,D:Digital,V:AUS;O12,D:Digital,V:AUS;O13,D:Digital,V:AUS",
! Abtrennen des letzten Trennzeichens ";"
!*********************************************************
slist_Data = slist_Data.Substr(0, slist_Data.Length()-1);

! Trennung Ein- u. Ausgaenge zum Test
!!*********************************************************
string slist_Data_I;
string slist_Data_A;
slist_Data_I = slist_Data.Substr(0, slist_Data.Find("O1")-1);
slist_Data_A = slist_Data.Substr(slist_Data.Find("O1"), slist_Data.Length() - slist_Data.Find("O1"));
!WriteLine(slist_Data_I);
!WriteLine(slist_Data_A);

! Bezeichnungen der Ein- und Ausg‰nge
!*********************************************************
if (b == 1 ){
  ! UVR1 
  string Bez_Inp = Bez_Inp_UVR1;
  string Bez_Outp = Bez_Outp_UVR1;
} elseif (b == 2) {
  ! UVR2
  string Bez_Inp = Bez_Inp_UVR2;
  string Bez_Outp = Bez_Outp_UVR2;
}

integer r = 0;
string slist_Data_n;
string sBez = "";
object svspeicher;
boolean bslist_Data_n;

! Werte in Variablen der CCU schreiben
!*********************************************************
foreach(slist_Data_n, slist_Data.Split(";"))
{
  !WriteLine(slist_Data_n);
  
  r = r + 1;
  
  ! Bezeichnung holen
  if (slist_Data_n.StrValueByIndex(",",0).Contains("I"))
  {
    sBez = "UVR"#b#"_S"#slist_Data_n.StrValueByIndex(",",0).LTrim("I")#"_"#Bez_Inp.StrValueByIndex(",",slist_Data_n.StrValueByIndex(",",0).LTrim("I"));
  }

  if (slist_Data_n.StrValueByIndex(",",0).Contains("O"))
  {
    sBez = "UVR"#b#"_A"#slist_Data_n.StrValueByIndex(",",0).LTrim("O")#"_"#Bez_Outp.StrValueByIndex(",",slist_Data_n.StrValueByIndex(",",0).LTrim("O"));
  }

  svspeicher = dom.GetObject(sBez);     ! Variablenbezeichnung in CCU2/3

  ! O1,A:Analog
  if (slist_Data_n.StrValueByIndex(",",1).StrValueByIndex(":", 0) == "A")
  {
 
  	if (slist_Data_n.StrValueByIndex(",",2).StrValueByIndex(":", 0) == "S")
        {
           ! O1,A:Analog,S:AUS,V:0;
           if (svspeicher){svspeicher.State(slist_Data_n.StrValueByIndex(",",3).StrValueByIndex(":", 1).ToFloat());}   ! Anlage als Gleitzahl
           !WriteLine(slist_Data_n.StrValueByIndex(",",3).StrValueByIndex(":", 1).ToFloat());       

        } else {
       
           ! I14,A:Analog,V:46.5,
           if (svspeicher){svspeicher.State(slist_Data_n.StrValueByIndex(",",2).StrValueByIndex(":", 1).ToFloat());}   ! Anlage als Gleitzzahl
           !WriteLine(slist_Data_n.StrValueByIndex(",",2).StrValueByIndex(":", 1).ToFloat());
        }

  } elseif (slist_Data_n.StrValueByIndex(",",1).StrValueByIndex(":", 0) == "D"){                                    ! I15,D:Digital
   
        ! I15,D:Digital,V:AUS
        if (slist_Data_n.StrValueByIndex(",",2).StrValueByIndex(":", 1) == "AUS")
        { 
       
           bslist_Data_n = false;
           if (svspeicher){svspeicher.State(bslist_Data_n);}                                                           ! Anlage als Logikwert
       
        } elseif (slist_Data_n.StrValueByIndex(",",2).StrValueByIndex(":", 1) == "EIN"){
       
           bslist_Data_n = true;
           if (svspeicher){svspeicher.State(bslist_Data_n);}
        }

        !WriteLine(bslist_Data_n);
       
  } else {
   
        ! I14,A:Analog,V:46.5,
        if (svspeicher){svspeicher.State(slist_Data_n.StrValueByIndex(",",2).StrValueByIndex(":", 1).ToFloat());}   ! sonst, Anlage als Gleitzahl
        !WriteLine(slist_Data_n.StrValueByIndex(",",2).StrValueByIndex(":", 1).ToFloat());
  }

  !WriteLine(sBez);
  !if (r == 16) {quit;}
  
}

!Aktualisierungszeitpunkt speichern
!*********************************************************
object svspeicher1;
sBez = "UVR"#b#"_Aktualisierung";
svspeicher1 = dom.GetObject(sBez);
if (svspeicher1){svspeicher1.State(sTime);}
Hinweise sind im Script hinterlegt. Wenn Fragen sind, dann bitte melden.

Viele Spaß!

Viele Gruesse
wesseli

Antworten

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