mein Rollladenskript und ein Paar Fragen :-)

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Antworten
tloeffel
Beiträge: 448
Registriert: 13.09.2017, 05:11
Hat sich bedankt: 1 Mal
Danksagung erhalten: 12 Mal

mein Rollladenskript und ein Paar Fragen :-)

Beitrag von tloeffel » 06.10.2018, 05:03

Hallo Zusammen,

ich habe mal eine Frage an einen Experten.

Um zu überprüfen ob alle Rollladen wirklich runter gefahren sind, möchte ich dieses Skript verwenden. Ich benutze zum Checken den Kanal 3 des HM-IP Broll. Zum Schalten muss ich aber den Kanal 4 benutzen. Des Weiteren möchte ich immer nur einen offenen Rollladen ansteuern und dann im Fall das es mehrere gibt das Skript beenden. Das Skript soll über einen Cuxd Timer angesteuert werden bis es keine offenen Rollladen mehr gibt.

Mein funktionierendes Skript habe ich mal angefügt. Nun meine Fragen 😊.

1) Ich habe zwei Methoden ausprobiert (alchy's aus dem Forum (methode1) und meine (methode2)). In alchy's Artikel spricht er von sicherer Zugriffsmethode. Ist meine nicht sicher?
2) Kann man das Skript vereinfachen? Ich denke bestimmt zu kompliziert/unerfahren.
3) In manchen Skripten lese ich von der Methode: IsTypeOf. Wofür soll diese angewendet werden?
4) Kennst Ihr eine bessere Methode die If-Schleife zu verlassen als „quit“ bei der ich das ganze Skript verlasse?

Danke für Eure Zeit und Hilfe.
Gruß Thomas

Code: Alles auswählen

!!Rollladen checken ob unten aus Beispiel im Gewerk Rollladen
!!Version 0.1, tloeffel

!!Gewerk aus dem die Aktoren gelesen werden sollen
var myFunction = dom.GetObject("Rollladen_Behang");
string itemId;

foreach(itemId, myFunction.EnumUsedIDs())
{   var item = dom.GetObject(itemId);
    if (item.State() != "0")
{
!!Die Adresse des anderen Kanals zusammen bauen
      string str = item.Address();
      string address_alt = str.Replace (":3", "");
      string channel_name = "HmIP-RF." # address_alt # ":4.LEVEL";

     var methode2 = dom.GetObject(channel_name);
      var methode1 = (dom.GetObject(ID_DATAPOINTS)).Get(channel_name);

      WriteLine(methode1.State());
      WriteLine(methode2.State());

!!Beide Wege lassen den Rollladen zu fahren
      !methode1.State(0);
      !methode2.State(0);

!!Verwende ich damit bei mehreren offen Rollladen nicht alle auf einmal “zu“ fahren. Aufruf erfolgt per Timer bis alle zu sind.
     quit;
     }
} 
972 Kanäle in 165 Geräten: Davon 16 HM, 145 HMIP, 2 Gruppen und 2 CUXD Geräte

Xel66
Beiträge: 14168
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 586 Mal
Danksagung erhalten: 1500 Mal

Re: mein Rollladenskript und ein Paar Fragen :-)

Beitrag von Xel66 » 06.10.2018, 09:51

Ich würde das Pferd andersherum aufzäumen, bzw. mache das bei einem Rollladen, der ab und zu mal nicht mit seiner Rückmeldung zu CCU durchkommt. Nach einem Befehl an einen Rollladen starte ich zeitverzögert ein Script, welches nach dem Zustand schaut. Bei klassischen Homematic nutze ich hierzu den Datenpunkt .WORKING. Es wird infach nach Ablauf der eingestellten Laufzeit geschaut, ob der Datenpunkt noch WAHR ist. Die Behanghöhe muss bei dieser Methode nicht geprüft werden, da die ja dem letzten Befehl entsprechen müsste. Ich sende dann ein STOP und bekomme die aktuelle Behanghöhe zurück. Wurde der ursprüngliche Befehl nicht empfangen, gibt es ja sowieso Kommunikationsstörungsmeldungen. Die Lösung stammt aus dem Forum.

Gruß Xel66
Zuletzt geändert von Xel66 am 06.10.2018, 10:39, insgesamt 1-mal geändert.
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Gluehwurm
Beiträge: 12434
Registriert: 19.03.2014, 00:37
System: in Planung
Hat sich bedankt: 105 Mal
Danksagung erhalten: 380 Mal

Re: mein Rollladenskript und ein Paar Fragen :-)

Beitrag von Gluehwurm » 06.10.2018, 10:06

Ob die Rollläden wirklich zu sind, siehst Du damit eh nicht. Nur ob die Aktoren gefahren sind. :wink:

Wenn die Aktoren nicht richtig funktionieren, gibt es eine Fehlermeldung. Oftmals reicht dann ein Skript auch nicht mehr, da die Teile Komm.-Störungen haben. Ansonsten würde ich mal schauen, warum so ein Skript notwendig ist.

Gruß
Bruno

tloeffel
Beiträge: 448
Registriert: 13.09.2017, 05:11
Hat sich bedankt: 1 Mal
Danksagung erhalten: 12 Mal

Re: mein Rollladenskript und ein Paar Fragen :-)

Beitrag von tloeffel » 07.10.2018, 17:40

Hallo Zusammen,

danke für die schnelle Antworten :-).
Allerdings finde ich meine Fragen noch nicht wirklich beantwortet.

Lieben Gruß
Thomas
972 Kanäle in 165 Geräten: Davon 16 HM, 145 HMIP, 2 Gruppen und 2 CUXD Geräte

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

Re: mein Rollladenskript und ein Paar Fragen :-)

Beitrag von alchy » 07.10.2018, 18:36

tloeffel hat geschrieben:
06.10.2018, 05:03
In alchy's Artikel spricht er von sicherer Zugriffsmethode. Ist meine nicht sicher?
welcher Artikel? Es wäre nett, wenn du das auch verlinken würdest, wenn du mich schon anführst.
Du greifst auf einen Datenpunkt zu. Da ist das Risiko doppelter Namensvergabe relativ gering.
Sicherer ist es aber trotzdem.
Interessanter ist es bei z.B. dem Gewerk
var myFunction = dom.GetObject("Rollladen_Behang");
Das ist unsicher und enthält eben potenziell ein großes Risiko, das du den Namen doppelt vergeben haben könntest.
Damit würde dann mit einer 50% Wahrscheinlichkeit dein Script fehlerhaft sein. Hast du den Namen 3fach vergeben....
tloeffel hat geschrieben:
06.10.2018, 05:03
2) Kann man das Skript vereinfachen? Ich denke bestimmt zu kompliziert/unerfahren.
Das Script ist nur für dich und deine gewünschte Anwendung geschrieben und funktioniert für dich nach deinen Angaben ja so.
Viele Wege führen zum Ziel. Da halt ich mich lieber raus.
tloeffel hat geschrieben:
06.10.2018, 05:03
3) In manchen Skripten lese ich von der Methode: IsTypeOf. Wofür soll diese angewendet werden?
Prüft ob ein Objekt einen bestimmten Typ implementiert.
HomeMatic-Script Dokumentation - Teil 2: Objektmodell

tloeffel hat geschrieben:
06.10.2018, 05:03
4) Kennst Ihr eine bessere Methode die If-Schleife zu verlassen als „quit“ bei der ich das ganze Skript verlasse?
Du willst ja immer nur einen Rolladen ansteuern. Wenn du nicht das Script verlassen würdest, würde ja sofort der nächste Datenpunkt auf 0 gesetzt werden.

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.

tloeffel
Beiträge: 448
Registriert: 13.09.2017, 05:11
Hat sich bedankt: 1 Mal
Danksagung erhalten: 12 Mal

Re: mein Rollladenskript und ein Paar Fragen :-)

Beitrag von tloeffel » 07.10.2018, 23:23

alchy hat geschrieben:
07.10.2018, 18:36
tloeffel hat geschrieben:
06.10.2018, 05:03
In alchy's Artikel spricht er von sicherer Zugriffsmethode. Ist meine nicht sicher?
welcher Artikel? Es wäre nett, wenn du das auch verlinken würdest, wenn du mich schon anführst.
Du greifst auf einen Datenpunkt zu. Da ist das Risiko doppelter Namensvergabe relativ gering.
Sicherer ist es aber trotzdem.
Interessanter ist es bei z.B. dem Gewerk
var myFunction = dom.GetObject("Rollladen_Behang");
Das ist unsicher und enthält eben potenziell ein großes Risiko, das du den Namen doppelt vergeben haben könntest.
Damit würde dann mit einer 50% Wahrscheinlichkeit dein Script fehlerhaft sein. Hast du den Namen 3fach vergeben....


Deine Seite mit der Erklärung wie man Datenpunkte ausliesst :-).
Skript Alchy 1.JPG
tloeffel hat geschrieben:
06.10.2018, 05:03
3) In manchen Skripten lese ich von der Methode: IsTypeOf. Wofür soll diese angewendet werden?


Prüft ob ein Objekt einen bestimmten Typ implementiert.
HomeMatic-Script Dokumentation - Teil 2: Objektmodell


Ich weiss :-). Aber in welchen Praxisfall braucht man das?
Skript Alchy 2.JPG
tloeffel hat geschrieben:
06.10.2018, 05:03
4) Kennst Ihr eine bessere Methode die If-Schleife zu verlassen als „quit“ bei der ich das ganze Skript verlasse?


Du willst ja immer nur einen Rolladen ansteuern. Wenn du nicht das Script verlassen würdest, würde ja sofort der nächste Datenpunkt auf 0 gesetzt werden.
Ich würde gerne wissen ob es einen Anderen Befehl gibt ab "quit" um ein Skript gewollt zu verlassen.
Jetzt ist mir Formatierung total verrutscht :-( sorry. Bin noch ein bisschen unerfahren mit dem Formatieren.
Vielen Dank für die Unterstützung.

Gruß Thomas
972 Kanäle in 165 Geräten: Davon 16 HM, 145 HMIP, 2 Gruppen und 2 CUXD Geräte

Antworten

Zurück zu „HomeMatic allgemein“