Ereignisprotokoll

WebUIs (DashUI, yahui, ...), Adapter (Hue, IRTrans, Sonos, ...), Logging, Scripting

Moderator: Co-Administratoren

womber
Beiträge: 256
Registriert: 18.05.2014, 14:42

Ereignisprotokoll

Beitrag von womber » 21.09.2014, 07:12

Hallo,

ich habe das gefunden und würde gerne so was bei mir auch einbinden. Kann mir jemand sagen, wie ich eine Variable mit Daten für Ereignisse füllen kann ? :shock:
Unbenannt.JPG
CCU2 * CCU.IO + DashUI + CCUHistorian auf Raspi 1 und 2 * * iPad 2 als Wandtablet * PocketControl HM (iPhone 6 + iPad Pro) * CUxD * Apple watch mit PocketControl HM * * 4x Amazon Alexa mit Homematic Steuerung

homematic_neuling
Beiträge: 130
Registriert: 13.06.2014, 21:18

Re: Ereignisprotokoll

Beitrag von homematic_neuling » 21.09.2014, 08:13

Frei aus dem email Skript ... Systemvariable vom Typ Text und mit Namen "EreignisListe" erstellen. Dann irgendein Programm erstellen (z.B. alle 5 Minuten). Keine Ahnung, ob man das auch automatisch triggern kann.
Und dann "wenn irgendwas dann Skript ausführen". Skript:


string drop = "";
integer iLastGroupIndex = 1;
string sCollectedNames = "";
string sCollectedValues = "";
string sCollectedDateTimes = "";
string s;
integer iStart = 0;
integer iCount = dom.GetHistoryDataCount();
integer rCount;


foreach( s, dom.GetHistoryData( iStart, iCount, &rCount ) )
{
integer iGroupIndex = s.StrValueByIndex(";",0).ToInteger();
string sDatapointId = s.StrValueByIndex(";",1);
string sRecordedValue = s.StrValueByIndex(";",2);
string sDateTime = s.StrValueByIndex(";",3);

string sDatapointName = "";
object oHistDP = dom.GetObject( sDatapointId );
if( oHistDP )
{
object oDP = dom.GetObject( oHistDP.ArchiveDP() );
if( oDP )
{
sDatapointName = oDP.Name();
boolean bSysVar = (oDP.IsTypeOf(OT_VARDP) || oDP.IsTypeOf(OT_ALARMDP));
if( !bSysVar )
{
object oCH = dom.GetObject( oDP.Channel() );
if( oCH )
{
sDatapointName = oCH.Name();
}
}

if( iLastGroupIndex != iGroupIndex )
{

drop = drop # sCollectedDateTimes # " " # sCollectedNames # " " # sCollectedValues # "\n";
sCollectedNames = "";
sCollectedValues = "";
iLastGroupIndex = iGroupIndex;
}

string id = oDP.ID();
string sRet = "";
string sValue = sRecordedValue;
Call("/esp/functions.fn::WriteDPText()");
sRecordedValue = system.GetVar("sRet");

sCollectedNames = sDatapointName;
sCollectedDateTimes = sDateTime;

if( !sCollectedValues.Length() )
{
sCollectedValues = sRecordedValue;
}
else
{
sCollectedValues = sCollectedValues#", "#sRecordedValue;
}

}
}

}
if( sCollectedValues.Length() )
{
drop = drop # sCollectedDateTimes # " " # sCollectedNames # " " # sCollectedValues;

}


if (drop == "") {
drop = "Keine Einträge im Protokoll !!!";
}

! setzen der Systemvariablen
dom.GetObject('EreignisListe').State(drop);

womber
Beiträge: 256
Registriert: 18.05.2014, 14:42

Re: Ereignisprotokoll

Beitrag von womber » 21.09.2014, 09:46

hmmmmm wenn ich das alle 5 min ausführen lasse, hängt sich meine Zentrale auf wenn ich auf Programm speichern gehe :shock: Wie führe ich das sonst aus?
CCU2 * CCU.IO + DashUI + CCUHistorian auf Raspi 1 und 2 * * iPad 2 als Wandtablet * PocketControl HM (iPhone 6 + iPad Pro) * CUxD * Apple watch mit PocketControl HM * * 4x Amazon Alexa mit Homematic Steuerung

hobbyquaker
Beiträge: 3978
Registriert: 12.07.2009, 20:01
Hat sich bedankt: 17 Mal
Danksagung erhalten: 176 Mal
Kontaktdaten:

Re: Ereignisprotokoll

