NEWS
Pointer an javasript-Funktion
-
Hallo Forumsmitglieder,
bin neugierig geworden auf die smarthome Technologie. Bisher steuere ich ein Aquarium mit einem Raspberry über die GPIO's, was auch sehr gut funktionert.
Zum Einstieg in smarthome hab ich erstmal einen Raspberry Pi 3 mit einem Funkmodul für Homematic und dem Image Iobroker mit Pivccu versehen. Funktioniert perfekt. Zum ersten Ausprobieren hab ich noch drei Heizkörperthermostate HM-CC-RT-DN. Zwei davon sind im Wohnzimmer über die CCU-Zentrale gepeert. Wenn man an den Thermostaten hantiert und z.B. von Auto in Manuell schaltet, zieht der andere schön mit. Wenn der Umschaltbefehl von Iobroker kommt, aber nicht. In der CCU kann man schon ein script programmieren, dass wenn einer den Status ändert, der andere auch, aber mit viel Geklicke und Kopieren.
Jetzt versuch ich das in javascript zu lösen. Mit der Ausführung in js komm ich schon klar.
Befehle schicken: Modus Manuell setState("hm-rpc.0.OEQxxxx.4.AUTO_MODE",false); Modus Automatik setState("hm-rpc.0.OEQxxxx.4.MANU_MODE",18); //(18 steht für gewählte Temperatur) Werte in Variablen einlesen: Temperatur var Temp = getState("hm-rpc.0.OEQxxxx.4.ACTUAL_TEMPERATURE").val; Automatikstatus var Auto = getState("hm-rpc.0.OEQxxxx.4.AUTO_MODE").val;
Nur jetzt möchte ich das Ganze gern über eine Funktion lösen, einfach Device übergeben, prüfen, anderen mitziehen. nur leider kann man nicht so einfach einen Pointer übergeben, wie in anderen Programmiersprachen. Das was ich im Internet über "call by reference" gefunden hab, da bin ich nicht ganz durchgestiegen.
Nun meine Frage, geht das?, wenn ja wie?, so dass man die Objekte an eine Funktion übergeben kann und die darin auch ändern kann.
Grüsse
-
oha ein alter C++ Coder…..
ich würde es sein lassen .. übergebe das was du haben willst an die funktion und wenn du raus gehst wiedas da geänderte zurück..
ich war nie freund von Pointer.. du wusstest nie was wer geändert hat im Speicher..
-
Nur jetzt möchte ich das Ganze gern über eine Funktion lösen, einfach Device übergeben, prüfen, anderen mitziehen. nur leider kann man nicht so einfach einen Pointer übergeben, wie in anderen Programmiersprachen. `
Geb mal ein paar konkretere Details was du vor hast. Welche Datenstruktur, wie willst du sie verändern? Dann kann man dich eventuell in die richtige Richtung schubsen.Bezüglich der anderen Frage:
Wenn du in JS ein Objekt an eine Funktion übergibst, übergibst du es per Referenz, d.h. Änderungen an der Variable in der Funktion wirken sich auf das Objekt am Ursprung aus:
var obj = {a: 1}; function doSomething(param) { param.a = 2; } // obj.a ist jetzt 1 doSomething(obj); // obj.a ist jetzt 2
Zahlen und Strings werden per Wert übergeben, d.h. Änderungen an der Variable in der Funktion wirken sich NICHT auf den Wert am Ursprung aus:
var str = "123"; function doSomething(param) { param = "456"; } // str ist jetzt "123" doSomething(str); // str ist immernoch "123"
Willst du diese Änderungen zurück an den Aufrufer geben, muss die Funktion einen Wert zurückgeben:
var str = "123"; function doSomething(param) { param = "456"; param = param + "12"; return param; } // str ist jetzt "123" str = doSomething(str); // str ist nun "45612"
-
Ich danke Euch erst mal für Eure Antworten, möcht mich kurz vorstellen. Bin Instandhaltungselektroniker im Autobau. S7, Roboter, C++ Excel und VBA u.a. Mit einem Raspberry Pi 2B hats angefangen. Zuerst das Aquarium über GPIO gesteuert, Temperatur gemessen über 1-Wire, Webserver usw. Mit Iobroker experimentiere ich im Moment noch ein wenig rum, die Möglichkeiten, die sich einem hier bieten, erschlagen einen am Anfang. Ich habe auch eine Lösung für meine Heizkörperthermostate gefunden. Dazu hab ich das Ganze noch mal neu aufgesetzt, statt pivccu aber FHEM gewählt. Die Installation ging sehr einfach. FHEM macht das von alleine, dass ein Heizkörperthermostat einen gepeerten "Kollegen" mitzieht.
Jetzt schau ich mal, ob ich eine ansprechende Visualisierung hinbekomme.