-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Aktor wird nicht deaktiviert, wenn Zeitfenster gesetzt ist #79
Comments
Hallo Thomas, Gruß Nico |
Hallo Nico, ich gebe Bescheid. Ich nutze die Out-PINs auch bloss als Semaphor und hab ein Python-Script drumgebaut, was den Status abfragt und dann Steckdosen mit Tasmota Firmware per HTTP-Request ein- und ausschaltet. VG |
Hallo zusammen, |
Hallo Horst, ich hatte doch glatt aus den Augen verloren, dass hier noch ein Problem abgestellt werden muss. |
Hi,Ich wollte es auch noch als Patch bereitstellen, war bloß in letzter Zeit etwas wenig Sonne da , um es nochmal zu testen. Zumindest in den letzten zwei Tagen hat es funktioniert. Mit dem codeschnippsel sollte es aber auch so einbaubar sein.VgThomas
|
Habe zwar geändert, aber leider den Teil nicht neu gemacht (make). Muss also noch einen Tag Sonne abwarten. |
Moin,
hier das patch-File. Falls Interesse besteht, habe ich noch ein kleines
(schnell dahingeschriebenes) Python-Script rangehangen, welches die
GPIO-PINs ausliest und damit Steckdosen mit Tasmota-Firmware
ein-/ausschaltet. Der Pfad ist mit /home/pi fest verdrahtet. Evt. kann
man das ja irgendwo mit dazu packen. Will deswegen kein github-Projekt
aufmachen.
VG
Thomas
Am 14.02.23 um 18:56 schrieb Horst:
… Das Einfügen von
TimerState == true &&
alleine für alle Aktoren hat leider nichts verändert (die Sonne hat hier
geschienen).
Was fehlt noch? Bin leider kein C Spezialist und habe nicht entdeckt, wo
wieder ausgeschaltet werden sollte, wenn der Überschuss weg ist.
VG
Horst
—
Reply to this email directly, view it on GitHub
<#79 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A3UFOS47KHEHZW2KPTMLLKDWXPBLVANCNFSM6AAAAAARF7GP7I>.
You are receiving this because you authored the thread.Message ID:
***@***.***>
--
Thomas Fichte
EMail: ***@***.***
Tel: +49 351 4211011 Mobil: +49 172 8096791
--- Aktor.h.ORIG 2023-02-15 07:24:12.000000000 +0100
+++ Aktor.h 2023-02-15 07:23:23.000000000 +0100
@@ -47,7 +47,7 @@ int netInAktor(int PowerGrid, int AktorP
}
}
int AktorPower90 = AktorPower /10 *9;
- if (NetInput <= AktorPower90 && PowerGrid <= 100){
+ if (TimerState == true && NetInput <= AktorPower90 && PowerGrid <= 100){
writeAktor(AktorPosition + counterOn, 0);
writeAktor(AktorPosition + counterOff, 0);
}
@@ -103,7 +103,7 @@ int solarAktor(int PowerPVI, int AktorPr
}
}
int AktorPower90 = AktorPowerOn /10 *9;
- if (PowerPVI <= AktorPower90 && PowerPVI >= AktorPowerOff){
+ if (TimerState == true && PowerPVI <= AktorPower90 && PowerPVI >= AktorPowerOff){
writeAktor(AktorPosition + counterOn, 0);
writeAktor(AktorPosition + counterOff, 0);
}
@@ -136,6 +136,7 @@ int batteryAktor(int BatterySOC, int Akt
int AktorState = digitalRead(AktorPin);
int prio = readAktor(AktorPrioPosition);
int TimerState = readAktor(AktorPosition + stateTimer);
+//printf("DEBUG AktorState %d AktorPin %d Pos %d TimerState %d\n", AktorState, AktorPin, AktorPosition, TimerState);
if (prio >= AktorPrio && TimerState == true){
if (AktorState == Deaktiv){
int counterMinOff = readAktor(AktorPosition + MinOff);
@@ -158,18 +159,21 @@ int batteryAktor(int BatterySOC, int Akt
}
}
}
- if (BatterySOC < AktorPercentOn && BatterySOC > AktorPercentOff){
+ if (TimerState == true && BatterySOC < AktorPercentOn && BatterySOC > AktorPercentOff){
+//printf("DEBUG ***** AktorPin %d PosOn %d PosOff %d\n", AktorPin, AktorPosition + counterOn, AktorPosition + counterOff);
writeAktor(AktorPosition + counterOn, 0);
writeAktor(AktorPosition + counterOff, 0);
}
if (AktorState == Aktiv){
int counterMinOn = readAktor(AktorPosition + MinOn);
+//printf("DEBUG AktorPin %d counterMinOn %d\n", AktorPin, counterMinOn);
counterMinOn--;
writeAktor(AktorPosition + MinOn, counterMinOn);
if ((BatterySOC <= AktorPercentOff || TimerState == false) && counterMinOn <= 0){
int AktorCounterOff = readAktor(AktorPosition + counterOff);
AktorCounterOff++;
writeAktor(AktorPosition + counterOff, AktorCounterOff);
+//printf("DEBUG AktorPin %d AktorCounterOff %d\n", AktorPin, AktorCounterOff);
if (AktorCounterOff >= 5){
if (AktorPrio > 0 && prio > AktorPrio){
prio = AktorPrio;
[global]
sleep = 60
actionOnlyOnChange = 0
[aktor1]
enabled = 1
bcm = 5
on = cm?user=admin&password=password&cmnd=Power%%20on
off = cm?user=admin&password=password&cmnd=Power%%20off
url = http://255.255.255.113
username = admin
password = password
[aktor2]
enabled = 0
bcm = 6
on = cm?user=admin&password=password&cmnd=Power%%20on
off = cm?user=admin&password=password&cmnd=Power%%20off
url = http://255.255.255.108
username = admin
password = password
[aktor3]
enabled = 0
bcm = 13
on = cm?user=admin&password=password&cmnd=Power%%20on
off = cm?user=admin&password=password&cmnd=Power%%20off
url = http://255.255.255.112
username = admin
password = password
[aktor4]
enabled = 0
[aktor5]
enabled = 0
|
Hallo zusammen, ich habe mir das jetzt mehrfach angesehen, ich denke das die Anpassung mit "TimerState == true" tatsächlich in der Schleife fehlt. Wie schon erwähnt, aktuell habe ich nicht wirklich die Möglichkeit das zu testen (mache alles über die HM und habe nichts an den GPIOs hängen). Ich werde es trotzdem einbauen. Sollte dies keine Abhilfe bringen, könnte es vielleicht auch sein, dass z.B. der Batterieaktor als AktorTyp=3 konfiguriert ist. Dann wäre die Zeiteinstellung grundsätzlich inaktiv, erst wenn der AktorTyp=13 eingestellt ist, wird zu der Betterievorgbe auch die Zeiteinstellung genutzt. Neben der Batterievorgabe und der Zeiteinstellung gibt es noch die "AktorMinOn" Einstellung, damit wird verhindert, dass der Aktor im Grenzwert laufend hin und her schaltet (oder Beispiel Spülmaschine, damit diese ca. 3 Std läuft vorm abschalten). Diese kann auch dazu führen das zum Zeitpunkt noch nicht abgeschaltet wird. erst wenn die Zeit "AktorMinOn" abgelaufen ist. @dg1rtf Hallo Thomas, deine letzt Nachricht hast du wohl per Mail gesendet, der Anhang wurde nicht korrekt übernommen und du hast einige Daten mitgebetet die du vielleicht bearbeitet solltet. Das Python script für die Funksteckdosen kann ich nicht einbauen oder mich dazu äußern, da ich mich mit Python nicht auskenne oder beschäftigt habe. Die Steckdosen kenne ich auch nicht. Viele Grüße Nico |
Hey, |
Das Abschalten eines batteryAktor am Ende des vorgegebenen Zeitintervalls erfolgt nicht (betrifft ext. auch die anderen Aktor-Typen.
Ich denke der Fehler liegt in External/Aktor.h, wo in
counterOff = 0 immer unabhaengig von der Zeit gesetzt wird.
Damit kann AktorCounterOff >= 5 (ein paar Zeilen später) eigentlich nie true werden.
Mit
sollte das Setzen auf 0 nur im Zeitfenster passieren. Gilt glaube ich auch fuer die anderen Aktoren.
VG
Thomas
The text was updated successfully, but these errors were encountered: