NEWS
Befehle von Neeo nach ioBroker senden
-
@Kusi Folgendes ist der Code, um einen Switch einzufügen:
actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{setter: (deviceId, newValue) => switchState = newValue,getter: (deviceId) => switchState,})
Hättest du mir eine Idee, wie ich die Weiterleitung zu ioBroker konfigurieren muss? Ich möchte ja gerne 2 States, einmal für Schalter links und einmal für Schalter rechts.
if (buttonName == "Switch") { http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=S1"); }
-
@Kusi nun im Prinzip startet dein JavaScript Adapter den Prozess aber wahrscheinlich nicht als Tochterprozess. Da musst mit ps irgendwie den Prozess identifizieren und dann wohl mit kill abschießen. Da sollten Dir die linux freaks helfen können. Oder Leute die sich mit Node.js auskennen
-
@mickym sagte in Befehle von Neeo nach ioBroker senden:
@Kusi JavaScript Adapter den Prozess aber wahrscheinlich nicht als Tochterprozess
Momentan starte ich ihn per Putty, damit ich ihn mit dem Schliessen von Putty beende.
So kann ich einfach testen... -
@Kusi said in Befehle von Neeo nach ioBroker senden:
@Kusi Folgendes ist der Code, um einen Switch einzufügen:
actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{setter: (deviceId, newValue) => switchState = newValue,getter: (deviceId) => switchState,})
Hättest du mir eine Idee, wie ich die Weiterleitung zu ioBroker konfigurieren muss? Ich möchte ja gerne 2 States, einmal für Schalter links und einmal für Schalter rechts.
if (buttonName == "Switch") { http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=S1"); }
Ehrlich gesagt verstehe ich die Syntax nicht ganz. Im Prinzip müsstest du in einer variablen - vielleicht newValue die Stellung des Schalters speichern. Zum schuß schreibst dann den hatte Befehl und hängst den Inhalt als String hinter das = an.
-
@Kusi das müsstest auch mit CTRL+Z zu beenden sein
-
@mickym sagte in Befehle von Neeo nach ioBroker senden:
vielleicht newValue die Stellung des Schalters speichern. Zum schuß schreibst dann den hatte Befehl und hängst den Inhalt als String hinter das = an.
Hast du mir ein Beispiel?
Vielleicht hilft dir dies etwas... Für mich ist dies nur Chinesisch...
-
@mickym sagte in Befehle von Neeo nach ioBroker senden:
mit CTRL+Z beenden
Ich kann dann zwar wieder etwas eingeben in Putty, aber der Service/Dienst wird nicht beendet. Muss dann stets das Raspberry neu starten.
-
@Kusi sagte in Befehle von Neeo nach ioBroker senden:
@Kusi Folgendes ist der Code, um einen Switch einzufügen:
actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{setter: (deviceId, newValue) => switchState = newValue,getter: (deviceId) => switchState,})
Hättest du mir eine Idee, wie ich die Weiterleitung zu ioBroker konfigurieren muss? Ich möchte ja gerne 2 States, einmal für Schalter links und einmal für Schalter rechts.
if (buttonName == "Switch") { http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=S1"); }
Die Funktion
addSwitch()
speichert ja den Zustand des Schalters inswitchState
und gibt sie im "getter" auch wieder zurück. Etwas verwirren tut mich, dass dubuttonName == "Switch"
verwendest, oben den Schalter abername: 'Schalter'
nennst.Mit dem Namen sollten die Buttons unterscheidbar sein:
if (buttonName == "ButtonG") { http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=S1"); } else if (buttonName == "ButtonH") { http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=S2"); }
Allerdings würde ich für jeden Knopf einen eigenen State verwenden - das macht das Handling etwas einfacher. Im Script (Javascript Adapter) musst du dann einfach
change: 'any'
verwenden, damit du den Knopfdruck jedes Mal mitbekommst. -
@UncleSam sagte in Befehle von Neeo nach ioBroker senden:
Etwas verwirren tut mich, dass du buttonName == "Switch" verwendest, oben den Schalter aber name: 'Schalter' nennst.
Das ist mir gar nicht aufgefallen. Danke für den Hinweis.
-
@Kusi sagte in Befehle von Neeo nach ioBroker senden:
@UncleSam sagte in Befehle von Neeo nach ioBroker senden:
Etwas verwirren tut mich, dass du buttonName == "Switch" verwendest, oben den Schalter aber name: 'Schalter' nennst.
Das ist mir gar nicht aufgefallen. Danke für den Hinweis.
Du meinst damit Datenpunkt?
-
@Kusi sagte in Befehle von Neeo nach ioBroker senden:
Du meinst damit Datenpunkt?
Sorry, ich bin auf Englisch unterwegs: genau, state = Datenpunkt.
-
@UncleSam Was ich allerdings noch nicht verstehe, wie ich einem Schalter (aus-ein) die Zuweisung gebe, dass er auf "ein" den Befehl sendet.
actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{setter: (deviceId, newValue) => switchState = newValue,getter: (deviceId) => switchState,})
Die Konfiguration ist mir ein Rätsel und weis ich nicht, wie dies gemacht werden muss.
Und gerne hätte ich dann den Befehl in beide Richtungen (aus und ein), damit ich 2 Befehle absetzen kann.Ich weis nicht, welche Wörter ich durch was ersetzen muss.
-
@Kusi sagte in Befehle von Neeo nach ioBroker senden:
Und gerne hätte ich dann den Befehl in beide Richtungen (aus und ein), damit ich 2 Befehle absetzen kann.
Selber habe ich das noch nie getestet, aber den ganzen Code hast du ja bereits oben:
actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{setter: (deviceId, newValue) => switchState = newValue,getter: (deviceId) => switchState,})
setter
undgetter
sind anonyme Javascript Funktionen. Anstatt nur die Variable zu speichern kannst du darin Code ausführen:actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{ setter: (deviceId, newValue) => { switchState = newValue; if (newValue == 'XXXX') { http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value=XXXX" } else { http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value=YYYY" } }, getter: (deviceId) => switchState,})
(XXXX und YYYY musst du natürlich noch durch die richten Werte ersetzen, die ich auch nicht kenne. Und wie gesagt: ungetestet!)
-
@UncleSam sagte in Befehle von Neeo nach ioBroker senden:
if (newValue == 'XXXX') {
Mit "richtigen Wert" meinst du den Wert, welcher vom Schalter her kommt wenn dieser auf "ein" gestellt ist, also z.B. true?
Könnte man diesen ausgegebenen Wert irgendwie auslesen?
-
@Kusi sagte in Befehle von Neeo nach ioBroker senden:
Könnte man diesen ausgegebenen Wert irgendwie auslesen?
Du könntest ihn ja direkt an den Datenpunkt schicken:
http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value=" + newValue);
-
@UncleSam Als Antwort im Browser kommt
{"id":"javascript.0.Eigene_Datenpunkte.Neeo-Switch","value":"\" newValue","val":"\" newValue"}
Wert von Datenpunkt ist dann
" newValue
Ist ein Zeichen falsch?
-
@Kusi Im Browser geht das auch nicht - da dort ja die Variable "newValue" nicht gesetzt wird.
@UncleSam meint dass Du in dem Code des Treibers für den Switch direkt den Wert übergibst - also so:
actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{ setter: (deviceId, newValue) => { switchState = newValue; http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value=" + newValue); }, getter: (deviceId) => switchState,})
-
@mickym sagte in Befehle von Neeo nach ioBroker senden:
@UncleSam meint dass Du in dem Code des Treibers für den Switch direkt den Wert übergibst
Genau.
-
@mickym sagte in Befehle von Neeo nach ioBroker senden:
@Kusi Im Browser geht das auch nicht - da dort ja die Variable "newValue" nicht gesetzt wird.
@UncleSam meint dass Du in dem Code des Treibers für den Switch direkt den Wert übergibst - also so:
actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{ setter: (deviceId, newValue) => { switchState = newValue; http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value=" + newValue); }, getter: (deviceId) => switchState,})
ioBroker aktualisiert den Datenpunkt nicht.
-
@Kusi sagte in Befehle von Neeo nach ioBroker senden:
ioBroker aktualisiert den Datenpunkt nicht.
Dann versuch statt dem
http()
aufruf einfach mal auf die Konsole zu loggen:console.log("Neuer Wert:", newValue);
Selbstverständlich muss nach jeder Änderung der Service oder der Driver neu gestartet werden (nicht aber ioBroker)!