Hi,
spontan würde mir einfallen einfach einen Timer für Mitternacht einzurichten, der bei einem exceptionday ein objekt auf true setzt, das man dann in weiteren logiken auswerten kann. Das Objekt muss natürlich bei einem nicht-exceptionday auch wieder auf false gesetzt werden...
Gruß, Waldemar
Ankündigung
Einklappen
Keine Ankündigung bisher.
LinKNX: Diskussionen zu Tipps, Tricks und Beispiele
Einklappen
X
-
linknx und exceptiondays
Hallo,
hat jemand erfahrung damit, in linknx mit den exceptiondays zu arbeiten?
Die Anwendung bei Zeitschaltfunktionen ist ja klar:
bedeutet, dass die Funktion nicht an "Ausnahmetagen" ausgeführt wird. Mit exception="yes" ist es unabhängig davon.Code:<at hour="14" min="00" wdays="12345" exception="no" />
Aber ich möchte auswerten, ob ein "Ausnahmetag" ist. Also verschiedene Funktionen nur an diesen Tagen ausführen.
Wie setzte ich sowas um, bzw. is das überhaupt möglich?
Einen Kommentar schreiben:
-
Hallo Carsten,
Hab grad keinen Zugriff aufs System. Muss ich mal gucken. Ich hab da keine EMails aufgesetzt.Zitat von netsrac Beitrag anzeigenDie Logs werden dem User als Mail zugestellt. Je nachdem ob eMails auf dem Server aufgesetzt sind. Schau einfach mal in /var/mail/username. Kannst Du auch einfach mit 'nem Texteditor öffnen.
Aber trotzdem super Tip!
Ich dachte immer, die erste geschweifte müsste man escapen.Zitat von netsrac Beitrag anzeigenZu Deinem obigen Code:
Erkläre mir mal, was der "\" vor der ersten Klammer soll :-)
Habs grad getestet - geht doch glatt auch ohne.
Da bin ich grad erst gestern Abend drüber gestolpert.Zitat von netsrac Beitrag anzeigenZum Aufräumen der Logfiles gibt es übrigens ein besseres Tool namens "logrotate". Dort kannst Du die Maximalgröße einies einzelnen Files angeben und wie viele "archive" Du behalten willst.
Wenn ich da das eibd.log mit einbeziehe muss ich dann aber wohl nen Deamon-Restart mit reinnehmen, oder?
Jedenfalls erzeugt er kein neues Logfile, wenn man ihm das alte im laufenden Betrieb weglöscht (und das macht logrotate doch, oder?).
Bin ich der einzige, der den eibd.log mit ins logrotate nehmen will?
Oder gibts da schon ne logrotate.conf dafür?
Oh Mann, jetzt sind wir langsam völlig OT. Und ich hab eh schon den Fred gekapert (eigentlich nur für EINE KURZE FRAGE).
Ich übergeb den Fred jetzt wieder offiziell an den TE.
logrotate und Deamon-Restart krieg ich wohl auch alleine in den Griff. Schaut jetzt nicht so sonderlich komplex aus
- hoffe ich mal....
Einen Kommentar schreiben:
-
Die Logs werden dem User als Mail zugestellt. Je nachdem ob eMails auf dem Server aufgesetzt sind. Schau einfach mal in /var/mail/username. Kannst Du auch einfach mit 'nem Texteditor öffnen.Zitat von dundee Beitrag anzeigenHab bei mir in der crontab
Also immer am 1. des Monats um 03:00.Code:0 3 1 * * find /var/log -name '*.gz' -exec rm -f \{} \;
Läuft aber nicht.
Gibts irgendwo nen Log, wo man Fehlermeldungen sieht?
Zu Deinem obigen Code:
Erkläre mir mal, was der "\" vor der ersten Klammer soll :-)
Versuchs mal so:
Zum Aufräumen der Logfiles gibt es übrigens ein besseres Tool namens "logrotate". Dort kannst Du die Maximalgröße einies einzelnen Files angeben und wie viele "archive" Du behalten willst.Code:0 3 1 * * (find /var/log -name \*.gz -exec rm -f {} \;)
Gruß, netsrac
Einen Kommentar schreiben:
-
Hallo Carsten,
muss das ein Shell-Script sein, oder kann ich da auch direkt Kommandos angeben.
Hab bei mir in der crontab
Also immer am 1. des Monats um 03:00.Code:0 3 1 * * find /var/log -name '*.gz' -exec rm -f \{} \;
Läuft aber nicht.
Gibts irgendwo nen Log, wo man Fehlermeldungen sieht?
Sorry, wenn ich den Fred gekapert hab.
Aber die Info hilft dem Michi sicher auch.
Einen Kommentar schreiben:
-
So...CRON ist echt kein Hexenwerk.Zitat von Michixx Beitrag anzeigenEdit: Ok, über Crontab habe ich jetzt was über Google finden können, scheint echt einfach zu sein.
Ich muß dann nur mal schauen, wie ich dann die Werte wieder nach Linknx. bekomme.
Einfach auf Shell-Ebene folgendes Kommando eingeben:
Daraufhin öffnet sich Dein Lieblingseditor. Nun einfach pro Zeile ein Eintrag. Die Spalten sehen dabei wie folgt aus:Code:crontab -e
Für jede Zeit-Spalte kannst Du ein "*" verwenden.Code:field allowed values ----- -------------- minute 0-59 hour 0-23 day of month 1-31 month 1-12 (or names, see below) day of week 0-7 (0 or 7 is Sun, or use names) script name
Wenn Du also alle 5 Minuten ein Script ausführen willst, dann schreibst Du:
Ein Script zu festen 10-er Minuten ausführen kannst Du hiermit:Code:*/5 * * * * /path/to/script.sh
Oder immer kurz vor Mitternacht:Code:10,20,30,40,50 * * * * /path/to/script2.sh
Nur mal so als Idee....Code:59 23 * * * /path/to/script3.sh
Gruß, Netsrac
Einen Kommentar schreiben:
-
Problem scheint gelöst
So,
jetzt habe ich den/die Übeltäter gefunden.
Das hatte ich jetzt auch schon vermutet, denn je mehr Shell-Scripte ich hinzugefügt habe desto schneller ist Linknx ausgestiegen.Zitat von netsrac Beitrag anzeigenIch vermute mal, dass LinKNX hier stehen bleibt, weil irgendein Shell-Script hängen bleibt.
Die Scripte haben sich nicht beendet, es sind nach jedem Aufruf noch netcat Prozesse sowie die Scripte als Prozess über ps zu sehen.
Ich habe das Scrpit nun abgeändert, nun ist alles sauber.Code:2798 ? S 0:00 sh -c /home/rrdtool/update_database_RL_Flur.sh 2799 ? S 0:00 /bin/bash /home/rrdtool/update_database_RL_Flur.sh 2811 ? S 0:00 netcat localhost 1028 2812 ? S 0:00 sh -c /home/rrdtool/update_database_RL_WZ_HK2.sh 2813 ? S 0:00 /bin/bash /home/rrdtool/update_database_RL_WZ_HK2.sh 2818 ? S 0:00 netcat localhost 1028 2819 ? S 0:00 sh -c /home/rrdtool/update_database_RL_WZ_HK1.sh 2820 ? S 0:00 /bin/bash /home/rrdtool/update_database_RL_WZ_HK1.sh 2832 ? S 0:00 netcat localhost 1028 2840 ? S 0:00 sh -c /home/rrdtool/update_database_RL_Erdgeschoss.sh 2841 ? S 0:00 /bin/bash /home/rrdtool/update_database_RL_Erdgeschoss.sh 2853 ? S 0:00 netcat localhost 1028 2854 ? S 0:00 sh -c /home/rrdtool/update_database_VL_Erdgeschoss.sh 2855 ? S 0:00 /bin/bash /home/rrdtool/update_database_VL_Erdgeschoss.sh 2867 ? S 0:00 netcat localhost 1028 2884 ? S 0:00 sh -c /home/rrdtool/update_database_RL_Flur.sh 2885 ? S 0:00 /bin/bash /home/rrdtool/update_database_RL_Flur.sh 2897 ? S 0:00 netcat localhost 1028 2898 ? S 0:00 sh -c /home/rrdtool/update_database_RL_WZ_HK2.sh 2899 ? S 0:00 /bin/bash /home/rrdtool/update_database_RL_WZ_HK2.sh 2904 ? S 0:00 netcat localhost 1028 2906 ? S 0:00 sh -c /home/rrdtool/update_database_RL_WZ_HK1.sh 2907 ? S 0:00 /bin/bash /home/rrdtool/update_database_RL_WZ_HK1.sh 2919 ? S 0:00 netcat localhost 1028 2920 ? R 0:00 ps ax
Code:#!/bin/bash cd /home/rrdtool # Read temperature from sensor Arbeitszimmer tempread=`cat /mnt/1wire/28.B3B100040000/temperature` OBJECTID="Arbeitszimmer_Temperatur" #printf '<write><object id="%s" value=%s /></write>\4' "$OBJECTID" "$tempread" | netcat localhost 1028 > /dev/null 2>&1 [COLOR=darkred]printf '<write><object id="%s" value=%s /></write>\4' "$OBJECTID" "$tempread" | nc -q 1 localhost 1028 > /dev/null 2>&1[/COLOR]
Ich denke auch dass es da besser aufgehoben ist.Zitat von netsrac Beitrag anzeigenSowas gehört in den CRON. Hier kannst Du zu festgelegten Zeiten/Intervallen einfach ein Shell-Script aufrufen. Mach einfach mal "man crontab". Ist super einfach.
Leider habe ich mich damit noch nicht richtig auseinander gesetzt.
Kannst mir da mal jemand zu meinen Script ein einfaches Beispiel erstellen?
Wenn ich erst einmal einen Anfang/Vorlage habe, dann komme ich mit dem Rest auch selber klar.
Besten Dank.
Gruß
Michi
Edit: Ok, über Crontab habe ich jetzt was über Google finden können, scheint echt einfach zu sein.
Ich muß dann nur mal schauen, wie ich dann die Werte wieder nach Linknx. bekomme.
Einen Kommentar schreiben:
-
Habe gerade mal in Dein XML geschaut...
Ich vermute mal, dass LinKNX hier stehen bleibt, weil irgendein Shell-Script hängen bleibt.Code:<rule id="sendRL_Flur_Temp"> <condition type="timer" trigger="true"> <every>250</every> </condition> <actionlist> <action type="shell-cmd" cmd="/home/rrdtool/update_database_RL_Flur.sh"/> </actionlist> </rule>
Auch wenn es prinzipiell so laufen sollte, denke ich dennoch, das die reinen Timer-Rules nicht wirklich für LinKNX geeignet sollen.
Sowas gehört in den CRON. Hier kannst Du zu festgelegten Zeiten/Intervallen einfach ein Shell-Script aufrufen. Mach einfach mal "man crontab". Ist super einfach.
Gruß, Netsrac
Einen Kommentar schreiben:
-
Hallo Ihr,
@panzaeron,
ich habe mal am Beginn und Ende des Shell-Skripts eine Ausgabe in eine zweite Log-Datei erstellt und den Loglevel auf Debug gesetzt.
@toggle,
der Prozess ist scheinbar nicht mehr vorhanden, hier nach dem es wieder stehen geblieben ist, nach 8 Std., keine 6, habe mich da vertan.
Und hier nach einem rebootCode:/var/lib/linknx$ ps ax | grep linknx 13277 ? S 0:00 grep linknx
Ich schaue dann mal wie es in 8 Std. wieder aussieht.Code:/var/log$ ps ax | grep linknx 2212 ? Ss 0:05 /usr/local/bin/linknx -c/var/lib/linknx/linknx.xml -p /var/run/linknx.pid -d/var/log/linknx.log -w 2896 ? S 0:00 grep linknx
Gruß
Michi
Einen Kommentar schreiben:
-
Was bedeutet "bleibt stehen"? Ist der Prozess noch vorhanden und reagiert auf keine Aktionen mehr oder verabschiedet er sich nach 6 Stunden? Was machst du, wenn linknx stehen bleibt?
Möglicherweise gibt es einen Deadlock im 1-Wire Treiber.
Einen Kommentar schreiben:
-
Hallo Michi,
du könntest zum Testen noch am Beginn und Ende des Shell-Skripts eine Ausgabe in eine zweite Log-Datei machen. Dann siehsteht du ob sich das Skript aufhängt. Zusätzlich kannst du noch in linknx.xml den Loglevel auf Debug setzen vielleicht sieht man denn mehr. Ansonsten fällt mir nichts auf
Einen Kommentar schreiben:
-
Linknx bleibt stehen
Hallo zusammen,
ich weiß jetzt nicht mehr weiter.
Leider bleibt mein Linknx ca. alle 6 Std. stehen, das war früher auch schon so, allerdings erst alle 2,5 Tage, keine Ahnung warum.
Jetzt ist mir aufgefallen, je mehr 1-Wire Sensoren ich anschließe desto früher bleibt Linknx stehen.
In dem Logfile steht dann natürlich auch nicht mehr warum.
Als OS benutze ich Debian auf einem Raspberry , mit eibd und der CometVisu.
Der eibd und die CometVisu laufen weiter, auch wenn Linknx stehen geblieben ist.
Die 1-Wire Sensoren sind über einen 1-Wire USB Adapter DS9490R angeschlossen.
Linkx schreibt mir die Temperaturwerte eigentlich nur auf den Bus, bzw. von der Außentemperatur (Siemens Kombisensor) und vom RTR im Wohnzimmer in ein rrd.
Meine linknx.xlm und die linknx.log habe ich angehängt.
Als Beispiel das bash script vom Arbeitszimmer, das sieht so bei den anderen Sensoren entsprechend equivalent aus.
Vielleicht kann mir da einer von Euch etwas helfen.Code:#!/bin/bash cd /home/rrdtool # Read temperature from sensor Arbeitszimmer tempread=`cat /mnt/1wire/28.B3B100040000/temperature` OBJECTID="Arbeitszimmer_Temperatur" printf '<write><object id="%s" value=%s /></write>\4' "$OBJECTID" "$tempread" | netcat localhost 1028 > /dev/null 2>&1
Gruß
MichiAngehängte Dateien
Einen Kommentar schreiben:
-
Zeit vergleichen
Hallo --
Ich wollte einige meiner Rules etwas flexibler gestalten und Zeiten vergleichen. Eigentlich dachte ich, sowas sollte funktionieren:
oder so was:Code:<condition type="object" id="test.time_now" op="lt" value="22:00:00" />
Tut es aber anscheinend nicht. Was mache ich denn bei der Syntax falsch?Code:<action type="set-value" id="test.timeset" value="22:00:00" />
Ich hab's auch mit hour="22" min="0" probiert, tat's aber auch nicht.
Kann mich jemand da mal dezent anschubsen, bitte?
Einen Kommentar schreiben:
-
Hallo Zusammen
Ich kann hier leider noch nicht viel zu betragen, da meine Installation erst in ca. 2 Monaten zum fliegen kommt, aber ich wollte mich einmal für diesen Thread bedanken und das geteilte Wissen bedanken (Wie auch sonst in dem Forum, aber dieser Thread ist für mich sehr nützlich). Ich habe hier viel gelernt und bin gespannt, was dann in der Realität dann alles funktioniert... :-)
Gruss und schönen Abend
Stef
Einen Kommentar schreiben:
-
Prinzipiell schon, wenn man allerdings richtig zählt und die Fernbedienung der Haube versteckt, sollte das funktionieren.Zitat von toggle Beitrag anzeigenWie erwähnt, solange man den Zustand der Dunstabzugshaube nicht ermitteln kann, kann es Störungen bzw. Diskrepanzen zwischen Sollwert und Istwert geben. Z.B. wenn eine simulierte Betätigung nicht angenommen wurde oder wenn jemand die Tasten manuel betätigt.
Meine Haube geht bei Spannungsverlust auf aus, somit kann ich sie bei Bedarf nullen.
Folgenden Ansatz habe ich jetzt mal:
Auf der Kommandozeile geht das schon mal, ich bau jetzt noch Rules, um die Taster und LED's zu mappen und programmier das mal in die Komponenten.Code:<object type="5.xxx" id="andere.haube.haube_stufe_ist" gad="3/6/0" log="true" init="persist">Haube Stufe Ist</object> <object type="5.xxx" id="andere.haube.haube_stufe_soll" gad="3/6/1" log="true" init="persist">Haube Stufe Soll</object> <object type="1.001" id="andere.haube.haube_taster_plus" gad="3/6/2" log="true" init="persist">Haube Taster Plus</object> <object type="1.001" id="andere.haube.haube_taster_minus" gad="3/6/3" log="true" init="persist">Haube Taster Minus</object> <rule id="haube_plus"> <condition type="and"> <condition type="or"> <condition type="object" id="andere.haube.haube_stufe_ist" trigger="true" /> <condition type="object" id="andere.haube.haube_stufe_soll" trigger="true" /> </condition> <condition type="object-compare" id="andere.haube.haube_stufe_soll" id2="andere.haube.haube_stufe_ist" op="gt" /> </condition> <actionlist type="if-true"> <action type="set-value" id="andere.haube.haube_taster_plus" value="on" /> <action type="set-value" id="andere.haube.haube_taster_plus" value="off" delay="200ms" /> <action type="formula" id="andere.haube.haube_stufe_ist" x="andere.haube.haube_stufe_ist" c="1" delay="400ms" /> </actionlist> </rule> <rule id="haube_minus"> <condition type="and"> <condition type="or"> <condition type="object" id="andere.haube.haube_stufe_ist" trigger="true" /> <condition type="object" id="andere.haube.haube_stufe_soll" trigger="true" /> </condition> <condition type="object-compare" id="andere.haube.haube_stufe_soll" id2="andere.haube.haube_stufe_ist" op="lt" /> </condition> <actionlist type="if-true"> <action type="set-value" id="andere.haube.haube_taster_minus" value="on" /> <action type="set-value" id="andere.haube.haube_taster_minus" value="off" delay="200ms" /> <action type="formula" id="andere.haube.haube_stufe_ist" x="andere.haube.haube_stufe_ist" c="-1" delay="400ms" /> </actionlist> </rule>
Einen Kommentar schreiben:


Einen Kommentar schreiben: