Navigation

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

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    B
    • Profile
    • Following 0
    • Followers 0
    • Topics 31
    • Posts 183
    • Best 14
    • Groups 3

    bloop

    @bloop

    Starter

    16
    Reputation
    33
    Profile views
    183
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    bloop Follow
    Developer Pro Starter

    Best posts made by bloop

    • RE: TTS mit HomePod

      @m-a-hueb
      Tut mir leid war die letzten Tage unterwegs.
      Die Datenpunkte hab ich mir selbst angelegt und dann via Yahka als Switch in Homekit eingebunden. Eine Apple Automation schaltet mir diese dann auch wie gewünscht.

      Anbei der Code, allerdings einfach nur Copy-Paste wird nicht funktionieren.

      <xml xmlns="https://developers.google.com/blockly/xml">
        <block type="on_ext" id="!y7`@#n+=[(Q-|EZ;8:k" x="-462" y="-37">
          <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
          <field name="CONDITION">ne</field>
          <field name="ACK_CONDITION"></field>
          <value name="OID0">
            <shadow type="field_oid" id="E2j7B1.^p9*9kUYNS8JD">
              <field name="oid">0_userdata.0.Systeme.Texttospeech_trigger</field>
            </shadow>
          </value>
          <statement name="STATEMENT">
            <block type="controls_if" id="?Kz$y7OooLMA[T=9ec:i">
              <value name="IF0">
                <block type="logic_operation" id="uW%b3T*~vjac-vF1`0U:" inline="false">
                  <field name="OP">AND</field>
                  <value name="A">
                    <block type="logic_compare" id="X(r4^B.9Z6z`HvQ2mS/)">
                      <field name="OP">EQ</field>
                      <value name="A">
                        <block type="on_source" id="a_=XQTw%mE`j0~b[281@">
                          <field name="ATTR">state.val</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="logic_boolean" id="gsEPr=I=t37K^/,3$t{P">
                          <field name="BOOL">TRUE</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <value name="B">
                    <block type="logic_compare" id="c2/ei6.)HTg{28ZVy.7u">
                      <field name="OP">EQ</field>
                      <value name="A">
                        <block type="get_value" id="4T%LB;d0ufy99Z;9WBm]">
                          <field name="ATTR">val</field>
                          <field name="OID">0_userdata.0.Systeme.Homepod_Kombi</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="logic_boolean" id="Bjt!xC{s0pIjRAA%ev*f">
                          <field name="BOOL">TRUE</field>
                        </block>
                      </value>
                    </block>
                  </value>
                </block>
              </value>
              <statement name="DO0">
                <block type="control" id="oS[.L`.v*Yb?tgy+F[?D">
                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                  <field name="OID">0_userdata.0.Systeme.Homepod_Kombi</field>
                  <field name="WITH_DELAY">FALSE</field>
                  <value name="VALUE">
                    <block type="logic_boolean" id="Y]1u):1=|XOpZ+z0YEQf">
                      <field name="BOOL">FALSE</field>
                    </block>
                  </value>
                  <next>
                    <block type="control" id="mI!;M#SkwR/S/ufPILg[">
                      <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
                      <field name="OID">hass.0.entities.input_text.input_text.set_value</field>
                      <field name="WITH_DELAY">TRUE</field>
                      <field name="DELAY_MS">1000</field>
                      <field name="UNIT">ms</field>
                      <field name="CLEAR_RUNNING">FALSE</field>
                      <value name="VALUE">
                        <block type="get_value" id="o6fHE{B,Z/^-QX-/Q{a(">
                          <field name="ATTR">val</field>
                          <field name="OID">0_userdata.0.Systeme.Texttospeech_Homepod</field>
                        </block>
                      </value>
                      <next>
                        <block type="control" id="frMwj@LQ?1jneZ.Ylk=B">
                          <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
                          <field name="OID">0_userdata.0.Systeme.Texttospeech_trigger</field>
                          <field name="WITH_DELAY">TRUE</field>
                          <field name="DELAY_MS">200</field>
                          <field name="UNIT">ms</field>
                          <field name="CLEAR_RUNNING">FALSE</field>
                          <value name="VALUE">
                            <block type="logic_boolean" id="s2FpT!=MKY0ucbzGduQ7">
                              <field name="BOOL">FALSE</field>
                            </block>
                          </value>
                        </block>
                      </next>
                    </block>
                  </next>
                </block>
              </statement>
            </block>
          </statement>
          <next>
            <block type="on_ext" id="-YgM}_6QHq6cR~hxK^R=">
              <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
              <field name="CONDITION">ne</field>
              <field name="ACK_CONDITION"></field>
              <value name="OID0">
                <shadow type="field_oid" id="iEX^m6b^f)UGZz,7II7x">
                  <field name="oid">hass.0.entities.media_player.kuche.state</field>
                </shadow>
              </value>
              <statement name="STATEMENT">
                <block type="controls_if" id="*,Dxpg4A;S3D8{PbFFKg">
                  <value name="IF0">
                    <block type="logic_operation" id="M}*}(:*vuTGYPP5=91]=" inline="false">
                      <field name="OP">AND</field>
                      <value name="A">
                        <block type="logic_operation" id="T%TbC|K#lG{)rm8^WYB," inline="false">
                          <field name="OP">AND</field>
                          <value name="A">
                            <block type="logic_compare" id="`[NCzpH4:sJ4z/Q~HDj0">
                              <field name="OP">EQ</field>
                              <value name="A">
                                <block type="on_source" id="Dg4}0`clexDWj$qK]dEI">
                                  <field name="ATTR">state.val</field>
                                </block>
                              </value>
                              <value name="B">
                                <block type="text" id="=80c_.3*SbRub2plUoH=">
                                  <field name="TEXT">paused</field>
                                </block>
                              </value>
                            </block>
                          </value>
                          <value name="B">
                            <block type="logic_compare" id="wnP:[q-t{pYYFJz%Vkr}">
                              <field name="OP">EQ</field>
                              <value name="A">
                                <block type="get_value" id="8Yka^Nc.gWs(h):7.#O*">
                                  <field name="ATTR">val</field>
                                  <field name="OID">shelly.0.SHSW-25#68C63AF96046#1.Relay0.Switch</field>
                                </block>
                              </value>
                              <value name="B">
                                <block type="logic_boolean" id="`#NJMJt)L.~@8?9xQ/``">
                                  <field name="BOOL">TRUE</field>
                                </block>
                              </value>
                            </block>
                          </value>
                        </block>
                      </value>
                      <value name="B">
                        <block type="logic_compare" id="=)K1ORztIb+Ce![0TxB0">
                          <field name="OP">EQ</field>
                          <value name="A">
                            <block type="get_value" id="#5#OkW9gRp|qq2@)28(~">
                              <field name="ATTR">val</field>
                              <field name="OID">0_userdata.0.Systeme.Homepod_Kombi</field>
                            </block>
                          </value>
                          <value name="B">
                            <block type="logic_boolean" id=";l~[#SE-:K:Qi62]S.mG">
                              <field name="BOOL">FALSE</field>
                            </block>
                          </value>
                        </block>
                      </value>
                    </block>
                  </value>
                  <statement name="DO0">
                    <block type="control" id="UMhmY2hoO^]u`8RF-7P]">
                      <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                      <field name="OID">0_userdata.0.Systeme.Homepod_Kombi</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE">
                        <block type="logic_boolean" id="9cTiMX*-[lXWXGuJ7b#e">
                          <field name="BOOL">TRUE</field>
                        </block>
                      </value>
                    </block>
                  </statement>
                </block>
              </statement>
            </block>
          </next>
        </block>
      </xml>
      
      posted in Cloud Dienste
      B
      bloop
    • InfluxDB alten Datenmüll löschen

      Liebe Community,

      In den letzten Jahren hat sich mein SmartHome stetig weiterentwickelt – Geräte wurden entfernt, ersetzt oder ergänzt. Dadurch hat sich in meiner InfluxDB zunehmend „Datenmüll“ angesammelt, dessen manuelle Bereinigung mir zu mühsam war.

      Um nicht jede Measurement einzeln abfragen zu müssen, habe ich ein kleines Skript geschrieben, dass die Datenbank nach Bedarf bereinigt.

      https://github.com/bloop16/influxdb_v2_measurement_clean_Skript

      Voraussetzungen:
      InfluxDB 2.x (aktuell getestet mit Version 2.7.11)
      ioBroker InfluxDB-Adapter

      Funktionsweise:
      Schritt 1: Das Skript erstellt eine Liste aller vorhandenen Measurements.
      Schritt 2: Es prüft, welche Measurements in den letzten x Tagen beschrieben wurden.
      Schritt 3: Ihr erhaltet eine Übersicht über aktive und inaktive Measurements.
      Schritt 4: Ihr könnt auswählen, ob bestimmte Measurements gelöscht werden sollen.

      Das Skript ist nicht perfekt, aber es erfüllt seinen Zweck.

      P.S.: Ich habe festgestellt, dass ich irgendwann ein Measurement erstellt habe, das JSON-Daten speichert. Dieses konnte nicht korrekt eingelesen werden, was kurzfristig zu einer hohen Systemauslastung führte und die Auflistung der restlichen Measurements beeinträchtigte. Nachdem ich dieses „korruptes“ Measurement manuell gelöscht hatte, lief das Skript wieder einwandfrei.

      Ich stehe noch am Anfang meiner Skript-Entwicklung, daher freue ich mich über Verbesserungsvorschläge!

      Viel Spaß damit!

      posted in InfluxDB
      B
      bloop
    • RE: LoRaWAN MakerFab Bewässerungssensor

      @oxident
      Nicht unbedingt!
      Wenn in in deiner Region bereits ein Gateway vorhanden ist wird dieses verwendet.
      Auf TTN kannst du vorab checken ob die Region abgedeckt ist.

      posted in Praktische Anwendungen (Showcase)
      B
      bloop
    • Papierkorb für gelöschte Skripts

      Guten Abend,

      Leider ist es mir nun ein, zwei mal passiert dass ich Skript, Rules oder Blockly`s unabsichtlich gelöscht habe... Die Knöpfe liegen sehr nahe beieinander...
      Sehr ärgerlich da ich dann entweder das Skript neu schreiben musste oder das Backup von letzter Nacht zurück gespielt habe.

      Könnte man nicht darüber nachdenken Skripts über einen gewissen Zeitraum in ein "Papierkorb" zu legen und erst nach x Tagen endgültig zu löschen?

      Herzlichen Dank!

      posted in Skripten / Logik
      B
      bloop
    • RE: TTS mit HomePod

      @wildbill 👍 In Home Assistent funktionierts. Danke nochmal!
      Jetzt habe ich einen Weg gefunden um die Wiedergabe nach TTS wieder fortzusetzen.

      Vorab: Ich höre in meinem HomePod Verbund meist lediglich Radio. Damit die auch alle schön Synchron laufen habe ich mir eine Automation angelegt welche mir bei umlegen eines Fiktiven Schalters alle Pods startet. Dieser wird zb. unter anderem durch einschalten des Lichtes eingeschaltet. So sind die Pods nicht direkt ans Licht gekoppelt und lassen sich entsprechend der unterschiedlichen Umständen Ein / Ausschalten.

      Mit folgendem Blockly starten die Pods wieder nach der TTS Wiedergabe:
      51452e11-5994-44b7-8393-497e826f2dea-image.png

      LG

      posted in Cloud Dienste
      B
      bloop
    • RE: Test Adapter AI Toolbox v0.1.3 GitHub/Latest

      @oxident
      Ich fahre mit Ollama ebenfalls sehr gut! Funktioniert im Adapter leider noch nicht. Auf GitHub habe ich bereits ein Feature Request für Ollama angefragt. Es wird scheinbar bereits daran gearbeitet.
      Leider reagiert der Großteil der Community gegenüber AI use cases sehr abweisend - anders als bei HA…
      Ich denke ebenfalls das es hierfür noch zu früh ist und noch keiner der großen Streamer etwas bahnbrechendes dazu veröffentlicht hat.
      Ich verwende meine AI aktuell lediglich um regelmässige Benachrichtigungen Kreativer zu gestalten und trainiere meine AI mit Bildern der Kameras um irgendwann zu Personen, Tieren usw. korrekte Namen zuweisen zu können. Als Nächstes möchte ich meine AI mit Datenpunkten usw. trainieren. Alles Lokal versteht sich.
      Was sind eure use cases denn so?

      posted in Tester
      B
      bloop
    • RE: WiZ Steckdosen Adapter

      Ich hab etwas gegoogelt, konnte aber nicht viel finden.
      Die WiZ Geräte gehören zur Signify Gruppe. Auch hierzu findet man kaum Informationen.
      Anscheinend sind die Dinger ähnlich verschlüsselt wie die Tuya Geräte.
      Ich hab mich noch nicht getraut den Stecker auseinander zu nehmen und zu gucken was für ein Chip eingebaut ist.
      Falls es sich um einen ESP8622 handelt lässt sich da bestimmt was ordentliches drauf spielen.
      Ich bin echt überrascht wieviel unterschiedliche Systeme eigentlich schon auf dem Markt sind und jeder versucht sein eigenes Süppchen zu kochen.
      Hab das ding auch nur gekauft weils für 9,- im Schnäppchenkorb lag. Jetzt weis ich auch warum 😬

      posted in ioBroker Allgemein
      B
      bloop
    • LoRaWAN MakerFab Bewässerungssensor

      Liebe Community,

      Ich würde gerne meine gesammelte Erfahrung mit den Bodenfeuchtigkeitssensoren von MakerFab mit euch teilen.
      Ziel dieses Projektes war es die Sensoren für meine Bewässerungsanlage zu verwenden und in den sprinkelcontrol Adapter einzubinden. Die zu bewässernden Pflanzen stehen leider außerhalb der Reichweite meines Netzwerkes. Wodurch ich mich auf die Suche nach einer möglichen Alternative gemacht habe. Für mich ergab sich so ein etwas holpriger Einstieg in die LoRaWAN Welt.

      LoRa Bodenfeuchtigkeitssensoren V3 Kostenpunkt €19,90
      2023-06-02 23.31.03.jpg
      Ich hab mich für die Sensoren entschieden, da ich ansonsten leider nichts ähnliches in dieser Preisklasse finden konnte.
      Allerdings sind die Sensoren nicht LoRaWAN fähig und für den Betrieb mit einem selbst gebauten Lora Gateway gedacht. Diese Mühe wollte ich mir eigentlich sparen. So habe ich mich auf die Suche nach einer Möglichkeit zur Integration ins LoRaWAN Netzwerk TTN (TheTingsNetwork) gemacht. Die Verarbeitung der Sensoren ist recht ok, Sie sind über die gesamte Platinenfläche und den Sensor mit einem Lack überzogen. Nur das Gehäuse lässt etwas zu wünschen übrig.

      Tip: Ich habe mich leider bei der Wahl der Sensoren etwas vergriffen, in der Zwischenzeit gibt es bereits Sensoren die LoRaWan unterstützen.So könnte das Flashen der Firmware nicht nötig sein. LoRaWan Sensoren

      Wichtige Links:
      USB-Serial Converter: CP2104

      Anleitung: Makerfabs Soil Moisture Sensor v3
      Firmware: LORAWAN SOIL MOISTURE SENSOR (Die 3 Files weiter unten im Blog)

      Arduino IDE: Download

      Erfahrungen:

      • Das Aufspielen des Sketch hat mir große Schwierigkeiten gemacht. Es müssen genau die richtigen Version von Biblioteken in Arduino IDE installiert werden. Welche hierfür benötigt werden ist in der Anleitung angegeben. Ebenso muss in der Konfigurationsdatei von MCCI LoRaWAN Library folgender Code eingegeben werden um die richtige Region der Library einzustellen. Ansonsten erhaltet ihr immer die Nachricht das der Sketch zu groß ist und nicht auf den Sensor geflashed werden kann.
      #define CFG_eu868 1
      //define CFG_us915 1
      //#define CFG_au915 1
      //#define CFG_as923 1
      // #define LMIC_COUNTRY_CODE LMIC_COUNTRY_CODE_JP	/* for as923-JP */
      //#define CFG_kr920 1
      //#define CFG_in866 1
      #define CFG_sx1276_radio 1
      //#define LMIC_USE_INTERRUPTS
      
      #define DISABLE_PING
      #define DISABLE_BEACONS
      #define LMIC_DEBUG_LEVEL 0
      #define USE_IDEETRON_AES
      
      • Nachdem ich verstanden habe was in dem Sketch angegeben und gemeint ist, hat das eintragen der EUI aus TTN erstaunlich gut funktioniert. Hier ist lediglich zu beachten, dass diese auch im richtigen Format eingetragen werden. In TTN lassen sich die aber direkt im passenden Format anzeigen und kopieren.
      // This EUI must be in little-endian format, so least-significant-byte
      // first. When copying an EUI from ttnctl output, this means to reverse
      // the bytes. For TTN issued EUIs the last bytes should be 0xD5, 0xB3,
      // 0x70.
      // APPEUI can be left with ceros
      static const u1_t PROGMEM APPEUI[8]={ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };
      void os_getArtEui (u1_t* buf) { memcpy_P(buf, APPEUI, 8);}
      
      // This should also be in little endian format, see above.
      static const u1_t PROGMEM DEVEUI[8]={ TTN_DEVEUI };
      void os_getDevEui (u1_t* buf) { memcpy_P(buf, DEVEUI, 8);}
      
      // This key should be in big endian format (or, since it is not really a
      // number but a block of memory, endianness does not really apply). In
      // practice, a key taken from ttnctl can be copied as-is.
      static const u1_t PROGMEM APPKEY[16] = { TTN_APPKEY };
      void os_getDevKey (u1_t* buf) {  memcpy_P(buf, APPKEY, 16);}
      
      
      • Leider hat mir das Flashen immer wieder Schwierigkeiten gemacht, worauf hin ich den Bootloader der Sensoren mit einem Arduino Nano neu programmiert habe. Entsprechende Anleitungen lassen sich leicht finden. Hierfür habe ich den Lack auf den 6 Pins abgekratzt und Kabel angelötet und mit dem Nano verbunden. Aufpassen das beim Flashen des Arduino Nano der Sensor nicht angeschlossen ist.

      • Nachdem ich die Sensoren dann endlich im TTN angezeigt bekommen habe, musste ich noch den Payload Formater passend konfigurieren. Dieser ist bei Device unter Payload formatters / Uplink / Custom Javascript formatter einzutragen.

      // TTNV3 Payload Formatter Uplink V0.1
      function decodeUplink(input) {
      
      if ((input.fPort > 0) && (input.fPort < 223))
      {
        var decodedTemp = 0;
        var decodedHumi = 0;
        var decodedBatt = 0;
      
      // seperate raw data from payload
        var rawSoil = input.bytes[0] + input.bytes[1] * 256;
        var rawTemp = input.bytes[2] + input.bytes[3] * 256;
        var rawHumi = input.bytes[4] + input.bytes[5] * 256;
        var rawBatt = input.bytes[6] + input.bytes[7] * 256;
      
      // decode raw data to values
        decodedTemp = sflt162f(rawTemp) * 100; // value calculated to range -1..x..+1 by dividing /100
        decodedHumi =  sflt162f(rawHumi) * 100; // value calculated to range -1..x..+1 by dividing /100
        if (rawBatt !== 0) decodedBatt =   rawBatt / 1000; // batterie voltage ist transmitted in mV, recalculate in V
      
      // definition of the decimal places
        decodedTemp = decodedTemp.toFixed(2);
        decodedHumi = decodedHumi.toFixed(2);
        decodedBatt = decodedBatt.toFixed(2);
      
      // return values
        return {
          data: {
            Feuchtigkeit: rawSoil,
            Temperatur: decodedTemp,
            Luftfeuchtigkeit: decodedHumi,
            Batterie: decodedBatt
                },
          warnings: [],
          errors: []
        };
      }
      else {
          return {
            data: {},
            warnings: [],
            errors: ["Invalid data received"]
          };
        
      }
      }
      
      function sflt162f(rawSflt16)
      	{
      	// rawSflt16 is the 2-byte number decoded from wherever;
      	// it's in range 0..0xFFFF
      	// bit 15 is the sign bit
      	// bits 14..11 are the exponent
      	// bits 10..0 are the the mantissa. Unlike IEEE format, 
      	// 	the msb is transmitted; this means that numbers
      	//	might not be normalized, but makes coding for
      	//	underflow easier.
      	// As with IEEE format, negative zero is possible, so
      	// we special-case that in hopes that JavaScript will
      	// also cooperate.
      	//
      	// The result is a number in the open interval (-1.0, 1.0);
      	// 
      	
      	// throw away high bits for repeatability.
      	rawSflt16 &= 0xFFFF;
      
      	// special case minus zero:
      	if (rawSflt16 == 0x8000)
      		return -0.0;
      
      	// extract the sign.
      	var sSign = ((rawSflt16 & 0x8000) !== 0) ? -1 : 1;
      	
      	// extract the exponent
      	var exp1 = (rawSflt16 >> 11) & 0xF;
      
      	// extract the "mantissa" (the fractional part)
      	var mant1 = (rawSflt16 & 0x7FF) / 2048.0;
      
      	// convert back to a floating point number. We hope 
      	// that Math.pow(2, k) is handled efficiently by
      	// the JS interpreter! If this is time critical code,
      	// you can replace by a suitable shift and divide.
      	var f_unscaled = sSign * mant1 * Math.pow(2, exp1 - 15);
      
      	return f_unscaled;
      	}
      
      • Der nächste Schritt das übertragen zu iobroker per MQTT ging ganz leicht. Hierfür eine neue Instanz anlegen und die unter Integrations / MQTT angegebenen Verbindungskonfigurationen eingeben.

      • So habe ich es endlich geschafft die Sensordaten in den iobroker zu integrieren. Diese werden als JSON an einen Datenpunkt geschickt. Mit folgendem Skript lasse ich mir diese in Datenpunkte ablegen.

      const soilup = "mqtt.1.v3.030374@ttn.devices.eui-70b3d57ed005e017.up";
      const path = '0_userdata.0.Bewässerung.eui-70b3d57ed005e017';
      const idBat = '0_userdata.0.Bewässerung.eui-70b3d57ed005e017.Batterie';
      const idMoist = '0_userdata.0.Bewässerung.eui-70b3d57ed005e017.Feuchtigkeit';
      const idAir = '0_userdata.0.Bewässerung.eui-70b3d57ed005e017.Luftfeuchtigkeit';
      const idTemp = '0_userdata.0.Bewässerung.eui-70b3d57ed005e017.Temperatur';
      
      if(!existsState(idBat)) { // Datenpunkte erzeugen
          createState(idBat, '0', {type: 'number', unit: 'V'});
          createState(idMoist, '0', {type: 'number', unit: '%'});
          createState(idAir, '0', {type: 'number', unit: 'rF'});
          createState(idTemp, '0', {type: 'number', unit: '°C'});
      };
      
      on(soilup, function(dp) { // triggert bei Wertänderung
          let obj = JSON.parse(dp.state.val).uplink_message.decoded_payload;
          setState(idBat, obj.Batterie, true);
          setState(idMoist, parseFloat(obj.Feuchtigkeit), true);
          setState(idAir, parseFloat(obj.Luftfeuchtigkeit), true);
          setState(idTemp, parseFloat(obj.Temperatur), true);
      });
      

      2b0741fa-2e08-45cd-8351-15e0f30a1988-image.png

      Ich hoffe ich kann jedem der auf eine ähnliche Idee kommt mit meinen Tipps etwas helfen!

      posted in Praktische Anwendungen (Showcase)
      B
      bloop
    • SourceAnalytics to Json

      Hallo,

      Um mir die Datenpunkte des SourceAnalytics Adapter in meiner VIS per Json Tabelle anzeigen zu lassen hab ich mir ein Blockly gebaut. Leider konnte ich nichts verwendbares im Forum finden und habe mich somit selbst an die Arbeit gemacht.
      Ich sehe mich selbst noch als Anfänger und habe versucht das ganze möglichst übersichtlich zu gestalten.

      Funktion:
      Blockly liest bei einer Änderung der Datenpunkte von Sourceanalytics die Monate bzw. Tage welche hinterlegt werden ein und gibt diese als JSON Tabelle an einen vorab eingestellten Datenpunkt weiter.
      Die erst Eingabe ist nicht automatisiert und muss noch von Hand vorgenommen werden.

      Was haltet ihr davon? Verbesserungsvorschläge?

      Danke fürs Feedback!

      blockly.png

      Leider ist das Skript länger als 10000 Zeichen und ich muss es als .txt anhängen
      statistik.txt

      posted in Blockly
      B
      bloop
    • RE: Yahka Heizung Temperatur ändern

      @ticaki
      Das ist gut zu wissen! Dann scheint es auch Geräte zu geben bei denen diese Auflistung nicht stimmt. Ich hatte das Problem bei einem anderen Gerät.

      posted in ioBroker Allgemein
      B
      bloop

    Latest posts made by bloop

    • RE: Test Adapter ioBroker.n8n

      Folgende Punkte sind mir bei meinen ersten Tests aufgefallen:

      • Sprache von n8n entsprechend der ioBroker Systemsprache möglich?
      • Lässt sich das Einfügen von ObjektIDs in den ioBroker Nodes etwas abändern? Aktuell kopiere ich die gewünschten Datenpunkte immer aus den Objekten. Was etwas mühsam ist.

      Ansonsten scheint der Adapter einwandfrei zu laufen!

      posted in Tester
      B
      bloop
    • RE: Einbindung einer Lokalen AI

      @OliverIO
      Meinem "kleinen" llama Modell waren der Objektpfad sowie die Bezeichnung nicht ausreichend. Ein Pfad wie shelly.0.SHBDUO-1#XXXXXX.lights.Switch konnte nicht passend interpretiert werden. Auch die boolean Werte und Beschreibung wurde oft falsch interpretiert.
      Deshalb habe ich diese in über die Datenpunkteinstellungen mit Beschreibung, Destination, Wert Boolean true und false, Unit, ... die Möglichkeit zum Definieren erstellt. Daraus wurde dann zb. Wohnzimmer Stehlampe ein, Temperatur Wohnzimmer 26°C oder Gute Nacht Geschichte Kinderzimmer.
      Der Datenpunktpfad, Zeitstempel und die entstandene Beschreibung wurde dann an das Ollama Embedding Modell übergeben und in die Datenbank geschrieben. Bei einer Abfrage wurden die gespeicherten Daten dann abgefragt. Selbstverständlich würde sich dies auch mit Funktionen und Räume vordefinieren lassen.

      Das Resultat daraus war, dass ich viel präzisere Antworten erhalten habe und auch ein kleines Modell diese relativ schnell verarbeiten konnte.

      In Verbindung mit n8n könnte ich mir vorstellen, dass kurze Prompts wie:
      Schalte die Stehlampe im Wohnzimmer ein. Direkt über ein Lokales Modell ablaufen könnte.
      Größere und längere Anfragen wären mit einem externen Modell abzuarbeiten welchem die Daten zwar für den Prompt zur Verfügung gestellt bekommt, allerdings wären diese immer noch Lokal abgespeichert und nicht ausgelagert.

      posted in Entwicklung
      B
      bloop
    • RE: Einbindung einer Lokalen AI

      @OliverIO
      Ich habe mir n8n nun etwas angesehen:
      Sehr mächtiges Tool!

      Ich werde mich in denn kommenden Tagen an ein paar Workflows für ioBroker setzen.

      Aktuell gibt es noch keine Möglichkeit direkt in ioBroker mehrere Datenpunkte auch semantisch zu speichern - ähnlich wie bei MySQL und influxDB über die Datenpunkteinstellungen. Ein entsprechendes embedding hatte ich bereits für Qdrant und Ollama in meinem Adapter umgesetzt. Dies hat die Qualität der Ausgaben um einiges verbessert. Wäre für die Nutzung von n8n und AI eventuell an zudenken.

      posted in Entwicklung
      B
      bloop
    • RE: Test Adapter ioBroker.n8n

      Leider immer noch das selbe Phänomen.

      auch mit

      iobroker url iobroker.n8n@latest --host $HOSTNAME --debug
      

      weiterhin die Meldung.

      startInstance n8n.0: cannot find start file!
      

      Muss ich n8n doch noch zusätzlich installieren?

      posted in Tester
      B
      bloop
    • RE: Test Adapter ioBroker.n8n

      Ich bekomme den Adapter leider nicht zum laufen:

      2025-08-23 10:43:46.638 - error: host.iobroker startInstance n8n.0: cannot find start file!
      

      Installiert hab ich wie oben angegeben direkt aus dem NPM Repo:

      cd /opt/iobroker
      sudo npm i iobroker.n8n
      

      Wenn ich mir die config des Adapters so ansehe, lässt sich auch keine IP oder Port konfigurieren.
      Versehe ich es richtig, dass n8n mit dem Adapter direkt in ioBroker läuft?

      posted in Tester
      B
      bloop
    • RE: Einbindung einer Lokalen AI

      @oliverio
      Ich denke nicht, das Ollama der finale Name bleiben würde.
      Um den Funktionsumfang zu erweitern muste ich zusätzlich zu Ollama auch noch OpenWebUi und Qdrant als Datenbank in den Adapter einbauen.

      Wie war es dir möglich in n8n auch historische Daten zu analysieren bzw. mit einzubeziehen?
      Versteh ich es richtig, dass n8n unter anderem als Schnittstelle zu KI Modellen dient und die Daten zur Analyse lediglich an extern laufende Modelle weitergibt? Genau das möchte ich ja vermeiden.
      Die Verarbeitungszeit spielt für mich aktuell noch eine nebensächliche Rolle.

      n8n werd ich mich ansehen!
      Bin gespannt was sich damit umsetzen lassen würde.

      posted in Entwicklung
      B
      bloop
    • RE: Einbindung einer Lokalen AI

      @jey-cee
      Mit Holger war ich kurz in kontakt.
      Ollama supportet in der Zwischenzeit MCP.
      Mein Ansatz war / ist jedoch ein anderen. Wie bereits geschrieben, über RAG und eine Vectordatenbank.

      Die Toolbox und der Assistant sind lediglich Schnittstellen um Prompts anzufragen und Antworten zu generieren. (bitte nicht als Kritik verstehen!)

      Ich bin der Meinung man sollte hier die Anstrengungen Bündeln und vor allem mehr Zeit darauf verwenden >Ordentliche Prompts zu schreiben die dann für die Allgemeinheit verwendet werden können. Denn woran es >wirklich fehlt ist genau das. Eine KI an zu sprechen und ihr die Infos mit zu geben die sie zur Verarbeitung
      braucht ist relativ leicht.

      Da bin ich ganz deiner Meinung!
      Ich musste bereits feststellen, dass das erstellen unzähliger unterschiedlicher Prompts um alle variablen einzugrenzen fast unmöglich ist, zudem sollten die Adapter auch noch Multilingual funktionieren...
      Bei all einen Ansätzen habe ich versucht bestmöglich auf Keywords und Pattern zu verzichten.
      Grundsätzlich ist es bei Ollama möglich aus jedem Modell eine neues Modell mit den gewünschten Systemprompts und Konfigurationen zu erstellen.

      Was mich ja brennend interessiert ist welches Modell du verwendest oder verwenden willst?
      Ich hab in meinem Rechner eine 4060TI mit 16GB VRAM verbaut und schon viele getestet, aber wirklich >brauchbare Ergebnisse hab ich nur mit den großen bekommen die gerade noch so laufen. Von der >Verarbeitungsgeschwindigkeit will ich gar nicht reden.
      Die meisten Smart Home Server werden gar keine Brauchbare GPU haben, also läuft das dann auf der CPU, was >es super Langsam macht.

      Aktuell meist mit llama3.2:latest und gemma3:4b. Allerdings sind grundsätzlich alle Modelle verwendbar. Alles war auf Ollama läuft wird bei Adapterstart in die Datenpunkte geladen. Ich bevorzuge aktuell llama da dies Funktion calling supported.
      Das System läuft auf einem Minisforum UM760 AMD Ryzen 5 7640HS und 32gm Ram in einer Proxmox LXC.
      Wenn das Modell gebraucht wird, wird es in den Ram geladen und nach 10min wieder gestoppt. Je nach Modell wird unterschiedlich Ram benötigt. llama3.2 zb. nur 3gb.
      Eine Antwort auf einen Prompt dauert ab ca. 15sek wenn das Modell bereits geladen ist. CPU Auslastung liegt dann bei ca. 40%
      Ollama läuft auch mit CPUs recht passabel, supportet aber auch diverse GPUs. Noch hab ich es nicht geschafft die in meiner APU integrierte GPU für Ollama Modelle zu verwenden.

      Zwischenzeitlich hatte ich auch bereits sehr gute Ergebnisse: Datenpunkte gesteuert, Geschichte erstellt und erweitert, Berechnungen mehrerer Datenpunkte durchgeführt. Die Antwort erhalte ich je nach Freigabe in den gewünschten Datenpunkt von ioBroker.

      posted in Entwicklung
      B
      bloop
    • RE: Einbindung einer Lokalen AI

      @haselchen
      Ja, der Adapter geht grundsätzlich in die selbe Richtung.
      Hat aber keine Möglichkeit auf historische Daten aus dem ioBroker zuzugreifen.
      Mein Ansatz lag darin, Datenpunkte - ähnlich wie bei InfluxDB - mittels embedding in eine Vectordatenbank zu speichern und somit über RAG den in Ollama laufenden Modellen zur Verfügung zu stellen.

      posted in Entwicklung
      B
      bloop
    • Einbindung einer Lokalen AI

      Liebe Community,

      Ich komme leider nicht von dem Gedanken weck ioBroker mit einer lokalen AI zu erweitern.
      Dies mach natürlich nur dann Sinn, wenn die AI auf aktuelle Datenpunktinformationen sowie Informationen aus einer Datenbank zugreifen kann. Ebenso soll es dem AI Modell auch möglich sein Datenpunkte zu steuern / verändern.

      @Bluefox Ist diesbezüglich etwas vom Kern Entwicklungsteam angedacht?

      Vor einiger Zeit hab ich mich an die Arbeit gemacht, einen entsprechenden Adapter für Ollama zu schreiben. Viele Funktionen funktionieren bereits wie gewünscht und ich habe das Gefühl einem ersten Alphatest schon recht nahe zu sein.

      https://github.com/bloop16/ioBroker.ollama

      Da ich jedoch kein gelernter Entwickler bin, lasse ich das meiste über Vibe Coding schreiben… Dies stellt
      Mich immer wieder vor neue Herausforderungen. Viele Bausteine im eingefügten Code sind oft nicht gewünscht oder entsprechen nicht den eigentlichen Anforderungen. Ob dies nun alles korrekt ist und ich mit der Entwicklung auf dem richtigen Weg bin traue ich mich nicht zu beurteilen.

      Ich wäre Dankbar wenn sich jemand den Adapter ansieht und beurteilt ob mein Projekt gesamt zum Scheitern verurteilt ist oder ob Hoffnung besteht dieses so umzusetzen. Nicht das ich einen komplett falschen Ansatz verfolge. Eventuell erklärt sich auch jemand bereit mir dabei unter die Arme zu greifen.

      Bevor die Frage wieder aufkommt was damit erreicht werden soll. Angedacht wären im ersten Schritt:

      • Sprachassistent
      • Datenanalyse und Berechnung unterschiedlichster Datenpunkte mittels Prompt
      • Datenpunktsteuerung ohne Skript
        uvm.

      All dies natürlich lokal und ohne Informationen an Dritte weiterzugeben.

      Da immer wieder das Thema Ressourcen Verschwendung aufkommt: Sehe ich nicht so!

      1. Sind die meisten Home Server großteils nicht ausgelastet. Somit werden vorhandene, ungenutzte Ressourcen verwendet.
      2. Jedes externe System wie zb. ChatGPT usw. benötigt bei einer Anfrage definitiv mehr Ressourcen.

      Ich war mir jetzt nicht sicher ob dieses Thema besser in die Kategorie Tester oder Entwicklung gehört…

      Danke für euer Feedback!

      posted in Entwicklung
      B
      bloop
    • RE: Vorschlag: RAG System für die Doku

      Passt jetzt nicht ganz hier her, aber ich habe etwas ähnliches in den letzten Tagen für die ioBroker Datenpunkte umgesetzt.

      Das ganze ist noch in einem absoluten Beta Stadium aber der Grundfunktion funktioniert.

      Verwendet habe ich dafür ein local laufendes LLM mit Ollama welches abhängig vom verwendeten Model relativ Ressourcen schonend läuft.

      iobroker2ollama

      Sobald ich hierfür einen herausragenden usecase finde, erstelle ich einen passenden Beitrag dazu. Aktuell wird mehr schlecht als recht über AI Anwendungsmöglichkeiten argumentiert.

      Ich sehe mich nicht als Entwickler und das Code Schreiben zählt nicht zu meine. Kernkompetenzen. Aber AI macht vieles möglich 😉

      posted in Dokumentations-Support
      B
      bloop
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo