[Script VB] Macro statut des composants du serveur

La section pour partager vos scripts et demander de l'aide dans vos scénarios.

Modérateur: HoMIDoM

[Script VB] Macro statut des composants du serveur

Messagede solo » 01 FĂ©v 2015, 20:39

Bonjour,

Histoire de ne pas que poser des questions, voici une macro qui permet de recevoir un mail récapitulant l'état de tous les composants du serveur, ainsi que la date de dernière modification (trié par cette dernière). Je me suis fait un trigger temps, et je reçois un mail par jour. Ça me permet de m'assurer que tout va bien coté serveur, et que des composants "discrets" de type alarme incendie and co sont toujours bien vu. J'ai mis la météo et le saint du jour histoire de rajouter des informations :D

Le mail n'est pas très beau, je ne sais pas s'il est possible d'envoyer un mail en html histoire de mieux le formater, à tester !

En espérant que ça puisse servir à d'autres !

Code: Tout sélectionner
'***************************************************
' Macro I am Alive :
'  Envoi un mail avec l'Ă©tat de chaque Ă©lĂ©ment
'***************************************************
Imports System
Imports System.IO
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
Imports Homidom
Imports System.Net.Mail

Namespace Dynam
    'Ne pas supprimer cette class
    Public Class DynamicCode

        'Ne pas supprimer cette function
        Public Function ExecuteCode(ParamArray prmParameters() As Object) As Object
            Dim Serveur As Homidom.Homidom.server
            Serveur = prmParameters(0)
            Try

                Serveur.log(1, 2, "Macro VB:EtatSrv", " Heure: " & Serveur.GetTime)

                Dim contenu As String = ""
                contenu = contenu & "Bonjour, le serveur Homidom est up ! " & Chr(13) & Chr(13)
                '  Relever l'ID du composant mĂ©tĂ©o et remplacer par la bonne valeur
                Dim meteoJour As HoMIDom.HoMIDom.TemplateDevice = Serveur.ReturnDeviceById("123456789", "188beb3f-363f-4f47-848f-686c259a2c75")
                contenu = contenu & "MĂ©tĂ©o : " & Chr(13)
                contenu = contenu & meteoJour.JourToday & " : tempĂ©rature : " & meteoJour.TemperatureActuel & ", minimale : " & meteoJour.MinToday & ", maximale " & meteoJour.MaxToday & ", condition : " & meteoJour.ConditionActuel & Chr(13)
                contenu = contenu & meteoJour.JourJ1 & " : minimale : " & meteoJour.MinJ1 & ", maximale " & meteoJour.MaxJ1 & ", condition : " & meteoJour.ConditionJ1 & Chr(13)
                contenu = contenu & meteoJour.JourJ2 & " : minimale : " & meteoJour.MinJ2 & ", maximale " & meteoJour.MaxJ2 & ", condition : " & meteoJour.ConditionJ2 & Chr(13)
                contenu = contenu & meteoJour.JourJ3 & " : minimale : " & meteoJour.MinJ3 & ", maximale " & meteoJour.MaxJ3 & ", condition : " & meteoJour.ConditionJ3 & Chr(13)
                contenu = contenu & Chr(13)
                Dim saintJour As Homidom.Homidom.TemplateDevice = Serveur.ReturnDeviceById("123456789", "saint01")
                contenu = contenu & "C'est la saint " & saintJour.value & " ! " & chr(13)
                contenu = contenu & "Heure du serveur : " & Serveur.GetTime & chr(13)
                Dim demSrv As Homidom.Homidom.TemplateDevice = Serveur.ReturnDeviceById("123456789", "startsrv01")
                contenu = contenu & "Service dĂ©marrĂ© : " & demSrv.value & chr(13)
                contenu = contenu & chr(13)
                contenu = contenu & "Statut des composants : " & chr(13)
                'get value of composant
                Dim lesDevices As System.Collections.Generic.List(Of monDevice) = New System.Collections.Generic.List(Of monDevice)
                For Each device As Object In Serveur.Devices
                    lesDevices.Add(New monDevice(device))
                Next
                lesDevices.Sort()
                For Each device As monDevice In lesDevices
                    contenu = contenu & device.toString()
                Next
                contenu = contenu & chr(13)

                Dim _action As Homidom.Homidom.Mail
               ' Il faut que dans les paramètres du serveur l'envoi de mail soit configurĂ©, et mettre son adresse email Ă  la place de monmail @
                _action = New Homidom.Homidom.Mail(Serveur, Serveur.GetSMTPMailServeur("123456789"), "monmail@monprovider.fr", "Macro VB Is Alive", contenu, Serveur.GetSMTPServeur("123456789"), Serveur.GetSMTPPort("123456789"), Serveur.GetSMTPSSL("123456789"), Serveur.GetSMTPLogin("123456789"), Serveur.GetSMTPPassword("123456789"))
                _action.Send_email()

            Catch ex As Exception
                Serveur.log(8, 2, "Macro VB:EtatSrv", "Exception: " & ex.message)
            End Try

            Return "ok"

        End Function

    End Class

    Public Class MonDevice
        Implements IComparable(Of MonDevice)
        Dim nom As String
        Dim valeur As String
        Dim dateModif As String
        Dim ecarModif As String

        'Sub New(ByVal device As HoMIDom.HoMIDom.TemplateDevice)
        Sub New(ByVal device As Object)
            Me.nom = device.Name
            Me.valeur = device.Value
            Me.dateModif = device.LastChange
            Me.ecarModif = stringDelai(device.LastChange)
        End Sub

        Overrides Function toString() As String
            Dim leNom As String = nom
            Dim laValeur As String = valeur
            Dim laDateModif As String = dateModif
            Dim lEcarModif As String = ecarModif
            Dim i As Integer = 0
            leNom = leNom & " : "
            For i = 35 To leNom.Length Step -1
                leNom = leNom & " "
            Next
            laValeur = laValeur & ", "
            For i = 12 To laValeur.Length Step -1
                laValeur = laValeur & " "
            Next
            laDateModif = "  " & laDateModif & "  "
            Return leNom & "  " & laValeur & " " & laDateModif & "  " & lEcarModif & Chr(13)

        End Function

