"Schreibgeschwindikeit" bzw. Schreibzyklus HM-CFG-LAN

„Wie immer“? Solche Aussagen kenne ich nur von Frauen und dementsprechend bewerte ich die. :smiley:

Howdy,

so - bin „fast“ wieder da.
Nach einem „Weihnachtsgeschenk-Kurzurlaub“ in Dresden, habe ich jetzt im Hotel (Morgen gehts sowieso Heim) ein paar Minuten mein Leid zu klagen :slight_smile:

Also kurz gesagt - ich komme irgendwie nicht zum richtigen Anfang für mein Programm.
Was ich bisher geschafft habe:

  • Aufgrund der vorherigen Hilfe, kann ich jetzt im Kalender die Schichtkürzel für jede Schicht auslesen
  • Schichtkürzel gibt es jetzt für Früh (F), Spät (S), Nacht(N), Urlaub(U), Frei(X), Urlaub abwesend(UA), Frei abwesend(XA)
  • Um das ganze nachvollziehbar zu gestalten, habe ich mir die gewählten Kürzel plus die jew. Schicht per Push aufs Handy senden lassen.

(also fast nichts)

Allerdings überlege ich seit Tagen und durchsuche auch das Forum seit Tagen nach einer gangbaren Lösung.
Ich habe mir auch schon einige Heizungsskripte angesehen, leider ist das alles irgendwie so kompliziert (Webfront-Skript, Ernies Skript), dass ich ehrlich gesagt kein bisschen durchblicke - es gibt ja auch nochmal jede Menge Sub-Skripte…

Vielleicht wäre es also das einfachste, wenn ich meine Programmierübungen mal an ner grundsätzlichen Steuerung versuche.

Jetzt wäre meine Frage an euch Experten:

  1. Da ja nicht alles in einem großen Skript stehen sollte, würdet Ihr:
    a) Das ganze Wochentags-basiert machen
    b) Das ganze Schicht-basiert machen?

