erstes script

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Hannes_Hannes
Beiträge: 20
Registriert: 28.12.2017, 20:20

erstes script

Beitrag von Hannes_Hannes » 02.10.2018, 14:39

Hey Alle,
ich versuche gerade mein erstes kleines Script zu schreiben.
Letztlich ist das Ziel einen Rollladen nur runterfahren zu lassen, wenn eine Systemvariable auf false sitzt.
Wenn Systemvariable = false
Rolladen runter

Ich habe mal langsam versucht mich heranzutasten um die Funktion if - else anzuwenden.

Hier mal mein Skriptes:

Code: Alles auswählen

var x = dom.GetObject("Aussetzen Rollladen EG Mitte").Value();

if ( x.Variable() == "false" ) 
{
WriteLine("Hallo Welt!");
} 
else
{
WriteLine("NANANANA!");
}
Es klappt aber nicht. Wo ist hier mein Denkfehler. Bin für jeden Tipp dankbar.

lg Hannes

Benutzeravatar
jmaus
Beiträge: 9862
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 464 Mal
Danksagung erhalten: 1880 Mal
Kontaktdaten:

Re: erstes script

Beitrag von jmaus » 02.10.2018, 14:49

So müsste das optimalerweise Aussehen:

Code: Alles auswählen

var x = dom.GetObject("Aussetzen Rollladen EG Mitte").Value();

if ( x == false ) 
{
  WriteLine("Hallo Welt!");
} 
else
{
  WriteLine("NANANANA!");
}
Man beachte die Unterschieden im if() Aufruf. D.h. kein "x.Variable()" Aufruf und auch kein false in Anführungszeichen.
RaspberryMatic 3.75.7.20240420 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

Benutzeravatar
Roland M.
Beiträge: 9804
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 252 Mal
Danksagung erhalten: 1381 Mal

Re: erstes script

Beitrag von Roland M. » 02.10.2018, 17:16

Hallo Hannes!
Hannes_Hannes hat geschrieben:
02.10.2018, 14:39
Hier mal mein Skriptes:

Code: Alles auswählen

var x = dom.GetObject("Aussetzen Rollladen EG Mitte").Value();

if ( x.Variable() == "false" ) 
Doppelt gemoppelt! ;)

Wenn x = dom.GetObject(...).Value() ist, dann bedeutet das weitere x.Value() nichts anderes als
dom.GetObject(...).Value().Value()

Die weitere Problematik daraus sollte klar sein... :)


Roland
Zur leichteren Hilfestellung bitte unbedingt beachten:
  • Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
  • Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
  • Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
  • Fehlermeldungen genau abschreiben, besser noch...
  • Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!

-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...

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

Re: erstes script

Beitrag von alchy » 05.10.2018, 12:35

Tipp: Gewöhn dir das "optimalerweise Aussehen" gar nicht erst an

Code: Alles auswählen

object oObj = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("Aussetzen Rollladen EG Mitte");
if(oObj){
WriteLine("Systemvariable da");
if(oObj.Value()){
WriteLine("Mach was bei Wert wahr");
}else{
WriteLine("Mach was bei Wert falsch");
}
}else{WriteLine("Systemvariable nicht vorhanden");}
Die Prüfung auf Vorhandensein der Variable in Zeile 2 kann man natürlich auch weg lassen, genau so wie man noch prüfen könnte oder sollte, ob es sich auch um eine Logikvariable handelt usw.

Alchy
als einen Tipp und Trick - Beitrag würde ich dies jedoch nicht werten wollen. :mrgreen:

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.

Hannes_Hannes
Beiträge: 20
Registriert: 28.12.2017, 20:20

Re: erstes script

Beitrag von Hannes_Hannes » 13.10.2018, 16:02

Hallo,

danke für euer Feedback. Ich habe es jetzt so gelöst:

Code: Alles auswählen

!Rolli Küche runterfahren, wenn nicht Manuell ausgesetzt---------
var x = dom.GetObject("Aussetzen Rollladen Kueche").Value();
if ( x == false ) 
{
dom.GetObject("HmIP-RF.001157099AE211:4.LEVEL").State(0.25);
WriteLine("Hallo Welt!");
} 
else
{
WriteLine("NANANANA!");
}
Die WriteLines habe ich jetzt einmal drinnen gelassen. Stören ja nicht, oder? Eine weitere Frage: Existiert der Variablenename "x" nur so lange, wie das Skript läuft oder länger? Ich verwende diesen nämlich öfter. Kann es da zu komplikationen kommen?

Die gesamte Logik ist nun diese:
Meine Rollläden fahren je nach Sonnenstand und ob diese scheint runter. Zusätzlich habe ich bei einige Rollläden eine eigene Variabel "Aussetzeen" bzw. nicht Aussetzen. Diese wird über das Betätigen des Schalters in der Zeit, in der der Rollladne runter fahren sollte (nach Azimut) auf "Aussetzten" gestellt. Um 00:00 werden die Variablen wieder auf "Nicht Aussetzten" resetet.


Variablensetzten über den Rollladenschalter:
HomeMatic_WebUI.png
Ein Teil meines Beschattungsprogrames:
HomeMatic_WebUI.png
Eines der Skripte für das Aussetzten eines Rollladen aus dem Beschattungsprogramm:
HomeMatic_WebUI.png
Bei meinen ersten Test, funktioniert das alles gut. Ich muss es aber natürlich noch weiter beobachten. Wenn jemand jetzt schon einen Anmerkung hat oder Fehler sieht, bin ich offen für Hinweise ;-)

lg Hannes

Benutzeravatar
Black
Beiträge: 5480
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: erstes script

Beitrag von Black » 14.10.2018, 12:05

zum lernen gibts auch noch die beiden, immo in diesem Forum verfügbaren externen scripteditoren,

zum einen den Script Executor von Anli
und auch den Script Developer von Black

Beide unterstützen das Austesten und Erstellen von Scripten (Der Editor der CCU ist da sehr rudimentär)

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

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

Re: erstes script

Beitrag von Xel66 » 14.10.2018, 12:44

Hannes_Hannes hat geschrieben:
13.10.2018, 16:02
...Wenn jemand jetzt schon einen Anmerkung hat oder Fehler sieht, bin ich offen für Hinweise ;-)
Mal abgesehen davon, dass das eine schöne Fingerübung für die Scripterstellung ist und die Lernkurve entsprechende hebt, aber warum machst Du eine simple logische Abfrage per Script. Das Script ließe sich 1:1 als Programm anlegen. Mit einem Programm hast Du solche Unwägbarkeiten wie nachträgliche Namensänderung oder Austausch des Aktors abgefangen, da die CCU dieses intern abfängt, weil sie intern mit IDs arbeitet und die Namen für sie nur Schall und Rauch sind. Bei Scripten musst Du für eine Anpassung bei Änderungen selbst sorgen.

Gruß Xel66
-------------------------------------------------------------------------------------------
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

Hannes_Hannes
Beiträge: 20
Registriert: 28.12.2017, 20:20

Re: erstes script

Beitrag von Hannes_Hannes » 14.10.2018, 14:13

Black hat geschrieben:
14.10.2018, 12:05
zum lernen gibts auch noch die beiden, immo in diesem Forum verfügbaren externen scripteditoren,

zum einen den Script Executor von Anli
und auch den Script Developer von Black

Beide unterstützen das Austesten und Erstellen von Scripten (Der Editor der CCU ist da sehr rudimentär)

Black
Danke dir. Werde mir diese Editoren anschauen.

lg Hannes

Hannes_Hannes
Beiträge: 20
Registriert: 28.12.2017, 20:20

Re: erstes script

Beitrag von Hannes_Hannes » 14.10.2018, 14:16

