NEWS
(gelöst) Zwei Fragen zu VIS und Javascript (JS Job stopt ./. Parameter von VIS an JS übergeben)
-
Hallo zusammen,
ich spiele (sofern meine Kinder und meine Frau mir Zeit lässt) seit kurzer Zeit mit dem ioBroker und bin richtig zufrieden mit der Lösung!
In den letzten Tagen habe ich nun mit der automatisierten Bearbeitung des Anwesenheitsstatus im Haus beschäftigt.
In einem Eigenen Objekt pro Familienmitglied wird ein Logikwert (true | false) gespeichert
eigene-objekte.0.status.anwesenheit.anwesend_familie eigene-objekte.0.status.anwesenheit.anwesend_philipp eigene-objekte.0.status.anwesenheit.anwesend_
Die Werte möchte ich über mehrere Wege manipulieren. Ich möchte über einen Button jedem Mitglied die einfache Möglichkeit geben beim Verlassen des Hauses seinen Zustand zu ändern.
Dafür habe ich mir (ersta mal für jedes Familienmitglied ein JS gebaut - Ich weiß noch nicht wie ich parameter an JS übergeben kann)
/* Setzten den Wert eines Objekts um so dass dieser später interpretiert werden kann. Invertiert den Wert einfach auf true oder false Version 0.0.1 */ var logging = true; var person = 'philipp'; state = getState('eigene-objekte.0.status.anwesenheit.anwesend_' +person).val; if (logging) log('Aktueller Zustand: ' + state); if (state) { setstate = false setState('eigene-objekte.0.status.anwesenheit.anwesend_' + person, setstate); if (logging) log('Zustand geändert auf : ' + setstate); } if (!state) { setstate = true setState('eigene-objekte.0.status.anwesenheit.anwesend_' + person, setstate); if (logging) log('Zustand geändert auf : ' + setstate); }
Das script läuft einwandfrei wenn ich es manuell "aktualisiere" etc.
Nun habe ich mir im VIS einen Button gebaut und diesen auf das JS verlinkt (siehe unten rechts):
Der Status wird auch abgefragt und das entsprechende Symbol angezeigt.
Klicke ich nun auf einen der vier Buttons wird das JS gestoppt.
javascript.0 2017-09-22 13:32:39.994 info Stop script script.js.Eigene-Scripte.Anwesenheit.anw_philipp
Beendet:
~~![](</s><URL url=)https://img2.picload.org/image/dgaorcdw/script.png" />
Manuell macht er es 1A
~~![](</s><URL url=)https://img3.picload.org/image/dgaorcol/script2.png" />
Geändert zum zweiten Mal:
~~![](</s><URL url=)https://img2.picload.org/image/dgaorcll/script3.png" />
Frage 1) Was mache ich falsch
Frage 2) Wie kann ich über den Button einen Wert an das JS übergeben? Aktuell habe ich vier Scripte (für Jedes Familienmitglied eines). Gerne würde ich aber den Namen an das Script übergeben udn diesen später dann verwenden. Halt eben in einem script.
LG
Philipp
Hier noch mein Widget vom Button
[{"tpl":"tplJquiButtonState","data":{"oid":"javascript.0.scriptEnabled.Eigene-Scripte.Anwesenheit.anw_luise","g_fixed":true,"g_visibility":false, "g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false, "g_css_border":false,"g_gestures":false,"g_signals":true,"visibility-cond":"==", "visibility-val":1,"visibility-groups-action":"hide","buttontext":"","signals-cond-0":"==", "signals-val-0":true,"signals-icon-0":"/vis.0/Meine_Images/control_all_green.png", "signals-icon-size-0":"67","signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0, "signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":"false", "signals-icon-1":"/vis.0/Meine_Images/control_all_red.png","signals-icon-size-1":"67", "signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false, "signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png", "signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0, "signals-hide-edit-2":false,"html_append":"","name":"Anzeige_Anwesenheit_Status_Luise", "signals-oid-0":"eigene-objekte.0.status.anwesenheit.anwesend_luise", "signals-oid-1":"eigene-objekte.0.status.anwesenheit.anwesend_luise"}, "style":{"left":"798px","top":"862px","width":"67px","height":"67px"}, "widgetSet":"jqui"}] ````~~~~~~
-
oh man, ganz einfach das mit dem js script das stoppt.
wenn man dem button kein value mitgibt, dann beendet er anscheinend das script..
als value gebe ich nun true mit.
und tata es geht
Bleibt noch die Frage wie ich über den VIS Button einen Parameter übergeben bekomme.
Mein Kopf glüht.
![](</s><URL url=)https://img3.picload.org/image/dgaodgow/jawohl.png" /> -
![](</s><URL url=)https://img3.picload.org/image/dgaodgow/jawohl.png" />` ~~Wofür brauchst du eigentlich die Skripte? Kannst doch in VIS direkt in den jeweiligen Anwesenheits-Datenpunkt schreiben anstatt scriptEnabled.So kannst du auch in Abhängigkeit vom Wert des Datenpunkts die Anwesenheit visualisieren. Frag mich jetzt aber nicht wie, ich benutze VIS nicht.
Parameter an Skripte übergeben ist so nicht gedacht. Das Skript ist ein in sich geschlossenes Programm, das jedoch auf Änderungen an Datenpunkten reagieren kann.~~
-
Hallo.
genau so ist es. Eigentlich wird ein Skript nicht bei Bedarf gestartet. Es sollte immer laufen. Es überwacht die gelisteten Objekte auf Änderung/Aktualisierung und reagiert dann. Oder es führt Aktionen nach Zeitsteuerungen aus.
AlCalzone hat den richtigen Weg gewiesen. Schreibe in VIS direkt in die Datenpunkte oder nutze ein Boolean-Toggle Widget (zB Metro-Toggle).
Dann brauchst du für die Ausführung der Aktionen (also der Logs, Mitteilungen etc.) noch einen Trigger. Das ist die on-Funktion. Ohne diese Subscription werden die Werte nur bei Skriptstart eingelesen. Sie sollen aber immer bei Änderung oder Änderung eingelesen und verarbeitet werden:
/* Setzten den Wert eines Objekts um so dass dieser später interpretiert werden kann. Invertiert den Wert einfach auf true oder false Version 0.0.1 */ var logging = true; var person = 'philipp'; // ich bennene state in idState um. idState = getState('eigene-objekte.0.status.anwesenheit.anwesend_' +person).val; on(idState, function (obj) { var status; // variable anlegen, name status ist besser als setstate if (logging) log('Aktueller Zustand: ' + obj.state.val); if (obj.state.val) { // wenn true status = false; setState(idState, status); } if (!obj.state.val) { // wenn false, man könnte auch else nehmen status = true; setState(idState, status); } if (logging) log('Zustand geändert auf : ' + status); // einmal am Ende reicht }
Es geht noch kürzer, aber ich will nicht zu viele Änderungen auf einmal vornehmen…
Gruß
Pix
-
Hallo zusammen,
danke für das Feedback. Entschuldigt bitte die späte Rückmeldung. Ich wurde gestern kurz nach dem Post sehr ungemütlich von der Familie entführt und komme erst jetzt wieder an den PC.
Ich schaue mir das mal an mit der "Vereinfachung" das hört sich logisch an.
> . Schreibe in VIS direkt in die Datenpunkte oder nutze ein Boolean-Toggle Widget (zB Metro-Toggle).
Das werde ich probieren und eine Rückmeldung geben.
Gruß
-
Hallo zusammen,
ich spiele (sofern meine Kinder und meine Frau mir Zeit lässt) seit kurzer Zeit mit dem ioBroker und bin richtig zufrieden mit der Lösung!
In den letzten Tagen habe ich nun mit der automatisierten Bearbeitung des Anwesenheitsstatus im Haus beschäftigt.
In einem Eigenen Objekt pro Familienmitglied wird ein Logikwert (true | false) gespeichert
eigene-objekte.0.status.anwesenheit.anwesend_familie eigene-objekte.0.status.anwesenheit.anwesend_philipp eigene-objekte.0.status.anwesenheit.anwesend_
Die Werte möchte ich über mehrere Wege manipulieren. Ich möchte über einen Button jedem Mitglied die einfache Möglichkeit geben beim Verlassen des Hauses seinen Zustand zu ändern.
Dafür habe ich mir (ersta mal für jedes Familienmitglied ein JS gebaut - Ich weiß noch nicht wie ich parameter an JS übergeben kann) `
Ich finde deine View klasse!Darf ich die Publishen (z.B. Facebook)? Unter welchen Bedienungen?
-
gibt es einen Grund für das Script?
Du kannst auch einfach so die States anlegen (meinetwegen via Skript) und dann einfach nur z.B. metro tile toggle nutzen um hin und her zu schalten. Dafür braucht es kein Skript.
Edit: sorry, habe vor lauter Bildern nicht gesehe, dass schon lange geantwortet wurde
-
Ich finde deine View klasse!
Darf ich die Publishen (z.B. Facebook)? Unter welchen Bedienungen? `
Hi,
Kannst du gerne verwenden. Ich bin noch in den Feinarbeiten und somit wird es alle paar Tage etwas anders aussehen. Aber vom Prinzip her ist das Layout fertig.
Ich stelle keine Bedingungen.
-
gibt es einen Grund für das Script?
Du kannst auch einfach so die States anlegen (meinetwegen via Skript) und dann einfach nur z.B. metro tile toggle nutzen um hin und her zu schalten. Dafür braucht es kein Skript.
Edit: sorry, habe vor lauter Bildern nicht gesehe, dass schon lange geantwortet wurde `
Hi,
ich habe es mir tatsächlich sehr umständlich gemacht.
Für das ganze VIS brauche ich mehr Zeit. Woher nehmen wenn nicht vorhanden
-
Hallo Zusammen,
da hätte ich mal noch ne Frage zu.
Zum einen, gibt es einen VIS Button mit 3 Stati senkrecht?
zum anderen gibt es oder am besten kann ich dem Button auch eigene Zustände anheften?
also nicht True, False etc. sondern so dass ein Skript dann auch Auf, Zu, Stop, Warten etc.
erfassen kann?
Dann die Frage, wenn ich nun 10 Rolläden steuern möchte, müsste ich für jeden Rollladen ein eigenes Skript
anlegen oder könnte ich den einen Datenpunkt mit z.B 30 verschiedenn Stati berschreiben
und das Skript nimtm den Status udn schreibt ihn ins Log oder sendet ihn?
Beispiel:
Rollladen1Up
Rollladen1Stop
Rollladen1Down
Rollladen2Up
….
Danke
Gruß jens