' Ici on peut personnaliser comment est exprimé l'écart, j'ai fait comme ça car je trouve ça plus lisible, on peut aussi
' ne renvoyer que l'Ă©cart directement : return ecart.toString()
        Function stringDelai(ByVal ladate As String) As String
            If IsDate(ladate) = False Then Return ""
            Dim maintenant As Date = DateTime.Now
            Dim laDateConv As Date = Convert.ToDateTime(ladate)
            Dim ecart As TimeSpan = maintenant - laDateConv
            Select Case ecart.TotalMinutes
                Case Is < 5
                    Return "< 5 mn"
                Case Is < 10
                    Return "< 10 mn"
                Case Is < 20
                    Return "< 20 mn"
                Case Is < 30
                    Return "< 30 mn"
                Case Is < 60
                    Return "< 1 h"
                Case Is < 120
                    Return "< 2h"
                Case Is < 240
                    Return "< 4h"
                Case Is < 480
                    Return "< 8h"
                Case Is < 720
                    Return "< 12h"
                Case Is < 1440
                    Return "< 24 h"
            End Select

            Select Case ecart.TotalHours
                Case Is < 48
                    Return "1 journĂ©e"
                Case Is < 72
                    Return "2 jours"
                Case Is < 96
                    Return "3 jours"
                Case Is < 120
                    Return "4 jours"
                Case Else
                    Return "+4 jours !"
            End Select
        End Function

        Public Function CompareTo(other As MonDevice) As Integer _
            Implements IComparable(Of MonDevice).CompareTo
            If Date.Parse(dateModif) = Date.Parse(other.dateModif) Then
                Return 0
            End If
            If Date.Parse(dateModif) < Date.Parse(other.dateModif) Then
                Return 1
            Else
                Return -1
            End If
        End Function

    End Class

End Namespace
solo
P'tit Guru de domotique
 
Messages: 54
Inscription: 07 Nov 2013, 07:21

Re: [Script VB] Macro statut des composants du serveur

Messagede NĂ©o32 » 02 FĂ©v 2015, 17:48

Merci pour le partage, ça fonctionne a merveille :D
HoMIDoM- Le système complet et gratuit de domotique pour la maison
Avatar de l’utilisateur
NĂ©o32
Dieu de domotique
 
Messages: 680
Inscription: 07 Jan 2013, 08:09
Localisation: Charleroi (Belgique)

Re: [Script VB] Macro statut des composants du serveur

Messagede pchatill » 05 FĂ©v 2015, 09:37

Merci solo!
Ca marche sans probleme.
Je suis a la recherche d'exemples de ce type.
Les possibilités sont énormes, encore faut-il savoir les utiliser!!
pchatill
Dieu de domotique
 
Messages: 219
Inscription: 12 AoĂ» 2013, 15:40

Re: [Script VB] Macro statut des composants du serveur

Messagede solo » 05 FĂ©v 2015, 10:13

Merci, je suis en train d'en faire d'autres, je les posterais quand j'aurai fini.
solo
P'tit Guru de domotique
 
Messages: 54
Inscription: 07 Nov 2013, 07:21

Re: [Script VB] Macro statut des composants du serveur

Messagede NĂ©o32 » 05 FĂ©v 2015, 21:42

Cool, tu vas faire des heureux :D
HoMIDoM- Le système complet et gratuit de domotique pour la maison
Avatar de l’utilisateur
NĂ©o32
Dieu de domotique
 
Messages: 680
Inscription: 07 Jan 2013, 08:09
Localisation: Charleroi (Belgique)


Retourner vers Scripts VB

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

Copyright © 2011 - Touteladomotique.com - Tous droits rĂ©servĂ©s
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique