Smartphone in Domoticz toevoegen met Ping

Om aanwezigheidsdetectie (presence detection) toe te passen binnen je netwerk om te kunnen gebruiken in Domoticz kun je gebruik maken van ping. Wil je ook aan de slag met presence detection in Domoticz? Lees dan verder!

Dit script kun je gebruiken om te testen of het netwerk apparaat aanstaat en netwerkverbinding heeft. We zenden een ‘ping‘ naar het IP-adres van het apparaat. Als het apparaat aanstaat geeft het antwoord, anders niet. Op basis van deze test kun je een apparaat in Domoticz aan- of uitschakelen.

Ping script in Domoticz


1. Maak een nieuwe ‘Gebeurtenis’

Klik op Instellingen -> Meer Opties -> Gebeurtenissen

Nieuwe gebeurtenis (script/Event)

Klik op ‘New’.

Geef het script een naam, bijvoorbeeld PingScript, zet het type op Lua en kies voor Time.

 

Verwijder de volledige inhoud in het scherm en plak onderstaande code:



function DevicePing(ip, device)
    ping_success=""
    ping_success=os.execute('ping -c1 -w1 ' .. ip)
    if ping_success then
       print("ping success " ..device)
       DeviceOnOff('On',device)
    else
       print("ping fail " ..device)
       DeviceOnOff('Off',device) 
    end
end

function DeviceOnOff(Action, device)
 
 for deviceName,deviceValue in pairs(otherdevices) do
     if (deviceName==device) then
        if deviceValue == Action then
           print(tostring(device) .." staat al ".. tostring(Action))
        else
           commandArray[device] = Action
           print(tostring(device) .." " ..tostring(Action).. " gezet")
        end
     end
 end
end
 


commandArray = {}
 print("***************** start ping script *******************")
 DevicePing('IP-Adres','Smartphone')
 DevicePing('IP-Adres','HTPC')
 DevicePing('IP-Adres','IP-CAM')
 DevicePing('google.nl','InternetConnection')
 
 
 
 print("***************** end ping script *******************") 
return commandArray

2. Aanpassen van de code

Wijzig in de code de IP-Adressen in die van je apparaten. De naam na de komma moet exact overeenkomen met de naam in Domoticz. Meestal de naam van je Dummy Switch. Hoe je Dummy switches maakt en de rest van de aanwezigheidsdetectie opzet, lees je in de volledige Presence detection tutorial.

3. Toelichting werking code

De uitvoering van de code begint na CommandArray. Daar komt je als eerste de functie DevicePing tegen. Deze functie staat helemaal bovenaan en pingt het IP-Adres wat je opgegeven hebt tussen de haakjes. Als het resultaat van de Ping success is, spring je naar de DeviceOnOff functie. Deze voert de actie uit op het opgegeven device. Als dat klaar is, spring je naar de volgende regel onder commandArray.

5 Replies to “Smartphone in Domoticz toevoegen met Ping”

  1. Is het mogelijk om het script niet iedere minuut te laten zoeken, maar bijv. iedere 10-15 minuten.

    1. Hoi Edwin,

      Dat denk ik wel, alleen wel met een omweg. Standaard voert Domoticz alle Lua scripts van het type Time iedere minuut uit. Je zou een Dummy Switch kunnen aanmaken die iedere 10 minuten aangaat voor 1 minuut. Dat kun je doen met de Timer opties van de switch. Vervolgens maak je in het Pingscript een controle of deze Dummy switch aanstaat. Staat ie aan, dan het pingscript uitvoeren. Anders niet.

      Je kunt ook van het Lua type Device gebruik maken, maar daar heb ik nog (geen) ervaring mee.

      Laat maar weten of het gelukt is!

      Wouter

  2. Handig!
    Ik wil Domitcz laten kijken of mijn versterker aan staat, als dat zo is dan mag de sub ook aan. Jammer genoeg blijkt mijn Yamaha versterker zijn IP altijd aanwezig te zijn, ook als de versterker zelf uit staat, dit om aangezet te kunnen worden via de app. effe verder kijken hoe ik dit ga aanpakken.

    Script werkt verder zoals verwacht, ben alleen benieuwd waar en hoe de status wordt gepresenteerd…b.v. staat al aan …
    Gr Paul

    1. Hoi Paul,

      Leuk dat je reageert! Misschien kun je via de API van de versterker de status wel uit het apparaat halen. Ik weet natuurlijk niet om welk model het gaat, maar als ik Yamaha API zoek met google, stuit ik op dit project. Zo te zien kun je de benodigde on/off informatie eruit halen. Lees anders ook mijn blogpost over het werken met de Philips TV API deel 1 en 2 waarschijnlijk werkt het op een vergelijkbare manier!

      Nog wat aanvullende toelichting op de code:

      Ik heb twee aparte functie gemaakt die we makkelijk een aantal keer kunnen uitvoeren. Alleen de devices en de acties verschillen steeds. In de regels onder commandArray kun je de ip-adressen invullen en de namen van de devices die je wilt pingen. De functie DevicePing pingt dan het apparaat en concludeert of het apparaat On of Off is. Aan de hand daarvan wordt de functie DeviceOnOff geactiveerd.

      function DeviceOnOff(Action, device)
      for deviceName,deviceValue in pairs(otherdevices) do
      Domoticz gaat alle devices langs totdat hij ze allemaal gehad heeft. Hij behandeld ieder device apart, om de beurt

      if (deviceName==device) then
      Als het device (deviceName) die nu aan de beurt is dezelfde naam heeft als ‘device’ zijn we bij een apparaat dat we aan of uit willen zetten.

      if deviceValue == Action then
      Als de waarde van het device hetzelfde is als de actie die er uitgevoerd zou moeten worden… dan laten we de regel hieronder zien in het log en doen verder niks.
      print(tostring(device) ..” staat al “.. tostring(Action))
      else
      Als dat niet zo is, dan voeren we de actie uit.
      commandArray[device] = Action
      print(tostring(device) ..” ” ..tostring(Action).. ” gezet”)
      end
      end
      end
      end

      ik hoop dat de code nu wat duidelijker is en dat je een oplossing vind voor je versterker!

      Succes! Mocht je nog vragen hebben kun je natuurlijk hier weer reageren!

      Wouter

Laat weten wat je van dit artikel vindt!