Navigation

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

    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

    S
    • Profile
    • Following 0
    • Followers 3
    • Topics 34
    • Posts 1097
    • Best 83
    • Groups 4

    Sneak-L8

    @Sneak-L8

    90
    Reputation
    176
    Profile views
    1097
    Posts
    3
    Followers
    0
    Following
    Joined Last Online
    Location Nordbaden

    Sneak-L8 Follow
    Developer Pro Starter Most Active

    Best posts made by Sneak-L8

    • Weiterentwicklung Yamaha-Adapter

      Hallo zusammen,

      nachdem ich nun einen RX-S601D mein eigen nenne, habe ich mich mal dem Yamaha-Adapter (also nicht MusicCast, wobei er auch mit MusicCast-Geräten funktioniert) angenommen und ein paar Dinge, die als Issue in guthub vermerkt waren korrigiert.
      Außerdem tut nun toggleMute das, was man vermutet: er schaltet Mute ein und aus.
      Eine aktuelle Version 0.4.1 steht bereits bei github, wer es testen möchte....

      Viele Grüße
      Sneak-L8

      posted in ioBroker Allgemein
      S
      Sneak-L8
    • Skript zum Abfragen von VW-CarNet

      Hallo zusammen,

      ich habe mal das PythonSkript: https://github.com/wez3/volkswagen-carn … net_web.py auf JavaScript für ioBroker portiert, so dass man sich verschiedene Werte aus dem CarNet als States in ioBroker speichern lassen kann:

      ! ````
      /* Skript zum Abragen des Status im Car-Net von Volkswagen
      ** V1.0.0 - 03.06.2018 - initiale Version (02.07.2018 fertiggestellt)
      ** V1.0.1 - 03.07.2018 - Wenn Location leer, dann Info in Adresse stellen
      ** - Längen-/Breitengrad mit °= 0 anstelle > 0 abfragen
      /
      ! var request = require('request');
      ! var base = "https://www.volkswagen-car-net.com";
      var authbase = "https://security.volkswagen.com";
      var csrf = "";
      var refUrl = "";
      var viewState = "";
      var cookieJar = null;
      var urlHeader = null;
      var code = "";
      var state = "";
      var unterwegs = "unterwegs - zuletzt:";
      var email = "
      "; // User Car-Net-Account
      var password = "
      "; // Passwort Car-Net-Account
      var mapsApiKey= ""; // API-Key für Google Maps Platform (noch optional)
      var errCount = 0; // Anzahl zulässige Fehler bis Mail verschickt wird
      var defaultHeader = {
      'Accept': 'application/json, text/plain, /',
      'Content-Type': 'application/json;charset=UTF-8',
      'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0.1; D5803 Build/23.5.A.1.291; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.111 Mobile Safari/537.36'
      };
      var stateBatterieProz = "emanager.batteryPercentage";
      var stateLadevorgang = "emanager.chargingState";
      var stateLadedauer = "emanager.chargingRemaining";
      var stateReichweite = "emanager.electricRange";
      var stateMinLadung = "emanager.minChargeLimit";
      var stateletzteVerb = "vehicle.lastConnectionTimeStamp";
      var stateGesamtKm = "vehicle.distanceCovered";
      var stateReichweiteV = "vehicle.range";
      var stateServiceTermin= "vehicle.serviceInspectionData";
      var statePosBreite = "location.lat";
      var statePosLaenge = "location.lng";
      var statePosAdresse = "location.address";
      ! createState(stateBatterieProz, -1, {
      read: true,
      write: false,
      name: "Ladezustand der Hauptbatterie in 10%-Schritten",
      type: "number",
      unit: "%",
      def: -1
      });
      ! createState(stateLadevorgang, null, {
      read: true,
      write: false,
      name: "Zustand des Ladevorgangs",
      type: "string",
      unit: "",
      def: null
      });
      ! createState(stateLadedauer, null, {
      read: true,
      write: false,
      name: "Verbleibende Ladedauer bis 100% SoC",
      type: "string",
      //role: "datetime",
      def: null
      });
      ! createState(stateReichweite, -1, {
      read: true,
      write: false,
      name: "Elektrische Reichweite mit aktuellem Batteriestand",
      type: "number",
      unit: "km",
      def: -1
      });
      ! createState(stateMinLadung, -1, {
      read: true,
      write: false,
      name: "Mindest-SoC bei Ladevorgang",
      type: "number",
      unit: "%",
      def: -1
      });
      ! createState(stateletzteVerb, null, {
      read: true,
      write: false,
      name: "Zeitpunkt der letzten Verbindung zum Fahrzeug",
      type: "string", // "number",
      role: "datetime",
      def: null
      });
      ! createState(stateGesamtKm, -1, {
      read: true,
      write: false,
      name: "Gesamt-Kilomater-Stand",
      type: "number",
      unit: "km",
      def: -1
      });
      ! createState(stateReichweiteV, -1, {
      read: true,
      write: false,
      name: "Reichweite des Fahrzeugs",
      type: "number",
      unit: "km",
      def: -1
      });
      ! createState(stateServiceTermin, null, {
      read: true,
      write: false,
      name: "Nächster Service-Termin",
      type: "string",
      def: null
      });
      ! createState(statePosBreite, 0, {
      read: true,
      write: false,
      name: "Breitengrad der Position des Fahrzeugs",
      type: "number",
      def: 0
      });
      ! createState(statePosLaenge, 0, {
      read: true,
      write: false,
      name: "Längengrad der Position des Fahrzeugs",
      type: "number",
      def: 0
      });
      ! createState(statePosAdresse, null, {
      read: true,
      write: false,
      name: "Anschrift der Position des Fahrzeugs",
      type: "string",
      def: null
      });
      ! function carNet_error(meldung, typ) {
      if (typ === undefined)
      typ = "";
      ! var sendMail = true;
      log('CarNet: ' + meldung, 'error');
      if (typ == "main") {
      errCount ++;
      if (errCount < 3)
      sendMail = false;
      }
      if (sendMail)
      sendTo("email", {
      subject: "FEHLER bei CarNet-Verarbeitung",
      text: meldung
      });
      }
      ! function getPartOfSite(content, startTag, endTag, startOffset) {
      if (startOffset === undefined)
      startOffset = 0;
      var pos = content.indexOf(startTag, startOffset);
      if (pos >= 0) {
      pos += startTag.length;
      var pos2 = content.indexOf(endTag, pos +1);
      if (pos2 >= 0) {
      return {
      found: true,
      value: content.substring(pos, pos2).trim(),
      start: pos,
      end: pos2,
      cutter: pos2 + endTag.length
      };
      }
      }
      return null;
      }
      ! function get_csrf(body) {
      var data = getPartOfSite(body, '');
      if (data === null) {
      carNet_error('Kein Token für Login gefunden\n' + body);
      return "";
      }
      return data.value;
      }
      ! function get_loginUrl(body) {
      var data = getPartOfSite(body, '"path":"', '"');
      if (data === null) {
      carNet_error('Keine Login-URL gefunden\n' + body);
      return "";
      }
      return data.value;
      }
      ! function get_viewState(body) {
      var data = getPartOfSite(body, 'name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="', '"');
      if (data === null) {
      carNet_error('Keinen Viewstate für Login gefunden\n' + body);
      return "";
      }
      return data.value.replace(/\x3a/g, ":").replace(/\x2f/g, "/").replace(/\x2e/g, ".");
      }
      ! function get_redirectUrl(body) {
      var data = getPartOfSite(body, '');
      if (data === null) {
      carNet_error('Keine Redirect-URL nach Login gefunden\n' + body);
      return "";
      }
      return data.value.replace('&', '&');
      }
      ! function get_code(body) {
      var data = getPartOfSite(body, 'code=', '&');
      if (data === null) {
      carNet_error('Keinen Code nach Login gefunden\n' + body);
      return "";
      }
      return data.value;
      }
      ! function get_state(body) {
      // Hier indexOf anstelle getPartOfsite, weil es keinen EndeString gibt
      var pos = body.indexOf('state=');
      if (pos < 0) {
      carNet_error('Keinen State nach Login gefunden\n' + body);
      return "";
      }
      return body.substr(pos + 6);
      }
      ! function get_newUrl(url) {
      var data = getPartOfSite(url, '/', '?', 10);
      if (data === null) {
      carNet_error('Konnte keinen Path aus URL ' + url + ' extrahieren');
      return "";
      }
      return base + '/' + data.value + '?p_auth=' + state + '&p_p_id=33_WAR_cored5portlet&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_33_WAR_cored5portlet_javax.portlet.action=getLoginStatus';
      }
      ! function get_request(url, mayRedirect, forms, doJSON) {
      var options = {
      url: url,
      jar: cookieJar
      };
      if (urlHeader !== null)
      options.headers = urlHeader;
      if (mayRedirect === undefined || mayRedirect === null)
      mayRedirect = true;
      if (! mayRedirect)
      options.followRedirect = function (resp) { return false; };
      if (forms !== undefined)
      options.form = forms;
      if (doJSON === undefined || doJSON === null)
      doJSON = false;
      if (doJSON)
      options.json = true;
      return options;
      }
      ! function isAbrufOk(oper, err, stat, body) {
      if (err)
      carNet_error('Fehler "' + err + '" beim ' + oper);
      else if(body) {
      return true;
      } else
      carNet_error("Kein Inhalt bei " + oper + " (Status " + stat.statusCode + ")");
      return false;
      }
      ! function isRedirectOk(oper, err, stat, body) {
      if (err)
      carNet_error('Fehler "' + err + '" beim ' + oper);
      else if(stat.statusCode == 302) {
      return true;
      } else
      carNet_error(oper + " ist keine Weiterleitung (Status " + stat.statusCode + "): " + body);
      return false;
      }
      ! function carNet_login() {
      csrf = "";
      refUrl = "";
      viewState = "";
      cookieJar = request.jar();
      urlHeader = null;
      code = "";
      state = "";
      //request(base + '/portal/en_GB/web/guest/home', process_login1);
      request(get_request(base + '/portal/en_GB/web/guest/home'), process_login1);
      }
      ! function process_login1(err, stat, body) {
      if (isAbrufOk("Login-Seite", err, stat, body)) {
      urlHeader = {
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,
      /*;q=0.8',
      'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0.1; D5803 Build/23.5.A.1.291; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.111 Mobile Safari/537.36',
      'Referer': base + '/portal'
      };
      var detailsUrl = stat.request.uri.href;
      csrf = get_csrf(body);
      if (csrf === "")
      return;
      //console.log("Session = " + csrf);
      request(get_request(base + "/portal/web/guest/home/-/csrftokenhandling/get-login-url"), process_login2);
      }
      }

      function process_login2(err, stat, body) {
      if (isAbrufOk("Login-Seite 2", err, stat, body)) {
      var loginUrl = get_loginUrl(body);
      if (loginUrl === "")
      return;
      //console.log('Login-URL: ' + loginUrl);
      request.get(get_request(loginUrl, false), process_login3);
      }
      }

      function process_login3(err, stat, body) {
      if (isRedirectOk("Login-Setie 3", err, stat, body)) {
      refUrl = stat.headers.location;
      if (refUrl === "") {
      carNet_error("Keine Location für Redirect gefunden");
      return;
      }
      //console.log('refURL: ' + refUrl);
      request.get(get_request(refUrl), process_login4);
      }
      }

      function process_login4(err, stat, body) {
      if (isAbrufOk("Login-Setie 4", err, stat, body)) {
      viewState = get_viewState(body);
      if (viewState === "")
      return;
      //console.log('ViewState = ' + viewState);
      var formData = {
      'loginForm': 'loginForm',
      'loginForm:email': email,
      'loginForm:password': password,
      'loginForm:j_idt19': '',
      'javax.faces.ViewState': viewState,
      'javax.faces.source': 'loginForm:submit',
      'javax.faces.partial.event': 'click',
      'javax.faces.partial.execute': 'loginForm:submit loginForm',
      'javax.faces.partial.render': 'loginForm',
      'javax.faces.behavior.event': 'action',
      'javax.faces.partial.ajax': 'true'
      };
      // AuthHeader aktualisieren
      urlHeader['Faces-Request'] = 'partial/ajax';
      urlHeader.Referer = refUrl;
      urlHeader['X-CSRF-Token'] = '';
      request.post(get_request(authbase + '/ap-login/jsf/login.jsf', null, formData), process_login5);
      }
      }

      function process_login5(err, stat, body) {
      if (isAbrufOk("Login-Seite 5", err, stat, body)) {
      //console.log('Status = ' + stat.statusCode);
      var redirectUrl = get_redirectUrl(body);
      if (redirectUrl === "")
      return;
      request.get(get_request(redirectUrl, false), process_login6);
      }
      }

      function process_login6(err, stat, body) {
      if (isRedirectOk("Login-Seite 6", err, stat, body)) {
      var redirectUrl2 = stat.headers.location;
      if (redirectUrl2 === "") {
      carNet_error("Keine Location für Redirect2 gefunden");
      return;
      }
      code = get_code(redirectUrl2);
      if (code === "")
      return;
      state = get_state(redirectUrl2);
      if (state === "")
      return;
      //console.log('redirectUrl2: ' + redirectUrl2 + ', code = ' + code + ', state = ' + state);
      request.get(get_request(redirectUrl2), process_login7);
      }
      }

      function process_login7(err, stat, body) {
      if (isAbrufOk("Login-Seite 7", err, stat,body)) {
      //console.log('Status = ' + stat.statusCode);
      urlHeader['Faces-Request'] = '';
      urlHeader.Referer = stat.request.uri.href;
      var post_data = {
      '_33_WAR_cored5portlet_code': code,
      '_33_WAR_cored5portlet_landingPageUrl': ''
      }
      var newUrl = get_newUrl(urlHeader.Referer);
      if (newUrl === "")
      return;
      //console.log('newUrl = ' + newUrl);
      request.post(get_request(newUrl , false, post_data), process_login8);
      }
      }

      function process_login8(err, stat, body) {
      if (isRedirectOk("Login-Seite 8", err, stat,body)) {
      var redirectUrl3 = stat.headers.location;
      if (redirectUrl3 === "") {
      carNet_error("Keine Location für Redirect3 gefunden");
      return;
      }
      request.get(get_request(redirectUrl3), process_login9);
      }
      }

      function process_login9(err, stat, body) {
      if (isAbrufOk("Login-Seite 9", err, stat, body)) {
      //console.log('Status = ' + stat.statusCode);
      csrf = get_csrf(body);
      if (csrf === "")
      return;
      //console.log('neuer csrf = ' + csrf);
      urlHeader = defaultHeader;
      urlHeader.Referer = stat.request.uri.href;
      urlHeader['X-CSRF-Token'] = csrf;
      //request.post(get_request(stat.request.uri.href + '/-/msgc/get-new-messages', null, null, true), process_messages);
      //request.post(get_request(stat.request.uri.href + '/-/vsr/request-vsr', null, null, true), process_vsr);
      //request.post(get_request(stat.request.uri.href + '/-/vsr/get-vsr', null, null, true), process_vsr2);
      request.post(get_request(stat.request.uri.href + '/-/cf/get-location', null, null, true), process_location);
      request.post(get_request(stat.request.uri.href + '/-/vehicle-info/get-vehicle-details', null, null, true), process_vehicleDetails);
      request.post(get_request(stat.request.uri.href + '/-/emanager/get-emanager', null, null, true), process_emanager);
      }
      }

      function process_messages(err, stat, body) {
      if (isAbrufOk("Messages", err, stat, body)) {
      //console.log('Status = ' + stat.statusCode);
      console.log('Messages = ' + JSON.stringify(body));
      }
      }

      function process_vsr(err, stat, body) {
      if (isAbrufOk("Get VSR", err, stat, body)) {
      //console.log('Status = ' + stat.statusCode);
      console.log('Get VSR = ' + JSON.stringify(body));
      }
      }

      function process_vsr2(err, stat, body) {
      if (isAbrufOk("Process VSR", err, stat, body)) {
      //console.log('Status = ' + stat.statusCode);
      console.log('Process VSR = ' + JSON.stringify(body));
      }
      }

      function process_location(err, stat, body) {
      if (isAbrufOk("Location", err, stat, body)) {
      //console.log('Status = ' + stat.statusCode);
      //console.log('Location = ' + JSON.stringify(body));
      //var data = body; // JSON.parse(body);
      if (body.errorCode != 0)
      carNet_error('Fehler ' + body.errorCode + ' beim Abruf Positions-Daten: ' + JSON.stringify(body));
      else {
      var posStatus = body.position;
      if (posStatus !== undefined && posStatus !== null) {
      if ((posStatus.lat != 0) && (posStatus.lng != 0)) {
      setState(statePosBreite, posStatus.lat, true);
      setState(statePosLaenge, posStatus.lng, true);
      requestGeocoding(posStatus.lat, posStatus.lng);
      }
      } else
      if (getState(statePosAdresse).val.substr(0, unterwegs.length) != unterwegs)
      setState(statePosAdresse, unterwegs + ' ' + getState(statePosAdresse).val, true);
      }
      }
      }

      function process_vehicleDetails(err, stat, body) {
      if (isAbrufOk("Vehicle Details", err, stat, body)) {
      //console.log('Status = ' + stat.statusCode);
      //console.log('Vehicle Details = ' + JSON.stringify(body));
      if (body.errorCode != 0)
      carNet_error('Fehler ' + body.errorCode + ' beim Abruf Fahrzeug-Daten: ' + JSON.stringify(body));
      else {
      var vehStatus = body.vehicleDetails;
      if (vehStatus !== undefined && vehStatus !== null) {
      if (vehStatus.lastConnectionTimeStamp.length > 0) {
      var datum = vehStatus.lastConnectionTimeStamp[0];
      // tt.mm.jjjj zu jjjj-mm-tt drehen
      datum = datum.substr(6, 4) + '-' + datum.substr(3, 2) + '-' + datum.substr(0, 2);
      datum = datum + " " + vehStatus.lastConnectionTimeStamp[1]
      //setState(stateletzteVerb, datum, true);
      var x = new Date(datum);
      setState(stateletzteVerb, x, true);
      //console.log("Timestamp: " + datum + '=>' + x);
      }
      if (vehStatus.distanceCovered > 0)
      setState(stateGesamtKm, parseInt(vehStatus.distanceCovered.replace('.', "")), true);
      if (vehStatus.range > 0)
      setState(stateReichweiteV, parseInt(vehStatus.range), true);
      if (vehStatus.serviceInspectionData !== "")
      setState(stateServiceTermin, vehStatus.serviceInspectionData, true);
      }
      }
      }
      }

      function process_emanager(err, stat, body) {
      if (isAbrufOk("eManager-Daten", err, stat, body)) {
      //console.log('Status = ' + stat.statusCode);
      //console.log('eManager = ' + JSON.stringify(body));
      if (body.errorCode != 0)
      carNet_error('Fehler ' + body.errorCode + ' beim Abruf eManager-Daten: ' + JSON.stringify(body));
      else {
      var ladeStatus = body.EManager.rbc.status;
      if (ladeStatus !== undefined && ladeStatus !== null) {
      setState(stateBatterieProz, ladeStatus.batteryPercentage, true);
      //console.log('Ladestand: ' + ladeStatus.batteryPercentage + "%");
      setState(stateLadevorgang, ladeStatus.chargingState, true);
      //console.log('Ladevorgang: ' + ladeStatus.chargingState);
      if (ladeStatus.chargingRemaningHour > 0 || ladeStatus.chargingRemaningMinute > 0)
      setState(stateLadedauer, ladeStatus.chargingRemaningHour + ":" + ladeStatus.chargingRemaningMinute, true);
      else
      setState(stateLadedauer, "", true);
      //console.log('Verbl. Ladedauer: ' + ladeStatus.chargingRemaningHour + "h " + ladeStatus.chargingRemaningMinute + "min");
      setState(stateReichweite, ladeStatus.electricRange, true);
      //console.log('Reichweite: ' + ladeStatus.electricRange + "km");
      }
      setState(stateMinLadung, body.EManager.rdt.settings.minChargeLimit, true);
      //console.log('Mindestladung: ' + body.EManager.rdt.settings.minChargeLimit + "%");
      }
      }
      }

      ! function process_geocoding(err, stat, body) {
      if (isAbrufOk("Geocoding", err, stat, body)) {
      //console.log('Status = ' + stat.statusCode);
      //console.log('Location = ' + JSON.stringify(body));
      //var data = body; // JSON.parse(body);
      if (body.status != "OK")
      //carNet_error('Fehler ' + body.status + '/' + body.error_message + ' beim Abruf Geocoding: ' + JSON.stringify(body));
      log('Fehler ' + body.status + '/' + body.error_message + ' beim Abruf Geocoding: ' + JSON.stringify(body), 'error');
      else {
      var address = "<unbekannt>";
      if ((body.results.length> 0) & body.results[0].formatted_address !== "")
      address = body.results[0].formatted_address;
      setState(statePosAdresse, address, true);
      }
      }
      }

      function requestGeocoding(lat, lng) {
      var url = 'https://maps.googleapis.com/maps/api/geocode/json?latlng='+lat+','+lng;
      if (mapsApiKey !== "")
      url = url + '&key=' + mapsApiKey;
      //console.log("Geocoding-URL: " + url)
      request({
      url: url,
      headers: defaultHeader,
      json: true
      }, process_geocoding);
      }

      function doRequest() {
      carNet_login();
      }

      ! doRequest(); // einmal gleich losstarten
      schedule("*/30 * * * *", doRequest);</unbekannt>

      
      Die Benachrichtigung bei Fehlern per Mail kann man natürlcih auch rauswerfen und User und Passwort Eures Accounts müsst Ihr selbst eintragen.
      
      Ab und an bekomme ich noch den Fehler, dass ich die Abfrage "over quota" ausführe, aber insgesamt klappt das schon ganz gut.
      
      Kommentare, Verbesserungswünsche, … nur zu :-)
      
      Viele Grüße
      
      Sneak-L8
      posted in Praktische Anwendungen (Showcase)
      S
      Sneak-L8
    • Test Adapter kecontact v1.0.x GitHub/Latest
      Aktuelle Test Version 1.0.1
      Veröffentlichungsdatum 03.09.2020
      Github Link https://github.com/iobroker-community-adapters/ioBroker.kecontact

      Adapter für die KeContact Wallbox von Keba zur Aufladung eines E-Autos.

      Unterstützt die überschussabhängige Ladung sowie Gesamtlast-Begrenzung.
      Dazu könenn verschiedene Parameter wie Mindestladedauer, Toleranz beim Netzbezug etc. eingestellt werden. Außerdem kann auch manuell auf "maximale Ladeleitung" gewechselt werden.
      Wallbox kann aber auch passiv betrieben werden, dann reicht der Adapter nur die States an die Wallbox durch.
      Weitere Details in der Readme des Adapters.

      posted in Tester
      S
      Sneak-L8
    • RE: Sammlung Informationen Wallbox & ioBroker-Integration

      @babl Wenn ich mir die Beschreibung der BMW wallbox plus anschaue, dann ähnelt der Text sehr der Beschreibung von Keba. Könnte also durchaus eine Keba sein. War am Anfang sehr skeptisch, weil sie optisch so völlig anders aussieht und man auch die Grundzüge der Box nicht wiedererkennt.
      So, uns ein bisschen ggoglen fördert folgenden Link Artikel zutage. Damit sollte die klare Antwort "JA" sein.

      posted in ioBroker Allgemein
      S
      Sneak-L8
    • RE: Keba kecontact - von Überschussladen auf Laden stellen?

      @stefan-falt Das ist ok, dass diese Werte rot bleiben, sie wurden bisher vermutlich noch nicht genutzt.

      Wenn der display-Eintrag jetzt grün wird, klingt das nach erfolgreicher Kommunikation. Hast Du die Keba dann parallel über UDP und Modbus angesteuert? das könnte problematisch sein. Sie reagiert m.W. immer nur einen Absender...

      So, und im Log habe ich wohl den entscheidenen Hinweis gefunden. Starting in passive mode.
      Dann sind alle Komfortfunktionen deaktiviert. Also kein limitCurrent, kein pauseWallbox etc.
      Mach in den Einstellungen mal den passiv-Haken weg...

      posted in Automatisierung
      S
      Sneak-L8
    • RE: Skript zum Abfragen von VW-CarNet

      Zusammen mit Ralf69 wird der Adapter gerade weiterentwickelt. Dann kann man die automatische Aktualisierung der Fahrzeugdaten auch direkt im Adapter einstellen und muss dafür kein Skript erstellen. Außerdem wird die Verfügbarkeit der einzelnen Services in States dokumentiert und nur Daten abgerufen, deren Service nicht abgelaufen ist.

      posted in Praktische Anwendungen (Showcase)
      S
      Sneak-L8
    • RE: Sammlung Informationen Wallbox & ioBroker-Integration

      @darkiop sagte in Sammlung Informationen Wallbox & ioBroker-Integration:

      Noch eine technische Frage: Die genannten Wallboxen können alle bis zu 22kW - kann ich die dauerhaft mit 11kW betreiben/anschließen lassen um dem Thema Anmeldung beim Netzbetreiber / zusätzlicher Zähler aus dem Weg zu gehen?

      Ja, die Keba kann man per DIP-Schalter dauerhaft z.B. auf 3x 16 A (11 kW) begrenzen. Ich hab meine für 22 kW genehmigen lassen. Ein extra Zähler ist dafür nicht notwendig (die Keba c-Series hat übrigens bereits einen Stromzähler und einen FI verbaut). Solarteur und Stadtwerke taten sich aber sehr schwer bei der Genehmigung. War für beide wohl ein Erstlingswerk ... Durfte die Wallbox aber auch schon vor Genehmiging benutzen.

      posted in ioBroker Allgemein
      S
      Sneak-L8
    • RE: Keba kecontact - von Überschussladen auf Laden stellen?

      @stefan-falt Beim Log musst Du die Instanz des keba-Adapters auf Debug stellen (oben das Icon mit der Schutzhaube anklicken) und dann die Instanz aufklappen und das Loglevel anklicken. Du kannst "ohne Neustart" auswählen, dann muss der Adapter dazu nicht neu gestartet werden.
      Sonst sehe och da zu wenig.

      Mir scheinen aber ein paar werte komisch. Z.B. sind die von Dir gesetzten werte rot und nicht grün. D.h. sie wurden vom Adapter nicht bestätigt. Schreib mal was in den State display rein (z.B. Hallo) und schau, ob der Text auf der Keba eingeblendet wird und der Text in ioBroekr grün wird.
      Falls nein, scheint mir die Kommunikation gestört zu sein.
      Komisch auch, dass die Ladespannung bei Dir nur 219V beträgt und auf den anderen beidne Phasen jeweils 1V detektiert wird.

      Neuste Version von github ist installiert?

      posted in Automatisierung
      S
      Sneak-L8
    • RE: Skript zum Abfragen von VW-CarNet

      Bei github geht die Entwicklung des Adapters in großen Schritten weiter. Ralf69 hat jetzt auch schon die Aktivierung/Deaktivierung der Klimatisierung etc. drin.
      Das ist ein recht guter und stabiler Adapter geworden...

      posted in Praktische Anwendungen (Showcase)
      S
      Sneak-L8
    • RE: Netatmo Adapter aktualisiert nicht mehr

      @bergjet Bei mir aktualisiert der Adapter weiterhin. Aber ich dachte zunächst auch, dass er das nicht mehr tut, weil mein Mini-Display immer dieselben außentemperaturen anzeigte.
      Beim Blick in die Objects habe ich gesehen, dass der Channel für das Gerät einen neuen Namen hat. Es scheint der Name des ersten Raumen in Klammern hinzugefügt worden zu sein.
      Schau doch mal im ioBroker-Admin im Register Objekte, ob unter netatmo.0 ein neuer Channel dazugekommen ist, unter dem jetzt alle Werte zu finden sind. Da der alte nicht gelöscht wird, zeigt er munter die alten Werte. Da siehst Du auch, dass die Werte seit dem Update nicht mehr verändert wurden.

      posted in ioBroker Allgemein
      S
      Sneak-L8

    Latest posts made by Sneak-L8

    • RE: [Frage] Realisierung Adapter UDP Keba Wallbox

      @rolf-sauer Danke für das Log. Evtl. solltest Du es überarbeiten, damit Deine beiden E-Mail-Adressen nicht mehr drinstehen. Am besten künftig vorne den Filter auf kecontact.0 stellen, dann sieht man die Logeinträge Deiner anderen Adapter nicht.

      Ich sehe im Log, dass es Dir um 17:07 Uhr gelungen ist, den Ladevorgang zu starten. Dann gehst du mal von 16A auf 6A runter und später wieder auf 16A rauf. Aber das Log endet bereits um 17:13 Uhr. Bis dahin sehe ich auch keinen Ladeabbruch.
      Wenn der Ladevorgang nach 10 Minuten abbricht, dann bräuchte ich schon ein Log, das bis dahin reicht...

      posted in ioBroker Allgemein
      S
      Sneak-L8
    • RE: [Frage] Realisierung Adapter UDP Keba Wallbox

      @rolf-sauer Kein Ding. Ok, dann lass es uns mal näher ansehen.

      • Du machst nichts, die Wallbox springt von ganz alleine auf blau?
      • Das heißt, wenn du erst ansteckst und dann freigibst, dann ist immer nach 10 Minuten Schluss? Wenn Du erst freigibst und dann ansteckst, dann lädt das Auto, solange die Automatik (bzw. der PV-Überschuss) will?
      • Im Passiv-Modus ist es egal, das Auto wird immer geladen? Da musst Du Dich aber auch an Wallbox autorisieren? Und es ist egal, ob er Anstecken und dann Autorisieren oder umgekehrt?
      • Wie startest Du da die Ladung? Einfach einstecken oder sendest Du Kommandos an die Wallbox (über die States im ioBroker) , um das Laden zu starten?

      Kannst Du mal das Debug-Log aktivieren, dann nochmal Anstecken und Autorisieren, gute 10 Minuten warten, bis der Ladevorgang endet und dann das Log hier posten?
      Ohne Log habe ich keine Idee, was da passiert.

      posted in ioBroker Allgemein
      S
      Sneak-L8
    • RE: [Frage] Realisierung Adapter UDP Keba Wallbox

      @rolf-sauer Sorry, war etwas viel los bei mir in der letzten Zeit.
      Kannst Du nochmal beschreiben, welche Schritte Du machst und wie sich die alte und die neue Version in jedem Schritt verhalten? Bei @gto scheint es ja ein Problem des Fahrzeugs zu sein. War in der Zeit evtl. auch ein Software-update am Auto?

      posted in ioBroker Allgemein
      S
      Sneak-L8
    • RE: [Frage] Realisierung Adapter UDP Keba Wallbox

      @rolf-sauer Hast du mal die github-Version des Adapters versucht? Geht es damit wieder?
      (Installation => im ioBroker oben in der Leiste das Icon mit der Sturmhaube anklicken (erweiterter Modus). Dann das Katzensymbol und im Reiter git "kecontact" eingeben)

      posted in ioBroker Allgemein
      S
      Sneak-L8
    • RE: Test Adapter VW Connect für VW, ID, Audi, Seat, Skoda

      @paradoxe-situation lies mal die 2. Meldung, die Du gepostet hast.
      Einmal selbst bei VW einloggen und die neuen Bestimmungen abnicken.
      Heute ist mal wieder so ein Tag, wo das nötig ist.

      posted in Tester
      S
      Sneak-L8
    • RE: [Frage] Realisierung Adapter UDP Keba Wallbox

      @gto Hm, komisch, die Logs gaben dir aber recht. Schicke gerne noch mal einen Auszug des Logs, wenn das Auto angesteckt und autorisiert ist, bis er die Minute mal geladen hat.

      posted in ioBroker Allgemein
      S
      Sneak-L8
    • RE: [Frage] Realisierung Adapter UDP Keba Wallbox

      @fernetmenta Das sehe ich auch so.
      Wie oben geschrieben, ich sehe, dass der Adapter bei meiner Steuerung den Ladevorgang gleich wieder einstellt, sobald die Autorisierung vorhanden ist. Deshalb hab ich die neue Version auf git gebaut. Die behebt den Fehler nicht, aber druckt mir ein paar mehr Infos in Debug-Log in der Hoffnung, dem Problem damit auf die Schliche zu kommen.

      posted in ioBroker Allgemein
      S
      Sneak-L8
    • RE: [Frage] Realisierung Adapter UDP Keba Wallbox

      @gto Guten Morgen, wenn ich ins Log schaue, dann steht da noch Authreq = 1 (im State wäre das true). Das würde bedeuten, dass die Autorisierung noch nicht abgeschlossen ist. Komisch ist dann aber, warum currtime 6000 1 trotzdem akzeptiert wird.
      Um 2025-04-03 19:34:45.666 erscheint aber der Debug-Hinweis, der erkennt, dass angesteckt und Autorisiert ist (authTimestamp is object).
      Was mich weiter verwundet ist, wie aus dem nummerischen Wert von 1 dann das true im State werden soll.
      Aber grundsätzlich schreibst Du ja, dass es funktioniert.
      Aber laut Log war eben keine Freigabe zum Laden da ...
      Um 19:34:56 ist dann die Freigabe da. Da sieht man dann auch, dass currUser = 1 ist. Das Laden ist also freigegeben. der "report 100" zeigt auch einen begonnenen Ladevorgang an.
      Um 19:35:25.066 sieht man, dass jetzt auch weiterhin der Ladevorgang freigegeben ist (authTimestamp is object), aber es wird nicht versucht, die Ladung aufrecht zu erhalten, denn dann beendet er das Laden wieder.
      Ich hab an dieser Stelle das Debug-Log nochmals erweitert um zu sehen, an was es liegt. Kannst Du nochmal testen? Es scheint an der Abfrage zum aufrechterhalten zu liegen, die nicht greift.

      An einer vertauschten Phase beim Anschluss kann es nicht liegen, weil die Steuerung der Wallbox ja auch auf Phase 1 liegen muss...

      posted in ioBroker Allgemein
      S
      Sneak-L8
    • RE: [Frage] Realisierung Adapter UDP Keba Wallbox

      @gto Ok, danke. Dann hattest du evtl. doch noch nicht die korrigierte Version. Ich hab hauptsächlich das Log erweitert und nur neben "null" nun auch auf einen leeren String beim Auslesen vom state statistics.authPlugTimestamp abgefragt. Dann hätte er aber eigentlich schon beim auslesen abbrechen müssen.

      posted in ioBroker Allgemein
      S
      Sneak-L8
    • RE: [Frage] Realisierung Adapter UDP Keba Wallbox

      @gto Das ist komisch. Ich hab jetzt mal einen weiteren Debug-Eintrag gemacht, um zu sehen, was in authTimestamp drinsteht. Kannst Du mal schauen, was bei statistics.authPlugTimestamp steht? Vermutlich aktuell nichts (null), aber wenn der Abbruch auftritt. Das wäre hilfreich für die weitere Analyse.
      Also bitte mal mit der Version von git.

      P.S. In Deinem Log steht auch Deine Email-Adresse drin. Solltest du vielleicht aus-x-en ...

      posted in ioBroker Allgemein
      S
      Sneak-L8
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo