Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. Pointer an javasript-Funktion

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Pointer an javasript-Funktion

    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      raspiwolf last edited by

      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

      1 Reply Last reply Reply Quote 0
      • arteck
        arteck Developer Most Active last edited by

        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..

        1 Reply Last reply Reply Quote 0
        • AlCalzone
          AlCalzone Developer last edited by

          @raspiwolf:

          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"
          
          
          1 Reply Last reply Reply Quote 0
          • R
            raspiwolf last edited by

            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.

            😄

            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            1.2k
            Online

            31.7k
            Users

            79.7k
            Topics

            1.3m
            Posts

            3
            4
            656
            Loading More Posts
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes
            Reply
            • Reply as topic
            Log in to reply
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
            The ioBroker Community 2014-2023
            logo