Categorieën
Domotica Domoticz Scripts

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!

Ping script in Domoticz

Advertenties


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.

  1. Maak een nieuwe dummy aan

    Om je smartphone aan en uit te kunnen zetten in Domoticz moet je deze eerst toevoegen als dummy. Doe dit voor ieder apparaat apart. Ga naar Instellingen | Hardware. Maak een Dummy hardware device aan als je die nog niet hebt. Noem ‘m bijvoorbeeld Dummies. Klik daarna op ‘Maak virtuele sensoren’. Geef de naam in van je apparaat, bijvoorbeeld Philips TV of Smartphone Wouter.

  2. Maak een nieuwe Gebeurtenis

    Klik op Instellingen -> Meer Opties -> Gebeurtenissen.
    Klik op ‘New’.
    Geef het script een naam, bijvoorbeeld PingScript, zet het type op Lua en kies voor Time.

  3. Voeg code in

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


-- Ping script by Wouter 
-- twoenter.nl/blog

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)
    
    local deviceValue = otherdevices[device]
    
    if deviceValue ~= Action then
        commandArray[device] = Action
    end
end
    


commandArray = {}
print("*****************   start pingen     *******************")
DevicePing('IP ADRES','APPARAAT 1')
DevicePing('IP ADRES','APPARAAT 2')
 
print("*****************   end pingen     *******************") 

4. Aanpassen van de code

Wijzig in de code de regels met “IP-Adres” in die van je apparaten. Verder niets! De naam na de komma moet exact overeenkomen met de naam in Domoticz.

Het maakt niet uit hoe je apparaten heten, als je maar de namen consequent overneemt. Domoticz is hoofdlettergevoelig! Ik vind het makkelijk om de laatste cijfers van het IP-adres in de naam van het dummy apparaat op te nemen, maar dat hoeft natuurlijk niet.

5. 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.

6. Is er Iemand Thuis?

Je kunt dit script verder uitbreiden met een Iemand Thuis functie om zo verdere acties uit te voeren zoals het hoger of lager schakelen van de thermostaat of het in en uitschakelen van de verlichting. Hoe je dat doet lees je in Verlichting inschakelen als je thuis bent

Advertenties

30 reacties op “Smartphone in Domoticz toevoegen met Ping”

Hoi Wouter,

Ik heb het script gebruikt om d.m.v onze smartapparaten een virtuele dummy schakelaar genaamd ” Detect aanwezig” aan/uit te zetten, dat werkt mooi! Bedankt voor je bijdrage!! 😀

Ik heb nu een blocky script gemaakt waarmee ik mijn thermostaat d.m.v. open term via Domoticz het setpoint kan laten aanpassen als er af/aanwezigheid gedetecteerd wordt.

Waar ik tegen aan loop is dat als je de thermostaat op deze manier automatiseert dat die de handbediening overruled, dus als je met de hand het setpoint even iets wil aanpassen gaat hij weer terug naar het setpoint welke ik in blocky heb gezet.

Ik zoek dus een mogelijkheid dat de thermostaatknop van mijn Remeha isense via open term kan samenwerken met het script……. of zelfs het setpoint van het script aan past …. of is er nog een andere optie?

Groeten,

Allard

Hoi Allard,

Goed dat het gelukt is! Leuk om te horen!

Het ‘probleem’ is denk ik dat het blocky script iedere minuut uitgevoerd wordt. Dus die zal dan inderdaad al snel de handmatige temperatuur overrulen.

Je zou een dzvents script kunnen maken dat alleen gestart wordt wanneer de ‘iemand thuis’ switch aan of uit gezet wordt. Dit script zet de temperatuur 1x goed (niet iedere minuut) en wordt verder niet meer uitgevoerd totdat de ‘iemand thuis’ switch weer veranderd. Het is dan belangrijk dat ook de ‘iemand thuis’ niet iedere minuut aangepast wordt, ook niet van status ‘aan’ naar ‘aan’.

Wanneer je dan handmatig de temperatuur veranderd op je thermostaat heeft domoticz niet dat niet door en werkt het zoals je wilt.

Succes!

Wouter

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

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

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

Hoi Wouter,

