Posts over mijn 'home automation' systeem, voornamelijk posts over Domoticz.

Deurbel ombouw naar 433Mhz

Door ThinkPad op maandag 3 augustus 2015 11:16 - Reacties (4)
Categorie: Domotica, Views: 8.703

Ik had al een tijdje m'n domoticasysteem (Domoticz) in gebruik, maar mistte eigenlijk nog de uitlezing van de deurbellen.

Deurbellen zeg je? Ja... Ik heb er namelijk twee omdat ik in een appartement woon. Beneden in het portiek heb ik een intercom bel + microfoon&luidspreker. Maar aan de galerij heb ik ook een deurbel zoals in de meeste huizen in NL (8V AC trafo, knopje naast de deur en een bel met zo'n hamertje).

Even gezocht (ik had zo'n idee dat ik niet de eerste was met deze wens) en ik kwam al gauw de oplossing met een Finder relais en KaKu-deurbelzender tegen. Helaas heeft deze oplossing een vrij pittig prijskaartje, het relais kost je 19 euro en de deurbelzender 14,99 euro. In mijn geval zou ik het dan ook nog x2 moeten doen omdat ik twee bellen heb. Dat zou wel heel erg duur (67,98 euro) worden voor zoiets basaals 8)7

Ik heb daarom gekeken of ik zelf wat kon solderen om dit te bereiken. Ik had nog een goedkope 433Mhz remote uit China liggen. Deze heeft een PT2262 chip en kan daardoor gebruikt worden met de RFXCOM transceiver. Ook heeft deze twee drukknoppen (A en B ) die beiden met een eigen ID in Domoticz binnenkomen. See where we're going to >:) ?

Eerst maar eens één deurbel zien af te tappen. Ik ben gestart met die van de galerij aangezien dat een deurbel is die het meest lijkt op deurbellen in andere huizen. Ik heb eerst geprobeerd om met een optocoupler en weerstand het signaal af te tappen. Dit wou echter niet goed lukken, er gebeurde OF niks, OF de knopjes bleven constant 'ingedrukt'. Nog wat zitten prutsen met de weerstandswaarde, maar het lukte niet echt.

Daarom het idee met een optocoupler laten varen en wat aan het graven geweest in m'n onderdelenbak. Toen kwam ik twee printplaatjes met 12V relais tegen. Dit zou nog makkelijker zijn, het relais verbind de twee draadjes van de remote met elkaar en klaar.
Omdat de deurbel op wisselspanning werkt moest ik het nog even gelijkrichten. Dit gedaan met een diode. Om het signaal wat 'stabieler' te maken zodat het relais niet klappert heb ik nog een elco toegevoegd. Heb niet echt gelet op de waarden, gewoon wat spul gepakt wat ik nog had liggen.
Dit getest en bleek goed te werken voor de galerij-deurbel.

Daarna die van de intercom nog.
In de unit die in de gang hangt om terug te kunnen praten zit een zoemer, na even uitpluizen kwam ik erachter dat deze op 12V AC werkt. Dit scheelt aangezien ik een 12V relais had. Als de zoemer op 24V AC zou werken dan moest ik de schakeling verder aanpassen, nu kon ik hem gewoon 2x opbouwen.
Uiteindelijk kwam ik tot dit resultaat:
http://tweakers.net/ext/f/fk0P30SrT8KDTO9WwuTjEsgO/full.jpg

Het schema is als volgt:
http://tweakers.net/ext/f/Fly1GYzLyKkudd0dc6sTdgZL/full.png
Je sluit het spul parallel aan de huidige deurbel/zoemer aan. Eén van de draden gaat rechtstreeks naar het relais, de andere gaat door de diode om de spanning te gelijkrichten. Over de spoel staat nog een elco.
De uitgang van het relais (NO, Normally Open) is aangesloten op de soldeerpads van een van de knoppen van de afstandsbediening.
Het type diode & elco komt niet nauwkeurig, ik had dit nog liggen.

Welke afstandsbediening je moet hebben is even kijken, je wilt eentje die door de RFXCOM kan worden opgepikt, zoals de PT2262 chip. Ik moest bij mijn afstandsbediening nog een weerstand (die de oscillatiefrequentie regelt geloof ik) vervangen, volgens mij was het 4.7MΩ en heb ik hem vervangen door een 3.3MΩ

Ik krijg nu voor elke keer dat de bel wordt ingedrukt een signaal binnen in Domoticz. Opzich doet de schakeling het dus prima, maar aangezien de pakketbezorgers e.d. er een handje van hebben om 3x aan te bellen is het nogal irritant om binnen een paar seconden meerdere meldingen te krijgen.
Ik heb daarom een Lua script gemaakt voor Domoticz, die kijkt hoe lang de laatste keer aanbellen geleden was. Als dat minder dan 30 seconden is dan zal het script niet nog een keer een melding sturen. Is het MEER dan 30 seconden geleden (de volgende beller :+ ) dan zal er wel weer een bericht gestuurd worden. Werkt perfect!

Als Domoticz het signaal ontvangt dan trapt deze een Lua-script af. Dit Lua-script start vervolgens een Bash script
Dit laatste script maakt een snapshot van de IP-camera die op de voordeur gericht is. Het script stuurt mij een Pushover bericht gestuurd op m'n smartphone en wordt de afbeelding als bijlage in een mailtje naar mij verzonden. Aan het einde van het script wordt nog gekeken of er in de lokale map nog oude snapshots staan, alles ouder dan één week gooi ik weg, vind ik niet interessant om terug te kijken.
De werking van het script staat ook hier beschreven..

Uiteindelijk is dit het resultaat op m'n telefoon:
http://tweakers.net/ext/f/N8nxL2hZ5fEF5Bn5zPczT6Nf/full.png
Bij de deurbel aan de galerij krijg ik eenzelfde berichtje + een mailtje met fotootje.

Uiteindelijk ben ik voor nog geen 5 euro aan onderdelen klaar. Er zat nog een zwakke schakel in deze setup, de afstandsbediening werkt oorspronkelijk met een batterijtje (A23 12V-celletje). Er wordt niet heel vaak aangebeld, maar uiteindelijk gaat een batterij een keer leeg. Ik heb daarom een creatieve oplossing bedacht: de afstandsbediening werkt op 12V, net als m'n router! Ik heb daarom een Y-snoertje gemaakt waarmee ik 12V aftap van de voeding van m'n router en dat vervolgens weer doorlus naar de router en de afstandsbediening. Nu hoef ik mij dus geen zorgen meer te maken over het leeglopen van de batterij.

I love it when a plan comes together :Y)

Maandelijks pushbericht met meterstanden slimme meter

Door ThinkPad op maandag 3 augustus 2015 08:51 - Reacties (6)
Categorieën: Domotica, Energiebesparing, Views: 4.492

Ik lees mijn slimme meter (Kaifa MA105) uit met Domoticz, via een P1-kabel (RJ11 naar USB). Hiermee kan ik netjes m'n elektra en gasverbruik inzien via Domoticz.

Domoticz toont echter nergens de meterstanden (ja, intern in de database). Ik vind het toch wel fijn om die achter de hand te hebben. Mocht het gruwelijk uit de klauwen lopen en m'n Domoticz install helemaal kaput zijn dan heb ik iig nog de mogelijkheid om zelf m'n maandverbruik te kunnen berekenen a.d.h.v. de meterstanden.

Ik heb daarom een (Python) script gemaakt die mij op elke eerste dag van de maand om 0:01 (dus eigenlijk NET na de laatste dag van de vorige maand) een pushbericht (Pushover) stuurt met de meterstanden (elektra hoog, elektra laag & gas). Op die manier kan ik het zelf ook nog bijhouden in een Excel bestand of iets dergelijks.

Het bericht wat je krijgt ziet er zo uit:
http://tweakers.net/ext/f/qvKvhRr02CaKyZPhTEeumeqn/full.png

Het Python-script:

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import sys
import json
import urllib2
import re
import time
import datetime
import httplib, urllib
 
def open_port():
    pass
 
def close_port():
    pass
 
class Domoticz():
 
    def __init__(self, url):
 
        self.baseurl = url
 
    def __execute__(self, url):
 
        req = urllib2.Request(url)
        return urllib2.urlopen(req, timeout=5)
 
    def get_device(self, xid):
        """
        Get the Domoticz device information.
        """
        url = "%s/json.htm?type=devices&rid=%s" % (self.baseurl, xid)
        data = json.load(self.__execute__(url))
        return data
 
 
def get_el_values(url, device_id):
    """
    Get electricity meter readings.
    """
 
    device_data = Domoticz(url).get_device(device_id)
    data = device_data['result'][0]['Data']
 
    ex = re.compile('^([0-9\.]+);([0-9\.]+);([0-9\.]+);([0-9\.]+);([0-9\.]+);([0-9\.]+)$')
 
    groups = ex.match(data).group
    meter_high = float(groups(1)) / 1000
    meter_low = float(groups(2)) / 1000
    #out_high = float(groups(3)) / 1000
    #out_low = float(groups(4)) / 1000
    #actual_in = float(groups(5)) / 1000
    #actual_out = float(groups(6)) / 1000
 
    return meter_high, meter_low#, out_high, out_low, actual_in, actual_out
 
def get_gas_values(url, device_id):
    """
    Get gasmeter reading.
    """
 
    device_data = Domoticz(url).get_device(device_id)
    data = device_data['result'][0]['Data']
 
    ex = re.compile('^([0-9\.]+)$')
 
    groups = ex.match(data).group
    gasstand = float(groups(1)) #/ 1000
 
    return gasstand
# example usage
 
domoticzurl = "http://localhost:8080"
domoticzdeviceid_el = 6
domoticzdeviceid_gas = 7
#ElectricityRateUsedPeak, ElectricityRateUsedOffPeak, ElectricityRateGeneratedPeak, ElectricityRateGeneratedOffPeak, ElectricityTotalUsed, ElectricityCurrentRateOut = get_el_values(domoticzurl, domoticzdeviceid_el)
ElectricityRateUsedOffPeak, ElectricityRateUsedPeak = get_el_values(domoticzurl, domoticzdeviceid_el)
GasMeterReading = get_gas_values(domoticzurl, domoticzdeviceid_gas)
 
#print "-- DOMOTICZ ENERGIE--"
#print "Meterstand piektarief (hoog):\t\t"+str(ElectricityRateUsedPeak)+"kWh"
#print "Meterstand daltarief (laag):\t\t"+str(ElectricityRateUsedOffPeak)+"kWh"
#print "Gasmeterstand:\t\t\t\t"+str(GasMeterReading)+"m3"
#print "Totaal:\t\t\t"+str(ElectricityRateUsedPeak + ElectricityRateUsedOffPeak)+"kWh"
#print ""
#print "- Teruggeleverd"
#print "Daltarief:\t\t"+str(ElectricityRateGeneratedOffPeak)+"kWh"
#print "Piektarief:\t\t"+str(ElectricityRateGeneratedPeak)+"kWh"
#print "Huidig verbruik:\t"+str(ElectricityTotalUsed)
 
conn = httplib.HTTPSConnection("api.pushover.net:443")
conn.request("POST", "/1/messages.json",
  urllib.urlencode({
    "token": "ABCD1234",
    "user": "ABCD1234",
    "message": "Meterstand elektra hoog: "+str(ElectricityRateUsedPeak)+"\n""Meterstand elektra laag: "+str(ElectricityRateUsedOffPeak)+"\n""Gasmeterstand: "+str(GasMeterReading)+"",
    "title": "Domoticz - meterstanden",
    "priority": "-1",
  }), { "Content-type": "application/x-www-form-urlencoded" })
conn.getresponse()


Verdere uitleg van het script kun je hier vinden: http://domoticz.com/wiki/Meter_readings_monthly
Volg de stappen en als het goed is zou je dan ook maandelijks een soortgelijk berichtje moeten krijgen.

Pushover is overigens niet gratis, je moet éénmalig betalen (ik meen ¤4) maar dat vind ik het geld wel waard. De service werkt supersnel (op de commandline op Enter drukken bij uitvoeren script en nog geen twee seconden later heb je het bericht al binnen). Desgewenst kun je het script ook ombouwen naar een andere service, het script roept via een simpele 'curl' de HTTP-API van Pushover aan. Voor Prowl (gratis te gebruiken op iOS dacht ik) heeft een medetweaker het script aangepast.