Skript: Meldung bei offenen Fenstern

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

rentier-s
Beiträge: 355
Registriert: 19.06.2017, 09:24
Hat sich bedankt: 20 Mal
Danksagung erhalten: 63 Mal

Re: Skript: Meldung bei offenen Fenstern

Beitrag von rentier-s » 13.01.2023, 15:09

Alter Schwede, ich fress einen Besen. Das funktioniert!

Code: Alles auswählen

! Systemvariable Fenster_offen setzen
! -----------------------------------------------------

boolean debug = false;
if (!dom.GetObject("$this$")) { debug = true; }

integer offen = 0;
string liste = "";

object prog = dom.GetObject("$this$");

! object prog = dom.GetObject("8640");    ! zum Debuggen
if (debug) { WriteLine("conditions " # prog.Rule().RuleConditions()); }

string mcond;
string cc;
integer dpnr;
object dp;
object chan;

foreach(mcond, prog.Rule().RuleConditions().EnumIDs()) {

    object cond = dom.GetObject(mcond);
    if (debug) {WriteLine (mcond # " hat " # cond.CndSingleCount() # " subconditions "); }

    foreach(cc, system.GenerateEnum(0, cond.CndSingleCount() - 1)) {

        dpnr = cond.CndSingleConditions().GetAt(cc).LeftVal();
        dp = dom.GetObject(dpnr);
        if (debug) { WriteLine(dp # " = " # dp.Value()); }
        chan = dom.GetObject(dp.Device());

        if (
          ((chan.HssType() == "SHUTTER_CONTACT") && (dp.Value() == true)) ||
          ((chan.HssType() == "ROTARY_HANDLE_SENSOR") && (dp.Value() != 0))
        ) {
          offen = offen + 1;
          if (debug) { WriteLine(chan.Device()); }
          liste = liste # chan.Device() # "<br />";
        }

    }

}

if (debug) { WriteLine("offen " # offen); }
dom.GetObject("Fenster_offen").State(offen);

! In liste stehen die Geräte, z.B. für Pushover Meldung
if (debug) { WriteLine(liste); }

Benutzeravatar
Henke
Beiträge: 1500
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 133 Mal
Danksagung erhalten: 304 Mal

Re: Skript: Meldung bei offenen Fenstern

Beitrag von Henke » 13.01.2023, 19:59

Alternativ mal die Lösung, wie sie unter NodeRed aussieht:
Screenshot 2023-01-13 195305.jpg
Statt des Blocks "Testräume" wird eine "ccu rpc event node" genommen, die z.B. alle Fensterkontakte aus einem bestimmten Gewerk ausgibt.
Damit reduziert sich das ganze auf die 3 Standard Nodes in der Mitte.
Simpel, oder?

Code: Alles auswählen

[
    {
        "id": "a1d358a73b61e873",
        "type": "group",
        "z": "ac6a9bc0.042738",
        "name": "Testräume",
        "style": {
            "label": true
        },
        "nodes": [
            "7292273398973169",
            "10cf6c8448211ac4",
            "d38baa4b2720abd4",
            "2050d0f4335a0e97",
            "91ccfe53312e9de4",
            "419feece341c2a02",
            "3bfb724b10506119",
            "9717e7ee1fe826fd"
        ],
        "x": 1214,
        "y": 359,
        "w": 332,
        "h": 402
    },
    {
        "id": "7292273398973169",
        "type": "inject",
        "z": "ac6a9bc0.042738",
        "g": "a1d358a73b61e873",
        "name": "Zu",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 1310,
        "y": 600,
        "wires": [
            [
                "2050d0f4335a0e97"
            ]
        ]
    },
    {
        "id": "10cf6c8448211ac4",
        "type": "inject",
        "z": "ac6a9bc0.042738",
        "g": "a1d358a73b61e873",
        "name": "Mitte",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "1",
        "payloadType": "num",
        "x": 1310,
        "y": 660,
        "wires": [
            [
                "2050d0f4335a0e97"
            ]
        ]
    },
    {
        "id": "d38baa4b2720abd4",
        "type": "inject",
        "z": "ac6a9bc0.042738",
        "g": "a1d358a73b61e873",
        "name": "Auf",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "2",
        "payloadType": "num",
        "x": 1310,
        "y": 720,
        "wires": [
            [
                "2050d0f4335a0e97"
            ]
        ]
    },
    {
        "id": "2050d0f4335a0e97",
        "type": "change",
        "z": "ac6a9bc0.042738",
        "g": "a1d358a73b61e873",
        "name": "Bad",
        "rules": [
            {
                "t": "set",
                "p": "room",
                "pt": "msg",
                "to": "Bad",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "Bad",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1470,
        "y": 660,
        "wires": [
            [
                "d9a5eb5954bec856"
            ]
        ]
    },
    {
        "id": "91ccfe53312e9de4",
        "type": "change",
        "z": "ac6a9bc0.042738",
        "g": "a1d358a73b61e873",
        "name": "Küche",
        "rules": [
            {
                "t": "set",
                "p": "room",
                "pt": "msg",
                "to": "Küche",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "Küche",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1470,
        "y": 460,
        "wires": [
            [
                "d9a5eb5954bec856"
            ]
        ]
    },
    {
        "id": "419feece341c2a02",
        "type": "inject",
        "z": "ac6a9bc0.042738",
        "g": "a1d358a73b61e873",
        "name": "Zu",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 1310,
        "y": 400,
        "wires": [
            [
                "91ccfe53312e9de4"
            ]
        ]
    },
    {
        "id": "3bfb724b10506119",
        "type": "inject",
        "z": "ac6a9bc0.042738",
        "g": "a1d358a73b61e873",
        "name": "Mitte",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "1",
        "payloadType": "num",
        "x": 1310,
        "y": 460,
        "wires": [
            [
                "91ccfe53312e9de4"
            ]
        ]
    },
    {
        "id": "9717e7ee1fe826fd",
        "type": "inject",
        "z": "ac6a9bc0.042738",
        "g": "a1d358a73b61e873",
        "name": "Auf",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "2",
        "payloadType": "num",
        "x": 1310,
        "y": 520,
        "wires": [
            [
                "91ccfe53312e9de4"
            ]
        ]
    },
    {
        "id": "9b9eeb05d413e29a",
        "type": "group",
        "z": "ac6a9bc0.042738",
        "name": "Statt Script",
        "style": {
            "label": true
        },
        "nodes": [
            "d9a5eb5954bec856",
            "9f1fce200157e08e",
            "5391cdeb547f1c2f"
        ],
        "x": 1594,
        "y": 499,
        "w": 392,
        "h": 142
    },
    {
        "id": "d9a5eb5954bec856",
        "type": "switch",
        "z": "ac6a9bc0.042738",
        "g": "9b9eeb05d413e29a",
        "name": "Fenster zu?",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "neq",
                "v": "0",
                "vt": "num"
            },
            {
                "t": "else"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 1690,
        "y": 560,
        "wires": [
            [
                "9f1fce200157e08e"
            ],
            [
                "5391cdeb547f1c2f"
            ]
        ]
    },
    {
        "id": "9f1fce200157e08e",
        "type": "trigger",
        "z": "ac6a9bc0.042738",
        "g": "9b9eeb05d413e29a",
        "name": "",
        "op1": "",
        "op2": "",
        "op1type": "nul",
        "op2type": "payl",
        "duration": "10",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "",
        "bytopic": "topic",
        "topic": "topic",
        "outputs": 1,
        "x": 1890,
        "y": 540,
        "wires": [
            [
                "f264f10966b3ce18"
            ]
        ]
    },
    {
        "id": "5391cdeb547f1c2f",
        "type": "change",
        "z": "ac6a9bc0.042738",
        "g": "9b9eeb05d413e29a",
        "name": "Reset",
        "rules": [
            {
                "t": "set",
                "p": "reset",
                "pt": "msg",
                "to": "true",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1870,
        "y": 600,
        "wires": [
            [
                "9f1fce200157e08e"
            ]
        ]
    },
    {
        "id": "95b0c0a8d7eb57c5",
        "type": "group",
        "z": "ac6a9bc0.042738",
        "name": "Ausgabe -> weiterleiten an Push",
        "style": {
            "label": true
        },
        "nodes": [
            "f264f10966b3ce18"
        ],
        "x": 2034,
        "y": 519,
        "w": 210,
        "h": 82
    },
    {
        "id": "f264f10966b3ce18",
        "type": "debug",
        "z": "ac6a9bc0.042738",
        "g": "95b0c0a8d7eb57c5",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "true",
        "targetType": "full",
        "statusVal": "room",
        "statusType": "msg",
        "x": 2110,
        "y": 560,
        "wires": []
    }
]

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Skript: alle Datenpunkte eines WebUI Programms auslesen

Beitrag von MichaelN » 15.01.2023, 15:30

rentier-s hat geschrieben:
13.01.2023, 15:09
Alter Schwede, ich fress einen Besen. Das funktioniert!
Ich war mal so frei und habe deinen Code als BAsis für
MichaelN hat geschrieben:
13.01.2023, 10:30
Ich wollte mir sowieso mal eine universelle Routine basteln um durch alle Bedingungen eines Programm zu iterieren und die Datenpunkte einzusammeln.
genutzt. Dieses Skript kann man auf jedes Programm loslassen (zum Testen unter "Skript testen" in Zeile 12 die ID eines Programms zuweisen) und erhält eine Auflistung aller darin befindlichen Bedingungen und eine tab-separierte Liste der Datenpunkte.

EDIT: was mir grade noch einfiel - bei Zeitmodulen gibt es eine Tücke. Die stehen nämlich nicht im LeftVal, sondern im RightVal. Im LeftVal steht der aktuelle Zeitpunkt. Hat mich etwas Zeit gekostet den Grund für den dadurch verursachten SyntaxError zu finden.

Code: Alles auswählen

! alle Datenpunkte eines WebUI Programms auslesen
! siehe https://homematic-forum.de/forum/viewtopic.php?f=31&t=77511&p=752915#p752915

boolean debug = true;
if (!dom.GetObject("$this$")) { debug = true; }

integer offen = 0;
string liste = "";

object prog = dom.GetObject("$this$");

! object prog = dom.GetObject("47570");    ! zum Debuggen
if (debug) { WriteLine("*** Programm '" # prog.Name() # "' hat " # prog.Rule().RuleConditions().Count() # " Main Conditions mit den Nr.: " # prog.Rule().RuleConditions()); }

string mcond;
string cc;
integer dpnr;
object dp;
object chan;  object devOfChan;

foreach(mcond, prog.Rule().RuleConditions().EnumIDs()) {

    object cond = dom.GetObject(mcond);
    if (debug) {WriteLine ("# CND " # mcond # " hat " # cond.CndSingleCount() # " subcondition(s) "); }

    foreach(cc, system.GenerateEnum(0, cond.CndSingleCount() - 1)) {

        if ((cond.CndSingleConditions().GetAt(cc).LeftValType()) == ivtCurrentDate) {
        	!Zeitmodul, rechte Seite auslesen
            dpnr = cond.CndSingleConditions().GetAt(cc).RightVal1();
            } else {
            dpnr = cond.CndSingleConditions().GetAt(cc).LeftVal();
        }

        dp = dom.GetObject(dpnr);

        if (debug) { WriteLine("dpnr:" # dpnr # " | dp.Name:" # dp.Name() # " | TypeName:" # dp.TypeName() # " | ValueTypeStr:" # dp.ValueTypeStr() # " | Value: " # dp.Value()); }
        if ((dp.TypeName() == "HSSDP") || (dp.TypeName() == "VARDP")) {
          if ( liste == "" ) { liste = dp.Name(); } else {
          liste = liste # "\t" # dp.Name() ; }
        }
        if (dp.TypeName() == "HSSDP") {
          chan = dom.GetObject(dp.Channel());
          if (debug) { WriteLine("------------ Channel ID: " # chan.ID() # " | Name: " # chan.Name() # " | HssType: " # chan.HssType() # " | HssParentType: " # chan.HssParentType()); }
          devOfChan = dom.GetObject(chan.Device());
          if (debug) { WriteLine("------------- Device ID: " # devOfChan.ID() # " | Name: " # devOfChan.Name() # " | HssType: " # devOfChan.HssType() # " | Interface: " # devOfChan.Interface()); }
        }
    }
}


! In liste stehen die Geräte tab-separiert zur Weiterverarbeitung mit foreach
if (debug) { WriteLine("\n*** Liste aller Datenpunkte:\n" # liste); }


Zuletzt geändert von MichaelN am 26.01.2023, 18:46, insgesamt 1-mal geändert.
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 +++

rentier-s
Beiträge: 355
Registriert: 19.06.2017, 09:24
Hat sich bedankt: 20 Mal
Danksagung erhalten: 63 Mal

Re: Skript: Meldung bei offenen Fenstern

Beitrag von rentier-s » 17.01.2023, 08:23

dtp hat geschrieben:
13.01.2023, 14:13
Außerdem orientiert sich die Meldung immer am zuletzt betätigten Fenster eines Raums. Aber das dürfte kein so großes Problem sein, da sich ein Fenster ja in der Regel nicht von alleine öffnet (zumindest nicht mit den Drehgriff-Sensoren).
dtp hat geschrieben:
13.01.2023, 14:13
Ich hab das übrigens über einen CUxD-Timer realisiert.
Das Timer Programm würde ich umdrehen. Wenn alles zu, dann Timer stoppen, Sonst wenn CCU Status Normalbetrieb, dann Timer starten. So brauchst Du die Fenster nur einmal zusammen klicken. Mit einer zusätzlichen Abfrage, ob der Timer bereits läuft, könntest Du das "Problem des letzten Fensters" umgehen.

Ich mag die periodische Ausführung eh nicht, bei mir kommt die Meldung sofort bei Abwesenheit, bzw. die Anzahl der offenen Fenster wird an die Tasker Widgets geschickt, sobald sich ein Fenster bewegt.

dtp hat geschrieben:
13.01.2023, 14:13
Im Moment stimmen da aber die Timestamps irgendwie noch nicht. Muss der Sache noch mal auf den Grund gehen. Evtl. frage ich da den falschen Datenpunkt ab.
Sieht eigentlich gut aus. Was ich nicht verstehe, warum ziehst Du eine Stunde ab?

Code: Alles auswählen

integer duration = currenttime.ToInteger() - (dom.GetObject("Fenster Bad Ch1").DPByHssDP("STATE")).Timestamp().ToInteger();
string durS = duration.ToTime().Format("%S");
string durM = duration.ToTime().Format("%M");
string durH = duration.ToTime().Format("%H");
WriteLine(" seit "#durH#":"#durM#":"#durS#" Stunden offen.");
liefert bei mir probehalber das richtige Ergebnis.


Eine kleine Anmerkung noch zur Pushover Nachricht. Du startest das zugehörige Programm, das dann wohl den Inhalt der SV versendet, händisch am Ende des Skripts. Du könntest stattdessen in dem Programm
svPushText gleich * bei Aktualisierung auslösen
und CCU SV Status gleich Normalbetrieb nur prüfen,
den Dann Zweig leer lassen und im Sonst das Pushover Skript verzögert um 1 Sekunde. Damit verschickt das Programm automatisch, sobald die SV beschrieben wird. Nutze ich so für eine Weckfunktion.

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Skript: Meldung bei offenen Fenstern

Beitrag von dtp » 17.01.2023, 12:33

rentier-s hat geschrieben:
17.01.2023, 08:23
Eine kleine Anmerkung noch zur Pushover Nachricht. Du startest das zugehörige Programm, das dann wohl den Inhalt der SV versendet, händisch am Ende des Skripts. Du könntest stattdessen in dem Programm
svPushText gleich * bei Aktualisierung auslösen
und CCU SV Status gleich Normalbetrieb nur prüfen,
den Dann Zweig leer lassen und im Sonst das Pushover Skript verzögert um 1 Sekunde. Damit verschickt das Programm automatisch, sobald die SV beschrieben wird. Nutze ich so für eine Weckfunktion.
Genau das wollte ich nicht, um zu vermeiden, dass bei jeder Änderung der Systemvariablen eine Push-Nachricht generiert wird. Wenn z.B. die letzte Push-Nachricht eine Alarmmeldung mit hoher Priorität und Alarmsound war, dann würde jede Änderung der Systemvariablen zu weiteren Alarmmeldungen dieser Art führen. Da würden sich die User des zPNP bestimmt bedanken. ;)
rentier-s hat geschrieben:
17.01.2023, 08:23
Was ich nicht verstehe, warum ziehst Du eine Stunde ab?
Ich hatte in der Vergangenheit mal festgestellt, dass es da ein Fehlberechnung gab. Evtl. hat sich das erledigt. Muss ich noch mal prüfen. Danke für den Trigger.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

schlichi
Beiträge: 385
Registriert: 26.08.2016, 19:26
System: Alternative CCU (auf Basis OCCU)
Wohnort: Erding
Hat sich bedankt: 60 Mal
Danksagung erhalten: 26 Mal

Re: Skript: Meldung bei offenen Fenstern

Beitrag von schlichi » 17.01.2023, 18:06

Hallo,
Ich hatte in der Vergangenheit mal festgestellt, dass es da ein Fehlberechnung gab.
.... getestet mit HmIP-SWDO-I, ... ist immer noch da!

Code: Alles auswählen

 seit 01:00:47 Stunden offen.
Außerdem ist zu beachten, daß der Zeitraum (hier 47 sec) seit der letzten Änderung ausgegeben wird. Man muß also den aktuellen Zustand (offen/geschlossen) berücksichtigen.

Gruß
schlichi
... inzwischen autodidakter, fortgeschrittener Anfänger mit bestandener Einstiegsprüfung für den Expertenmodus Teil 3 (erfahrener Anwender) :roll:

Tyfys
Beiträge: 531
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 26 Mal
Danksagung erhalten: 121 Mal

Re: Skript: Meldung bei offenen Fenstern

Beitrag von Tyfys » 17.01.2023, 20:46

Bei der Berechnung von Differenzen zwischen Timestamps muss man berücksichtigen,
dass die Timestamps auf der UTC basieren.
In Deutschland ist das UTC+1 - also plus 1 Stunde.

Diese Stunde bzw 3600 Sekunden muss von der Zeitdifferenz noch abziehen.

Einfaches Beispiel:

Code: Alles auswählen

integer zeit1= localtime.ToInteger();
integer zeit2= zeit1;
integer difsek = zeit1-zeit2;
WriteLine(difsek);
time dtime= difsek.ToTime();
WriteLine(dtime.Format("%H:%M:%S"));
!nach UTC-Offset-Abzug
difsek=difsek-3600;
time dtime= difsek.ToTime();
WriteLine(dtime.Format("%H:%M:%S"));
Gruß
Harry

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

Re: Skript: Meldung bei offenen Fenstern

Beitrag von Baxxy » 17.01.2023, 23:09

Über den Timestamp() vom "STATE" - Datenpunkt die "wie lange schon auf/zu Meldung" zu generieren war doch noch nie praktikabel da der Timestamp() auch durch zykl. Meldungen "aktualisiert" wird.

Ich mache das über LastDPActionTimeSeconds() vom zugehörigen Kanal.
Sieht dann beispielhaft so aus und darf gerne noch optimiert werden.

Code: Alles auswählen

string TFK_CH1_name = 'Fensterkontakt BX: SWDM-B2:1 - Fensterstatus';

object oTFK_Channel; string TFK_DEV_Name;
string TFK_CH1_status;integer time_diff_s;
integer Days_On; integer Mins_On; integer Hours_On;
string out;

oTFK_Channel = channels.Get (TFK_CH1_name);
if ( oTFK_Channel ) {
     TFK_DEV_Name = (dom.GetObject(oTFK_Channel.Device())).Name();
     TFK_CH1_status = oTFK_Channel.DPByHssDP("STATE").Value().ToInteger().ToString().Replace("0", "Geschlossen").Replace("1", "Offen");
     time_diff_s = localtime.ToInteger() - oTFK_Channel.LastDPActionTimeSeconds();
     integer Days_On = time_diff_s / 86400; integer Mins_On = (time_diff_s % 3600) / 60; integer Hours_On = (time_diff_s / 60 - Days_On * 1440) / 60;
     out = "'"# TFK_CH1_name #"' --> '"# TFK_CH1_status #"' seit: "# Days_On #" Tag(en) "# Hours_On #" Stunde(n) und "# Mins_On #" Minute(n)";
     if ( ! oTFK_Channel.LastDPActionTimeSeconds() ) { out = "'"# TFK_CH1_name #"' --> 'unbekannt' wegen kürzlichem Zentralen-Neustart!"; }
     WriteLine(out);
   }
Beispielausgabe:

Code: Alles auswählen

'Fensterkontakt BX: SWDM-B2:1 - Fensterstatus' --> 'Offen' seit: 0 Tag(en) 4 Stunde(n) und 50 Minute(n)

Tibin
Beiträge: 507
Registriert: 26.10.2016, 16:08
System: CCU
Hat sich bedankt: 19 Mal
Danksagung erhalten: 15 Mal

Re: Skript: Meldung bei offenen Fenstern

Beitrag von Tibin » 26.01.2023, 17:36

MichaelN hat geschrieben:
15.01.2023, 15:30
Dieses Skript kann man auf jedes Programm loslassen (zum Testen unter "Skript testen" in Zeile 12 die ID eines Programms zuweisen) und erhält eine Auflistung aller darin befindlichen Bedingungen und eine tab-separierte Liste der Datenpunkte.
Habs mal ausprobiert.....da wurde bei mir eine Warnmeldung im Log generiert, auch bei dem Code von rentier-s

Code: Alles auswählen

CCU3-WebUI local0.warn ReGaHss: WARNING: incorrect use of Device()
Wenn in Zeile 43...

Code: Alles auswählen

chan = dom.GetObject(dp.Device());
...Device durch Channel ersetzt wird, gibt es keine Meldung (hab nur nach der Warnmeldung gegoogelt) vielleicht ist es für euch interessant.
Gruß Tino

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Skript: Meldung bei offenen Fenstern

Beitrag von MichaelN » 26.01.2023, 18:45

Danke für den Hinweis. Habe das dann gleich noch genutzt um mehr Daten für Channel und Device auszugeben. Skript angepasst unter viewtopic.php?f=31&t=77511&p=752915#p752915
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 +++

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“