Aktoren-Auslösung in Variable schreiben

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

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

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von MichaelN » 08.11.2020, 19:06

ToInteger und ToString(0) kombinieren
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: 10850
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 610 Mal
Danksagung erhalten: 2230 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von Baxxy » 08.11.2020, 19:19

emil70 hat geschrieben:
08.11.2020, 17:43
So geht es

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);
Damit sollte es nun auch mit Text-SysVars gehen welche dann keine Kommastellen anzeigen.

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, 19:50

Funktioniert

danke sehr
gruß emil70

Zephyr750
Beiträge: 139
Registriert: 23.11.2013, 17:19
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von Zephyr750 » 16.03.2024, 11:52

Hi,
wie sieht denn dein fertiges Sript nun aus?
Kannst du das fertige Script hier posten?
Gruß
Oli

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 » 16.03.2024, 15:47

Falls du mich meinst. Es sieht so aus

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);  
gruß emil70

Zephyr750
Beiträge: 139
Registriert: 23.11.2013, 17:19
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von Zephyr750 » 17.03.2024, 13:44

Hi Emil,
da ich keine Ahnung von scripten habe:
- Ich habe wc_tag und wc_jahr als systemvariable angelegt, aber beim ausführen des Scripts passiert nichts.
- Ich frage mich auch, was der Auslöser sein soll, den Tageszähler auf 0 zu setzen?
- Bei dem ersten Script hat wenigstens der SV Zähler hochgezählt.
Was muss ich alles tun, damit das Schript läuft außer es in einem DANN Pfad auszuführen?
Gruß
Oli

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

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von Xel66 » 17.03.2024, 13:53

Zephyr750 hat geschrieben:
17.03.2024, 13:44
- Ich habe wc_tag und wc_jahr als systemvariable angelegt, aber beim ausführen des Scripts passiert nichts.
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.
Zephyr750 hat geschrieben:
17.03.2024, 13:44
- Ich frage mich auch, was der Auslöser sein soll, den Tageszähler auf 0 zu setzen?
Das unterliegt doch Deinen Anforderungen. Zielführend wäre Mitternacht (also wenn eine neuer Tag beginnt) per Zeitmodul.
Zephyr750 hat geschrieben:
17.03.2024, 13:44
Was muss ich alles tun, damit das Schript läuft außer es in einem DANN Pfad auszuführen?
So macht man das aber. Scripte werden immer in einem Ausführungsblock eines Programms aufgerufen. So ist das System ausgelegt.

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

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

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von MichaelN » 17.03.2024, 13:57

Das geziegte Skript ist aber bei weitem nicht vollständig. Wo wird denn der TAgeszähler befüllt? Wo und wie wird der Jahreszähler resettet? Und gibt es noch einen Jahrzenht-Zähler?
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 +++

Zephyr750
Beiträge: 139
Registriert: 23.11.2013, 17:19
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Aktoren-Auslösung in Variable schreiben

Beitrag von Zephyr750 » 17.03.2024, 14:15

Ich habe nun die Variablen richtig angelegt, beim Ausführen des Scripts passiert aber immer noch nichts!
Deshalb finde ich JensMaus seine Scripte relativ Laien geeignet. Dort steht was man vorher genau wo anlegen muss und wo.
Ich teste und versuche mich vorher immer selber und wie gesagt das Script mit dem SV Zähler funktioniert auch, aber ich wollte auch einen Tageszähler und Jahreszähler einbauen und da bin ich gescheitert. Daher habe ich gefragt, ob Emil das funktionierende Script einstellen kann, aber mir kam es vor, wie wenn dort noch einiges fehlt.
Ich würde rein logisch behaupten, dass ich nicht das gleiche Script zum befüllen einer Variablen nehmen kann und das gleiche Script zum löschen des Tageszählers?!
Gruß
Oli

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 » 17.03.2024, 14:18

Zephyr750 hat geschrieben:
17.03.2024, 13:44
Was muss ich alles tun, damit das Schript läuft außer es in einem DANN Pfad auszuführen?
Ich lasse im 1 Programm die Variable

Code: Alles auswählen

Heizung-Gäste-WC Anzahl pro Tag
bei jedem Einschalten um den Wert 1 erhöhen

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);
Im 2. Programm lass ich um 00:01 die Zahl von Heizung-Gäste-WC Anzahl pro Tag zu Heizung-Gäste-WC Anzahl pro Jahr hinzurechnet und setze den Wert von Heizung-Gäste-WC Anzahl pro Tag auf "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);  
Dateianhänge
1.PNG
2.PNG
3.PNG
gruß emil70

Antworten

Zurück zu „HomeMatic allgemein“