(eigenes) JavaScript läuft nicht

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

voda
Beiträge: 20
Registriert: 21. Mär 2023 18:40
Answers: 0

(eigenes) JavaScript läuft nicht

Beitrag von voda »

Hallo zusammen,

jetzt habe ich mir mit VisualStudioCode ein funktionierendes JavaScript gebaut. Im VSC funktioniert er auch. Kopiere ich diesen 1:1 in openHAB, siehe da läuft nicht. Warum läuft der Code unter openHAB nicht, aber unter VSC schon.

Code: Alles auswählen

var ButtonStatus = itemRegistry.getItem('Badezimmer_Oben_Regelung_ON_OFF').getState();
var Status = 'TEST_Status_Badezimmer_oben';

/*ANFANG */
function HeatingPeriod(today)
{
    const NOVEMBER = 10;

	/*UHRZEIT WOCHENTAG*/
        const MONDAY   = 1;
	const BeginHeatingPeriode_WeekHour = 4;	
	const EndHeatingPeriode_WeekHour = 5;	
	const FRIDAY = 5;
	
	/*WOCHENENDE */
        const SUNDAY = 0;
	const BeginHeatingPeriode_WeekendHour = 8;	
	const EndHeatingPeriode_WeekendHour = 9;	
	const SATURDAY = 6;
	
     /*ENDE HEIZPERIODE */	  
	const EndHeatingPeriode_Day = 15;
        const APRIL = 3;

	if((today.getMonth()  >= NOVEMBER) ||
	   (today.getMonth()  <=  APRIL))
  
       {      
		   /* WOCHE */
		   if((today.getDay()   >= MONDAY) &&
		      (today.getDay()   <= FRIDAY) &&
			  (today.getHours() >= BeginHeatingPeriode_WeekHour)&&
			  (today.getHours() < EndHeatingPeriode_WeekHour))
			  {
				return state = "Wochentag, Heizbetrieb";
			  } 		 		  
			  if((today.getDay() === SATURDAY || today.getDay() === SUNDAY) &&
			  (today.getHours() >= BeginHeatingPeriode_WeekendHour) &&
			  (today.getHours() < EndHeatingPeriode_WeekendHour))
			  {
				return state = "Wochenende, Heizberieb";
			  }else{
				    return state = "Tagbetrieb";
			       }										  
	   } 
	   else 
	   {
		return state = "keine Heizperiode";
	   }
}

var currentDate = new Date(); 
/*ENDE*/

if(ButtonStatus == 'ON')
{
  events.sendCommand(Status, 'ON');
} else {
  events.postUpdate(Status, 'OFF');
}

Der Code soll mir ein Zustand ausgeben, welche ich später weiterverarbeiten möchte. Betätige ich die Taste ButtonStatus so funktioniert dieser nicht. Lösche ich die Funktion zwischen /*ANFANG*/ und /*ENDE*/, dann funktioniert die Tasterabfrage. Gibt es ein Debugger, wo ich sehen kann, warum der Code nicht läuft? Irgendwie habe ich auch das Gefühl das oH langsamer läuft...

Gruß
von Harka » 23. Mär 2023 19:20
Wenn Du ein neues Script erstellst -> werden Dir da verschiedene ECMAScript-Versionen angeboten? Edition 5.1 (wird glaub aktuell noch von Blockly genutzt) unterstützt const nicht. Unter Settings/Automation gibt es noch eine neuere Version.
Gehe zur vollständigen Antwort
Zuletzt geändert von voda am 23. Mär 2023 06:40, insgesamt 1-mal geändert.

Harka
Beiträge: 489
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: JavaScript läuft nicht

Beitrag von Harka »

Moin,

bin da nicht der Experte aber versuch mal

Code: Alles auswählen

var ButtonStatus = items.getItem('Badezimmer_Oben_Regelung_ON_OFF').state;
Damit hatte ich keine Fehler mehr im Log. Warum, müsste ich raten...

Für die Logs nutze ich Frontail. Ist bei openhabian schon dabei aber kann auch nachinstalliert werden.

Bei der Geschwindigkeit schau mal ob das nur beim ersten mal lahmt - wenn ja -> https://community.openhab.org/t/long-de ... ime/134172

PS: Infos zu JS in openHAB -> https://github.com/openhab/openhab-js

voda
Beiträge: 20
Registriert: 21. Mär 2023 18:40
Answers: 0

Re: JavaScript läuft nicht

Beitrag von voda »

Code: Alles auswählen

Für die Logs nutze ich Frontail. Ist bei openhabian schon dabei aber kann auch nachinstalliert werden.
Vielen Dank. Dies scheint aber nur ein Fork zu sein, ohne irgendwelche Installationsanleitung. Da weiss ich (noch) nicht wie ich es installieren sollte. oH läuft bei mir unter Debian 11 mit einem LXC-Container in Proxmox. Ich habe https://github.com/mthenw/frontail gefunden.

Installiert habe ich als root wie folgt:

Code: Alles auswählen


