Script d'alerte de porte de garage laissée ouverte

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
f-d-m
Messages : 156
Inscription : 25 juin 2019, 21:36

Script d'alerte de porte de garage laissée ouverte

Message par f-d-m »

Bonjour,

J'ai visité le forum anglophone et cette page: https://www.domoticz.com/wiki/Event_script_examples
mais ce post doit être très très ancien et je vais faire comme si je ne l'avais pas lu.

Mon objectif est de recevoir une notification (telegram dans mon cas) si ma porte de garage est resté ouverte depuis plus d' 1/4 heure.

Pour le moment c'est plus ou moins résolu avec un cron qui tourne toutes les 5 minutes, récupère auprès de domoticz un JSON sur l'état de la porte, mémorise les 4 derniers états (donc le log contient 4x 5 minutes). Si la porte est ouverte et qu'il y a 3x "porte ouverte" dans le log, alors j'envoie une alerte telegram via un curl. (s'il y a 4x, c'est que l'alerte a déjà été envoyée, pas besoin de le rappeler toutes les 5 minutes)

Ca fonctionne, c'est un peu imprécis, (entre 10.01 et 19.59 minutes puisque le cron tourne toutes les 5 minutes) .

Maintenant que je commence à piger les timers, je voudrais réécrire cela.

- si on ouvre la porte ça lance un timer de 15 minutes
- si on ferme la porte ça annule le timer
- si le timer expire -> alerte

Ca éviterait aussi les faux positifs quand la porte a été ouverte/refermée plusieurs fois dans le laps de 20 minutes.

Auriez-vous un exemple dans les placards ? Il faut un ou deux scripts ?

Merci,
Frédéric
---
Bruxelles

RPi 3B, Domoticz 2024.7, SSD, dongle Zigbee Sonoff
IPX-800 V3
multiples Sonoff et similaires (Tasmota, ESPeasy), multiples appareils Zigbee
SMA Sunny Boy 3.6
Ksenia Lares 4.0
Compteur digital à la norme DSMR5 - interface ESP32
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Script d'alerte de porte de garage laissée ouverte

Message par Keros »

Tu peux avoir encore plus simple :

Tu fais tourner ton script toutes les minutes.
Tu vérifies si ta porte est ouverte et si le dernier changement d'état a eu lieu depuis plus de 15 minutes.
Si oui alors alerte.

C'est simple, mais tant que l'état ne changera pas, les alertes vont continuer toutes les minutes après la quinzième.
A voir peut-être pour faire une alerte à 15 minutes puis une deuxième à 30 min.
Ou garder en mémoire que l'alerte a été donnée pour éviter de la renvoyer.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Doudy
Messages : 457
Inscription : 07 mai 2016, 17:23

Re: Script d'alerte de porte de garage laissée ouverte

Message par Doudy »

Hello,

Ca m'intéresse aussi ce genre de script !

;)
RaspberryPi - RFLink - Zwave - WH2600
Domoticz : 2020.2 | Dashticz : V3.12 Master | dzvents : 3.0.2 | Python : 3.7.3
f-d-m
Messages : 156
Inscription : 25 juin 2019, 21:36

Re: Script d'alerte de porte de garage laissée ouverte

Message par f-d-m »

Voici mon cron qui tourne toutes les 5 minutes

Code : Tout sélectionner

wget -o garage.err -O garage.json http://127.0.0.1/json.htm?type=devices\&rid=22
grep Status garage.json >> garage.log
tail -4 garage.log > garage.tmp
mv garage.tmp garage.log
if [ "`grep -c Open garage.log`" == "3" ] && [ "`(tail -1 garage.log|grep -c Open)`" == "1" ] ;
then wget -o garage.err -O garage.out https://api.telegram.org/bot719999998:AAH_VapeH95IWeYAT4uLL4ksP6nW3pVDQXA/sendMessage\?chat_id=79999996\&text=Garage%20Ouvert%20depuis%2015%20minutes%20!! ;
fi
---
Bruxelles

RPi 3B, Domoticz 2024.7, SSD, dongle Zigbee Sonoff
IPX-800 V3
multiples Sonoff et similaires (Tasmota, ESPeasy), multiples appareils Zigbee
SMA Sunny Boy 3.6
Ksenia Lares 4.0
Compteur digital à la norme DSMR5 - interface ESP32
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Script d'alerte de porte de garage laissée ouverte

Message par lost »

Keros a écrit : 13 déc. 2022, 22:07 Tu peux avoir encore plus simple :
Tu fais tourner ton script toutes les minutes.
Tu vérifies si ta porte est ouverte et si le dernier changement d'état a eu lieu depuis plus de 15 minutes.
Si oui alors alerte.
C'est ce que je fais, non pas en bash mais via un script time (donc exécuté par défaut toutes les minutes, mais on peut le faire toutes les X minutes au besoin) domoticz en Lua.

Il est un peu plus complexe que cela car il gère aussi au besoin une fermeture automatique en absence (via état du security panel), mais on peut virer ce test et n'en garder que la partie notification pour en faire de manière inconditionnelle. Extrait de cette partie de mon script_time_allChecks.lua (sous domoticz/scripts/lua, si on ne l'édite pas via l'interface web afin qu'il soit dans la BDD domoticz):

Code : Tout sélectionner

-- Title: script_time_allChecks.lua
--
-- Script the includes, for efficiency, all "simple" time related switches checks:
-- 1) Garage front door opened & no mvt recorded time for auto-close
--    trigger send auto-close on absence or email on presence.
-- (...)

--
-- Global settings :
--
emailNotifyAlarm   ='MOI@gmail.com'

--
-- Garage door editable settings :
--
devGarageDoorState ='SectGarage'
devGarageDoorCmd   ='CdeSectGge'
devGarageSensMvt   ='MvtGarage'

garageNoMvtSec=30
garageNoMvtAdv=120
garageNoStaSec=180
garageDoorCloseTimeSec=60

--
-- Internal fct :
-- Get current script exec time & compute last 'device' update time.
--
function timeLastUpdate(device)
    t1  = os.time()
    sT0 = otherdevices_lastupdate[device]

    -- Returns a date time like 2016-12-02 15:30:10
    -- => Format as os.time & compute diff :

    year    = string.sub(sT0, 1, 4)
    month   = string.sub(sT0, 6, 7)
    day     = string.sub(sT0, 9, 10)
    hour    = string.sub(sT0, 12, 13)
    minutes = string.sub(sT0, 15, 16)
    seconds = string.sub(sT0, 18, 19)
    t0      = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
    tDiff   = os.difftime(t1, t0)

    return(tDiff)
end

commandArray = {}
cmdNb        = 0

-- To be used by checks that do not have to be handled every minute...
CurrentMn = os.date('%M')

------------------------
-- GARAGE DOOR CHECKS --
------------------------

-- print('Porte Garage : '..otherdevices[devGarageDoorState])

-- Only check every 5 mn
if ((CurrentMn % 5 == 0) and (otherdevices[devGarageDoorState] == 'Open')) then
    lastMvt=timeLastUpdate(devGarageSensMvt)
    lastCmd=timeLastUpdate(devGarageDoorCmd)
    lastSta=timeLastUpdate(devGarageDoorState)
    
    if ((lastMvt >  garageNoMvtSec) and (lastSta > garageNoStaSec) and (lastCmd >  garageDoorCloseTimeSec)) then
        if (otherdevices[devSecPanel] == 'Arm Away') then
            -- Auto off after 1s set in switch properties
            print('Sending auto-close for '..devGarageDoorCmd..' after no mvt for '..lastMvt..'s & no cmd for '..lastCmd..'s.')
            cmdNb = cmdNb + 1
            commandArray[cmdNb]={[devGarageDoorCmd]='On'}
        else
            if (lastMvt >  garageNoMvtAdv) then
                cmdNb = cmdNb + 1
                commandArray[cmdNb]={['SendEmail'] = 'OUBLI GARAGE ?#'..devGarageDoorState..' : '..otherdevices[devGarageDoorState]..' since '..lastSta..'s ; '..os.date("%c")..'#'..emailNotifyAlarm}
            end
        end
    end
    
    print('Porte Garage ouverte depuis '..lastSta..'s, dernier mvt/cmd : '..lastMvt..'/'..lastCmd..'s.')
