Algemene info

Sonoff als Deurbelsensor

Sonoff_Tasmota

De Sonoff schakelaar is al voorzien van Tasmota software.

 

Vanuit het hoofdmenu  à Configuratie à Configureer Module.

GPIO14 is ingesteld als een schakelaar. En dat is de koppeling naar de deurbel door middel van onderstaande elektronische schakeling.

Met een MQTT Server heb en een pythonscript maak ik met een bewakingscamera een opname als de bel wordt ingedrukt, die ik dan weer doorstuur aan de app “Telegram”.

De Tasmota software heeft ook nog een andere mogelijkheid om zaken aan te sturen en dat is door middel van regels. Ik gebruik deze regels “rule” om een extra bel te activeren.
Heel omslachtig, namelijk weer via Domoticz. Maar makkelijk aan te passen als ik geen Domoticz heb draaien, maar direct over het netwerk wil doen.

Het aansturen van de extra bel, via domoticz, doe ik met de opdracht: http://Domoticzserver:8080/json.htm?type=command&param=switchlight&idx=77&switchcmd=On Daarbij heeft de extra bel het idx 77 in Domoticz.  (Zie bij Apparaten onder Instellingen).

Om bij de Sonoff gebruik te kunnen maken van rules, maak dan de keuze “Console” vanuit het hoofdmenu. Bij de tekst ”Geef opdracht” kun je dan een commando of “rule” invoeren.

Op onderstaande link vond ik veel over rules. https://tasmota.github.io/docs/Rules/

De basis voor een rule is: “ON <trigger> DO <command> [ENDON | BREAK]”

Vergeet niet om de rule te activeren door het commando “rule on” in te geven.

Om simple te beginnen voer ik de volgende opdracht in:
“rule1 ON Power1#State DO   Websend [192.168.9.184]/cm?cmnd=Power TOGGLE ENDON”
Deze opdracht zorgt dat een Sonoff op IP adres  192.168.9.184 omschakeld sla je deze Sonoff aan zet.
Controleer of de regel aan staat, geef anders de opdracht “rule1 on”

Om de eerder genoemde url naar Domoticz te sturen wordt de opdracht
“Rule1 ON Power1#State DO   Websend  [192.168.9.234:8080]/json.htm?type=command&param=switchlight&idx=77&switchcmd=On ENDON”

Dit alles achter elkaar ingevoerd.
De opdracht uit elkaar gehaald:
rule1 : Dit is regel 1
ON Power1#State: Als de waarde POWER1 aan is…
DO   Websend  [192.168.9.234:8080]/js……. :  over dan deze opdracht uit, dus verzend dese URL.
ENDON : Einde opdracht.

Voor verdere uitleg kijk naar de uitleg op de wiki van Tasmota commands.

Hij verstuurd de opdracht zodra je op de knop op de Sonoff drukt, of GPIO14 aan massa legt dmv de elektrische schakeling, of door het drukken op de knop op de Sonoff.

IP adres thuis

Met welk IP adres ben ik nu aan het werken.

Vaak is dat zo opgelost door naar oa de link https://whatsmyip.com/ te gaan en daar staat je IP adres.
Optie twee is om bij je modem in te loggen en te kijken wel WAN adres hij heeft.

Maar, als je niet thuis bent en je wilt je netwerk bereiken, dan heb je bij b.v Ziggo, met een dynamisch IP adres een uitdaging. Zeker bij Ziggo wisselt het IP adres niet, maar je zou het maar net nodig hebben als je in wilt loggen op je thuisnetwerk.

Als eerste oplossing wordt natuurlijk een DDNS geadviseerd. Die houd voor jou bij wat je IP adres is en geeft dan een URL naar jouw IP adres. Daarvoor moet je dan wel software laten draaien op jouw netwerk. (soms zit dat ook ergens in ingebakken, maar toch)

Ik heb een eigen website bij een Host draaien en zocht naar een andere oplossing.
Die was redelijk snel gevonden. Ik reserveer gewoon een plekje op mijn eigen website waar ik mijn IP van mijn thuiswerk neerzet. Omdat de website aan een domein hangt, kan ik die altijd vinden.

Maar hoe zorg ik dat die info op de website komt.
Als eerste heb ik een simpel formulier in HTML gemaakt. Daar vervolgens een PHP schil omheen gebouwd.
Ik kan met een "GET" opdracht in het formulier gegevens naar de website sturen. Die pak ik dan op met een PHP script, die dat vervolgens in de Database zet.

Vanaf mijn thuisnetwerk, stuur ik elk uur een bericht naar mijn website. In het PHP script kijk is of de juiste verificatie-code is gegeven. Zoja, dan weet ik dat die aanvraag van mijn thuisnetwerk kwam en in PHP weet ik ook het IP-adres van de afzender. Dus is het IP-adres van mijn thuis-netwerk op de server bekend. Die toon ik dan het volgend bezoek op het scherm.

Vanuit mijn thuisnetwerk heb ik een Raspberry Pi die om het uur een bevraging doet en daardoor mijn IP adres bijwerkt. Dat doe ik met een Curl opdracht, die ik start met een Cronjob.
D
aarvoor heb ik de regel "@hourly sh /home/pi/IP_doorgeven.sh > /home/pi/logs/cronlog 2>&1" in mijn crontab toegevoegd.

En die verwijst weer naar het bestand "IP_doorgeven.sh"

#!/bin/bash
curl -s 'https://www.mijn_website.nl/Mijn_thuis_ip_adres_is.php?veri=mijn_veiligheidscode_die_ik_ter_controle_en _veiligheid_mee_stuur&Submit=Verzenden' > /dev/null

En dan nog chmod +x IP_doorgeven.sh

Om het programma uitvoerbaar te maken

Op mijn_website staat dan het onderstaande PHP programma "Mijn_thuis_ip_adres_is.php"

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>IP</title>
</head>
<body>
<?php

// -----------------------------------------------------------------------------
// database instellingen
// -----------------------------------------------------------------------------
$servername = "localhost";
$username = "gebruikersnaam van de database";
$password = "wachtwoord van de database";
$dbname = "de database naam";

// -----------------------------------------------------------------------------
// Maak verbinding voor opvragen huidige IP adres
// -----------------------------------------------------------------------------
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
//$sql = "SELECT * FROM IP_vpn";
$sql = "SELECT IP_id, IP_adres, IP_date FROM IP_vpn WHERE IP_id = 1"; // Alleen het eerste record is nodig
$result = $conn->query($sql);
if ($result->num_rows == 1) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "IP " . $row["IP_adres"]. " van datum: " . $row["IP_date"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();

// -----------------------------------------------------------------------------
// Controle of een nieuw IP adres is verkregen en de code is gegeven (veri)
// -----------------------------------------------------------------------------
$datum_tijd = date("Y-m-d H:i:s"); // nodig voor update datum in de tabel
$veri = $_GET["veri"]; // kijk of er een veri (verificatiecode is meegegeven
if ($veri == "mijn_veiligheidscode_die_ik_ter_controle_en _veiligheid_mee_stuur") { // de verificatiecode

// -----------------------------------------------------------------------------
// Maak verbinding met de DB voor een update
// -----------------------------------------------------------------------------
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "UPDATE IP_vpn SET IP_adres='".$_SERVER["REMOTE_ADDR"]."',IP_date='".$datum_tijd."' WHERE IP_id=1";

if ($conn->query($sql) === TRUE) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . $conn->error;
}
$conn->close();
}
?>
</body>
</html>

De gemaakte code is niet mijn mooiste, maar een even snel geknipt en geplakt vanuit het internet.

Mocht je het na willen bouwen en je komt er niet uit, neem dan contact met me op via de contactpagina.

Bij mij draait het naar volle tevredenheid.

 

 

Waarom deze website

 

Hard- en Softwareprojecten die uitvoerig zijn beschreven op de site om ze te kunnen reproduceren.

Dat is de doel van deze website, want vaak ben ik alweer vergeten hoe ik een object ben aangevlogen een tot het resultaat ben gekomen. 
En als er dan een aanpassing gemaakt moet worden is er weer dezelfde zoektocht nodig. Dat vond ik zonde van de tijd en ben daarom maar on-line aan de slag gegaan, zodat ook andere wat hebben aan mijn ervaring.

Mogelijk dat de kleine aandachtspuntjes u kunnen helpen bij het bouwen van soort gelijke projecten.

Het bijhouden van de website is voor mij ook een van de vele  hobby's en ik heb maar een beperkte hoeveelheid tijd.

Dus het kan voorkomen dat het op de website niet mooi is afgesloten, terwijl het bij mij volledig werkt.
Maar het kan dus ook in de ijskast geplaatst zijn in verband met andere prioriteiten.
De projecten die ik bewerk zijn voorzien van een mededeling boven in de pagina.

Het moeilijkste blijft altijd als het eindelijk aan de praat is gekregen nog even de tijd te nemen om het te documenteren. Een daar hoop ik dit mee te doen. De projecten die al draaide, die heb ik snel even uit het blote hoofd op de site gezet.

Natuurlijk is het bouwen van deze website ook een project en heb dus ook maar gelijk een pagina over de bouw en verdere ontwikkeling gemaakt.

Voor contact is een contactpagina gemaakt. daarmee is het mogelijk om mij een email te sturen.

Joomla

Ik ben deze website gaan bouwen in Joomla omdat het ook door een bekende werd gebruikt.
Tja wat is er fijner dan een bekende die je kan vragen hoe iets moet. Dus was de keuze snel gemaakt.

Ik had dit domein al een aantal jaren en liet dat draaien bij een hoster, ik heb het dus niet thuis staan.
Het nadeel is dat je beperkt bent in dingen die je kunt doen, maar ook veel zaken worden voor jou gedaan.

Ik heb dit domein laten hosten  bij "Internet Today"  en kwam al vrij snel tot de ervaring dat ik niet de juiste instellingen had.

Na een telefoongesprek met de technische dienst, waar ik goed werd geholpen werd mijn omgeving aangepast.

Daarna heb ik Joomla gedownload naar mijn PC thuis en met FTP geupload. een werkwijze die ik me in het verleden had aangeleerd.

Ik kreeg na de installatie bijna allemaal groene vinkjes, behalve de laatste. Iets met een config bestand. Wat het was weet ik niet meer. Maar ik kon wel verder

Had ik het net geïnstalleerd en was ik tevreden, komt er een nieuwe versie uit. En krijg ik een foutmelding als ik die wil installeren.
Om dat toch te kunnen doen heb ik maar even met de rechten gespeeld. Met mijn FTP programma Filezilla heb ik de rechten van de bestanden en directory's aangepast.
Ik heb ze voor even maar op 777 gezet. Zodat er alles mee gedaan kon worden. Dit kon ik doen door alles bij mijn hoster te selecteren en dan vervolgens met de rechtermuisknop in het keuze menu de optie "bestandsrechten..." te selecteren. Daarna heb ik de Numerieke waarde op 777 gezet. Let op: Je kunt ook alleen bestanden of directory's(mappen) selecteren.

Vergeet vooral na de aanpassing de bestanden weer op 644 te zetten en de mappen op 755.

Het installeren was weer gelukt en ook de taal-update heb ik op die manier gedaan.

Maar ik ben daar niet helemaal blij mee en heb dus weer contact gehad met de technische dienst en een mogelijke oplossing gevonden voor het ongemak.

Ik moet het nog even testen en als het goed werkt, zal ik het op de site zetten.