ExecStudio

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

Moderator: Co-Administratoren

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

ExecStudio

Beitrag von mfreye » 12.02.2009, 20:05

Hallo zusammen!

Ich habe mal ne kurze Frage:

Ich schaltet eine Steckdose für 22 Minuten ein (einschalten für "00:22:00")

Wenn ich jetzt mit ExecStudio den Zustand auslese, bekomme ich als Wert "an" zurück.

Kann ich auch die Zeit auslesen?

MfG
MFreye

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

Re: ExecStudio

Beitrag von Sanys » 12.02.2009, 21:52

Hallo mfreye,

da Du ja für 22 min einschaltest weisst Du ja, dass für 22 min eingeschaltet wird. Da ist es eigentlich nicht sinnvoll diesen Wert abfragen zu können, oder?
Du kannst aber ein Variable definieren, Typ Uhr, und sagst z.B.

Code: Alles auswählen

Einzeit := "00:22:00"
Steckdose einschalten für Einzeit
dann kannst Du wiederum Einzeit abfragen, bekommst aber auch nur "00:22:00" angezeigt.

...oder möchtest Du nun wissen, seit wann, wie lange oder wie lange noch die Steckdose eingeschaltet ist?

Dann mußt Du die Steckdose.ct bemühen. In dieser Zeit wird die Zeit des "Schaltens" abgelegt, also die aktuelle Zeit wenn geschaltet wurde. Die kannst Du abfragen oder auch erst mal rechnen und dann abfragen.
z.B. Uhrzeit - Steckdose.ct ergibt wie lange die Steckdose schon eingeschaltet ist,
Einzeit - ( Uhrzeit - Steckdose.ct) ergibt die verbleibende Zeit.
Oder da gibt es auch noch die Stoppzeit: Diese nimmt die die Rechnung quasi ab:
Stoppzeit(Steckdose.ct) ergibt auch die Zeit, wie lange eingeschaltet ist.

Viel Erfolg!

sanys


Quellen: Studio Hilfe
- Zuweisung
- Stoppzeit
- Variablen / Variable.ct
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: ExecStudio

Beitrag von mfreye » 14.02.2009, 07:55

Hallo Sanys,

irgendwie klappt das nicht.

Code: Alles auswählen

** -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
** HIFI gesamt Schlafzimmer EIN / AUS mit Timer - Stand: 13.10.2008
** -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


wenn EM_SC_HI_1241 eingeschaltet und EM_SC_HI_1241.EIN_AUS eingeschaltet dann

** Variable rücksetzen
   EM_SC_HI_1241.EIN_AUS ausschalten

** Befehl senden
   EM_SC_HI_1241 ausschalten

endewenn


wenn EM_SC_HI_1241 ausgeschaltet und EM_SC_HI_1241.EIN_AUS eingeschaltet dann

** Variable rücksetzen
   EM_SC_HI_1241.EIN_AUS ausschalten

** Befehl senden
   EM_SC_HI_1241 einschalten für "01:00:00"

endewenn


EM_SC_HI_1241.Zeit_EIN := EM_SC_HI_1241.ct
EM_SC_HI_1241.Zeit_AUS := "00:00:00"+Stoppzeit(EM_SC_HI_1241.ct)
EM_SC_HI_1241.Zeit_TIMER := "00:00:00"+ Schaltdauer(EM_SC_HI_1241.ct)
Starte ich die Anwendung kommt der folgende Fehler: Unbekannter Bezeichner -> EM_SC_HI_1241.CT.CT. Dieser wird in der letzten Zeile erzeugt.

Aber auch die Stoppzeit wird nicht berechnet.

Habe alle Typen ausprobiert: Uhr, Zeichen, Zeit

MfG
MFreye

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

Re: ExecStudio

Beitrag von mfreye » 14.02.2009, 10:35

Hallo zusammen.

Noch ne Frage, wenn ich den folgenden Code verwende:

Code: Alles auswählen

   EM_SC_HI_1241.TIMERWERT := "Fernseher bleibt eingeschaltet."
Wird nur Fernseher übertragen, nach dem Leerzeichen ist Schluss.

MfG
MFreye

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

Re: ExecStudio

Beitrag von Sanys » 14.02.2009, 10:36

Hallo mfreye

so kann das auch nicht klappen. Eingangs wolltest Du die Infos zu einer Schaltsteckdose, da geht das mit der xyz.CZ, nun willst Du das aber von Variablen, da geht es aber nicht. Zugegeben, die Hilfe sagt das nicht explizit, sie spricht aber auch nur von OBJEKTEN im Zusammenhang mit CT.
Du kannst das aber ganz einfach ersetzen, wenn Du zur Variablen-Änderung auch die Zeit in einer anderen Variablen speicherst und diese später dann mit der Uhrzeit vergleichst.
VariableXY einschalten für ="00:20:00"
VariableXYZeit := Uhrzeit
..
..
in einem anderen Makro kannst Du dann rechnen:

Code: Alles auswählen

Laufzeit := Uhrzeit - Objekt.VariableXYZeit
und diese Laufzeitvariable dann per execstudio abrufen.

Unabhängig vom Schreibfehler: Du fragst in dem Makro ein paar Bedingungen ab, setzt dann "Schalter" und fragst direkt danach die Laufzeit ab: da kann immer nur 00:00:00 rauskommen.
Um die Laufzeit abzufragen muss der Schaltzeitpunkt ja schon irgendwie in der Vergangenheit liegen.

Etwas anderes: arbeitest Du auch mit php oder hast es vor (also innerhalb Studio?)
Dann hätte ich einen Tip: Verzichte bei den Variablennamen auf Unterstriche. Eine Variable Objekt.Variable musst Du in php mit $V_Objekt_Variable ansprechen. Eine Variable EM_SC_HI_1241.EIN_AUS wird zu $V_EM_SC_HI_1241_EIN_AUS, d.h. Du könnstest nicht einmal einen Wert von Studio an php übergeben, da schon der erste Unterstrich als Punkt interpretiert würde und die Variable EM.SC.HI.1241.EIN.AUS einfach nicht existiert
Ich arbeite z.B. mit Gross/kleinschreibung, könnte bei Dir dann EmScHi1241 heissen. Wird zwar nicht so übersichtlich aber syntaktisch sicherer.

Zurück zum Problem: schildere doch mal kurz, was das Ding können soll, denn aus dem Makro wird es mir nicht klar.
(Einschalten für 1 min, dann wird es wohl nach 60 sec wieder aus sein. Willst Du einen Countdown-Timer??)


Viele Grüße

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

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

Re: ExecStudio

Beitrag von buempi » 14.02.2009, 11:12

@Sanys: EM_SC_HI_1241 ist schon ein Objekt; also gibt es die Variable .ct. Allerdings braucht man sie im konkreten Fall gar nicht. - MFreye ist allerdings schon über diese Variable "gestolpert", indem er einen anderen Fehler gemacht hat.

Dem mit den Unterstrichen kann ich nur beipflichten. Auch ich verwende ausschliesslich GrossKleinSchreibung!

@ MFreye: Stoppzeit(Objekt.ct) und Schaltdauer(Objekt) liefern immer das gleiche Ergebnis. Nämlich die Zeitspanne seit der letzten Zustandsänderung des Objektes. Aber hast du den kleinen Unterschied bemerkt? - Bei Schaltdauer brauchts kein ".ct" am Schluss. Wenn du das in der letzten Zeile weglässt, kommt sicher keine Fehlermeldung mehr. Intern löst wohl Homeputer den Befehl Schaltdauer(Objekt.ct) auf in Stoppzeit(Objekt.ct.ct). Deshalb das doppelte ".ct" in der Fehlermeldung!

Trotzdem wird das Makro kaum das bringen, was du eigentlich möchtest. In der Variablen AUS steht nämlich die seit der letzten Umschaltung verstrichene Zeit. Aber du möchtest doch wohl wissen, wann die Musik ausgeschaltet werden wird?

In der Variablen TIMER steht genau dasselbe. Aber du möchtest doch wohl wissen, wie lange die Musik noch läuft?

Wenn ich das richtig erraten habe, müsste das Makro so lauten:

Code: Alles auswählen

** Variablen:
** Typ Schalter:   EIN_AUS
** Typ Uhr:        Zeit_EIN, Zeit_AUS, Zeit_Timer

wenn EM_SC_HI_1241 eingeschaltet und EM_SC_HI_1241.EIN_AUS eingeschaltet dann

** Variable rücksetzen
   EM_SC_HI_1241.EIN_AUS ausschalten

** Befehl senden
   EM_SC_HI_1241 ausschalten

endewenn


wenn EM_SC_HI_1241 ausgeschaltet und EM_SC_HI_1241.EIN_AUS eingeschaltet dann

** Variable rücksetzen
   EM_SC_HI_1241.EIN_AUS ausschalten

** Befehl senden
   EM_SC_HI_1241 einschalten für "01:00:00"

   EM_SC_HI_1241.Zeit_EIN := Uhrzeit
   EM_SC_HI_1241.Zeit_AUS := Uhrzeit + "01:00:00"

endewenn


** WENN-Block und SONST-Anweisungen sind nicht zwingend notwendig
** Einfach nur, damit bei ausgeschalteter Musik
** keine historisch Werte angezeigt werden

wenn EM_SC_HI_1241 eingeschaltet dann

   EM_SC_HI_1241.Zeit_TIMER := Zeit_AUS - Uhrzeit

sonst

   EM_SC_HI_1241.Zeit_EIN   := "00:00:00"
   EM_SC_HI_1241.Zeit_AUS   := "00:00:00"
   EM_SC_HI_1241.Zeit_TIMER := "00:00:00"

endewenn
Das Makro muss aber periodisch (z.B. jede Minute) ablaufen, damit Zeit_Timer laufend aktualisiert wird. Deshalb dürfen aber die beiden anderen Variablen nur im Schaltzeitpunkt berechnet werden, d.h. die entsprechenden Anweisungen gehören in den WENN-Block, welcher die Einschaltung bewirkt.

Die Variable EIN_AUS wird ja wohl von irgend einem anderen Makro her geschaltet? Damit die Umschaltung sofort erfolgt (nicht erst zur nächsten vollen Minute), sollte dort auch die Anweisung STARTE(EM_SC_HI_1241) drinstehen.

Viele Grüsse
Bümpi

PS: Zu deiner zweiten Frage: Wenn ich "execstudioco gEM_SC_HI_1241.TIMERWERT" bei mir verwende kommt der ganze String. Ist TIMERWERT eine Variable vom Typ Zeichen?

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

Re: ExecStudio

Beitrag von Sanys » 14.02.2009, 13:29

Hallo Buempi,
@Sanys: EM_SC_HI_1241 ist schon ein Objekt;
stimmt natürlich, da bin ich wohl durch die vielen EIN_AUS durcheinander gekommen.
Trotzdem macht es keinen Sinn, im Makro erst das Objekt zu schalten und eine Zeile später die Einschaltdauer abzufragen.
Stoppzeit(Objekt.ct) und Schaltdauer(Objekt) liefern immer das gleiche Ergebnis. Nämlich die Zeitspanne seit der letzten Zustandsänderung des Objektes. Aber hast du den kleinen Unterschied bemerkt? - Bei Schaltdauer brauchts kein ".ct" am Schluss.
hier kommt mal wieder die Inkonsistenz der Hilfe zum tragen:

Unter Schaltdauer steht richtig : Schaltdauer(Objekt), in der Beschreibung zu Variablen steht:
Um also die aktuelle Schaltdauer eines Objekts zu ermitteln kann man folgende Anweisung verwenden:
Anzeige:=Schaltdauer(Lampe.CT)
Das ist dann dort falsch beschrieben.

und dann gibts ja noch STARTUHR(Zeitvariable). Das kannst man auch verwenden, um Schaltzeitpunkte festzuhalten und dann mit Stoppzeit(Zeitvariable) auszuwerten.

