Script Probleme

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Benutzeravatar
Flaux
Beiträge: 72
Registriert: 09.10.2012, 13:12
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: Script Probleme

Beitrag von Flaux » 13.03.2015, 01:33

hallo heiner

1. das mit dem kontrollierten start werde ich demnächst hier neu publizieren:
http://homematic-forum.de/forum/viewtop ... 18&t=21920

2. das mit wann wurde welches programm das letzte mal gestartet mache ich so:

Code: Alles auswählen

! Sendet letzte Programm Benutzung mittels curl an iFoen

string infolist;
var infolist = "Letzte Verwendung eines Programmes" # "\n\n";
 
infolist = infolist # dom.GetObject("A Anfangsinit 0").ProgramLastExecuteTime() # "\t" # "A Anfangsinit 0" # "\n";
infolist = infolist # dom.GetObject("A Anfangsinit 1").ProgramLastExecuteTime() # "\t" # "A Anfangsinit 1" # "\n";
infolist = infolist # dom.GetObject("Alarm Alarmanlage").ProgramLastExecuteTime() # "\t" # "Alarm Alarmanlage" # "\n";
infolist = infolist # dom.GetObject("Alarm Batterieladungen").ProgramLastExecuteTime() # "\t" # "Alarm Batterieladungen" # "\n";
infolist = infolist # dom.GetObject("Alarm Bewegungen").ProgramLastExecuteTime() # "\t" # "Alarm Bewegungen" # "\n";
infolist = infolist # dom.GetObject("Alarm Blinklichter").ProgramLastExecuteTime() # "\t" # "Alarm Blinklichter" # "\n";
infolist = infolist # dom.GetObject("Alarm Co2melder").ProgramLastExecuteTime() # "\t" # "Alarm Co2melder" # "\n";
infolist = infolist # dom.GetObject("Alarm Feuermelder").ProgramLastExecuteTime() # "\t" # "Alarm Feuermelder" # "\n";
infolist = infolist # dom.GetObject("Alarm Temperaturen").ProgramLastExecuteTime() # "\t" # "Alarm Temperaturen" # "\n";
infolist = infolist # dom.GetObject("Alarm Wasser Feuchte").ProgramLastExecuteTime() # "\t" # "Alarm Wasser Feuchte" # "\n";
infolist = infolist # dom.GetObject("Check Bewegung").ProgramLastExecuteTime() # "\t" # "Check Bewegung" # "\n";
infolist = infolist # dom.GetObject("Check FT off").ProgramLastExecuteTime() # "\t" # "Check FT off" # "\n";
infolist = infolist # dom.GetObject("Check iPhone").ProgramLastExecuteTime() # "\t" # "Check iPhone" # "\n";
infolist = infolist # dom.GetObject("Check Kaffee").ProgramLastExecuteTime() # "\t" # "Check Kaffee" # "\n";
infolist = infolist # dom.GetObject("Check Lichter AUS").ProgramLastExecuteTime() # "\t" # "Check Lichter AUS" # "\n";
infolist = infolist # dom.GetObject("Check Speaker").ProgramLastExecuteTime() # "\t" # "Check Speaker" # "\n";
infolist = infolist # dom.GetObject("Check Speaker ON").ProgramLastExecuteTime() # "\t" # "Check Speaker ON" # "\n";
infolist = infolist # dom.GetObject("Check Speaker OFF").ProgramLastExecuteTime() # "\t" # "Check Speaker OFF" # "\n";
infolist = infolist # dom.GetObject("Check Tageszeit").ProgramLastExecuteTime() # "\t" # "Check Tageszeit" # "\n";
infolist = infolist # dom.GetObject("Check Wetter").ProgramLastExecuteTime() # "\t" # "Check Wetter" # "\n";
infolist = infolist # dom.GetObject("Heizung Buero").ProgramLastExecuteTime() # "\t" # "Heizung Buero" # "\n";
infolist = infolist # dom.GetObject("Heizung Buero Peter").ProgramLastExecuteTime() # "\t" # "Heizung Buero Peter" # "\n";
infolist = infolist # dom.GetObject("Heizung Dusche/Bad oben").ProgramLastExecuteTime() # "\t" # "Heizung Dusche/Bad oben" # "\n";
infolist = infolist # dom.GetObject("Heizung Dusche/HEingang/Gang unten").ProgramLastExecuteTime() # "\t" # "Heizung Dusche/HEingang/Gang unten" # "\n";
infolist = infolist # dom.GetObject("Heizung Gaeste").ProgramLastExecuteTime() # "\t" # "Heizung Gaeste" # "\n";
infolist = infolist # dom.GetObject("Heizung Kino").ProgramLastExecuteTime() # "\t" # "Heizung Kino" # "\n";
infolist = infolist # dom.GetObject("Heizung Kueche/WZEingang").ProgramLastExecuteTime() # "\t" # "Heizung Kueche/WZEingang" # "\n";
infolist = infolist # dom.GetObject("Heizung Schlafen").ProgramLastExecuteTime() # "\t" # "Heizung Schlafen" # "\n";
infolist = infolist # dom.GetObject("Heizung Wohnen/Essen").ProgramLastExecuteTime() # "\t" # "Heizung Wohnen/Essen" # "\n";
infolist = infolist # dom.GetObject("Steuerung Alarmanlage").ProgramLastExecuteTime() # "\t" # "Steuerung Alarmanlage" # "\n";
infolist = infolist # dom.GetObject("Steuerung Licht Garten").ProgramLastExecuteTime() # "\t" # "Steuerung Licht Garten" # "\n";
infolist = infolist # dom.GetObject("Steuerung Licht Haus").ProgramLastExecuteTime() # "\t" # "Steuerung Licht Haus" # "\n";
infolist = infolist # dom.GetObject("Steuerung Musik").ProgramLastExecuteTime() # "\t" # "Steuerung Musik" # "\n";
infolist = infolist # dom.GetObject("Steuerung PoolWP").ProgramLastExecuteTime() # "\t" # "Steuerung PoolWP" # "\n";
infolist = infolist # dom.GetObject("Steuerung Rolladen aussen").ProgramLastExecuteTime() # "\t" # "Steuerung Rolladen aussen" # "\n";
infolist = infolist # dom.GetObject("Steuerung Rolladen innen").ProgramLastExecuteTime() # "\t" # "Steuerung Rolladen innen" # "\n";
infolist = infolist # dom.GetObject("Steuerung Rolladen Garagen").ProgramLastExecuteTime() # "\t" # "Steuerung Rolladen Garagen" # "\n";
infolist = infolist # dom.GetObject("Steuerung Server/Boiler").ProgramLastExecuteTime() # "\t" # "Steuerung Server/Boiler" # "\n";
infolist = infolist # dom.GetObject("Steuerung Sonnenstoren").ProgramLastExecuteTime() # "\t" # "Steuerung Sonnenstoren" # "\n";
infolist = infolist # dom.GetObject("Steuerung Speaker").ProgramLastExecuteTime() # "\t" # "Steuerung Speaker" # "\n";
infolist = infolist # dom.GetObject("Steuerung Statusanzeige").ProgramLastExecuteTime() # "\t" # "Steuerung Statusanzeige" # "\n";
infolist = infolist # dom.GetObject("Steuerung Venti Klappen").ProgramLastExecuteTime() # "\t" # "Steuerung Venti Klappen" # "\n";
infolist = infolist # dom.GetObject("Steuerung Venti Zustand").ProgramLastExecuteTime() # "\t" # "Steuerung Venti Zustand" # "\n";
infolist = infolist # dom.GetObject("System Geraete Ping").ProgramLastExecuteTime() # "\t" # "System Geraete Ping" # "\n";
infolist = infolist # dom.GetObject("System ProgAktivDeaktiv").ProgramLastExecuteTime() # "\t" # "System ProgAktivDeaktiv" # "\n";
infolist = infolist # dom.GetObject("System ProgTraffic").ProgramLastExecuteTime() # "\t" # "System ProgTraffic" # "\n";
infolist = infolist # dom.GetObject("Alarmmeldungen anzeigen").ProgramLastExecuteTime() # "\t" # "Alarmmeldungen anzeigen" # "\n";
infolist = infolist # dom.GetObject("Mitternacht").ProgramLastExecuteTime() # "\t" # "Mitternacht" # "\n";
infolist = infolist # dom.GetObject("Regentagesmenge aktualisieren").ProgramLastExecuteTime() # "\t" # "Regentagesmenge aktualisieren" # "\n";
infolist = infolist # dom.GetObject("Regentagesmenge zuruecksetzen").ProgramLastExecuteTime() # "\t" # "Regentagesmenge zuruecksetzen" # "\n";
infolist = infolist # dom.GetObject("Servicemeldungen anzeigen").ProgramLastExecuteTime() # "\t" # "Servicemeldungen anzeigen" # "\n";
infolist = infolist # dom.GetObject("Servicemeldungen aufraeumen").ProgramLastExecuteTime() # "\t" # "Servicemeldungen aufraeumen" # "\n";
 
dom.GetObject("MailTo").State("mail@mail.ch; prowlaccount@api.prowlapp.com");
dom.GetObject("MailSubject").State("HomeMatic Letzte Program Nutzung");
dom.GetObject("MailInfo").State("Letzte Programm Nutzung:");
dom.GetObject("MailMessage").State(infolist);
string stdout;
string stderr;
system.Exec("/etc/config/addons/email/email 01",&stdout,&stderr);
3. das mit den direkten variabeln sah vorher so aus:

Code: Alles auswählen

! Dieses Script setzt die Systemvariable "Anwesend" auf zu Hause oder abwesend je nach Status iPhoneMZ iPhonePE


! Aufgrund der zuletzt aktualisierten iPhone Variablen wird auch Tor beim Heimkommen geoeffnet

! dazu zuerst die aktuelle Zeit auslesen
time now = system.Date("%Y-%m-%d %H:%M:%S").ToTime(); ! wie spät ist es jetzt?
integer jetzt = now.ToInteger();

! Jetzt auslesen welches iPhone in den letzten Sekunden den Status geaendert haben
! iFoen
time ziFoen = dom.GetObject("Zone iFoen").Timestamp();
integer timeiFoen = ziFoen.ToInteger();
integer diffziFoen = jetzt.ToInteger() - timeiFoen.ToInteger();
! iQuaki
time ziQuaki = dom.GetObject("Zone iQuaki").Timestamp();
integer timeiQuaki = ziQuaki.ToInteger();
integer diffziQuaki = jetzt.ToInteger() - timeiQuaki.ToInteger();
! iCar
time ziCar = dom.GetObject("Zone iCar").Timestamp();
integer timeiCar = ziCar.ToInteger();
integer diffziCar = jetzt.ToInteger() - timeiCar.ToInteger();
! iBookBook
time ziBookBook = dom.GetObject("Zone iBookBook").Timestamp();
integer timeiBookBook = ziBookBook.ToInteger();
integer diffziBookBook = jetzt.ToInteger() - timeiBookBook.ToInteger();