end

--------------------------
-- THAT'S ALL FOLKS !!! --
--------------------------

return commandArray
Il faut bien entendu renseigner son adresse mail perso et modifier les noms des capteurs/switch:
devGarageDoorState : C'est celui qui donne l'état ouvert/fermé de la porte garage,
devGarageDoorCmd : Switch de commande impulsionnelle (un relais sec câblé en // du poussoir de commande locale),
devGarageSensMvt : Capteur de mouvement ayant vue sur le garage.

Attention pour le devGarageDoorCmd (si fermeture automatique gérable car une commande existe), comme la config du relais pour gérer une impulsion n'était chez moi pas fonctionnelle (bug du firmware relais contact sec qubino?) il y a un auto-off configuré niveau switch dans l'interface. Car c'est dans mon cas (comme souvent) une commande impulsionnelle (en // du bouton poussoir). A adapter en fonction de sa porte et du relais ajouté pour la contrôler donc.

Modifier éventuellement les temps utilisés, juste en dessous. Les vérifications ne sont faites que toutes les 5 minutes, dont les notifs/actions éventuelles seront à cette période.

Adapter en fonction de ce qu'on veut, d'une gestion ou non d'une alarme/présence via le security panel et des capteurs présents (à minima il faudra le devGarageDoorState) dans son installation en retirant les sections de code alors sans objet.

Je laisse la totalité car cela peut servir à d'autres. Certains "print" en commentaire (précédés de "--", qui est le commentaire en Lua) peuvent être dé-commentés pour aider au debug (via log domoticz).

Mes notifs sont par mail, n'étant pas utilisateur de machins certes plus modernes mais dont les API ou conditions d'utilisation peuvent changer à tout moment. Là encore, adapter à son cas...
f-d-m
Messages : 156
Inscription : 25 juin 2019, 21:36

Re: Script d'alerte de porte de garage laissée ouverte

Message par f-d-m »

Merci @lost pour ce partage.

J'ai une porte Hörmann et ce serait trop beau que leur système propriétaire accepte un contact sec. J'ai essayé. C'est un échec, et pire que ça, après j'ai dû réinitialiser complètement le moteur (j'ai essayé plusieurs fois)

Mais au moins il est impossible d'ouvrir le garage via internet !!

Je maintiens mon idée pour plus tard, de jouer avec des timers comme développé dans la question initiale.
---
Bruxelles

RPi 3B, Domoticz 2024.7, SSD, dongle Zigbee Sonoff
IPX-800 V3
multiples Sonoff et similaires (Tasmota, ESPeasy), multiples appareils Zigbee
SMA Sunny Boy 3.6
Ksenia Lares 4.0
Compteur digital à la norme DSMR5 - interface ESP32
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Script d'alerte de porte de garage laissée ouverte

Message par lost »

f-d-m a écrit : 19 déc. 2022, 18:41 J'ai une porte Hörmann et ce serait trop beau que leur système propriétaire accepte un contact sec.
Le script ci dessus est utilisé pour une porte sectionnelle Hormann. Elle a été installée il y a 3 ans et la motorisation d'alors acceptait bien un contact sec pour le bouton poussoir de commande locale.

Il semble cependant que ce type de motorisation (série 3) ait été remplacé:
https://automatisme-plus.fr/motorisatio ... rie-3.html

Maintenant, à suivre le lien, s'il s'agit bien de ce type de motorisation dans ton cas, il semble que la 4 soit remplaçable à l'identique. On trouve un manuel ici et il y a en effet une commande impulsionnelle même si la connexion n'est plus sur un bornier classique (fig 13 p76):
https://need-door.fr/e-commerce/documen ... ic%204.pdf

Par contre, le contrôle du relais d'option (lié à l'info "fin de course") qui me servait à déterminer l'état ouvert/fermé avec 1 module unique pour commande et état (contact sec qubino avec une entrée logique indépendante utilisable si alimenté avec le 24Vcc interne de la motorisation) semble devenu moins immédiatement utilisable: L’électronique de contrôle du relais de puissance semble déporté sur la carte relais. Il doit donc falloir décoder des ordres sur leur bus câblé en RJ11 (a voir le schéma). Ballot comme changement.
f-d-m
Messages : 156
Inscription : 25 juin 2019, 21:36

Re: Script d'alerte de porte de garage laissée ouverte

Message par f-d-m »

lost a écrit : 20 déc. 2022, 13:48 même si la connexion n'est plus sur un bornier classique (fig 13 p76):
https://need-door.fr/e-commerce/documen ... ic%204.pdf
Bonjour @lost,

Non c'est un moteur supramatic comme celui-ci https://automatisme-plus.fr/motorisatio ... yen-m.html

Aussitôt que le bouton sec est actionné (et je suis certain de l'avoir raccordé comme il faut) le moteur se met en erreur 2 (absence de cellule photoélectrique - ce qui est correct, je n'en ai pas)

Après ça c'est factory reset obligatoire pour faire disparaître l'erreur, puis recalibration de la porte, etc.

Désolé pour la réponse tardive, joyeux Noël !
---
Bruxelles

RPi 3B, Domoticz 2024.7, SSD, dongle Zigbee Sonoff
IPX-800 V3
multiples Sonoff et similaires (Tasmota, ESPeasy), multiples appareils Zigbee
SMA Sunny Boy 3.6
Ksenia Lares 4.0
Compteur digital à la norme DSMR5 - interface ESP32
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Script d'alerte de porte de garage laissée ouverte

Message par lost »

f-d-m a écrit : 25 déc. 2022, 18:09 Non c'est un moteur supramatic comme celui-ci https://automatisme-plus.fr/motorisatio ... yen-m.html
Salut,

Pourtant il est précisé sur la notice en 4.2.2+fig12 p71 que plusieurs poussoirs peuvent être raccordés en parallèle??!!
https://automatisme-plus.fr/index.php?c ... achment=18

Et le bouton éclairé est exactement le même que le mien (au moins le modèle PB3, pas le IT3b) à voir la notice. Attention car le bornier au dessus est justement celui de la cellule photo-électrique!

Le comportement que tu as, câblage correct (tout dans le bornier poussoir), est donc assez inattendu avec un relais libre de tout potentiel (idem interrupteur, comme précisé dans la notice). Attention à ce point car une tension alim est présente pour éclairer l'interrupteur: Possible que si la moindre tension parasite est détectée sur le bornier de connexion inter à l'allumage de la motorisation il y ait une mise en sécurité. Possible aussi que cela se produise si le relais n'est pas configuré NO (Normalement Ouvert): On attends une impulsion fermé courte ici, si c'est fermé quand on alimente (attention au déclenchement d'un mode de configuration/test sur ce type de manip) ou que ça le reste trop longtemps, possible qu'il y ait aussi mise en sécurité sur inter présumé défaillant (même si ici avec un intitulé incorrect).

A ta place, si tout ceci est OK, je vérifierais que le relais ne sort pas une alim parasite sur ses bornes (mesure alimenté à la même alim que sur la porte, juste bornes relais non raccordées, en état ouvert ; Fermé qqsoit le type on n'aura pas de différence de potentiel) même si c'est censé être un contact sec.

Joyeuses fêtes également!
f-d-m
Messages : 156
Inscription : 25 juin 2019, 21:36

Re: Script d'alerte de porte de garage laissée ouverte

Message par f-d-m »

J'avais juste mis un câble plat à 2 conducteurs et un bouton de sonnette pour tester, avant de faire une pose fixe dans mon garage.

J'ai bien un bouton illuminé bleu, mais il y a 2 autres petits boutons: un pour allumer la lampe, et l'autre pour verrouiller (rendre inactive l'ouverture par télécommande)

Il me semblait qu'il n'y avait pas d'autre bornier que celui pour ce bouton-là.

Faudra que je ré-essaie. Merci pour l'encouragement !

Frédéric
---
Bruxelles

RPi 3B, Domoticz 2024.7, SSD, dongle Zigbee Sonoff
IPX-800 V3
multiples Sonoff et similaires (Tasmota, ESPeasy), multiples appareils Zigbee
SMA Sunny Boy 3.6
Ksenia Lares 4.0
Compteur digital à la norme DSMR5 - interface ESP32
Répondre