Seite 10 von 14

Re: Things lassen sich nicht löschen

Verfasst: 23. Sep 2018 20:55
von hardl
Seit dem Neustart:
8 Errors
2018-09-23 20:50:28.004 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'Schaltuhr BZ': The name 'Uhr1_M_Ein_BZ' cannot be resolved to an item or type; line 384, column 23, length 13
2018-09-23 20:50:28.003 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'Schaltuhr WZ': The name 'Uhr1_M_Ein_WZ' cannot be resolved to an item or type; line 151, column 23, length 13
2018-09-23 20:50:32.643 [ERROR] [lmessage.RequestNodeInfoMessageClass] - Request node info not placed on stack due to error.
2018-09-23 20:50:33.237 [ERROR] [lmessage.RequestNodeInfoMessageClass] - Request node info not placed on stack due to error.
2018-09-23 20:51:12.931 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'Schaltuhr EZ': Could not cast NULL to org.eclipse.smarthome.core.library.types.DecimalType; line 269, column 23, length 34
2018-09-23 20:51:12.944 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'Schaltuhr WZ': Could not cast NULL to org.eclipse.smarthome.core.library.types.DecimalType; line 151, column 23, length 34
2018-09-23 20:51:12.950 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'Schaltuhr BZ': Could not cast NULL to org.eclipse.smarthome.core.library.types.DecimalType; line 384, column 23, length 34
2018-09-23 20:51:12.988 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'Schaltuhr EZ': Could not cast NULL to org.eclipse.smarthome.core.library.types.DecimalType; line 269, column 23, length 34

Re: Things lassen sich nicht löschen

Verfasst: 23. Sep 2018 21:12
von sihui
hardl hat geschrieben: 23. Sep 2018 20:55 Seit dem Neustart:
8 Errors
Okay, die haben aber alle nichts mit der Zwave Hardware zu tun, sollten aber trotzdem gefixt werden:

Uhr1_M_Ein_BZ und Uhr1_M_Ein_WZ hast du nirgendwo als Item definiert, du benutzt diese aber in deinen Rules.

Die Fehler mit "Could not cast NULL to" treten auf weil deine Items noch keinen State haben, deine Rules aber schon ausgeführt werden. Kannst du entweder vernachlässigen oder einen Persistence Service nutzen der jeweils beim Neustarten von openHAB den letzten Wert wiederherstellt.

Die "Request node info not placed on stack due to error" gehören zu Zwave, können bei einem Neustart mal auftreten, doch da die Request immer wieder gesendet werden und in einer Queue gespeichert werden kann der Fehler während eines Neustarts vernachlässigt werden. Sollten diese im Betrieb erscheinen gibt es allerdings Probleme.

Re: Things lassen sich nicht löschen

Verfasst: 23. Sep 2018 21:14
von sihui
Was ergibt denn bei dir die Ausgabe von

Code: Alles auswählen

sudo openhab-cli info
?

Re: Things lassen sich nicht löschen

Verfasst: 23. Sep 2018 21:27
von hardl
Uhr1_M_Ein_WZ und ..BZ sind definitiv als item definiert:

Number Uhr1_M_Ein_WZ
Number Uhr1_M_Ein_BZ

----

Version: 2.4.0.M3 (Build)

User: openhab (Active Process 20524)
User Groups: openhab tty dialout audio bluetooth gpio

Directories: Folder Name | Path | User:Group
----------- | ---- | ----------
OPENHAB_HOME | /usr/share/openhab2 | openhab:openhab
OPENHAB_RUNTIME | /usr/share/openhab2/runtime | openhab:openhab
OPENHAB_USERDATA | /var/lib/openhab2 | openhab:openhabian
OPENHAB_CONF | /etc/openhab2 | openhab:openhabian
OPENHAB_LOGDIR | /var/log/openhab2 | openhab:openhabian

URLs: http://192.168.178.28:8080
https://192.168.178.28:8443

Re: Things lassen sich nicht löschen

Verfasst: 23. Sep 2018 22:28
von udo1toni

Code: Alles auswählen

2018-09-23 20:50:28.004 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'Schaltuhr BZ': The name 'Uhr1_M_Ein_BZ' cannot be resolved to an item or type; line 384, column 23, length 13
Kann auch sein, dass "in der Nähe" ein Fehler ist. Dazu müsste man aber die Rules sehen...