! Sprechen dass Haus verlassen wird
if (((diffziFoen < 60) && (dom.GetObject("Zone iFoen").State() == false)) && ((diffziQuaki < 60) && (dom.GetObject("Zone iQuaki").State() == false))) {
    dom.GetObject("InfoLight").State("1,1,108000,33,33,33,0,0,0,0,0,0,0");
    dom.GetObject("InfoSpeak").State("1,2,108000,0,84,42,43,45");
    dom.GetObject("InfoToDo").State("4");
    var ProgRun = dom.GetObject("Steuerung Speaker");
    ProgRun.ProgramExecute(); 
    dom.GetObject('Anwesenheit').State(false); 
    dom.GetObject("Ambiente Haus").State(true); 
}
...
und neu eben so:

Code: Alles auswählen

! Dieses Script setzt die Systemvariable "Anwesend" auf zu Hause oder abwesend je nach Status iPhoneMZ iPhonePE

! Aufgrund der zuletzt aktualisierten iPhone Variablen wird auch Tor beim Heimkommen geoeffnet

var ProgRun = dom.GetObject("Steuerung Speaker");

! Sprechen dass Haus verlassen wird
if (((((system.Date("%Y-%m-%d %H:%M:%S").ToTime()).ToInteger() - (dom.GetObject("Zone iFoen").Timestamp()).ToInteger()) < 60) && (dom.GetObject("Zone iFoen").Value() == false)) && ((((system.Date("%Y-%m-%d %H:%M:%S").ToTime()).ToInteger() - (dom.GetObject("Zone iQuaki").Timestamp()).ToInteger()) < 60) && (dom.GetObject("Zone iQuaki").Value() == false))) {
  dom.GetObject("InfoSpeak").State("1,2,108000,78,84,42,43,45");
  dom.GetObject("InfoToDo").State("4");
  ProgRun.ProgramExecute();
}
...
der wesentliche Punkt liegt hier (wurde woanders im Forum auch schon dermassen erläutert):

