NEWS
To many errors 95% scanned
-
Ich komme einfach nicht weiter. Ich habe das Script jetzt hoch und runter durchsucht. Ich finde keinen Fehler. Kann mir wer helfen wo das Problem liegen könnte?
Ich muss aber dazu sagen, dass ich kein Javascript Profi bin (sieht ja am aber vermutlich auch am Schreibstil vom Script :mrgreen: ). Bisher laufen aber eigentlich alle Scripte die ich geschrieben habe.
Hier erstmal das Script:
! ````
/**************************- Berechnet ob der Rasenmäher heute mähen soll
**************************/
var logging = true; //wenn true wird geloggt (true/false)
var sendpush = true; //wenn true wird eine Pushmitteilung verschickt (true/false)
var working_feiertag = true; //wenn true wird auch an Feiertagen gemäht (true/false)
var working_Sa = true; //wenn true wird an Samstagen gemäht. Nicht übersteuerbar. (true/false)
var working_So = false; //wenn true wird an Sonntagen gemäht. Nicht übersteuerbar. (true/false)
var today_rain_tomorow = true; //wenn true wird heute gemäht wenn Morgen Regen vorhergesagt wurde und der Mähintervall heute nicht erreicht wurde.
//gilt nur wenn es heute nicht regnet! var pushover_Instanz = 'pushover.0';
var id_Maehintervall = "Systemvariable.0.Landroid.Maehintervall"/Maehintervall/;
var id_vgl_Maehintervall = "Systemvariable.0.Landroid.vgl_Maehintervall"/vgl_Maehintervall/;
var id_Maehen_heute = "Systemvariable.0.Landroid.Maehen_heute"/Maehen heute/;
var id_Maehen_gestern = "Systemvariable.0.Landroid.Maehen_gestern"/Maehen gestern/;
var id_Regen_heute = "daswetter.0.hourly.0d.Rain"/Rain/;
var id_Regen_morgen = "daswetter.0.hourly.1d.Rain"/Rain/;
var id_Regen_11 = "daswetter.0.hourly.0d.10h.Rain"/Rain/;
var id_Regen_12 = "daswetter.0.hourly.0d.11h.Rain"/Rain/;
var id_Regen_13 = "daswetter.0.hourly.0d.12h.Rain"/Rain/;
var id_Regen_14 = "daswetter.0.hourly.0d.13h.Rain"/Rain/;
var id_Regen_15 = "daswetter.0.hourly.0d.14h.Rain"/Rain/;
var id_Regen_16 = "daswetter.0.hourly.0d.15h.Rain"/Rain/;
var id_Mo_Startzeit = "landroid-s.0.calendar.monday.startTime"/Start time/;
var id_Di_Startzeit = "landroid-s.0.calendar.tuesday.startTime"/Start time/;
var id_Mi_Startzeit = "landroid-s.0.calendar.wednesday.startTime"/Start time/;
var id_Do_Startzeit = "landroid-s.0.calendar.thursday.startTime"/Start time/;
var id_Fr_Startzeit = "landroid-s.0.calendar.friday.startTime"/Start time/;
var id_Sa_Startzeit = "landroid-s.0.calendar.saturday.startTime"/Start time/;
var id_So_Startzeit = "landroid-s.0.calendar.thursday.startTime"/Start time/;
var id_Startzeit;
var id_Mo_Dauer = "landroid-s.0.calendar.monday.workTime"/Work time/;
var id_Di_Dauer = "landroid-s.0.calendar.tuesday.workTime"/Work time/;
var id_Mi_Dauer = "landroid-s.0.calendar.wednesday.workTime"/Work time/;
var id_Do_Dauer = "landroid-s.0.calendar.thursday.workTime"/Work time/;
var id_Fr_Dauer = "landroid-s.0.calendar.friday.workTime"/Work time/;
var id_Sa_Dauer = "landroid-s.0.calendar.saturday.workTime"/Work time/;
var id_So_Dauer = "landroid-s.0.calendar.sunday.workTime"/Work time/;
var id_Maehdauer;
var id_Wochentag_Zahl = "Kalender.0.Datum.Wochentag_Zahl"/Wochentag_Zahl/;
var id_Feiertag = "feiertage.0.heute.boolean"/Feiertag heute?/;
! var _prio = 0;
var _titel = 'Landroid';
var _message = 'Fehler';
var _device = 'TPhone';
//var _device = 'All';
! function send_pushover (_device, _message, _titel, _prio) {
if (_prio === 0){pushover_Instanz = 'pushover.0'}
else if (_prio == 1){pushover_Instanz = 'pushover.1'}
else if (_prio == 2){pushover_Instanz = 'pushover.2'}
else {pushover_Instanz = 'pushover.3'}
sendTo(pushover_Instanz, {
device: _device,
message: _message,
title: _titel,
priority: _prio
})}
! function func_maehen(){
if(getState(id_Wochentag_Zahl).val == 1){id_Startzeit = id_Mo_Startzeit;}
else if(getState(id_Wochentag_Zahl).val == 2){id_Startzeit = id_Di_Startzeit;}
else if(getState(id_Wochentag_Zahl).val == 3){id_Startzeit = id_Mi_Startzeit;}
else if(getState(id_Wochentag_Zahl).val == 4){id_Startzeit = id_Do_Startzeit;}
else if(getState(id_Wochentag_Zahl).val == 5){id_Startzeit = id_Fr_Startzeit;}
else if(getState(id_Wochentag_Zahl).val == 6){id_Startzeit = id_Sa_Startzeit;}
else {id_Startzeit = id_So_Startzeit;}
! if(getState(id_Wochentag_Zahl).val == 1){id_Maehdauer = id_Mo_Dauer;}
else if(getState(id_Wochentag_Zahl).val == 2){id_Maehdauer = id_Di_Dauer;}
else if(getState(id_Wochentag_Zahl).val == 3){id_Maehdauer = id_Mi_Dauer;}
else if(getState(id_Wochentag_Zahl).val == 4){id_Maehdauer = id_Do_Dauer;}
else if(getState(id_Wochentag_Zahl).val == 5){id_Maehdauer = id_Fr_Dauer;}
else if(getState(id_Wochentag_Zahl).val == 6){id_Maehdauer = id_Sa_Dauer;}
else {id_Maehdauer = id_So_Dauer;}
! var Maehdauer = getState(id_Maehdauer).val;
var Regen_heute = 0;
if(getState(id_Regen_heute).val < 0.5){Regen_heute = 0}
else {Regen_heute = getState(id_Regen_heute).val}
! var Regen_morgen = 0;
if(getState(id_Regen_morgen).val < 1.0){Regen_morgen = 0}
else {Regen_morgen = getState(id_Regen_morgen).val}
! var maehen;
var Startzeit = 'heute nicht';
var maehen_heute = false;
var vgl_Maehintervall = (parseInt(getState(id_vgl_Maehintervall).val) + 1);
! if((getState(id_Maehintervall).val- vgl_Maehintervall == 1) && (getState(id_Wochentag_Zahl).val == 6)){if(!working_So){if(working_Sa){maehen_heute = true;}}}
! //wenn Morgen regen und Paramter today_rain_tomorw auf true dann soll er prüfen ob er Mähen darf
else if((getState(id_Maehintervall).val- vgl_Maehintervall == 1) && (Regen_morgen > 0)){if(today_rain_tomorow){if(logging){log('Mähintervall wäre Morgen erreicht. Leider regnet es. Es wird geprüft ob heute gemäht wird');}
maehen_heute = true}}
else
{if(vgl_Maehintervall >= getState(id_Maehintervall).val){maehen_heute = true;
setState(id_vgl_Maehintervall,0);
}
else {
setState(id_vgl_Maehintervall,vgl_Maehintervall);
if(getState(id_Maehen_gestern).val != getState(id_Maehen_heute).val)
{setState(id_Maehen_gestern,getState(id_Maehen_heute).val);}
if(getState(id_Maehen_heute).val)
{setState(id_Maehen_heute,false);
}
if(logging){log('Heute wird nicht gemäht. Mähintervall nicht erreicht.');
log('Mähintervall: '+getState(id_Maehintervall).val);
log('vgl Mähintervall: '+vgl_Maehintervall);
}
_message = 'Heute wird nicht gemäht. Mähintervall nicht erreicht';
}
}
! if(maehen_heute){
if(getState(id_Regen_11).val < 0.2){maehen = true}
else if (getState(id_Regen_12).val < 0.2){maehen = true}
else if (getState(id_Regen_13).val < 0.2){maehen = true}
else if (getState(id_Regen_14).val < 0.2){maehen = true}
else if (getState(id_Regen_15).val < 0.2){maehen = true}
else if (getState(id_Regen_16).val < 0.2){maehen = true}
else {maehen = false}
}
! if(maehen){if(getState(id_Regen_11).val < 0.2){Startzeit = '11:00'}
else if (getState(id_Regen_12).val < 0.2){Startzeit = '12:00'}
else if (getState(id_Regen_13).val < 0.2){Startzeit = '13:00'}
else if (getState(id_Regen_14).val < 0.2){Startzeit = '14:00'}
else if (getState(id_Regen_15).val < 0.2){Startzeit = '15:00'}
else if (getState(id_Regen_16).val < 0.2){Startzeit = '16:00'}
else {Startzeit = ' '}}
! if(!working_feiertag){if(getState(id_Feiertag).val){maehen = false;}}
! if(!working_Sa){if(getState(id_Wochentag_Zahl).val == 6){maehen = false;}}
if(!working_So){if(getState(id_Wochentag_Zahl).val == 7){maehen = false;}}
! if(getState(id_Maehen_gestern).val != getState(id_Maehen_heute).val){setState(id_Maehen_gestern,getState(id_Maehen_heute).val)}
setState(id_Maehen_heute,maehen);
! if(logging){log('Regen heute: '+Regen_heute);
log('Regen morgen: '+Regen_morgen);
log('Heute mähen: ' +maehen);
log('Startzeit: '+Startzeit +' Dauer: '+Maehdauer);
log('Mähintervall: '+getState(id_Maehintervall).val);
log('vgl Mähintervall: '+vgl_Maehintervall);}
! if(maehen){_message = 'Heute soll gemäht werden ab: ' +Startzeit + ' Uhr' + ' Dauer: '+Maehdauer}
else {_message = 'Heute soll nicht gemäht werden'}
! //Push verschicken
if(sendpush){send_pushover(_device, _message, _titel, _prio);}
! }
! //einmalig ausführen
//schedule("15 10 * * *", func_maehen);
! //beim Scripstart
func_maehen();Zusatzfrage wann muss ich bei Javascript am Ende der Zeile ein ; benutzten? Schreibe ich so: >! ```` if(logging) { log('Mähintervall: '+getState(id_Maehintervall).val); log('vgl Mähintervall: '+vgl_Maehintervall) }
Kommt ein Hinweis missing semicolon
Wenn ich allerdings die } direkt hinter dem ) schreibe. Kommt kein Hinweis.
Homematic Script ist da ja sehr pingelig. Bisher habe ich mir das so zusammen gereimt das man eigentlich immer ; benutzen kann aber Javascript auch ohne zufrieden ist wenn if logisch in der gleichen Zeile geschlossen ist.
-
wann muss ich bei Javascript am Ende der Zeile ein ; benutzten? `
Man muss nicht. Es ist allerdings schlechter Stil, das Semikolon am Anweisungsende wegzulassen.Es ist auch schlechter Stil, die Anweisungen innerhalb einer Funktion nicht einzurücken, da dann das Ende der Funktion schlecht zu erkennen ist.
if(getState(id_Wochentag_Zahl).val == 1){id_Startzeit = id_Mo_Startzeit;} else if(getState(id_Wochentag_Zahl).val == 2){id_Startzeit = id_Di_Startzeit;} else if(getState(id_Wochentag_Zahl).val == 3){id_Startzeit = id_Mi_Startzeit;} else if(getState(id_Wochentag_Zahl).val == 4){id_Startzeit = id_Do_Startzeit;} else if(getState(id_Wochentag_Zahl).val == 5){id_Startzeit = id_Fr_Startzeit;} else if(getState(id_Wochentag_Zahl).val == 6){id_Startzeit = id_Sa_Startzeit;} else {id_Startzeit = id_So_Startzeit;} if(getState(id_Wochentag_Zahl).val == 1){id_Maehdauer = id_Mo_Dauer;} else if(getState(id_Wochentag_Zahl).val == 2){id_Maehdauer = id_Di_Dauer;} else if(getState(id_Wochentag_Zahl).val == 3){id_Maehdauer = id_Mi_Dauer;} else if(getState(id_Wochentag_Zahl).val == 4){id_Maehdauer = id_Do_Dauer;} else if(getState(id_Wochentag_Zahl).val == 5){id_Maehdauer = id_Fr_Dauer;} else if(getState(id_Wochentag_Zahl).val == 6){id_Maehdauer = id_Sa_Dauer;} else {id_Maehdauer = id_So_Dauer;}
14 mal getState(id_Wochentag_Zahl) belastet die CPU unnötig. Besser so
var wd = getState(id_Wochentag_Zahl).val; if(wd == 1) { id_Startzeit = id_Mo_Startzeit; id_Maehdauer = id_Mo_Dauer; } else if(wd== 2) { id_Startzeit = id_Di_Startzeit; id_Maehdauer = id_Di_Dauer; } else if(wd == 3) { id_Startzeit = id_Mi_Startzeit; id_Maehdauer = id_Mi_Dauer; } else if(wd == 4) { id_Startzeit = id_Do_Startzeit; id_Maehdauer = id_Do_Dauer; } else if(wd == 5) { id_Startzeit = id_Fr_Startzeit; id_Maehdauer = id_Fr_Dauer; } else if(wd == 6) { id_Startzeit = id_Sa_Startzeit; id_Maehdauer = id_Sa_Dauer; } else { id_Startzeit = id_So_Startzeit; id_Maehdauer = id_So_Dauer; }
oder mit https://wiki.selfhtml.org/wiki/JavaScript/Verzweigung#Fallunterscheidung_mit_.22switch.22.
-
Ich hatte es erst eingerückt weil ich es so besser lesen kann. Es lief auch alles aber gestern hatte ich an div. Stellen änderungen vorgenommen und seit dem habe ich den Fehler.
Daraufhin habe ich alles anguckt und weil ich nichts gefunden habe, habe ich dann einrückungen raus und viele Zeilenumbrüche entfernt…
-
Jetzt läuft es endlich wieder. Habe alles neu gemacht incl Einrückungen und ;
! ````
/**************************- Berechnet ob der Rasenmäher heute mähen soll
**************************/
var logging = true; //wenn true wird geloggt (true/false)
var sendpush = true; //wenn true wird eine Pushmitteilung verschickt (true/false)
var working_feiertag = true; //wenn true wird auch an Feiertagen gemäht (true/false)
var working_Sa = true; //wenn true wird an Samstagen gemäht. Nicht übersteuerbar. (true/false)
var working_So = false; //wenn true wird an Sonntagen gemäht. Nicht übersteuerbar. (true/false)
var today_rain_tomorow = true; //wenn true wird heute gemäht wenn Morgen Regen vorhergesagt wurde und der Mähintervall heute nicht erreicht wurde.
//gilt nur wenn es heute nicht regnet! var pushover_Instanz = 'pushover.0';
var id_Maehintervall = "Systemvariable.0.Landroid.Maehintervall"/Maehintervall/;
var id_vgl_Maehintervall = "Systemvariable.0.Landroid.vgl_Maehintervall"/vgl_Maehintervall/;
var id_Maehen_heute = "Systemvariable.0.Landroid.Maehen_heute"/Maehen heute/;
var id_Maehen_gestern = "Systemvariable.0.Landroid.Maehen_gestern"/Maehen gestern/;
var id_Regen_heute = "daswetter.0.hourly.0d.Rain"/Rain/;
var id_Regen_morgen = "daswetter.0.hourly.1d.Rain"/Rain/;
var id_Regen_11 = "daswetter.0.hourly.0d.10h.Rain"/Rain/;
var id_Regen_12 = "daswetter.0.hourly.0d.11h.Rain"/Rain/;
var id_Regen_13 = "daswetter.0.hourly.0d.12h.Rain"/Rain/;
var id_Regen_14 = "daswetter.0.hourly.0d.13h.Rain"/Rain/;
var id_Regen_15 = "daswetter.0.hourly.0d.14h.Rain"/Rain/;
var id_Regen_16 = "daswetter.0.hourly.0d.15h.Rain"/Rain/;
var id_Mo_Startzeit = "landroid-s.0.calendar.monday.startTime"/Start time/;
var id_Di_Startzeit = "landroid-s.0.calendar.tuesday.startTime"/Start time/;
var id_Mi_Startzeit = "landroid-s.0.calendar.wednesday.startTime"/Start time/;
var id_Do_Startzeit = "landroid-s.0.calendar.thursday.startTime"/Start time/;
var id_Fr_Startzeit = "landroid-s.0.calendar.friday.startTime"/Start time/;
var id_Sa_Startzeit = "landroid-s.0.calendar.saturday.startTime"/Start time/;
var id_So_Startzeit = "landroid-s.0.calendar.thursday.startTime"/Start time/;
var id_Startzeit;
var id_Mo_Dauer = "landroid-s.0.calendar.monday.workTime"/Work time/;
var id_Di_Dauer = "landroid-s.0.calendar.tuesday.workTime"/Work time/;
var id_Mi_Dauer = "landroid-s.0.calendar.wednesday.workTime"/Work time/;
var id_Do_Dauer = "landroid-s.0.calendar.thursday.workTime"/Work time/;
var id_Fr_Dauer = "landroid-s.0.calendar.friday.workTime"/Work time/;
var id_Sa_Dauer = "landroid-s.0.calendar.saturday.workTime"/Work time/;
var id_So_Dauer = "landroid-s.0.calendar.sunday.workTime"/Work time/;
var id_Maehdauer;
var id_Wochentag_Zahl = "Kalender.0.Datum.Wochentag_Zahl"/Wochentag_Zahl/;
var id_Feiertag = "feiertage.0.heute.boolean"/Feiertag heute?/;
! var _prio = 0;
var _titel = 'Landroid';
var _message = 'Fehler';
var _device = 'TPhone';
//var _device = 'All';
! function send_pushover (_device, _message, _titel, _prio) {
if (_prio === 0){pushover_Instanz = 'pushover.0'}
else if (_prio == 1){pushover_Instanz = 'pushover.1'}
else if (_prio == 2){pushover_Instanz = 'pushover.2'}
else {pushover_Instanz = 'pushover.3'}
sendTo(pushover_Instanz, {
device: _device,
message: _message,
title: _titel,
priority: _prio
})}
! function func_maehen(){
var Wochentag_Zahl = getState(id_Wochentag_Zahl).val;
if(Wochentag_Zahl == 1)
{id_Startzeit = id_Mo_Startzeit;
id_Maehdauer = id_Mo_Dauer;
}
else if(Wochentag_Zahl == 2)
{
id_Startzeit = id_Di_Startzeit;
id_Maehdauer = id_Di_Dauer;
}
else if(Wochentag_Zahl == 3)
{id_Startzeit = id_Mi_Startzeit;
id_Maehdauer = id_Mi_Dauer;
}
else if(Wochentag_Zahl == 4)
{id_Startzeit = id_Do_Startzeit;
id_Maehdauer = id_Do_Dauer;
}
else if(Wochentag_Zahl == 5)
{id_Startzeit = id_Fr_Startzeit;
id_Maehdauer = id_Fr_Dauer;
}
else if(Wochentag_Zahl == 6)
{id_Startzeit = id_Sa_Startzeit;
id_Maehdauer = id_Sa_Dauer;
}
else
{
id_Startzeit = id_So_Startzeit;
id_Maehdauer = id_So_Dauer;
}
! var Maehdauer = getState(id_Maehdauer).val;
var Regen_heute = getState(id_Regen_heute).val;
var Regen_morgen = getState(id_Regen_morgen).val;if(Regen_heute < 0.5){Regen_heute = 0;} if(Regen_morgen < 1.0){Regen_morgen = 0} var maehen = false; var maehen_heute = false; var Startzeit = 'heute nicht'; var Maehintervall = getState(id_Maehintervall).val; var vgl_Maehintervall = (parseInt(getState(id_vgl_Maehintervall).val) + 1);
! if((Maehintervall- vgl_Maehintervall == 1) && (Wochentag_Zahl == 6))
{if(!working_So)
{if(working_Sa)
{maehen_heute = true;} } } //wenn Morgen regen und Paramter today_rain_tomorw auf true dann soll er prüfen ob er Mähen darf else if((Maehintervall - vgl_Maehintervall == 1) && (Regen_morgen > 0)) {if(today_rain_tomorow) {if(logging) { log('Mähintervall wäre Morgen erreicht. Leider regnet es. Es wird geprüft ob heute gemäht wird'); } maehen_heute = true; } } else { if(vgl_Maehintervall >= getState(id_Maehintervall).val) { maehen_heute = true; setState(id_vgl_Maehintervall,0); } else { setState(id_vgl_Maehintervall,vgl_Maehintervall); if(getState(id_Maehen_gestern).val != getState(id_Maehen_heute).val) { setState(id_Maehen_gestern,getState(id_Maehen_heute).val); } if(getState(id_Maehen_heute).val) { setState(id_Maehen_heute,false); } if(logging) { log('Heute wird nicht gemäht. Mähintervall nicht erreicht.'); log('Mähintervall: '+getState(id_Maehintervall).val); log('vgl Mähintervall: '+vgl_Maehintervall); } _message = 'Heute wird nicht gemäht. Mähintervall nicht erreicht'; } }
! if(maehen_heute)
{
if(getState(id_Regen_11).val < 0.2)
{
maehen = true;
Startzeit = '11:00';
}
else if (getState(id_Regen_12).val < 0.2)
{
maehen = true;
Startzeit = '12:00';
}
else if (getState(id_Regen_13).val < 0.2)
{
maehen = true;
Startzeit = '13:00';
}
else if (getState(id_Regen_14).val < 0.2)
{
maehen = true;
Startzeit = '14:00';
}
else if (getState(id_Regen_15).val < 0.2)
{
maehen = true;
Startzeit = '15:00';
}
else if (getState(id_Regen_16).val < 0.2)
{
maehen = true;
Startzeit = '16:00';
}
else
{
maehen = false;
Startzeit = '';
}
}if(!working_feiertag) { if(getState(id_Feiertag).val) { maehen = false; } }
! if(!working_Sa)
{
if(getState(id_Wochentag_Zahl).val == 6)
{
maehen = false;
}
}if(!working_So) { if(getState(id_Wochentag_Zahl).val == 7) { maehen = false; } }
! //Status gestern setzen
if(getState(id_Maehen_gestern).val != getState(id_Maehen_heute).val)
{
setState(id_Maehen_gestern,getState(id_Maehen_heute).val);} //Status heute setzen setState(id_Maehen_heute,maehen);
!
! if(logging)
{
log('Regen heute: '+Regen_heute);
log('Regen morgen: '+Regen_morgen);
log('Heute mähen: ' +maehen);
log('Startzeit: '+Startzeit +' Dauer: '+Maehdauer);
log('Mähintervall: '+getState(id_Maehintervall).val);
log('vgl Mähintervall: '+vgl_Maehintervall);
}
! if(maehen)
{
_message = 'Heute soll gemäht werden ab: ' +Startzeit + ' Uhr' + ' Dauer: '+Maehdauer;} else { _message = 'Heute soll nicht gemäht werden'; }
! //Push verschicken
if(sendpush)
{
send_pushover(_device, _message, _titel, _prio);
}
!
}
! //einmalig ausführen
//schedule("15 10 * * *", func_maehen);
! //beim Scripstart
func_maehen();statt switch() case() kann ich aber auch einfach if mit else if kombinieren oder? Macht doch das gleiche. Fängt oben an und sobald ein Bedingung zutrifft hört er auf bei swtich() case() muss ich dafür an das break denken damit er das macht oder verstehe ich die Funktionen falsch?
-
Die Struktur verschachtelter Abfrageb (if … else) erkennt man erst, wenn man sinnvoll einrückt. Ist nach einem if(Bedingung) oder else nur eine Anweisung abzuarbeiten, kann man die Anweisung in die gleiche Zeile schreiben. Beispiel:
if(logging) log('Logtext');
Sauber ist es so:
if(logging) { log('Logtext'); }
Bei mehren Anweisungen muss die geschweifte Klammer verwendet werden:
if(Bedingung) { Anweisung1; Anweisung2; } else { Anweisung3; Anweisung4; }
-
statt switch() case() kann ich aber auch einfach if mit else if kombinieren oder? …
bei swtich() case() muss ich dafür an das break denken damit er das macht oder verstehe ich die Funktionen falsch? `
Das ist richtig. switch() case() erhöht lediglich die Übersichlichkeit. -
Danke werde Deine Tipps beherzigen