Beitrag von hobbyquaker » 21.09.2014, 09:47

Der Screenshot ist von mir :-)

Ich hab dazu 2 Variablen angelegt. Eine hält die Liste direkt in HTML Code (bei mir ID 100020), in eine Schreib ich die Ereignisse rein (ID 100021):

Code: Alles auswählen

setObject(100020, {
    Name: "Ereignisse",
    TypeName: "VARDP",
    _persistent: true
});

setObject(100021, {
    Name: "Ereignis",
    TypeName: "VARDP",
    _persistent: true
});
Eine Subscription auf 100021 ruft eine Funktion auf die das neue Ereignis an die Liste anfügt:

Code: Alles auswählen

subscribe({id:100021}, function (obj) {
    ereignis(obj.newState.value);
});

function ereignis(text) {
    log("ereignis "+text);
    var ereignisStr = getState(100020);
    var ereignisArr;


    if (ereignisStr) {
        if (ereignisStr == "<ul><li></li></ul>") {
            ereignisArr = []
        } else {
            ereignisArr = ereignisStr.replace(/<ul><li>/, "").replace(/<\/li><\/ul>/, "").split("</li><li>");
        }
    } else {
        ereignisArr = [];
    }

    ereignisArr = ereignisArr.reverse();
    ereignisArr.push(text);

    ereignisArr.reverse().splice(20); // Liste auf 20 Einträge beschränken

    var str = ereignisArr.join("</li><li>");

    setState(100020, "<ul><li>"+str+"</li></ul>");
}
Um jetzt ein Ereignis in die Liste zu setzen schreibst einfach in die Variable 100021, zur Darstellung in DashUI nutze ich dann das Widget "basic - val - String (unescaped)"

Grüße

PS.: Das ist alles CCU.IO-Script, ich würde grundsätzlich davon abraten sowas mit Regascripts zu machen wenn man möchte dass die Rega stabil läuft ;-)

womber
Beiträge: 256
Registriert: 18.05.2014, 14:42

Re: Ereignisprotokoll

Beitrag von womber » 21.09.2014, 09:54

ok.. scheint doch bissel komplizierter zu sein :shock: Dazu bin ich noch zu neu hier... Versteh grad nur Bahnhof und Abfahrt.

Wie müssen die Variablen heissen? Wo finde ich die ID?

Verstehe ich das richtig:

1. 2 Variablen anlegen Typ "Zeichenkette"
(ID irgendwie rausfinden und im Script anpassen)
2. Die beiden Scripte im Intervall ausführen lassen (5min z.B.)
fertig? :?:

PS: hobbyquaker du machst echt nen SPITZEN Job... Dashui ist Weltklasse und dein Beispiel Dashui hat mir viel weitergeholfen! Danke dafür
CCU2 * CCU.IO + DashUI + CCUHistorian auf Raspi 1 und 2 * * iPad 2 als Wandtablet * PocketControl HM (iPhone 6 + iPad Pro) * CUxD * Apple watch mit PocketControl HM * * 4x Amazon Alexa mit Homematic Steuerung

hobbyquaker
Beiträge: 3978
Registriert: 12.07.2009, 20:01
Hat sich bedankt: 17 Mal
Danksagung erhalten: 176 Mal
Kontaktdaten:

Re: Ereignisprotokoll

Beitrag von hobbyquaker » 21.09.2014, 10:01

Nein, nicht ganz. Du packst einfach den Code von mir in eine .js-Datei (z.B. "ereignisse.js"), legst die im CCU.IO scripts-Verzeichnis ab und startest die Script-Engine neu. Die IDs 100020 und 100021 kannst Du übernehmen insofern die bei Dir noch frei sind (nachschauen in der CCU.IO Oberfläche unter Data->Datapoints). Die Ereignisse auslösen kannst Du bei diesem Weg allerdings auch nur über CCU.IO, sprich Du brauchst dann weitere CCU.IO-Scripte dafür, hier ein Beispiel für einen Bewegungsmelder:

Code: Alles auswählen

subscribe({id:"BidCos-RF.JEQ0459149:1.MOTION", valNe: false}, function (obj) {
        setState(100021, obj.newState.timestamp + " Bewegungsmelder Haustüre")
});

womber
Beiträge: 256
Registriert: 18.05.2014, 14:42

Re: Ereignisprotokoll

Beitrag von womber » 21.09.2014, 10:06

