[canceled] "Backup einzelner Programme" - Skript

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

Moderator: Co-Administratoren

MrPepper
Beiträge: 28
Registriert: 24.02.2013, 18:57

Re: "Backup einzelner Programme" - Skript

Beitrag von MrPepper » 03.10.2016, 10:27

Bei meinem Restorescript wird keine Meldung "Vorgang beendet." ausgegeben. das Script hat aber ein Programm erzeugt.
Ist es dadurch ggf. unvollständig?
71 Kanäle in 55 Geräten:
1x HM-Sec-SFA-SM, 2x HM-Sen-MDIR-O, 4x HM-Sec-MDIR, 4x HM-LC-Dim1TPBU-FM, 1x HMW-WSTH-SM, 12x HM-Sec-SC, 2x HM-OU-CFM-Pl, 2x HM-PB-2-WM55, 1x HM-Dis-TD-T, 1x HM-LC-Sw1PBU-FM, 18x HM-LC-Bl1PBU-FM, 1x HM-LC-Sw1-Pl-2, 2x HM-WDS40-TH-I, 1x HM-RC-19, 1x HM-WDS100-C6-O, 1x HM-CCU-1 (Backup) 1x CCU-2 auf RP3 (YAHM)

MrPepper
Beiträge: 28
Registriert: 24.02.2013, 18:57

Re: "Backup einzelner Programme" - Skript

Beitrag von MrPepper » 03.10.2016, 16:31

MrPepper hat geschrieben:Bei meinem Restorescript wird keine Meldung "Vorgang beendet." ausgegeben. das Script hat aber ein Programm erzeugt.
Ist es dadurch ggf. unvollständig?
Bei einem anderen Script kam die Meldung!
Jetzt habe ich zwei mit, und ein 5 Scripts ohne Abschlussmeldung.

Brauchst du ein Beispiel?
71 Kanäle in 55 Geräten:
1x HM-Sec-SFA-SM, 2x HM-Sen-MDIR-O, 4x HM-Sec-MDIR, 4x HM-LC-Dim1TPBU-FM, 1x HMW-WSTH-SM, 12x HM-Sec-SC, 2x HM-OU-CFM-Pl, 2x HM-PB-2-WM55, 1x HM-Dis-TD-T, 1x HM-LC-Sw1PBU-FM, 18x HM-LC-Bl1PBU-FM, 1x HM-LC-Sw1-Pl-2, 2x HM-WDS40-TH-I, 1x HM-RC-19, 1x HM-WDS100-C6-O, 1x HM-CCU-1 (Backup) 1x CCU-2 auf RP3 (YAHM)

BadenPower

Re:

Beitrag von BadenPower » 04.10.2016, 10:50

MrPepper hat geschrieben:Brauchst du ein Beispiel?
Ein Beispiel wäre sehr nützlich.

Ein Screenshot des Programmes und das erzeugte Restoreskript wären nicht schlecht.
Falls die betroffenen Programme ein Skript enthalten, bitte auch dieses in der verwendeten Version mitposten.

.

MrPepper
Beiträge: 28
Registriert: 24.02.2013, 18:57

Re: "Backup einzelner Programme" - Skript

Beitrag von MrPepper » 04.10.2016, 18:33

Hier ein RestoreScript ohne Rückmeldung:

Code: Alles auswählen

!Restore-Skript: Programm - PRG_SYS_TageszeitErmitteln
!Erstellt durch - Backup-Restore Version 0.0.0 preVersion
!Erstellt am - 03.10.2016 10:21:03

string lResPrgName = "restore_PRG_SYS_TageszeitErmitteln";


!------------------------------------------------------
string lDestText1 = "! V1.1
! 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

var alteTageszeit = dom.GetObject(\"VAR_SYS_Tageszeit\").State();

real c_zeit = (0.01 * system.Date(\"%M\").ToInteger()) + system.Date(\"%H\").ToInteger();
real c_tagesbeginn = (0.01 * system.SunriseTime(\"%M\").ToInteger()) + system.SunriseTime(\"%H\").ToInteger();
real c_tagesende = (0.01 * system.SunsetTime(\"%M\").ToInteger()) + system.SunsetTime(\"%H\").ToInteger();
real c_mittag = 13.00; ! Mittagszeit

integer v_tageszeit = 0; ! Nacht

if (c_zeit < c_tagesende + 2) {
    v_tageszeit = 7; ! Abend
}

if (c_zeit < c_tagesende + 1) {
    v_tageszeit = 6; ! Abenddaemmerung
}

if (c_zeit < c_tagesende) {
    v_tageszeit = 5; ! Nachmittag
}

if (c_zeit < c_mittag + 1) {
    v_tageszeit = 4; ! Mittag
}

if (c_zeit < c_mittag - 1) {
    v_tageszeit = 3; ! Vormittag
}

if (c_zeit < c_tagesbeginn) {
    v_tageszeit = 2; ! Morgengrauen
}

if (c_zeit < c_tagesbeginn - 1) {
    v_tageszeit = 1; ! fruemorgens;
}

if (c_zeit < c_tagesbeginn - 2) {
    v_tageszeit = 0; ! Nacht
}

WriteLine(alteTageszeit);
WriteLine(v_tageszeit);

! Variable neu beschreiben. ABER nur wenn sich der Wert nicht geändert hat
if (alteTageszeit <> v_tageszeit) {
  	dom.GetObject(\"VAR_SYS_Tageszeit\").State(v_tageszeit);
}";
string lEnum1 = "";
string lEnum2 = "";
string lEnum3 = "";
integer lNum1 = 0;
integer lNum2 = 0;
integer lNum3 = 0;
boolean lBool1 = false;
string lStr1 = "";
string lTab = "\t";
object lPrograms = dom.GetObject(ID_PROGRAMS);
object lProg = lPrograms.Get(lResPrgName);
object lRule;
object lCond;
object lSCond;
object lDest;
object lAction;
object lTimeModule;
integer lCurCondInfoPos = -1;
integer lCurCondPos = -1;
integer lCurDestPos = -1;
string lRuleInfo = "";
string lCondInfo = "";
string lTimerInfo = "";
string lResRSCLeftVal = "";
string lResRSCConditionChannel = "";
string lResRSDDestinationChannel = "";
string lResRSDDestinationDP = "";
string lResRSDDestinationValue = "";
integer lResRulesCount = 1;
string lResRulesInfo = "1,2,true,1,1,true,NOSUB";
string lResCondInfo = "C,0,2,1;S,0,1,-1";
string lCurRSCID = "7029";
string lResRSCOperatorType = "1";
string lResRSCConditionType = "1";
string lResRSCConditionType2 = "13";
string lResRSCLeftValType = "18";
string lCurRSCLeftVal = "1964";
string lResRSCRightVal1ValType = "2";
string lResRSCRightVal1 = "true";
string lResRSCRightVal2ValType = "2";
string lResRSCRightVal2 = "false";
string lCurRSCConditionChannel = "1961";
string lResRSDDestinationParam = "20";
string lCurRSDDestinationChannel = "65535";
string lCurRSDDestinationDP = "65535";
string lResRSDDestinationValueType = "20";
string lCurRSDDestinationValue = "DestText1";
string lResRSDDestinationValueParamType = "0";
string lResRSDDestinationValueParam = "";
string lChkRSDDestinationChannelName = "";
string lChkRSDDestinationDPName = "";
string lChkRSDDestinationValueName = "";
if(lProg){WriteLine("Vorgang abgebrochen: Programm mit diesem Namen besteht bereits."); quit;}
lResRSDDestinationChannel = lCurRSDDestinationChannel;
lResRSDDestinationDP = lCurRSDDestinationDP;
lResRSDDestinationValue = lCurRSDDestinationValue;
lResRSCLeftVal = lCurRSCLeftVal;
lResRSCConditionChannel = lCurRSCConditionChannel;
if(lBool1){quit;}
lProg = dom.CreateObject(OT_PROGRAM,lResPrgName);
if(lProg == null){WriteLine("Vorgang abgebrochen: Programm konnte nicht angelegt werden."); quit;}
lProg.Active(false);
lProg.Internal(false);
lPrograms.Add(lProg.ID());
if(lResRulesCount > 0)
{
  lRule = lProg.Rule();
  foreach(lEnum1, system.GenerateEnum(1,lResRulesCount))
  {
    lRuleInfo = lResRulesInfo.StrValueByIndex(";",(lEnum1.ToInteger() - 1));
    if((lRuleInfo <> "") && (lRuleInfo.StrValueByIndex(",",0) == lEnum1))
    {
      lRule.RuleOperatorType((lRuleInfo.StrValueByIndex(",",1)).ToInteger());
      lRule.ElseIfFlag((lRuleInfo.StrValueByIndex(",",2) == "true"));
      lNum1 = (lRuleInfo.StrValueByIndex(",",3)).ToInteger();
      if(lNum1 > 0)
      {
        foreach(lEnum2, system.GenerateEnum(1,lNum1))
        {
          lCurCondInfoPos = lCurCondInfoPos + 1;
          lCondInfo = lResCondInfo.StrValueByIndex(";",lCurCondInfoPos);
          lCond = lRule.RuleAddCondition();
          lCond.CndOperatorType((lCondInfo.StrValueByIndex(",",2)).ToInteger());
          lNum2 = (lCondInfo.StrValueByIndex(",",3)).ToInteger();
          if(lNum2 > 0)
          {
            foreach(lEnum3, system.GenerateEnum(1,lNum2))
            {
              lCurCondPos = lCurCondPos + 1;
              lCurCondInfoPos = lCurCondInfoPos + 1;
              lCondInfo = lResCondInfo.StrValueByIndex(";",lCurCondInfoPos);
              lSCond = lCond.CndAddSingle();
              lSCond.OperatorType((lCondInfo.StrValueByIndex(",",2)).ToInteger());
              lSCond.ConditionType(  (lResRSCConditionType.StrValueByIndex(";",lCurCondPos)).ToInteger());
              lSCond.ConditionType2( (lResRSCConditionType2.StrValueByIndex(";",lCurCondPos)).ToInteger());
              lSCond.LeftValType((lResRSCLeftValType.StrValueByIndex(";",lCurCondPos)).ToInteger());
              if(lSCond.LeftValType() <> ivtCurrentDate)
              {
                lSCond.LeftVal((lResRSCLeftVal.StrValueByIndex(";",lCurCondPos)).ToInteger());
              }
              lSCond.RightVal1ValType((lResRSCRightVal1ValType.StrValueByIndex(";",lCurCondPos)).ToInteger());
              if(lSCond.LeftValType() == ivtCurrentDate)
              {
                lTimerInfo = lResRSCRightVal1.StrValueByIndex(";",lCurCondPos);
                lTimeModule = dom.CreateObject(OT_CALENDARDP);
                dom.GetObject(ID_CALENDARDPS).Add(lTimeModule);
                lTimeModule.TimerType((lTimerInfo.StrValueByIndex(",",0)).ToInteger());
                lTimeModule.Time(lTimerInfo.StrValueByIndex(",",1));
                lTimeModule.CalDuration((lTimerInfo.StrValueByIndex(",",2)).ToInteger());
                lTimeModule.CalRepeatTime(lTimerInfo.StrValueByIndex(",",3));
                lTimeModule.Weekdays((lTimerInfo.StrValueByIndex(",",4)).ToInteger());
                lTimeModule.Period((lTimerInfo.StrValueByIndex(",",5)).ToInteger());
                lTimeModule.Begin(lTimerInfo.StrValueByIndex(",",6));
                lTimeModule.End(lTimerInfo.StrValueByIndex(",",7));
                lTimeModule.CalRepetitionCount((lTimerInfo.StrValueByIndex(",",9)).ToInteger());
                lTimeModule.SunOffsetType((lTimerInfo.StrValueByIndex(",",10)).ToInteger());
                lSCond.RightVal1(lTimeModule.ID());
              }
              else
              {
                if(lSCond.RightVal1ValType() == ivtString)
                {
                  lStr1 = lResRSCRightVal1.StrValueByIndex(";",lCurCondPos);
                }
                else{lSCond.RightVal1(lResRSCRightVal1.StrValueByIndex(";",lCurCondPos));}
                lSCond.RightVal2ValType((lResRSCRightVal2ValType.StrValueByIndex(";",lCurCondPos)).ToInteger());
                if(lSCond.RightVal2ValType() == ivtString)
                {
                  lStr1 = lResRSCRightVal2.StrValueByIndex(";",lCurCondPos);
                }
                else{lSCond.RightVal2(lResRSCRightVal1.StrValueByIndex(";",lCurCondPos));}
                lSCond.ConditionChannel((lResRSCConditionChannel.StrValueByIndex(";",lCurCondPos)).ToInteger());
              }
            }
          }
        }
      }
      lDest = lRule.RuleDestination();
      lDest.BreakOnRestart((lRuleInfo.StrValueByIndex(",",5) == "true"));
      lNum1 = (lRuleInfo.StrValueByIndex(",",4)).ToInteger();
      if(lNum1 > 0)
      {
        foreach(lEnum2, system.GenerateEnum(1,lNum1))
        {
          lCurDestPos = lCurDestPos + 1;
          lAction = lDest.DestAddSingle();
          lAction.DestinationParam((lResRSDDestinationParam.StrValueByIndex(";",lCurDestPos)).ToInteger());
          lAction.DestinationChannel((lResRSDDestinationChannel.StrValueByIndex(";",lCurDestPos)).ToInteger());
          lAction.DestinationDP((lResRSDDestinationDP.StrValueByIndex(";",lCurDestPos)).ToInteger());
          lAction.DestinationValueType((lResRSDDestinationValueType.StrValueByIndex(";",lCurDestPos)).ToInteger());
          if(lAction.DestinationValueType() == ivtString)
          {
            lStr1 = lResRSDDestinationValue.StrValueByIndex(";",lCurDestPos);
            if(lStr1 == "DestText1"){lAction.DestinationValue(lDestText1);}
          }
          else{lAction.DestinationValue(lResRSDDestinationValue.StrValueByIndex(";",lCurDestPos));}
          lAction.DestinationValueParamType((lResRSDDestinationValueParamType.StrValueByIndex(";",lCurDestPos)).ToInteger());
          lAction.DestinationValueParam(lResRSDDestinationValueParam.StrValueByIndex(";",lCurDestPos));
        }
      }
      if(lRule.ElseIfFlag()){lRule = lRule.RuleCreateSubRule();}
    }
  }
}
lProg.Active(true);
dom.RTUpdate(0);
WriteLine("Vorgang beendet.");
!Ende Restore-Skript: Programm - PRG_SYS_TageszeitErmitteln

Und hier der Screenshot:
Dateianhänge
Bildschirmfoto 2016-10-04 um 18.32.38.png
Screenshot
71 Kanäle in 55 Geräten:
1x HM-Sec-SFA-SM, 2x HM-Sen-MDIR-O, 4x HM-Sec-MDIR, 4x HM-LC-Dim1TPBU-FM, 1x HMW-WSTH-SM, 12x HM-Sec-SC, 2x HM-OU-CFM-Pl, 2x HM-PB-2-WM55, 1x HM-Dis-TD-T, 1x HM-LC-Sw1PBU-FM, 18x HM-LC-Bl1PBU-FM, 1x HM-LC-Sw1-Pl-2, 2x HM-WDS40-TH-I, 1x HM-RC-19, 1x HM-WDS100-C6-O, 1x HM-CCU-1 (Backup) 1x CCU-2 auf RP3 (YAHM)

MrPepper
Beiträge: 28
Registriert: 24.02.2013, 18:57

Re: "Backup einzelner Programme" - Skript

Beitrag von MrPepper » 18.10.2016, 18:54

MrPepper hat geschrieben:Hier ein RestoreScript ohne Rückmeldung:
Und? Hilft das? Oder hast Du keine Zeit dazu.
Wäre schön, wenn du das Problem in der V0.0.1 fixen kannst. UND das speichern der Beschreibung ergänzen. :D

Ansonsten muss ich mich wohl selbst mal in Dein Script einarbeiten. :shock:
71 Kanäle in 55 Geräten:
1x HM-Sec-SFA-SM, 2x HM-Sen-MDIR-O, 4x HM-Sec-MDIR, 4x HM-LC-Dim1TPBU-FM, 1x HMW-WSTH-SM, 12x HM-Sec-SC, 2x HM-OU-CFM-Pl, 2x HM-PB-2-WM55, 1x HM-Dis-TD-T, 1x HM-LC-Sw1PBU-FM, 18x HM-LC-Bl1PBU-FM, 1x HM-LC-Sw1-Pl-2, 2x HM-WDS40-TH-I, 1x HM-RC-19, 1x HM-WDS100-C6-O, 1x HM-CCU-1 (Backup) 1x CCU-2 auf RP3 (YAHM)

BadenPower

Re: "Backup einzelner Programme" - Skript

Beitrag von BadenPower » 18.10.2016, 20:08

MrPepper hat geschrieben:Und? Hilft das?
Das hilft schon sehr, aber ich konnte das auslösende Fragment noch nicht lokalisieren.
MrPepper hat geschrieben:Oder hast Du keine Zeit dazu.
Leider ist das momentan das Problem und die entgültige Version 1.0.0, welche auch dann tatsächlich mit den Namen statt IDs funktioniert, ist noch nicht einmal in einem alpha-Stadium.

Gerti
Beiträge: 3029
Registriert: 28.01.2016, 18:06
System: CCU
Wohnort: Hürth
Hat sich bedankt: 16 Mal
Danksagung erhalten: 270 Mal

Re: "Backup einzelner Programme" - Skript

Beitrag von Gerti » 27.10.2016, 06:12

Hi!

Habe mit Deinem Script gut 140 Programme gesichert und wiederhergestellt.
War also meine Rettung in einer schwierigen Situation. Bei mir war der Aufbau der Programmdatei irgendwie beschädigt und das letzte Backup ohne Fehler lag schon zwei Monate zurück, in denen ich fast alle Programme geändert hatte.

Bei einigen gab es bei der Wiederherstellung das Problem, dass keine Abschlussmeldung kam, diese waren aber trotzdem vollständig angelegt.
Wenn das Programm ein Script mit backslash enthält, wird dieser beim Wiederherstellen nicht korrekt wiederhergestellt.
Ich kann Dir gerne meine Backupscripte zur Verfügung stellen.
Wenn Du Interesse hast, gib mir bitte Deine Email Adresse per PN.

Viele Grüße
Gerti

BadenPower

Re: "Backup einzelner Programme" - Skript

Beitrag von BadenPower » 27.10.2016, 10:09

Gerti hat geschrieben:Wenn das Programm ein Script mit backslash enthält, wird dieser beim Wiederherstellen nicht korrekt wiederhergestellt.
Danke, dass kann gut sein, denn den Backslash habe ich möglicherweise vergessen zu quoten.
Schau ich mir aus alle Fälle an.
Ich glaube aber, dass die stablie Version 1 ein Weihnachtsgeschenk wird.
.

Benutzeravatar
Centauri2k
Beiträge: 684
Registriert: 17.09.2016, 21:13

Re: "Backup einzelner Programme" - Skript

Beitrag von Centauri2k » 16.12.2016, 15:39

Hallo, erst mal Danke für das Script. Kann man es schon problemlos benutzen? Ich müsste mir ein Programm sichern.

Danke

BadenPower

Re: "Backup einzelner Programme" - Skript

Beitrag von BadenPower » 16.12.2016, 15:45

Stanni hat geschrieben:Kann man es schon problemlos benutzen?
Jain.

Das Sichern und Zurückspielen von Programmen funktioniert.

Allerdings gibt es noch eine Einschränkung. Die Programme können nur wieder eingepielt werden, wenn sich die IDs der im Programm verwendeten Datenpunkte nicht geändert hat.

.

Gesperrt

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