Hatte das schon jemand in der Hand: ArduiTouch Wandgehäuseset mit Touchscreen ?

Begonnen von herrmannj, 27 Februar 2020, 14:18:18

Vorheriges Thema - Nächstes Thema

ExPalm

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.

ExPalm

Zitat von: Papa Romeo am 26 Oktober 2020, 20:17:56
...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

carlos

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

ExPalm


ExPalm

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.

Papa Romeo

Zitat von: ExPalm am 26 Oktober 2020, 22:22:18
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

ExPalm

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

ExPalm

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

carlos

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

Cupe95

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.

Papa Romeo

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
...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

Papa Romeo

Zitat von: Cupe95 am 30 Oktober 2020, 16:44:15
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

Cupe95

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

herrmannj

Ist daß das gleiche housing nur das Innenleben ist ersetzt? Wo gekauft?

Vg
Jörg

Cupe95

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.