Aktoren-Auslösung in Variable schreiben

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Semmy
Beiträge: 165
Registriert: 05.02.2017, 14:12
Danksagung erhalten: 1 Mal

Aktoren-Auslösung in Variable schreiben

Beitrag von Semmy » 13.02.2018, 09:37

Hallo
Ich möchte immer wenn ein Aktor auslöst, eine Zahl in eine Variable geschrieben wird. Also Aktor 1 löst aus, Va. = 2, Aktor 1 löst nochmal aus, Va = 3 usw. Maximalwert in der Variable ist 4.
Wenn dann ein Aktor 2 auslöst, soll der Wert in der Va. jeweils nach unten zählen, also Aktor 2 löst aus, Va. = 3, Aktor 2 löst nochmal aus; Va. = 2, usw.
Variable soll die Werte 1-4 anzeigen.
Kann man dafür irgenwie ein Script erstellen und wie müsste das aussehen?

Viele Grüße
Semmy
Raspberrymatic 3+
Raspberrymatic LAN-Gateway

Benutzeravatar
Sammy
Beiträge: 9172
Registriert: 09.09.2008, 20:47
Hat sich bedankt: 15 Mal
Danksagung erhalten: 174 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von Sammy » 13.02.2018, 09:52

Ich würde das einfach über 2 WebUI Programme machen. Du brauchst ja nur 4 Zahlenwerte.

WENN Aktor 1
UND Zahl = 1
DANN Zahl = 2
SONSTWENN Zahl = 2
DANN Zahl = 3
SONST Zahl = 4

WENN Aktor 2
UND Zahl = 4
DANN Zahl = 3
SONSTWENN Zahl = 3
DANN Zahl = 2
SONST Zahl = 1

Je nachdem was Du mit "Aktor löst aus" meinst, muss man ggfs. noch den Zustand des Aktors in die SONSTWENNs mit aufnehmen.

Gruß Sammy
Links: CCU-Logik, Tipps für Anfänger, WebUI-Doku, Expertenparameter, virtuelle Aktorkanäle
Inventur vom 22.01.14: 516 Kanäle in 165 Geräten, 132 Programme, 270 Direkte Verknüpfungen
Ich übernehme für alle von mir gegebenen Hinweise, Tipps und Links keine Haftung! Das Befolgen meiner Tipps ist nur für Fachkundige gedacht und erfolgt auf eigene Gefahr!

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von dtp » 13.02.2018, 10:01

Ist eigentlich nicht weiter schwierig.

Du erzeugst ein Programm, dass bei Änderung oder Aktualisierung (je nachdem, was besser passt) von Aktor 1 das folgende Skript ausführt.

Code: Alles auswählen

! Zähler bei Skriptaufruf um eins erhöhen
! Version 1.0, Autor: dtp

! Namen der verwendeten Systemvariablen
string svCount = "SV Zähler"; ! Zähler, obligatorisch

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

! +++++ Variablendeklaration +++++
integer count;
object svObject; object svObjectList;

! +++++ Systemvariablen erzeugen bzw. falls vorhanden, auslesen +++++
if(!svCount){svCount = "SV Zähler";}
svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svCount);
if(!svObject){
  svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
  svObject.Name(svCount); svObject.DPInfo("Zähler"); svObject.Internal(false); svObject.Visible(true);
  svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.ValueUnit(""); dom.RTUpdate(true);
}

! +++++ Anzahl Einwürfe hochzählen +++++
count = (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svCount)).Value().ToInteger();
count = count + 1;
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svCount)).State(count).ToString(0);
Dieses Skript legt dir automatisch die Systemvariable "SV Zähler" an, die du auch nach Belieben anders nennen kannst, und zählt sie bei jedem Aufruf um eins hoch. Beim allerersten Aufruf des Skripts wird zunächst nur die Systemvariable angelegt. Daher fängt es erst danach an zu zählen. Also nicht wundern. 8)

Dann erzeugst du entweder noch ein weiteres Programm oder erstellst einen Sonst-Wenn-Zweig in dem obigen Programm, das bzw. der auf die Änderung bzw. Aktualisierung des zweiten Aktors reagiert. In dem Dann-Zweig fügst du das folgende Skript ein:

Code: Alles auswählen

! Zähler bei Skriptaufruf um eins verringern
! Version 1.0, Autor: dtp

! Namen der verwendeten Systemvariablen
string svCount = "SV Zähler"; ! Zähler, obligatorisch

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

! +++++ Variablendeklaration +++++
integer count;
object svObject; object svObjectList;

! +++++ Systemvariablen erzeugen bzw. falls vorhanden, auslesen +++++
if(!svCount){svCount = "SV Zähler";}
svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svCount);
if(!svObject){
  svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
  svObject.Name(svCount); svObject.DPInfo("Zähler"); svObject.Internal(false); svObject.Visible(true);
  svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.ValueUnit(""); dom.RTUpdate(true);
}

! +++++ Anzahl Einwürfe hochzählen +++++
count = (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svCount)).Value().ToInteger();
count = count - 1;
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svCount)).State(count).ToString(0);
Wichtig! Die Systemvariable muss in beiden Skripten denselben Namen erhalten. Benennst du sie unterschiedlich, wird die eine Systemvariable immer weiter hoch- und die andere immer weiter runtergezählt.

Wenn es noch wichtig ist, dass Werte über 4 und unter 0 vermieden werden sollen, dann kann man das auch recht einfach implementieren. Da hab ich aber jetzt erst mal drauf verzichtet.

Versuch's mal und berichte.

Das automatische Anlegen der Systemvariablen ist nicht zwingend notwendig, sondern soll dir ein wenig die Arbeit erleichtern. ;)

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Semmy
Beiträge: 165
Registriert: 05.02.2017, 14:12
Danksagung erhalten: 1 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von Semmy » 13.02.2018, 10:19

Hallo DTP
Das sieht schon mal gut aus. Ich möchte aber den Zähler hoch nur bis 4 und runter nur bis 1. Ist das noch möglich? Dann wäre es perfekt.

Viele Grüße
Semmy
Raspberrymatic 3+
Raspberrymatic LAN-Gateway

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von dtp » 13.02.2018, 10:33

Ja, ist kein Problem.

Ersetze im ersten Skript die Zeile

Code: Alles auswählen

count = count + 1;
durch

Code: Alles auswählen

count = count + 1;
if(count >= 4){count = 4;}
und im zweiten Skript die Zeile

Code: Alles auswählen

count = count - 1;
durch

Code: Alles auswählen

count = count - 1;
if(count <= 1){count = 1;}
Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Semmy
Beiträge: 165
Registriert: 05.02.2017, 14:12
Danksagung erhalten: 1 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von Semmy » 13.02.2018, 10:42

Hallo

Läuft perfekt.

Vielen Dank
Gruß
Semmy
Raspberrymatic 3+
Raspberrymatic LAN-Gateway

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von dtp » 13.02.2018, 12:13

Freut mich.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

borschem
Beiträge: 2
Registriert: 05.05.2018, 16:18

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von borschem » 05.05.2018, 16:58

Hallo @DTP / Thorsten,

ich lese hier zwar schon einige Zeit mit, war aber bis zu deinem coolen Skript noch nicht aktiv bzw. angemeldet.
Zuerst habe ich mir eine HomematicIP mit Türsensor und Heizungsthermostat gekauft, aber sehr schnell gemerkt, dass man da technisch sehr eingeschränkt ist.
Deswegen kam mir noch eine CCU2 ins Haus wo ich u.a. Lampen, Sonos-Box, den Türsensor und jetzt kommt es neuerdings auch den Durchgangssensor verwende. Nun ja so gut ich es mit der Hilfe von solch begabten Personen, wie hier im Forum, schaffe.
Aktuell brauche ich irgendwie Hilfe.
Dein Skript läuft super ... nur passt es nicht ganz zu meiner Konfiguration:
Folgender Sachverhalt:

Wohnungseingangstür mit Homematic IP Türkontakt optisch
aus Platzmangel (Flur, der gleich ums Eck geht) kommt gleich wenn man zur Tür herein kommt auf der linken Seite der Durchgangssensor.
Kommen ist von links nach rechts
Gehen ist von rechts nach links

Personen Kommen/gehen soll nur gezählt werden, wenn die Eingangstür benutzt wird,
da auch noch eine Kommode in diesem Bereich steht an der man evtl auch ab und an vorbei läuft.
Dies habe ich mit dem Türkontakt optisch als erste Bedingung gelöst (Tür geöffnet - prüfen) alles andere passiert danach

Nun zur Anforderung
wenn ich nach Hause komme
Tür auf Bewegung links nach rechts
Person 1 Bewegung links nach rechts
Tür zu Bewegung rechts nach links

somit wären es bei einer Person 2 x kommen 1x gehen
evtl. könnten weitere Personen kommen ...

beim Gehen passiert es genauso nur mit den Personen umgekehrt (Bewegung rechts nach links)

Da also kommen und gehen in einem Vorgang abläuft bräuchte ich eine Lösung die dies berücksichtigt.
Ich habe jetzt schon 2 Tage gebastelt und komme an meine Grenzen :cry:

Ich habe versucht deine beiden Skripte in zwei Programmen zu benutzen.
Aber irgendwie reagieren beide Programme gleichzeitig weil die Aktoren bzw. die Auslöser auch beide jeweils reagieren.
(Bewegung von rechts nach links und links nach rechts) ...

Am Ende ist es wahrscheinlich auch noch nicht einmal so schwer ... nur schein ich dann doch irgendwie ein Brett vorm Kopf zu haben ... :roll:

Idee? :?:
Hilfe? ... :idea:
Antwort wäre super ......

Gruß Matthias

borschem
Beiträge: 2
Registriert: 05.05.2018, 16:18

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von borschem » 06.05.2018, 14:35

Moin Zusammen,
ich glaube ich habe es einigermaßen hinbekommen.

Ich musste für den Durchgangssensor schon fast einen punktgenauen Platz sehr nah am Türrahmen finden,
damit nicht die Personen-Bewegung, die durch das öffnen der Tür entsteht (beim gehen Tür aufziehen) als Bewegung erkannt wird.

Zusätzlich musste ich ewig mit folgenden Geräteeinstellungen spielen
- Zeitspanne, bis die nächste Bewegung erkannt wird.
- Zeitspanne, in der beide Sensoren ausgelöst haben müssen, damit die Richtung bestimmt werden kann
- Sensorempfindlichkeit

irgendwie ganz schön mühsam ...

Dennoch wäre ein Skript super, das sowohl das kommen als auch das gehen in einem zusammen Skript zählt.

Benso
Beiträge: 29
Registriert: 21.04.2015, 12:45

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von Benso » 05.09.2018, 19:27

Vielen Dank für das Skript. Genau das habe ich auch gesucht. Bei mir brauchte ich einfach einen Zähler, der mir die Anzahl für die Nachbefüllungen in der Zisterne liefert.
--------------------------------------------------------------------------------
CCU2 mit modifizierter Antenne + 2x Repeater und 2x Gateway
617 Kanäle in 139 Geräten und 83 Programmen mit 49 Variablen
--------------------------------------------------------------------------------

Antworten

Zurück zu „HomeMatic allgemein“