Status / Rückmeldung?

Hallo,
vielleicht habe ich es bisher übersehen - vielleicht kann mir jemand sagen nach welchem Stichwort ich suchen muss.

folgendes:
Ich habe in einem Raum eine Lampe und einen Lichtsensor(Relaiskontakt auf Eingang).

Wenn ich nun über IPS die Lampe einschalte, möchte ich den Status für die Lampe NICHT emulieren, sondern ich möchte den tatsächlichen Status über den Lichtsensor erfassen. Im Idealfall sollte eine Fehlermeldung kommen, wenn ich das Licht eingeschaltet habe, aber der Lichtsensor sagt, das Licht ist NICHT an.

Wo finde ich diese Funktion und wie heißt sie?

Vielen Dank
stfan

Hi!

Du findest den Punkt „Status emulieren“ an/aus jeweils in der Instanz des Aktor.
status_emulieren.jpg

Edit: Solltest du es was anderes meinen, dann wären ein paar mehr Infos hilfreich :wink:

Grüße,
Chris

Genau. Das emulieren geht bei meiner Lampe. Aber wo kann ich nun meinen Helligkeitssensor einbinden. Irgendwo muss ich IPS doch sagen: frage den Eingang ab ob das Licht wirklich an ist.

Ok, also war ich nicht soooo falsch, wie man hier hinter den Türen unterstellt hat :smiley: :wink:

Zurück zum Thema…
Du hast den Lichtsensor wie im IPS eingebunden? Hast du den Status vom Lichtsensor schon in einer Variable? Welche Hardware im Einsatz?

Wenn du den Lichtsensor als Variable im IPS hast (oder per Skript ansprechen kannst), dann kannst du dir ein IPS-Skript in PHP schreiben, welches beim Licht ein-/ausschalten ausgeführt wird, prüft ob der Lichtsensor Licht erkennt oder nicht und dann entsprechend zurückmelden und die Variable auf true/false setzen.

Grüße,
Chris

Hallo Chris,
ja das wollte ich wissen - also muss ich zur Überwachung ein Skript schreiben. Ich habe den Ausgang und auch den Lichtsensor als Variablen bereits in IPS funktionsfähig. Auf der Webseite kann ich auch ein/ausschalten - nur eben das Zusammenspiel von Status&Sensor scheitert.

Aber noch mal einen Schritt zurück:
Wenn ich den Status emuliere heißt es doch, dass IPS sich den aktuelle Status merkt(wie er sein müsste). Wie ist es denn zu verstehen, wenn der Status nicht emuliert wird?

Zum Hintergrund:
IPS steuert bei mir einen Relaiskontakt, welcher einen Stromstoßschalter schaltet. Der Stromstoßschalter schaltet die Lampe. Parallel kann ich den Stromstoßschalter aber auch mit einem Taster(ohne IPS; fest verdrahtet) schalten(falls die Steuerung defekt ist). Und nun möchte ich über den Sensor den tatsächlichen Status angezeigt bekommen. Und das bei ca. 40 Stromstoßrelais…

Gruß,
stfan

Edit:
Also wenn ich das richtig verstanden habe muss ich ein Skipt schreiben welches z.b. alle 2 sekunden aufgerufen wird und den Lichtsensor abfragt und entsprechend den Status auf „true“ oder „false“ setzt?

Wenn du den Status emulierst, dann ändert IPS die Licht-Status-Variable auf TRUE, wenn du das Licht einschaltest…und geht davon aus, dass das Licht auch eingeschaltet ist (wartet also nicht auf Rückmeldung - wenn der Aktor selbst den Status zurückmeldet). Wenn du den Status nicht emulierst, dann wird die Variable beim Einschalten des Lichts nicht auf TRUE geschaltet, sondern erst durch die Rückmeldung (wenn der Aktor selbst den Status zurückmeldet - z.B. bei HomeMatic).

Da man Status-Variablen (in dem Fall die von deiner Lampe) nicht schreiben, sondern nur lesen kann, bräuchtest du für jede Lampe eine Hilfsvariable (bitte korrigiert mich, wenn ich hier falsch liege). Diese Hilfsvariablen würdest du ins WebFront verlinken und darüber die Lampen schalten. Diese Variablen brauchen dann unter „Eigene Aktion“ ein Skript von dir. In diesem wird dann jeweils der Befehl für Licht an bzw. aus gesendet, dann einen kleinen Moment gewartet und dann die Lichtsensor-Variable abgefragt. Meldet der Lichtsensor Licht-AN, dann wird die Variable auf TRUE gesetzt und andersrum.

