Re: Aktoren-Auslösung in Variable schreiben
Verfasst: 08.11.2020, 19:06
ToInteger und ToString(0) kombinieren
Heimautomation mit ELV HomeMatic und FHZ Funk-Hauszentralen
https://homematic-forum.de/forum/
Code: Alles auswählen
!- Tageszähler zum Jahreszähler addieren und Summe speichern
wc_jahr.State(wc_jahr.Value().ToInteger() + wc_tag.Value().ToInteger()).ToString(0);
Code: Alles auswählen
!Heizung Gäste WC resetten
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().ToInteger() + wc_tag.Value().ToInteger()).ToString(0);
!- Tageszähler auf "0" setzen
wc_tag.State(0);
Logisch, die Variablen heißen ja auch "Heizung-Gäste-WC Anzahl pro Tag" und "Heizung-Gäste-WC Anzahl pro Jahr" und werden am Anfang eingelesen.
Das unterliegt doch Deinen Anforderungen. Zielführend wäre Mitternacht (also wenn eine neuer Tag beginnt) per Zeitmodul.
So macht man das aber. Scripte werden immer in einem Ausführungsblock eines Programms aufgerufen. So ist das System ausgelegt.
Ich lasse im 1 Programm die Variable
Code: Alles auswählen
Heizung-Gäste-WC Anzahl pro Tag
Code: Alles auswählen
! Zähler bei Skriptaufruf um eins erhöhen
! Version 1.0, Autor: dtp
!https://homematic-forum.de/forum/viewtopic.php?f=19&t=42153&p=419045&hilit=variable+hochz%C3%A4hlen#p419045
! Namen der verwendeten Systemvariablen
string svCount = "Heizung-Gäste-WC Anzahl pro Tag"; ! 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 = "Heizung-Gäste-WC Anzahl pro Tag";}
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);
Code: Alles auswählen
!Reset des Wertes von Heizung-Gäste-WC Anzahl pro Tag und Aktualisierung von Heizung-Gäste-WC Anzahl pro Jahr
!https://homematic-forum.de/forum/viewtopic.php?f=19&t=42153&p=617270#p617270
!
!Heizung Gäste WC resetten
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().ToInteger() + wc_tag.Value().ToInteger()).ToString(0);
!- Tageszähler auf "0" setzen
wc_tag.State(0);