Hallo liebe fhem Gemeinde,
ich habe hier im Laufe der Zeit schon viele helfende Themen gefunden - Danke an der Stelle an alle und Grüße von einem "neuen" in die Runde.
Ich melde mich aber nicht ohne Grund - nein die Verzweiflung treibt mich um.
Mein aktuelles Vorhaben besteht darin mittels der bekannten TCRT5000-Platine den Ferraris Stromzähler "auszulesen". Problem besteht darin, dass ich keine Position finde um die rote Markierung als Impuls zu erfassen. Objekte werden aber grundsätzlich schon bemerkt...
Zum Aufbau:
NodeMCU mit EasyESP
3.3V - GND - D6
Jeweils direkt an den Anschlüssen der Platine dran - glaube da kann man ned soviel falsch machen!?
Mittels Potentiometer kann man die Sensibilität ja schön einstellen - allerdings finde ich bei mir keine Stellung bei der die rote Markierung gefunden wird. Oder es ist so Ars.. knapp das die aller kleinste Bewegung zu Impulsen führt oder auch "andere" Stellen auf der Scheibe triggern....
Ich hab auch schon versucht mit eine grünen LED den Kontrast der Scheibe zu erhöhen - bringt gar nix außer das ich besser zuschauen kann.
Nun meine Frage - worauf muss ich achten um halbwegs Störungsfrei Impulse zu bekommen?
Anbei ein Bild - ja, der Sensor hängt grad schräg dran - so habe ich bisher noch am ehesten ein "Flimmern" der Kontroll LED einstellen können - aber wie gesagt auch an stellen wo keine Markierung ist wird ein Impuls erzeugt.
Danke und Grüße
Christian
Vielleicht hilft Dir das weiter: https://forum.fhem.de/index.php?topic=54408.0
Danke - das war ein hoffnungsvoller Versuch - leider ergab das bei mir keine Besserung : (
Ich hab nun auch die Analogwerte in der loop laufenlassen - der Zuckt nicht mal wenn das rote vorbeiläuft...
Kann es sein dass es Material gibt bei dem die Infrarot Schranke nicht gut funktioniert?
Ich denke einfach um 90° drehen ::)
Bei mir läuft seit diesem Artikel diese temporäre Lösung stabil (https://heinz-otto.blogspot.com/2016/10/ferrariszahler-abtasten-ein-experiment.html). Einzig das Panzerband ist gegen Powerstrip getauscht.
Gruß Otto
Ich hatte dasselbe Problem. Gelöst habe ich es, indem ich den Sensor waagerecht so angebracht habe, dass er leicht schräg von unten die Ferraris-Scheibe anvisiert (siehe angehängtes Foto). Etwaige Reflexionen von der Glasscheibe fallen damit nicht unmittelbar auf den Sensor zurück. Das Ganze mit Klebeband fixiert, nicht schön, verrichtet aber zuverlässig seinen Dienst.
Für die exakte Ausrichtung hilft eine Digitalkamera (auch Handykamera), mit der man den Infrarot-Punkt exakt auf die Ferrarisscheibe ausrichten kann.
Gesendet von meinem Nexus 5X mit Tapatalk
Danke! auch das war ein vielversprechender Versuch - ich bin gestern sogar noch mal aus dem Bett gekrochen um das kurz zu testen - hat nix gebracht. Jetzt habe ich auch noch mal paar Stunden damit verbracht das Spielzeug in allen erdenklichen Positionen zu platzieren....
Ich bin mittlerweile kurz davor die doofe Scheibe rauszuschlagen um diese Fehlerquelle zu Eliminieren.
Mit der DigiCam sehe ich auch, dass die Scheibe schön angeleuchtet wird - die Ausrichtung sollte also scho passen.
Zitat von: dabuze am 28 Juni 2018, 19:25:24
Ich bin mittlerweile kurz davor die doofe Scheibe rauszuschlagen um diese Fehlerquelle zu Eliminieren.
Bei einem selbst installierten Zähler in der privaten Unterverteilung ist das vielleicht eine Alternative (wobei man dann ja eigentlich auch den Zähler gegen einen mit Impulsgeber austauschen könnte).
Bei einem "offiziellen" Zähler des Versorgers hab ich mir schon dreimal überlegt, ob ich überhaupt wage, etwas dranzukleben... Andererseits lässt sich das rückstandslos zurückbauen - Zählerableser kommen bei uns sowieso nicht "spontan" ins Haus.
Bist du dir eigentlich wirklich sicher, dass der Infrarot-Sensor fehlerfrei arbeitet? Ich hatte zunächst auch ein Modul, mit dem keine zuverlässigen Erkennungen möglich waren. Da die Module ja nicht die Welt kosten, habe ich einfach ein anderes bestellt und das lief dann. Das erste Modul, das am Stromzähler vor sich gestottert hat, läuft inzwischen sehr zuverlässig am Gaszähler (zuverlässiger als der Hallsensor, der den meistens ziemlich unentschlossenen Reedkontakt ersetzen sollte).
Gesendet von meinem Nexus 5X mit Tapatalk
Ich habe das auch mit den TCRT5000 umsetzten können, war recht fummelig lauft aber nun sehr zuverlässig :)
Gruß
Dennis
Hallo Dennis,
Zitat von: Shojo am 29 Juni 2018, 09:10:47
Ich habe das auch mit den TCRT5000 umsetzten können, war recht fummelig lauft aber nun sehr zuverlässig :)
hast Du einen Link auf das 3D Gehäuse, sieht echt gut aus.
Gruß PeMue
Zitat von: PeMue am 29 Juni 2018, 09:20:21
Hallo Dennis,
hast Du einen Link auf das 3D Gehäuse, sieht echt gut aus.
Sicher (ist von so ein cooooolen Typen gemacht :D)
https://www.thingiverse.com/thing:2969084
Ich habs aufgegeben - der TCRT5000 ist definitiv nicht auf meiner Seite.
Die neue Lösung besteht aus einer grünen LED und nem Photoresistor. Vor/Nachteil dabei ist ich kann/musste den Code zur Errechnung des Verbrauches selber schreiben. Dafür kann ich jetzt sehr SEHR genau messen ;)
Des funktioniert bisher erstaunlich gut. Ich habe mir einen entsprechenden Halter ausgedruckt um auch die Umgebungslicht-Empfindlichkeit zu reduzieren.
Bisher hatte ich nen Homematic Ferraris ES-Fer Zähler am Kasten hängen - der hatte auch schon arge Probleme mit der Erkennung und hat mitten in einer Umdrehung getriggert was zu absurden Ergebnissen geführt hat.
Nach einer kurzen Einspielung welche Werte der Sensor bei "Silber" bzw "Rot" liefert konnte ich also jede Umdrehung erfassen und direkt den aktuellen Verbrauch berechnen. Die Daten gehen via MQTT zu fhem.
Dort kann ich mir jederzeit die aktuellen SensorDaten ausgeben lassen und ggf via MQTT publish neue Werte senden.
Nun muss ich mir nur noch ne schöne Halterung für die NodeMCU drucken und dann kann ich mich auf die nächsten Probleme stürzen ; )
Danke jedenfalls an all für die Anteilnahme ; )
Grüße
Christian
Gibt es nähere Details (Schaltplan/Bestückung) der Variante Grüne LED + Photozelle?
Gesendet mit einem ortsungebundenen Telefonapparat via Tapatalk
Hallo mal wieder.
Ich hatte die letzten Tage bissi mehr zu tun und konnte nicht mehr wirklich basteln geschweige denn mich melden.
Einen Schaltplan habe ich mal gezeichnet und auch meinen aktuellen Quellcode werde ich anhängen. Evtl. kann jemand etwas damit anfangen.
Ganz nach dem Motto "der Schuster hat die schlechtesten Schuhe" den Quellcode mit Bedacht einsetzen wobei es mittlerweile echt gut läuft ;)
SourceCode:
#include "ESP8266WiFi.h"
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
#define D0 16
#define D1 5 // I2C Bus SCL (clock)
#define D2 4 // I2C Bus SDA (data)
#define D3 0
#define D4 2 // Same as "LED_BUILTIN", but inverted logic
#define D5 14 // SPI Bus SCK (clock)
#define D6 12 // SPI Bus MISO
#define D7 13 // SPI Bus MOSI
#define D8 15 // SPI Bus SS (CS)
#define D9 3 // RX0 (Serial console)
#define D10 1 // TX0 (Serial console)
// WiFi parameters
const char* ssid = "SID";
const char* password = "HierKönnteIhrPasswortStehen";
const char* mqtt_server = "Zahlen oder Hostname";
const char* outTopicPower = "MCU_STROM/CurrentPower";
const char* outTopicTrigger = "MCU_STROM/Trigger";
const char* outTopicLight = "MCU_STROM/LightValue";
const char* inTopicValueRed = "MCU_STROM/ValueRed";
const char* inTopicValueSilver= "MCU_STROM/ValueSilver";
const char* inTopicDebugMode = "MCU_STROM/DebugMode";
int sensorValue;
int sensorValueRed;
int sensorValueSilver;
int sensorValueAutoCalibrationCheckTimes = 50;
int sensorValueRedAutoCalibration = 0;
int sensorValueRedAutoCalibrationTimes = 0;
int sensorValueSilverAutoCalibration = 0;
int sensorValueSilverAutoCalibrationTimes = 0;
boolean oRedDetected = false;
boolean oDebugMode = false;
unsigned long timeStamp = 0;
unsigned long timeStampForCheck = 0;
unsigned long timeToCheck = 25;
int nBufferCountRed = 0;
int nBufferCountSilver = 0;
void setup ()
{
Serial.begin (115200);
sensorValueRed = 58;
sensorValueSilver = 65;
// Turn on LED for contrast
pinMode(D1, OUTPUT);
digitalWrite(D1, HIGH);
Serial.println("Setup WiFi");
setup_wifi();
Serial.println("Setup Client");
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
Serial.println("Setup done");
}
void loop ()
{
if (!client.connected()) {
reconnect();
}
client.loop();
// read sensor every X milliseconds
if (millis() - timeStampForCheck > timeToCheck)
{
timeStampForCheck = millis();
// get value from sensor
sensorValue = analogRead (A0);
// Serial.println (sensorValue, DEC);
if (oDebugMode == true)
{
String sSensorValue = String(sensorValue);
client.publish(outTopicLight, (char*)sSensorValue.c_str());
Serial.println (sensorValue, DEC);
}
if (sensorValue <= sensorValueRed && oRedDetected == false)
{
if (nBufferCountRed >= 2)
{
oRedDetected = true;
// set bufferCount to 0. Used to check before setting trigger to False.
nBufferCountSilver = 0;
nBufferCountRed = 0;
// sent trigger value 1 to MQTT
String sTriggerCount = "1";
client.publish(outTopicTrigger, (char*)sTriggerCount.c_str());
Serial.print("timeStamp: ");
Serial.println(timeStamp);
// start counting for energy
if (timeStamp != 0)
{
unsigned long timeDiff = millis() - timeStamp;
Serial.print ("timeDiff: ");
Serial.println (timeDiff);
float timeDiffSec = timeDiff / 1000;
float energy = 0.006666 * (1/(timeDiffSec/3600));
Serial.print ("energy in kW: ");
Serial.println (energy);
// get in Watt
energy = energy * 1000;
String sCurrentPower = String(energy);
client.publish(outTopicPower, (char*)sCurrentPower.c_str());
// start auto calibration for red
if (sensorValueRedAutoCalibrationTimes >= sensorValueAutoCalibrationCheckTimes)
{
Serial.print("use sensorValueRedAutoCalibration [");
Serial.print(sensorValueRedAutoCalibration);
Serial.print("] for red calculation divided by [");
Serial.print(sensorValueAutoCalibrationCheckTimes);
Serial.print("] and base value: ");
Serial.println(sensorValueRed);
// calculate new red value
int sensorValueRedTemp = sensorValueRedAutoCalibration / sensorValueAutoCalibrationCheckTimes;
if (sensorValueRedTemp < sensorValueSilver)
{
// check if the RED value is below Silver - otherwise it will not work ; )
sensorValueRed = sensorValueRedTemp;
// add buffer to actual value
sensorValueRed = sensorValueRed + 3;
sensorValueRedAutoCalibration = 0;
Serial.print("new calculated sensorValueRed: ");
Serial.println(sensorValueRed);
sensorValueRedAutoCalibrationTimes = 0;
String sNewSensorValueRed = String(sensorValueRed);
client.publish(inTopicValueRed, (char*)sNewSensorValueRed.c_str());
}
else
{
// cleanup values.
sensorValueRedAutoCalibration = 0;
sensorValueRedAutoCalibrationTimes = 0;
}
}
else
{
// sum value to get average
sensorValueRedAutoCalibration = sensorValueRedAutoCalibration + sensorValue;
sensorValueRedAutoCalibrationTimes++;
Serial.print("have now sensorValueRedAutoCalibration [");
Serial.print(sensorValueRedAutoCalibration);
Serial.print("] for the [ ");
Serial.print(sensorValueRedAutoCalibrationTimes);
Serial.print("] run for current sensor value: ");
Serial.println(sensorValue);
}
}
timeStamp = millis();
}
else
{
nBufferCountRed++;
}
}
else if (sensorValue >= sensorValueSilver && oRedDetected == true)
{
// check 10 times before set trigger back to false
if (nBufferCountSilver >= 5)
{
nBufferCountSilver = 0;
nBufferCountRed = 0;
oRedDetected = false;
// start auto calibration for silver
if (sensorValueSilverAutoCalibrationTimes >= sensorValueAutoCalibrationCheckTimes)
{
// calculate new red value
Serial.print("use sensorValueSilverAutoCalibration [");
Serial.print(sensorValueSilverAutoCalibration);
Serial.print("] for silver calculation divided by [");
Serial.print(sensorValueAutoCalibrationCheckTimes);
Serial.print("] and base value: ");
Serial.println(sensorValueSilver);
int sensorValueSilverTemp = sensorValueSilverAutoCalibration / sensorValueAutoCalibrationCheckTimes;
if (sensorValueSilverTemp > sensorValueRed)
{
// check if SILVER is above red value
sensorValueSilver = sensorValueSilverTemp;
Serial.print("new calculated sensorValueSilver: ");
Serial.println(sensorValueSilver);
sensorValueSilverAutoCalibrationTimes = 0;
// add buffer to actual value
sensorValueSilver = sensorValueSilver - 3;
sensorValueSilverAutoCalibration = 0;
String sNewSensorValueSilver = String(sensorValueSilver);
client.publish(inTopicValueSilver, (char*)sNewSensorValueSilver.c_str());
}
else
{
sensorValueSilverAutoCalibration = 0;
sensorValueSilverAutoCalibrationTimes = 0;
}
}
else
{
// sum value to get average
sensorValueSilverAutoCalibration = sensorValueSilverAutoCalibration + sensorValue;
sensorValueSilverAutoCalibrationTimes++;
Serial.print("have now sensorValueSilverAutoCalibration [");
Serial.print(sensorValueSilverAutoCalibration);
Serial.print("] for the [ ");
Serial.print(sensorValueSilverAutoCalibrationTimes);
Serial.print("] run for current sensor value: ");
Serial.println(sensorValue);
}
}
else
{
nBufferCountSilver++;
}
}
}
}
void setup_wifi() {
delay(50);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.hostname("ESP_STROM");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
delay(500);
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("ESP_STROM")) {
Serial.println("connected");
client.subscribe(inTopicDebugMode);
client.subscribe(inTopicValueRed);
client.subscribe(inTopicValueSilver);
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 1,5 seconds");
// Wait 5 seconds before retrying
delay(1500);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
String sMessage = "";
for (int i=0;i<length;i++) {
Serial.print((char)payload[i]);
sMessage += (char)payload[i];
}
Serial.println();
if (strcmp (topic, inTopicValueRed) == 0 )
{
sensorValueRed = sMessage.toInt();
}
else if (strcmp (topic, inTopicValueSilver) == 0 )
{
sensorValueSilver = sMessage.toInt();
}
else if (strcmp (topic, inTopicDebugMode) == 0 )
{
oDebugMode = sMessage == "1";
Serial.print("oDebugMode ");
Serial.println(oDebugMode);
}
}
fhem Code:
## define Stromzähler NodeMCU MQTT Device
define MCU_STROM MQTT_DEVICE
attr MCU_STROM subscribeReading_CurrentPower MCU_STROM/CurrentPower
attr MCU_STROM subscribeReading_Trigger MCU_STROM/Trigger
attr MCU_STROM subscribeReading_LightValue MCU_STROM/LightValue
attr MCU_STROM subscribeReading_ValueRed MCU_STROM/ValueRed
attr MCU_STROM subscribeReading_ValueSilver MCU_STROM/ValueSilver
attr MCU_STROM publishSet_DebugMode MCU_STROM/DebugMode
attr MCU_STROM publishSet_ValueRed MCU_STROM/ValueRed
attr MCU_STROM publishSet_ValueSilver MCU_STROM/ValueSilver
define MCU_STROM_DEBUG dummy
attr MCU_STROM_DEBUG webCmd state
attr MCU_STROM_DEBUG setList state:on,off
define N_MCU_STROM_DEBUG_OM notify MCU_STROM_DEBUG:on set MCU_STROM DebugMode 1
define N_MCU_STROM_DEBUG_OFF notify MCU_STROM_DEBUG:off set MCU_STROM DebugMode 0
Viel Spaß und viele Grüße ; )
Christian
*Edit - Bugfix in der Auto-Calibration der Helligkeit des Sensors für Rot/Silber...*
Moin,
auch ich kämpfe grad mit meinem Stromzähler. Hab es erst mit dem TCRT5000 versucht. Dann hab ich mir grüne LEDs samt Phototransistor besorgt und die beiden mit https://www.thingiverse.com/thing:2829444 versucht und mit umgebautem TCRT5000 nach https://www.stall.biz/project/impulsgeber-fuer-den-wasserzaehler-selbst-gebaut
Aber auch das klappt noch nicht zufriedenstellend.
@dabuze: Hast das 3D-Model selbst gebaut? Magst mir das zur Verfügung stellen? Bin mittlerweile auch geneigt, den TCRT5000 ganz raus zu schmeißen und mit deinem Code zu arbeiten.
Glaub die Dinger sind einfach Mist.
Servus Maui,
auch wenns peinlich ist findest du anbei die STL von mir - das Ding von Thingiverse schaut definitiv besser aus :)
Zwecks Code - oben ist noch das "Autoleveling" aktiv - das funktioniert bei mir leider doch nicht so gut - nach spätestens 5 Tagen haben sich die Werte für Rot und Silver verdreht.....
Ich betreibe das seitdem mit festen werden die ich bei bedarf über fhem anpassen kann. Läuft bisher 100% stabil. Silver=53 Red=47
Fall es interessiert - habe gestern in fhem rumgespielt um mir die Stromwerte umzurechnen.
Gesamtverbrauch kWh/Euro - Aktuelle Stunde - Letzte Stunde...
Achtung - Werte für Umdrehungen pro KWh und Stromkosten pro KWh sind fest...kann man sicher auch schöner realisieren. :)
## Stündlich den Verbrauch speichern:
define at_STROM_HOUR at +*01:00:00 {
my $CurrentHourCount = ReadingsVal ('MCU_STROM','Trigger_Current_Hour','0');;
fhem ("setreading MCU_STROM Trigger_Last_Hour $CurrentHourCount");;
fhem ("setreading MCU_STROM Trigger_Current_Hour 0");;
my $PowerLastHourUsed = ReadingsVal ('MCU_STROM','Trigger_Last_Hour','0')/150;;
fhem ("setreading MCU_STROM PowerLastHourUsed $PowerLastHourUsed");;
my $PowerLastHourCost = ReadingsVal ('MCU_STROM','Trigger_Last_Hour','0')/150*0.22;;
fhem ("setreading MCU_STROM PowerLastHourCost $PowerLastHourCost");;
}
attr at_STROM_HOUR alignTime 00:00
# notify für Stromzähler. Wird aktiviert wenn CurrentPower wert kommt
define N_MCU_STROM_TRIGGER_COUNT notify MCU_STROM:CurrentPower:.* {
my $CurrentCount = ReadingsVal ('MCU_STROM','Trigger_Sum','0')+1;;
fhem ("setreading MCU_STROM Trigger_Sum $CurrentCount");;
my $PowerAllUsed = ReadingsVal ('MCU_STROM','Trigger_Sum','0')/150;;
fhem ("setreading MCU_STROM PowerAllUsed $PowerAllUsed");;
my $PowerAllCost = ReadingsVal ('MCU_STROM','Trigger_Sum','0')/150*0.22;;
fhem ("setreading MCU_STROM PowerAllCost $PowerAllCost");;
my $CurrentHourCount = ReadingsVal ('MCU_STROM','Trigger_Current_Hour','0')+1;;
fhem ("setreading MCU_STROM Trigger_Current_Hour $CurrentHourCount");;
my $PowerCurrentHourUsed = ReadingsVal ('MCU_STROM','Trigger_Current_Hour','0')/150;;
fhem ("setreading MCU_STROM PowerCurrentHourUsed $PowerCurrentHourUsed");;
my $PowerCurrentHourCost = ReadingsVal ('MCU_STROM','Trigger_Current_Hour','0')/150*0.22;;
fhem ("setreading MCU_STROM PowerCurrentHourCost $PowerCurrentHourCost");;
}
## Stateformat:
{ 'Current KWh: '.sprintf("%.2f",ReadingsVal("MCU_STROM","CurrentPower","0")).'
All €: '.sprintf("%.2f",ReadingsVal("MCU_STROM","PowerAllCost","0")).'
Hour €: '.sprintf("%.2f",ReadingsVal("MCU_STROM","PowerCurrentHourCost","0")).'
Last Hour €: '.sprintf("%.2f",ReadingsVal("MCU_STROM","PowerLastHourCost","0")).'' }
Danke dir. Endlich läuft es. Dein Modell hat echt noch optimierungsbedarf ;)
Aber faul wie ich bin habe ich's genommen und mit heisskleber nachgeholfen.
Jetzt mal die erste Nacht schauen, wie stabil es läuft. Aber bisher ziemlich gut.
Endlich kann ich da ein Haken hinter machen
So, nach der ersten Nacht kann ich sagen. Läuft super. Danke für deine Hilfe und den Code. Habe ihn fast 1:1 laufen, habe nur die Kalibrierung raus genommen und den Counter von 2 auf 4 gesetzt. Habe einen Zähler mit 75 Umdrehungen bis zur kWh und hab mal grob überschlagen. Im schlimmsten Fall bekomme ich nur 8 Signale mit red. Du hast ja einen 150er Zähler, also quasi das gleiche, da deiner doppelt so schnell dreht. Auch die Berechnungen habe ich von dir übernommen und angepasst. Ich bau mir jetzt noch eine für Standby (Strom nachts) und eine für den letzten Tag. Stelle ich dann noch hier rein, falls es mal wem hilft.
Bei mir ist zwar der Abstand zwischen rot und silber ziemlich klein, 8 gegen 12, aber dafür läuft es erstaunlich sauber.
Zitat von: dabuze am 09 Juli 2018, 20:12:29
Hallo mal wieder.
Ich hatte die letzten Tage bissi mehr zu tun und konnte nicht mehr wirklich basteln geschweige denn mich melden.
Einen Schaltplan habe ich mal gezeichnet und auch meinen aktuellen Quellcode werde ich anhängen. Evtl. kann jemand etwas damit anfangen.
Ganz nach dem Motto "der Schuster hat die schlechtesten Schuhe" den Quellcode mit Bedacht einsetzen wobei es mittlerweile echt gut läuft ;)
SourceCode:
Hättest Du noch die verwendeten Bauteile?
Danke und Gruß,
Michael
#include "ESP8266WiFi.h"
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
#define D0 16
#define D1 5 // I2C Bus SCL (clock)
#define D2 4 // I2C Bus SDA (data)
#define D3 0
#define D4 2 // Same as "LED_BUILTIN", but inverted logic
#define D5 14 // SPI Bus SCK (clock)
#define D6 12 // SPI Bus MISO
#define D7 13 // SPI Bus MOSI
#define D8 15 // SPI Bus SS (CS)
#define D9 3 // RX0 (Serial console)
#define D10 1 // TX0 (Serial console)
// WiFi parameters
const char* ssid = "SID";
const char* password = "HierKönnteIhrPasswortStehen";
const char* mqtt_server = "Zahlen oder Hostname";
const char* outTopicPower = "MCU_STROM/CurrentPower";
const char* outTopicTrigger = "MCU_STROM/Trigger";
const char* outTopicLight = "MCU_STROM/LightValue";
const char* inTopicValueRed = "MCU_STROM/ValueRed";
const char* inTopicValueSilver= "MCU_STROM/ValueSilver";
const char* inTopicDebugMode = "MCU_STROM/DebugMode";
int sensorValue;
int sensorValueRed;
int sensorValueSilver;
int sensorValueAutoCalibrationCheckTimes = 50;
int sensorValueRedAutoCalibration = 0;
int sensorValueRedAutoCalibrationTimes = 0;
int sensorValueSilverAutoCalibration = 0;
int sensorValueSilverAutoCalibrationTimes = 0;
boolean oRedDetected = false;
boolean oDebugMode = false;
unsigned long timeStamp = 0;
unsigned long timeStampForCheck = 0;
unsigned long timeToCheck = 25;
int nBufferCountRed = 0;
int nBufferCountSilver = 0;
void setup ()
{
Serial.begin (115200);
sensorValueRed = 58;
sensorValueSilver = 65;
// Turn on LED for contrast
pinMode(D1, OUTPUT);
digitalWrite(D1, HIGH);
Serial.println("Setup WiFi");
setup_wifi();
Serial.println("Setup Client");
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
Serial.println("Setup done");
}
void loop ()
{
if (!client.connected()) {
reconnect();
}
client.loop();
// read sensor every X milliseconds
if (millis() - timeStampForCheck > timeToCheck)
{
timeStampForCheck = millis();
// get value from sensor
sensorValue = analogRead (A0);
// Serial.println (sensorValue, DEC);
if (oDebugMode == true)
{
String sSensorValue = String(sensorValue);
client.publish(outTopicLight, (char*)sSensorValue.c_str());
Serial.println (sensorValue, DEC);
}
if (sensorValue <= sensorValueRed && oRedDetected == false)
{
if (nBufferCountRed >= 2)
{
oRedDetected = true;
// set bufferCount to 0. Used to check before setting trigger to False.
nBufferCountSilver = 0;
nBufferCountRed = 0;
// sent trigger value 1 to MQTT
String sTriggerCount = "1";
client.publish(outTopicTrigger, (char*)sTriggerCount.c_str());
Serial.print("timeStamp: ");
Serial.println(timeStamp);
// start counting for energy
if (timeStamp != 0)
{
unsigned long timeDiff = millis() - timeStamp;
Serial.print ("timeDiff: ");
Serial.println (timeDiff);
float timeDiffSec = timeDiff / 1000;
float energy = 0.006666 * (1/(timeDiffSec/3600));
Serial.print ("energy in kW: ");
Serial.println (energy);
// get in Watt
energy = energy * 1000;
String sCurrentPower = String(energy);
client.publish(outTopicPower, (char*)sCurrentPower.c_str());
// start auto calibration for red
if (sensorValueRedAutoCalibrationTimes >= sensorValueAutoCalibrationCheckTimes)
{
Serial.print("use sensorValueRedAutoCalibration [");
Serial.print(sensorValueRedAutoCalibration);
Serial.print("] for red calculation divided by [");
Serial.print(sensorValueAutoCalibrationCheckTimes);
Serial.print("] and base value: ");
Serial.println(sensorValueRed);
// calculate new red value
int sensorValueRedTemp = sensorValueRedAutoCalibration / sensorValueAutoCalibrationCheckTimes;
if (sensorValueRedTemp < sensorValueSilver)
{
// check if the RED value is below Silver - otherwise it will not work ; )
sensorValueRed = sensorValueRedTemp;
// add buffer to actual value
sensorValueRed = sensorValueRed + 3;
sensorValueRedAutoCalibration = 0;
Serial.print("new calculated sensorValueRed: ");
Serial.println(sensorValueRed);
sensorValueRedAutoCalibrationTimes = 0;
String sNewSensorValueRed = String(sensorValueRed);
client.publish(inTopicValueRed, (char*)sNewSensorValueRed.c_str());
}
else
{
// cleanup values.
sensorValueRedAutoCalibration = 0;
sensorValueRedAutoCalibrationTimes = 0;
}
}
else
{
// sum value to get average
sensorValueRedAutoCalibration = sensorValueRedAutoCalibration + sensorValue;
sensorValueRedAutoCalibrationTimes++;
Serial.print("have now sensorValueRedAutoCalibration [");
Serial.print(sensorValueRedAutoCalibration);
Serial.print("] for the [ ");
Serial.print(sensorValueRedAutoCalibrationTimes);
Serial.print("] run for current sensor value: ");
Serial.println(sensorValue);
}
}
timeStamp = millis();
}
else
{
nBufferCountRed++;
}
}
else if (sensorValue >= sensorValueSilver && oRedDetected == true)
{
// check 10 times before set trigger back to false
if (nBufferCountSilver >= 5)
{
nBufferCountSilver = 0;
nBufferCountRed = 0;
oRedDetected = false;
// start auto calibration for silver
if (sensorValueSilverAutoCalibrationTimes >= sensorValueAutoCalibrationCheckTimes)
{
// calculate new red value
Serial.print("use sensorValueSilverAutoCalibration [");
Serial.print(sensorValueSilverAutoCalibration);
Serial.print("] for silver calculation divided by [");
Serial.print(sensorValueAutoCalibrationCheckTimes);
Serial.print("] and base value: ");
Serial.println(sensorValueSilver);
int sensorValueSilverTemp = sensorValueSilverAutoCalibration / sensorValueAutoCalibrationCheckTimes;
if (sensorValueSilverTemp > sensorValueRed)
{
// check if SILVER is above red value
sensorValueSilver = sensorValueSilverTemp;
Serial.print("new calculated sensorValueSilver: ");
Serial.println(sensorValueSilver);
sensorValueSilverAutoCalibrationTimes = 0;
// add buffer to actual value
sensorValueSilver = sensorValueSilver - 3;
sensorValueSilverAutoCalibration = 0;
String sNewSensorValueSilver = String(sensorValueSilver);
client.publish(inTopicValueSilver, (char*)sNewSensorValueSilver.c_str());
}
else
{
sensorValueSilverAutoCalibration = 0;
sensorValueSilverAutoCalibrationTimes = 0;
}
}
else
{
// sum value to get average
sensorValueSilverAutoCalibration = sensorValueSilverAutoCalibration + sensorValue;
sensorValueSilverAutoCalibrationTimes++;
Serial.print("have now sensorValueSilverAutoCalibration [");
Serial.print(sensorValueSilverAutoCalibration);
Serial.print("] for the [ ");
Serial.print(sensorValueSilverAutoCalibrationTimes);
Serial.print("] run for current sensor value: ");
Serial.println(sensorValue);
}
}
else
{
nBufferCountSilver++;
}
}
}
}
void setup_wifi() {
delay(50);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.hostname("ESP_STROM");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
delay(500);
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("ESP_STROM")) {
Serial.println("connected");
client.subscribe(inTopicDebugMode);
client.subscribe(inTopicValueRed);
client.subscribe(inTopicValueSilver);
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 1,5 seconds");
// Wait 5 seconds before retrying
delay(1500);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
String sMessage = "";
for (int i=0;i<length;i++) {
Serial.print((char)payload[i]);
sMessage += (char)payload[i];
}
Serial.println();
if (strcmp (topic, inTopicValueRed) == 0 )
{
sensorValueRed = sMessage.toInt();
}
else if (strcmp (topic, inTopicValueSilver) == 0 )
{
sensorValueSilver = sMessage.toInt();
}
else if (strcmp (topic, inTopicDebugMode) == 0 )
{
oDebugMode = sMessage == "1";
Serial.print("oDebugMode ");
Serial.println(oDebugMode);
}
}
fhem Code:
## define Stromzähler NodeMCU MQTT Device
define MCU_STROM MQTT_DEVICE
attr MCU_STROM subscribeReading_CurrentPower MCU_STROM/CurrentPower
attr MCU_STROM subscribeReading_Trigger MCU_STROM/Trigger
attr MCU_STROM subscribeReading_LightValue MCU_STROM/LightValue
attr MCU_STROM subscribeReading_ValueRed MCU_STROM/ValueRed
attr MCU_STROM subscribeReading_ValueSilver MCU_STROM/ValueSilver
attr MCU_STROM publishSet_DebugMode MCU_STROM/DebugMode
attr MCU_STROM publishSet_ValueRed MCU_STROM/ValueRed
attr MCU_STROM publishSet_ValueSilver MCU_STROM/ValueSilver
define MCU_STROM_DEBUG dummy
attr MCU_STROM_DEBUG webCmd state
attr MCU_STROM_DEBUG setList state:on,off
define N_MCU_STROM_DEBUG_OM notify MCU_STROM_DEBUG:on set MCU_STROM DebugMode 1
define N_MCU_STROM_DEBUG_OFF notify MCU_STROM_DEBUG:off set MCU_STROM DebugMode 0
Viel Spaß und viele Grüße ; )
Christian
*Edit - Bugfix in der Auto-Calibration der Helligkeit des Sensors für Rot/Silber...*
Hallo zusammen,
ich verwende seit ein paar Wochen ebenfalls den TRCT5000 in Verbindung mit einem D1 Mini. Einbindung und Auswertung in FHEM funktioniert prima, leider funktioniert das Konstrukt immer nur wenige Tage, dann muss ich am Sensor die Empfindlichkeit neu justieren (Zähler wird meistens zu empfindlich und zählt dann auch Stellen die nicht rot markiert sind).
Anfangs dachte ich, es liegt am Klebeband welches sich immer wieder verschiebt. Das Gehäuse habe ich mittlerweile mit drei Heißklebepunkten fixiert und kann ausgeschlossen werden.
Kennt jemand vielleicht die Ursache? Den Sensor habe ich bereits getauscht, gleiches Ergebnis. Die Poti Einstellung habe ich nach einer justierung markiert, hier ändert sich zumindest optisch nichts, dennoch muss nachjustiert werden... Gibt es vielleicht noch bessere Sensoren?
Viele Grüße
huhu
Moin du brauchst doch nur den Thread hier durchlesen.
Zwar kein Fertig Sensor, aber funktioniert dafür bestens.
Gruß
Maui
Zitat von: dabuze am 09 Juli 2018, 20:12:29
Hallo mal wieder.
Ich hatte die letzten Tage bissi mehr zu tun und konnte nicht mehr wirklich basteln geschweige denn mich melden.
Einen Schaltplan habe ich mal gezeichnet und auch meinen aktuellen Quellcode werde ich anhängen. Evtl. kann jemand etwas damit anfangen.
Ganz nach dem Motto "der Schuster hat die schlechtesten Schuhe" den Quellcode mit Bedacht einsetzen wobei es mittlerweile echt gut läuft ;)
SourceCode:
#include "ESP8266WiFi.h"
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
#define D0 16
#define D1 5 // I2C Bus SCL (clock)
#define D2 4 // I2C Bus SDA (data)
#define D3 0
#define D4 2 // Same as "LED_BUILTIN", but inverted logic
#define D5 14 // SPI Bus SCK (clock)
#define D6 12 // SPI Bus MISO
#define D7 13 // SPI Bus MOSI
#define D8 15 // SPI Bus SS (CS)
#define D9 3 // RX0 (Serial console)
#define D10 1 // TX0 (Serial console)
// WiFi parameters
const char* ssid = "SID";
const char* password = "HierKönnteIhrPasswortStehen";
const char* mqtt_server = "Zahlen oder Hostname";
const char* outTopicPower = "MCU_STROM/CurrentPower";
const char* outTopicTrigger = "MCU_STROM/Trigger";
const char* outTopicLight = "MCU_STROM/LightValue";
const char* inTopicValueRed = "MCU_STROM/ValueRed";
const char* inTopicValueSilver= "MCU_STROM/ValueSilver";
const char* inTopicDebugMode = "MCU_STROM/DebugMode";
int sensorValue;
int sensorValueRed;
int sensorValueSilver;
int sensorValueAutoCalibrationCheckTimes = 50;
int sensorValueRedAutoCalibration = 0;
int sensorValueRedAutoCalibrationTimes = 0;
int sensorValueSilverAutoCalibration = 0;
int sensorValueSilverAutoCalibrationTimes = 0;
boolean oRedDetected = false;
boolean oDebugMode = false;
unsigned long timeStamp = 0;
unsigned long timeStampForCheck = 0;
unsigned long timeToCheck = 25;
int nBufferCountRed = 0;
int nBufferCountSilver = 0;
void setup ()
{
Serial.begin (115200);
sensorValueRed = 58;
sensorValueSilver = 65;
// Turn on LED for contrast
pinMode(D1, OUTPUT);
digitalWrite(D1, HIGH);
Serial.println("Setup WiFi");
setup_wifi();
Serial.println("Setup Client");
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
Serial.println("Setup done");
}
void loop ()
{
if (!client.connected()) {
reconnect();
}
client.loop();
// read sensor every X milliseconds
if (millis() - timeStampForCheck > timeToCheck)
{
timeStampForCheck = millis();
// get value from sensor
sensorValue = analogRead (A0);
// Serial.println (sensorValue, DEC);
if (oDebugMode == true)
{
String sSensorValue = String(sensorValue);
client.publish(outTopicLight, (char*)sSensorValue.c_str());
Serial.println (sensorValue, DEC);
}
if (sensorValue <= sensorValueRed && oRedDetected == false)
{
if (nBufferCountRed >= 2)
{
oRedDetected = true;
// set bufferCount to 0. Used to check before setting trigger to False.
nBufferCountSilver = 0;
nBufferCountRed = 0;
// sent trigger value 1 to MQTT
String sTriggerCount = "1";
client.publish(outTopicTrigger, (char*)sTriggerCount.c_str());
Serial.print("timeStamp: ");
Serial.println(timeStamp);
// start counting for energy
if (timeStamp != 0)
{
unsigned long timeDiff = millis() - timeStamp;
Serial.print ("timeDiff: ");
Serial.println (timeDiff);
float timeDiffSec = timeDiff / 1000;
float energy = 0.006666 * (1/(timeDiffSec/3600));
Serial.print ("energy in kW: ");
Serial.println (energy);
// get in Watt
energy = energy * 1000;
String sCurrentPower = String(energy);
client.publish(outTopicPower, (char*)sCurrentPower.c_str());
// start auto calibration for red
if (sensorValueRedAutoCalibrationTimes >= sensorValueAutoCalibrationCheckTimes)
{
Serial.print("use sensorValueRedAutoCalibration [");
Serial.print(sensorValueRedAutoCalibration);
Serial.print("] for red calculation divided by [");
Serial.print(sensorValueAutoCalibrationCheckTimes);
Serial.print("] and base value: ");
Serial.println(sensorValueRed);
// calculate new red value
int sensorValueRedTemp = sensorValueRedAutoCalibration / sensorValueAutoCalibrationCheckTimes;
if (sensorValueRedTemp < sensorValueSilver)
{
// check if the RED value is below Silver - otherwise it will not work ; )
sensorValueRed = sensorValueRedTemp;
// add buffer to actual value
sensorValueRed = sensorValueRed + 3;
sensorValueRedAutoCalibration = 0;
Serial.print("new calculated sensorValueRed: ");
Serial.println(sensorValueRed);
sensorValueRedAutoCalibrationTimes = 0;
String sNewSensorValueRed = String(sensorValueRed);
client.publish(inTopicValueRed, (char*)sNewSensorValueRed.c_str());
}
else
{
// cleanup values.
sensorValueRedAutoCalibration = 0;
sensorValueRedAutoCalibrationTimes = 0;
}
}
else
{
// sum value to get average
sensorValueRedAutoCalibration = sensorValueRedAutoCalibration + sensorValue;
sensorValueRedAutoCalibrationTimes++;
Serial.print("have now sensorValueRedAutoCalibration [");
Serial.print(sensorValueRedAutoCalibration);
Serial.print("] for the [ ");
Serial.print(sensorValueRedAutoCalibrationTimes);
Serial.print("] run for current sensor value: ");
Serial.println(sensorValue);
}
}
timeStamp = millis();
}
else
{
nBufferCountRed++;
}
}
else if (sensorValue >= sensorValueSilver && oRedDetected == true)
{
// check 10 times before set trigger back to false
if (nBufferCountSilver >= 5)
{
nBufferCountSilver = 0;
nBufferCountRed = 0;
oRedDetected = false;
// start auto calibration for silver
if (sensorValueSilverAutoCalibrationTimes >= sensorValueAutoCalibrationCheckTimes)
{
// calculate new red value
Serial.print("use sensorValueSilverAutoCalibration [");
Serial.print(sensorValueSilverAutoCalibration);
Serial.print("] for silver calculation divided by [");
Serial.print(sensorValueAutoCalibrationCheckTimes);
Serial.print("] and base value: ");
Serial.println(sensorValueSilver);
int sensorValueSilverTemp = sensorValueSilverAutoCalibration / sensorValueAutoCalibrationCheckTimes;
if (sensorValueSilverTemp > sensorValueRed)
{
// check if SILVER is above red value
sensorValueSilver = sensorValueSilverTemp;
Serial.print("new calculated sensorValueSilver: ");
Serial.println(sensorValueSilver);
sensorValueSilverAutoCalibrationTimes = 0;
// add buffer to actual value
sensorValueSilver = sensorValueSilver - 3;
sensorValueSilverAutoCalibration = 0;
String sNewSensorValueSilver = String(sensorValueSilver);
client.publish(inTopicValueSilver, (char*)sNewSensorValueSilver.c_str());
}
else
{
sensorValueSilverAutoCalibration = 0;
sensorValueSilverAutoCalibrationTimes = 0;
}
}
else
{
// sum value to get average
sensorValueSilverAutoCalibration = sensorValueSilverAutoCalibration + sensorValue;
sensorValueSilverAutoCalibrationTimes++;
Serial.print("have now sensorValueSilverAutoCalibration [");
Serial.print(sensorValueSilverAutoCalibration);
Serial.print("] for the [ ");
Serial.print(sensorValueSilverAutoCalibrationTimes);
Serial.print("] run for current sensor value: ");
Serial.println(sensorValue);
}
}
else
{
nBufferCountSilver++;
}
}
}
}
void setup_wifi() {
delay(50);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.hostname("ESP_STROM");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
delay(500);
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("ESP_STROM")) {
Serial.println("connected");
client.subscribe(inTopicDebugMode);
client.subscribe(inTopicValueRed);
client.subscribe(inTopicValueSilver);
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 1,5 seconds");
// Wait 5 seconds before retrying
delay(1500);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
String sMessage = "";
for (int i=0;i<length;i++) {
Serial.print((char)payload[i]);
sMessage += (char)payload[i];
}
Serial.println();
if (strcmp (topic, inTopicValueRed) == 0 )
{
sensorValueRed = sMessage.toInt();
}
else if (strcmp (topic, inTopicValueSilver) == 0 )
{
sensorValueSilver = sMessage.toInt();
}
else if (strcmp (topic, inTopicDebugMode) == 0 )
{
oDebugMode = sMessage == "1";
Serial.print("oDebugMode ");
Serial.println(oDebugMode);
}
}
fhem Code:
## define Stromzähler NodeMCU MQTT Device
define MCU_STROM MQTT_DEVICE
attr MCU_STROM subscribeReading_CurrentPower MCU_STROM/CurrentPower
attr MCU_STROM subscribeReading_Trigger MCU_STROM/Trigger
attr MCU_STROM subscribeReading_LightValue MCU_STROM/LightValue
attr MCU_STROM subscribeReading_ValueRed MCU_STROM/ValueRed
attr MCU_STROM subscribeReading_ValueSilver MCU_STROM/ValueSilver
attr MCU_STROM publishSet_DebugMode MCU_STROM/DebugMode
attr MCU_STROM publishSet_ValueRed MCU_STROM/ValueRed
attr MCU_STROM publishSet_ValueSilver MCU_STROM/ValueSilver
define MCU_STROM_DEBUG dummy
attr MCU_STROM_DEBUG webCmd state
attr MCU_STROM_DEBUG setList state:on,off
define N_MCU_STROM_DEBUG_OM notify MCU_STROM_DEBUG:on set MCU_STROM DebugMode 1
define N_MCU_STROM_DEBUG_OFF notify MCU_STROM_DEBUG:off set MCU_STROM DebugMode 0
Viel Spaß und viele Grüße ; )
Christian
*Edit - Bugfix in der Auto-Calibration der Helligkeit des Sensors für Rot/Silber...*
Die Lösung scheint interessant, ich gebe es auf mit dem TRCT5000...
Welche Widerstände werden benötigt und wie hell sollte die grüne LED sein?
Viele Grüße
huhu
Zitat von: huhu am 11 Juli 2019, 09:32:19
Die Lösung scheint interessant, ich gebe es auf mit dem TRCT5000...
Welche Widerstände werden benötigt und wie hell sollte die grüne LED sein?
Viele Grüße
huhu
Moin. Ich meine die Widerstände habe ich grob wie im Link unter #13 gewählt. LED sollte halt irgendwo bei 200-300 liegen.
Ich habe einfach eine ziemlich helle grüne von CONRAD damals genommen. So teuer sind die ja nicht und du stellst ja die Flanken selbst ein.
Ich würde einfach 1-2 kaufen und ausprobieren. (Bei Reichelt ist mEn immer noch Versand frei bei Bezahlung mit paydirekt)
Gruß
Maui
Zitat von: Maui am 11 Juli 2019, 13:56:54
Bei Reichelt ist mEn immer noch Versand frei bei Bezahlung mit paydirekt.
stimmt, bis 17.07. (https://www.reichelt.de/paydirekt-l1911.html?r=1)
Gruß Peter
Besten Dank!
LED und Fototransistor habe ich, allerdings bin ich mir unsicher welchen Widerstand ich brauche? Auf was muss ich achten, bzw wie kann ich errechnen welcher Widerstand passt?
Danke&Grüße
huhu
Moin. ich würde da keine Raketen Wissenschaft draus machen.
Die LED würde auch ohne Widerstand laufen aber nimm 200 oder 300.
und beim Transistor würde ich einfach wie erwähnt einen 100k Widerstand nehmen.
Ich denke bei der LED ist das halt nur als Vorwiderstand und beim Transistor ein Pull-Up der einfach gross sein muss.
Aber nagel mich nicht auf mein Halbwissen fest.
Danke,
ich habe mal ein paar bestellt!
Benutzt du als Basis den TCRT5000 noch wie bei stall.biz beschrieben?
Funktioniert das ganze auch mit einem D1 Mini?
Mein aktuelles Setup in fhem (ElectricityCalculator) ist nicht mehr nutzbar?
Viele Grüße
huhu
ne ich nutze das mit D1 Mini.
klar in fhem brauchst nicht viel ändern nur ein neues device mit den passenden mqtt subscribes.
kannst weiterhin electr. calc. nehmen.
Morgen Maui,
klingt gut, momentan ist ESPEasy auf dem D1 Mini. Kann man das Device über die GUI zusammenbauen, oder wäre es besser hier den Source Code zu verwenden?
Viele Grüße
huhu
Das wirst du mit espEasy oder tasmota nicht hinbekommen.
Musst den Code aufspielen.
Habe ich noch nie gemacht, wie stelle ich das am besten an?
Viele Grüße
huhu
Am besten mit Arduino IDE.
Am besten du googelst einfach mal nach anleitungen oder guckst bei youtube.
Und wenn du konkrete Fragen noch hast dann schiess einfach los ;)
Flashen hat funktioniert, danke :)
Und schon die nächste Frage, an welchen Port muss der Transistor angeschlossen werden? 5V und Ground klar, welcher ist für data?
Werde aus dem Sketch nicht schlau.
Edit: Anschlussplan gefunden ;)
Viele Grüße
huhu
Wer suchet...,
Wenn alles klappt musst du nur noch die Schwellen einstellen und den MQTT Server festlegen.
Gruß
Bei mir schwankt der Wert zwischen 4 und 5 nur, egal ob mit oder ohne grüne LED.
Beim D1Mini wird auch A0 verwendet?
FT kurzes Bein - Widerstand - Ground + A0
FT langes Bein - 3.3V
LED kurzes Bein - Widerstand - Ground
LED langes Bein - 3.3V
Schau dir das ganze mal im serial plotter direkt an pc angeschlossen an.
Und dann mach einen Staubsauger oä Fresser an ;)
Soweit bin ich noch nicht ;)
LightValue sollte sich auch ohne Ferraris ändern je nach Farbe/Untergrund?
Ja müsste. Schon lange her aber Hand drauf (abdunkeln) und Handy LED sollten einen Unterschied ausmachen.
hmm also LightValue bleibt bei mir immer bei 4, manchmal ganz kurz 5. CurrentPower dagegen ändert sich... Meines Erachtens sollte sich doch LightValue ändern, damit ich bestimmen kann was rot und silber ist? Oder habe ich da einen Denkfehler?
Wie ist denn dein aktuelles Setup?
Ich denke du machst es dir zu schwer grad.
Hast du ein laptop?
Dann setz dich mit wemos angeschlossen (und bier) vor den Zähler und nutze den serial monitor oder besser plotter.
Kann sein dass du den debug mode im code auf true setzen musst (ist echt lange her).
Wenn du das alles erst mal am Schreibtisch testen willst dann mach den Test mit serial eben da. ;)
Es ist immer schön, wenn man schreibt ob es geklappt hat oder man das Projekt an den Nagel gehängt hat.
Zumindest für die Motivation beim nächsten mit Problemen zu antworten.
Hallo Gemeinde,
ich hab mal die suche hier bemüht.
Zu meiner Frage denn passendestn Fred, meine ich diesen hier gefunden zu haben.
Ich hab den TCRT5000 erfolgreich am Zähler. Er findet valide die rote Markeirung
Frage: weiviel Strom ist verbraucht, wenn das Rad eine Runde gedreht hat?
Steht doch auf dem Zähler.
Gängig sind 55/75/96 U pro KWh.
Gönne dir das der tcrt ordentlich zählt aber bezweifel es. Der rät leider (bei mir) nur und war nicht zu gebrauchen.
OK danke
naja ... da steht sehr viel drauf
wenn man weiss dass eine Angabe 96 U/kwh sich darauf bezieht dann ist es klar