Seite 5 von 6
Re: Ferien und Feiertage via ICAL
Verfasst: 18. Apr 2018 18:08
von michaL
Hallo,
danke. Ich bräuchte nur noch einen deutlichen Hinweis darauf, welches Binding ic loggen soll. Ich kann Auszüge auf der event.log oder der openhab.log angeben, aber ich weiß nicht, welchen Aspekt des loggings ich einstellen muss?!
Mfg Michael
Re: Ferien und Feiertage via ICAL
Verfasst: 19. Apr 2018 20:09
von michaL
Hallo noch einmal,
bitte gebt mir doch noch einen deutlichen Tipp, welche Logs ich hier einstellen soll. Interesse besteht weiterhin.
Danke im Voraus.
Mfg Michael
Re: Ferien und Feiertage via ICAL
Verfasst: 20. Apr 2018 14:54
von StefanH.
Gegenfrage, was zeigt denn deine sitemap in der basic ui an?
PS: Ich wuerde die Datei nicht immer vom orginal server runterladen, sondern local ablegen und einlesen (z.B. lokaler nginx)
Re: Ferien und Feiertage via ICAL
Verfasst: 21. Apr 2018 16:03
von michaL
Hallo,
danke für die Anregungen.
Ich habe nun in meine sitemap folgendes eingefügt:
Code: Alles auswählen
Frame label="Ferien" {
Text item=GlobalHolidayName label="Ferien/Feiertag [%s]" icon="calendar" visibility=[GlobalHoliday==ON]
}
Zu sehen bekomme ich beim Aufrufen der entsprechenden Sitemap in der BasicUI ein ansonsten leeres Feld mit der Beschriftung "Ferien".
Ich nehme an, dass sollte nicht so aussehen?
Mfg Michael
Re: Ferien und Feiertage via ICAL
Verfasst: 23. Apr 2018 11:55
von StefanH.
tja, da wird wohl nur seppy weiterhelfen können. Ich habe das Script nicht im Einsatz. Logs wäre sicherlich auch hilfreich. Vielleicht crashed das Script bei dir und setzt deshalb die Variable nicht.
Re: Ferien und Feiertage via ICAL
Verfasst: 23. Apr 2018 12:11
von michaL
Hallo,
Logs will ich gerne liefern, weiß nur nicht genau, welche Logs, welche Einstellungen für die Logs, etc.
Ich bin beim eingesetzten OS (Linux) genug bewandert, Auszüge relevanter Dateien zu geben. Ich habe aber schon selbst nach Einträgen gesucht (in /var/log/openhab2/openhab.log und /var/log/openhab2/events.log), aber keine gefunden. Daher suche ich um Hilfe. Ich kenne die openhab-Konsole rudimentär, weiß aber nicht, für welchen Bereich ich das Debuglevel hochsetzen muss.
Ich bin durchaus willig, im Moment aber wirklich unterinformiert.
Mfg Michael
Re: Ferien und Feiertage via ICAL
Verfasst: 25. Apr 2018 11:08
von seppy
Hi,
hast Du geprüft ob die Regel überhaupt getriggert wird? Dann sollte im openhab.log der folgende Auszug zu finden sein:
Code: Alles auswählen
HomeBox.SystemRules:Event_Holiday GlobalSpecialDayICAL changed: Updated Holiday Status: NEUERSTATUS (" + GlobalHolidayName.state + ")")
Wenn Du keinen entsprechenden Logeintrag findest läuft Dein HTTP Binding nicht sauber.
Grüße,
Seppy
Re: Ferien und Feiertage via ICAL
Verfasst: 25. Apr 2018 17:27
von michaL
Hallo,
danke seppy.
ergibt keine Ausgabe, genau wie
.
Ok, dann also das http-binding. Was könnte ich da machen?
Mfg Michael
PS: Ups, war nicht installiert. Ich dachte, ich hätte. Entschuldigt die Unruhe.
Jetzt habe ich auch Ausgaben:
Code: Alles auswählen
root@nuc:~# cat /var/log/openhab2/events.log | grep oliday
2018-04-25 17:28:21.904 [vent.ItemStateChangedEvent] - GlobalHolidayICAL changed from NULL to BEGIN:VCALENDAR
2018-04-25 17:28:22.030 [vent.ItemStateChangedEvent] - GlobalHoliday changed from NULL to ON
2018-04-25 17:28:22.034 [vent.ItemStateChangedEvent] - GlobalHolidayName changed from NULL to BEGIN:VCALENDAR
Code: Alles auswählen
root@nuc:~# cat /var/log/openhab2/openhab.log | grep oliday
2018-04-25 17:28:22.038 [INFO ] [pt.HomeBox.SystemRules:Event_Holiday] - GlobalSpecialDayICAL changed: Updated Holiday Status: ON (BEGIN:VCALENDAR
2018-04-25 17:28:22.045 [INFO ] [pt.HomeBox.SystemRules:Event_Holiday] - GlobalSpecialDayICAL changed: Updated Holiday Status: ON (BEGIN:VCALENDAR
Mal sehen, was nu ist.
Danke einstweilen.
Mfg Michael
PPS: Nun zeigt das Item in der sitemap:
Code: Alles auswählen
BEGIN:VCALENDAR VERSION:2.0 METHOD:PUBLISH PRODID:-//sc...
Hier noch einmal die Definition in meiner sitemap:
Code: Alles auswählen
Frame label="Informationen" visibility=[GlobalHoliday==ON] {
Text item=GlobalHolidayName label="Ferien/Feiertag [%s]" icon="calendar" visibility=[GlobalHoliday==ON]
Vermutlich noch nicht ganz korrekt, gell?
Mfg Michael
PPPS: Nun habe ich mal die Zeile mit dem 3. Oktober auskommentiert und in der Definition die Zeit (?) auf 72 herunter gesetzt.
Nun zeigt sich regelmäßig im Log:
Code: Alles auswählen
root@nuc:/etc/openhab2# tail -f /var/log/openhab2/openhab.log
2018-04-25 18:38:18.799 [WARN ] [.core.transform.TransformationHelper] - Cannot get service reference for transformation service of type JS
2018-04-25 18:38:18.799 [WARN ] [ab.binding.http.internal.HttpBinding] - Couldn't transform response because transformationService of type 'JS' is unavailable
Die Meldung wird regelmäßig wiederholt.
Kann damit jemand etwas anfangen?
Danke im Voraus.
Mfg Michael
Re: Ferien und Feiertage via ICAL
Verfasst: 26. Apr 2018 10:48
von seppy
Hi,
ich der letzten Fehlermeldung steht Dein Problem beschrieben
Code: Alles auswählen
Cannot get service reference for transformation service of type JS
Du hast den JS Transform Service nicht installiert/aktiviert.
Grüße,
Seppy
Re: Ferien und Feiertage via ICAL
Verfasst: 26. Apr 2018 17:36
von michaL
Hallo,
danke für die Rükmeldung.
Ich habe es nun installiert.
Die holiday.js sieht zu Testzwecken so aus:
Code: Alles auswählen
/**
* Javascript Transformator, der prüft ob das heutige Datum auf einen ICAL Eintrag fällt.
* Wenn ja wird die Kalenderbezeichnung des Tages zurückgegeben, wenn nicht ein false
*/
var holiday = false;
/**
* ijp - iCalendar javascript parser
* https://code.google.com/p/ijp/
*/
(function(i) {
var Ical = function Ical(){
this.version = '';
this.prodid = '';
this.events = [];
this.todos = [];
this.journals = [];
this.freebusys = [];
}
var xprops = 'x-[^:;]+';
var ianaprops = '[\\w]+[^:;]+'
var icalParser = {
icals : [],
propsList : {
'event':'(dtstamp|uid|dtstart|class|created|description|geo|last-mod|location|organizer|priority|seq|status|summary|transp|url|recurid|rrule|dtend|duration|attach|attendee|categories|comment|contact|exdate|rstatus|related|resources|rdate|'+xprops+'|'+ianaprops+')',
'freebusy':'(dtstamp|uid|contact|dtstart|dtend|organizer|url|attendee|comment|freebusy|rstatus|'+xprops+'|'+ianaprops+')',
'journal':'(dtstamp|uid|class|created|dtstart|last-mod|organizer|recurid|seq|status|summary|url|rrule|attach|attendee|categories|comment|contact|description|exdate|related|rdate|rstatus|'+xprops+'|'+ianaprops+')',
'todo':'(dtstamp|uid|class|completed|created|description|dtstart|geo|last-mod|location|organizer|percent|priority|recurid|seq|status|summary|url|rrule|due|duration|attach|attendee|categories|comment|contact|exdate|rstatus|related|resources|rdate|'+xprops+'|'+ianaprops+')'
},
parseIcal : function(icsString){
var cals = icsString.match(/BEGIN:VCALENDAR\r?\n(.*\r?\n)+?END:VCALENDAR/ig);
for(var index in cals){
var ical = new Ical();
ical.version = this.getValue('VERSION',cals[index]);
ical.prodid = this.getValue('PRODID',cals[index]);
cals[index] = cals[index].replace(/\r\n /g,'');
cals[index] = cals[index].replace(/BEGIN:VCALENDAR\r?\n/ig,'');
var reg = /BEGIN:(V.*?)\r?\n(.*\r?\n)+?END:\1/gi;
matches = cals[index].match(reg);
if(matches){
for(i=0;i<matches.length;i++){
this.parseVComponent(matches[i],ical);
}
}
this.icals[this.icals.length] = ical;
}
},
parseVComponent : function(vComponent,ical){
var nameComponent = vComponent.match(/BEGIN:V([^\s]+)/i)[1].toLowerCase();
vComponent = vComponent.replace(/\r?\n[\s]+/igm,''); //unfolding
vComponent = vComponent.replace(/(^begin|^end):.*/igm,'');
var props = vComponent.match(new RegExp(this.propsList[nameComponent]+'[:;].*','gim'));
if(props){
var component=[];
for(var index in props){
var nom = props[index].replace(/[:;].*$/,'');
var propKey = /*'prop_'+*/nom.toLowerCase();
if(component[propKey]===undefined) component[propKey] = [];
component[propKey][component[propKey].length] = this.getValue(nom,props[index]);
component['raw'] = vComponent;
}
if(ical[nameComponent+'s'] !== undefined)
ical[nameComponent+'s'][ical[nameComponent+'s'].length] = component;
}
},
getValue: function(propName,line){
var prop={};
line = line.replace(/^\s+/g,'').replace(/\s+$/gi,'');
reg = new RegExp('('+propName+')((?:;[^=]*=[^;:\n]*)*):([^\n\r]*)','gi');
var matches = reg.exec(line);
if(matches){
var valeur = RegExp.$3;
var tab_params=[];
if(RegExp.$2.length>0){
var params = RegExp.$2.substr(1).split(';');
var pair;
for(k=0;k<params.length;k++){
pair = params[k].split('=');
if(!pair[1]) pair[1] = pair[0];
tab_params[pair[0]] = pair[1];
}
}
prop = { value:valeur,name:propName };
if(Object.keys(tab_params).length>0)
prop.params = tab_params;
}
return prop;
},
}
/**
* Funktion um ical Datumsstring (YYYYMMDD) in Date Objekt zu wandeln
*/
function calenDate(icalStr) {
var strYear = icalStr.substr(0,4);
var strMonth = parseInt(icalStr.substr(4,2),10)-1;
var strDay = icalStr.substr(6,2);
var strHour = 0;
var strMin = 0;
var strSec = 0;
var oDate = new Date(strYear,strMonth, strDay, strHour, strMin, strSec)
return oDate;
}
icalParser.parseIcal(input);
var event = icalParser.icals[0].events[0];
icalParser.icals[0].events.forEach(function (currentValue, index, originalArray) {
/**
* Prüfen ob das aktuelle Datum zwischen zwei Daten liegt, bzw. auf einen Tag fällt
*/
var dateFrom = calenDate(currentValue.dtstart[0].value);
var dateTo = calenDate(currentValue.dtend[0].value);
var dateCheck = new Date();
var dateCheck = calenDate("20151225");
if (dateCheck >= dateFrom && dateCheck < dateTo){
holiday = currentValue.summary[0].value;
}
});
return holiday;
})(input);
Ich meint, damit das aktuelle Datum auf den 25.12.2015 gesetzt zu haben: gemeinhin sowohl ein Ferien- als auch ein Feiertag ist.
Das Log spricht:
Code: Alles auswählen
2018-04-26 16:58:53.493 [vent.ItemStateChangedEvent] - GlobalHolidayName changed from NULL to false
2018-04-26 17:09:11.125 [vent.ItemStateChangedEvent] - GlobalHolidayICAL changed from NULL to false
Zwische den beiden Uhrzeiten lag ein restart.
Danke für die Tipps und die (frei-)Zeit, die du in meine Problemchen investierst.
Mfg Michael