Code: Alles auswählen

if (((((system.Date("%Y-%m-%d %H:%M:%S").ToTime()).ToInteger() - (dom.GetObject("Zone iFoen").Timestamp()).ToInteger()) < 60) && (dom.GetObject("Zone iFoen").Value() == false)) && ((((system.Date("%Y-%m-%d %H:%M:%S").ToTime()).ToInteger() - (dom.GetObject("Zone iQuaki").Timestamp()).ToInteger()) < 60) && (dom.GetObject("Zone iQuaki").Value() == false))) {
...
Haus17: 515 Kanäle in 231 Geräten
Haus19: 317 Kanäle in 175 Geräten
Haus29: 38 Kanäle in 17 Geräten
Haus30: 265 Kanäle in 123 Geräten
Total: 1135 Kanäle in 546 Geräten

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Script Probleme

Beitrag von alchy » 13.03.2015, 08:27

Ich will hier nicht stören aber vielleicht darf ich kurz ein Anmerkung/Tipp/Vorschlag loswerden :?:
Das was du da z.B. unter 2. machst, ist doch sehr arbeitsintensiv dazu noch fehleranfällig.
Ausserdem wird system.exec verwendet, wovon dringend abgeraten wird.

Ein/das kleines Script würde dasselbe machen. (wenn ich das richtig überblickt habe), die Ausgabe der letzten Programmausführung. Hier kurz eine Version zum Ausführen unter Script testen oder viel besser unter Script Executer.
Sollte Anpassungsbedarf zwecks mail /pushover oder sonstwas Versand bestehen, melden.
Sollte ich stören, ignorieren.

Code: Alles auswählen

string sID;
string sLIST = "letzte Verwendung eines Programmes";
object oTmp; 
foreach (sID, dom.GetObject(ID_PROGRAMS).EnumUsedIDs()) {
oTmp = dom.GetObject(sID);
if(oTmp){ sLIST = sLIST #"\n" #oTmp.Name() # " : " #oTmp.ProgramLastExecuteTime(); }
}
!hier WriteLine oder aber speichern in Systemvariablen oder Versenden von Mail ....
WriteLine(sLIST);

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Benutzeravatar
Flaux
Beiträge: 72
Registriert: 09.10.2012, 13:12
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: Script Probleme

Beitrag von Flaux » 13.03.2015, 11:47

cool. Danke Alchy

Schlaufen sind immer besser. Interessant, dass er mir bei Änderung des Variablen Namens sLIST zu infolist (den ich auch in anderen Programmen verwende) wieder den alt bekannten Fehler auswirft.

Code: Alles auswählen

! Sendet letzte Programm Benutzung mittels curl an iFoen

string sID;
string infolist = "Letzte Verwendung eines Programmes" # "\n";
object oTmp; 
foreach (sID, dom.GetObject(ID_PROGRAMS).EnumUsedIDs()) {
oTmp = dom.GetObject(sID);
if(oTmp){ infolist = infolist #"\n" # oTmp.ProgramLastExecuteTime()  # ": " # oTmp.Name(); }
}

Code: Alles auswählen

Error 1 at row 6 col 13 near ^, dom.GetObject(ID_PROGRAMS).EnumUsedIDs()) {
oTmp = dom.GetObject(sID);
if(oTmp
Parse following code failed:
! Sendet letzte Programm Benutzung mittels curl an iFoen

string sID;
string infolist = "Letzte Verwendung eines Programmes" # "\n";
object oTmp; 
foreach (sID, dom.GetObject(ID_PROGRAMS).EnumUsedIDs()) {
oTmp = dom.GetObject(sID);
if(oTmp){ infolist = infolist #"\n" # oTmp.ProgramLastExecuteTime()  # ": " # oTmp.Name(); }
}
Haus17: 515 Kanäle in 231 Geräten
Haus19: 317 Kanäle in 175 Geräten
Haus29: 38 Kanäle in 17 Geräten
Haus30: 265 Kanäle in 123 Geräten
Total: 1135 Kanäle in 546 Geräten

Benutzeravatar
Flaux
Beiträge: 72
Registriert: 09.10.2012, 13:12
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: Script Probleme

Beitrag von Flaux » 19.03.2015, 10:37

Firmware 2.13.7 ist da

bin mal gespannt ..... :?: :?: :?: :?:
Haus17: 515 Kanäle in 231 Geräten
Haus19: 317 Kanäle in 175 Geräten
Haus29: 38 Kanäle in 17 Geräten
Haus30: 265 Kanäle in 123 Geräten
Total: 1135 Kanäle in 546 Geräten

Benutzeravatar
Flaux
Beiträge: 72
Registriert: 09.10.2012, 13:12
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: Script Probleme

Beitrag von Flaux » 19.03.2015, 20:02

... meine heutige Erfahrung:

ich find's besser - aber noch nicht ausreichend für gut.
Haus17: 515 Kanäle in 231 Geräten
Haus19: 317 Kanäle in 175 Geräten
Haus29: 38 Kanäle in 17 Geräten
Haus30: 265 Kanäle in 123 Geräten
Total: 1135 Kanäle in 546 Geräten

heiner_1976
Beiträge: 11
Registriert: 09.12.2014, 17:11

Re: Script Probleme

Beitrag von heiner_1976 » 20.03.2015, 16:15

Hab nochmal nachgefragt. Habe die Standardantwort bekommen.....wir haben ihre Anfrage weitergeleitet. ....
Ist das Problem behoben? Weil du schreibst ich finds besser.

Benutzeravatar
Flaux
Beiträge: 72
Registriert: 09.10.2012, 13:12
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: Script Probleme

Beitrag von Flaux » 20.03.2015, 18:02

Tendenz > schlecht
Zuletzt geändert von Flaux am 23.03.2015, 09:39, insgesamt 1-mal geändert.
Haus17: 515 Kanäle in 231 Geräten
Haus19: 317 Kanäle in 175 Geräten
Haus29: 38 Kanäle in 17 Geräten
Haus30: 265 Kanäle in 123 Geräten
Total: 1135 Kanäle in 546 Geräten

Gofel
Beiträge: 58
Registriert: 17.01.2015, 15:30

Re: Script Probleme

Beitrag von Gofel » 20.03.2015, 20:51

Das notepad++ auch oft eine Fehlerquelle sein kann ist mir auch schon aufgefallen. Natürlich könnten/sollten solche @LF, ^M Probleme vom System automatisch korrigiert werden, was ja wohl auch manchmal klappt. Zumindest sollte ein Fehler ausgespuckt werden der einem weiter hilft. Aber bei einer Firma die es seit Jahren nicht schafft Apple Kunden abzuholen die mit ihrem automatisch entpackenden Safari Browser bei jedem Firmwareupdate in die Falle tappen...
Da darf man die Anprüche wohl nicht zu hoch hängen. Wenn selbst so Kleinigkeiten nie behoben werden wird uns dieser Error 1 Bug noch sehr sehr lange beschäftigen. Und ein falscher Zeilenumbruch ist ja sogar noch zu finden, Error 1 kommt aber leider nicht nur da.

Benutzeravatar
Flaux
Beiträge: 72
Registriert: 09.10.2012, 13:12
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: Script Probleme

Beitrag von Flaux » 20.03.2015, 20:56

Richtig. Dann ist aber noch die Frage, wer ist das Huhn und wer das Ei.

^M nur im Log als Fehler angezeigt und auch gleich noch irgendwie mit ^M angezeigt ? Ein Log Darstellungsfehler ? Im weitesten Sinne möglich, aber es gibt doch keinen Grund bei dem Syntax etwas anzumeckern.

Aber dennoch wurden von 2.11.9 zur aktuellen Version viele Fehler behoben im Hintergrund. So wie es den Anschein macht.

Jedenfalls laufen die betroffenen Scripte Programme nicht mehr, was jetzt der Grund ist, dass ich auf 2.11.9 zurück schalte. Mal sehen was kommt.

Ich wünsche mir nächste Woche einen dicken Bankcheck gegen 300 HM Komponenten. Oder aber eine funktionierende Firmware. :evil: :roll:
Haus17: 515 Kanäle in 231 Geräten
Haus19: 317 Kanäle in 175 Geräten
Haus29: 38 Kanäle in 17 Geräten
Haus30: 265 Kanäle in 123 Geräten
Total: 1135 Kanäle in 546 Geräten

heiner_1976
Beiträge: 11
Registriert: 09.12.2014, 17:11

Re: Script Probleme

Beitrag von heiner_1976 » 16.04.2015, 21:19

Immer noch keine Rückmeldung. Bau alles auf tcl- Script um. :-(.

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“