Systemprotokoll automatisch exportieren ?

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

66er
Beiträge: 3083
Registriert: 23.08.2015, 11:06
System: CCU
Hat sich bedankt: 116 Mal
Danksagung erhalten: 111 Mal

Re: Systemprotokoll automatisch exportieren ?

Beitrag von 66er » 10.12.2015, 20:15

Vorerst passe ich!

Meine spontan-akute Begriffstutzigkeit hat gesiegt. :oops:

Den kompletten Thread habe ich mehrfach durch! :(

Erfolg = Null

Trotzdem danke an alle.

Schönen Abend noch.
66er
Ich übernehme keine Haftung für von mir gegebene Antworten, Tipps und veröffentlichte Projekte! Jeder ist für sich selbst verantwortlich! Arbeiten an 230V sind von einer Elektrofachkraft auszuführen!

Homematic in Betrieb seit 15.08.2015, > 60 HM-Komp. | 3x USV APC ES400 | Visualisierung auf ioBroker | Audio: Home24-Apps

Raspberrymatic auf DS923+ in VMM (Produktivsystem1)
Rollläden, SSD, Wetter, Logging, Licht, RM, Sonos, Shelly

Raspberrymatic auf DS923+ in VMM (Produktivsystem2 )
Erweiterung GMA, Heizung, Licht, Shelly, SSD, Sonos

>100 Shelly-Geräte an Homematic | CCU2 endgültig in Rente | 3 Raspis als Rückfallebene für Raspimatic und ioBroker

Shelly an Homematic | Infrarot-Heizungssteuerung | Fensteröffnungszeit überwachen

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Systemprotokoll automatisch exportieren ?

Beitrag von alchy » 10.12.2015, 20:42

Das kann ich nicht nachvollziehen.
WAS hast du denn nicht begriffen?

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Xel66
Beiträge: 14165
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 585 Mal
Danksagung erhalten: 1500 Mal

Re: Systemprotokoll automatisch exportieren ?

Beitrag von Xel66 » 10.12.2015, 21:00

Die Systemvariable "Systemprotokoll" muss ja noch mit dem Inhalt des richtigen Systemprotokolls gefüllt werden. Dazu brauchst Du das Script. Das ist meis aus dem GUI (und vermutlich auch das gleiche wie im verlinkten Thread).

Code: Alles auswählen

! Systemprotokoll auslesen und als E-Mail versenden
!--------------------------------------------------
! Unbedingt eine Systemvariable mit Namen "Systemprotokoll"
! vom Typ Zeichenkette anlegen !!!

! Im TCL Bereich des E-Mail Addons
! folgende Zeilen ohne ! eintragen.

! load tclrega.so
! array set tclrega [rega_script {
! var sysp = dom.GetObject("Systemprotokoll").Value();
! var clearsysp = dom.GetObject("Systemprotokoll").State("");
! } ]
! set sysprot [encoding convertfrom utf-8 $tclrega(sysp)]
!-----------------------------------------------------------------

! Ausgabe in der Mail mit $sysprot

! Zb:Systemprotokoll:$sysprot

!-----------------------------------------------------------------
! id der E-Mail hier eintragen !!!

string mail_id = "08";

! Im unteren Teil die Adresse des CUxD durch seine eigene ersetzen !!!
!-----------------------------------------------------------------
var sysp = dom.GetObject("Systemprotokoll");
            string drop = "";
            integer iLastGroupIndex = 1;
            string sCollectedNames = "";
            string sCollectedValues = "";
            string sCollectedDateTimes = "";
            string s;
            integer iStart = 0;
            integer iCount = dom.GetHistoryDataCount();
            integer rCount;
           
            foreach( s, dom.GetHistoryData( iStart, iCount, &rCount ) )
           {
            integer iGroupIndex = s.StrValueByIndex(";",0).ToInteger();
            string sDatapointId = s.StrValueByIndex(";",1);
            string sRecordedValue = s.StrValueByIndex(";",2);
            string sDateTime = s.StrValueByIndex(";",3);
           
            string sDatapointName = "";
            object oHistDP = dom.GetObject( sDatapointId );
            if( oHistDP )
            {
             object oDP = dom.GetObject( oHistDP.ArchiveDP() );
              if( oDP )
               {
                 sDatapointName = oDP.Name();
                 boolean bSysVar = (oDP.IsTypeOf(OT_VARDP) || oDP.IsTypeOf(OT_ALARMDP));
                 if( !bSysVar )
                 {
                   object oCH = dom.GetObject( oDP.Channel() );
                   if( oCH )
                   {
                     sDatapointName = oCH.Name();
                   }           
                 }
                
                 if( iLastGroupIndex != iGroupIndex )
                 {
                  
        drop = drop # sCollectedDateTimes # " " # sCollectedNames # " " # sCollectedValues # "\n";         
                   sCollectedNames = "";
                   sCollectedValues = "";
                   iLastGroupIndex = iGroupIndex;
                 }
                
                 string id = oDP.ID();
                 string sRet = "";
                 string sValue = sRecordedValue;
                 if( system.IsVar("id") )
 {
   object to = dom.GetObject( system.GetVar("id") );
   if( to )
   {
     if( to.IsTypeOf( OT_VARDP ) || to.IsTypeOf( OT_ALARMDP ) )
     {
       integer itoVT = to.ValueType();
       integer itoST = to.ValueSubType();
       boolean btoLogic  = ( (itoVT==ivtBinary)  && (itoST==istBool)    );
       boolean btoList   = ( (itoVT==ivtInteger) && (itoST==istEnum)    );
       boolean btoNumber = ( (itoVT==ivtFloat)   && (itoST==istGeneric) );
       boolean btoAlarm  = ( (itoVT==ivtBinary)  && (itoST==istAlarm)   );
       boolean btoString  = ( (itoVT==ivtString)  && (itoST==istChar8859));
       if( btoLogic || btoAlarm )
       {
         if ( (sValue == "0") || (sValue == "") )
         {
           sRet=sRet#to.ValueName0();
         }
         else
         {
           sRet=sRet#to.ValueName1();
         }
       }
       if( btoList )
       {
         if( sValue == "" )
         {
           sRet=sRet#web.webGetValueFromList(to.ValueList(),0);
         }
         else
         {
           sRet=sRet#web.webGetValueFromList(to.ValueList(),sValue.ToInteger());
         }
       }
       if( btoNumber )
       {
         if (sValue == "")
         {
           sRet=sRet#"0";
         }
         else
         {
           sRet=sRet#sValue;
         }
       }
       if (btoString)
       {
         sRet = sRet # sValue;
       }
       if( to.ValueUnit() != "" )
       {
         sRet=sRet#" "#to.ValueUnit();
       }
     }
     else
     {
       string tsShortKey = to.HSSID();
       string tsLongKey = to.HSSID();
       object toCH = dom.GetObject( to.Channel() );
       if( toCH )
       {
         tsLongKey = toCH.ChnLabel()#"|"#tsLongKey;
       }
      
       boolean tbOptionList = ( (to.ValueType() == ivtInteger) && (to.ValueSubType() == istEnum) );
       boolean tbAction = ( to.ValueSubType() == istAction );
       boolean tbBinary = ( to.ValueType() == ivtBinary );
       boolean tbRead = (to.Operations() & OPERATION_READ);
       boolean tbEvent = (to.Operations() & OPERATION_EVENT);
       boolean tbWrite = (to.Operations() & OPERATION_WRITE);
      
       boolean bBinary = ( to.ValueTypeStr() == "Binary" );
       boolean bFloat = ( to.ValueTypeStr() == "Float" );
       boolean bSpecial = false;
          
       string sVUTmp = to.ValueUnit().ToString();
       string sSpace = " ";
      
       ! ### SUBSTITUTE SPECIAL VALUES
       real fVal1 = 0.0;
       real fVal2 = 0.0;
       string sSpecial = "";
       string stmpSV;
       foreach(stmpSV,oDP.EnumSpecialIDs())
       {
          fVal1 = oDP.GetSpecialValue(stmpSV);
          fVal2 = sValue.ToFloat();
          if( fVal1 == fVal2 )
          {
            bSpecial = true;
            sSpecial = stmpSV;
            sValue = "";
            sVUTmp = "";
            sSpace = "";
          }
       }
      
       if( tbBinary && (tbRead || tbAction) )
       {
         if( sValue == "0" )
         {
           tsShortKey = tsShortKey#"=FALSE";
           tsLongKey = tsLongKey#"=FALSE";
         }
         else
         {
           tsShortKey = tsShortKey#"=TRUE";
           tsLongKey = tsLongKey#"=TRUE";
         }
       }
      
       if( tbOptionList )
       {
         tsShortKey = tsShortKey#"="#web.webGetValueFromList( to.ValueList(), sValue );
         tsLongKey = tsLongKey#"="#web.webGetValueFromList( to.ValueList(), sValue );
       }
      
       if( bSpecial )
       {
         tsShortKey = tsShortKey#"="#sSpecial;
         tsLongKey = tsLongKey#"="#sSpecial;
       }       
      
       string sVTmp = web.webKeyFromStringTable( tsLongKey );
       if( !sVTmp.Length() )
       {
         sVTmp = web.webKeyFromStringTable( tsShortKey );
         if( !sVTmp.Length() )
         {
           sVTmp = "unbekannte Meldung ("#tsShortKey#")";
         }
       }
      
       if( !bSpecial )
       {
         if( sVUTmp == "100%" )
         {
           sValue = sValue.ToFloat() * 100;
           sValue = sValue.ToString();
           sVUTmp = "%";
         }
          if( sVUTmp == "degree" )
          {
           sVUTmp = "°";
         }
        
         if( bBinary )
         {
           sValue = "";
           sSpace = "";
         }
         if( bFloat )
         {
           sValue = sValue.ToFloat();
           sValue = sValue.ToString(2);
         }
         if( (!bBinary) && (!bFloat) )
         {
           sValue = sValue.ToInteger();
           sValue = sValue.ToString(0);
         }
        
         if( tbOptionList )
         {
           sValue = "";
           sVUTmp = "";
           sSpace = "";
         }
       }
      
       sVTmp = sVTmp#sSpace#sValue#sVUTmp;
       sRet = sVTmp;
     }
   }
 }
                  sRecordedValue = system.GetVar("sRet");
                
                 sCollectedNames = sDatapointName;
                 sCollectedDateTimes = sDateTime;
                  if( !sCollectedValues.Length() )
                 {
                   sCollectedValues = sRecordedValue;
                 }
                 else
                 {
                   sCollectedValues = sCollectedValues#", "#sRecordedValue;
                 }
                
               }
             }
            
           }
           if( sCollectedValues.Length() )
           {
       drop = drop # sCollectedDateTimes # " " # sCollectedNames # " " # sCollectedValues;
            }
 if (drop == "") {
drop = "Keine Einträge im Protokoll !!!";
}
! Protokolleinträge an Systemvariable übergeben
!----------------------------------------------
sysp.State(drop);
! E-Mail absenden mit CuxD
! Adresse des CUxD durch seine eigene ersetzen !!!
!-------------------------------------------------
         dom.GetObject("CUxD.CUX2801999:1.CMD_EXEC").State("/etc/config/addons/email/email '" # mail_id # "'");
      
! Textausgabe Konsole
!--------------------
        !WriteLine(drop);
        !WriteLine("OK!");
      
! Systemprotokoll löschen
!------------------------
        var clearHistory = dom.ClearHistoryData();
Wenn Du die Zeile var clearHistory = dom.ClearHistoryData(); mit einen führenden Ausrufezeichn auskommentierst, bleibt Dir bei Experimenten auch das Systemprotokoll erhalten. Für den grundsätzlichen Test kannst Du auch die Textausgabe Konsole aktivieren (Ausrufezeichen entfernen) und das Script im Testfenster ausführen. So kannst Du überprüfen, ob die Sysvar überhaupt gefüllt wird. Anscheinend ist Dein Script noch nie durchgelaufen und das Systemprotokoll deswegen noch vorhanden. Hast Du die CUxD-Adresse angepasst? Bei mir ist das die CUxD.CUX2801999:1. Muss bei Dir nicht unbedingt gleich sein.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

66er
Beiträge: 3083
Registriert: 23.08.2015, 11:06
System: CCU
Hat sich bedankt: 116 Mal
Danksagung erhalten: 111 Mal

Re: Systemprotokoll automatisch exportieren ?

Beitrag von 66er » 11.12.2015, 09:17

Hallo und guten Morgen zusammen,

sorry, ich war gestern Abend sehr gefrustet weil es nicht funktionierte, das hatte aber nichts mit Euch zu tun!

Ich bin für Eure Hilfe sehr dankbar. Für die relativ kurze Zeit, in der ich mit der Homematic arbeite, habe ich für mein Gefühl viel erreicht und die bisherigen Probleme mit Hilfe des Forums immer lösen können. So wird es auch mit diesem Thema noch werden.

Stand heute:


Ich habe heute morgen alles zum "Ereignisprotokoll versenden" gelöscht und danach Schritt für Schritt neu angelegt.

Positiv: Die Systemvariable wird jetzt komplett mit den Ereignisdaten gefüllt :D

Negativ 1: Es wird aber keine eMail versendet :cry:

Negativ 2: Testweise habe ich mir in einem zusätzlichen Programmaufruf nach 2 Minuten verzögert eine Mail zusenden lassen mit dem Inhalt der Systemvariablen "Systemprotokoll" Während der CSV-Export 3000 Einträge enthält ist in der eMail nach 186 Zeilen Schluss, obwohl die Variable mehr Datenzeilen enthält (erkannt an den Zeitstempeln). :cry:

Da ich den Fehler im TCL-Scipt vermute, hier mal der aktuelle, komplette Code:

Code: Alles auswählen

   load tclrega.so
    array set values [rega_script {
    if (dom.GetObject("BidCos-RF.LEQ1289365:1.STATE").Value() == 'false'){
    var u1 = "offen";
    }else {
    var u1 = "geschlossen";
    }
    if (dom.GetObject("BidCos-RF.LEQ1289244:1.STATE").Value() == 'false'){
    var u2 = "offen";
    }else {
    var u2 = "geschlossen";
    }
    if (dom.GetObject("BidCos-RF.LEQ1289437:1.STATE").Value() == 'false'){
    var u3 = "offen";
    }else {
    var u3 = "geschlossen";
    }
    if (dom.GetObject("BidCos-RF.LEQ1288856:1.STATE").Value() == 'false'){
    var u4 = "offen";
    }else {
    var u4 = "geschlossen";
    }
    if (dom.GetObject("BidCos-RF.LEQ1289225:1.STATE").Value() == 'false'){
    var o1 = "offen";
    }else {
    var o1 = "geschlossen";
    }
    if (dom.GetObject("BidCos-RF.LEQ1289252:1.STATE").Value() == 'false'){
    var o2 = "offen";
    }else {
    var o2 = "geschlossen";
    }
    if (dom.GetObject("BidCos-RF.LEQ1289503:1.STATE").Value() == 'false'){
    var o3 = "offen";
    }else {
    var o3 = "geschlossen";
    }
    if (dom.GetObject("BidCos-RF.LEQ1248821:1.STATE").Value() == '0'){
    var o4 = "geschlossen";
    }else {
    var o4 = "offen";
    }
    if (dom.GetObject("BidCos-RF.LEQ1289426:1.STATE").Value() == 'false'){
    var o5 = "offen";
    }else {
    var o5 = "geschlossen";
    }
    if (dom.GetObject("BidCos-RF.LEQ1288880:1.STATE").Value() == 'false'){
    var o6 = "offen";
    }else {
    var o6 = "geschlossen";
    }
    if (dom.GetObject("BidCos-RF.LEQ1289575:1.STATE").Value() == 'false'){
    var o7 = "offen";
    }else {
    var o7 = "geschlossen";
    }
    if (dom.GetObject("BidCos-RF.MEQ0214947:1.STATE").Value() == 'false'){
    var s1 = "unscharf";
    }else {
    var s1 = "scharf";
    }
     if (dom.GetObject("BidCos-RF.MEQ0214947:2.STATE").Value() == 'false'){
    var s2 = "EMA: Ruhe";
    }else {
    var s2 = "EMA: Alarm";
    }
    if (dom.GetObject("BidCos-RF.MEQ0214947:3.STATE").Value() == 'false'){
    var s3 = "Brand: Ruhe";
    }else {
    var s3 = "Brand: Alarm";
    }
    } ]

 load tclrega.so
    array set tclrega [rega_script {
    var sysp = dom.GetObject("Systemprotokoll").Value();
    ! var clearsysp = dom.GetObject("Systemprotokoll").State("");
     } ]


    set u1 $values(u1)
    set u2 $values(u2)
    set u3 $values(u3)
    set u4 $values(u4)
    set o1 $values(o1)
    set o2 $values(o2)
    set o3 $values(o3)
    set o4 $values(o4)
    set o5 $values(o5)
    set o6 $values(o6)
    set o7 $values(o7)
    set s1 $values(s1)
    set s2 $values(s2)
    set s3 $values(s3)
    set sysprot [encoding convertfrom utf-8 $tclrega(sysp)]
und hier noch das angepasste Script:

Code: Alles auswählen

      ! Systemprotokoll auslesen und als E-Mail versenden
    !--------------------------------------------------

    ! Unbedingt eine Systemvariable mit Namen "Systemprotokoll"
    ! vom Typ Zeichenkette anlegen !!!

    ! Im TCL Bereich des E-Mail Addons
    ! folgende Zeilen ohne ! eintragen.

    ! load tclrega.so
    ! array set tclrega [rega_script {
    ! var sysp = dom.GetObject("Systemprotokoll").Value();
    ! var clearsysp = dom.GetObject("Systemprotokoll").State("");
    ! } ]
    ! set sysprot [encoding convertfrom utf-8 $tclrega(sysp)]
    !-----------------------------------------------------------------

    ! Ausgabe in der Mail mit $sysprot

    ! Zb:Systemprotokoll:$sysprot

    !-----------------------------------------------------------------
    ! id der E-Mail hier eintragen !!!

    string mail_id = "09";

    ! Im unteren Teil die Adresse des CUxD durch seine eigene ersetzen !!!
    !-----------------------------------------------------------------
    var sysp = dom.GetObject("Systemprotokoll");
                string drop = "";
                integer iLastGroupIndex = 1;
                string sCollectedNames = "";
                string sCollectedValues = "";
                string sCollectedDateTimes = "";
                string s;
                integer iStart = 0;
                integer iCount = dom.GetHistoryDataCount();
                integer rCount;
               

                foreach( s, dom.GetHistoryData( iStart, iCount, &rCount ) )
                {
                  integer iGroupIndex = s.StrValueByIndex(";",0).ToInteger();
                  string sDatapointId = s.StrValueByIndex(";",1);
                  string sRecordedValue = s.StrValueByIndex(";",2);
                  string sDateTime = s.StrValueByIndex(";",3);
                 
                  string sDatapointName = "";
                  object oHistDP = dom.GetObject( sDatapointId );
                  if( oHistDP )
                  {
                    object oDP = dom.GetObject( oHistDP.ArchiveDP() );
                    if( oDP )
                    {
                      sDatapointName = oDP.Name();
                      boolean bSysVar = (oDP.IsTypeOf(OT_VARDP) || oDP.IsTypeOf(OT_ALARMDP));
                      if( !bSysVar )
                      {
                        object oCH = dom.GetObject( oDP.Channel() );
                        if( oCH )
                        {
                          sDatapointName = oCH.Name();
                        }           
                      }
                     
                      if( iLastGroupIndex != iGroupIndex )
                      {
                       
             drop = drop # sCollectedDateTimes # " " # sCollectedNames # " " # sCollectedValues # "\n";         
                        sCollectedNames = "";
                        sCollectedValues = "";
                        iLastGroupIndex = iGroupIndex;
                      }
                     
                      string id = oDP.ID();
                      string sRet = "";
                      string sValue = sRecordedValue;
                      if( system.IsVar("id") )
      {
        object to = dom.GetObject( system.GetVar("id") );
        if( to )
        {
          if( to.IsTypeOf( OT_VARDP ) || to.IsTypeOf( OT_ALARMDP ) )
          {
            integer itoVT = to.ValueType();
            integer itoST = to.ValueSubType();
            boolean btoLogic  = ( (itoVT==ivtBinary)  && (itoST==istBool)    );
            boolean btoList   = ( (itoVT==ivtInteger) && (itoST==istEnum)    );
            boolean btoNumber = ( (itoVT==ivtFloat)   && (itoST==istGeneric) );
            boolean btoAlarm  = ( (itoVT==ivtBinary)  && (itoST==istAlarm)   );
            boolean btoString  = ( (itoVT==ivtString)  && (itoST==istChar8859));
            if( btoLogic || btoAlarm )
            {
              if ( (sValue == "0") || (sValue == "") )
              {
                sRet=sRet#to.ValueName0();
              }
              else
              {
                sRet=sRet#to.ValueName1();
              }
            }
            if( btoList )
            {
              if( sValue == "" )
              {
                sRet=sRet#web.webGetValueFromList(to.ValueList(),0);
              }
              else
              {
                sRet=sRet#web.webGetValueFromList(to.ValueList(),sValue.ToInteger());
              }
            }
            if( btoNumber )
            {
              if (sValue == "")
              {
                sRet=sRet#"0";
              }
              else
              {
                sRet=sRet#sValue;
              }
            }
            if (btoString)
            {
              sRet = sRet # sValue;
            }
            if( to.ValueUnit() != "" )
            {
              sRet=sRet#" "#to.ValueUnit();
            }
          }
          else
          {
            string tsShortKey = to.HSSID();
            string tsLongKey = to.HSSID();
            object toCH = dom.GetObject( to.Channel() );
            if( toCH )
            {
              tsLongKey = toCH.ChnLabel()#"|"#tsLongKey;
            }
           
            boolean tbOptionList = ( (to.ValueType() == ivtInteger) && (to.ValueSubType() == istEnum) );
            boolean tbAction = ( to.ValueSubType() == istAction );
            boolean tbBinary = ( to.ValueType() == ivtBinary );
            boolean tbRead = (to.Operations() & OPERATION_READ);
            boolean tbEvent = (to.Operations() & OPERATION_EVENT);
            boolean tbWrite = (to.Operations() & OPERATION_WRITE);
           
            boolean bBinary = ( to.ValueTypeStr() == "Binary" );
            boolean bFloat = ( to.ValueTypeStr() == "Float" );
            boolean bSpecial = false;
               
            string sVUTmp = to.ValueUnit().ToString();
            string sSpace = " ";
           
            ! ### SUBSTITUTE SPECIAL VALUES
            real fVal1 = 0.0;
            real fVal2 = 0.0;
            string sSpecial = "";
            string stmpSV;
            foreach(stmpSV,oDP.EnumSpecialIDs())
            {
               fVal1 = oDP.GetSpecialValue(stmpSV);
               fVal2 = sValue.ToFloat();
               if( fVal1 == fVal2 )
               {
                 bSpecial = true;
                 sSpecial = stmpSV;
                 sValue = "";
                 sVUTmp = "";
                 sSpace = "";
               }
            }
           
            if( tbBinary && (tbRead || tbAction) )
            {
              if( sValue == "0" )
              {
                tsShortKey = tsShortKey#"=FALSE";
                tsLongKey = tsLongKey#"=FALSE";
              }
              else
              {
                tsShortKey = tsShortKey#"=TRUE";
                tsLongKey = tsLongKey#"=TRUE";
              }
            }
           
            if( tbOptionList )
            {
              tsShortKey = tsShortKey#"="#web.webGetValueFromList( to.ValueList(), sValue );
              tsLongKey = tsLongKey#"="#web.webGetValueFromList( to.ValueList(), sValue );
            }
           
            if( bSpecial )
            {
              tsShortKey = tsShortKey#"="#sSpecial;
              tsLongKey = tsLongKey#"="#sSpecial;
            }       
           
            string sVTmp = web.webKeyFromStringTable( tsLongKey );
            if( !sVTmp.Length() )
            {
              sVTmp = web.webKeyFromStringTable( tsShortKey );
              if( !sVTmp.Length() )
              {
                sVTmp = "unbekannte Meldung ("#tsShortKey#")";
              }
            }
           
            if( !bSpecial )
            {
              if( sVUTmp == "100%" )
              {
                sValue = sValue.ToFloat() * 100;
                sValue = sValue.ToString();
                sVUTmp = "%";
              }

              if( sVUTmp == "degree" )
              {
                sVUTmp = "°";
              }
             
              if( bBinary )
              {
                sValue = "";
                sSpace = "";
              }
              if( bFloat )
              {
                sValue = sValue.ToFloat();
                sValue = sValue.ToString(2);
              }
              if( (!bBinary) && (!bFloat) )
              {
                sValue = sValue.ToInteger();
                sValue = sValue.ToString(0);
              }
             
              if( tbOptionList )
              {
                sValue = "";
                sVUTmp = "";
                sSpace = "";
              }
            }
           
            sVTmp = sVTmp#sSpace#sValue#sVUTmp;
            sRet = sVTmp;
          }
        }
      }

                      sRecordedValue = system.GetVar("sRet");
                     
                      sCollectedNames = sDatapointName;
                      sCollectedDateTimes = sDateTime;

                      if( !sCollectedValues.Length() )
                      {
                        sCollectedValues = sRecordedValue;
                      }
                      else
                      {
                        sCollectedValues = sCollectedValues#", "#sRecordedValue;
                      }
                     
                    }
                  }
                 
                }
                if( sCollectedValues.Length() )
                {
            drop = drop # sCollectedDateTimes # " " # sCollectedNames # " " # sCollectedValues;

                }


    if (drop == "") {
    drop = "Keine Einträge im Protokoll !!!";
    }

    ! Protokolleinträge an Systemvariable übergeben
    !----------------------------------------------
    sysp.State(drop);

    ! E-Mail absenden mit CuxD
    ! Adresse des CUxD durch seine eigene ersetzen !!!
    !-------------------------------------------------
             dom.GetObject("CUxD.CUX2801777:1.CMD_EXEC").State("/etc/config/addons/email/email '" # mail_id # "'");
          
    ! Textausgabe Konsole
    !--------------------
            !WriteLine(drop);
             WriteLine("OK!");
          
    ! Systemprotokoll löschen
    !------------------------
            var clearHistory = dom.ClearHistoryData();
Es soll Mail Nr.09 versendet werden und die CUxD-Adresse wurde angepasst.

So, nun hoffe ich alle benötigten Infos zusammengetragen zu haben, und dass Ihr noch einen Tipp habt.

LG
66er
Ich übernehme keine Haftung für von mir gegebene Antworten, Tipps und veröffentlichte Projekte! Jeder ist für sich selbst verantwortlich! Arbeiten an 230V sind von einer Elektrofachkraft auszuführen!

Homematic in Betrieb seit 15.08.2015, > 60 HM-Komp. | 3x USV APC ES400 | Visualisierung auf ioBroker | Audio: Home24-Apps

Raspberrymatic auf DS923+ in VMM (Produktivsystem1)
Rollläden, SSD, Wetter, Logging, Licht, RM, Sonos, Shelly

Raspberrymatic auf DS923+ in VMM (Produktivsystem2 )
Erweiterung GMA, Heizung, Licht, Shelly, SSD, Sonos

>100 Shelly-Geräte an Homematic | CCU2 endgültig in Rente | 3 Raspis als Rückfallebene für Raspimatic und ioBroker

Shelly an Homematic | Infrarot-Heizungssteuerung | Fensteröffnungszeit überwachen

Xel66
Beiträge: 14165
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 585 Mal
Danksagung erhalten: 1500 Mal

Re: Systemprotokoll automatisch exportieren ?

Beitrag von Xel66 » 11.12.2015, 18:33

Ich weiß nicht, ob TCL mit dem führenden Ausrufezeichen in "! var clearsysp = dom.GetObject("Systemprotokoll").State("");" klarkommt. Dieser Befehl gilt im Übrigen nur dazu, die Systemvariable "Systemprotokoll" nach der Abbarbeitung des TCL-Scripts zu leeren. Das Systemprotokoll selbst wird im CCU-Script mit " var clearHistory = dom.ClearHistoryData();" gelöscht. Diese Zeile habe ich empfohlen auszukommentieren, nicht im TCL-Script (siehe mein Posting gestern 18:30 Uhr). Dazu kenne ich mich mit TCL zu wenig aus, um die korrekte Syntax bewerten zu können, aber im Allgemeinen wird in TCL mit # kommentiert. Ich vermute daher, dass das falsch Ausrufezeichen Dir die Ausführung blockiert. Such mal in dieser Richtung.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

66er
Beiträge: 3083
Registriert: 23.08.2015, 11:06
System: CCU
Hat sich bedankt: 116 Mal
Danksagung erhalten: 111 Mal

Re: Systemprotokoll automatisch exportieren ?

Beitrag von 66er » 11.12.2015, 19:00

Hallo Xel66,

ich habe das Ausrufezeichen im TCL-Script entfernt.

Beim ersten Test wurde die Variable "Systemprotokoll" wie von Dir geschrieben geleert. Eine eMail wurde nicht versandt.

Beim zweiten Test wurde auch die Variable nicht mehr geleert.

Edit: Ich vermute den Fehler auch im TCL, da die Variable ja komplett gefüllt wird, aber (manuell) nur teilweise übertragen wird.

LG
66er

OT: Für mich sehr mystisch :roll:
Ich übernehme keine Haftung für von mir gegebene Antworten, Tipps und veröffentlichte Projekte! Jeder ist für sich selbst verantwortlich! Arbeiten an 230V sind von einer Elektrofachkraft auszuführen!

Homematic in Betrieb seit 15.08.2015, > 60 HM-Komp. | 3x USV APC ES400 | Visualisierung auf ioBroker | Audio: Home24-Apps

Raspberrymatic auf DS923+ in VMM (Produktivsystem1)
Rollläden, SSD, Wetter, Logging, Licht, RM, Sonos, Shelly

Raspberrymatic auf DS923+ in VMM (Produktivsystem2 )
Erweiterung GMA, Heizung, Licht, Shelly, SSD, Sonos

>100 Shelly-Geräte an Homematic | CCU2 endgültig in Rente | 3 Raspis als Rückfallebene für Raspimatic und ioBroker

Shelly an Homematic | Infrarot-Heizungssteuerung | Fensteröffnungszeit überwachen

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Systemprotokoll automatisch exportieren ?

Beitrag von alchy » 11.12.2015, 20:02

Dein TCL Reiter sollte ungefähr so aussehen:

Code: Alles auswählen


load tclrega.so
array set values [rega_script {
		
var sysp = dom.GetObject("Systemprotokoll").Value();
        
if (dom.GetObject("BidCos-RF.LEQ1289365:1.STATE").Value()) {
var u1 = "offen";
}else { 
var u1 = "geschlossen";
}

if (dom.GetObject("BidCos-RF.LEQ1289244:1.STATE").Value()) {
var u2 = "offen";
}else {
var u2 = "geschlossen";
}

if (dom.GetObject("BidCos-RF.LEQ1289437:1.STATE").Value()) {
var u3 = "offen";
}else {
var u3 = "geschlossen";
}

if (dom.GetObject("BidCos-RF.LEQ1288856:1.STATE").Value()) {
var u4 = "offen";
}else {
var u4 = "geschlossen";
}
        
if (dom.GetObject("BidCos-RF.LEQ1289225:1.STATE").Value()) {
var o1 = "offen";
}else {
var o1 = "geschlossen";
}
        
if (dom.GetObject("BidCos-RF.LEQ1289252:1.STATE").Value()) {
var o2 = "offen";
}else {
var o2 = "geschlossen";
}

if (dom.GetObject("BidCos-RF.LEQ1289503:1.STATE").Value()) {
var o3 = "offen";
}else {
var o3 = "geschlossen";
}
        
if (dom.GetObject("BidCos-RF.LEQ1248821:1.STATE").Value() == '0'){
var o4 = "geschlossen";
}else {
var o4 = "offen";
}
        
if (dom.GetObject("BidCos-RF.LEQ1289426:1.STATE").Value()) {
var o5 = "offen";
}else {
var o5 = "geschlossen";
}

if (dom.GetObject("BidCos-RF.LEQ1288880:1.STATE").Value()) {
var o6 = "offen";
}else {
var o6 = "geschlossen";
}
        
if (dom.GetObject("BidCos-RF.LEQ1289575:1.STATE").Value()) {
var o7 = "offen";
}else {
var o7 = "geschlossen";
}
        
if (dom.GetObject("BidCos-RF.MEQ0214947:1.STATE").Value() == 'false'){
var s1 = "unscharf";
}else {
var s1 = "scharf";
}

if (dom.GetObject("BidCos-RF.MEQ0214947:2.STATE").Value() == 'false'){
var s2 = "EMA: Ruhe";
}else {
var s2 = "EMA: Alarm";
}
        
if (dom.GetObject("BidCos-RF.MEQ0214947:3.STATE").Value() == 'false'){
var s3 = "Brand: Ruhe";
}else {
var s3 = "Brand: Alarm";
}
        
} ]


        set u1 $values(u1)
        set u2 $values(u2)
        set u3 $values(u3)
        set u4 $values(u4)
        set o1 $values(o1)
        set o2 $values(o2)
        set o3 $values(o3)
        set o4 $values(o4)
        set o5 $values(o5)
        set o6 $values(o6)
        set o7 $values(o7)
        set s1 $values(s1)
        set s2 $values(s2)
        set s3 $values(s3)
        set sysprot [encoding convertfrom utf-8 $tclrega(sysp)]
o4 sowie s1-s3 mag ich nicht beurteilen, da ich nicht weiß,was du da machst.
Ich gehe davon aus, das es so wie du es bisher benutzt hattest auch funktionierte. :wink:

Die Löschzeile hab ich gleich ganz entfernt. Kann man anderweitig lösen.

Das ist nun aber nur der TCL Teil des Addons.
Kannst ja mal ausprobieren, ob es damit schon funktioniert.
Das Script füllt ja die Variable komplett, wenn ich es richtig gelesen hatte?!?

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

66er
Beiträge: 3083
Registriert: 23.08.2015, 11:06
System: CCU
Hat sich bedankt: 116 Mal
Danksagung erhalten: 111 Mal

Re: Systemprotokoll automatisch exportieren ?

Beitrag von 66er » 11.12.2015, 20:45

Hallo Alchy,

vielen Dank für's korrigieren des TCL-Scriptes.

Ich habe es soeben einkopiert und getestet:
o4 sowie s1-s3 mag ich nicht beurteilen, da ich nicht weiß,was du da machst.
Ich gehe davon aus, das es so wie du es bisher benutzt hattest auch funktionierte. :wink:
ja, die tun brav ihren Dienst :wink:
Kannst ja mal ausprobieren, ob es damit schon funktioniert.
Leider nicht. :(

Die Variable wird ordnungsgemäß gefüllt, aber noch immer wird keine Mail versandt.
Das Script füllt ja die Variable komplett, wenn ich es richtig gelesen hatte?!?
Ja, nach Start dauert es einige Zeit, und dann steht alles in der Variable.

Also doch noch ein Fehler im Script?

Oder mache ich einen Denkfehler im auslösenden Programm? Die Taste ist eine virtuelle nur zum testen. Die Verzögerung habe ich auch zum testen gesetzt. Auch bei sofort kommt keine eMail.
eMail_Systemprotokoll.jpg
Danke nochmals.
66er
Ich übernehme keine Haftung für von mir gegebene Antworten, Tipps und veröffentlichte Projekte! Jeder ist für sich selbst verantwortlich! Arbeiten an 230V sind von einer Elektrofachkraft auszuführen!

Homematic in Betrieb seit 15.08.2015, > 60 HM-Komp. | 3x USV APC ES400 | Visualisierung auf ioBroker | Audio: Home24-Apps

Raspberrymatic auf DS923+ in VMM (Produktivsystem1)
Rollläden, SSD, Wetter, Logging, Licht, RM, Sonos, Shelly

Raspberrymatic auf DS923+ in VMM (Produktivsystem2 )
Erweiterung GMA, Heizung, Licht, Shelly, SSD, Sonos

>100 Shelly-Geräte an Homematic | CCU2 endgültig in Rente | 3 Raspis als Rückfallebene für Raspimatic und ioBroker

Shelly an Homematic | Infrarot-Heizungssteuerung | Fensteröffnungszeit überwachen

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Systemprotokoll automatisch exportieren ?

Beitrag von alchy » 11.12.2015, 21:13

Mal ganz ruhig Brauner. :mrgreen:
Wenn !!! die Variable gefüllt ist, führe mal folgendes Script aus UND nur dieses Script.

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801777:1.CMD_EXEC").State("/etc/config/addons/email/email 09");
Wenn da keine Mail kommt, geh in das Mailaddon und hake TCL bei Mailvorlage 09 ab und führe das Scriptchen nochmals aus.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

66er
Beiträge: 3083
Registriert: 23.08.2015, 11:06
System: CCU
Hat sich bedankt: 116 Mal
Danksagung erhalten: 111 Mal

Re: Systemprotokoll automatisch exportieren ?

Beitrag von 66er » 11.12.2015, 21:26

Hallo Alchy,

habe ich gemacht.

Und leider kommt in beiden Fällen keine Mail!

Ich schlußfolgere mal ganz vorsichtig, dass ich das CuX-Gerät falsch angelegt habe, oder?

LG
66er

edit:

Nachtrag:

Ich habe gerade festgestellt, dass die CuX-Adresse bei der ganzen Kopiererei falsch war und habe das korrigiert!

Jetzt kommen die Mails:
mit TCL : -> ohne Text
ohne TCL: -> mit dem Text " Systemprotokoll: $sysprot"

LG
66er
Ich übernehme keine Haftung für von mir gegebene Antworten, Tipps und veröffentlichte Projekte! Jeder ist für sich selbst verantwortlich! Arbeiten an 230V sind von einer Elektrofachkraft auszuführen!

Homematic in Betrieb seit 15.08.2015, > 60 HM-Komp. | 3x USV APC ES400 | Visualisierung auf ioBroker | Audio: Home24-Apps

Raspberrymatic auf DS923+ in VMM (Produktivsystem1)
Rollläden, SSD, Wetter, Logging, Licht, RM, Sonos, Shelly

Raspberrymatic auf DS923+ in VMM (Produktivsystem2 )
Erweiterung GMA, Heizung, Licht, Shelly, SSD, Sonos

>100 Shelly-Geräte an Homematic | CCU2 endgültig in Rente | 3 Raspis als Rückfallebene für Raspimatic und ioBroker

Shelly an Homematic | Infrarot-Heizungssteuerung | Fensteröffnungszeit überwachen

Antworten

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