Hallo Alchy,
vielen Dank für Deinen Script Vorschlag. Finde ich echt gut wie du hier um String concat rum kommst und natürlich auch die Objekt Verwendung. Ich hab nochmal geschaut um die offenen Punkte nochmal zu klären:
1) Error wird nicht angezeigt -->Ich war doof
Hier der Fehler im Log:
Code: Alles auswählen
Mar 30 21:20:40 RaspiParkstr local0.err ReGaHss: Error: IseESP::ScriptRuntimeError: .....
2) String concat
In der Doku habe ich gelesen, dass man das mit "#" machen soll - falls man da nicht drumrum kommt. War es aus anderen Sprachen anders gewöhnt (RTFM!).
3) Objekt Verwendung
Über den von dir verlinkten Artikel über Datenpunkt abfragen, hatte ich auch nochmal eine Frage bzgl. "dom.getObject"/"datapoints.Get", nämlich wann nehme ich was und was ist der Unterschied. Das ist wohl aber besser im anderen Thread aufgehoben.(
dein Artikel)
4) Interface Name
Das wurde ja schon von Gerti bestätigt, dass es "HmIP-RF" heißen muss. Gibt ja auch nur das "hm-rpi-rf-mod" von daher schon "irgendwie" zu verstehen. Da gehen ja auch die Direktverknüpfungen über RF/Wired Grenzen hinweg.
5) Hier auch nochmal das aktuelle Programm
Zur Erklärung: Ich habe ein größeres Skript zur Heizungssteuerung geschrieben (viele Features, die es so nicht gab bzw. ich nicht gefunden habe). Da ja leider Unterprogramme heikel zu sein scheinen, habe ich darauf verzichtet und meine 13 Reglerskripte so aufgebaut, dass ich den variablen Anteil oben hin schreibe und den unteren Teil tausche ich dann einfach aus. Daher die vielen Variablen am Anfang.
Die "debug" Variable benötige ich, damit ich die "WriteLine" Ausgaben dann auch wieder ausschalten kann.
Ich hatte auch noch das Problem, dass in der HighCharts Anzeige leider keine Daten vorhanden waren. Deshalb habe ich LOGIT hinzugefügt, kam aber auch nichts raus. Nach ein wenig debuggen habe ich herausgefunden, dass im Logeintrag (also "...State(<Hier>;0)") dieser Zeile:
Code: Alles auswählen
dom.GetObject(Exec # ".LOGIT").State(raum # "_" # actorSerial # "_STATE;0");
kein Punkt "." sein darf. Daher hab ich da halt einen String rein gebastelt, jetzt geht es. Komisch ist aber schon, früher (also HM RF) wurde jeder Schaltvorgang geloggt auch ohne LOGIT.
Code: Alles auswählen
! Wechselschaltung SWITCH auf Datenpunkt - ausfuehrlich by Alchy, ergänzt von ckohrt
boolean debug = true;
string gateway = "HmIP-RF.";
string actorSerial = "001618A98F985C";
string actor = gateway # actorSerial;
string actorChannel = gateway # actorSerial # ":3";
string raum = "FBHDGGast";
string Exec = "CUxD.CUX2801001:1";
object oDP = datapoints.Get(actorChannel # ".STATE");
if(oDP){
if(debug) {WriteLine("Datenpunkt vorhanden - Status: "#oDP.Value());};
if(oDP.Value()){
if(debug) {WriteLine("Datenpunkt WAR eingeschalten");};
oDP.State(false);
if(debug) {WriteLine("Datenpunkt WURDE ausgeschalten");};
dom.GetObject(Exec # ".LOGIT").State(raum # "_" # actorSerial # "_STATE;0");
}else{
if(debug) {WriteLine("Datenpunkt WAR ausgeschalten");};
oDP.State(true);
if(debug) {WriteLine("Datenpunkt WURDE eingeschalten");};
dom.GetObject(Exec # ".LOGIT").State(raum # "_" # actorSerial # "_STATE;1");
}
}else
{
if(debug) {WriteLine("Datenpunkt NICHT vorhanden");}; ! TODO
}
6) Ein weiteres Problem
Das Skript ist ja nur ein Testskript, trotzdem habe ich es eben eine Weile laufen lassen und so eingestellt, dass es alle 10s umschalten soll. Manchmal höre ich kein Klackern mehr und kann weder mit "dom.GetObject" noch mit "datapoints.Get" und den jeweiligen "State" Kommandos den Aktor umschalten. Was geholfen hat war ein manuelles Schalten eines anderen Kanals des Aktors. Danach ging das Skript auch wieder. Hängende Releais kann ich daher ausschließen. Das Skript auch. Ich beobachte weiter und wenn es wieder auftritt versuche ich mal die Fehlerlogs zu analysieren. Die aktuellste Firmware spiele ich auch noch ein.
VG
Christian