Aktoren-Auslösung in Variable schreiben

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

emil70
Beiträge: 288
Registriert: 02.12.2017, 13:47
System: CCU
Hat sich bedankt: 33 Mal
Danksagung erhalten: 8 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von emil70 » 08.11.2020, 10:25

dtp hat geschrieben:
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)

Gruß,

Thorsten
Beten Dank für das script. Ich nutze es wie oft am Tag mein Heizlüfter im Gäste-WC an geht.

Jetzt such ich noch die Möglichkeit die Zahl der angelegten Variable in eine 2. Variable geschrieben wird und die Zahl der 1. Variablen auf 0 setzt

Dieses script soll dann z.B um 1 Uhr laufen

Ich würde halt gerne sehen, wie oft am Tag der Heizlüfter an gehet
gruß emil70

emil70
Beiträge: 288
Registriert: 02.12.2017, 13:47
System: CCU
Hat sich bedankt: 33 Mal
Danksagung erhalten: 8 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von emil70 » 08.11.2020, 14:01

Bin jetzt schon mal weiter gekommen

so

Code: Alles auswählen

var AlteVar=dom.GetObject("Heizung-Gäste-WC Anzahl pro Tag");
var NeueVar=dom.GetObject("Heizung-Gäste-WC Anzahl pro Jahr");
var DummyVar=dom.GetObject("Dummy");
var AlterWert=AlteVar.Value();
NeueVar.State(AlterWert);
WriteLine(NeueVar.Value());
var DummyWert=DummyVar.Value();
AlteVar.State(DummyWert);
WriteLine(AlteVar.Value());
wird schon mal der Wert aus " Anzahl pro Tag" in "Anzahl pro Jahr" geschrieben und der Wert von " Anzahl pro Tag" auf 0 gesetzt. Dummy ist 0

Jetzt würde ich noch gerne den Wert von " Anzahl pro Jahr" immer mit dem Wert von " Anzahl pro Tag" addieren. So das ich auch sehen kann wie oft im Jahr der Heizlüfter an war

Hat da jemnd eine Idee zu??
gruß emil70

MichaelN
Beiträge: 9677
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1625 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von MichaelN » 08.11.2020, 14:51

NeueVar+AlterWert
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

emil70
Beiträge: 288
Registriert: 02.12.2017, 13:47
System: CCU
Hat sich bedankt: 33 Mal
Danksagung erhalten: 8 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von emil70 » 08.11.2020, 15:32

Hatte schon so getestet

Code: Alles auswählen

var AlteVar=dom.GetObject("Heizung-Gäste-WC Anzahl pro Tag");
var NeueVar=dom.GetObject("Heizung-Gäste-WC Anzahl pro Jahr");
var DummyVar=dom.GetObject("Dummy");
var AlterWert=AlteVar.Value();
NeueVar.State(AlterWert);
WriteLine(NeueVar.Value());
var DummyWert=DummyVar.Value();
AlteVar.State(DummyWert);
WriteLine(AlteVar.Value()) + (NeueVar.Value());
Es wird aber nicht zusammen gezählt. So schreib es auch núr die AlteVar.Value
gruß emil70

MichaelN
Beiträge: 9677
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1625 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von MichaelN » 08.11.2020, 15:36

. State ist der Befehl zum schreiben, nicht WriteLine.Keine Lust doch mal in die Dokumentation zu schauen?
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Benutzeravatar
Baxxy
Beiträge: 10822
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 607 Mal
Danksagung erhalten: 2223 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von Baxxy » 08.11.2020, 15:42

emil70 hat geschrieben:
08.11.2020, 14:01
Hat da jemnd eine Idee zu??
Klar.
So wie ich das verstehe möchtest du einen Tageszähler und einen Jahreszähler für die Schaltvorgänge deines Badlüfters. Der Tageszähler wird über dtp's Script gefüllt.
Statt nun aber Nachts um 1 die Tageswerte zu den Jahreswerten zu addieren würde ich beide Zähler-SysVars parrallel befüllen und nur den Tageszähler nachts zur gewünschten Uhrzeit resetten.

Deine Idee mit der festen Uhrzeit geht natürlich auch und könnte etwa so aussehen.

Code: Alles auswählen

object wc_tag = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Heizung-Gäste-WC Anzahl pro Tag");
object wc_jahr = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Heizung-Gäste-WC Anzahl pro Jahr");

!- Tageszähler zum Jahreszähler addieren und Summe speichern
   wc_jahr.State(wc_jahr.Value() + wc_tag.Value());

!- Nur weitermachen wenn es der folgenden Uhrzeit entspricht
   if(system.Date("%H:%M") == "01:00")
     {
  !- Tageszähler auf "0" setzen
      wc_tag.State(0);
     }

emil70
Beiträge: 288
Registriert: 02.12.2017, 13:47
System: CCU
Hat sich bedankt: 33 Mal
Danksagung erhalten: 8 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von emil70 » 08.11.2020, 16:28

@Baxxy

Danke dir

Habe es jetzt so getestet

Code: Alles auswählen

object wc_tag = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Heizung-Gäste-WC Anzahl pro Tag");
object wc_jahr = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Heizung-Gäste-WC Anzahl pro Jahr");

!- Tageszähler zum Jahreszähler addieren und Summe speichern
   wc_jahr.State(wc_jahr.Value() + wc_tag.Value());
!- Tageszähler auf "0" setzen   
   wc_tag.State(0);
Der Jahreszähler stand auf 37 , der Tageszähler auf 2

Ergebniss nach ausführen des script ist

Jahreszähler auf 372
Tageszähler auf 0
gruß emil70

Benutzeravatar
Baxxy
Beiträge: 10822
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 607 Mal
Danksagung erhalten: 2223 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von Baxxy » 08.11.2020, 16:39

emil70 hat geschrieben:
08.11.2020, 16:28
Ergebniss nach ausführen des script ist

Jahreszähler auf 372
Tageszähler auf 0
Ach herrje... :shock:
Dann schlage ich mal vor den Typ deiner SysVar "Heizung-Gäste-WC Anzahl pro Jahr" von "Text" in "Zahl" umzuändern. :wink:

emil70
Beiträge: 288
Registriert: 02.12.2017, 13:47
System: CCU
Hat sich bedankt: 33 Mal
Danksagung erhalten: 8 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von emil70 » 08.11.2020, 17:43

So geht es, danke sehr

Stand auf "Zeichenkette"

Bekommt man bei "Zahl" auch noch die .00 weg?
gruß emil70

Benutzeravatar
Baxxy
Beiträge: 10822
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 607 Mal
Danksagung erhalten: 2223 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von Baxxy » 08.11.2020, 19:04

emil70 hat geschrieben:
08.11.2020, 17:43
Bekommt man bei "Zahl" auch noch die .00 weg?
Nein, Typ Zahl zeigt immer 2 Nachkommastellen an. Ich schaue später nochmal ob das auch mit Textvariablen geht.

Antworten

Zurück zu „HomeMatic allgemein“