Wecker mit der CCU und Neo, Zeiten aus Neo einstellbar

Haussteuerung mittels mediola

Moderator: Co-Administratoren

Antworten
33zdenko
Beiträge: 343
Registriert: 21.12.2013, 16:50
Danksagung erhalten: 4 Mal

Wecker mit der CCU und Neo, Zeiten aus Neo einstellbar

Beitrag von 33zdenko » 08.03.2016, 16:48

Hallo
Hier hat der User Elektromann nach einer möglichkeit gefragt, die schaltzeiten über neo zu ändern und danach die programme auf der ccu zu steuern.
http://homematic-forum.de/forum/viewtop ... 35&t=28797
Ich hatte ihm paar ideen zugeworfen, leider konnte er damit nichts anfangen... :)
Kompliziert ist es nicht, ich habe es jetzt einfach mit paar variablen und paar programmen auf der ccu gelöst, wenn etwas mehr zeit habe versuche ich, es noch mit
einem webserver und einem timepicker aus neo, als webseiten element.

Also der weg mit ccu und neo und drei zeiten welche man aus neo einstellen kann:
Zuerst brauchen wir diese variablen:
Weckzeit - typ zeichenkette, anlegen auf der ccu
WeckerNr - typ werteliste , so anlegen: Wecker 1;Wecker 2;Wecker 3
TriggerWecker -typ werteliste, so anlegen: 09:00:00;13:15:00;18:21:00 - Sekunden werden wir nicht im neo einstellen, so die sekunden immer auf 00 setzen.
Stunden - typ boolean (true/false)
Minuten - typ boolean (true/false)

Hier habe ich eine lösung zum wecker stellen gefunden und das script dafür benutzt, das script läuft einmal am tag, und liest die eingestellten zeiten...
http://homematic-forum.de/forum/viewtop ... 65#p268625

Wir machen erst einmal alles im neo um die zeiten ändern zu können:
ich habe es so bei mir im testlauf angelegt, wie in diesem bild:
Bildschirmfoto 2016-03-08 um 15.26.18.png
Die blauen dinger sind buttons, die pfeile hoch und runter auch
bevor wir weiter machen, alle angelegten variablen jetzt in neo importieren von der ccu!!!

Oben textfeld Wecker auswählen, kein status (text nach wahl :) )
die drei bleuen buttons mit textfeldern 1,2,3 drüber anlegen
dem ersten button 1 weisen wir aktion zu so:
Bildschirmfoto 2016-03-08 um 15.33.45.png
also der variable- WeckerNr den wert 0 - das ist die erste zeit in der TriggerWecker variable.
zweiter button gleich wie oben nur setze wert auf 1, dritter button, wert auf 2.
dadrunter befindet sich ein textfeld, ausgewählt? in blauer farbe, es ist ein textfeld mit dem präfix "ausgewählt: "
dieses textfeld erhält diesen status:
Bildschirmfoto 2016-03-08 um 15.40.56.png
jetzt können wir schon testen ob das funktioniert:
in vorschau die buttons 1,2,3 klicken und das textfeld ausgewählt musste jetzt zeigen Wecker 1, 2, 3

jetzt die vier buttons anlegen 2 hoch, 2 runter
dem button hoch bei stunden weisen wir diese aktion:
Bildschirmfoto 2016-03-08 um 15.46.44.png
also die variable Stunden schalten wir auf true/wahr
dem button runter bei stunden weisen wir aktion für variable Stunden, off (false/falsch)

Genauso gehen wir für die beiden button für minuten vor:
Button hoch variable Minuten on, Button runter variable Minuten off.

Das rote textfeld ? bekommt diesen status:
Bildschirmfoto 2016-03-08 um 15.52.22.png
diese zeit wird sich beim drücken der buttons für stunden und minuten, verändern, und wird für jeden wecker angezeigt:
dafür legen wir ein programm mit dem namen WeckerAuswahl, so:
Bildschirmfoto 2016-03-08 um 15.56.36.png
in dem dann teil dieses script

Code: Alles auswählen

var weckerAktiv = dom.GetObject("WeckerNr").Value();
var x = dom.GetObject("TriggerWecker").Value();
var y = dom.GetObject("TriggerWecker").ValueList();

if (weckerAktiv == 0)
{

var Zeit1 = y.StrValueByIndex(";",1);
var Zeit2 = y.StrValueByIndex(";",2);
var Stunden = y.StrValueByIndex(";",0).Substr(0,2).ToInteger();
var Minuten = y.StrValueByIndex(";",0).Substr(3,2);
var Sekunden = "00";
dom.GetObject("Weckzeit").State((Stunden).ToString() + ":" + Minuten + ":" + Sekunden);
}
if (weckerAktiv == 1)
{

var Zeit0 = y.StrValueByIndex(";",0);
var Zeit2 = y.StrValueByIndex(";",2);
var Stunden = y.StrValueByIndex(";",1).Substr(0,2).ToInteger();
var Minuten = y.StrValueByIndex(";",1).Substr(3,2);
var Sekunden = "00";
dom.GetObject("Weckzeit").State((Stunden).ToString() + ":" + Minuten + ":" + Sekunden);
}
if (weckerAktiv == 2)
{

var Zeit0 = y.StrValueByIndex(";",0);
var Zeit1 = y.StrValueByIndex(";",1);
var Stunden = y.StrValueByIndex(";",2).Substr(0,2).ToInteger();
var Minuten = y.StrValueByIndex(";",2).Substr(3,2);
var Sekunden = "00";
dom.GetObject("Weckzeit").State((Stunden).ToString() + ":" + Minuten + ":" + Sekunden);
}
mit ok das programm speichern und im neo vorschau starten, und die buttons für wecker 1,2,3 klicken
jetzt sollte für jeden wecker die eingestellte zeit im roten textfeld erscheinen.

