Navigation

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

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    B
    • Profile
    • Following 0
    • Followers 0
    • Topics 0
    • Posts 2
    • Best 0
    • Groups 0

    Bombel

    @Bombel

    0
    Reputation
    5
    Profile views
    2
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Bombel Follow

    Latest posts made by Bombel

    • RE: Adapter "smartmeter"

      @lobo @apollon77 Ich schlage mich auch gerade mit dem Wärmemengenzähler T230 von Landis+Gyr rum. Bekomme ihn mit dem Standard nach EN 62056-21:2002 nicht ausgelesen. Habe mir kürzlich mal die App UltraAssist von Landis+Gyr auf mein Smartphone geladen und den Lesekopf mittels OTG-Adapter angeschlossen. Die App schafft es dem Zähler Daten zu entlocken und diese in eine schöne Excel-Datei zu packen. Daraufhin habe ich mir einen zweiten Lesekopf beschafft und diesen dann an den PC angeschlossen. Die beiden Leseköpfe habe ich aneinandergehalten und mittels HTerm ausgelesen, was die App von Landis+Gyr zu Begrüßung sendet. Herausgekommen ist folgendes:

      5cb57cab-6698-40f7-8b26-61719e3d1184-image.png

      Leider weiß ich nicht wie ich die SignOn-Nachricht in diesem Fall zusammenbauen muss. Habe es mit 30 WakeUp-Zeichen und "@p" als SignOn-Nachricht versucht, aber da tut sich leider gar nichts.

      Habe mich schon durch die schöne Google-Welt gekämpft aber keinerlei Dokumentationen zur optischen Schnittstelle diese Zählers gefunden. Vielleicht habt ihr noch einen heißen Typ für mich....Ich wäre euch sehr dankbar.

      Gruß Florian

      21779ba4-29b2-431b-b148-58e509320ae9-image.png

      Log:

      smartmeter.1    2022-01-06 20:49:43.384	warn	No or too long answer from Serial Device after last request.
      smartmeter.1    2022-01-06 20:49:43.383	debug	Error: No or too long answer from Serial Device after last request.
      smartmeter.1    2022-01-06 20:49:43.382	debug	MESSAGE TIMEOUT TRIGGERED
      smartmeter.1    2022-01-06 20:49:13.380	debug	SET MESSAGE TIMEOUT TIMER2: 30000
      smartmeter.1    2022-01-06 20:49:13.379	debug	DONE SEND 0
      smartmeter.1    2022-01-06 20:49:13.127	debug	DONE SEND 1
      smartmeter.1    2022-01-06 20:49:12.996	debug	TO SEND 1: /@p!
      smartmeter.1    2022-01-06 20:49:12.994	debug	CURRENT PROCESS STEP 1 IN GETNEXTMESSAGE
      smartmeter.1    2022-01-06 20:49:12.743	debug	DONE SEND 2
      smartmeter.1    2022-01-06 20:49:11.805	debug	TO SEND 2: 000000000000000000000000000000
      smartmeter.1    2022-01-06 20:49:11.804	debug	CURRENT PROCESS STEP 0 IN GETNEXTMESSAGE
      smartmeter.1    2022-01-06 20:49:11.801	debug	INITIAL MESSAGES TO SEND: 2
      smartmeter.1    2022-01-06 20:49:11.796	debug	SERIALPORT RESET BAUDRATE TO 300
      smartmeter.1    2022-01-06 20:49:11.793	debug	SERIALPORT OPEN
      smartmeter.1    2022-01-06 20:49:11.778	debug	CREATE SERIALPORT: 300 7 1 even
      
      posted in ioBroker Allgemein
      B
      Bombel
    • RE: eigene Visualisierung mit vue.js per socket

      @darth2010 Der Beitrag ist zwar schon etwas älter, aber vielleicht steht die Lösung ja noch aus. Ich habe mich auch mit dem Thema Vue.js auseinander gesetzt und die Verbindung zwischen ioBroker und Vue.js via socket.io zum Laufen bekommen. Meine Vue.js Visualisierung ist aktuell noch im Versuchs- und Aufbaustadium...

      ioBroker_Vuejs_Heizung.png

      Zunächst habe ich eine JS Datei mit dem Namen "ioBroker.js" erstellt in der ich die conn.js initialisiere.

      import servConn from "@/services/conn.js";
      import store from "@/store/index.js";
      
      export default {
        connect: function(baseURL) {
          servConn.namespace = "vis.0";
          servConn._useStorage = false;
          servConn.init(
            {
              name: "vis.0", // optional - default 'vis.0'
              connLink: baseURL, // optional URL of the socket.io adapter
              socketSession: "" // optional - used by authentication
            },
            {
              onConnChange: function(isConnected) {
                if (isConnected) {
                  console.log("connected");
                  servConn.getStates(function(err, _states) {
                    if (!err) {
                      store.dispatch("ioBrokerInit", _states);
                      console.log("ioBroker Initalisierung erfolgreich!");
                    } else {
                      console.log("ioBroker Initalisierung fehlgeschlagen!");
                    }
                  });
                } else {
                  console.log("disconnected");
                }
              },
              onUpdate: function(id, state) {
                setTimeout(function() {
                  var ioBrokerID = "";
                  var ioBrokerState = {};
                  ioBrokerID = id;
                  ioBrokerState = state;
                  store.dispatch("ioBrokerUpdate", { ioBrokerID, ioBrokerState });
                }, 0);
              }
            }
          );
        },
      
        setState: function(id, val) {
          servConn.setState(id, val);
        }
      };
      
      

      Bei der Initialisierung werden zunächst alle Objekte aus ioBroker als State im Store (vuex) angelegt (onConnChange). Im anschließenden Verlauf werden die States dann immer bei Änderung aktualisiert (onUpdate).

      Die Initialisierung an sich stoße ich in der app.vue an:

      <script>
      import ioBroker from "@/services/ioBroker.js";
      
      const baseURL = "http://192.168.xxx.yyy:8084";
      
      export default {
        data() {
          return {  };
        },
      
        methods: {
          ioBrokerConnect: function() {
            this.$loadScript(baseURL + "/socket.io/socket.io.js")
              .then(() => {
                console.log("Verbunden");
                ioBroker.connect(baseURL);
              })
              .catch(() => {
                console.log("Nicht Verbunden");
              });
          }
        },
      
        created() {
          this.ioBrokerConnect();
        },
      
        beforeDestroy() {
          this.$unloadScript(this.baseURL + "/socket.io/socket.io.js");
        }
      };
      </script>
      

      Um die Verbindung herzustellen habe ich das "LoadScript-Plugin" installiert.

      Hier noch mein Store:

      import Vue from "vue";
      import Vuex from "vuex";
      // modules
      import * as homematic from "./modules/homematic.js";
      //import ioBroker from "@/services/ioBroker.js";
      
      Vue.use(Vuex);
      
      export default new Vuex.Store({
        // ------------------------------------------------------------------------------------------------------
        //    MODULES
        // ------------------------------------------------------------------------------------------------------
        modules: { homematic },
      
        // ------------------------------------------------------------------------------------------------------
        //    STATE
        // ------------------------------------------------------------------------------------------------------
        state: {
          ioBroker: {
            states: [],
            Heizung: { out: { PumpeEin: false, VentilAuf: false, VentilZu: false } },
            config: {
              isDataFetched: false
            }
          }
        },
      
        // ------------------------------------------------------------------------------------------------------
        //    ACTIONS
        // ------------------------------------------------------------------------------------------------------
        actions: {
          // States von ioBroker im Store aktualisieren
          ioBrokerUpdate({ commit }, { ioBrokerID, ioBrokerState }) {
            commit("IOBROKER_UPDATE", { ioBrokerID, ioBrokerState });
            commit("IOBROKER_MOD");
          },
      
          // Beim Laden alle States einmal einlesen
          ioBrokerInit({ commit }, ioBrokerStates) {
            commit("IOBROKER_INIT", ioBrokerStates);
            commit("IOBROKER_MOD");
          },
          // States an ioBroker senden
          ioBrokerSetState({ commit }, { ioBrokerID, ioBrokerState }) {
            commit("IOBROKER_SETSTATE", { ioBrokerID, ioBrokerState });
          }
        },
      
        // ------------------------------------------------------------------------------------------------------
        //    MUTATIONS
        // ------------------------------------------------------------------------------------------------------
        mutations: {
          // States von ioBroker im Store aktualisieren
          IOBROKER_UPDATE(state, { ioBrokerID, ioBrokerState }) {
            state.ioBroker.states[ioBrokerID] = ioBrokerState;
          },
      
          // States von ioBroker im Store aktualisieren
          IOBROKER_INIT(state, ioBrokerStates) {
            state.ioBroker.states = ioBrokerStates;
            state.ioBroker.config.isDataFetched = true;
          },
      
          // Spezifische ioBroker State-Modifikationen
          IOBROKER_MOD(state) {
            var TempState =
              state.ioBroker.states["modbus.0.inputRegisters.3998_Heizung_Ausgaenge"];
            state.ioBroker.Heizung.out.VentilAuf = (TempState.val & 1) == 1;
            state.ioBroker.Heizung.out.VentilZu = (TempState.val & 2) == 2;
            state.ioBroker.Heizung.out.PumpeEin = (TempState.val & 64) == 64;
          }
        },
      
        // ------------------------------------------------------------------------------------------------------
        //    GETTERS
        // ------------------------------------------------------------------------------------------------------
        getters: {
          GETioBroker: state => ioBrokerID => {
            return state.ioBroker.states[ioBrokerID];
          },
      
          HomematicDevice: state => HMdevice => {
            for (var i = 0; i <= state.homematic.devices.length; i++) {
              if (state.homematic.devices[i].name == HMdevice) {
                return state.homematic.devices[i];
              }
            }
          }
        }
      });
      

      Meine conn.js Datei. Diese musste auch noch etwas angepasst werden.

      Ich hoffe die Beschreibung hilft etwas beim Anbinden deiner Vue.js Instanz. Bei mir läuft das ganze bisher ohne Probleme. Leider bin ich kein Profi und habe mir das ganze per Selbststudium versucht beizubringen. Bitte geht bei Fehlern nicht zu hart mit mir ins Gericht 😉

      Gruß Florian

      posted in Visualisierung
      B
      Bombel
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo