Ereignisprotokoll
Moderator: Co-Administratoren
Ereignisprotokoll
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 ?
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 ?
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
-
- Beiträge: 130
- Registriert: 13.06.2014, 21:18
Re: Ereignisprotokoll
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);
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);
Re: Ereignisprotokoll
hmmmmm wenn ich das alle 5 min ausführen lasse, hängt sich meine Zentrale auf wenn ich auf Programm speichern gehe 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
-
- Beiträge: 3978
- Registriert: 12.07.2009, 20:01
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 176 Mal
- Kontaktdaten:
Re: Ereignisprotokoll
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):
Eine Subscription auf 100021 ruft eine Funktion auf die das neue Ereignis an die Liste anfügt:
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
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
});
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>");
}
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
Re: Ereignisprotokoll
ok.. scheint doch bissel komplizierter zu sein 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
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
-
- Beiträge: 3978
- Registriert: 12.07.2009, 20:01
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 176 Mal
- Kontaktdaten:
Re: Ereignisprotokoll
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")
});
Re: Ereignisprotokoll
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
Re: Ereignisprotokoll
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")
});
_________________________________________________________
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")
});
_________________________________________________________
Re: Ereignisprotokoll
Hallo mtacki,
wenn du nur den Tastendruck von Taster 4 protokollieren willst, probier mal das:
sonst zugeschnitten auf diesen Typ Fernbedienung
Gruß,
Pix
Es fehlt ein Semikolon in Zeile zwei und die GeräteID war nicht ganz richtig.mtacki hat geschrieben:subscribe({id:"HM-RC-4-2 LEQ0009623:4", valNe: false}, function (obj) {
setState(100021, obj.newState.timestamp + " Taster 4")
});
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");
});
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);
});
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
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