Dit script is een hele gemakkelijke manier om met een netwerkgebruiker te pingen..
Ik heb het geinstalleerd om zo onze smartphone’s te pingen, om te kijken of er iemand thuis is.
Waar ik tegen aan loop, is dat de ping verbinding naar mijn telefoon weg valt. Zodra ik dan mijn telefoon weer aanraak, gaat de ping weer lopen..
Ik heb een Samsung telefoon, met android, en wifi is ingeschakeld tijdens standby van telefoon..
Heb jij misschien enig idee wat hier aan te doen is.?

Beste Johan,

Leuk dat je reageert. Dit probleem hoor ik helaas vaker, maar ik heb daar wel een oplossing voor!

Check even het vervolg van deze blog: Verlichting inschakelen als je thuis bent

Het script uit die post borduurt verder op het ping script. We maken een extra dummy “Iemand Thuis” aan.
Dus, hij pingt steeds de ingevoerde smartphones of andere apparaten, zolang het apparaat antwoord, blijft de smartphonedummy aan en staat Iemand Thuis ook aan.
Als de apparaten niet te pingen zijn, schakelt het script de smartphonedummy uit. Maar het laat de dummyswitch Iemand Thuis aan totdat een kwartier lang de smartphones niet meer te pingen zijn. Mocht een apparaat weer terug online komen binnen het kwartier, dan blijft Iemand Thuis gewoon aan. Maar is er na een kwartier echt niemand, dan zal Iemand Thuis uit gaan en op basis van die gebeurtenis kun je je verlichting of verwarming lager schakelen.

Succes en veel plezier!

Wouter

Hoi Wouter,

Zoals jij het beschrijft had ik het ook al gedaan, echter mijn smartfoon wordt soms uren (als ik deze niet gebruik) niet gezien door mijn router, dus ook niet door Domoticz.
Is er misschien nog een optie om mijn WIFI wakker te houden op mijn Samsung telefoon, want dat is volgens mij het probleem waarom de verbinding weg valt..

Groet Johan

Hallo Johan,

Mooi dat het werkt! De vraag is of je wel wil dat je Samsung de wifi constant aanhoudt. Wifi vreet namelijk veel stroom…

Waarschijnlijk is het mij nog nooit zo opgevallen omdat ik meestal binnen een half uur m’n telefoon wel gebruik/check.

Je kunt ook geofencing gebruiken om je thuis te melden. Zorg dan wel dat het niet conflicteert met het pingen. Je kunt geofences instellen in de (betaalde) domoticz app, of een gelijkwaardige app.

Succes!

Wouter

Hoi Wouter, top script werkt goed, alleen klopt het aantal minuten van de NiemandThuis script niet, hij runt het script elke seconde dus, na 15 seconde denkt die al dat er niemand meer is, jij zegt dat Domoticz de events elke minuut runt, maar dat is dus niet zo, kan ik dat ergens aanpassen >

Hoi Dennis, ik denk dat je type script op “all” staat in plaats van “time”.

Bij scripts van het type “all” word het script bij iedere gebeurtenis uitgevoerd. Bijvoorbeeld het ontvangen van de meterstanden uit je slimme meter, inschakelen van een lamp, update van gegevens van een thermometer… ect. Vaker dan 1x per minuut dus.

Bij het type “time” wordt het script iedere minuut uitgevoerd.

Je kunt het type instellen in de kolom waar je ook de naam van het script invoert.

Succes

Wouter

Hoi Wouter,
Enorm bedankt voor je script. Je maakt het duidelijk ook voor degenen die nauwelijks ervaring hierin hebben (lees: ik).
Ik zal wel een beginnersfout maken, maar: na toevoegen van de ip-adressen verschijnt er niets in mijn switches-overzicht. Hoort dat zo?
Groeten, Joep

Beste Joep,

Dank je wel! Leuk dat je het probeert en wil leren. Ik probeer mijn handelingen altijd zo goed en simpel mogelijk te verwoorden. Ik zie dat ik in deze uitleg vergeten ben te vermelden dat je per apparaat dat je wilt pingen een dummy device moet aanmaken. Die verschijnen niet automatisch maar moet je handmatig aanmaken:

Ga naar Instellingen -> Hardware
Maak een Dummy hardware aan als je die nog niet hebt.
Maak een virtuele sensor aan van het type Switch en noem het naar het apparaat, bijvoorbeeld Philips TV.

Nu gaat het je lukken denk ik, anders hoor ik het wel.

