Systemvariable per Programm um 1 erhöhen

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Schmollo
Beiträge: 6
Registriert: 26.06.2014, 21:51

Systemvariable per Programm um 1 erhöhen

Beitrag von Schmollo » 09.07.2014, 18:20

Liebe Freunde,

die SuFu brachte mich hier leider nicht weiter - auch, weil oft zu viel vorausgesetzt wird. Ich bin jenseits von ein paar BASIC-Anfängen im 8-Bit-Bereich kein Programmierer und bitte daher um Verständnis, dass mir Fachchinesisch nur wenig weiter hilft.

Nun zu meiner Frage. Ich will per Knopfdruck ein Programm auslösen, das eine konkrete Systemvariable um genau 1 erhöht. Außerdem soll die Variable bei Überschreiten eines Wertes wieder auf 0 springen... Nur bekomm ich das partout mit einem Script nicht hin, es gibt immer einen Fehler bzw. passiert gar nix.

Im guten alten Basic sähe das in etwa so aus:

x=systemvariable([...])
y=[maximalwert9]
x=x+1
If x>y then x=0
systemvariable([...])=x

Wie sieht ein äquivalentes Scipt in der Homematic aus? Und bitte keine Verweise auf die einschlägige Script-Doku in 3 Teilen, auch mehrere Stunden Lesen und Versuchen haben mich da nicht weitergebracht - es werden einfach zuviele Grundkenntnisse moderner, objektorientierter Programmiersprachen vorausgesetzt :-(

herzliche Grüße und vielen Dank schon mal

Schmollo

paul53
Beiträge: 2554
Registriert: 26.04.2012, 20:42
Wohnort: Berlin
Danksagung erhalten: 15 Mal

Re: Systemvariable per Programm um 1 erhöhen

Beitrag von paul53 » 09.07.2014, 18:29

Z.B. so:

Code: Alles auswählen

integer n = dom.GetObject("Name der Zähl-SV vom Typ Zahl").Value();
integer max = 9;
n = n + 1;
if (n > max) {n = 0;}
dom.GetObject("Name der Zähl-SV vom Typ Zahl").State(n); 
oder so:

Code: Alles auswählen

! SV hochzählen bis Maximalwert, dann auf 0

! Deklaration lokaler Variablen
object sv;    ! Systemvariable
integer n;    ! Zählwert
integer max;  ! Maximalwert

sv = dom.GetObject("Name der Zähl-SV vom Typ Zahl");
n = 1 + sv.Value();
max = 9;
if (n > max) {n = 0;}
sv.State(n); 
Versionen: HM-CC-TC 2.1, HM-LC-Sw1 1.9, HM-CC-RT-DN 1.1, HM-MOD-RPI-PCB 1.2.1 (keine CCU)

Schmollo
Beiträge: 6
Registriert: 26.06.2014, 21:51

Re: Systemvariable per Programm um 1 erhöhen

Beitrag von Schmollo » 10.07.2014, 01:23

Vielen, vielen Dank!!! :-))

Das hat mir sehr geholfen - auch, um ein paar andere Aufgaben zu erfüllen...

lg. Schmollo

dumens
Beiträge: 35
Registriert: 07.10.2010, 18:57

Re: Systemvariable per Programm um 1 erhöhen

Beitrag von dumens » 04.07.2015, 14:39

Hallo zusammen,
da ich was Scriptprogrammierung angeht völliger Neuling bin
bräuchte ich mal eine Hilfestellung.

Ich möchte folgendes realisieren:
Um übers Handy abfragen zu können ob die Rasenbewässerung eingeschaltet hat
möchte ich das bei jedem einschalten des Aktors eine Systemvariable vom Typ Zahl
um 1 hochgezählt wird.

Ich habe bereits die oben angegebenen beiden Scripte ausprobiert aber das Ganze
will einfach nicht funktionieren.
Im Programm wird beim einschalten des Aktors als Aktion das Script ausgeführt.
Die Variable habe ich auf der Startseite mit eingefügt aber sie bleibt immer eine 0
ganz gleich wie oft der Aktor eingeschaltet wird.
Was mache ich falsch?

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Systemvariable per Programm um 1 erhöhen

Beitrag von buempi » 04.07.2015, 14:42

dumens hat geschrieben:Was mache ich falsch?
... wenn du einen Screenshot deines Programms und den Code deines Skripts postest, kann man das wahrscheinlich herausfinden.

Viele Grüsse
Bümpi

dumens
Beiträge: 35
Registriert: 07.10.2010, 18:57

Re: Systemvariable per Programm um 1 erhöhen

Beitrag von dumens » 04.07.2015, 15:32

Ich hoffe das ich das so richtig gemacht habe, da ich hier im Forum noch nie einen Screenshot eingefügt habe.
Und vorab schon mal Danke...
script.jpg
Programm.jpg
Ic

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Systemvariable per Programm um 1 erhöhen

Beitrag von buempi » 04.07.2015, 15:42

Hallo

Variablen, Programme usw. dürfen NICHT mit einer Ziffer beginnen. Ändere dein Programm und die Systemvariable mal entsprechend ab.

Wenn's dann immer noch nicht funktioniert, teste das Skript in "Skript testen", indem du vorderhand mal die vorletzte Zeile weglässt und statt dessen ganz am Schluss

Code: Alles auswählen

WriteLine(n);
einfügst.

Viele Grüsse
Bümpi

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

Re: Systemvariable per Programm um 1 erhöhen

Beitrag von Xel66 » 04.07.2015, 15:59

Müsste die Zuweisung zur Systemvariable am Ende nicht

Code: Alles auswählen

dom.GetObject("3.Protokoll.Rasen").State(n);
heißen. So wie es ist, wird die Variable ja nicht zurückgeschrieben und das Script startet immer mit dem gleichen Wert.

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

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Systemvariable per Programm um 1 erhöhen

Beitrag von buempi » 04.07.2015, 16:03

Xel66 hat geschrieben:So wie es ist, wird die Variable ja nicht zurückgeschrieben
... müsste schon zurückgeschrieben werden. Das Objekt ist ja am Anfang an "sv" zugewiesen worden.

Viele Grüsse
Bümpi

dumens
Beiträge: 35
Registriert: 07.10.2010, 18:57

Re: Systemvariable per Programm um 1 erhöhen

Beitrag von dumens » 04.07.2015, 17:37

Vielen Dank an euch,
nachdem ich alles umbenannt habe funktioniert es einwandfrei
so wie ich es mir vorgestellt habe.
Damit kann ich dann, wenn wir nicht zuhause sind, sehen ob die
Bewässerung sich eingeschaltet hat.
:D :D :D

Antworten

Zurück zu „HomeMatic allgemein“