Vhih mit ESP32

An dieser Stelle wird das Attribute dem Node hinzugefügt

co2 = mhz19b->AddAttributes(new nodeAttributes(20));
2 „Gefällt mir“

Danke für die Antwort, aber es geht mir um den String „CO2 Gehalt“ die ich im Homee sehen kann. Ich vermute, das der von homee festgelegt wird, weil die AttributeTypes eben 20 ist, also dieser CAAttributeTypeCO2Level: 20.

Für einen reinen Feuchtesensor verwende ich:

humiNode = new node(30, 3010, "Luftfeuchtigkeit");
Humi_Attrib = HumiNode->AddAttributes(new nodeAttributes(7))

Das sieht erst mal ganz ok aus.
Allerdings sehe ich hier einen Schalter Watchdog ein/aus, den ich bei anderen (CO2 und Temperatur) nicht sehe.
Liegt das an mir?

Kann ich eigentlich damit auch Daten anderer Sensoren aus Homee abfragen?

Speziell geht es mir dabei um den Öffnungsstatus meines Heizkörperthermostaten.

Wenn ich den Vorlauf und Rücklauf messe und über diesen Öffnungs-Status die Durchflussmenge bestimmen kann, kann ich mir die Leistung des Heizkörpers ausrechnen.

Nein du kannst keine Daten am Slave homee vom Master empfangen.
Dazu musst du eine WS Verbindung zum Homee Master herstellen und die Daten auswerten.

Was ist eine WS-Verbindung? und wie mach ich die?

Websocket
Schau dir mal den Code vom M5 Stack an.
Dort habe ich die Api abgezapft.
Ist eigentlich genau das was du suchst.

puh, da gibt es aber viel zu lesen.

So wie ich das nach kurzem überfliegen verstanden habe, machst du das alles über WebHooks.
Mit den WebHooks kann man aber doch keine Daten versenden, oder liege ich da falsch.
Ich brauche die Angabe in % von 0 - 100.
Für jeden Prozentwert einen eigenen WebHook zu erstellen, wäre mir dann doch etwas zu „anstrengend“.

Nein die letzten Versionen nutze einen websocket zum Homee (Version 0.7.2)

puh, kannst du mich da mit der Nase drauf stubbsen, damit ich nicht das ganze Projekt verstehen muss? (wenn das so einfach geht)
Wie macht das der homee mit Boardmitteln und wie kommuniziere ich über den Socket?

Also, was ich verstanden habe ist, das im setup() dem Socket eine Callback funktion webSocket.onEvent(webSocketEvent); hinterlegt wird.
Wenn der Socket also etwas empfängt, wird diese Funktion gerufen.

Da ich ja Daten übertragen will, wird wohl der case WStype_BIN: in Frage kommen.
Hier steht in der payload dann der Wert drin, der vom homee gesendet wird.

Wie kommt aber der Wert vom homee da rein? Was muss ich im homee machen?


String str  = String("PUT:/nodes/") + id1_string + String("/attributes/") + attr1_string + String("?target_value=1");
            Serial.println(str);
            webSocket.sendTXT(str);
       

Das ist der Teil der dafür verantwortlich ist einen Befehl an Homee zu senden.
Du willst doch aber werte vom homee empfangen oder habe ich dich da falsch verstanden ?
Ansonsten sendet ja der vhih Werte an das entsprechende Gerät.

Richtig, ich will Werte von homee empfangen.

Hallo,

weiß jemand wie das geht, wenn ich so einen Schieberegler im Geräteprofil haben will?

Das Dimmattribut (2) ist das richtige für einen Schieber.

1 „Gefällt mir“

und dann ganz normal mit AddAttribute() hinzufügen?
Das klappt bei mir aber nicht. Kann es sein, das es am Node liegt?

Stell doch einfach mal den codeteil davon ein um zu schauen ob es passt und was genau dann im Homee passiert. Was für ein Profil hast du gewählt ?

Dazu muss ich sagen, das ich mir eine Klasse VHIHclass geschrieben habe.

  *heaterNodeHandle = VHIHclass->createDevice("Heizkörper", CANodeProfileDimmableLight); //CANodeProfileDimmableSwitch // CANodeProfileHeatingCircuit
  // VHIHclass->createDeviceAttributes(*heaterNodeHandle, CAAttributeTypeTemperature,          "Vorlauftemperatur",  -40, 60,    "°C");       // Vorlauftemperatur
  // VHIHclass->createDeviceAttributes(*heaterNodeHandle, CAAttributeTypeTemperature,          "Rücklauftemperatur", -40, 60,    "°C");       // Rücklauftemperatur
  // VHIHclass->createDeviceAttributes(*heaterNodeHandle, CAAttributeTypeTemperature,          "Spreizung",          -40, 60,    "°C");       // Spreizung
  VHIHclass->createDeviceAttributes(*heaterNodeHandle, CAAttributeTypeDimmingLevel,         "Durchfluss",           0, 1000,  "ltr/h");    // Durchfluss
  VHIHclass->createDeviceAttributes(*heaterNodeHandle, CAAttributeTypeDimmingLevel,         "Bypass",               0, 100,   "%");        // Bypass
  // VHIHclass->createDeviceAttributes(*heaterNodeHandle, CAAttributeTypeCurrentEnergyUse,     "Aktuelle Leistung",    0, 100,   "kW");       // Aktuelle Leistung
  // VHIHclass->createDeviceAttributes(*heaterNodeHandle, CAAttributeTypeAccumulatedEnergyUse, "Aufsummiete Leistung", 0, 1000,  "kWh");      // Aufsummiete Leistung

