Uhrzeit umrechnen

Programmierung der FHZ-Zentralen mit contronics homeputer Standard / homeputer Studio & WEB-Server

Moderator: Co-Administratoren

Antworten
mfreye
Beiträge: 237
Registriert: 22.12.2007, 08:01

Uhrzeit umrechnen

Beitrag von mfreye » 17.01.2009, 07:24

Hallo zusammen,

ich habe folgenden Code:

Code: Alles auswählen

    ** Uhrzeit in Variabel time schreiben
       time:=Uhrzeit

<?
    // Uhrzeitsformat ändern auf hh:mm
       $V_Script_SA_SU_time_jetzt = substr($V_Script_SA_SU_time,0,5);
       $V_Script_SA_SU_time_plus = substr($V_Script_SA_SU_time,0,5);
       $V_Script_SA_SU_time_minus = substr($V_Script_SA_SU_time,0,5);

    // Längen und Breiten Grad
       $lat = 52.5218;
       $long = 7.6744;

    // Berechnung
       $i = 0;
       $sun_info = date_sun_info(strtotime (date("Y-m-d")), $lat, $long);
       foreach ($sun_info as $key => $val) {
         $schluessel[$i] = $key;
         $value[$i] = date("H:i", $val);
         $i++;
       }

    // Sonnenaufgang / Sonnenuntergang (-0.8°)
       $V_Script_SA_SU_sunrise = $value[0];
       $V_Script_SA_SU_sunset = $value[1];

    // Dämmerung (Zivile Dämmerung -6°)
       $V_Script_SA_SU_sunrisecivil = $value[3];
       $V_Script_SA_SU_sunsetcivil = $value[4];

    // Dunkelheit (nautische Dämmerung -12°)
       $V_Script_SA_SU_sunrisenautic = $value[5];
       $V_Script_SA_SU_sunsetnautic = $value[6];

    // Nacht (astronomische Dämmerung -18°)
       $V_Script_SA_SU_sunriseastro = $value[7];
       $V_Script_SA_SU_sunsetastro = $value[8];

?>

    ** Sonnenstatus ermitteln

       wenn time_plus = sunrise dann
       Sonnenstatus := "Sonne"
       endewenn

       wenn time_minus = sunset dann
       Sonnenstatus := "Mond"
       endewenn

    ** Dämmerung ermitteln

       wenn time_plus = sunrisecivil dann
       Daemmerungsstatus := "deaktiviert"
       endewenn

       wenn time_minus = sunsetcivil dann
       Daemmerungsstatus := "aktiviert"
       endewenn




Script_SA_SU:="Ausgabewert"
+"<<Uhrzeit aktuell: "+time_jetzt
+"<<Uhrzeit plus: "+time_plus
+"<<Uhrzeit minus: "+time_minus
+"<<"
+"<<Sonnenaufgang: "+sunrise
+"<<Sonnenuntergang: "+sunset
+"<<"
+"<<Dämmerungsende: "+sunrisecivil
+"<<Dämmerungsanfang: "+sunsetcivil
+"<<"
+"<<Dunkelheitsende: "+sunrisenautic
+"<<Dunkelheitsanfang: "+sunsetnautic
+"<<"
+"<<Nachtende: "+sunriseastro
+"<<Nachtanfang: "+sunsetastro
+"<<"
+"<<Sonnenstatus: "+Sonnenstatus
+"<<Dämmerungsstatus: "+Daemmerungsstatus
Leider funktioniert das mit der Uhrzeit nicht.

Code: Alles auswählen

    ** Uhrzeit in Variabel time schreiben
       time:=Uhrzeit

<?
    // Uhrzeitsformat ändern auf hh:mm
       $V_Script_SA_SU_time_jetzt = substr($V_Script_SA_SU_time,0,5);
       $V_Script_SA_SU_time_plus = substr($V_Script_SA_SU_time,0,5);
       $V_Script_SA_SU_time_minus = substr($V_Script_SA_SU_time,0,5);
In diesem Bereich wollte ich die Uhrzeit auf die ersten 5 Stellen setzten, was aber scheinbar ignoriert wird. Die Uhrzeit bleibt im org. Format (hh:mm:ss). Eine PHP Fehlermeldung kommt nicht.

Im nächsten Schritt, wollte ich dann der Uhrzeit 10 Minuten dazu bzw. 10 Minuten davon abziehen.

Alle Variablen sind Zeichen.

