Richtige Verwendung von $src$
Moderator: Co-Administratoren
-
- Beiträge: 140
- Registriert: 10.11.2011, 10:53
- Hat sich bedankt: 18 Mal
- Danksagung erhalten: 2 Mal
Re: Richtige Verwendung von $src$
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?
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?
-
- 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$
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.
-
- Beiträge: 140
- Registriert: 10.11.2011, 10:53
- Hat sich bedankt: 18 Mal
- Danksagung erhalten: 2 Mal
Re: Richtige Verwendung von $src$
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*
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*
-
- Beiträge: 14164
- Registriert: 08.05.2013, 23:33
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Nordwürttemberg
- Hat sich bedankt: 585 Mal
- Danksagung erhalten: 1500 Mal
Re: Richtige Verwendung von $src$
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
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
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
-
- Beiträge: 140
- Registriert: 10.11.2011, 10:53
- Hat sich bedankt: 18 Mal
- Danksagung erhalten: 2 Mal
Re: Richtige Verwendung von $src$
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.
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.
-
- 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$
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 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???
Korrekt sein müsste es dann ja so:
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
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 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 ...
}
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 ...
}
wenn wir uns alle gegenseitig helfen, ist allen geholfen
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631
-
- Beiträge: 12115
- Registriert: 20.11.2016, 20:01
- Hat sich bedankt: 848 Mal
- Danksagung erhalten: 2150 Mal
- Kontaktdaten:
-
- 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$
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"
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
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631
-
- Beiträge: 9678
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 700 Mal
- Danksagung erhalten: 1626 Mal
Re: Richtige Verwendung von $src$
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 +++
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 +++
-
- 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$
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 )
Fragst im Homematic-Forum
Welt funktioniert wohl anders hier
Frustration
Du fragst Deine Frau, die seit 20 Jahren als Programmiererin arbeitet
Frau schüttelt mit Kopf
Frau hat Recht (Frau hat immer Recht )
Fragst im Homematic-Forum
Welt funktioniert wohl anders hier
Frustration
wenn wir uns alle gegenseitig helfen, ist allen geholfen
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631