und das Ergebnis ist

createDevice() führt zu new node()
createDeviceAttributes() führt zu AddAttributes(new nodeAttributes(attribType))

Schick mir mal den kompletten Sketch damit ich mir die class mal anschauen kann.

1 „Gefällt mir“

Hallo,

ich habe da einen etwas verzwickten Fehler.

Ich habe ein Projekt angefangen, das alle Energieverbraucher zusammenzählt und eine Summenkurve bildet. Das Projekt ist schon recht groß geworden. Mit zunehmender Größe habe ich immer mehr Schwierigkeiten bekommen. Zum einen wurden die Werte nicht geupdatet und zum anderen knallte mir mein ESP8266 immer wieder mal weg. Je größer das Projekt wurde, desto häufiger passierte es.

Deswegen habe ich das mal ziemlich weit abgespeckt, um zu sehen, wo der Fehler liegen könnte.

Jetzt ist es so, das der Fehler zwar schwieriger zu reproduzieren ist, aber immer wieder mal auftaucht. Mal ist es die Exception 3, und dann auch wieder mal die Exception 28 und 29. Je größer das Projekt wird, desto öfters tritt der Fehler auf, bis zum Schluss gar nichts mehr geht :frowning:

Wenn ich bei diesen abgespeckten Code den virtualHomee ungefähr 10 mal anlerne, passiert es vielleicht einmal.

Manchmal muss ich ihn auch per Knopfdruck auf dem Board resetten und erneut probieren.

Ich habe euch mal den Code hier reingesetllt und auch den Exception Dump.

Kann mir da jemand helfen?


#include <Arduino.h>

#if defined(ESP32)
#include <WiFi.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#include <WebSocketsClient.h>

//#include "virtualHomee-Patch.hpp"
#include "virtualHomee.hpp"



virtualHomee* myVirtualHomee;
WebSocketsClient* webSocket;

String SSID = "WLAN";
String PASSWD = "PASSWORT";
String homeeToken = "token";
String hostname = "AQS1-Electricity";


void webSocketEvent(WStype_t type, uint8_t * payload, size_t length)
{

}


void setup() 
{
  Serial.begin(9600);

  myVirtualHomee   = new virtualHomee();
  webSocket        = new WebSocketsClient();
  

//  IPAddress ip(192, 168, 178, 104);
//  IPAddress dns(192, 168, 178, 1);
//  IPAddress gateway(192, 168, 178, 1);
//  IPAddress subnet(255, 255, 255, 0);
//
//  WiFi.config(ip, dns, gateway, subnet);
  
  WiFi.begin(SSID, PASSWD);                   // Startet WiFi komponente
  
  Serial.print("Connecting to WLAN .");
  while (WiFi.status() != WL_CONNECTED)     // Wartet solange bis mit dem WLAN verbunden wurde
  {
    delay(500);
    Serial.print(".");
  }
  
  Serial.println();
  Serial.println("Connection to WLAN successful completed.");
  Serial.print("IP address:      ");
  Serial.println(WiFi.localIP());
  
//  WiFi.hostname(hostname.c_str());
  
  Serial.println("Create WebSocket");

  webSocket->setExtraHeaders("protocolVersion: 13, origin: 192.168.178.80, handshakeTimeout: 5000");
  webSocket->begin("192.168.178.24", 7681, homeeToken, "v2");
  webSocket->onEvent(webSocketEvent);
  webSocket->setReconnectInterval(5000);
  webSocket->enableHeartbeat(15000, 3000, 2);

  Serial.println("Create virtualHomee configuration");
    
  node* newNode = new node(1, 22, "Elektrizität");
  newNode->setImage("nodeicon_dryer");

  nodeAttributes* newAttribute1 = newNode->AddAttributes(new nodeAttributes(1));
  newAttribute1->setMinimumValue(0);
  newAttribute1->setMaximumValue(1);
  newAttribute1->setEditable(1);
  newAttribute1->setUnit("");
  
  nodeAttributes* newAttribute2 = newNode->AddAttributes(new nodeAttributes(3));
  newAttribute2->setMinimumValue(0);
  newAttribute2->setMaximumValue(100000);
  newAttribute2->setEditable(0);
  newAttribute2->setUnit("W");
  
  nodeAttributes* newAttribute3 = newNode->AddAttributes(new nodeAttributes(4));
  newAttribute3->setMinimumValue(0);
  newAttribute3->setMaximumValue(10000);
  newAttribute3->setEditable(0);
  newAttribute3->setUnit("kWh");
  
  nodeAttributes* newAttribute4 = newNode->AddAttributes(new nodeAttributes(4));
  newAttribute4->setMinimumValue(0);
  newAttribute4->setMaximumValue(10000);
  newAttribute4->setEditable(0);
  newAttribute4->setUnit("kWh");

  myVirtualHomee->addNode(newNode);
  
  myVirtualHomee->start();   
    
  Serial.println("SETUP successful completed");
}


void loop() 
{
  webSocket->loop();
}

und hier der Exception Dump: