Frage zu Variable und Tipps

Ich bin nach wie vor Beginner und wühle mich durch die Hilfe, die Wiki, die Doku und das Forum und trotzdem habe ich Fragen, die ich noch nicht beantwortet bekommen habe.

  1. Wo finde ich eine Homematic Befehltsreferenz? Also alle Begriffsdefinitionen, mit denen ich die Homematic-Komponenten abfragen und steuern kann? In der Doku stehen meines Wissens nicht alle drin. Zumindest habe ich hier in dem einen oder anderen Beitrag Befehle gesehen, die nicht in der Modulreferenz enthalten sind? Hier wäre ich für einen Tipp dankbar.
    Hinweis diesen Link habe ich schon berücksichtigt:
    http://www.ip-symcon.de/forum/threads/6234-Script-Library-Sammlung-und-nützliche-Anleitungen

  2. Ich möchte eine Variable abfragen. Nun habe ich gelernt, dass ich das folgender Maßen machen könnte:

<?
$id_Taster_kurz = 17586 /* Taster 2 kurz]*/;
$id_Taster_lang = 34791 /* Taster 2 lang]*/;
$var_taster = GetValue(17586 /*[Erdgeschoss\Wohn-/Kochbereich\Steckaktor Wohnzimmer\]*/);
$wert = getvalue (34791 /*[Erdgeschoss\Wohn-/Kochbereich\Steckaktor Wohnzimmer\]*/);
echo $id_Taster_kurz;
echo chr(13);
echo $id_Taster_lang;
echo chr(13);
echo $var_taster;
echo chr(13);
echo $wert;
?>

Als Ergebnis bekomme ich aber:
17586 34791 1 1

Ich hätte aber statt den beiden letzten „1“ den Ausdruck „true“ erwartet!
Und ich hätte in der Skriptausgabe einen Zeilenvorschub erwartet!

Mache ich hier was falsch?

Ich möchte eigentlich nur den Status der Variablen eines 12-fach-Schließerkontakts und eines 12/7fach I/-Moduls abfragen:

Ferner iritiert mich dass der Schließer im offenen Zustand „true“ angibt und nicht „false“. Kann mann das irgendwo definieren?

Mein Ziel ist es einen Schließerkontakt abzufragen und sobald er geschlossen ist für eine bestimmte Zeit bestimmte Aktoren einzuschalten. Eigentlich ganz einfach, aber für mich als Neuling eine echte Herausforderung, weil alleine das Zusammenbasteln von Code-Schnipseln schon komplex ist für mich… noch … :slight_smile:

  1. Gibt es ein paar hilfreiche Seiten, um ein paar phph-Grundlagen speziell für die Skripterstellung in ip-symcon zu erhalten? Die meisten Seiten, die ich mir zusammengesucht habe sind meistens auf Homepage-Erstellung spezialisiert.

Wenn allg. meine Fragen hier schon mal behandelt worden sein sollten, dann bitte ich um einen Link zum Thread, denn ich habe leider nichts finden können, vielleicht habe ich auch unpassende Suchbegriffe verwendet, von daher bitte ich um Nachsicht und danke im Voraus.

Im Skript Editor STRG-SPACE drücken. Kommen alle Funktionen. Wenn Du erst „hm“ tippst und dann SRG-Space kommen alle HM Funktionen.

1 steht für true, 0 für false.

http://php.net/manual/de/language.types.boolean.php

If ($boolsche_var == 1) {
mach was
}