Skript-Beispiel (dieses Skript als eigene Aktion bei der Hilfsvariable eintragen, es wird aufgerufen, wenn du im WebFront auf die Hilfsvariable drückst, um das Licht zu schalten):

<?
$LichtsensorVariable = 12345;  // Hier die ID der zugehörigen Lichtsensor-Variable eintragen (in der der Status steht)
if (GetValue($LichtsensorVariable) === true)
{
	//Befehl für Licht AUS
	IPS_Sleep(250); // 250ms warten
	if (GetValue($LichtsensorVariable) === false)
	{
		SetValue($_IPS['VARIABLE'], false);
	}
	else
	{
		IPS_LogMessage("LICHT", "FEHLER - Das Licht wurde nicht ausgeschaltet");
	}
}
else
{
	//Befehl für Licht AN
	IPS_Sleep(250); // 250ms warten
	if (GetValue($LichtsensorVariable) === true)
	{
		SetValue($_IPS['VARIABLE'], true);
	}
	else
	{
		IPS_LogMessage("LICHT", "FEHLER - Das Licht wurde nicht eingeschaltet");
	}
}
?>

Ich hoffe du konntest mir soweit folgen. Ist sehr theoretisch beschrieben und das Beispiel nur aus dem Kopf gebastelt, aber hoffentlich nachvollziehbar und du kannst darauf aufbauen :slight_smile:

Grüße,
Chris

Vielen Dank für deine ausführliche Erklärung.
Ich werde es am Wochenende ausprobieren.

Schade dass man die Statusvariable nicht schreiben kann…

Wann wird das Skript ausgeführt? Bei mir müsste es ja bei Variablen-ÄNDERUNG gestartet werden, da man das Licht ja auch ohne IPS schalten kann.

Gruß
stfan

Wie gesagt, alles sehr theoretisch und so aus der Ferne schwer von A bis Z zu durchdenken :slight_smile: Das Skript würde nur ausgeführt werden, wenn man die Variable im WebFront bedient. In dem Fall wäre es dann wohl sinnvoller mit Events zu arbeiten, welche auf Variablenänderung triggern. Am Besten einen Test-Aufbau machen und alles mal durchspielen :slight_smile:

Grüße,
Chris

Hallo Chris,
ich habe mir das viel zu kompliziert gedacht. Ich habe einen „PoKey 57E“ zum testen über Modbus angeschlossen.
Hier kann ich Schreib UND Leseadresse verschieden festlegen. Es funktioniert genauso wie ich es haben möchte.
Auf die Schreibadresse kommt mein Ausgang mit Stromstoßschalter und auf die Leseadresse lege ich meine Rückmeldung vom Sensor. Vorraussetzung ist allerdings das beide Adressen auf der selben „übergeordneten Instanz“ sind, aber das sollte machbar sein.

Wie kann ich es erreichen, dass der Ausgang nicht dauerhaft gesetzt wird sondern nur für ca. 1 Sekunde(ich habe ja ein Stromstoßschalter am Ausgang)?

Gruß und vielen Dank,
stfan

So kannst Du es nicht mit Stromstoßrelais machen.

Erstelle 2 Modbus Instanzen, eine für ADR44, (schreiben,verstecken) und eine für den Eingang (nur lesen,sichtbar)

Eine Integervariable mit eigenem Profil, der weist Du ein Aktionsscript zu, welches lautet:

  <?
if ($IPS_SENDER == "WebFront") {
$Wert=GetValueBoolean(23673 /*[Pokeys_Test\Pokeys250_Stromstoß TEST\Adresse 44 Pokeys ARD250 ModBus Device\Wert]*/);
ModBus_WriteCoil(50882 /*[Pokeys_Test\Pokeys250_Stromstoß TEST\Adresse 44 Pokeys ARD250 ModBus Device]*/,true);
IPS_Sleep(1000);
ModBus_WriteCoil(50882 /*[Pokeys_Test\Pokeys250_Stromstoß TEST\Adresse 44 Pokeys ARD250 ModBus Device]*/,false);
}
?> 

