Autor Thema: Hatte das schon jemand in der Hand: ArduiTouch Wandgehäuseset mit Touchscreen ?  (Gelesen 23232 mal)

Offline ExPalm

  • New Member
  • *
  • Beiträge: 12
Das läuft bei mir. Mehrere Devices publishen an Mosquitto und ich kann die auch über ESPEasy empfangen und auf einem Display anzeigen lassen. Nur bei dem ArduiTouch klappt es nicht. Wenn ich hier das gleiche getTopic benutze wie bei ESPEasy wird mir hier nur 0 angezeigt.

Offline ExPalm

  • New Member
  • *
  • Beiträge: 12
...hast du da den Sketch dazu ?


Das müsste der Sketch zu dem MQTT teil sein :

#pragma once

#include "MQTTSensorTypes.hpp"
#include <util/stdextend.hpp>
#include "rapidjson/document.h"

// todo: remove once part below is fixed upstream
#include <Arduino.h>

#include <algorithm>
#include <iomanip>
#include <optional>
#include <sstream>
#include <tuple>

extern "C"
{
  #include "esp_log.h"
}

namespace mqtt
{
namespace util
{
  inline static auto GetSensorType(const std::string typeName) -> MQTTSensorType
  {
    // map JSON Keys to Enum
    if (typeName == "singleValue") { return MQTTSensorType::MQTTSingleValue; }
    if (typeName == "combinedValues") { return MQTTSensorType::MQTTCombinedValues; }
    return MQTTSensorType::MQTTINVALID;
  }

  inline static auto FindValue(std::vector<ValueTuple>& vec, const DataTypeKey dataType) -> std::string
  {
    auto it = std::find_if(vec.begin(), vec.end(),
      [&dataType](const ValueTuple& e)
      {
        return std::get<0>(e) == dataType;
      });

    if (it == vec.end())
    {
      return "";
    }

    return std::get<2>(*it);
  }

  inline auto JsonToValues(const std::string data, std::string key) -> std::optional<std::string>
  {
    using namespace rapidjson;
    Document document;
    ParseResult res = document.Parse<0>(data.c_str());
    if (!res)
    {
      ESP_LOGI("MQTT", "Unable to parse JSON");
      return "0";
    }

    if(!document.IsObject())
    {
      return std::nullopt;
    }
    const auto& rootObj = document.GetObject();
    float retVal = 0;
    using JsonValueRef = std::reference_wrapper<const rapidjson::Value>;
    using JsonValue = std::optional<JsonValueRef>;
    JsonValue result;
    auto jsonSearch = [](const rapidjson::Value obj, std::string key)
    {
      auto jsonSearchImpl = [](JsonValue obj, std::string key, auto& jsonSearch_ref) mutable
      {
        if (!obj.has_value())
        {
          return obj;
        }

        auto &objRef = obj.value().get();
        for (auto i = objRef.MemberBegin(); i != objRef.MemberEnd(); i++)
        {
          if (std::string(i->name.GetString()) == key)
          {
            return std::optional<JsonValueRef>{i->value};
          }
          else if (i->value.IsObject())
          {
            auto jsonRef = std::optional<JsonValueRef>{i->value};
            auto walkValue = jsonSearch_ref(jsonRef, key, jsonSearch_ref);
            if (walkValue.has_value())
            {
              return walkValue;
            }
          }
        }
        return obj;
      };
      auto objOpt = std::make_optional<JsonValueRef>(std::ref(obj));
      return jsonSearchImpl(objOpt, key, jsonSearchImpl);
    };

    for (auto i = rootObj.MemberBegin(); i != rootObj.MemberEnd(); i++)
    {
      if (i->value.IsObject())
      {
        result = jsonSearch(i->value.GetObject(), key);
        if (result.has_value())
        {
          break;
        }
      }
      else
      {
        if (std::string(i->name.GetString()) == key)
        {
          result = std::make_optional<JsonValueRef>(i->value);
        }
      }
    }

    if (!result.has_value())
    {
      return "0";
    }

    auto& foundValue = result.value().get();

    if (foundValue.IsDouble())
    {
      retVal = static_cast<float>(foundValue.GetDouble());
    }
    else if (foundValue.IsFloat())
    {
      retVal = foundValue.GetFloat();
    }
    else if (foundValue.IsInt())
    {
      retVal = static_cast<float>(foundValue.GetInt());
    }
    else
    {
      return std::string((foundValue.GetString()));
    }

    std::stringstream stream;
    stream << std::fixed << std::setprecision(1) << retVal;
    std::string s = stream.str();

    return s;
  }

} // namespace util
} // namespace mqtt

