Vielen Dank für die vielen Vorschläge und Diskussionsansätze. Hab wieder viel gelernt!
Hab mich jetzt aber doch wieder für die saarländische Lösung entschieden:
Relais eingebaut, so dass es die Leitung vom zickenden DHT22 zum Datenpin schalten kann. Derzeit muss ich es nach dem Arduino-Reset noch manuell schalten (aber das ist ja immerhin aus der Ferne möglich, ich brauche also keinen physischen Zugang mehr zur Box).
Jetzt muss ich noch die korrekte Stelle im Sketch finden, um das Relais zum richtigen Zeitpunkt nach dem Hochfahren einmal automatisch Hin und Her schalten zu lassen , am besten nur nach Prüfung, ob der Sensor tatsächlich falsch liest.
Es wird immer schräger: Diese Prüfung ergibt nämlich: Die Variable enthält den richtigen Wert, er wird auf die Konsole ausgespielt. Falsch wird er irgendwo da, wo die Funktion void add_line()
auf die Variable zugreift und den Daten-Upload-Link zusammenstellt. Mit anderen Worten: Der selbe (der selbe, nicht nur der gleiche) Sketchdurchlauf schreibt mir t2=20.05°C auf die Konsole und t2=8.01°C in den Telemetriestring. Ursachensuche lasse ich mal, dafür reichts einfach nicht, aber ich will ja auch nur einfach mein Relais steuern.
Ich brauche also eine Steuerung für mein Relais, die ohne Prüfung des Variablenwerts auskommt, z.B. so eine schleife zu beginn des loop:
int counter = 0;
...
if (counter < 2) { # während der ersten beiden sketchdurchläufe
if (counter == 0) { # erfüllt im ersten sketchdurchlauf
digitalWrite(RelayPin, HIGH); # schalte das relais auf strom aus
counter = counter + 1;
delay(2000);
}
else { # erfüllt im zweiten sketchdurchlauf
digitalWrite(RelayPin, LOW); # schalte das relais auf strom wieder ein
counter = counter + 1; # schaltet die schleife für alle folgenden durchläufe ab
}
}
das sollte so doch gehen, oder?
(geht bestimmt auch eleganter und in einer zeile. bin für verschlankungsvorschläge offen.)
und dann nur noch an dem delay rumexperimentieren, bis es reicht. wenn ich es manuell mache, reichen raus-einundzwanzigzweiundzwanzig-wieder rein - also: zwei sekunden immer.
und: ja, ich habe sowas wie
digitalWrite(RelayPin, HIGH);
delay(10000);
digitalWrite(RelayPin, LOW);
im setup() probiert. das relais schaltet zwar - aber ohne den gewünschten effekt.