Die Bilder sagen den Rest, geht sicher auch anders, bin kein PHP-Könner.
Gruß Helmut

Hallo Helmut, das Aktionsscript war der entscheidende Hinweis!

Es funktioniert:

  1. Instanz hinzufügen: Schreibadresse=Ausgang_für_Stromstoßrelais; Leseadresse=Eingang_von_Rückmeldung
  2. der Instanz ein Skript hinzufügen und darin die ID von der Instanz setzen, warten, rücksetzen
  3. Variable editieren und Skript als „Eigene Aktion“ auswählen
  4. Variable als Link auf die Weboberfläche

siehe Bilder

gruß, stfan

2aktion.JPG3skript.JPG4web.JPG

Bei meiner Version hatte ich darauf geachtet, dass Du einen Taster in der Webfont hast und die Rückmeldung von Eingang 1, mehr nicht.

Ob extern getastet wurde bzw. ob die Leuchte an ist, zeigt dann der Eingang 1.

Das dürfte in Deiner Version nicht gehen, denn Du kannst auf ein Modbus-Valuewert nicht schreiben.

Gruß Helmut

Doch das geht.
Du kannst auch einer Statusvariable ein eigenes Aktionsskript hinterlegen.
Damit ist automatisch jede andere Standardaktion deaktiv.
So dass er jetzt mit Ein/Aus aus dem WF den Tastimpuls senden kann, und die Variable erst umspringt wenn die Leseadresse wirklich auch den neuen Wert überträgt.
Michael

Aha, muß ich gleich mal testen :wink:
Gruß und Danke

In meiner Version ist es egal ob auf der Weboberfläche „An“ oder „Aus“ angeklickt wird. Es wird IMMER das Skript gestartet, welches erst den Ausgang setzt und nach 1 Sekunde wieder zurücksetzt. D.h. der Stromstoßschalter wird jedesmal betätigt und ändert so seinen Zustand - genauso, wie wenn der Stromstoßschalter vom hardwaremäßigen Taster angesteuert wird, der parallel ohne IPS angeschlossen ist.

Der Zustand wird und abhängig vom klicken angezeigt(es ist ja ein seperater Eingang).

juhu, der Abend ist gerettet :wink:

Joo, funktioniert, das muß ich gleich mal in meiner Steuerung umbauen.

So’ne autarke Pokeyssteuerung mit Stromstoßrelais ist was feines, hat mich Markus alias Borastoni drauf gebracht :wink:

Der WAF kann eigentlich nie auf Null gehen, Handsteuerung geht immer, Pokeys Dashboard und die Webfront von IP-Symcon ist der Luxus :wink:

Wenn man(n) jetzt noch die Zeit, wie lange der Mauszeiger auf dem Button drückt, ermitteln könnte, dann würde ich die Eltakodimmer noch verwenden können.

Vielleicht habt ihr da auch noch einen Tipp für mich?

Gruß Helmut

@Helmut
gehört nicht zum Thema,
aber hast du an den PoKey über I2C einen PCF8574 (Portexpander) angeschlossen bzw weist du wie das geht? Als Sensor kann man den ja leider nicht auswählen… Weißt du, ob es da noch eine andere Möglichkeit gibt?

gruß, stfan

Nee, aber ich habe einen „Portexpander“ wie im Pokeys-PDF als Platine, kann 32 Relais über ULN-Bausteine treiben, guggst Du:

Dass ich eine neue 24-fach In/Out-Platine habe weißt Du? Kannst Du auch hier sehen.

Bild ist unscharf, setze ich noch in Wordpress besser rein, man sieht oben und unten die Löcher für die Relais-Schraubanschlüsse, links den ExPort-Anschluß vom Pokeys.
Gruß Helmut

Hallo Helmut,
Die 28*230V sieht interessant aus. Ich arbeite gerade an so einer Lösung. Was verbraucht die Karte pro Kanal? Und welche Abmessungen hat die Karte?
Gruss stfan

Habe ich nicht gemessen, mir war es wichtig keine Wärme zu erzeugen, deshalb der Kondensator als Vorwiderstand.

Edit: Größe ist Hut 9c

Gruß und guten Rutsch
Helmut