Xel66 hat geschrieben:
14.10.2018, 12:44
Hannes_Hannes hat geschrieben:
13.10.2018, 16:02
...Wenn jemand jetzt schon einen Anmerkung hat oder Fehler sieht, bin ich offen für Hinweise ;-)
Mal abgesehen davon, dass das eine schöne Fingerübung für die Scripterstellung ist und die Lernkurve entsprechende hebt, aber warum machst Du eine simple logische Abfrage per Script. Das Script ließe sich 1:1 als Programm anlegen. Mit einem Programm hast Du solche Unwägbarkeiten wie nachträgliche Namensänderung oder Austausch des Aktors abgefangen, da die CCU dieses intern abfängt, weil sie intern mit IDs arbeitet und die Namen für sie nur Schall und Rauch sind. Bei Scripten musst Du für eine Anpassung bei Änderungen selbst sorgen.

Gruß Xel66
Genau so war es. Die Lernkurve war recht steil ;-)
Diese Abfrage mach ich, da die einzelnen Rollläden zusammen in einem Programm zusammengefasst waren Ala Fahre alle Gartenseitigen Rollläden runter. Da schien mir die Abfrage, ob jeder einzelne Rollladen das auch wirklich darf, in einem Skript einfacher. Sonst wären da einige Zusatzprogramme entstanden und die Variable zum Aussetzen kann ich vielleicht auch noch in der Zukunft ein anderes mal verwenden.
Oder denke ich noch zu kompliziert?

lg Hannes

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

Re: erstes script

Beitrag von Xel66 » 14.10.2018, 15:05

Hannes_Hannes hat geschrieben:
14.10.2018, 14:16
Oder denke ich noch zu kompliziert?
Nicht unbedingt. Das "in einem Programm zusammenfassen" hat hier schon öfter Leute aufs Glatteis geführt (gerade bei exzessiver Benutzung von "Sonst Wenn". Kann Dir in Deinem Falle wegen der Einfachheit der Anwendung (eine einzige logische Abfrage) nicht passieren. Ich würde trotzdem raten, dass in eigenen Programmen abzubilden, da du so z.B. in den Einzelprogrammen der Rollladen recht bequem das Handling von geöffneten Fenstern u.ä. abbilden kannst.

Somit würde über das zentrale Beschattungsprogramm nur die Sollstellung vorgegeben, aber das einzelne Rollladenprogramm hat letztendlich die Hand drauf, ob jetzt ein Rollladen bei geöffnetem Fenster wirklich z.B. ganz zu gefahren wird oder eben wie in Deinem Falle der einzelne Rollladen für die Beschattung gesperrt ist. Bei Deiner Vorgehensweise müsstest Du ggf. diese Abfragen in allen Programmen, die die Stellung der Rollladen verändern, abbilden. Gerade z.B. bei Terrassentüren u.ä. ist so eine Absicherung dringend geboten, damit Du nicht irgendwann draußen stehst und das Smarthome hat Dir die Rollladen geschlossen.

Funktioniert aber auch so wie Du es gemacht hast. Jeder hat halt eine andere Herangehensweise. Ich lege lieber kurze dedizierte Programme an, als möglichst viel zu zentralisieren. Somit ist besser nachzuvollziehen, was das einzelne Programm am Ende macht. Außerdem versuche ich, die Notwendigkeit von Handeingriffen zu minimieren. Es soll alles automatisch gehen und auch automatisch erkannt werden (ob ein bestimmter Rollladen jetzt laufen soll/darf oder nicht). Deine Verriegelung über den Sonnenstand würde ich so auch nicht umsetzen, denn letztendlich hast Du mit Elevation > 0 = nach Sonnenaufgang und Azimut zwischen 50 und 140°/172,4° nur den Zeitraum "Vormittag" eingeschränkt. Aber da habe ich auch eine andere Denkweise. Ist auch nur als Anmerkung zu verstehen und ich will niemanden "meine" Herangehensweise aufdrängen.

Gruß Xel66
-------------------------------------------------------------------------------------------
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

Antworten

Zurück zu „HomeMatic allgemein“