Ich habe ein Script, welches einen HomeMatic-Aktor ausliest, und aus den Einschaltzeiten un der bekannten Leistung des Verbrauchers einen Verbrauch errechnet. Das Script lief eine Zeitlang (unter 3.x) gut, aber irgendwann nicht mehr. Vermutlich geht es seit der Umstellung auf die 4.0 nicht mehr. Heute kümmere ich mich endlich darum.
Wenn ich das Script ausführe bekomme ich folgende Fehlermeldung:
Notice: Undefined index: EVENT in /Library/Application Support/Symcon/scripts/53663.ips.php on line 13
Warning: Ereignis #0 existiert nicht in /Library/Application Support/Symcon/scripts/53663.ips.php on line 13
Warning: Instanz #0 existiert nicht in /Library/Application Support/Symcon/scripts/53663.ips.php on line 16
Durch ausführen des Scriptes wirst du das so nicht nachstellen können.
Da ‚EVENT‘ dann nie gesetzt ist.
Sondern nun dann, wenn das Script auch durch ein Ereignis ausgeführt wird.
Also entweder ein paar echo oder IPS_LogMessage einbauen und unter Meldungen ansehen was da so passiert.
Oder alternativ $_IPS[‚EVENT‘] mal im Script (zum testen) auf die ID eines Ereignisses festnageln.
$_IPS['EVENT']= 12345 /* Mein Event was das Script aufruft*/;
Hallo Michael, danke für Deine Antwort.
Leider verstehe ich das nicht was Du schreibst, mir fehlt der Hintergrund dafür. Ich habe nur rudimentäre Programmierkenntnisse, und ich weiß nicht was in diesem Script abläuft. Ich habe damals entweder eine Vorlage gehabt und sie angepasst, oder mir hat jemand geholfen es zu erstellen.
Mein Script lief früher aber mal. Dass es heute nicht mehr läuft kann nach meinem Verständnis eigentlich nur daran liegen, dass irgend eine Funktion in IPS geändert wurde.
Dann ist aber eine Beta-Version zu testen schon sehr grenzwertig
Nicht nur das ganze Script. Da es ja u.a. Daten aus dem verschiedenen Objekten (wie den Ereignissen) ausließt, braucht es auch den oder die betreffenden Bereiche aus dem logischen Baum als Screenshot.
Es gibt leider keine andere Möglichkeit es unter OS X laufen zu lassen als die Beta. Daher habe ich nicht die Wahl.
Ich hatte es erst unter Windows in Parallels laufen, jedoch gab es immer wieder Probleme sowohl mit Windows, als auch mit Parallels. Außerdem hat es erheblich Ressourcen meines Servers verbraucht. Das war auf Dauer keine Lösung.
War es vielleicht mal das Thema hier ?
Ja, das scheint es zu sein. Dort ist ja auch das Script auch schon.
Weil dann hättest du die Frage auch dort stellen können.
Ja, das stimmt. Kann man die Beiträge irgendwie dorthin verschieben? Soll ich sie dort noch mal posten?
Nee… nun lass uns erstmal raus finden ob IPS4 Problem oder was anderes das Problem ist
Verschieben kann man es dann immer noch.
Das Script dort ist ja auch nicht zu 100% deines, du hattest es ja angepasst.
Michael
Array
(
[SELF] => 53663
[THREAD] => 3
[SENDER] => Execute
)
Notice: Undefined index: EVENT in /Library/Application Support/Symcon/scripts/53663.ips.php on line 13
Warning: Ereignis #0 existiert nicht in /Library/Application Support/Symcon/scripts/53663.ips.php on line 13
Warning: Instanz #0 existiert nicht in /Library/Application Support/Symcon/scripts/53663.ips.php on line 16
Du kannst das Script zwar manuell (execute) aufrufen, dann funktioniert es aber nicht.
Event bedeutet, dass das Script über ein Ereignis aufgerufen werden muss. Nur dann ist die Variable Event gefüllt.
Also den ganzen Anfang mit $_IPS[‚EVENT‘] brauchst du gar nicht.
Da du ja alle IDs fest eingetragen hast.
Was mich nur wundert, warum der Zeitpunkt der letzten Änderung eine float Variable ist.
Integer wäre hier korrekt für einen Zeitstempel.
Versuch mal folgendes:
Die Variable ‚letzte Änderung‘ einmal löschen.
Neu anlegen als Integer und als Profil ~UnixTimestamp auswählen.
Dann mal dieses Script benutzen.
// Zeit berechnen, wie lange ein Gerät eingeschaltet war
// und dann den Stromverbrauch berechnen
//
// folgende Variablen je Gerät (Instanz) einrichten:
// - Leistung float ~Watt.3680
// - Stromverbrauch float ~Electricity loggen als Zähler
// - letzte Änderung integer ~UnixTimestamp
// Hier die Geräte und Variablen eintragen
$id_status = 42704 /* [Keller\Heizungskeller\Geräte\Heizbetrieb\STATUS E-Heizung KARYON] */; // ID des Status-Kanals eintragen
$id_zuletzt = 29573 /* [Keller\Heizungskeller\Geräte\Heizbetrieb\letzte Änderung] */; // ID der Variable "letzte Änderung" eintragen
$id_kwh = 23710 /* [Keller\Heizungskeller\Geräte\Heizbetrieb\Stromverbrauch KARYON] */; // ID der Variable "Stromverbrauch" eintragen
$id_kw = 46141 /* [Keller\Heizungskeller\Geräte\Heizbetrieb\Leistung] */; // ID der Variable "Leistung" eintragen
$kw = GetValueFloat($id_kw) / 1000 / 3600; // Watt/1000=kw/3600=pro Sekunde
$status = GetValueBoolean($id_status);
$letzte = GetValueInteger($id_zuletzt);
$var = IPS_GetVariable($id_status);
$akt = $var['VariableUpdated'];
if ($status == false) // Gerät wurde ausgeschaltet
{
$zeit = $akt - $letzte; // Einschaltdauer
$verbrauch = $kw * $zeit + GetValueFloat($id_kwh);
SetValueFloat($id_kwh, $verbrauch);
} else { // Gerät wurde eingeschaltet
SetValueInteger($id_zuletzt, $akt); // Zeitpunkt vom Einschalten 'sichern'
}
Bitte die neue ID von der Variable ‚letzte Änderung‘ in der Zeile hier ersetzen:
$id_zuletzt = 29573
Und dann ‚darfst‘ du es auch gerne mal ausführen
Jedoch wird er durch jedes manuelle ausführen zusätzlichen Verbrauch zählen, obwohl da keiner war.
Also lieber das Gerät mal ein & ausschalten.
Das minütliche solltest du lassen…
Dadurch wird jedesmal in ‚letzte Änderung‘ die aktuelle Zeit geschrieben.
Und wenn das Gerät dann auch noch aus ist. Wird die Zeit dazwischen jedesmal als ‚eingeschaltet‘ und somit als Verbrauch berechnet.
Ich ändere das oben mal ab… dann sollte das nicht mehr auftreten.
Michael
Das ist (glaube ich) eine Funktion des HM-Funkaktors (HM-LC-Sw4-DR). Jedenfalls habe ich im HomeMatic-System keine entsprechende Systemvariable mit Kanalzuordnung.
Oh, ich sehe gerade, das Script scheint zu funktionieren. Danke schön.
Nein, dass kann keine Variable vom Aktor sein.
Zum einem solltest du die ja per Hand anlegen, zum anderen können Statusvariablen nicht beschrieben werden.
Michael
Komisch, jetzt sind plötzlich alle Werte seit September wieder da.
IPS hat offensichtlich die ganze Zeit normal gearbeitet – nur der Graph war immer leer.
Na ja, danke vielmals. Irgendwann kommen auch ein paar richtige Zähler ins Stromnetz. Dann geht es alles besser, hoffe ich zumindest.