TCRT5000­ erkennt Ferraris Scheibe nicht - was kann ich tun?

Begonnen von dabuze, 27 Juni 2018, 19:11:30

Vorheriges Thema - Nächstes Thema

dabuze

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


JoWiemann

Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

dabuze

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?

Otto123

Ich denke einfach um 90° drehen  ::)

Bei mir läuft seit diesem Artikel diese temporäre Lösung stabil. Einzig das Panzerband ist gegen Powerstrip getauscht.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

alpha1974

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

FHEM/Z-Wave USB-Dongle + div. Devices

dabuze

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.

alpha1974

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
FHEM/Z-Wave USB-Dongle + div. Devices

Shojo

Ich habe das auch mit den TCRT5000­ umsetzten können, war recht fummelig lauft aber nun sehr zuverlässig :) 

Gruß
Dennis
FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

PeMue

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
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

Shojo

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
FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

dabuze

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

alpha1974

Gibt es nähere Details (Schaltplan/Bestückung) der Variante Grüne LED + Photozelle?

Gesendet mit einem ortsungebundenen Telefonapparat via Tapatalk

FHEM/Z-Wave USB-Dongle + div. Devices

dabuze

#12
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...*


Maui

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.

dabuze

#14
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")).'' }