Diesen möchte ich in das Homematic Wired System einbinden um die Impulse zu dedektieren.
Müsste mit dem Homematic Wired RS485 Schließerkontakt ( HMW-Sen-SC-12-DR ) funktionieren??
Du brauchst einen Baustein der Impulse zählen kann. Das beschriebene Gerät kann dies nicht, soweit ich erkennen kann. Du kannst aber natürlich diese Funktionalität auch in IPS (oder der Homematic Zentrale) umsetzen.
Wenn du die Rechenlogik in IPS umsetzen willst sollte das gehen. Vorausgesetzt, die Impulse kommen nicht in zu hoher Frequenz an. Aber bei einem Impuls alle paar Sekunden bis Minuten sollte das ja gehen.
ich habe nun den Regenmesser an den Homematic HMW-Sen-SC-12-DR Schliesserkontakt angeschlossen.
Wenn der Messlöffel auslöst, wird dies auch übertragen.
Jedoch habe ich zur auswahl ja nur „true“ oder „false“.
Wie schaffe ich es, das ich die jeweilige auslösung des Kipplöffel in eine „anzahl“ logge?
Pro Auslösung des Kipplöffel wird 1mm Niederschlag registriert.
<?php
// ID der Homematic Statusvariable, die die Reedkontakt-Meldungen erhält (true/false)
$reedkontaktID = 12345; // Ersetze dies mit der ID deiner Reedkontakt-Variable
// ID der Zählervariable (Integer), die die Anzahl der Impulse speichert
$zaehlerID = 67890; // Ersetze dies mit der ID deiner Zählervariable
// ID der Niederschlagsmenge-Variable (Float), die den täglichen Niederschlag speichert
$regenmengeID = 11111; // Ersetze dies mit der ID deiner Niederschlagsmengen-Variable
// Wert für 1mm Niederschlag (kann je nach Regenmesser angepasst werden)
$impuls_pro_mm = 1; // 1 Impuls entspricht 1 mm Niederschlag
// Aktueller Status des Reedkontakts
$reedStatus = GetValueBoolean($reedkontaktID);
// Wenn der Reedkontakt "true" ist (Wasser kippt ab), dann einen Impuls zählen
if ($reedStatus) {
// Impulszähler um 1 erhöhen
$zaehler = GetValueInteger($zaehlerID);
$zaehler++;
SetValueInteger($zaehlerID, $zaehler);
// Niederschlagsmenge aktualisieren
$regenmenge = $zaehler / $impuls_pro_mm;
SetValueFloat($regenmengeID, $regenmenge);
}
// Täglichen Reset einrichten (optional, um den Zähler täglich zurückzusetzen)
$heutigesDatum = date("Y-m-d");
$speicherDatumID = 22222; // Ersetze dies mit der ID einer Hilfs-String-Variable, die das Datum speichert
// Überprüfen, ob ein neuer Tag begonnen hat
$letztesDatum = GetValueString($speicherDatumID);
if ($heutigesDatum != $letztesDatum) {
// Zähler zurücksetzen
SetValueInteger($zaehlerID, 0);
// Niederschlagsmenge zurücksetzen
SetValueFloat($regenmengeID, 0.0);
// Aktuelles Datum speichern
SetValueString($speicherDatumID, $heutigesDatum);
}
?>
Anschließend kannst du die Archivierung für das Objekt, das die Werte von $regenmengeID speichert aktiveren und dir das ganze in einem Diagramm anzeigen lassen.
zum Ausführen des Scriptes habe ich ein Ereigniss erstellt, das bei der aktualisierung der „true“ / „false“ Variable ausgeführt wird.
Bei mir wird der Wert der Impulsezählung bei einem „true“ nicht ausgeführt?
Die Variable wird zwar aktuallisiert, jedoch bleibt dieser immer bei „0“.
Kann es damit zusammenhängen, das die Variable von „false auf true“ extrem schnell wechselt? Das kippen des Löffel ist sehr schnell.
Wenn ich die Status Variable händisch auf „true“ stelle, dann das Script ausführe werden die Variablen aktualisiert bzw. gezählt.
Wie kann ich eine „Hilfs Variable“ mit dem aktuellen Datum einrichten?
Es scheint das hier noch das ausgelöste Ereignis fehlt.
Erstelle bitte noch ein ausgelöstes Ereignis und sage diesem, das bei jeder Änderung der Status Variable, das Script ausgeführt werden soll, dann sollte es klappen.
Sobald du die Kippung einmal Manuel ausführst, wird das Script ausgeführt, wodurch die Aktion dann ausgelöst wird bzw. aufgrund des anderen Datums genullt wird.
Kannst du für das Skript noch ein ausgelöstes Ereignis hinzufügen, sodass das Script täglich kurz nach Mitteranch einmal durchgeführt wird. Dann aktualisiert er das Datum / den Tag schon bevor der ersten „Kippung“.