Es gibt zu bedenken, dass das ganze mit meinen Zeiten Co-existieren muss.
Sprich zu meinen Regelarbeitszeiten muss die jeweilige Schicht hinzu „addiert“ werden.

  1. Wie oft soll das ganze laufen (davon hängt ja auch der Aufbau des Skripts ab):
    a) alle „paar“ (5?) Minuten
    b) Irgendwie Ereignis-basiert (also das jew. Skript „wartet“ bis zur nächsten Schaltzeit")

Ich gehe davon aus, dass der ein oder andere gewillt ist zu sagen „das muss jeder für sich selbst bestimmen“ etc.
Das ist mir absolut klar, ich meine eher „was könnt Ihr aufgrund Eurer Erfahrung dazu sagen“ und wie würdet Ihr das grob strukturieren?

Ich habe zwar schon ein paarmal angefangen etwas zu schreiben, nach ewigem Suchen und Lesen und kaum etwas schreiben jedoch alles verworfen.

Gute N8 & Gruß,

Matthias

Moin :slight_smile:

Ich habe keine Ahnung, wie oft ich es schon gesagt habe, aber ich sage es gerne nochmal :smiley:
Das Zauberwort nennt sich „Wochenplan“…bzw. in deinem Fall „Wochenpläne“. Hatte doch sogar Screenshots und Links dazu gepostet.

Du machst einen Wochenplan für Schicht S, einen Wochenplan für Schicht X, …, einen Wochenplan für „normale“ Tage, einen Wochenplan für Frei/Krank, …usw…

Mit diesen Wochenplänen kannst du für JEDEN Tag frei die Zeiten definieren, wann welche Temperaturen vorliegen sollen (wie in meines Screenshots beispielhaft gezeigt). Und mit deinen ausgelesenen Buchstaben (X,N,S,…) schaltest du jeweils den zugehörigen Wochenplan aktiv. Eigentlich easy, oder?! :smiley: :wink:

Es gibt sicher noch andere Wege, aber diesen Weg (zumindest so in der Art, weil ich keine Schicht habe), habe ich gewählt. Und da die Wochenpläne Variablen ändern und Skripte starten, musst du dir um die Skript-Aufruf-Intervalle keine Gedanken machen, das übernimmt jeweils der aktive Wochenplan vollautomatisch.

Grüße,
Chris

Hey, war heute fleißig. Habe während meine Freundin heim gefahren ist (fahren immer noch) deinen Rat befolgt und brav Profile angelegt
Dazu ein Script, welches anhand des Wochentags und des Schichtkürzels das passende Programm auswählt

Aber morgen mehr dazu.

Ich schreibe jetzt (vom Handy), weil wenn ich heim komme wird dort auf mich die CCU2 warten.

Die Frage ist, kann ich diese einfach Plug and Play mit dem LAN config Modul austauschen oder was muss ich da machen?
Zudem ändern sich dann die ID’s?
Grüße und guten Rutsch,
Matthias

Bin zu faul zum Suchen aber das war schon öter Thema. Ungeprüft hier

Nein - garnicht. Habe wie ein Weltmeister gesucht für mein Script.
(was irgendwie Fehler hat)
Allerdings ist nach knapp 7,5h der Akku am Laptop leer und auf dem Handy ist lesen und suchen eher bescheiden.
Dankeschön!

Bitte nix reininterpretieren, was da nicht steht. :wink:
Ich schieb „Bin zu faul zu suchen“. Also ich bin gerade zu faul zu suchen. Hab Dir nix unterstellt.
Heiße ich Bruno?

Ich habe auch keine Lust zum Suchen :wink: :smiley:

Bin kein Freund von solchen Übernahmen, soll aber funktionieren.

Gruß
Bruno

Bei wenigen Devices würde ich mir das auch nicht antun.
Bei mir wäre ich aber bestimmt den halben Tag unterwegs.:smiley:

Oh - sorry, hatte mich verlesen.
Siehst Du - daher suche ich nicht so gerne auf dem Handy :smiley:

So - aktuell habe ich allerdings ein Problem:

Mein „Schichtwahl-Script“ baut nur Mist. Offenbar führt es mehrere Scripte hintereinander aus :-/
Also was definitiv gelaufen ist (ungewollt) ist das unterste (Frei / Urlaub Abwesenheit) - das setzt nämlich dauernd alles auf 15°C.
Daher habe ich auch flott einen „Schalter“ eingebaut, mit dem ich vom Webinterface die Kalenderautomatik ausschalten kann und die Thermostate von „Manuell“ auf „Automatik“ setze.

Könnt Ihr vielleicht mal schauen wo das her kommen kann?

Zur Info - $schicht ist momentan (also für diesen Tag) „X“ - also ein String.

hier das Script:

<?
$Tag = Date("w");
$schicht=getvaluestring (32749 /*[Funktionen Automatik\Kalender-Check\Schichtzeichen]*/ );
#HM_WriteValueFloat(44354 /*[Thermostat Wohnzimmer]*/,"MANU_MODE", 1);
#HM_WriteValueFloat(20904 /*[Thermostat Schlafzimmer]*/,"MANU_MODE", 1);


################### Früh ######################################
If ($schicht == "F" && $Tag == 6){
IPS_RunScript (53092 /*[Funktionen Automatik\F - Samstag]*/ );}

	Elseif ($schicht == "F" && $Tag == 0){
	IPS_RunScript (32452 /*[Funktionen Automatik\F - Sonntag]*/ );}
	
	Elseif ($schicht == "F" && $Tag >=1 && $Tag <= 5){
	IPS_RunScript (18210 /*[Funktionen Automatik\F - Wochentag]*/ );}
	
################### Spät ######################################
If ($schicht == "S" && $Tag == 6){
IPS_RunScript (32435 /*[Funktionen Automatik\S - Samstag]*/ );}

	Elseif ($schicht == "S" && $Tag == 0){
	IPS_RunScript (37550 /*[Funktionen Automatik\S - Sonntag]*/ );}

	Elseif ($schicht == "S" && $Tag >=1 && $Tag <= 5){
	IPS_RunScript (46468 /*[Funktionen Automatik\S - Wochentag]*/ );}

################### Nacht ######################################
If ($schicht == "N" && $Tag == 6){
IPS_RunScript (22483 /*[Funktionen Automatik\N - Samstag]*/ );}

	Elseif ($schicht == "N" && $Tag == 0){
	IPS_RunScript (21629 /*[Funktionen Automatik\N - Sonntag]*/ );}

	Elseif ($schicht == "N" && $Tag >=1 && $Tag <= 5){
	IPS_RunScript (24619 /*[Funktionen Automatik\N - Wochentag]*/ );}

################### Frei / Urlaub ######################################
If ($schicht == "X" && $Tag == 6 or $schicht == "U" && $Tag == 6){
IPS_RunScript (23315 /*[Funktionen Automatik\X_U - Samstag]*/ );}

	Elseif ($schicht == "X" && $Tag == 0 or $schicht == "U" && $Tag == 0){
	IPS_RunScript (54015 /*[Funktionen Automatik\X_U - Sonntag]*/ );}

	Elseif ($schicht == "X" && $Tag >=1 && $Tag <= 5 or $schicht == "U" && $Tag >=1 && $Tag <= 5){
	IPS_RunScript (32305 /*[Funktionen Automatik\X_U - Wochentag]*/ );}
	
################### Frei / Urlaub Abwesend ##############################
If ($schicht == 'XA' or 'UA') {
IPS_RunScript (20128 /*[Funktionen Automatik\XA_UA - Abwesenheit]*/ );}
?>

Wenn das geht, funktioniert die Steuerung schonmal im groben.

Dazu habe ich seit heute einen Fenster-Schalter.
Mit diesem bin ich auch gerade noch absolut auf Kriegsfuß.

Ist ein HM-Sec-SC2, irgendwie kann ich die Variable die aus dem Teil kommt nicht in nem Script weiterverarbeiten bzw. sie scheint leer.
Wollte ein getriggertes Script zur Absenkung bei Öffnung machen (Fenster zu = False) - leider ist die Variable aber leer - hier das Script:

<?
$fenster=GetValueBoolean(17895  /*[Fensterkontakt Schlafzimmer\Fenster offen]*/);

If (17895  /*[Fensterkontakt Schlafzimmer\Fenster offen]*/ == true) {
HM_WriteValuefloat(20904 /*[Thermostat Schlafzimmer]*/,"SET_TEMPERATURE", 6.0);
Echo "Offen!";}

If (17895  /*[Fensterkontakt Schlafzimmer\Fenster offen]*/ == false) {
HM_WriteValuefloat(20904 /*[Thermostat Schlafzimmer]*/,"SET_TEMPERATURE", 18.5);
Echo "Zu!
";}
Echo $fenster
?>

Es kommt trotz Variablenstatus „aus“ (im Objektbaum) - was false entspricht ein Offen! und sonst nichts ($Fenster scheint leer zu sein).
Bin ich zu doof dazu oder wo liegt mein Problem?
Die Suche spuckt leider nur Zeug zu dem „Dreh-Fenster-Schalter“ aus…

(Offenbar :slight_smile: ) dämliche Grüße,

Matthias

Bei der If-Abfrage fehlt das GetValue. Nur die ID allein reicht nicht.

Sent from my iPhone using Tapatalk

Zumindest das sollte wohl so aussehen

 <?
$fenster=GetValueBoolean(17895  /*[Fensterkontakt Schlafzimmer\Fenster offen]*/);

If ($fenster == true) {
HM_WriteValueFloat(20904 /*[Thermostat Schlafzimmer]*/,"SET_TEMPERATURE", 6.0);
Echo "Offen!";}

If ($fenster == false) {
HM_WriteValueFloat(20904 /*[Thermostat Schlafzimmer]*/,"SET_TEMPERATURE", 18.5);
Echo "Zu!
";}
Echo $fenster
?> 

Danke! Funktioniert jetzt!
Wenn ich dann Glück habe, kommt auch schleunigst die CCU2 anstatt des LAN-Moduls und die Ausführung erfolgt sofort und nicht erst wenn das Lüften fertig ist :wink:

Aber zu dem anderen Problem:

Hat jemand eine Ahnung was in dem Schichtwahl-Script falsch ist? Ich sehe nämlich, dass IPS zeitweise innerhalb von 1s für einen Raum zuerst 15°C und dann 21°C schreibt.
Das kann eigentlich nur aus zwei Skripten stammen. Und da diese alle 5min abgearbeitet werden, müssen da zwei gleichzeitig / hintereinander laufen.

BTW:

Guten Rutsch allerseits!

Also hier nochmal wie „gewünscht“ :wink:

Ich wähle über ein Skriptkürzel aus, welches Programm für die Temperatursteuerung geladen werden soll.
Das Kürzel wird jew. um 0:01 in einer Variable geschrieben.

Mögliche Kürzel sind S, F, N, X, U, XA oder UA.
Das Skript führt allerdings IMMER das XA am Ende aus.
Auch wenn heute „S“ aktiv ist.

Habe den letzten Teil nnochmal aktiv gesetzt (ist normal auskommentiert) und das mit dem „Falsch“ rein geschrieben - es wird offenbar mit ausgeführt.

Evtl habe ich da nen Fehler der auch bei den anderen IF-Funktionen vorliegt… Ich sehe jedoch nichts.

<?
$Tag = Date("w");
$Tag1 = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag","Montag");
$schicht=getvaluestring (32749 /*[Funktionen Automatik\Kalender-Check\Schichtzeichen]*/ );


################### Früh ######################################
If ($schicht == "F" && $Tag == 6){
IPS_RunScript (53092 /*[Funktionen Automatik\Schicht-Scripte\F - Samstag]*/ );}

	Elseif ($schicht == "F" && $Tag == 0){
	IPS_RunScript (32452 /*[Funktionen Automatik\Schicht-Scripte\F - Sonntag]*/ );}
	
	Elseif ($schicht == "F" && $Tag >=1 && $Tag <= 5){
	IPS_RunScript (18210 /*[Funktionen Automatik\Schicht-Scripte\F - Wochentag]*/ );}
	
################### Spät ######################################
If ($schicht == "S" && $Tag == 6){
IPS_RunScript (32435 /*[Funktionen Automatik\Schicht-Scripte\S - Samstag]*/ );}

	Elseif ($schicht == "S" && $Tag == 0){
	IPS_RunScript (37550 /*[Funktionen Automatik\Schicht-Scripte\S - Sonntag]*/ );}

	Elseif ($schicht == "S" && $Tag >=1 && $Tag <= 5){
	IPS_RunScript (46468 /*[Funktionen Automatik\Schicht-Scripte\S - Wochentag]*/ );}

################### Nacht ######################################
If ($schicht == "N" && $Tag == 6){
IPS_RunScript (22483 /*[Funktionen Automatik\Schicht-Scripte\N - Samstag]*/ );}

	Elseif ($schicht == "N" && $Tag == 0){
	IPS_RunScript (21629 /*[Funktionen Automatik\Schicht-Scripte\N - Sonntag]*/ );}

	Elseif ($schicht == "N" && $Tag >=1 && $Tag <= 5){
	IPS_RunScript (24619 /*[Funktionen Automatik\Schicht-Scripte\N - Wochentag]*/ );}

################### Frei / Urlaub ######################################
If ($schicht == "X" && $Tag == 6 or $schicht == "U" && $Tag == 6){
IPS_RunScript (23315 /*[Funktionen Automatik\Schicht-Scripte\X_U - Samstag]*/ );}

	Elseif ($schicht == "X" && $Tag == 0 or $schicht == "U" && $Tag == 0){
	IPS_RunScript (54015 /*[Funktionen Automatik\Schicht-Scripte\X_U - Sonntag]*/ );}

	Elseif ($schicht == "X" && $Tag >=1 && $Tag <= 5 or $schicht == "U" && $Tag >=1 && $Tag <= 5){
	IPS_RunScript (32305 /*[Funktionen Automatik\Schicht-Scripte\X_U - Wochentag]*/ );}
	
################### Frei / Urlaub Abwesend ##############################
If ($schicht == "XA" or "UA") {
IPS_RunScript (20128 /*[Funktionen Automatik\Schicht-Scripte\XA_UA - Abwesenheit]*/ );
Echo "FALSCH!";}
?>

…ich seh grad, dass das eigentlich auch funktioniert wie du es schreibst :smiley: …ich glaube es kommt trotzdem auf die Klammersetzung an. Weil wenn du AND und OR verknpüfst weiß er nicht was zusammengehört…

Hier z.B. deine Version wo er vmtl. nicht weiß wie wo was mit wem und wann:


    Elseif ($schicht == "X" && $Tag >=1 && $Tag <= 5 or $schicht == "U" && $Tag >=1 && $Tag <= 5){
    IPS_RunScript (32305 /*[Funktionen Automatik\Schicht-Scripte\X_U - Wochentag]*/ );}

Ich würde es so schreiben:


    Elseif ((($schicht == "X") AND ($Tag >=1) AND ($Tag <= 5)) or (($schicht == "U") AND ($Tag >=1) AND ($Tag <= 5))){
    IPS_RunScript (32305 /*[Funktionen Automatik\Schicht-Scripte\X_U - Wochentag]*/ );}

Und das am Ende bei dir schreib ich normal so: (scheint aber beides zu funktionieren :smiley: )

################### Frei / Urlaub Abwesend ############################## 
If (($schicht == "XA") OR ($schicht == "UA")) { 
    IPS_RunScript (20128 /*[Funktionen Automatik\Schicht-Scripte\XA_UA - Abwesenheit]*/ ); 
} 

Habe nur mal das letzte (wo ja offenbar definitiv der Fehler auftrat!) eingefügt und es scheint soweit zu klappen!
Werde heute Abend mal die anderen ebenfalls ändern.
Ich dachte eigentlich es wäre für IPS logisch, wie die Verknüpfung mit AND und OR läuft.
Wie auch immer - HERZLICHEN DANK :slight_smile:

Freut mich zu hören :slight_smile:

Naja, wenn IPS durcheinander AND und OR vorgesetzt bekommt, dann nimmt er immer die Variablen links und rechts daneben, ist ja quasi wie bei Mathe in der Schule :smiley:

Wenn man aber durch die Klammern genau sagt was wie zusammen gehört, dann kann man sauber mit AND und OR die Variablen abfragen und die IF-Bedinung erfüllen oder eben nicht erfüllen :slight_smile:

Grüße,
Chris

Ich hatte eher vermutet IPS nimmt dann automatisch 1&2 oder 3&4 - die 1/2 bzw. 3/4 hatte ich mit dem AND als fest verknüpft gesehen.
(So wie Potenz vor Punkt und Punkt vor Strich)
Gruß,
Matthias

Kein Plan, wie PHP das regelt…kannst du gerne mal googlen g
…ich mach es lieber weiter mit meinen Klammern, da ist es optisch gut lesbar und die Skripte laufen :slight_smile:

Ich zukünftig auch :wink:

Dann wäre (bezogen auf den original Titel des Threads) nur noch eins offen:

Die CCU2 selbst - die ist aber immer noch nicht da :-/ Ich habe jetzt woanders bestellt und beim ursprünglichen Händler storniert.
Ich hoffe auch sie trifft bald ein - will ja den Lan-Adapter zurück geben.

Daher (habe das allerdings auch woanders gefragt!):

[b]1. Muss ich zum ablernen der Homematic-Geräte vom Adapter in der Homematic-Software einfach nur auf „Löschen“ gehen?
Sagt ELV bzw. EQ3 zumindet hier: http://www.eq-3.de/faq.html?id=88 für die CCU - ist das beim LAN-Adapter gleich?

  1. UND - wichtig! - werden die Komponenten danach an der CCU2 wieder in den IPS-Baum aufgenommen oder muss ich da noch irgendwas machen? (also bleiben die ID’s usw. gleich?)
    [/b]
    Gruß,

Matthias