funktioniert, genauso aber auch If ($boolsche_var == true) {

Super! Danke für den Tipp!!!

Also kann ich sowohl „1“ als auch „true“ abfragen!! Wieder was gelernt!

Das funktioniert auch, nur warum sind bei mir die „Press_short“ und „Press_long“ immer auf true. Mein Skript wirft immer die 1 zurück, obwohl nicht gedrückt wurde. Muss ich bei IP-Symcon noch einstellen, wie oft er die Instanzen abfragt? Ich dachte die Meldung käme in Echtzeit!

Ja, die Variablen werden automatisch gesetzt. Prüfe mal, wie sie auf der Homematic Seite dargestellt werden. Vielleicht ist noch etwas falsch angeschlossen.

Oder ist es dein erstes Homematic Device? Dann kann IPS vielleicht noch nicht richtig darauf zugreifen-> Ports überprüfen

Viele Grüße

Burkhard

PS: mit "
" bekommst du einen Zeilenvorschub

Die Taster stehen immer auf true nach dem ersten Tastendruck, welchen IPS mitbekommt.
Bei jedem Tastendruck wird nur die Variable wieder neu auf true gesetzt, was du am Zeitstempel der Variable erkennst.
Also nicht im Script abfragen, sondern das Script über Variablenaktualisierung triggern.
Und Tastereingänge können keine Zustände ob offen oder geschlossen melden, dass liegt aber in der Logik von Homematic und nicht an IPS.
Michael

Kannst du mir das näher erklären? Ist das ein eigener Befehl in IPS oder muss ich das Skript dann anders aufbauen. Ich versuche gerade danach was über sie Suchfunktion zu finden…

Hat sich erledigt, ich hab es gefunden… „Auslösendes Ereignis in IPS“…

So nun habe ich mir mit dem neu Erlernten etwas zusammengebastelt. Leider hänge ich jetzt noch wieder an einer Varaible, von der ich meine, dass ich sie warscheinlich an einer falschen Stelle auslese.
Ich möchte mit nachfolgendem Skript über einen Skripttimer bestimmte Aktoren anschalten und wieder aus. Das klappt soweit auch, nur der Dimmer macht mir Probleme. Bei ihm möchte ich, dass er nach dem Hochfahren auf 100 % wieder runter fährt auf seinen zuvor ursprünglichen Wert. Dazu habe ich die Variable „$var_Dimmer_Kamin_Level_Ursprungswert“ definiert. Sie wird auch richtig befüllt, nur wird der Dimmer nach Ablauf der Timeraktion nicht in seinen ursprünglichen Level zurückgefahren sondern bleibt dort stehen.

Wo mache ich meinen Denkfehler?

<?
$id_Taster_kurz = 36681 /* I/O-Modul Taster 1 kurz*/;
$id_Taster_lang = 24916 /* I/O-Modul Taster 1 lang*/;
$id_Aktor_Flurlicht = 30633 /* Licht Flur 1 Aktor in Decke */;
$id_Dimmer_Kamin_Level = 41187 /* Dimmer am Deckenfluter Wohnzimmer */;
$id_Dimmer_Kamin = 48187 /* Dimmer am Deckenfluter Wohnzimmer */;

$var_taster_kurz = GetValue($id_Taster_kurz);
$var_taster_lang = GetValue($id_Taster_lang);
$var_Dimmer_Kamin_Level_Ursprungswert = GetValue($id_Dimmer_Kamin_Level);

echo "ID Taster_kurz :";
echo $id_Taster_kurz;
echo "
";
echo "ID Taster_lang :";
echo $id_Taster_lang;
echo "
";
echo "ID Aktor_Flurlicht :";
echo $id_Aktor_Flurlicht;
echo "
";
echo "ID Dimmer_Kamin :";
echo $id_Dimmer_Kamin;
echo "
";
echo "ID Dimmer_Kamin_Level :";
echo $id_Dimmer_Kamin_Level;
echo "
";
echo "Var Dimmer_Kamin_Level_Ursprungswert :";
echo $var_Dimmer_Kamin_Level_Ursprungswert;
echo "
";
echo "Var_Taster_kurz ";
echo $var_taster_kurz;
echo "
";
echo "Var_Taster_lang ";
echo $var_taster_lang;
echo "
";
if ($id_Taster_kurz==true)
{
	if($_IPS['SENDER'] == "TimerEvent")
	{
   	 //Aus Befehl
  		HM_WriteValueBoolean(31362 /*[Kellergeschoss\Technikraum\4-fach-Aktor\4-fach-Aktor-Kanal-1]*/, "STATE" , false); /* Testaktor - fällt später weg */
  		HM_WriteValueBoolean($id_Aktor_Flurlicht, "STATE" , false);
		$var_Dimmer_Kamin_Level_Ursprungswert = GetValue($id_Dimmer_Kamin_Level);
		HM_WriteValueFloat($id_Dimmer_Kamin , "LEVEL" , $var_Dimmer_Kamin_Level_Ursprungswert); // Dimmaktor
  		echo "Dimmer_Kamin_Level_Schaltzustand aus: ";
		echo GetValue($id_Dimmer_Kamin_Level);
		echo "
";

		 //Timer ausschalten
   	IPS_SetScriptTimer($_IPS['SELF'], 0);
	}
	else
	{
   	//An Befehl
 		HM_WriteValueBoolean(31362 /*[Kellergeschoss\Technikraum\4-fach-Aktor\4-fach-Aktor-Kanal-1]*/, "STATE" , true);
    	HM_WriteValueBoolean($id_Aktor_Flurlicht, "STATE" , true);
		$var_Dimmer_Kamin_Level_Ursprungswert = GetValue($id_Dimmer_Kamin_Level);
		HM_WriteValueFloat($id_Dimmer_Kamin , "LEVEL" , 0.1); // ID des Aktors
      echo "Dimmer_Kamin_Level_Schaltzustand ein: ";
		echo GetValue($id_Dimmer_Kamin_Level);
		echo "
";

    	//Timer anschalten
    	IPS_SetScriptTimer($_IPS['SELF'], 7);
	}
}
?>

So auf die Schnelle:
Du mußt den Ursprunswert in einer eigenen IPS Variable zwischenspeichern mit SetValue.
Scripte verwerfen nach dem Ausführen alle PHP Objekt und Variablen.
Michael

So, ich habe dank Eurer Hilfe und der Suche in diesem Forum mein erstes eigenes Skript zusammengestellt. Es macht nichts Wildes: Es schaltet diverse Aktoren (Lampen) für eine best. Zeit ein, wenn ein Schließerkontakt betätigt wird. Für mich war es aber auch nicht mal eben so geschrieben. Aber man wächst mit seinen Aufgaben. Für alle die genauso am Anfang stehen wie ich, möchte ich hier das Skript in diesen Thread veröffentlichen, vielleicht hilft es den Anfängern weiter. Es geht mit Sicherheit noch eleganter und Verbesserungsvorschläge (aber bitte mit Erklärung) sind gerne willkommen.

Also noch mal DANKE!


<?
/* Skript schaltet die angegebenen Aktoren und Dimmer auf die eingestellten
 Werte ein und nach Ablauf der Zeit wieder auf die Ursprungswerte zurück */
$id_Taster_kurz = 36681 /* I/O-Modul Taster 1 kurz*/;
$id_Taster_lang = 24916 /* I/O-Modul Taster 1 lang*/;
$id_Aktor_Flurlicht = 30633 /* Licht Flur 1 Aktor in Decke */;
$id_Dimmer_Kamin_Level = 41187 /* Dimmer am Deckenfluter Wohnzimmer */;
$id_Dimmer_Kamin = 48187 /* Dimmer am Deckenfluter Wohnzimmer */;
$id_Aktor_Zwischenstecker = 18329 /* Zwischenstecker*/;
$var_taster_kurz = GetValue($id_Taster_kurz);
$var_taster_lang = GetValue($id_Taster_lang);
$ips_var_Level_alt = GetValueFloat($id_Dimmer_Kamin_Level); /* Schreibt den aktuellen Dimmwert des Dimmers in die Variable*/
if ($id_Taster_lang==true)
{
	if($_IPS['SENDER'] == "TimerEvent")
	{
   	 //Aus Befehl
      $ips_var_Level_Ursprung = GetValueFloat(20353 /*[Skripte\Runtime\Dimmwertursprung]*/); /* Schreibt den Wert der externen Variable "Dimmwertursprung" in diese Variable*/
      HM_WriteValueFloat($id_Dimmer_Kamin, "RAMP_TIME",  4);     // 4 Sekunden Rampe
		HM_WriteValueFloat($id_Dimmer_Kamin , "LEVEL" , $ips_var_Level_Ursprung); /* Dimmaktor_Kamin */
		HM_WriteValueBoolean(31362 /*[Kellergeschoss\Technikraum\4-fach-Aktor\4-fach-Aktor-Kanal-1]*/, "STATE" , false); /* Testaktor - fällt später weg */
  		HM_WriteValueBoolean($id_Aktor_Flurlicht, "STATE" , false); /* Aktor_Flurlicht */
  		HM_WriteValueBoolean(32847 /*[Kellergeschoss\Technikraum\CCU\Virtuelle Taste 2 in der CCU]*/ , "PRESS_SHORT", true); /* Drückt virtuelle Taste 2 in der CCU um Blinker auszuschalten */
 		 //Timer ausschalten
   	IPS_SetScriptTimer($_IPS['SELF'], 0);
	}
	else
	{
   	//An Befehl
		SetValueFloat(20353 /*[Skripte\Runtime\Dimmwertursprung]*/, $ips_var_Level_alt); /* Schreibt den aktuellen Dimmwert aus der Variable $Level_alt in die externe Variable "Dimmwertursprung" */
		HM_WriteValueFloat($id_Dimmer_Kamin , "LEVEL" , 0.95); /* Dimmaktor_Kamin */
	 	HM_WriteValueBoolean(31362 /*[Kellergeschoss\Technikraum\4-fach-Aktor\4-fach-Aktor-Kanal-1]*/, "STATE" , true); /* Testaktor - fällt später weg */
    	HM_WriteValueBoolean($id_Aktor_Flurlicht, "STATE" , true); /* Aktor_Flurlicht */
      HM_WriteValueBoolean(25991 /*[Kellergeschoss\Technikraum\CCU\Virtuelle Taste 1 in der CCU]*/ , "PRESS_SHORT", true); /* Drückt virtuelle Taste 1 in der CCU um Blinker einzuschalten */
		HM_WriteValueString($id_Aktor_Zwischenstecker, "ON_TIME", 45); /* Schaltet Zwischenstecker für X Sekunden ein */
    	HM_WriteValueBoolean($id_Aktor_Zwischenstecker, "STATE", true); /* Schaltet Zwischenstecker */

		//Timer anschalten
    	IPS_SetScriptTimer($_IPS['SELF'], 3*60); /* Schaltet den Timer für x mal 60 Sekunden ein */
	}
}
?>