Optimierung Windsensor Daten / Auslesen

Hallo,

ich habe den Eltako Windsensor an einem DS2423 Counter. Der Windsensor hat ein Reedkontakt und gibt 2 Impulse pro Umdrehung. Der DS2423 wird jede Sekunde von IPS ausgelesen und die Daten werden aufgezeichnet.

<?
$archiveID = 37914 /*[Archive]*/ ;   // Archive-Handler-ID
$objectID = 58262 /*[DS2423 4k NV RAM memory with external counters\Zähler (2)]*/; // Variablen-ID
$ende = time(); // JETZT
$start_1s = time()-(1); // Datenbank auslesen ab 1 Sek vor JETZT


//echo date("H:i:s")."
";


$now =Getvalue(58262 /*[DS2423 4k NV RAM memory with external counters\Zähler (2)]*/);
//echo $now."
";

 //Abfrage 1 Sek
$buffer_1s = AC_GetLoggedValues($archiveID, $objectID, $start_1s, $ende, 2);
//print_r(AC_GetLoggedValues($archiveID, $objectID, $start_1h, $ende, 0));
$anzahl = count($buffer_1s);
$wert = $buffer_1s[$anzahl-1];
$ts = $wert["TimeStamp"];
$value1 = $wert["Value"];
//echo $value1 ."
";


$rpsroh= $now-$value1;

//echo $rpsroh ."
";


$rps = $rpsroh/2;


$vroh = 1.761 / (1 + $rps) + 3.013 * $rps;   //v [km/h]
$v =round($vroh, 2);

setvalue(12546 /*[Wetter\Windmesser\Winddata 1sec.]*/, $v);


?>

Hat jemand eine Idee, wie ich die Daten automatisch aus dem Archiv löschen kann oder vielleicht einen ganz anderen Ansatz für mich, um weniger Ressourcen und Daten-Müll zu erzeugen.

LG Izack

ich weiss ja nicht was du unter Müll verstehst…
Mein rudimentäres Auslesen eines Somfy Windsensors mit dem Eservice DS2423… läuft seit Jahren zuverlässig:

Einige Sets könnte man weglassen… die Debugs raus…

$debug = false;

//Berechung der Windgeschwindigkeit
$Faktor_Windrad = 71.00; //70,83 Impulse = 1m/s bei 30 sek. Einlesezyklus

//Drehzahl Windrad (4 Impulse pro Umdrehung)
$counter = $_IPS['OLDVALUE']; // Impulse Windrad einlesen - Alter Wert
$counter_neu = $_IPS['VALUE']; // Impulse Windrad - Neuer Wert
$delta = $counter_neu - $counter; //Neuer Wert minus Alter Wert
SetValueInteger(59050 /*[Haus\Wind\Werte\1-wire DS2423 Windzaehler\Zähler Wind \Differenz Alt - Neu]*/, $delta ); //Ausgabe "Differenz Alt-Neu"
SetValueInteger(41822 /*[Haus\Wind\Werte\1-wire DS2423 Windzaehler\Zähler Wind \Zwischensp.]*/, $counter ); //Alte Impulse des Windrads ablegen "Counter"
if($debug) {echo "Counter-alt: $counter
";}
if($debug) {echo "Wind-Delta: $delta
";}

//Berechnung Einspeisung pro Stunde
$delta_wind = ((($delta / $Faktor_Windrad) * 3600)/1000) ; //0.00285
$delta_wind_ms = $delta / $Faktor_Windrad;
$round_delta_wind = round ($delta_wind, 1); // auf 1 Stellen runden
$round_delta_wind_ms = round ($delta_wind_ms, 1); // auf 1 Stellen runden

SetValueString (52346 /*[Haus\Wind\Werte\1-wire DS2423 Windzaehler\Zähler Wind \Wind km/h]*/, $round_delta_wind. " Km/h"); // "Windmesser km/h"
SetValueInteger (57196 /*[Haus\Wind\Werte\1-wire DS2423 Windzaehler\Zähler Wind \Wind m/s]*/, $round_delta_wind_ms); // "Windstatus m/s"
SetValueFloat (15146 /*[Haus\Wind\Werte\1-wire DS2423 Windzaehler\Zähler Wind \Delta Wind - Abfrage]*/ , $round_delta_wind); // "Delta Wind - Abfrage"
if($debug) {echo "Windgeschwindigkeit aktuell:
 Km/h: $round_delta_wind
 m/s: $delta_wind_ms ";}

Können sie mir ein Bildschirmfoto von den Variablen und Ereignissen schicken damit ich mehr mit dem PHP Skript anfangen kann. Bin ganz neu :slight_smile:
LG

Meins ist kein Paradebeispiel. Das stammt aus meinem IPS Anfang - und läuft überraschend zuverlässig :slight_smile:

Wenn man einen 1Wire s0 Zähler für Wind hat, und man damit Jalousien schützen will, muss man auch daran denken, dass der Zähler -während eines Neustarts von IPS- weiterläuft.
D.h. wenn man IPS öfter durchstartet, sollte man sich eine Hilfsvariable setzen, die das Windwächterskript z.b. die ersten 5 Minuten nach Neustart nicht ausführt… Nur so als Tipp.
Das hatte ich zu Windows Zeiten nötig, aufgrund der vielen Windows Neustarts (Windows Updates / Virenscanner Updates…)… Da bin ich inzwischen für den Rasperry PI dankbar, der evtl. einmal im Jahr nach nem Upgrade durchgestartet wird :wink:

Vielen Dank erstmal !
Leider ist für mich nicht der vollständige Pfad von den Ereignissen nicht sichtbar, welche Variablen er ändert.
Sind das 2 gleiche Skripte Wind umrechner und Abfrage Skript?

LG Deltaspeed

Hier der komplette Screen:

Das Umrechnungsskript ist eigentlich nicht notwendig. Der 1 Wire Sensor liefert Meter pro Sekunde.
Die km/h Umrechnungen habe ich nur fürs Webfront gemacht, damit man sieht, dass es 60km/h hat und deshalb die Jalousien hochfahren :smiley:
Hier das Umrechnungsskript. Mehrere km/h Werte sind nur der Optik geschuldet.

<?
$basiswert = GetValueInteger(57196 /*[Haus\Wind\Werte\1-wire DS2423 Windzaehler\Zähler Wind \Wind m/s]*/);
$umrechnung = $basiswert * 3.6;
$runden_umrechnung=round ($umrechnung, 1);
SetValueInteger(53938 /*[Haus\Wind\Werte\1-wire DS2423 Windzaehler\Zähler Wind \Wind in km/h]*/,$runden_umrechnung);
SetValueInteger(30684 /*[Haus\Wind\Werte\1-wire DS2423 Windzaehler\Zähler Wind \Wind in km/h für Webfront]*/,$runden_umrechnung);
?>

Und hier das Emailskript damit ich ne Nachricht bekomme:

Mit Skripttimer damit man nur alle 2 Std. ne Nachricht bekommt…
Gerade wenn es stürmt, wird man sonst mit Emails zugeschüttet…

<?
$altkueche = GetValueInteger(21986 /*[Haus\EG\Details\1.Küche Raffstore\100% oben - 0 % unten]*/);
$altessen = GetValueInteger(51374 /*[Haus\EG\Details\2.Essen Raffstore (Türe)\100% oben - 0% unten]*/);
$altwohnen = GetValueInteger(44727 /*[Haus\EG\Details\3.Wohnen Raffstore\100% oben - 0% unten]*/);
$wind_ms = GetValueInteger(57196 /*[Haus\Wind\Werte\1-wire DS2423 Windzaehler\Zähler Wind \Wind m/s]*/);
$wind_kmh = GetValueString(52346 /*[Haus\Wind\Werte\1-wire DS2423 Windzaehler\Zähler Wind \Wind km/h]*/);
$uhrzeit = date("H:i.s");
$mailgesendet = GetValueBoolean(40027 /*[Haus\Wind\Werte\1-wire DS2423 Windzaehler\Zähler Wind \Mail gesendet]*/);


if ($mailgesendet == false and ($wind_ms >= 13)) {
   // Falls Email noch nicht gesendet + Wind über 14m/s erreicht hat
   // Danach wird ein Timer gesetzt der nach 2 Std. "Mail gesendet" wieder auf FALSE setzt
       IPS_SetScriptTimer($IPS_SELF, 120 * 60);   // 120 x 60 Sekunden = 120 Minuten
       ZW_SwitchMode(10762 /*[Haus\Licht\Aussenlampe\Schalter Aussenlampe]*/, true);
       SetValueBoolean(40027 /*[Haus\Wind\Werte\1-wire DS2423 Windzaehler\Zähler Wind \Mail gesendet]*/, TRUE);
		 $mailcontent = "Der Wind hat um $uhrzeit die Windstaerke $wind_ms m/s bzw. $wind_kmh km/h erreicht.
Die Jalousien stehen derzeit auf
Kueche: $altkueche, Essen: $altessen, Wohnen: $altwohnen 
(0 = zu/unten)
(100 = oben)";
		 SMTP_SendMail(26464 /*[sonstiges\Ueberwachung_Email\E-Mail senden (SMTP)]*/, "Skript 1 - Wind ueberschreitet Grenzwert", "$mailcontent");
}

if ($IPS_SENDER == "TimerEvent") {
    IPS_SetScriptTimer($IPS_SELF, 0);
    SetValueBoolean(40027 /*[Haus\Wind\Werte\1-wire DS2423 Windzaehler\Zähler Wind \Mail gesendet]*/, FALSE);
	 }
?>