Succes,

Wouter

Goeden dag
ik ben pas gestart met domoticz heb een raspberry PI 3B+ en een RFXcom433 aangeschaft. Voor elkaar gekregen dat mijn raspberry van USB stick opstart en een paar lampschakelaars aan de praat gekregen, met een hoofdschakelaar voor allen tegelijk. Nu heb ik dit script ingevoerd onder gebeurtenissen. luna en time, mijn IP adres en naam smartphone opgegeven en opgeslagen. Maar nu weet ik niet hoe ik het script in domoticz op moet starten en waar ik de gegevens van het pingen op kan halen.
Ik hoop dat iemand mij hier mee kan helpen, alvast bedankt

Beste Rene,

Leuk dat je begonnen bent met domotica! Het opstarten en het beginnen te begrijpen duurt even maar als je het eenmaal door hebt is het erg leuk! Ik zal je verder opweg helpen.

Domoticz voert alle scripts (gebeurtenissen) van het type time automatisch iedere minuut uit. Dus als het script enabled is, start het automatisch. Dit kun je zien in de log. Je hoeft niets in te vullen in de dummy devices bij aan en uit acties. Dus als je het juiste ip adres van bijvoorbeeld je iphone invoert in het script en daarvoor een dummy hebt aangemaakt, gaat het werken!

Kom je zo verder?

Groet Wouter

Ik ben weer wat verder gekomen heb een dummy aangemaakt en verwezen onder” Aan actie” naar
script://PingScript. Krijg nu de volgende meldingen in mijn log; SQHelper:error script not found home/pi/domoticz/scripts/PingScript”
en
Luna………………..start ping script………..
status: luna: ping fail Mijn IPhone
status: luna: ping fail HTPC
status: luna: ping fail IP-cam
Luna………………..end ping script………..

Wouter leuk dat je zo snel reageerd. Ik ben weer een stuk verder in mijn log van Domotics zie ik dat de twee iphones met sucses worden gepingd maar dit is alleen als de iphones ontgrendeld zijn. Bij vergrendelde iphones is de ping failed. Dit is natuurlijk lastig als je het als aanwezigheids detectie wil gaan gebruiken. Weet jij misschien wat de oorzaak kan zijn

Jammer dan werkt dit script niet in samen werking met een iphone
Bedankt voor de hulp, mocht je nog een andere aanwezigheid detectie oplossing hebben binnen domoticz, dan hoor ik het graag.
Ik stel je tips en scripts op je site zeer op prijs, en ga ze zeker uitproberen. bedankt

Beste Rene,

Het script werkt wel zoals je hiervoor al schreef, maar je moet de telefoonswitches niet direct gebruiken als schakelaar voor je verlichting. Daarom linkte ik al naar het andere artikel, waarin je een “iemand thuis” switch maakt die een betere indicatie geeft of je thuis bent of niet en of de verlichting dan geschakeld moet worden. Ik zou zeggen probeer het eens. Anders kun je nog de andere presence detection methode gebruiken, waarbij de Pi zelf gaat pingen ipv domoticz.

Wouter

Hallo Wouter,

Ik hen dit script gebruikt en uiteindelijk werken gekregen.
Het script kwam bij mij nooit bij “commandArray[device] = Action”.

Dat heef ter mee te maken dat deviceValue de eerste keer leeg is.

Het script werkte weer nadat ik het statement

if deviceValue ~= Action then”

vervangen had door:

if deviceValue == Action then
else

Hoi Wouter,

Handig script dank je!
Ik heb wel dat pingen mislukt, ook naar bedrade apparaten.

Een minuut later lukt het wel, waar ligt dat aan en is er een timer in te bouwen? bv dat het pas na 5 min uitgeschakeld wordt?

Hoi Ivo,

Dank je wel,
ja het gebeurt wel eens dat het apparaat niet antwoord of niet op tijd antwoord geeft. Misschien dat domoticz dan het antwoord mist of het apparaat wat moet antwoorden te druk is, dat weet ik niet.

In onderstaand artikel bouw ik zo’n timer/teller in ten behoeve van een ‘is er iemand thuis’ switch.

https://www.twoenter.nl/blog/domoticz/verlichting-inschakelen-als-je-thuis-bent/

Groet en succes

Wouter

Laat weten wat je van dit artikel vindt!

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.