Re: Things lassen sich nicht löschen

Verfasst: 23. Sep 2018 22:47
von hardl
rule "Schaltuhr BZ"
when
Time cron " 0 * * * * ? "
then
var sollMin1EinBZ = (Uhr1_M_Ein_BZ.state as DecimalType).intValue
var sollStd1EinBZ = (Uhr1_H_Ein_BZ.state as DecimalType).intValue
var sollMin2EinBZ = (Uhr2_M_Ein_BZ.state as DecimalType).intValue
var sollStd2EinBZ = (Uhr2_H_Ein_BZ.state as DecimalType).intValue
var sollMin1AusBZ = (Uhr1_M_Aus_BZ.state as DecimalType).intValue
var sollStd1AusBZ = (Uhr1_H_Aus_BZ.state as DecimalType).intValue
var sollMin2AusBZ = (Uhr2_M_Aus_BZ.state as DecimalType).intValue
var sollStd2AusBZ = (Uhr2_H_Aus_BZ.state as DecimalType).intValue
var sollMin6AusBZ = (Uhr6_M_Aus_BZ.state as DecimalType).intValue
var sollStd6AusBZ = (Uhr6_H_Aus_BZ.state as DecimalType).intValue
var sollMin7AusBZ = (Uhr7_M_Aus_BZ.state as DecimalType).intValue
var sollStd7AusBZ = (Uhr7_H_Aus_BZ.state as DecimalType).intValue

if (Schalter_manu_BZ.state == OFF) {
if ((sollMin1EinBZ == now.getMinuteOfHour) && (sollStd1EinBZ == now.getHourOfDay)) {
var_switch_BZ = 1 //Alle ein
if (Thermostat_BZ != var_switch_BZ) {
Thermostat_BZ.sendCommand(var_switch_BZ)
}

} else if ((sollMin2EinBZ == now.getMinuteOfHour) && (sollStd2EinBZ == now.getHourOfDay)) {
var_switch_BZ = 1 //2. Alle ein
if (Thermostat_BZ != var_switch_BZ) {
if (Uhr_BZ.state == ON ) {
Thermostat_BZ.sendCommand(var_switch_BZ)
}
}

} else if ((sollMin1AusBZ == now.getMinuteOfHour) && (sollStd1AusBZ == now.getHourOfDay )) {
var_switch_BZ = 11 // aus So
if (Thermostat_BZ != var_switch_BZ) {
if ((now.getDayOfWeek == 7) && (Uhr_SO_BZ.state == OFF)) {
Thermostat_BZ.sendCommand(var_switch_BZ)

} else if ((now.getDayOfWeek == 6) && (Uhr_SA_BZ.state == OFF)) {
Thermostat_BZ.sendCommand(var_switch_BZ)

} else if ((now.getDayOfWeek <=5) && (Uhr_BZ.state == OFF)) {
Thermostat_BZ.sendCommand(var_switch_BZ)
}
}

} else if ((sollMin2AusBZ == now.getMinuteOfHour) && (sollStd2AusBZ == now.getHourOfDay )) {
var_switch_BZ = 11 // aus
if (Thermostat_BZ != var_switch_BZ) {
if (now.getDayOfWeek == 7) {
if(Uhr_SA_BZ.state == OFF) {
Thermostat_BZ.sendCommand(var_switch_BZ)
}

} else if (now.getDayOfWeek == 6) {
if(Uhr_SA_BZ.state == OFF) {
Thermostat_BZ.sendCommand(var_switch_BZ)
}

} else if ((now.getDayOfWeek <=5) && (Uhr_BZ.state == ON)) {
Thermostat_BZ.sendCommand(var_switch_BZ)
}
}

} else if ((sollMin6AusBZ == now.getMinuteOfHour) && (sollStd6AusBZ == now.getHourOfDay)) {
if (now.getDayOfWeek == 6) {
if (Uhr_SA_BZ.state == ON) {
var_switch_BZ = 11 //Sa aus
if (Thermostat_BZ != var_switch_BZ) {
Thermostat_BZ.sendCommand(var_switch_BZ)
}
}
}

} else if ((sollMin7AusBZ == now.getMinuteOfHour) && (sollStd7AusBZ == now.getHourOfDay)) {
if (now.getDayOfWeek == 7) {
if (Uhr_SO_BZ.state == ON) {
var_switch_BZ = 11 //So aus
if (Thermostat_BZ != var_switch_BZ) {
Thermostat_BZ.sendCommand(var_switch_BZ)
}
}
}
}
}

end

Re: Things lassen sich nicht löschen

Verfasst: 24. Sep 2018 00:13
von udo1toni

Code: Alles auswählen

if (Thermostat_BZ != var_switch_BZ) {
es muss

Code: Alles auswählen

if ((Thermostat_BZ.state as Number) != var_switch_BZ) {
heißen.

In den ersten Zeilen verwendest Du

Code: Alles auswählen

var sollMin1EinBZ = (Uhr1_M_Ein_BZ.state as DecimalType).intValue
Hier wäre ein Casting nach Number besser:

Code: Alles auswählen

var sollMin1EinBZ = (Uhr1_M_Ein_BZ.state as Number).intValue
Es wäre allerdings sinnvoller, statt mit Stunden und Minuten einfach nur mit Minuten zu rechnen:

Code: Alles auswählen

var soll1EinBZ = (Uhr1_M_Ein_BZ.state as Number).intValue + 60 * (Uhr1_H_Ein_BZ.state as Number).intValue 
das verkürzt die Bedingung dann (und halbiert die Berechnungen an dieser Stelle):

Code: Alles auswählen

if (soll1EinBZ == now.getMinuteOfDay) {
Zur Ergänzung, weil ich verstehen wollte, was Deine Rule eigentlich macht... Ich habe den Code etwas überarbeitet. Die Funktionalität sollte identisch sein:

Code: Alles auswählen

rule "Schaltuhr BZ"
when
    Time cron "0 * * * * ? "
then
    var soll1EinBZ = (Uhr1_M_Ein_BZ.state as Number).intValue + (Uhr1_H_Ein_BZ.state as Number).intValue * 60
    var soll2EinBZ = (Uhr2_M_Ein_BZ.state as Number).intValue + (Uhr2_H_Ein_BZ.state as Number).intValue * 60
    var soll1AusBZ = (Uhr1_M_Aus_BZ.state as Number).intValue + (Uhr1_H_Aus_BZ.state as Number).intValue * 60
    var soll2AusBZ = (Uhr2_M_Aus_BZ.state as Number).intValue + (Uhr2_H_Aus_BZ.state as Number).intValue * 60
    var soll6AusBZ = (Uhr6_M_Aus_BZ.state as Number).intValue + (Uhr6_H_Aus_BZ.state as Number).intValue * 60
    var soll7AusBZ = (Uhr7_M_Aus_BZ.state as Number).intValue + (Uhr7_H_Aus_BZ.state as Number).intValue * 60
    var Boolean setTherm = true

    if (Schalter_manu_BZ.state == OFF) {
        switch now.getMinuteOfDay {
            case soll1EinBZ : var_switch_BZ = 1 //Alle ein
            case soll2EinBZ : {
                var_switch_BZ = 1 //2. Alle ein
                if (Uhr_BZ.state != ON ) setTherm = false
            }
            case soll1AusBZ : {
                setTherm = false
                var_switch_BZ = 11 // aus So
                if ((now.getDayOfWeek == 7 && Uhr_SO_BZ.state == OFF) ||
                    (now.getDayOfWeek == 6 && Uhr_SA_BZ.state == OFF) ||
                    (now.getDayOfWeek <= 5 &&    Uhr_BZ.state == OFF)) setTherm = true
            }
            case soll2AusBZ : {
                setTherm = false
                var_switch_BZ = 11 // aus
                if ((now.getDayOfWeek == 7 && Uhr_SA_BZ.state == OFF) ||
                    (now.getDayOfWeek == 6 && Uhr_SA_BZ.state == OFF) ||
                    (now.getDayOfWeek <= 5 &&    Uhr_BZ.state == ON)) setTherm = true
            }
            case soll6AusBZ : if (Uhr_SA_BZ.state == ON) var_switch_BZ = 11 //Sa aus
            case soll7AusBZ : if (Uhr_SO_BZ.state == ON)  var_switch_BZ = 11 //So aus
            default : setTherm = false
        }
        if (((Thermostat_BZ.state as Number) != var_switch_BZ) && setTherm) Thermostat_BZ.sendCommand(var_switch_BZ)
    }
end
Allerdings fällt der Code weniger durch Redundanz auf. Vermutlich könnte man den Code mit einer anderen Herangehensweise auch noch eleganter gestalten, aber dafür fehlen Informationen z.B. wofür sind welche Schalter gut...
Weiterhin wird diese Rule ja zu jeder Minute ausgelöst, erledigt aber maximal 6 mal am Tag etwas (abhängig von den Schaltern). Das ist ... ineffizient.

Eine elegantere Methode wäre, den nächsten Schaltzeitpunkt zu bestimmen und jeweils einen entsprechenden Timer zu definieren. Wenn eines der Uhrzeit-Items geändert wird, wird über eine Rule die Neuberechnung des Timers ausgelöst. Im Zweifel wird die resultierende Rule vermutlich mehr Codezeilen enthalten, dafür wird der Code aber nur dann ausgeführt, wenn es nötig ist.

Re: Things lassen sich nicht löschen

Verfasst: 24. Sep 2018 08:28
von sihui
Okay, jetzt hast du ja erst einmal genug Futter für ein paar Stunden/Tage um die Fehler auszumerzen und die Verbesserungen einzubauen.

Die Ausgabe deiner openhab-cli scheint soweit in Ordnung zu sein, ich hätte zwar überall die Gruppe openhab erwartet und nicht openhabian, aber hier scheint über die Gruppe die Berechtigung für die Samba Shares initiiert worden zu sein.
Falls du also nach Korrektur der Rechte über das openHABian Konfig Menü inzwischen deine mail.cfg über VSCode wieder korrekt editieren kannst ist alles in Ordnung.

Noch ein Hinweis zur grundsätzlichen Vorgehensweise nach deiner Neuinstallation: ich hätte, wenn ich Probleme mit der Zwave Hardware suche, erst einmal alle Rules außen vor gelassen. Die kannst du am Ende immer noch ins laufende System hineinkopieren. Bei der Fehlersuche ist es jedoch mühsam, aus tausenden ERROR Zeilen diejenigen herauszusuchen, die die Hardware betreffen.
Eine Sitemap mit einigen wenigen Items und Channels für die Zwave Hardware ist schnell gemacht und völlig ausreichend für die Fehlersuche.

Re: Things lassen sich nicht löschen

Verfasst: 24. Sep 2018 09:32
von hardl
Gerne werde ich die Anregungen von udo1toni umsetzen.
Allerdings dürften die doch nicht für meine Probleme mit den Batteriegeräten verantwortlich sein.
Ich hatte auch den Plan, mich nur auf eine Sitemap zu konzentrieren.
Mir ist im Moment wichtiger, dass die Türkontakte, Bewegungsmelder und Wassersensoren laufen.
Ich habe derzeit 3 Sitemaps,
eine für Stecker, Sensoren usw.,
eine für die Thermostatsteuerung der Heizkörper (incl. Rule Schaltuhr_BZ) und
eine für Batteriestände.
Ich werde nur die für Stecker und Sensoren aktiv lassen und die beiden anderen deaktivieren. Vielleicht kann ich damit mein Problem einkreisen.

Re: Things lassen sich nicht löschen

Verfasst: 24. Sep 2018 09:40
von sihui
hardl hat geschrieben: 24. Sep 2018 09:32 Vielleicht kann ich damit mein Problem einkreisen.
Das wird dir nur sehr bedingt weiterhelfen, da die Sitemaps ja nur zur Anzeige dienen. Wenn in deinen Rules, vor allen Dingen wenn es recht komplexe wie die von dir gepostete sind, aber Fehler enthalten sind, müllen diese dir deine logs mit Fehlermeldungen zu und halten dich vom Wesentlichen ab. Dort musst du ansetzen.

Was spricht dagegen diese komplett zu löschen und erst dann wieder ins System einzuspielen wenn deine Hardware vernünftig funktioniert?