apt-get install update && apt-get upgrade -y
apt install npm -y
npm i frontail -g
frontail /var/log/syslog
Als Fehlermeldung kommt: frontail nicht gefunden. Mit

Code: Alles auswählen

systemctl status frontail
wird das Programm auch nicht gefunden.

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: (eigenes) JavaScript läuft nicht

Beitrag von udo1toni »

Ich kann nur empfehlen, den LXC einfach mit bullseye einzurichten und anschließend openHABian einzurichten (wird über git runtergeladen und belegt entpackt etwas mehr als 1 MByte).
Nachdem openHABian konfiguriert ist, führt man einmal openhabian-config unattended aus und hat nach wenigen Minuten ein System, welches weitgehend dem eines normalen Raspberry Pi mit openHABian Image entspricht - natürlich mit dem Unterschied, dass Java als 64-Bit-Version installiert wird.

Hauptvorteil ist aber, dass der ganze Nice-to-Have-Kram direkt mit installiert wird. Anleitung hier: viewtopic.php?p=37814#p37814 gerade letzte Woche erst getestet und auf den aktuellen Stand gebracht...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

voda
Beiträge: 20
Registriert: 21. Mär 2023 18:40
Answers: 0

Re: (eigenes) JavaScript läuft nicht

Beitrag von voda »

Das heißt also, alles was ich bisher eingebaut habe muss ich nochmal installieren? Das kann doch nicht sein. Ich habe mich penibel an die Anleitung von openHab gehalten. Nur weil etwas fehlt muss ich das ganze System neu aufsetzten? Also sorry, dann ist openHab vllt doch nicht das richtige. Wenn ich das System jetzt neu aufsetze würde, dann kein openHab mehr. Dann probiere ich ein anderes System.

voda
Beiträge: 20
Registriert: 21. Mär 2023 18:40
Answers: 0

Re: (eigenes) JavaScript läuft nicht

Beitrag von voda »

So jetzt habe ich etwas ausprobiert und ich verstehe es einfach nicht:

Code: Alles auswählen

var ButtonStatus = itemRegistry.getItem('Badezimmer_Oben_Regelung_ON_OFF').getState();
var Status = 'TEST_Status_Badezimmer_oben';
var heute = new Date(); 

Diese Tasterabfrage funktioniert. 
Switch ON -> ON, Switch OFF -> OFF

[code]
if(ButtonStatus == 'ON')
{
  events.sendCommand(Status, 'ON');
} else {
  events.postUpdate(Status, 'OFF');
}


function HeatingPeriod(today)
{
 
}
Jetzt füge ich in der Funktion eine Konstante bei:

Code: Alles auswählen

if(ButtonStatus == 'ON')
{
  events.sendCommand(Status, 'ON');
} else {
  events.postUpdate(Status, 'OFF');
}


function HeatingPeriod(today)
{
  const NOVEMBER = 10;
}
reagiert der Knopf nicht mehr... Das soll echt einer verstehen....

[EDIT]:
Alle Konstanten habe ich jetzt als var geändert. Und jetzt scheint zu funktionieren. Warum auch immer const und let nicht funktionieren wollen...
Meine Lösung sieht jetzt so aus:

Trigger-> cron 60 s, dann wird der Schalter abgefragt, der die Steuerung übernimmt.
Zuletzt geändert von voda am 23. Mär 2023 19:26, insgesamt 2-mal geändert.

Harka
Beiträge: 489
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: (eigenes) JavaScript läuft nicht

Beitrag von Harka »

Code: Alles auswählen

curl -fsSL https://deb.nodesource.com/setup_19.x | bash - &&\
apt-get install -y nodejs

curl -qL https://www.npmjs.com/install.sh | sh

npm i frontail -g

frontail /var/log/openhab/openhab.log
Damit bekomme ich unter ip:9001 Frontail zum laufen. Sieht aber nicht so schön aus wie das "Original" von openhabian.
Kannst Du Dir die Logs von /var/log/openhab/... auch im VSC anzeigen lassen? Ansonsten Backup der Daten machen (ggf. hier mal nach einer Anleitung suchen), openhabian installieren und Daten wieder einspielen.

voda
Beiträge: 20
Registriert: 21. Mär 2023 18:40
Answers: 0

Re: (eigenes) JavaScript läuft nicht

Beitrag von voda »

Vielen Dank, das ist doch schon etwas...

Harka
Beiträge: 489
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: (eigenes) JavaScript läuft nicht

Beitrag von Harka »

Wenn Du ein neues Script erstellst -> werden Dir da verschiedene ECMAScript-Versionen angeboten? Edition 5.1 (wird glaub aktuell noch von Blockly genutzt) unterstützt const nicht. Unter Settings/Automation gibt es noch eine neuere Version.

voda
Beiträge: 20
Registriert: 21. Mär 2023 18:40
Answers: 0

Re: (eigenes) JavaScript läuft nicht

Beitrag von voda »

Das ist der Hinweis! ECMA 262 Edition 5.1. Ich habe zwar das Binding JavaScript Scripting ((ECMAScript 2021+) heruntergeladen und dachte damit hätte ich das umschifft, dem war aber nicht so.

Antworten