Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Metamorph

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    M
    • Profile
    • Following 0
    • Followers 0
    • Topics 5
    • Posts 16
    • Best 1
    • Groups 1

    Metamorph

    @Metamorph

    1
    Reputation
    3
    Profile views
    16
    Posts
    0
    Followers
    0
    Following
    Joined Last Online
    Location Salzgitter Age 28

    Metamorph Follow
    Starter

    Best posts made by Metamorph

    • RE: Starthilfe Umsetzung Zeitschaltung mit Dauer Ein

      @alexzi
      Versuche es mal mit 3 Triggern. Der erste schaltet, wenn DauerEin verändert wird. Der zweite Trigger ist der von Dir angesprochene Zeitplan mit der "falls, sonst" Abfrage von DauerEin.
      Hier wäre ein Vorschlag von mir:

      Umwälzpumpe.PNG

      Den Trigger zum Ausschalten könntest Du Dir sparen, wenn nach dem Einschalten der Pumpe ein Timer abläuft. Aber auch dort sollte dann eine Abfrage drin sein, um die Pumpe während der Zeitsteuerung auf DauerEin schalten zu können.

      posted in Blockly
      M
      Metamorph

    Latest posts made by Metamorph

    • [Offen] [Problem] Eigene Android-App mit ioBroker verbinden

      Hallo,

      ich versuche mich momentan daran, eine eigene App für Android zu programmieren (Java), die u.a. auch Daten von meiner ioBroker-Installation auf einem Raspberry Pi 4B abrufen soll. Begonnen hatte ich mit einfachen HTTP-Requests über die rest-api. Das hat soweit auch erstmal funktioniert. Dann habe ich aber gelesen, dass Sockets für solche Verbindungen die bessere Wahl sind und mit Socket.io bzw. Websocket entsprechende Möglichkeiten verfügbar sind. Für die Einbindung/Initialisierung in der App habe ich die Doku von Socket.io genutzt, allerdings konnte ich keine Verbindung zum ioBroker aufbauen. Nach langem erfolglosem Suchen im Forum und generell Internet habe ich auch ChatGPT-bemüht, um meinen Fehler zu finden. Ich bekomme aber nur folgende Log-Ausgaben:

      Error in the socket connection: io.socket.engineio.client.EngineIOException: xhr poll error
      

      bzw nach dem Umstellen auf XHR poll kam noch

      Error in the socket connection: io.socket.engineio.client.EngineIOException: server error
      

      Ich spare mir an dieser Stelle erst einmal den Java-Code, da dieser anscheinend funktioniert und in meinen Einstellungen beim ioBroker etwas nicht passt (der Vollständigkeit halber füge ich ihn am Ende an, in dieser Version eine Kopie von ChatGPT). Versucht habe ich als Ports sowohl die 8082 der vis als auch die jeweiligen Ports einer neuen Socket.io/Websocket-Instanz (beim Aufruf im Browser wurde nur "Not implemented" angezeigt). Als URL habe ich immer folgendes angegeben (Port 8084 hier nur als Beispiel):

      String ioBrokerServerURL = "http://192.XXX.XXX.XXX:8084";
      

      Es gab zwar bereits einige Fragen zu diesem Thema (z.B. hier sehr passend aus 2021: socket.io States via Kotlin/Java abgreifen), nur leider kann ich offensichtlich nicht einmal eine Serververbindung herstellen. Über eine Erklärung dazu wäre ich froh 🙂

      Software-Versionen ioBroker:
      Socket.io: 6.5.7
      Websocket: 2.5.7

      Software-Versionen App:
      Socket.io-Client: 2.1.0

      Und hier der Code, der mir die Logmeldung ausgibt:

      try {
                  String ioBrokerServerURL = "http://192.XXX.XXX.XXX:8084";
      
                  IO.Options options = new IO.Options();
                  options.forceNew = true; // Ensure a new connection
      
                  Socket socket = IO.socket(ioBrokerServerURL, options);
      
                  socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
                      @Override
                      public void call(Object... args) {
                          Log.d("Verbindung IOBroker", "Connected to ioBroker.");
                      }
                  });
      
                  socket.on(Socket.EVENT_CONNECT_ERROR, new Emitter.Listener() {
                      @Override
                      public void call(Object... args) {
                          // Handle errors
                          System.out.println("Error in the socket connection: " + args[0].toString());
                      }
                  });
      
                  socket.connect();
              } catch (URISyntaxException e) {
                  e.printStackTrace();
              }
      

      posted in ioBroker Allgemein
      M
      Metamorph
    • RE: [Gelöst] Manuell eine Eigenschaft zu Alias hinzufügen

      @paul53 Ja, jetzt läuft es wie gewünscht. Danke.

      posted in JavaScript
      M
      Metamorph
    • RE: [Gelöst] Manuell eine Eigenschaft zu Alias hinzufügen

      Vielen Dank, das merke ich mir!

      @paul53 sagte in Manuell eine Eigenschaft zu Alias hinzufügen:

      Beachte, dass HM-Taster keine Wertänderungen liefern, die aber Voraussetzung dafür sind, dass bei selector.on() getriggert wird.

      Bisher habe ich jeden Taster so abgefragt:

      on({id: Taster_links_oben_kurz, val: true}, function () {
          setState('0_userdata.0.Allgemein.Arbeitsmodus', MODUS_ARBEIT);
      });
      

      Das hat funktioniert. Allerdings musste ich dafür für jeden genutzten Kanal in der CCU folgendes Programm anlegen:
      Screenshot 2023-05-20 202623.png

      Diese Vorgehensweise habe ich beim ersten HM-Gerät irgendwo gelesen. Ich weiß nicht, ob das im Forum war oder sogar in einem YT-Video. Wenn keine Wertänderung geliefert wird, worauf triggert die Funktion dann? Zumindest erklärt es, warum ich bei Tests nie eine Änderung des Wertes gesehen habe. Ich dachte immer, die Änderung sei einfach zu schnell 😄

      posted in JavaScript
      M
      Metamorph
    • [Gelöst] Manuell eine Eigenschaft zu Alias hinzufügen

      Hallo,

      ich versuche gerade, einige Scripte zu verschlanken mittels Selector. Dafür benötige ich aber eine weitere Objekteigenschaft in jedem Alias. Diese Eigenschaft ("modus", relativ weit unten) habe ich versucht, manuell über die Bearbeitungsfunktion im Objektbaum einzufügen. Eine Fehlermeldung gab es nicht.

      {
        "common": {
          "name": "Taster_rechts_unten_kurz",
          "desc": "Manuell erzeugt",
          "role": "state",
          "type": "boolean",
          "read": true,
          "write": false,
          "def": false,
          "alias": {
            "id": "hm-rpc.1.000B5D898B2E26.6.PRESS_SHORT"
          }
        },
        "type": "state",
        "native": {},
        "_id": "alias.0.Flur.Tastenfelder.Arbeitsmodi.Taster_rechts_unten_kurz",
        "acl": {
          "object": 1636,
          "state": 1636,
          "owner": "system.user.admin",
          "ownerGroup": "system.group.administrator"
        },
        "modus": 5,
        "from": "system.adapter.admin.0",
        "user": "system.user.admin",
        "ts": 1684582054417
      }
      

      Wenn ich nun aber diese Eigenschaft nutzen möchte, dann ist diese unbekannt.

      $('state[id=alias.0.Flur.Tastenfelder.Arbeitsmodi.Taster*]').on(function(obj){
          setState('0_userdata.0.Allgemein.Arbeitsmodus', obj.modus);
      });
      

      In der Doku habe ich zwar eine Erklärung gesehen, wie ich mit einem Script ein Objekt erweitern kann. Aber ich würde das ganz gerne ohne Script fest vorgeben. An anderer Stelle in der Doku habe ich allerdings auch gelesen, dass gar nicht alle Eigenschaften im Objekt "obj" übergeben werden.

      Was muss ich ändern, damit ich die neue Eigenschaft abfragen kann? Benötige ich dafür getAttr()? Und darf dann der Alias vom Typ boolean sein oder muss ich auf object ändern? Bei einem ersten Test mit object hat es aber ebenfalls nicht funktioniert.

      posted in JavaScript
      M
      Metamorph
    • RE: Zählen eines Zustandes

      @chris-1 sagte

      Anstatt in zyklischen Skripten zu denken,
      reagiere ich auf einen Trigger A und setze zB X auf false

      In einem Andere Skript reagiere ich auf Trigger X und agiere dann abhängig davon, ob auf true oder false gesetzt/geändert/... wurde

      Du denkst noch zu aufwändig. Wenn du in Trigger A den Wert von X änderst, kannst du sofort dahinter abhängig von der Änderung weiter machen. Dies muss aber im Trigger und hinter der Variablenänderung geschehen.

      Als Beispiel ein Lichtschalter, der bei jedem Drücken die Helligkeit der Lampe um 20% erhöht:

      1. Trigger A wartet auf das Drücken des Schalters.
      2. Löst der Trigger aus, erhöhst du den Wert von X (Helligkeit) um 20%.
      3. Wenn X größer 100%, dann reduziere ihn auf 0%
      4. Übertrage den Wert X in die Lampe.

      Die Punkte 2-4 sind aufeinanderfolgende Schritte, die aber alle innerhalb des Triggers liegen. Im Prinzip kannst du dutzende Aktionen reinschreiben, die dann alle nacheinander ausgeführt werden, sobald ein Ereignis den Trigger auslöst.

      posted in Einsteigerfragen
      M
      Metamorph
    • RE: [Gelöst] Netzwerkinterne Nachrichten senden

      @oliverio Danke, das klingt genau nach dem, was ich gesucht habe.

      posted in ioBroker Allgemein
      M
      Metamorph
    • [Gelöst] Netzwerkinterne Nachrichten senden

      Hallo miteinander,

      ich suche eine Möglichkeit, um innerhalb meines Heimnetzwerks Nachrichten auf z.B. mein Smartphone zu senden. Hintergrund ist, dass ich meine Steuerung grundlegend unabhängig vom Internet halten kann und möchte. Allerdings möchte ich bei einigen Objektänderungen innerhalb von ioBroker eine Benachrichtigung erhalten, wenn ich zu diesem Zeitpunkt zu Hause bin.

      An Tagen wie heute, wenn ich kein Internet habe, bekomme ich aber keinerlei Benachrichtigungen, außer ich schaue in die Log-Dateien hinein.

      Gibt es da eine Möglichkeit für den Versand von Nachrichten ohne zwingende Internetanbindung?

      Schonmal vielen Dank im Voraus.

      posted in ioBroker Allgemein
      M
      Metamorph
    • RE: [gelöst] Script wird nicht immer ausgeführt

      @ticaki
      Danke dir, das ist es. Ich hatte gar nicht richtig registriert, dass ich schon fast alles dafür im Script stehen hatte. Manchmal braucht es eben doch noch einen Anstoß von außen 😄

      posted in JavaScript
      M
      Metamorph
    • RE: [gelöst] Script wird nicht immer ausgeführt

      @asgothian

      Vielen Dank, jetzt läuft es auch!

      Da ich gleich noch eine Anschlussfrage habe, hier der Code:

      schedule('0 30 8 * * *', SchlafzimmerNacht);
      
      function SchlafzimmerNacht(){
          let ort = 'Schlafzimmer';
          let textContent = 'Nachttemperatur startet.';
      
          /*
          if (ScheduleSchlafzimmerNacht) {
              clearSchedule(ScheduleSchlafzimmerNacht);
              ScheduleSchlafzimmerNacht = null;
          };
          */
          
          if (getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Allgemein.Arbeitsmodus").val != 3 && getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Allgemein.Arbeitsmodus").val != 4) {
              if (getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Fenster_Status").val == true) {
                  /*setState("hm-rpc.1.000A1BE99F98AD.1.SET_POINT_TEMPERATURE", getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nachttemperatur").val);*/
                  Whatsapp_Nachricht(ort, textContent);
              }
              else {
                  setState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Temperatur_speichern_Fenster", getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nachttemperatur").val);
              };
          }
      
          console.log('Schlafzimmer: Funktion für Nachttemperatur ausgeführt.');
      };
      
      
      on({id: 'javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nacht-Beginn.Zeit_veraendert', val: true}, function () {
          SchlafzimmerNacht();
          setState('javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nacht-Beginn.Zeit_veraendert', false);
      });
      

      Am Ende möchte ich den schedule nicht fest auf eine Zeit definieren, sondern Variablen nutzen, deren Wert über die Visu geändert werden kann. Ich hatte mal gelesen, dass für die Aktualisierung der schedule gelöscht und neu angelegt werden sollte/muss. Das Löschen sollte nicht das Problem sein, aber wie funktioniert das Erstellen? Da wäre ich wieder bei meinem ursprünglichen Script, das den Schedule in der Funktion definiert. Äußerlich soll sich nichts ändern, nur der neue Wert der Variablen soll genutzt werden.
      Gibt es eine ähnliche Möglichkeit wie bei Objekten mit dem Konstruktor?

      posted in JavaScript
      M
      Metamorph
    • [gelöst] Script wird nicht immer ausgeführt

      Hallo,

      ich habe mich nun entschieden, meine Blockly-Scripte in JS neu zu schreiben. Dabei habe ich folgendes Script für die Nachttemperatur erstellt:

      function SchlafzimmerNacht(){
          let ScheduleSchlafzimmerNacht;
          let ort = 'Schlafzimmer';
          let textContent = 'Nachttemperatur startet.';
      
          if (ScheduleSchlafzimmerNacht) {
              clearSchedule(ScheduleSchlafzimmerNacht);
              ScheduleSchlafzimmerNacht = null;
          };
      
          ScheduleSchlafzimmerNacht = schedule('0 15 23 * * *', function () {
              if (getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Allgemein.Arbeitsmodus").val != 3 && getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Allgemein.Arbeitsmodus").val != 4) {
                  if (getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Fenster_Status").val == true) {
                      setState("hm-rpc.1.000A1BE99F98AD.1.SET_POINT_TEMPERATURE", getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nachttemperatur").val);
                      Whatsapp_Nachricht(ort, textContent);
                  }
                  else {
                      setState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Temperatur_speichern_Fenster", getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nachttemperatur").val);
                  };
              }
          });
      };
      
      
      on({id: 'javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nacht-Beginn.Zeit_veraendert', val: true}, function () {
          SchlafzimmerNacht();
          setState('javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nacht-Beginn.Zeit_veraendert', false);
      });
      

      Der Trigger hat derzeit keine echte Funktion, da ich aktuell noch eine feste Zeit beim schedule hinterlegt habe ("Zeit_veraendert" ist aber ein existierender Datenpunkt, den ich manuell auf true setzen kann). Ansonsten soll einfach abends die vorgegebene Temperatur eingestellt werden, wenn das Fenster geschlossen ist. Ist es geöffnet, wird die Temperatur in einen Datenpunkt geschrieben. Die Abfrage von "Arbeitsmodus" dient nur zur Unterscheidung von Arbeit, Urlaub etc. Die Funktion "Whatsapp_Nachricht" ist in einem Script beschrieben, dass ich im Ordner "global" erstellt habe. Das ganze läuft auf einem Raspberry Pi 3B+.

      Mein Problem ist, dass das Script anfangs getriggert wurde, nun aber nicht mehr. Auch wenn ich "Zeit_veraendert" auf true setze, zeigt das Log nichts an, der Datenpunkt wechselt aber sofort wieder zu false bzw. bleibt auf false (ich sehe nicht, dass er sich auf meine Eingabe hin tatsächlich ändert). Ich weiß nicht, wo das Problem liegt. Spätestens durch den Trigger ab Zeile 25 müsste ich doch das Script zumindest starten können?

      posted in JavaScript
      M
      Metamorph
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo