Systemprotokoll als E-Mail versenden

diverse Zusatzsoftware

Moderator: Co-Administratoren

dondaik
Beiträge: 12925
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1599 Mal
Danksagung erhalten: 222 Mal

Re: Systemprotokoll als E-Mail versenden

Beitrag von dondaik » 03.01.2013, 11:01

einfach mal etwas zurückblättern ... :-)
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

chrimu
Beiträge: 119
Registriert: 18.08.2012, 17:10
System: CCU
Hat sich bedankt: 4 Mal
Danksagung erhalten: 5 Mal

Re: Systemprotokoll als E-Mail versenden

Beitrag von chrimu » 03.01.2013, 11:46

Schon gesehen; Da scheint aber noch irgendwas mit der max. Zeichenanzahl noch nicht ganz zu passen, oder hab ich da was missverstanden?

Gruss, C.

dondaik
Beiträge: 12925
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1599 Mal
Danksagung erhalten: 222 Mal

Re: Systemprotokoll als E-Mail versenden

Beitrag von dondaik » 03.01.2013, 11:49

einfach testen, ich brauche so was nicht:-)
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

Sunti
Beiträge: 449
Registriert: 10.12.2011, 17:56
Danksagung erhalten: 3 Mal

Re: Systemprotokoll als E-Mail versenden

Beitrag von Sunti » 05.01.2013, 07:29

chrimu hat geschrieben:Servus,

Das hat etwa einen Monat lang perfekt funktioniert (täglicher Versand). Dann habe ich einen Schaltaktor abgelernt (war Reserve, und generierte daher im abgesteckten Zustand Systemmeldungen), und daraufhin kamen prompt zur Versendezeit die minütlichen XmlClientError Fehler und haben die CCU lahmgelegt.
Oh Oh - habe eben genau das "Gleiche" gemacht - dann weiß ich ja warum morgen früh die gelbe Lampe an ist - melde mich - Greets SunTi

chrimu
Beiträge: 119
Registriert: 18.08.2012, 17:10
System: CCU
Hat sich bedankt: 4 Mal
Danksagung erhalten: 5 Mal

Re: Systemprotokoll als E-Mail versenden

Beitrag von chrimu » 06.01.2013, 12:44

Servus,

So, nächter Schritt: Hab den Email-Versand auf CUxD umgestellt, und siehe da, auch bei meinen mini-Reports kommt der "corrupt binrpc data" Fehler. Hat das von Euch Mitstreitern jemand in den Griff bekommen?

Schönen Sonntag,
Gruss, C.

MaxWrestler
Beiträge: 237
Registriert: 11.12.2011, 12:19
Danksagung erhalten: 1 Mal

Re: Systemprotokoll als E-Mail versenden

Beitrag von MaxWrestler » 06.01.2013, 17:33

Hallo chrimu,
das Auslesen des Systemprotokolls ist sehr ressourcenhungrig und bringt die ReGaHss leicht aus dem tritt.

Nichtsdestotrotz hier ein 2. Versuch.
Diesmal erfolgt der Aufruf des E-Mail Addons mit CUxD !
2. das Systemprotokoll wird über eine Trägervariable an das E-Mail Addon übergeben.
3. der Call Aufruf > Call("/esp/functions.fn::WriteDPText()"); < vom ersten Script
wurde durch die entprechenden Codezeilen ersetzt, dadurch ist das neue Script jetzt größer.

Vorbereitung:
CUxD muss installiert sein, und ein Gerät vom Typ (28) System_EXEC muss angelegt sein.
http://www.homematic-inside.de/software ... cuxd-addon

Wichtig:
Eine Systemvariable vom Typ Zeichenkette mit Namen Systemprotokoll anlegen.

1. Wie im 1. Beitrag
2. Wie im 1. Beitrag
3. Im Bereich TCL diesen Text einfügen:

Code: Alles auswählen

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)]
4. Wie im 1. Beitrag
...
..
Im oberen Teil des Scriptes gibt man die gewünschte id der Mail ein ( 01 - 10 )
string mail_id = "08";

Im unteren Teil des Scriptes ersetzt man die Adresse des CUxD durch seine eigene:

Code: Alles auswählen

! 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 # "'");

Good luck ! :D
Systemprotokoll als E-Mail versenden V2x.txt
Als Datei fürs Archiv
(9.21 KiB) 252-mal heruntergeladen

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.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();

chrimu
Beiträge: 119
Registriert: 18.08.2012, 17:10
System: CCU
Hat sich bedankt: 4 Mal
Danksagung erhalten: 5 Mal

Re: Systemprotokoll als E-Mail versenden

Beitrag von chrimu » 07.01.2013, 16:02

Tausend Dank! Das probier ich sobald ich wieder dort bin.

Servus, C.

chrimu
Beiträge: 119
Registriert: 18.08.2012, 17:10
System: CCU
Hat sich bedankt: 4 Mal
Danksagung erhalten: 5 Mal

Re: Systemprotokoll als E-Mail versenden

Beitrag von chrimu » 10.01.2013, 08:49

Ich habs dann -zwei Tage her- doch schon über VPN installiert: Läuft "like a charm"; Danke vielmals! In Zusammenarbeit mit dem Skript "Systemmeldungen zu Protokoll" ergibt das eine tägliche Zustandsmeldung mit allen wichtigen Infos. Keinerlei Fehlermeldungen; Kann man nur empfehlen!!!

Gruss, C.

saxbav
Beiträge: 112
Registriert: 01.08.2012, 15:17

Re: Systemprotokoll als E-Mail versenden

Beitrag von saxbav » 24.01.2013, 09:42

Im unteren Teil des Scriptes ersetzt man die Adresse des CUxD durch seine eigene:

Code: Alles auswählen
! 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 # "'");

Good luck ! :D
Wo finde ich diese :?:
Habe alles CUXD Logs durchgeschaut.

grüße saxbav
Homematic System Stand[03.12.2019]
RaspberryMatic PI 3 , ioBroker PI 3 , ca 40 HM Geräte
2x Wemos d1 mini , 2 x Raspberry Octoprint , Shelly ...
-------------------------------
1x HM-CCU-1 schwarz ... in Rente

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

Re: Systemprotokoll als E-Mail versenden

Beitrag von alchy » 24.01.2013, 09:58

Hast Du das Gerät auch in CUxD angelegt ? CUxD Gerätetyp: (28) System Funktion: exec

dann erhältst Du die Nummer unter Geräte. http://IP DER CCU/addons/cuxd/index.ccc?m=4

z.B. CUxD.CUX2801001:1.CMD_EXEC
Natürlich findest Du die auch in der WebUI Startseite > Einstellungen > Geräteliste..

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.

Antworten

Zurück zu „Sonstige Addons“