Woher kommt der Schaltbefehl?

Hallo da draussen,

ich habe hier einen Homematic-Schaltaktor, der sich jede Nacht ausschaltet.
Weder in irgend einem Homematic Skript, noch in eine Skript in Symcon finde ich den Befehl dazu.
Kann man irgendwie herausbekommen (z.B. per Skript), woher der Schaltbefehl kommt?

Danke schon mal für die Hilfe,

Andreas

Moin.

Den Wunsch, dass man den Urheber einer Schaltaktion ermitteln kann hatte ich vor Urzeiten auch schon einmal geäussert. Ich fände es sinnvoll wenn das IPS-LOG da etwas aussagekräftiger wäre und man solche Angaben über Spezialschalter aktivieren könnte.

Ja, das wäre klasse.

In meinem Falle habe ich den Fehler gerade gefunden.
Es war ein falsch zugeordneter Schaltkanal.

Hi, ich mache das folgendermaßen… ich habe ein Helper-Script, das ich in JEDEM Script per Include als erste Stelle einfüge. Da drin wird automatisch $_IPS[‚SENDER‘] geloggt (bei mir über verschiedene Wege) auf verschiedenen Leveln… Debug, Info usw. und jede Info ist halt so einer Kategorie zugeordnet. Abhängig davon wie mein Loglevel dann zentral gesetzt ist wird das nun geloggt oder nicht. Das hilft bei der Fehlersuche ungemein und ich muss mir keinen Kopf darüber machen, weil es überall drin ist.

Das ist wirklich eine sehr interessante Möglichkeit, die ich jetzt auch einsetzen werde. Habe in ca. 95% meiner Scripte eine tools.php uncluded, die meine ganzen Funktionen beinhaltet. Dort werde ich das auch einbauen.

@ Hagbard235 Könntest du vielleicht noch etwas detaillierter beschreiben, wie du mit den Kategorien gelöst hast?

Hi,

also bei sowas mache ich ein Rechtsklick auf dem Kanal und lasse mir die referenziernde Objekte anzeigen.

viel schneller kommt man doch dem Übeltäter nicht auf die Spur?

Viele Grüße

Mittlerweile bin ich auf eine neue Frage gestoßen, die meinen Wunsch, herauszufinden, woher der Schaltbefehl eines Aktors kam, noch größer macht.

Kann man irgendwie feststellen, ob Schaltaktoren mit eingebauter Schalterwippe (UP-Jalousien- oder Rolladenaktoren oder Lichtschaltern) ihren Schaltbefehl durch die Schalterwippe oder ein PHP-Skript bekommen hat?

Hintergrund dafür ist, dass ich hier an einigen Terassentüren Jalousien habe, die skriptgesteuert ganz herunterfahren. Vorher wird ermittelt, ob die Tereassentür offen ist, dann fährt die Jalousie nur etwa zu einem drittel herunter und die gewünschte Endlage (ganz unten) wird zwischengepseichert. Wird die Terassentür geschlossen, wird dann automatisch in die gepsicherte Endelage heruntergefahren.
Sollte die Jalousie jedoch zwischenzeitlich über die Schalterwippe manuell wieder hoch gefahren worden sein, soll die vorher gewünschte Endlage gelöscht werden.

Moin.

Das ist eher eine Frage des Schaltaktors ob er die Daten diesbezüglich zur Verfügung stellt. IPS kann da ja nicht in eine Glaskugel sehen um herauszufinden, ob der Aktor am Aktor selbst betätigt wurde oder nicht. Du könntest höchstens prüfen ob ein Schaltbefehl von einem IPS-Skript ausgelöst wurde. Wenn nicht muss - laut Sherlock Holmes leicht abgewandelter Regel - als letzte Möglichkeit die Betätigung am Aktor selbst übrig bleiben.

Ja, so ähnlich habe ich mir das letztendlich dann auch gedacht, stosse dabei leider ein wenig an die Grenzen meiner Programmierkenntnisse.
Wie ermittle ich, ob ein Programm den Schaltbefehl angefordert hat? Meine Idee wäre, dass ich in Skript habe, dass bei der Änderung des Schaltzustandes meiner Jalousienmodule (HM-LC-Ja1PBU-FM, der stellt keine Daten zur Verfügung) durch ein Event gestartet wird. In diesem Falle komme ich, wenn ich mich da nicht vertue, mit dem Auswerten über $_IPS[‚SENDER‘] nicht weit, da dieser ja vermutlich immer das auslösende Event ist. Oder gibt es hier eine andere Möglichkeit die mir noch nicht bekannt ist?

Derzeit sehe ich vier Möglichkeiten, wie eine Jalousiefahrt ausgeführt wird:

  1. Durch Betätigen der Schaltwippe (Das wäre dann ein Fall, bei dem die Prüfung, ob ein IPS-Skript der Schaltverursacher war, fehlschlagen würde)
  2. In IPSView oder Webfont durch antippen eines bestimmten Wertes, der direkt (also nicht durch ein Skript) an den Aktor übergeben wird (das wäre der andere Fall, bei dem die Prüfung, ob ein IPS-Skript der Schaltverursacher war, fehlschlagen würde)
  3. Durch ein Script auf der Homematic CCU. Hier allerdings kann ich schon im Skript entsprechend handeln
  4. Durch ein IPS-Skript. Auch hier kann ich im Skript entsprechend handeln

Für einen Tipp, der mich in die richtige Richtung schubst, wäre ich offen und dankbar

Du siehst doch über die Referenzierung welche Skripte von IPS aus den Aktor triggern können. Und diese Skripte musst Du auf den letzten Ausführungszeitpunkt prüfen. Das sollte von der Anzahl her überschaubar sein. Und Du kannst Dir doch ein eigenes Actionskript bauen und dem Aktor zuweisen. Damit solltest Du die Bedienung über den Webfront/IPSView auch abfragen können.

Ha! Ja! Genau so einen Schubs meinte ich! :grinning:
Vielen Dank.
Damit werde ich mal experimentieren.

Immer gerne. Lass es uns wissen wie Du das gelöst hast,

das passt hierzu vielleicht nicht so 100% mit den Kategorien… dadurch das ich „alles mögliche“ protokolliere bzw. mir auch als Nachricht sende, hab ich halt 2 (eigentlich 4) Kategorien angelegt: Info, Debug, Error und Message.

bei Info logge ich alles raus was interessant sein könnte ohne extrem viel zu werden… (einschalten vom Belüftungsbypass, Tür öffnen, Garage öffnen etc.), also Sachen die Interessant sein könnten, wenn man einfach so ein bisschen sehen will was passiert… Marke Neugier…

bei Debug logge ich möglichst viel: jeden Script-Aufruf inkl. Aufrufer, bestimmte Variablen-Veränderungen, Status von Verbindungen egal ob gut oder schlecht etc…

bei Error natürlich jegliche Fehlermeldungen, also jede kaputte Verbindung, jede leere Batterie, jeden Aktor der nicht erreicht wird… alles was „nicht normal“ ist

bei Message alles was ich zur Benachrichtigung verwende: es hat geklingelt, Waschmaschine ist fertig…usw usw.

nur bei den ersten beiden hab ich eine Boolean-Variable die ich abfrage, also nur wenn Info=true schreibe ich es raus… so kann ich bequem durch verändern der 2 Variablen die Protokoll-Flut steuern… dann hab ich noch Zusatzschalter die steuern ob es nur in eine Log-Datei geht oder auch auf Handy gepusht wird etc.

Error und Message haben keinen Schalter, die sollen ja immer kommen.

Das ist halt meine eigene „Lösung“ mein kleine Framework für Protokolle/Überwachung was ich mir mal aufgebaut habe, hat aber mit deinem Problem jetzt nur am Rande zu tun, Debug beinhaltet halt den Script-Aufruf und einige System-Variablen, womit ich i.d.R. die Frage: Woher kommt der Schaltbefehl? beantworten kann, aber nur wenn es durch IPS läuft… war es in einem Sub-System selber (innerhalb von HM z.B.) bekomme ich ja nur die Veränderung mit

ich hab jetzt lange tatsächlich keinen HM-Schalter der gleichzeitig Aktor ist mehr verwendet… aber man kann doch dort auch die einzelnen Tasten „erkennen“ das sie gedrückt wurden oder nicht? Ich habe etwas ähnliches im Eltako-System… dort schaltet der Funk-Taster auch direkt den Aktor, aber in IPS bekomme ich das mit und kann darauf reagieren (z.B. sofort einen Stopp hinterher schicken, wenn ich ein Rollo „gesperrt“ habe). Im Zweifel musst du es wohl über einen virtuellen Kanal in HM machen, also den Taster auch noch mit einem virtuellen Kanal verknüpfen und auf den abfragen, dann weisst du ob es die Taste war die gedrückt wurde.

Ja, wenn die Taster irgendwie abgefragt werden könnten, wäre es wunderbar einfach (ist glaube ich beim Homematic IP System möglich).
Leider ist dem nicht so, nur der Aktor selbst weiß, wenn eine Taste gedrückt wurde und hält dies „geheim“.

Derzeit bin ich, dank kronos Hilfe, ein wenig weiter.
Schaltbefehle durch IPSView oder Webfront kann ich durch ein Aktionsskript erkennen.
Schaltbefehle durch Skripte erkenne ich durch die letzte Ausführung dieser Skripte
So müsste nun alles, was ich nicht erkenne, eine Tastendruck der Schaltwippe sein.

du kannst doch im HM dem Taster noch einen virtuellen Schaltkanal hinzufügen oder nicht? Dann weisst du das es der Taster war

Hm, ich stehe wohl etwas auf dem Schlauch.
Natürlich kann ich einen virtuellen Schalter der CCU nutzen.
Aber auch dieser virtuelle Schalter muss doch eine Information bekommen, ob ich auf die Schaltwippe drücke (also manuell einen Finger auf den Knopf). Und gerade diese Information liegt auf keinem Datenpunkt und ist nicht abrufbar.

Wenn ich das alles nur falsch verstehe, dann wäre ich dankbar für einen „virtueller Schaltkanal für Dummies“ (eine Schritt für Schritt Anleitung), falls du dafür Zeit und Lust hast.

ich kann es leider gerade aktuell tatsächlich nicht nachstellen, weil ich keinen Licht- oder Jalousie-Aktor mit Taster dran bei mir im System habe. Ich habe aber, ist schon eine Weile her, auf einen Rollo-Taster neben dem eigentlichen Rollo noch eine 2. Funktion gelegt (also wenn Rollo-Taste runter, dann auch virtueller Schaltkanal x setzen) über eine Verknüpfung zwischen der Taste und dem Kanal.

Ich habe das jetzt mit meinem Handtuchheizkörper-Thermostat nachgestellt, also den Taster da drauf (eigentlich für die Boost-Funktion) mit einem virtuellen Kanal verknüpft und den (nur den) in IPS abgefragt. Wenn der gesetzt ist, war es der Taster… also hab den Auslöser (Taste) und nicht das Ergebnis (Bosst-Funktion ist an) verwendet. mmh, wird so klarer was ich meine?

Danke für diese Beschreibung.
Leider ist das für den Jalousienaktor nicht anwendbar, da die Taster nicht verknüpft, ja nicht einmal abgefragt werden können. Ich bastel mir also irgend etwas drumherum.