Richtige Verwendung von $src$

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Bullson
Beiträge: 140
Registriert: 10.11.2011, 10:53
Hat sich bedankt: 18 Mal
Danksagung erhalten: 2 Mal

Re: Richtige Verwendung von $src$

Beitrag von Bullson » 12.04.2021, 22:36

Hab mich jetzt dank Alchys Script viewtopic.php?f=31&t=35686 etwas in das Thema $src$ eingearbeitet.
Ich hatte schon länger den Wunsch Stromverbraucher mit Namen bei nicht Anwesenheit zu melden.
Bislang hab ich dazu ein Script, das alle X Minuten prüft ob bestimmte Aktoren an sind wenn niemand anwesend ist und mir dann per Telegram meldet:
Da ist noch Strom an. Danach noch im DANN Zweig > Schalt diese aus

Das konnte jedoch den Verbraucher nicht nennen.

Nun hab ich das eben versucht und stelle fest: Ich scheiter weniger am technischen, sondern am kreativen.
Als Auslöser bekomm ich NATÜRLICH das Zeitmodul.

Gibt es einen Weg zu prüfen welcher Aktor bei nicht Abwesenheit noch an ist und mir diesen namentlich zu nennen?

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Richtige Verwendung von $src$

Beitrag von alchy » 13.04.2021, 06:41

Bullson hat geschrieben:
12.04.2021, 22:36
Ich hatte schon länger den Wunsch Stromverbraucher mit Namen bei nicht Anwesenheit zu melden.
Um das zu erreichen ist *IMHO* eine andere Herangehensweise notwendig als den Auslöser eines Programms.
Der Trigger des Programms wäre also die Anwesenheit, welcher zum Beispiel ein Script aufruft, was die eingeschalteten Verbraucher zu diesem Zeitpunkt ermittelt und zur Not auch noch gleich ausschaltet. Gibt es auch schon von mir, musst mal suchen nach alle lichter in einem Gewerk oder so ähnlich.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Bullson
Beiträge: 140
Registriert: 10.11.2011, 10:53
Hat sich bedankt: 18 Mal
Danksagung erhalten: 2 Mal

Re: Richtige Verwendung von $src$

Beitrag von Bullson » 13.04.2021, 07:52

Danke alchy,
im Rahmen der Suche gestern hat ich das gefunden.
Ich glaub ich muss die Idee beerdigen. Abwesenheit tritt ein, sobald der letzte das Gelände verlässt.
D.h. ich hätte nur für diesen Moment eine Gewissheit. Es laufen aber verschiedene Programme (Bewässerung, Fussbodenheizung).
Die verursachen bei Nichtabschalten eines Aktors (öfter mal ausser Reichweite) oder bei Undichtigkeit am Wasser entsprechend Kosten. Dem beuge ich durch Intervallsmäßige Abfrage vor.
Ich werde da noch 2 bis 7 mal drüber schlafen.
Aber selbst wenn ich ein anderes Gerät wie den Bewegungsmelder oder eine andere Veränderung als Überprüfung nehme wird das immer der Auslöser sein.
Und wenn ich die zu überwachenden Aktoren auf "Aktualisierung auslösen" schalte, löst es fortwährend aus.
I *Keep Grübeling*

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

Re: Richtige Verwendung von $src$

Beitrag von Xel66 » 13.04.2021, 12:29

Es gibt genügend Scripte, die durch irgendwelche Gewerke iterieren und Status abfragen und die Ergebnisse in eine Systemvariable schreiben oder versenden. Der Weg über $src$ ist nicht zielführend.

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

Bullson
Beiträge: 140
Registriert: 10.11.2011, 10:53
Hat sich bedankt: 18 Mal
Danksagung erhalten: 2 Mal

Re: Richtige Verwendung von $src$

Beitrag von Bullson » 14.04.2021, 07:08

Danke nochmal an euch beide.
Manchmal sieht man den Wald vor Bäumen nicht.
Wollte das schon ewig mit $src$ smarter machen.
Auch weil Iteration, altersbedingt, kein Resourcenfreund ist.

Hab jetzt eihnen Mix aus Zeit, Anwesenheits Aktualisierung und Iteration über ein extra geschaffenes Gewerk "Kostenluemmel" gemischt.

Bekomme nur eine Meldung WENN etwas an war und dann auch wer.

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: Richtige Verwendung von $src$

Beitrag von Germa » 14.11.2022, 22:30

Hallo zusammen,

ich habe das Skript auf Seite 1 etwas modifiziert und es so erweitert, dass ich den Auslöser identifizieren kann, egal, ob dieser ein Gerät (Datenpunkt) oder eine Systemvariable ist.
Nun habe ich aber in meiner latenten programmiertechnischen Ahnungslosigkeit :D Variablen in den geschweiften Klammern der Schleife definiert. Dieses Script dürfte also gar nicht funktionieren, denn es gilt: "die im Anweisungsblock deklarierten Variablen gelten nur innerhalb der geschweiften Klammern".
Meine Frage nun: Warum funktioniert dieses Script trotzdem und liefert korrekte Ergebnisse???

Code: Alles auswählen

var ausloeser = dom.GetObject("$src$");
!Wenn der Auslöser ein Gerätewert ist:
if(ausloeser.TypeName() == "HSSDP") {
	var chan = dom.GetObject(ausloeser.Channel());
	var device = dom.GetObject(chan.Device());
	var name = dom.GetObject(device.Name());
	var dp = ausloeser.HssType();
	var wert = ausloeser.Value();
    }
! wenn der Auslöser ein Variablenwert ist und kein Gerätewert:
if(ausloeser.TypeName() == "VARDP") {
    var name = ausloeser;
    var dp = "";
    var wert = ausloeser.Value().ToString(2);
    }

if (ausloeser) {
string MESSAGE = "ausgelöst von " # name # "." # dp# " mit Wert " # wert;
!Pushover ...
}
     
Korrekt sein müsste es dann ja so:

Code: Alles auswählen

var ausloeser = dom.GetObject("$src$");
var name;
var dp;
var wert;

!Wenn der Auslöser ein Gerätewert ist:
if(ausloeser.TypeName() == "HSSDP") {
	var chan = dom.GetObject(ausloeser.Channel());
	var device = dom.GetObject(chan.Device());
	name = dom.GetObject(device.Name());
	dp = ausloeser.HssType();
	wert = ausloeser.Value();
    }
! wenn der Auslöser ein Variablenwert ist und kein Gerätewert:
if(ausloeser.TypeName() == "VARDP") {
    name = ausloeser;
    dp = "";
    wert = ausloeser.Value().ToString(2);
    }

if (ausloeser) {
string MESSAGE = "ausgelöst von " # name # "." # dp# " mit Wert " # wert; 
!Pushover ...
}
Ja, ich weiß, Alchy hat dafür ein fantastisches Skript gemacht, um den Auslöser eines Programms zu identifizieren, das nutze ich auch oft, mir gehts hier aber um Learning by doing für einfache Problemstellungen
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: Richtige Verwendung von $src$

Beitrag von jp112sdl » 14.11.2022, 22:34

Germa hat geschrieben:
14.11.2022, 22:30
denn es gilt: "die im Anweisungsblock deklarierten Variablen gelten nur innerhalb der geschweiften Klammern"
Steht das irgendwo (wo?) so dokumentiert?

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: Richtige Verwendung von $src$

Beitrag von Germa » 14.11.2022, 23:07

ja, suche schon seit einer Stunde ...
C-Programmierer nicken mit dem Kopf zu meiner ersten Aussage.

In Homematic gilt anscheinend "Variablen können überall deklariert werden und sind ab da bis zum Ende des Scripts sichtbar"
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

MichaelN
Beiträge: 9656
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: Richtige Verwendung von $src$

Beitrag von MichaelN » 14.11.2022, 23:09

Wenn du versucht die Erfahrungen mit anderen Programmiersprachen auf HM Skript umzusetzen, wirst du nicht glücklich. Keine Annahme treffen - nachlesen!
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 +++

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: Richtige Verwendung von $src$

Beitrag von Germa » 14.11.2022, 23:25

Du suchst einen Fehler
Du fragst Deine Frau, die seit 20 Jahren als Programmiererin arbeitet
Frau schüttelt mit Kopf
Frau hat Recht (Frau hat immer Recht :wink: )
Fragst im Homematic-Forum
Welt funktioniert wohl anders hier
Frustration
:mrgreen:
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“