Hi Rainer,
HIER ist die Abfrage des Analogports aufgeführt.
Ich nutze für das Übertragen der Daten als Controler immer „DOMOTICS HTTP“
![Controler.png](https://community.symcon.de/uploads/default/original/3X/f/1/f146d6d19bf9c8346d00e0f1bf8a1bb1b49285c7.png)
und dann brauchst Du in IPS nur noch einen Server Socket zu erstellen bei welchem die Daten dann im eingestelltem Intervall eintrudeln. Weiter an eine Registervariable, welche dann den Zuweisungsscript aufruft.
Für ADC nutze ich einen 270 K und einen 10 K gegen Gnd, so kommt in etwa ein Messbereich bis 30 Volt heraus.
Den Wert in der Formel kann man wunderbar anhand der eigenen Messungen berechnen. So kommt dann sofort der hoffentlich richtig errechnete Wert an und kein Rohwert mit 10 Bit. Übrigens bitte beachten, der Eingang mag nur knapp über 1 Volt.
TIP: schöner flutscht es mit einem INA 219.
Da gibt es U, I und P in einem Rutsch. Leider ist momentan noch ein Bug drin:
erkennt zwar 4 unterschiedliche Adressen, es wird aber aktiv nur EINE verarbeitet.
Im WebFront sieht es für den Akku dann so aus wenn ab und zu mal eine 3 Watt LED dran gebaumelt wird:
Es handelt sich um ein 12V 20WhP Solarmodul mit billigem PWM Laderegler und einem 12V 7Ah Bleiakku.
Total überdimensioniert für den ESP Dauerbetrieb,
jammert immer danach noch mal ein paar schöne WS2812 LED Streifen zu bekommen.
Als nächstes kommt erst mal etwas PIRI.
Ich füge mal ein Auswertescript bei, es dient Sonoff Pows, welche ESPEasy über gebügelt bekamen.
ACHTUNG!! NICHT die Datei aus dem Playground verwenden, es gibt noch einen offenen Pull Request, diesen nutzen da er bei einem Neustart die kalibrierten Werte wieder verwendet und nicht die „Werksseitigen“.
Nicht auf vernünftigen Programmierstil ausgelegt, quick and dirty zusammen geballert; aber es flutscht.
In diesem Falle sogar mit z. Zt. 13 Stück über einen Port.
Die Energiewerte werden nicht geliefert, daher erfolgt die Erfassung diesbezüglich innerhalb von IPS.
<?
//IPS_LogMessage("Sender ", $_IPS['SENDER']);
// von den ESP´s werden die Daten alle 10 Sekunden gesendet
$Intervall = 10;
// bei den einzelnen Einheiten werden dann der Zählerstand erst gelesen, berechnet und zurück geschrieben
if ($_IPS['SENDER'] == 'RegisterVariable'){
$data = $_IPS['VALUE'];
$Prefix1 = "&idx="; // damit fängt der Datensatz an
$Suffix1 = "&";
$Prefix2 = "&svalue="; // damit fängt der Datensatz an
$Suffix2 = "HTTP/1.1";
$Separator2 = ";";
$Prefix3 = "&switchcmd="; // damit fängt der Datensatz an
$Suffix3 = "HTTP/1.1";
//$Ende1nachZeichen = 2; // und ist xx Zeichen lang
$AnfangID = strlen($Prefix1)+(strpos($_IPS['VALUE'], $Prefix1));
$EndeID = strpos($_IPS['VALUE'], $Suffix1, $AnfangID+1);
$ID = substr($_IPS['VALUE'], $AnfangID, $EndeID-$AnfangID);
$AnfangValue = strlen($Prefix2)+(strpos($_IPS['VALUE'], $Prefix2));
$EndeValue = strpos($_IPS['VALUE'], $Suffix2, $AnfangValue);
$Value = substr($_IPS['VALUE'], $AnfangValue, $EndeValue-$AnfangValue-1);
$AnfangSubValue2 = strpos($Value, $Separator2);
$AnfangSubValue3 = strpos($Value, $Separator2, $AnfangSubValue2+1);
$AnfangSubValue4 = strpos($Value, $Separator2, $AnfangSubValue3+1);
$Value1 = substr($Value, 0,$AnfangSubValue2);
$Value2 = substr($Value, $AnfangSubValue2+1, $AnfangSubValue3-$AnfangSubValue2-1);
$Value3 = substr($Value, $AnfangSubValue3+1, $AnfangSubValue4-$AnfangSubValue3-1);
$Value4 = substr($Value, $AnfangSubValue4+1);
$AnfangSw = strlen($Prefix3)+(strpos($_IPS['VALUE'], $Prefix3));
$EndeSw = strpos($_IPS['VALUE'], $Suffix3, $AnfangSw);
$Switch = substr($_IPS['VALUE'], $AnfangSw, $EndeSw-$AnfangSw-1);
//IPS_LogMessage("Switch roh: ", $Switch);
if($Switch == "On"){
$Switch = true;
}else{
$Switch = false;
}
switch ($ID) {
case "11":
SetValue(31926 /*[Technik\Energieerfassung\Sonoff\Pow-1 Waschmaschine Hauswirtschaftsraum\Spannung]*/, $Value1);
SetValue(48649 /*[Technik\Energieerfassung\Sonoff\Pow-1 Waschmaschine Hauswirtschaftsraum\Strom]*/, $Value2);
SetValue(56466 /*[Technik\Energieerfassung\Sonoff\Pow-1 Waschmaschine Hauswirtschaftsraum\Leistung]*/, $Value3);
$IDZähler = 12378 /*[Technik\Energieerfassung\Sonoff\Pow-1 Waschmaschine Hauswirtschaftsraum\Energie]*/;
$alterStand = GetValueFloat($IDZähler);
$neuerStand = $alterStand + ($Value3/3600*$Intervall/1000);
SetValueFloat($IDZähler, $neuerStand);
SetValue(45856 /*[Technik\Energieerfassung\Sonoff\Pow-1 Waschmaschine Hauswirtschaftsraum\Power Factor]*/, $Value4);
break;
case "12":
SetValueBoolean(59057 /*[Technik\Energieerfassung\Sonoff\Pow-1 Waschmaschine Hauswirtschaftsraum\Taster]*/, $Switch);
break;
case "13":
SetValueBoolean(38624 /*[Technik\Energieerfassung\Sonoff\Pow-1 Waschmaschine Hauswirtschaftsraum\Steckdose]*/, $Switch);
break;
case "14":
SetValueBoolean(18717 /*[Technik\Energieerfassung\Sonoff\Pow-1 Waschmaschine Hauswirtschaftsraum\blaue LED]*/, $Switch);
break;
case "19":
SetValueInteger(36159 /*[Technik\Energieerfassung\Sonoff\Pow-1 Waschmaschine Hauswirtschaftsraum\Uptime]*/, $Value);
break;
case "51":
SetValue(47857 /*[Technik\Energieerfassung\Sonoff\Pow-5 TV unten\Spannung]*/, $Value1);
SetValue(52150 /*[Technik\Energieerfassung\Sonoff\Pow-5 TV unten\Strom]*/, $Value2);
// nur Leistungswerte erfassen wenn das Relais auch eingeschaltet ist
if (GetValueBoolean(57819 /*[Technik\Energieerfassung\Sonoff\Pow-5 TV unten\TV]*/) == true) {
SetValue(16754 /*[Technik\Energieerfassung\Sonoff\Pow-5 TV unten\Leistung]*/, $Value3);
$IDZähler = 34786 /*[Technik\Energieerfassung\Sonoff\Pow-5 TV unten\Energie]*/;
$alterStand = GetValueFloat($IDZähler);
$neuerStand = $alterStand + ($Value3/3600*$Intervall/1000);
SetValueFloat($IDZähler, $neuerStand);}
SetValue(41064 /*[Technik\Energieerfassung\Sonoff\Pow-5 TV unten\Power Factor]*/, $Value4);
break;
case "52":
SetValueBoolean(51530 /*[Technik\Energieerfassung\Sonoff\Pow-5 TV unten\Taster]*/, $Switch);
break;
case "53":
SetValueBoolean(57819 /*[Technik\Energieerfassung\Sonoff\Pow-5 TV unten\TV]*/, $Switch);
break;
case "54":
SetValueBoolean(59098 /*[Technik\Energieerfassung\Sonoff\Pow-5 TV unten\blaue LED]*/, $Switch);
break;
case "59":
SetValueInteger(56525 /*[Technik\Energieerfassung\Sonoff\Pow-5 TV unten\Uptime]*/, $Value);
break;
}
}
?>
Achja: die Werte in den Case Anweisungen sind die IDX Werte welche in den Devices von eiinem selbst vergeben werden.
Hier direkt im Device zu finden unter IDX
Es können mittlerweile bis zu 3 Controler erstellt werden.
Falls jemand Bock und freie Zeit über hat: Ein Modul dazu wäre geil.
die letzten 10 Pows gab´s im EK unter 10 USD; so billig war bisher kein Energiemessgerät.
5-fach Verteilersteckdose:
Kabel zum Stecker mittig trennen,
alle 6 Adern abisolieren und Aderendhülsen drauf,
runter klemmen, Deckel druff und schon kann das Kalibrieren erfolgen!
mfg
BerndJ