ah ok... Dass muss ich heute mittag machen.. hab nur fernzugriff auf die ccu... bin grad arbeiten... Ich sag bescheid, wenn ichs nicht hinbekomme. VIELEN DANK!!!!!!!!!!!!!!!!!
CCU2 * CCU.IO + DashUI + CCUHistorian auf Raspi 1 und 2 * * iPad 2 als Wandtablet * PocketControl HM (iPhone 6 + iPad Pro) * CUxD * Apple watch mit PocketControl HM * * 4x Amazon Alexa mit Homematic Steuerung

mtacki
Beiträge: 52
Registriert: 30.09.2014, 21:46

Re: Ereignisprotokoll

Beitrag von mtacki » 10.10.2014, 22:59

Ich muss da jetzt auch nochmal nachhaken...

Kann man einfach den gesamten Text in eine .js packen ??

Hab das jetzt einfach mal gemacht...
Danach kann ich die Variable "Ereignis" auch im DashUI als Widget einbinden-

Ich habe dann einfach mal versucht, meine Fernbedienung zu protokollieren...

Ist das richtig so:


subscribe({id:"HM-RC-4-2 LEQ0009623:4", valNe: false}, function (obj) {
setState(100021, obj.newState.timestamp + " Taster 4")
});

Auf den ersten Blick wird kein Text in die ProtokollDatei geschrieben..

Vielen Dank und Gruss !!

PS: So sieht meine "Ereignisse.js" jetzt aktuell aus:



_________________________________________________________

setObject(100020, {
Name: "Ereignisse",
TypeName: "VARDP",
_persistent: true
});

setObject(100021, {
Name: "Ereignis",
TypeName: "VARDP",
_persistent: true
});

subscribe({id:100021}, function (obj) {
ereignis(obj.newState.value);
});

function ereignis(text) {
log("ereignis "+text);
var ereignisStr = getState(100020);
var ereignisArr;


if (ereignisStr) {
if (ereignisStr == "<ul><li></li></ul>") {
ereignisArr = []
} else {
ereignisArr = ereignisStr.replace(/<ul><li>/, "").replace(/<\/li><\/ul>/, "").split("</li><li>");
}
} else {
ereignisArr = [];
}

ereignisArr = ereignisArr.reverse();
ereignisArr.push(text);

ereignisArr.reverse().splice(20); // Liste auf 20 Einträge beschränken

var str = ereignisArr.join("</li><li>");

setState(100020, "<ul><li>"+str+"</li></ul>");
}

subscribe({id:"HM-RC-4-2 LEQ0009623:4", valNe: false}, function (obj) {
setState(100021, obj.newState.timestamp + " Bewegungsmelder Haustüre")
});

_________________________________________________________

pix
Beiträge: 608
Registriert: 23.01.2012, 15:40
Danksagung erhalten: 1 Mal

Re: Ereignisprotokoll

Beitrag von pix » 11.10.2014, 13:59

Hallo mtacki,
mtacki hat geschrieben:subscribe({id:"HM-RC-4-2 LEQ0009623:4", valNe: false}, function (obj) {
setState(100021, obj.newState.timestamp + " Taster 4")
});
Es fehlt ein Semikolon in Zeile zwei und die GeräteID war nicht ganz richtig.

wenn du nur den Tastendruck von Taster 4 protokollieren willst, probier mal das:

Code: Alles auswählen

subscribe({id:"BidCos-RF.LEQ0009623:4.STATE", val: true}, function (obj) {
setState(100021, obj.newState.timestamp + " Taster 4");
});
sonst zugeschnitten auf diesen Typ Fernbedienung

Code: Alles auswählen

subscribe({
deviceType: /HM-RC-4-2/, // Geräte Typ
name: /STATE/,           // Status
val: true                // Tastendruck wahr
}, function (obj) {
setState(100021, obj.newState.timestamp + ' Taster ' + obj.channel.name);
});
Gruß,
Pix
150 Kanäle in 75 Geräten und 103 CUxD-Kanäle in 25 CUxD-Geräten (HomeMatic, FS20), CCU1 FW1.519, AddOns: CUxD 1.0, dropbear, E-Mail 1.2, ftp_server und regaWatchdog.
Logik und Visualisierung mit ioBroker auf Mac OS X Node.js. Eingebundene Systeme: Sonos, Rademacher Homepilot, Roomba, Network-OWL. Danke für das Homematic-Inventur-Skript von EnergyStar

mtacki
Beiträge: 52
Registriert: 30.09.2014, 21:46

Re: Ereignisprotokoll

Beitrag von mtacki » 11.10.2014, 16:57

Cool !
Vielen Dank !

Aber alles in eine .js ist richtig !?

Antworten

Zurück zu „CCU.IO“