@mfreye: schreib doch bitte mal möglichst genau, was Du machen willst, bevor hier alle anfangen zu spekulieren. Vielleicht ist Dein Problem ja schon längst irgendwo gelöst.


Viele Grüße


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

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

Re: ExecStudio

Beitrag von buempi » 14.02.2009, 14:55

Hallo MFreye

Zu deiner zweiten Frage: Langsam dämmert es mir wieder! Haben wir da nicht vor längerer Zeit mal was zusammen gebastelt mit einer Dreambox und dem Abspeichern der Ausgabe von ExecStudioCo in einer Umgebungsvariablen mit Hilfe des DOS-Befehls "For /F" :?:

Dieser Befehl liest standardmässig nur das erste Element, d.h. bis zum ersten Trennzeichen ein. Das Trennzeichen ist standardmässig ein Leerzeichen. Deshalb hast du in deiner Umgebungsvariablen nur noch "Fernseher" drin. Würdest du "execstudioco gEM_SC_HI_1241.TIMERWERT" in der DOS-Box eintragen, käme der ganze String.

Nun sind die Stapelverarbeitungsbefehle von DOS (ja, so nannte man die Dinger) schon fast eine "Programmiersprache" und recht flexibel, was niemand mehr weiss und ich auch schon fast vergessen habe. Ich musste auch ziemlich tief graben, hab's aber doch wieder gefunden.

Mit dem Parameter "delims" kann man das/die Trennzeichen bestimmen (ja: es sind mehrere möglich!). Mit dem Parameter "tokens" bestimmt man, welche Elemente gelesen werden sollen. Man kann einzelne Elemente auswählen (2,4,7) oder mit "*" alle auswählen. Mit 2* wählt man alle ab Nummer zwei aus. Du brauchst also den vorderen Teil gar nicht mehr selber mit "set UmgVariable=%UmgVariable:~24%" abzuschneiden, wenn du als Trennzeichen das "=" bestimmst.

Trage die folgenden Zeilen in eine Batch-Datei ein und du wirst das Ergebnis sehen:

Code: Alles auswählen

@echo off
cls

REM So steht in der Umgebungsvariablen nachher "EM_SC_HI_1241.TIMERWERT=Fenseher bleibt eingeschaltet."
For /F "tokens=*" %%i in ('execstudioco gEM_SC_HI_1241.TIMERWERT') Do @Set UmgVariable=%%i

echo.
echo %UmgVariable%


REM So hast du nur noch "Fernseher bleibt eingeschaltet." in der Umgebungsvariablen
For /F "delims== tokens=2*" %%i in ('execstudioco gEM_SC_HI_1241.TIMERWERT') Do @Set UmgVariable=%%i

echo.
echo %UmgVariable%
echo.

pause
Toll, nicht wahr?

Viele Grüsse
Bümpi

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

Re: ExecStudio

Beitrag von mfreye » 14.02.2009, 15:25

Hallo Sanys.

Also ich möchte folgendes:

Beim ersten Tastendruck wird die noch verbleibende Zeit angezeigt.

Beim nächsten Tastendruck (innerhalb von 2sek.) wird eine neue zeit von 15Minuten übermittelt an dem Empfänger.
Beim nächsten Tastendruck (innerhalb von 2sek.) wird eine neue zeit von 30Minuten übermittelt an dem Empfänger.
.
.
.
Wir die Taste innerhalb von 2sek. nicht mehr gedrückt, wird die neue Zeit übernommen bzw. nicht verändert.

Die neue Zeit möchte ich mir dann anzeigen.

Auch habe ich noch das Problem mit dem Text.

Code: Alles auswählen

 EM_SC_HI_1241.TIMERWERT := "Fernseher bleibt eingeschaltet."
MfG
MFreye

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

Re: ExecStudio

Beitrag von buempi » 14.02.2009, 15:43

mfreye hat geschrieben:Auch habe ich noch das Problem mit dem Text.

Code: Alles auswählen

 EM_SC_HI_1241.TIMERWERT := "Fernseher bleibt eingeschaltet."
Hast du meinen Beitrag dazu nicht gelesen?

Viele Grüsse
Bümpi

Antworten

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