Offline carlos

  • Developer
  • Full Member
  • ****
  • Beiträge: 417
Also bei mir hat das mit HomePoint v0.03 genau so funktioniert.
Die neue Version HomePoint v0.04rc1 habe ich noch nicht getestet.

Vielleicht ist die neue Version das Problem.
Gruß

Carlos
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline ExPalm

  • New Member
  • *
  • Beiträge: 12
Danke Carlos,

das probiere ich mal.

Offline ExPalm

  • New Member
  • *
  • Beiträge: 12
Das war es leider nicht. Breche für heute ab, leider nur mit halben Erfolg.

Schönen Abend Carlos und Papa Romeo. Falls ihr noch eine Idee habe ist die gerne willkommen.

Offline Papa Romeo

  • Hero Member
  • *****
  • Beiträge: 2665
  • Wer bitteschön ist MacGyver?
Die stammen aus einer config_example.json die dabei war.....

Hast du diese config.json bearbeitet und die "Topics" mit denen ersetzt, die deine Sensoren von sich geben ?


LG

Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Offline ExPalm

  • New Member
  • *
  • Beiträge: 12
Moin, ja, so bin ich vorgegangen. Ich habe mir die Beispiele in die config.json kopiert und die Topics, welche ich in der MQTT Bridge in FHEM eingestellt habe und welche ich u.a. auch in einem ESPEasy mit OLED Display verwende, ersetzt. Ein ESP mit Relais kann ich so schalten aber leider klappt es mit den Sensordaten nicht.

Gruß

ExPalm

Offline ExPalm

  • New Member
  • *
  • Beiträge: 12
Problem gelöst. Wenn man mit MQTT keinen JSON String überträgt, sondern nur blanke Daten, dann muss man in der config.json  "jsondata": und "firstKey":  weglassen.

Gruß

ExPalm

Offline carlos

  • Developer
  • Full Member
  • ****
  • Beiträge: 417
Gut zu wissen.

Das bedeutet ein
"jsondata": false,reicht nicht aus?
firstKey muss weg?

Gruß

Carlos
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

Offline Cupe95

  • New Member
  • *
  • Beiträge: 7
Ich werfe hier mal das Nextion Display in der 2,4" Variante in den Raum.
Lässt sich super in FHEM einbinden. Bei Fragen kann ich gerne meinen Testaufbau einmal bildlich präsentieren.

Offline Papa Romeo

  • Hero Member
  • *****
  • Beiträge: 2665
  • Wer bitteschön ist MacGyver?
Wer eventuell noch Interesse hat.

Bei AZ-Delivery gibt´s den ArduiTouch heute bis 23:59 Uhr für 14.99 Euro + Versand

https://www.az-delivery.de/collections/more-products-4/products/az-touch-wandgehauseset-mit-touchscreen-fur-esp8266-und-esp32

LG

Papa Romeo
« Letzte Änderung: 30 Oktober 2020, 17:27:05 von Papa Romeo »
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Offline Papa Romeo

  • Hero Member
  • *****
  • Beiträge: 2665
  • Wer bitteschön ist MacGyver?
Ich werfe hier mal das Nextion Display in der 2,4" Variante in den Raum.

...na da liegt es dann mal gut ....aber aufpassen nicht drauftreten ... ;) :P ::) :o ;D ;D ;D

Spass beiseite...Willkommen im Forum...

..na dann zeig doch mal Bilder, ob es mit dem Wandgehäuse mithalten kann.

LG

Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Offline Cupe95

  • New Member
  • *
  • Beiträge: 7
Dafür hängt es noch zu hoch ;D

Anbei ein paar Fotos, wie gesagt ist ein Testaufbau, wenn gewünscht kann ich auch gerne ein Video versenden, wo die Haptik und Bedienung besser zu erkennen ist als auf den Bildern :D

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5996
Ist daß das gleiche housing nur das Innenleben ist ersetzt? Wo gekauft?

Vg
Jörg
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline Cupe95

  • New Member
  • *
  • Beiträge: 7
Genau ist alles baugleich. Erworben über Amazon (AZ Delivery).
https://www.amazon.de/AZDelivery-AZ-Touch-Wandgeh%C3%A4useset-Touchscreen-inklusive/dp/B081FC31Q5/ref=sr_1_6?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=arduino+touch+geh%C3%A4use&qid=1604317735&sr=8-6
Ansonsten wurde Innen ein Wemos D1 Mini und ein Nextion Display verbaut.
Da im Originalen die Displays verschraubt und eingeclipst werden, musste ich das Nextion verkleben, da dies auch leicht größer ist als das Display im ursprünglichen Angebot ging dies wunderbar.

Zustimmung Zustimmung x 1 Liste anzeigen