Garagentorsteuerung mit Sonoff

Begonnen von hanswerner1, 28 Mai 2017, 18:02:08

Vorheriges Thema - Nächstes Thema

trs


RaspiLED

#61
Hi,
https://github.com/arendst/Sonoff-Tasmota/wiki/Sonoff-Basic#serial-connection

Spannend, welche Versionen sonoff Basic habt Ihr? V1.1?

Okay also meine Konvention wird:
GPIO-01 Garage Auf (ESP interner PullUp mit Schalten nach Ground, also Invers)
GPIO-03 Garage Zu (ESP interner PullUp mit Schalten nach Ground, also Invers)
GPIO-12 Relais Garagenschalter (ext. PullDown z.B. 10K mit Schalten nach 3V3)
GPIO-13 LED (Wie ist die LED verkabelt?
GPIO-14 (not used)

Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

trs


RaspiLED

#63
Hi,

ich hatte jetzt kein Feedback auf meine GPIO Annahmen oben erhalten.
Zusätzlich habe ich das Problem, dass ich keinen Sonoff Basic zum Testen hier habe.
Meine ESP8266/4096 (z.B. Node MCU oder Wemos D1) haben die GPIO 1 und 3 gar nicht :-(

Daher habe ich jetzt folgende GPIO verwendet:
GPIO-00 Garage Auf (ESP interner PullUp mit Schalten nach Ground, also Invers)
GPIO-04 Garage Zu (ESP interner PullUp mit Schalten nach Ground, also Invers)
GPIO-12 Relais Garagenschalter (ext. PullDown z.B. 10K Ohm mit Schalten nach 3V3)
GPIO-13 LED (LED über 470 Ohm an Ground)

Als EasyESP Software setzte ich ein MEGA Release von https://github.com/letscontrolit/ESPEasy/releases ein,
z.B. "ESP_Easy_mega-20180219_test_ESP8266_4096.bin"

Also hier zu den Inhalten:

FHEM Defines:

define espBridge ESPEasy bridge 8383
attr espBridge allowedIPs 192.168.188.1/24 attr espBridge authentication 1
attr espBridge autocreate 1
attr espBridge combineDevices 0
attr espBridge group ESPEasy Bridge
attr espBridge room ESPEasy,Gateways,Software
attr espBridge verbose 3

define ESPEasy_ESP_Garage_GarageDoor ESPEasy 192.168.188.126 80 espBridge ESP_Garage_GarageDoor
attr ESPEasy_ESP_Garage_GarageDoor IODev espBridge
attr ESPEasy_ESP_Garage_GarageDoor Interval 300
attr ESPEasy_ESP_Garage_GarageDoor devStateIcon Open:fts_garage_door_10:close Closed:fts_garage_door_100:open Closing:fts_garage_door_70:close Opening:fts_garage_door_30:open Stopped:fts_garage:close
attr ESPEasy_ESP_Garage_GarageDoor event-min-interval .*:900
attr ESPEasy_ESP_Garage_GarageDoor event-on-change-reading .*
attr ESPEasy_ESP_Garage_GarageDoor eventMap /event Close:stopped/event Open:opening/event Close:closing/event Open:open/event Close:close/event Simulate:sim/event SimulateEnd:simEnd/event Toggle:toggle/event AutoClose:autoclose/
attr ESPEasy_ESP_Garage_GarageDoor genericDeviceType GarageDoorOpener
attr ESPEasy_ESP_Garage_GarageDoor group ESPEasy Device
attr ESPEasy_ESP_Garage_GarageDoor homebridgeMapping Clear CurrentDoorState=ESPEasy_ESP_Garage_GarageDoor:CurrentDoorState,values=0:0;;1:1;;2:2;;3:3;;/.*/:4 TargetDoorState=ESPEasy_ESP_Garage_GarageDoor:TargetDoorState,values=1:1;;0:0,cmdOff=open,cmdOn=close ObstructionDetected=ESPEasy_ESP_Garage_GarageDoor:ObstructionDetected,values=0:0;;/.*/:1
attr ESPEasy_ESP_Garage_GarageDoor icon fts_garage
attr ESPEasy_ESP_Garage_GarageDoor presenceCheck 1
attr ESPEasy_ESP_Garage_GarageDoor readingSwitchText 1
attr ESPEasy_ESP_Garage_GarageDoor room ESPEasy,Garage,Hardware,Homekit
attr ESPEasy_ESP_Garage_GarageDoor setState 3
attr ESPEasy_ESP_Garage_GarageDoor siriName GarageDoor
attr ESPEasy_ESP_Garage_GarageDoor stateFormat {ReadingsVal($name,"CurrentDoorState","") eq "0" ? "Open" : ReadingsVal($name,"CurrentDoorState","") eq "1" ? "Closed" :ReadingsVal($name,"CurrentDoorState","") eq "2" ? "Opening" :ReadingsVal($name,"CurrentDoorState","") eq "3" ? "Closing" : ReadingsVal($name,"CurrentDoorState","") eq "4" ? "Stopped" : "Undefined"}
attr ESPEasy_ESP_Garage_GarageDoor webCmd close:open:toggle:autoclose:sim:simEnd

define ESPEasy_ESP_Garage_GarageDoorSets ESPEasy 192.168.188.126 80 espBridge ESP_Garage_GarageDoorSets
attr ESPEasy_ESP_Garage_GarageDoorSets IODev espBridge
attr ESPEasy_ESP_Garage_GarageDoorSets Interval 300
attr ESPEasy_ESP_Garage_GarageDoorSets group ESPEasy Device
attr ESPEasy_ESP_Garage_GarageDoorSets presenceCheck 1
attr ESPEasy_ESP_Garage_GarageDoorSets readingSwitchText 1
attr ESPEasy_ESP_Garage_GarageDoorSets room ESPEasy
attr ESPEasy_ESP_Garage_GarageDoorSets setState 3

define GarageDoorFileLog FileLog ./log/GarageDoor_Filelog_%Y%m.log ESPEasy_ESP_Garage_GarageDoor:*
attr GarageDoorFileLog room Logs

define SVG_GarageDoorFileLog_1 SVG GarageDoorFileLog:SVG_GarageDoorFileLog_1:CURRENT
attr SVG_GarageDoorFileLog_1 captionPos left
attr SVG_GarageDoorFileLog_1 room Garage,Plots


SVG Plot Datei /opt/fhem/www/gplot/SVG_GarageDoorFileLog_1.gplot

# Created by FHEM/98_SVG.pm, 2018-02-27 15:50:23
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<TL>'
set ytics ("Open" 100, "Run" 50, "Closed" 0)
set y2tics ("Active" 80, "Deactive" 20)
set grid ytics y2tics
set ylabel "DoorStates"
set y2label "State"
set yrange [-20:120]
set y2range [-20:120]

#GarageDoorFileLog 4:ESPEasy_ESP_Garage_GarageDoor.CurrentDoorState\x3a::$fld[3]=~"1"?102:0
#GarageDoorFileLog 4:ESPEasy_ESP_Garage_GarageDoor.TargetDoorState\x3a::$fld[3]=~"1"?100:2
#GarageDoorFileLog 4:ESPEasy_ESP_Garage_GarageDoor.RelaisState\x3a::$fld[3]=~"1"?80:20
#GarageDoorFileLog 4:ESPEasy_ESP_Garage_GarageDoor.ObstructionDetected\x3a::$fld[3]=~"1"?78:22

plot "<IN>" using 1:2 axes x1y1 title 'CurrentDoorState' ls l1 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'TargetDoorState' ls l0 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y2 title 'Relais' ls l3 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y2 title 'Obstruction' ls l4 lw 1 with steps


EasyESP Einstellungen sind besser im angehängten File zu sehen, da Bilder...

Rules Page in ESPEasy:

[RulesSet1]

on System#Boot do  // fired at boot
  TaskValueSet 1,1,4 // CurrentDoorState (0=opened, 1=closed, 2=opening, 3=closing, 4=stopped)
  TaskValueSet 1,2,1 // TargetDoorState (0=opened, 1=closed)
  TaskValueSet 1,3,0 // RelaisState (0=off, 1=on)
  TaskValueSet 1,4,0 // Obstruction (0=not detected, no sensor available)
  TaskValueSet 2,1,1 // AutoMode (0=off, 1=on)
  TaskValueSet 2,2,300 // AutoTestFrequency (in seconds)
  TaskValueSet 2,3,0 // Simulate (0=off, 1=on)
  TaskValueSet 2,4,30 // SimulationFrequency (in seconds)
  gpio,13,0 // LED (0=off, 1=on)
  gpio,12,0 // Relais (0=off, 1=on)
  timerSet,1,300 // AutoTestTimer starten
endon

On Clock#Time=All,20:00 do // Defaults jeden Tag um 20:00 Uhr
  TaskValueSet 1,2,1
  TaskValueSet 2,1,1
  TaskValueSet 2,2,300
  TaskValueSet 2,3,0
  TaskValueSet 2,4,30
  timerSet,1,300
endon

on Drive do // Toggle Door and LED Lightshow
  LongPulse,12,1,1
  Pulse,13,1,200
  Pulse,13,0,200
  Pulse,13,1,200
  Pulse,13,0,200
  Pulse,13,1,200
  timerSet,1,[GarageDoorSets#AutoTestFrequency] // Restart Check
endon

on AutoClose do
  event ActivateAutoMode
  TaskValueSet 1,2,1
  timerSet,1,1
endon

on DoorClose do
  TaskValueSet 1,2,1
  event Check_Close
endon

On DoorOpen do
  TaskValueSet 1,2,0
  event Check_Open
endon

on ActivateAutoMode do
  TaskValueSet 2,1,1
endon

on ActivateManualMode do
  TaskValueSet 2,1,0
endon

On Check_Target do
  If [GarageDoor#TargetDoorState]=0
    event Check_Open
  Else
    event Check_Close
  Endif
Endon

On Check_Open do
  If [GarageDoor#CurrentDoorState]=0
    Pulse,13,1,100
    Pulse,13,0,200
    Pulse,13,1,300
    Pulse,13,0,400
    Pulse,13,1,500
  Else
    timerSet,2,1
  endif
endon

On Check_Close do
  If [GarageDoor#CurrentDoorState]=1
    Pulse,13,1,500
    Pulse,13,0,400
    Pulse,13,1,300
    Pulse,13,0,200
    Pulse,13,1,100
  Else
    timerSet,2,1
  endif
endon

[RuleSet2]

on GarageDoor#DoorClosed=1 do
  TaskValueSet 1,1,1
endon

on GarageDoor#DoorClosed=0 do
  If [GarageDoor#CurrentDoorState]=1
    TaskValueSet 1,1,2
  endif
endon

on GarageDoor#DoorOpen=1 do
  TaskValueSet 1,1,0
endon

on GarageDoor#DoorOpen=0 do
  If [GarageDoor#CurrentDoorState]=0
    TaskValueSet 1,1,3
  endif
endon

on Rules#Timer=1 do
  If [GarageDoorSets#AutoMode]=1 // AutoModus active?
    Event Check_Target
  Else
    timerSet,4,1
  Endif
  timerSet,1,[GarageDoorSets#AutoTestFrequency] // Restart Check
Endon

on Toggle do // Toggle and switch GarageDoorTarget
  if [GarageDoor#TargetDoorState]=0
    TaskValueSet 1,2,1
  else
    TaskValueSet 1,2,0
  endif
  Event Drive
endon

on Close do // Set GarageDoorTarget to close and drive if needed
  TaskValueSet 1,2,1
  Event Check_Target
endon

on Open do // Set GarageDoorTarget to close and drive if needed
  TaskValueSet 1,2,0
  Event Check_Target
endon

on Rules#Timer=2 do
  event Drive
endon

on GarageDoor#Relais do
  TaskValueSet 1,3,%eventvalue%
endon

on Rules#Timer=4 do  // LED Lightshow Manual Mode
    Pulse,13,1,500
    Pulse,13,0,500
    Pulse,13,1,500
endon

[RuleSet3]

on Simulate do
  TaskValueSet 2,3,1
  timerSet,3,1
endon

on Rules#Timer=3 do  // Simulation
   If [GarageDoor#CurrentDoorState]=0
    event Simulate_Close
  Else
    event Simulate_Open
  Endif
  Pulse,13,1,100
  Pulse,13,0,100
  Pulse,13,1,100
  Pulse,13,0,100
  Pulse,13,1,100
  timerSet,3,[GarageDoorSets#SimulationFrequency]
endon

on SimulateEnd do
  TaskValueSet 2,3,0
  gpio,0,1
  gpio,4,1
  timerSet,3,0
endon

on Simulate_Open do
  TaskValueSet 1,2,0
  delay 5
  gpio,4,1
  delay 5
  gpio,0,0
endon

on Simulate_Close do
  TaskValueSet 1,2,1
  delay 5
  gpio,0,1
  delay 5
  gpio,4,0
endon


Was müsstet ihr meiner Meinung nach für Sonoff Basic noch ändern?
1.) Richtige EasyESP Firmware für Sonoff nehmen, wieviel Flash hat der 512 oder 4096?
2.) GPIO 1 und 3 verwenden:
  a.) auf Devices Tab GPIO 1 statt 0 und GPIO 3 statt 4 auswählen
  b.) in RuleSet 3 alle "gpio,0" durch "gpio,1" und "gpio,4" durch "gpio,3" ersetzten
3.) Hier mal posten ob es klappt ;-)

Gruß Arnd
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

hanswerner1

Hallo Arnd,

werde mir das mal auf einen Sonoff packen und testen. Denke ich schaffe das bis zum WE. Werde dann mal berichten.

Gruß HW1

hanswerner1

Ich habe jetzt mal alles auf einen Sonoff geflasht und eingerichtet.
Bin mir aber nicht sicher ob alles funktioniert. Kannst Du kurz zu den Readings etwas sagen was sie bedeuten ?
Was bedeutet autoclose, sim und simend ?

Diese Readings sind mir noch nicht klar.
AutoMode
AutoTestFrequency
CurrentDoorState
LEDState
ObsturctionDetected
RelaisState
Simulation
TargetDoorState

RaspiLED

#66
Hi,
ich habe heute mit Siri gesprochen und noch Fehler gefunden.
Morgen kommt ein Update für HomeBridgeMapping, Eventmap und für die Rules ;-(

Die Dummy sind beschrieben in Kommentaren in der System#Boot unter Rules 1.
Wesentlich sind in der Hombridge Logik:
- CurrentDoorState welches den Ist Status des Tors anzeigt. (0=auf, 1=zu, 2=öffnend, 3=schliessend, 4=gestoppt) Gefüttert über die Kontakte an den GPIOs (DoorClosed, DoorOpen).
- TargetDoorState sagt wie das Toor eigentlich sein soll (0=auf, 1=zu)
- Obstruction ist ein Sabotage Alarm, der immer auf 0 ist, da wir keinen GPIO dafür haben

Mit autoclose soll das Tor zufahren (und danach prüfen ob es auch zu bleibt) über Event AutoClose

Mit sim starte ich die Simulation über das Event Simulation

Mit simend beende ich die Simulation über Event Simulation_End

Achso die Rules in ESPEasy muss man unter den Advanced Einstellungen erst aktivieren, bevor man etwas reinschreiben kann.

Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

RaspiLED

Moin,


so habe Beitrag 63 upgedatet. Jetzt geht auch HomeBridge und Siri ;-)
Zusätzlich gibt es jetzt noch ein klares Kommando zum schliessen ("event close") und eins zum öffnen ("event open") in ESPEasy.


Gruß Arnd
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

hanswerner1

Zitat von: RaspiLED am 01 März 2018, 10:26:32
so habe Beitrag 63 upgedatet. Jetzt geht auch HomeBridge und Siri ;-)
Zusätzlich gibt es jetzt noch ein klares Kommando zum schliessen ("event close") und eins zum öffnen ("event open") in ESPEasy.

Hi Arnd,

Habs mal nach deinem update angepasst, jetzt reagiert aber toggle, close und open nicht ??
Der Sonoff schaltet nicht.
Gruß
HW1

RaspiLED

Hi,
Hast Du die rules im ESPEasy? Was zeigt Dein FHEM Eventmonitor? Was zeigt der Tools/Log in ESPEasy? Jeweils während Du Toggle, Close, Open in FHEM ,set'est und/oder event toggle, event close, event open in ESPEasy unter Tools eingibst?
Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

hanswerner1

Rules sind drin.

bei Druck auf toggle

Log ESPEasy

2230730 : Dummy: value 3: 0.00
2230730 : Dummy: value 4: 0.00
2230731 : EVENT: GarageDoor#CurrentDoorState=1.00
2231087 : EVENT: GarageDoor#TargetDoorState=1.00
2231448 : EVENT: GarageDoor#RelaisState=0.00
2231809 : EVENT: GarageDoor#ObstructionDetected=0.00
2232222 : SYS : -41.00
2232222 : EVENT: GarageDoor#WifiRSSI=-41.00
2233355 : WD : Uptime 37 ConnectFailures 0 FreeMem 21968
2241315 : EVENT: Toggle


Log Fhem

2018.03.02 15:42:10 3 : ESPEasy: set ESPEasy_ESP_GarageDoor event Toggle
2018-03-02 15:42:10 ESPEasy ESPEasy_ESP_GarageDoor toggle


Relais zieht nicht an, die zustände des Tores werden richtig angezeigt.

RaspiLED

#71
Hi,
es kommt also das FHEM toggle als Event Toggle beim ESP an. Soweit sogut! In Rules 2 unter On Toggle do... wird dann ein Event Drive ausgelöst. Das sehe ich bei Dir im Log des ESP nicht. Dort wird auf Rule Page 1 mit longpulse das Relais an gpio 12 für eine Sekunde angezogen.
Bist Du sicher, dass Du die Rules Pages 2&3 auch reinkopiert hast? Was passiert, wenn Du in FHEM ein
set ESPEasy_ESP_GarageDoor event Drive
auslöst? Ansonsten gerne mal Screenshots Deines ESP zeigen ;-)
Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

hanswerner1

Hi Arnd,
Hab jetzt nochmal die 3 Rules aus dem aus dem Tweet reinkopiert, jetzt zieht das Relais an.
Vorher hatte ich die aus der Datei genommen. Vielleicht hatte ich aber auch einen Fehler beim kopieren gemacht.  :)

Werd das ganze jetzt mal testen. Was mir aber schon aufgefallen ist, das die Zustandsanzeige CurrentDoorState ca. 10s verzögert ist.

Was mir gut gefällt ist, das die Logik komplett auf dem Sonoff läuft.



RaspiLED

#73
Hi,
Nee die ist nicht 10s verzögert. Sondern wird nur alle 60 Sec gesetzt. Kannst Du einstellen im Delay des Dummy Devices (indem CurrentDoorState und TargetDoorState drin sind) ;-) Provoziert aber halt auch jede Menge WLAN Traffic, obwohl das Toor ca 98% der Zeit immer den gleichen Status wie vorher hat. Deshalb dachte ich mir test alle 5 Minuten (AutoTestDelay 300=60*5) und Status jede Minute (60sec) reicht.

Wundere Dich nicht über die blöden event Verschachtelungen, aber ESPEasy kennt keine if in if und leider auch nur 3 event tiefen, so dass ich sogar timer verwenden musste, um den Event Drive zu feuern ;-) Naja, es geht immerhin *lol*
Wenn Du gute Ideen hast immer raus damit ;-)

Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

hanswerner1

Ich meine, wenn das Tor öffnet, wird sofort das Reading DoorOpen und DoorClose gesetzt, aber CurrentDoorState braucht ca. 10s bis sich der Wert ändert. Dadurch ist die Zustandsanzeige um ca. 10s verzögert.

Läuft bis jetzt zuverlässig, bis auf die verzögerungen. Die auch manchmal beim Betätigen von open, close und toggel 2-3s brauchen bis das Relais anzieht.