Danke für Eure Hilfe!

MfG
MFreye

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Uhrzeit umrechnen

Beitrag von buempi » 17.01.2009, 08:12

Hallo Maik

Bei mir läuft gar nichts, wenn ich die Zeichen-Variablen time_jetzt usw. mit Unterstrich anlege. Lasse ich ihn weg (TimeJetzt), dann geht's bei mir.

Viele Grüsse
Bümpi

mfreye
Beiträge: 237
Registriert: 22.12.2007, 08:01

Re: Uhrzeit umrechnen

Beitrag von mfreye » 17.01.2009, 08:17

Hallo Bümpi,

seltsam, bei mir geht alles, nur das Format der Uhrzeit nicht, mmmmhh

Werde ich gleich mal testen.

Schläfst Du auch mal :)

Gruß
Maik

mfreye
Beiträge: 237
Registriert: 22.12.2007, 08:01

Re: Uhrzeit umrechnen

Beitrag von mfreye » 17.01.2009, 10:25

Hey,

danke so geht es. Darf man keine _ verwenden?

Wie rechne ich denn jetzt die plus und minus Zeit darauf? Kannst Du mir da weiter helfen, ich bekomme immer nur unlogische Werte.

MfG
Maik

tsa
Beiträge: 725
Registriert: 03.01.2008, 17:42
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Uhrzeit umrechnen

Beitrag von tsa » 17.01.2009, 10:59

mfreye hat geschrieben:Wie rechne ich denn jetzt die plus und minus Zeit darauf? Kannst Du mir da weiter helfen, ich bekomme immer nur unlogische Werte.
Ich kapier nicht so ganz, wo Du die 10 Minuten addieren wilst.
Am einfachsten geht es bei der Funktion date(). Dort wird ja als 2. Parameter der Unix-Zeitstempel angegeben. Dort kannst Du Sekunden dazurechnen oder abziehen:

z.B.

Code: Alles auswählen

x = date("H:i", $val + 10*60);
y = date("H:i", $val - 10*60);
Wenn Du durch die 10 Minuten einen anderen Dämmerungsgrad erreichen willst, ist es allerdings besser einen anderen Sonnenhöhenwinkel zu benutzen.
Eine konstante Zeitverschiebung bedeutet über's Jahr gesehen keine konstante Helligkeitsänderung!!!

Gruss
Thomas

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Uhrzeit umrechnen

Beitrag von buempi » 17.01.2009, 11:09

Hallo Maik

Ich hatte nur den ersten Teil deines Scripts angeschaut. Also nur, um herauszufinden, warum das Abschneiden der Sekunden nicht funktionierte.

Das Addieren oder Subtrahieren von Minuten bei einem Zeitstring wäre recht mühsam, weil man ja nicht einfach bei den Minuten 10 dazu- oder wegzählen kann. Sonst kriegt man plötzlich 69 Minuten...

Ich würde es so lösen wie - ich sehe eben - auch Thomas es vorschlägt:

Code: Alles auswählen

$V_Script_SA_SU_TimeJetzt = date("h:i",time());
$V_Script_SA_SU_TimePlus  = date("h:i",time() + 600);
$V_Script_SA_SU_TimeMinus = date("h:i",time() - 600);
Dann übernimmt PHP die ganze Rechnerei.

Viele Grüsse
Bümpi

PS: Genauer wird das natürlich mit dem Sonnenwinkel. Hast du diesen Beitrag von Thomas schon mal angesehen: http://homematic-forum.de/forum/viewtop ... 95&start=0

mfreye
Beiträge: 237
Registriert: 22.12.2007, 08:01

Re: Uhrzeit umrechnen

Beitrag von mfreye » 26.01.2009, 19:59

Hallo!

Also jetzt möchte ich noch etwas mehr :roll: Aber komme nicht weiter :(

Code: Alles auswählen

    ** Uhrzeit in Variabel time schreiben
       time:=Uhrzeit

<?

    // Uhrzeit festlegen (Format = hh:mm)
       $V_Script_SA_SU_TimeJetzt = date("H:i",time());
       $V_Script_SA_SU_TimePlus  = date("H:i",time() + 1200);
       $V_Script_SA_SU_TimeMinus = date("H:i",time() - 1200);

    // Längen und Breiten Grad
       $lat = 52.5218;
       $long = 7.6744;

    // Berechnung
       $i = 0;
       $sun_info = date_sun_info(strtotime (date("Y-m-d")), $lat, $long);
       foreach ($sun_info as $key => $val) {
         $schluessel[$i] = $key;
         $value[$i] = date("H:i", $val);
         $i++;
       }

    // Sonnenaufgang / Sonnenuntergang (-0.8°)
       $V_Script_SA_SU_sunrise = $value[0];
       $V_Script_SA_SU_sunset = $value[1];

    // Dämmerung (Zivile Dämmerung -6°)
       $V_Script_SA_SU_sunrisecivil = $value[3];
       $V_Script_SA_SU_sunsetcivil = $value[4];

    // Dunkelheit (nautische Dämmerung -12°)
       $V_Script_SA_SU_sunrisenautic = $value[5];
       $V_Script_SA_SU_sunsetnautic = $value[6];

    // Nacht (astronomische Dämmerung -18°)
       $V_Script_SA_SU_sunriseastro = $value[7];
       $V_Script_SA_SU_sunsetastro = $value[8];

?>

        ** 1Berechnung ermitteln

           wenn TimeMinus = sunrise dann

           ** Wert setzen
              Berechnung_T1 := "deaktiviert"

           ** Befehl ausführen
              SE_DA_AU_S411_T_RANGE_1 ausschalten

           ** loggen
              SchreibeText := "'" + Datum + " '" + Uhrzeit + " 'Modul:" + " 'Script_SA_SU_1" + "	 'Zustand:" + " '" + "n.v." + "	 'Befehl:" + " 'deaktiviert" + "	 	'Information:" + " 'keine"
              Schreibedatei("C:\Programme\contronics\homeputer Studio\loggen\Daemmerungssensor\Script_SA_SU.txt",SchreibeText)

           endewenn

           wenn TimeMinus = sunset dann

           ** Wert setzen
              Berechnung_T1 := "aktiviert"

           ** Befehl ausführen
              SE_DA_AU_S411_T_RANGE_1 einschalten

           ** logge
              SchreibeText := "'" + Datum + " '" + Uhrzeit + " 'Modul:" + " 'Script_SA_SU_1" + "	 'Zustand:" + " '" + "n.v." + "	 'Befehl:" + " 'aktiviert" + "	 	'Information:" + " 'keine"
              Schreibedatei("C:\Programme\contronics\homeputer Studio\loggen\Daemmerungssensor\Script_SA_SU.txt",SchreibeText)

           endewenn


        ** 2Berechnung ermitteln

           wenn TimePlus = sunrisecivil dann

           ** Wert setzen
              Berechnung_T2 := "deaktiviert"

           ** Befehl ausführen
              SE_DA_AU_S411_T_RANGE_2 ausschalten

           ** loggen
              SchreibeText := "'" + Datum + " '" + Uhrzeit + " 'Modul:" + " 'Script_SA_SU_2" + "	 'Zustand:" + " '" + "n.v." + "	 'Befehl:" + " 'deaktiviert" + "	 	'Information:" + " 'keine"
              Schreibedatei("C:\Programme\contronics\homeputer Studio\loggen\Daemmerungssensor\Script_SA_SU.txt",SchreibeText)

           endewenn

           wenn TimePlus = sunsetcivil dann

           ** Wert setzen
              Berechnung_T2 := "aktiviert"

           ** Befehl ausführen
              SE_DA_AU_S411_T_RANGE_2 einschalten

           ** loggen
              SchreibeText := "'" + Datum + " '" + Uhrzeit + " 'Modul:" + " 'Script_SA_SU_2" + "	 'Zustand:" + " '" + "n.v." + "	 'Befehl:" + " 'aktiviert" + "	 	'Information:" + " 'keine"
              Schreibedatei("C:\Programme\contronics\homeputer Studio\loggen\Daemmerungssensor\Script_SA_SU.txt",SchreibeText)

           endewenn



Script_SA_SU:="Ausgabewerte"
+"<<"
+"<<Uhrzeit aktuell: "+TimeJetzt
+"<<Uhrzeit plus: "+TimePlus
+"<<Uhrzeit minus: "+TimeMinus
+"<<"
+"<<Sonnenaufgang: "+sunrise+"
+"<<Sonnenuntergang: "+sunset
+"<<"
+"<<Dämmerungsende: "+sunrisecivil
+"<<Dämmerungsanfang: "+
+"<<"
+"<<Dunkelheitsende: "+sunrisensunsetcivilautic
+"<<Dunkelheitsanfang: "+sunsetnautic
+"<<"
+"<<Nachtende: "+sunriseastro
+"<<Nachtanfang: "+sunsetastro
+"<<"
+"<<1 Berechnung: "+Berechnung_T1
+"<<2 Berechnung: "+Berechnung_T2
Ich möchte gerne ein Zeitfenster haben.

Beispiel: Dämmerungsanfang ist 17:10 Uhr, dann sollte es ein Fenster von -20Min. und +10Min geben. Also von 16:50 - 17:20. In dieser Zeit möchte einen Schalter (Variabel) auf eingeschaltet setzen.

Dachte da an soetwas:

Code: Alles auswählen

wenn uhrzeit zwischen sunsetcivilminus und sunsetcivilplus dann
  schalter einschalten
sonst
 schalter ausschalten
endewenn
Geht das überhaupt und wie rechne ich die Zeit um?

Code: Alles auswählen

$V_Script_SA_SU_sunriseplus = $value[0] + 1200;
Das wäre auch zu einfach.

Danke für Eure Hilfe!

MfG
MFreye

mfreye
Beiträge: 237
Registriert: 22.12.2007, 08:01

Re: Uhrzeit umrechnen

Beitrag von mfreye » 26.01.2009, 20:16

Hallo!

Code: Alles auswählen

wenn uhrzeit zwischen sunset und sunrise dann
test := "on"
endewenn
Das scheint zu gehen, bleibt noch das Problem die Zeiten umzurechnen?

MfG
MFreye

Benutzeravatar
Sanys
Beiträge: 270
Registriert: 31.01.2007, 12:29
Wohnort: Wetterau

Re: Uhrzeit umrechnen

Beitrag von Sanys » 26.01.2009, 21:26

Hallo mfreye,

da brauchst Du keine Klimmzüge machen, Studio kann das.
Deine 2 letzten Postings habe ich nicht so ganz verstanden, aber das ist hier nicht so wichtig.

Wenn Du in Studio eine Zeit zu einer anderen addieren willst geht das so:

Code: Alles auswählen

MeineZeit := Sonnenaufgang + "00:10:00"
bedeutet dass der Variabeln MeineZeit (Typ Uhr) die Sonnenaufgangszeit + 10 min zugewiesen wird. Das geht auch mit minus.
Somit kannst Du wie in Deinem Beispiel
wenn uhrzeit zwischen sunsetcivilminus und sunsetcivilplus dann
schalter einschalten
sonst
schalter ausschalten
endewenn
ein Zeitfenster bestimmen und abhängig ob innerhalb oder ausserhalb des Zeitfensters Deine schaltungen vornehmen. Vorher musst Du eben

Code: Alles auswählen

sunsetcivilminus := sunsetcivil - "00:20:00" 
und das selbe entsprechend für sunsetcivilplus eingeben.

Willst Du aber eine Zufallszeit innerhalb eines Zeitfensters z.B. Sunsetcivil -20 bis Sunsecivil + 10 dann definierst Du

Code: Alles auswählen

Start := Sunsetcivil - "00:20:00"
Zufallszeit := Start + Zufallszeit("00:30:00")
Dadurch wird bei jedem Durchlaufen des Makros eine zufällige Zeit innerhalb des Zeitfensters -20/+10 erzeugt. Das sollte allerdings nur einmal am Tag passieren, da sonst ein Vergleich mit der errechneten Zeit schwierig wird (...die ändert sich ja dauernd...)

:idea: Quellen: Studio-Hilfe:
:arrow: Zuweisung, Rechenfunktion bei Zuweisungen von Uhrzeiten
:arrow: Zufallszeit
:arrow: Bedingung für Zeiträume
:idea:


Alles klar?



Viel Erfolg!


sanys
FHZ 1350PC Prof. mit HomeputerStudio 100224 + Direktsendebefehle à la tsa (v 8.0)
WIN XP Pro SP3 (neuester Stand) + buempi's Minibrowser + etliche fs20+HMS+FHT Komponenten + nie genug Zeit, das alles fertig zu bekommen ;-)

mfreye
Beiträge: 237
Registriert: 22.12.2007, 08:01

Re: Uhrzeit umrechnen

Beitrag von mfreye » 28.01.2009, 18:05

Hallo Sanys.
Alles klar?
Ja. Danke!

MfG
MFreye

Antworten

Zurück zu „homeputer Studio / Standard: Programmierbeispiele“