Vhih mit ESP32

Nachdem hier schon so viele tolle vhih-Projekte und auch ESP32-Projekte wie der M5Stack etc. vorgestellt worden sind, möchte ich euch auch mein aktuelles Projekt vorstellen.

Das Projekt ist noch in einem sehr frühen Stadium und kaum getestet, allerdings bin ich schon auf euren Input gespannt und auf die Ideen, was damit anzufangen ist.

Auch würden mich natürlich Bedenken bzw. „natürliche“ Grenzen interessieren.
Wie viele hih kann der homee? Ich weiß es nicht. Wie viele Nodes packt der ESP32? Weiß ich auch nicht.

Die Readme ist noch bei 0, die werde ich aber erweitern.

Aber jetzt erst mal: Worum geht es überhaupt.

Ich habe, ausgehend von den Projekten von @stfnhmplr (vhih im node-red) und @Micha (M5Stack) und natürlich allen daran Beteiligten, die Idee gehabt, Sensoren mit dem ESP32 zu entwickeln und natürlich ohne node-red oder sonstige Brücken in den homee zu bringen.

Dies ist mir zumindest in einem „Proof of Concept“ gelungen. Aktuell ist es noch keine einfach zu verwendende Library, aber ich bin in der Lage, zufällige Temperaturwerte und Schalterstellungen an den homee zu übertragen und zu empfangen.

Ich habe das Projekt mit PlatformIO in VS Code entwickelt. Dies wird wohl auch benötigt, wenn man meinen Versuch „nachspielen“ möchte.

Im Code müssen die Nodes und die Attribute initialisiert werden:

  node* n1 = new node(10, 3001, "Luftsensor"); //CANodeProfileTemperatureAndHumiditySensor
  na1 = n1->AddAttributes(new nodeAttributes(5)); //CAAttributeTypeTemperature
  na2 = n1->AddAttributes(new nodeAttributes(7)); //CAAttributeTypeRelativeHumidity

  na1->setUnit("%C2%B0C");
  na1->setMinimumValue(-20);
  na1->setMaximumValue(60);
  na2->setUnit("%25");
  

  node* n2 = new node(20, 10, "Schalter");
  schalterAttribute = n2->AddAttributes(new nodeAttributes(1));
  schalterAttribute->setEditable(1);
  schalterAttribute->setMinimumValue(0);
  schalterAttribute->setMaximumValue(1);
  schalterAttribute->setCallback([](nodeAttributes* a)
  {
    a->setCurrentValue(a->getTargetValue());
    vhih.updateAttribute(a);
  });

  vhih.addNode(n1);
  vhih.addNode(n2);

Wie man sieht, wird bei dem Schalter ein Callback registriert. Dieses wird gerufen, wenn der homee einen Wert an den ESP32 sendet. Anders herum muss updateAttribute gerufen werden, wenn ein Sensor am ESP32 einen Wert empfängt, welcher an den homee gesendet werden soll.

Für die IDs muss man sich an den enums von sthnhmplr https://github.com/stfnhmplr/homee-api/blob/master/lib/enums.js orientieren.

Ich habe das Projekt auf GitHub hochgeladen, falls es sich jemand anschauen möchte.

10 Like

Du erstellst also auf jedem Esp ein vhih ?
Die Idee kam mir auch schon aber hatte ich nicht weiter verfolgt.

Sehr schön :+1:

Ja genau, so mache ich es ^^
Die Idee schlummert schon ewig, jetzt hab ich mich einfach mal dran gesetzt.

2 Like

Finde ich cool, mit wie vielen hast du es schon probiert (esp gleichzeitig ).

Die Frage ist wie sich die Auslastung des homee durch die Verbindungen verändert ?

Kannst du das auch mal für die arduino ide formatieren ?

Hm, das mit der Arduino IDE wird wohl schwierig. Die habe ich auch bisher nicht so im Fokus gehabt, da die Entwicklung mit PlatformIO im VSCode „so viel besser“ ist.
Ich habe momentan noch einen separaten homee mit nur einem ESP32 dran.
Ich kann mir aber nicht vorstellen, dass die Menge der hih so schnell ein Problem wird. Die Menge der Nachrichten, welche vom ESP an den homee gesendet werden hält sich ja eng in Grenzen.

Edit: https://platformio.org/install/ide?install=vscode

1 Like

Sehr cool!

Schau ich mir bei Gelegenheit an!
Danke fürs „mit uns teilen“ :slight_smile:

1 Like

Sooo, ich habe es auch in der Arduino IDE „am laufen“.

Folgende Schritte:



Und natürlich aus meinem Github-Projekt
Jeweils als ZIP herunterladen.

Diese drei ZIP in das Verzeichnis libraries der Arduino IDE entpacken (Im Benutzerverzeichnis).
Dann muss noch über die Bibliotheksverwaltung ArduinoJson hinzugefügt werden (wenn nicht schon vorhanden).

Bildschirmfoto 2021-04-26 um 21.36.51

So sieht es dann aus (Crypto war glaub ich schon drin, keine Ahnung).

Dann ist dies hier der Inhalt der .ino-Datei:

#include <WiFi.h>
#include "virtualHomee.hpp"

const char* ssid = "Wlan";
const char* password = "Password";

virtualHomee vhih;

nodeAttributes* na1;
nodeAttributes* na2;

nodeAttributes* schalterAttribute;


void setup() {
  // put your setup code here, to run once:
  randomSeed(analogRead(0));

  Serial.begin(115200);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());


  node* n1 = new node(10, 3001, "Luftsensor"); //CANodeProfileTemperatureAndHumiditySensor
  na1 = n1->AddAttributes(new nodeAttributes(5)); //CAAttributeTypeTemperature
  na2 = n1->AddAttributes(new nodeAttributes(7)); //CAAttributeTypeRelativeHumidity

  na1->setUnit("%C2%B0C");
  na1->setMinimumValue(-20);
  na1->setMaximumValue(60);
  na2->setUnit("%25");
  

  node* n2 = new node(20, 10, "Schalter");
  schalterAttribute = n2->AddAttributes(new nodeAttributes(1));
  schalterAttribute->setEditable(1);
  schalterAttribute->setMinimumValue(0);
  schalterAttribute->setMaximumValue(1);
  schalterAttribute->setCallback([](nodeAttributes* a)
  {
    a->setCurrentValue(a->getTargetValue());
    vhih.updateAttribute(a);
  });

  vhih.addNode(n1);
  vhih.addNode(n2);

  vhih.start();

}

void loop() {
  // put your main code here, to run repeatedly:
  sleep(10);

  na1->setCurrentValue(random(-20, 60));
  vhih.updateAttribute(na1);
}

Dann kompiliert es…

3 Like

Habe das ganze mal mit nen Wemos D1 Mini 32 getestet und bin echt begeistert über diese super Arbeit.
Habe sowohl die Sensorik als auch Aktorik getestet und beides funzt super.

Jetzt muss ich mir mal nen paar Möglichkeiten für den Einsatz einfallen lassen.

Beregnung , Girasensortaster und was noch so kommen kann.

Danke @danil @stfnhmplr @Tobias

:slight_smile::star_struck:

4 Like

Tja grosse Klasse was ihr zusammen da erbringt! Super, dass Ihr es hier teilt.

Danke !

1 Like