Jetzt machen wir ein programm auf der ccu um die stunden hoch und runter zu zählen:
Name z.b. StundenPlusMinus
Bildschirmfoto 2016-03-08 um 16.01.36.png
bei aktivität dann das script einfügen:

Code: Alles auswählen

var weckerAktiv = dom.GetObject("WeckerNr").Value();
var x = dom.GetObject("TriggerWecker").Value();
var y = dom.GetObject("TriggerWecker").ValueList();


if (weckerAktiv == 0)
{

var Zeit1 = y.StrValueByIndex(";",1);
var Zeit2 = y.StrValueByIndex(";",2);
var Stunden = y.StrValueByIndex(";",0).Substr(0,2).ToInteger();
var Minuten = y.StrValueByIndex(";",0).Substr(3,2);
var Sekunden = "00";

Stunden = Stunden + 1;
if (Stunden > 23)
{
Stunden = 0;
}

if (Stunden <= 9)
{
string Zeit0 = "0" + Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

}
else
{
string Zeit0 = Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

}
dom.GetObject("Weckzeit").State(Zeit0);

dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";"+ Zeit1 + ";" + Zeit2);
}

if (weckerAktiv == 1)
{

var Zeit0 = y.StrValueByIndex(";",0);
var Zeit2 = y.StrValueByIndex(";",2);
var Stunden = y.StrValueByIndex(";",1).Substr(0,2).ToInteger();
var Minuten = y.StrValueByIndex(";",1).Substr(3,2);
var Sekunden = "00";

Stunden = Stunden + 1;
if (Stunden > 23)
{
Stunden = 0;
}

if (Stunden <= 9)
{
string Zeit1 = "0" + Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

}
else
{
string Zeit1 = Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

}
dom.GetObject("Weckzeit").State(Zeit1);

dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";"+ Zeit1 + ";" + Zeit2);


}
if (weckerAktiv == 2)
{

var Zeit0 = y.StrValueByIndex(";",0);
var Zeit1 = y.StrValueByIndex(";",1);
var Stunden = y.StrValueByIndex(";",2).Substr(0,2).ToInteger();
var Minuten = y.StrValueByIndex(";",2).Substr(3,2);
var Sekunden = "00";

Stunden = Stunden + 1;
if (Stunden > 23)
{
Stunden = 0;
}

if (Stunden <= 9)
{
string Zeit2 = "0" + Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

}
else
{
string Zeit2 = Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

}
dom.GetObject("Weckzeit").State(Zeit2);

dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";"+ Zeit1 + ";" + Zeit2);
}
bei aktivität sonst dieses script:

Code: Alles auswählen

var weckerAktiv = dom.GetObject("WeckerNr").Value();
var x = dom.GetObject("TriggerWecker").Value();
var y = dom.GetObject("TriggerWecker").ValueList();



if (weckerAktiv == 0)
{

var Zeit1 = y.StrValueByIndex(";",1);
var Zeit2 = y.StrValueByIndex(";",2);
var Stunden = y.StrValueByIndex(";",0).Substr(0,2).ToInteger();
var Minuten = y.StrValueByIndex(";",0).Substr(3,2);
var Sekunden = "00";

Stunden = Stunden - 1;
if (Stunden < 0)
{
Stunden = 23;
}

if (Stunden <= 9)
{
string Zeit0 = "0" + Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

}
else
{
string Zeit0 = Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

}
dom.GetObject("Weckzeit").State(Zeit0);
dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";"+ Zeit1 + ";" + Zeit2);

}

if (weckerAktiv == 1)
{

var Zeit0 = y.StrValueByIndex(";",0);
var Zeit2 = y.StrValueByIndex(";",2);
var Stunden = y.StrValueByIndex(";",1).Substr(0,2).ToInteger();
var Minuten = y.StrValueByIndex(";",1).Substr(3,2);
var Sekunden = "00";

Stunden = Stunden - 1;
if (Stunden < 0)
{
Stunden = 23;
}

if (Stunden <= 9)
{
string Zeit1 = "0" + Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

}
else
{
string Zeit1 = Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

}
dom.GetObject("Weckzeit").State(Zeit1);
dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";"+ Zeit1 + ";" + Zeit2);


}
if (weckerAktiv == 2)
{

var Zeit0 = y.StrValueByIndex(";",0);
var Zeit1 = y.StrValueByIndex(";",1);
var Stunden = y.StrValueByIndex(";",2).Substr(0,2).ToInteger();
var Minuten = y.StrValueByIndex(";",2).Substr(3,2);
var Sekunden = "00";

Stunden = Stunden - 1;
if (Stunden < 0)
{
Stunden = 23;
}

if (Stunden <= 9)
{
string Zeit2 = "0" + Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

}
else
{
string Zeit2 = Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

}
dom.GetObject("Weckzeit").State(Zeit2);
dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";"+ Zeit1 + ";" + Zeit2);
}
speichern und in neo vorschau die buttons für stunden testen, bitte nicht wie ein verückter klicken, denn bei jedem klick wird das programm ausgeführt
und die Stunden werden hoch, bzw. runter gezählt. Gleichzeitig wird die variable TriggerWecker verändert, je nach dem welcher wecker ausgewählt wurde (1,2,3)

wenn das funktioniert dann machen wir noch ein programm für minuten:
Name MinutenPlusMinus
Bildschirmfoto 2016-03-08 um 16.08.17.png
im dann teil dieses script:

Code: Alles auswählen

var weckerAktiv = dom.GetObject("WeckerNr").Value();
var x = dom.GetObject("TriggerWecker").Value();
var y = dom.GetObject("TriggerWecker").ValueList();


if (weckerAktiv == 0)
{

var Zeit1 = y.StrValueByIndex(";",1);
var Zeit2 = y.StrValueByIndex(";",2);
var Stunden = y.StrValueByIndex(";",0).Substr(0,2);
var Minuten = y.StrValueByIndex(";",0).Substr(3,2).ToInteger();
var Sekunden = "00";

Minuten = Minuten + 1;
if (Minuten > 59)
{
Minuten = 0;
}

if (Minuten <= 9)
{
string Zeit0 = Stunden + ":" + "0" + Minuten.ToString() + ":" + Sekunden;

}
else
{
string Zeit0 = Stunden + ":" + Minuten.ToString() + ":" + Sekunden;

}
dom.GetObject("Weckzeit").State(Zeit0);
dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";"+ Zeit1 + ";" + Zeit2);

}

if (weckerAktiv == 1)
{

var Zeit0 = y.StrValueByIndex(";",0);
var Zeit2 = y.StrValueByIndex(";",2);
var Stunden = y.StrValueByIndex(";",1).Substr(0,2);
var Minuten = y.StrValueByIndex(";",1).Substr(3,2).ToInteger();
var Sekunden = "00";

Minuten = Minuten + 1;
if (Minuten > 59)
{
Minuten = 0;
}


if (Minuten <= 9)
{
string Zeit1 = Stunden + ":" + "0" + Minuten.ToString() + ":" + Sekunden;

}
else
{
string Zeit1 = Stunden + ":" + Minuten.ToString() + ":" + Sekunden;

}
dom.GetObject("Weckzeit").State(Zeit1);
dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";"+ Zeit1 + ";" + Zeit2);


}

if (weckerAktiv == 2)
{

var Zeit0 = y.StrValueByIndex(";",0);
var Zeit1 = y.StrValueByIndex(";",1);
var Stunden = y.StrValueByIndex(";",2).Substr(0,2);
var Minuten = y.StrValueByIndex(";",2).Substr(3,2).ToInteger();
var Sekunden = "00";

Minuten = Minuten + 1;
if (Minuten > 59)
{
Minuten = 0;
}


if (Minuten <= 9)
{
string Zeit2 = Stunden + ":" + "0" + Minuten.ToString() + ":" + Sekunden;

}
else
{
string Zeit2 = Stunden + ":" + Minuten.ToString() + ":" + Sekunden;

}

dom.GetObject("Weckzeit").State(Zeit2);
dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";"+ Zeit1 + ";" + Zeit2);
}
im sonst teil dieses:

Code: Alles auswählen

var weckerAktiv = dom.GetObject("WeckerNr").Value();
var x = dom.GetObject("TriggerWecker").Value();
var y = dom.GetObject("TriggerWecker").ValueList();


if (weckerAktiv == 0)
{

var Zeit1 = y.StrValueByIndex(";",1);
var Zeit2 = y.StrValueByIndex(";",2);
var Stunden = y.StrValueByIndex(";",0).Substr(0,2);
var Minuten = y.StrValueByIndex(";",0).Substr(3,2).ToInteger();
var Sekunden = "00";

Minuten = Minuten - 1;
if (Minuten < 0)
{
Minuten = 59;
}

if (Minuten <= 9)
{
string Zeit0 = Stunden + ":" + "0" + Minuten.ToString() + ":" + Sekunden;

}
else
{
string Zeit0 = Stunden + ":" + Minuten.ToString() + ":" + Sekunden;

}
dom.GetObject("Weckzeit").State(Zeit0);
dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";"+ Zeit1 + ";" + Zeit2);

}

if (weckerAktiv == 1)
{

var Zeit0 = y.StrValueByIndex(";",0);
var Zeit2 = y.StrValueByIndex(";",2);
var Stunden = y.StrValueByIndex(";",1).Substr(0,2);
var Minuten = y.StrValueByIndex(";",1).Substr(3,2).ToInteger();
var Sekunden = "00";

Minuten = Minuten - 1;
if (Minuten < 0)
{
Minuten = 59;
}

if (Minuten <= 9)
{
string Zeit1 = Stunden + ":" + "0" + Minuten.ToString() + ":" + Sekunden;

}
else
{
string Zeit1 = Stunden + ":" + Minuten.ToString() + ":" + Sekunden;

}
dom.GetObject("Weckzeit").State(Zeit1);
dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";"+ Zeit1 + ";" + Zeit2);


}

if (weckerAktiv == 2)
{

var Zeit0 = y.StrValueByIndex(";",0);
var Zeit1 = y.StrValueByIndex(";",1);
var Stunden = y.StrValueByIndex(";",2).Substr(0,2);
var Minuten = y.StrValueByIndex(";",2).Substr(3,2).ToInteger();
var Sekunden = "00";

Minuten = Minuten - 1;
if (Minuten < 0)
{
Minuten = 59;
}

if (Minuten <= 9)
{
string Zeit2 = Stunden + ":" + "0" + Minuten.ToString() + ":" + Sekunden;

}
else
{
string Zeit2 = Stunden + ":" + Minuten.ToString() + ":" + Sekunden;

}

dom.GetObject("Weckzeit").State(Zeit2);
dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";"+ Zeit1 + ";" + Zeit2);
}
in der vorschau von neo sollten jetzt auch minuten steuerbar sein...und im roten feld auch erscheinen.
Jetzt kann man schon die eingestellten Zeiten für die Variable TriggerWecker in der ccu sehen, bei jeder änderung in neo
dazu in der ccu webui, bei einstellungen, Systemvariablen schauen ob der wert in neo, dem in der ccu ist.



Wenn es so ist brauchen wir noch das eigentliche script aus dem thread, welches mich auf die ideee mit dem neowecker gebracht hat :)
Also ein programm anlegen mit dem Namen WeckerScript
Bildschirmfoto 2016-03-08 um 16.22.46.png
zeitmodul so einstellen:
Bildschirmfoto 2016-03-08 um 16.22.59.png
im dann teil dieses script:

Code: Alles auswählen

    !Trigger Wecker

    string lTriggerSysVarName = "TriggerWecker";   !Systemvariable vom Typ Werteliste

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

    object lTmpObj1 = null;
    object lTmpObj2 = null;
    object lTmpObj3 = null;
    object lTmpObj4 = null;
    integer liZ1;
    string lSplit1;
    string lTmpList1 = "";
    time lTmpDateTime1;
    time lTmpDateTime2;
    time lDateTime = (system.Date("%F %X")).ToTime();
    integer lSecondsAfterMidnight = (lDateTime.Hour() * 3600) + (lDateTime.Minute() * 60) + lDateTime.Second();

    if (dom.GetObject(lTriggerSysVarName))
    {
      lTmpList1 = dom.GetObject(lTriggerSysVarName).ValueList();

      if (lTmpList1 <> "")
      {
        lTmpObj1 = dom.CreateObject(OT_PROGRAM);
        lTmpObj1.Name("AutoCreateTrigger");
        lTmpObj2 = lTmpObj1.Rule();
        lTmpObj3 = lTmpObj2.RuleDestination();

        liZ1 = 0;
        foreach(lSplit1, lTmpList1.Split(";"))
        {
          lTmpDateTime1 = ("1970-01-02 " # lSplit1).ToTime() - lSecondsAfterMidnight;
          lTmpObj4 = lTmpObj3.DestAddSingle();
          lTmpObj4.DestinationParam(19);
          lTmpObj4.DestinationDP(dom.GetObject(lTriggerSysVarName).ID());
          lTmpObj4.DestinationValueType(16);
          lTmpObj4.DestinationValue(liZ1);
          lTmpObj4.DestinationValueParamType(28);
          lTmpObj4.DestinationValueParam("1970-01-01" # " " # lTmpDateTime1.Format("%H:%M:%S"));
          liZ1 = liZ1 + 1;
        }
        lTmpObj1.ProgramExecute();
        dom.DeleteObject(lTmpObj1.ID());
      }
    }
mit ok das programm abspeichern, es ist noch nicht gestartet und funktioniert noch nicht...
jetzt stellen wir im neo die wecker so nach aktueller zeit des ausprobierens :)
wenn sagen wir jetzt 18:00 Uhr ist stellen wir die wecker auf 1.) 18:10:00, 2.) 18:11:00, 3.) 18.12:00

auf der ccu brauchen wir jetzt ein programm der das schaltet nach den weckerzeiten:
im wenn teil wählen wir die systemvariable TriggerWeckzeit bei und wählen die zeit 18:11:00 also die zweite zeit
im dann teil schalten wir ein licht ein, also gerät, lichtwohnzimmer sofort ein

im sonst wenn teil wählen wir die systemvariable TriggerWeckzeit bei und wählen die zeit 18:12:00 also die dritte zeit.
in der aktivität für sonst wenn schalten wir unseren schalter aus.
programm speichern und jetzt über die webui der ccu das programm WeckerScript manuell starten.
Um die eingestellte zeit sollte jetzt das licht angehen und eine minute später wieder aus.
Mit diesen drei zeiten schalten wir dann jeden tag die geräte/programme...
Wenn man die zeiten in neo ändert muss man dann dieses programm einmal aufrufen mit neo
Das ist der button Weckzeiten setzen, als aktion das programm WeckerScript ausführen.
Bitte beachten wieder alle programme von der ccu in neo zu importieren, bevor man dem button diese aktion zuweisen kann.

Zur verständnis nochmal
Hat man die zeiten jetzt gesetzt und will das morgen nach diesen zeiten geschaltet wird muss man diesen button, Weckzeiten setzen nicht klicken, das programm wird um 00:05 uhr
von der ccu ausgeführt und wird an den eingestellten zeiten, das tun was wir in den programmen wollen/schalten.
Ändert man die zeiten morgens im neo und möchte das heute noch geschaltet wird, muss man nach dem alle zeiten nach wunsch angelegt sind (alle oder einzelnen wecker),
diesen button/programm klicken, dann wird es noch heute und tage danach so ausgeführt, bzw. bis mann wieder manuell die weckzeiten aktualisiert.

Viel Spass beim umsetzen :)

Edit: Wenn man zusätzliche Zeiten für den Wecker haben möchte, trägt man in die TriggerWecker Variable einfach so viele Zeiten wie man möchte ein.
z.b. (09:00:00;13:15:00;18:21:00;16:00:00;11:20:00;21:00:00) jetzt kann man immer die ersten drei aus Neo verändern, die restlichen werden von dem WeckerScript auch verarbeitet...
auf diese kann man dann einfach in Programmen reagieren/schalten...einfach die Variable TriggerWecker im wenn teil auf aktualisierung prüfen, die vierte, fünfte usw. zeit.

Janniman
Beiträge: 212
Registriert: 08.04.2015, 14:29
Wohnort: Seevetal
Hat sich bedankt: 2 Mal

Re: Wecker mit der CCU und Neo, Zeiten aus Neo einstellbar

Beitrag von Janniman » 09.03.2016, 08:58

Hammer!

Tausend Dank, ich werde es am Wochenende mal "nach basteln"... und hoffen das es funktioniert.
Dennoch, die viele Mühe, der Code,... Ich wäre total überfordert!

Liebe Grüße,

Jan

Janniman
Beiträge: 212
Registriert: 08.04.2015, 14:29
Wohnort: Seevetal
Hat sich bedankt: 2 Mal

Re: Wecker mit der CCU und Neo, Zeiten aus Neo einstellbar

Beitrag von Janniman » 14.03.2016, 21:56

Moin zdenko!

Danke noch einmal für die tolle Vorlage, isch 'abe fertisch....

Dennoch stehe ich irgendwie auf dem Schlauch, denn bei mir löst eine Abfrage nach dem TriggerWecker einfach nichts aus.
Capture.jpg
Ich kann mir leider nur vorstellen, ich bin blind... gut, heute seit 4:00 Uhr bin ich auf den Beinen, aber diese Skripts sind ja keine neue Relativitätstheorie. :?
Ich mache einen Fehler, aber welchen? Die "Taste" für den heutigen Tag wurde natürlich gedrückt. Ach ja, warum triggerst du nach dem Wecker 2 und Wecker 3, nicht nach Wecker 1 und einem anderen (2 oder 3), ein Zufall?


MfG,

Jan

33zdenko
Beiträge: 343
Registriert: 21.12.2013, 16:50
Danksagung erhalten: 4 Mal

Re: Wecker mit der CCU und Neo, Zeiten aus Neo einstellbar

Beitrag von 33zdenko » 15.03.2016, 09:34

Janniman hat geschrieben:
Dennoch stehe ich irgendwie auf dem Schlauch, denn bei mir löst eine Abfrage nach dem TriggerWecker einfach nichts aus.
Hallo Jan
Prüfe erstmal, wenn du die zeiten setzst, ob sie richtig in die variable geschreieben werden- TriggerWecker
aus neo
Dann lösche dein test programm wo du sie abfragst, setze jetzt manuell die variable mit den gewünschten zeiten, in webui
führ das programm aus , weckerscript, manuell
und sehe nach ob die zeit,wann die TriggerWecker aktualisiert ist , gleich der ist, wann das programm ausgeführt ist. Musste gleich sein der timestamp.
Jetzt erstelle dein test programm und frage die zeiten ab.
ansonsten lösche die variable TriggerWecker und programm weckerscript und dein test programm und lege sie neu an. Am anfang hatte ich auch das problem, dass nicht ausgelöst wurde.
Die abfrage der 2. ten zeit war ein test, da in dem thread mit dem wecker script, der junge meinte, beim erstem mal wo die variable angelegt wird, ist die erste zeit gleich aktualisiert.
Lese dort nach, wie ich es gelöst hatte.
Also es muss gehen :)

Hampelmann
Beiträge: 3
Registriert: 02.09.2016, 21:55

Re: Wecker mit der CCU und Neo, Zeiten aus Neo einstellbar

Beitrag von Hampelmann » 27.09.2016, 23:11

Hallo 33zdenko,
genau so ein Programm habe ich für meine Rolladensteuerung gesucht, nun habe ich aber ein Problem, da ich mich mit der Script-Programmierung so gar nicht auskenne kann ich die Scripte nicht auf meine Bedürfnisse anpassen, denn ich benötige mindestens 6 frei wählbare Schaltzeiten und nicht nur 3 wie bein diesem Wecker...

Kannst du mir da weiterhelfen?

Gruß Marc

33zdenko
Beiträge: 343
Registriert: 21.12.2013, 16:50
Danksagung erhalten: 4 Mal

Re: Wecker mit der CCU und Neo, Zeiten aus Neo einstellbar

Beitrag von 33zdenko » 30.09.2016, 18:27

Hallo
Hampelmann hat geschrieben:Hallo 33zdenko,
genau so ein Programm habe ich für meine Rolladensteuerung gesucht, nun habe ich aber ein Problem, da ich mich mit der Script-Programmierung so gar nicht auskenne kann ich die Scripte nicht auf meine Bedürfnisse anpassen, denn ich benötige mindestens 6 frei wählbare Schaltzeiten und nicht nur 3 wie bein diesem Wecker...

Kannst du mir da weiterhelfen?

Gruß Marc
Hallo
Die Zeiten kannst du in die variable TrigerWecker so eintragen:
09:00:00;13:15:00;18:21:00;16:00:00;11:20:00;21:00:00
die ersten drei werden dann durch neo verändert, die anderen 3 durch ccu auch berücksicht...willst du im neo noch die anderen 3 verändern können
musst du dann erstmal die WeckerNr variable um 3 weitere erweitern:
Wecker 1;Wecker 2;Wecker 3;Wecker 4;Wecker 5;Wecker 6
dann im neo die weiteren 3 wecker einfügen:
4,5 und 6
die variablen in neo wieder importieren von der ccu
und die aktion zuweisen wie im bild
Bildschirmfoto 2016-09-30 um 17.57.19.png
danach musst du die scripte erweitern:
hier beispiel für programm/script: stundenplusminus - script für stunden hochzählen

Code: Alles auswählen

    var weckerAktiv = dom.GetObject("WeckerNr").Value();
    var x = dom.GetObject("TriggerWecker").Value();
    var y = dom.GetObject("TriggerWecker").ValueList();


    if (weckerAktiv == 0)
    {

    var Zeit1 = y.StrValueByIndex(";",1);
    var Zeit2 = y.StrValueByIndex(";",2);
    var Zeit3 = y.StrValueByIndex(";",3);
    var Zeit4 = y.StrValueByIndex(";",4);
    var Zeit5 = y.StrValueByIndex(";",5);

    var Stunden = y.StrValueByIndex(";",0).Substr(0,2).ToInteger();
    var Minuten = y.StrValueByIndex(";",0).Substr(3,2);
    var Sekunden = "00";

    Stunden = Stunden + 1;
    if (Stunden > 23)
    {
    Stunden = 0;
    }

    if (Stunden <= 9)
    {
    string Zeit0 = "0" + Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

    }
    else
    {
    string Zeit0 = Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

    }
    dom.GetObject("Weckzeit").State(Zeit0);

    dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";" + Zeit1 + ";" + Zeit2 + ";"+ Zeit3 + ";" + Zeit4 + ";" + Zeit5);
    }

    if (weckerAktiv == 1)
    {

    var Zeit0 = y.StrValueByIndex(";",0);
    var Zeit2 = y.StrValueByIndex(";",2);
    var Zeit3 = y.StrValueByIndex(";",3);
    var Zeit4 = y.StrValueByIndex(";",4);
    var Zeit5 = y.StrValueByIndex(";",5);

    var Stunden = y.StrValueByIndex(";",1).Substr(0,2).ToInteger();
    var Minuten = y.StrValueByIndex(";",1).Substr(3,2);
    var Sekunden = "00";

    Stunden = Stunden + 1;
    if (Stunden > 23)
    {
    Stunden = 0;
    }

    if (Stunden <= 9)
    {
    string Zeit1 = "0" + Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

    }
    else
    {
    string Zeit1 = Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

    }
    dom.GetObject("Weckzeit").State(Zeit1);

    dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";" + Zeit1 + ";" + Zeit2 + ";"+ Zeit3 + ";" + Zeit4 + ";" + Zeit5);


    }
    if (weckerAktiv == 2)
    {

    var Zeit0 = y.StrValueByIndex(";",0);
    var Zeit1 = y.StrValueByIndex(";",1);
    var Zeit3 = y.StrValueByIndex(";",3);
    var Zeit4 = y.StrValueByIndex(";",4);
    var Zeit5 = y.StrValueByIndex(";",5);
    var Stunden = y.StrValueByIndex(";",2).Substr(0,2).ToInteger();
    var Minuten = y.StrValueByIndex(";",2).Substr(3,2);
    var Sekunden = "00";

    Stunden = Stunden + 1;
    if (Stunden > 23)
    {
    Stunden = 0;
    }

    if (Stunden <= 9)
    {
    string Zeit2 = "0" + Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

    }
    else
    {
    string Zeit2 = Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

    }
    dom.GetObject("Weckzeit").State(Zeit2);

    dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";" + Zeit1 + ";" + Zeit2 + ";"+ Zeit3 + ";" + Zeit4 + ";" + Zeit5);

    }

if (weckerAktiv == 3)
    {

    var Zeit0 = y.StrValueByIndex(";",0);
    var Zeit1 = y.StrValueByIndex(";",1);
    var Zeit2 = y.StrValueByIndex(";",2);
    var Zeit4 = y.StrValueByIndex(";",4);
    var Zeit5 = y.StrValueByIndex(";",5);
    var Stunden = y.StrValueByIndex(";",3).Substr(0,2).ToInteger();
    var Minuten = y.StrValueByIndex(";",3).Substr(3,2);
    var Sekunden = "00";

    Stunden = Stunden + 1;
    if (Stunden > 23)
    {
    Stunden = 0;
    }

    if (Stunden <= 9)
    {
    string Zeit3 = "0" + Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

    }
    else
    {
    string Zeit3 = Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

    }
    dom.GetObject("Weckzeit").State(Zeit3);

    dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";" + Zeit1 + ";" + Zeit2 + ";"+ Zeit3 + ";" + Zeit4 + ";" + Zeit5);

    }

if (weckerAktiv == 4)
    {

    var Zeit0 = y.StrValueByIndex(";",0);
    var Zeit1 = y.StrValueByIndex(";",1);
    var Zeit2 = y.StrValueByIndex(";",2);
    var Zeit3 = y.StrValueByIndex(";",3);
    var Zeit5 = y.StrValueByIndex(";",5);
    var Stunden = y.StrValueByIndex(";",4).Substr(0,2).ToInteger();
    var Minuten = y.StrValueByIndex(";",4).Substr(3,2);
    var Sekunden = "00";

    Stunden = Stunden + 1;
    if (Stunden > 23)
    {
    Stunden = 0;
    }

    if (Stunden <= 9)
    {
    string Zeit4 = "0" + Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

    }
    else
    {
    string Zeit4 = Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

    }
    dom.GetObject("Weckzeit").State(Zeit4);

    dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";" + Zeit1 + ";" + Zeit2 + ";"+ Zeit3 + ";" + Zeit4 + ";" + Zeit5);

    }
if (weckerAktiv == 5)
    {

    var Zeit0 = y.StrValueByIndex(";",0);
    var Zeit1 = y.StrValueByIndex(";",1);
    var Zeit2 = y.StrValueByIndex(";",2);
    var Zeit3 = y.StrValueByIndex(";",3);
    var Zeit4 = y.StrValueByIndex(";",4);
    var Stunden = y.StrValueByIndex(";",5).Substr(0,2).ToInteger();
    var Minuten = y.StrValueByIndex(";",5).Substr(3,2);
    var Sekunden = "00";

    Stunden = Stunden + 1;
    if (Stunden > 23)
    {
    Stunden = 0;
    }

    if (Stunden <= 9)
    {
    string Zeit5 = "0" + Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

    }
    else
    {
    string Zeit5 = Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

    }
    dom.GetObject("Weckzeit").State(Zeit5);

    dom.GetObject("TriggerWecker").ValueList(Zeit0 + ";" + Zeit1 + ";" + Zeit2 + ";"+ Zeit3 + ";" + Zeit4 + ";" + Zeit5);

    }
stundenminus script sollte analog genauso sein, im aktivität sonst in der ccu
nur in den teilen wo runtergezählt wird ist das script anders:

Code: Alles auswählen

Stunden = Stunden - 1;
if (Stunden < 0)
{
Stunden = 23;
}

if (Stunden <= 9)
{
string Zeit0 = "0" + Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

}
else
{
string Zeit0 = Stunden.ToString() + ":" + Minuten + ":" + Sekunden;

}
einfach in jeder if anweisung dieses teil ändern

Programm WeckerAuswahl so erweitern wie im bild
Bildschirmfoto 2016-09-30 um 18.15.58.png
das script so anpassen

Code: Alles auswählen

    var weckerAktiv = dom.GetObject("WeckerNr").Value();
    var x = dom.GetObject("TriggerWecker").Value();
    var y = dom.GetObject("TriggerWecker").ValueList();

    if (weckerAktiv == 0)
    {

    var Zeit1 = y.StrValueByIndex(";",1);
    var Zeit2 = y.StrValueByIndex(";",2);
    var Zeit3 = y.StrValueByIndex(";",3);
    var Zeit4 = y.StrValueByIndex(";",4);
    var Zeit5 = y.StrValueByIndex(";",5);
    var Stunden = y.StrValueByIndex(";",0).Substr(0,2).ToInteger();
    var Minuten = y.StrValueByIndex(";",0).Substr(3,2);
    var Sekunden = "00";
    dom.GetObject("Weckzeit").State((Stunden).ToString() + ":" + Minuten + ":" + Sekunden);
    }
    if (weckerAktiv == 1)
    {

    var Zeit0 = y.StrValueByIndex(";",0);
    var Zeit2 = y.StrValueByIndex(";",2);
    var Zeit3 = y.StrValueByIndex(";",3);
    var Zeit4 = y.StrValueByIndex(";",4);
    var Zeit5 = y.StrValueByIndex(";",5);
    var Stunden = y.StrValueByIndex(";",1).Substr(0,2).ToInteger();
    var Minuten = y.StrValueByIndex(";",1).Substr(3,2);
    var Sekunden = "00";
    dom.GetObject("Weckzeit").State((Stunden).ToString() + ":" + Minuten + ":" + Sekunden);
    }
    if (weckerAktiv == 2)
    {

    var Zeit0 = y.StrValueByIndex(";",0);
    var Zeit1 = y.StrValueByIndex(";",1);
    var Zeit3 = y.StrValueByIndex(";",3);
    var Zeit4 = y.StrValueByIndex(";",4);
    var Zeit5 = y.StrValueByIndex(";",5);
    var Stunden = y.StrValueByIndex(";",2).Substr(0,2).ToInteger();
    var Minuten = y.StrValueByIndex(";",2).Substr(3,2);
    var Sekunden = "00";
    dom.GetObject("Weckzeit").State((Stunden).ToString() + ":" + Minuten + ":" + Sekunden);
    }
if (weckerAktiv == 3)
    {
    var Zeit0 = y.StrValueByIndex(";",0);
    var Zeit1 = y.StrValueByIndex(";",1);
    var Zeit2 = y.StrValueByIndex(";",2);
    var Zeit4 = y.StrValueByIndex(";",4);
    var Zeit5 = y.StrValueByIndex(";",5);
    var Stunden = y.StrValueByIndex(";",3).Substr(0,2).ToInteger();
    var Minuten = y.StrValueByIndex(";",3).Substr(3,2);
    var Sekunden = "00";
dom.GetObject("Weckzeit").State((Stunden).ToString() + ":" + Minuten + ":" + Sekunden);
    }
if (weckerAktiv == 4)
    {
    var Zeit0 = y.StrValueByIndex(";",0);
    var Zeit1 = y.StrValueByIndex(";",1);
    var Zeit2 = y.StrValueByIndex(";",2);
    var Zeit3 = y.StrValueByIndex(";",3);
    var Zeit5 = y.StrValueByIndex(";",5);
    var Stunden = y.StrValueByIndex(";",4).Substr(0,2).ToInteger();
    var Minuten = y.StrValueByIndex(";",4).Substr(3,2);
    var Sekunden = "00";
dom.GetObject("Weckzeit").State((Stunden).ToString() + ":" + Minuten + ":" + Sekunden);
    }
if (weckerAktiv == 5)
    {
var Zeit0 = y.StrValueByIndex(";",0);
    var Zeit1 = y.StrValueByIndex(";",1);
    var Zeit2 = y.StrValueByIndex(";",2);
    var Zeit3 = y.StrValueByIndex(";",3);
    var Zeit4 = y.StrValueByIndex(";",4);
    var Stunden = y.StrValueByIndex(";",5).Substr(0,2).ToInteger();
    var Minuten = y.StrValueByIndex(";",5).Substr(3,2);
    var Sekunden = "00";
dom.GetObject("Weckzeit").State((Stunden).ToString() + ":" + Minuten + ":" + Sekunden);
    }
alles andere so machen wie in dem thread beschrieben
dann sollte es funktionieren :)

Hampelmann
Beiträge: 3
Registriert: 02.09.2016, 21:55

Re: Wecker mit der CCU und Neo, Zeiten aus Neo einstellbar

Beitrag von Hampelmann » 03.10.2016, 03:13

Hallo 33zdenko,

vielen Dank für die Programmerweiterung,
mit Hilfe Deiner Vorlage konnte ich auch das Script für Minuten +/- selber ändern. Und ich habe auch das Prinzip verstanden.

Ich hätte da noch eine Frage, wie viele Zeiten kann man so programmieren, oder gibt es da keine Grenzen?

Nochmals vielen Dank, auch für Deine Zeit.

33zdenko
Beiträge: 343
Registriert: 21.12.2013, 16:50
Danksagung erhalten: 4 Mal

Re: Wecker mit der CCU und Neo, Zeiten aus Neo einstellbar

Beitrag von 33zdenko » 03.10.2016, 08:26

Hampelmann hat geschrieben:Hallo 33zdenko,

vielen Dank für die Programmerweiterung,
mit Hilfe Deiner Vorlage konnte ich auch das Script für Minuten +/- selber ändern. Und ich habe auch das Prinzip verstanden.

Ich hätte da noch eine Frage, wie viele Zeiten kann man so programmieren, oder gibt es da keine Grenzen?

Nochmals vielen Dank, auch für Deine Zeit.
Hallo :)
Nichts zu danken....Grenzen gibt es schon auf der ccu, es kommt darauf an wieviele andere programme und variablen, scripte du verwendest, aber ich denke so schnell zwingst du die ccu nicht in die knie.
gruss!

Brunow
Beiträge: 104
Registriert: 18.02.2017, 17:06

Re: Wecker mit der CCU und Neo, Zeiten aus Neo einstellbar

Beitrag von Brunow » 24.01.2018, 19:16

Hallo,
ich habe den Wecker mit Erfolg bei mir zum laufen gebracht.
Gibt es denn inzwischen ein Update.
Ich habe festgestellt das ich im Ausführungs-Programm nur zum Start und zum Stopp jeweils einen Wecker einstellen muß.
Wozu den 3 Wecke für eine Weckzeit?
Und warum reicht dann nicht nur ein Wecker und dazu z.B. eine beliebige Ablaufzeit für einen Aktor im Programm?
Vielleicht gibt es auch inzwischen etwas einfacheres für einen Wecker mit NEO?

Ich hoffe das sich damit noch Jemand beschäftigt hat. Ich bin leider nur ein Nachmacher.

Danke und ein gesundes neues Jahr noch!

Antworten

Zurück zu „mediola“