Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

Domoticz - open source domotica systeem - deel 4 Vorige deelOverzicht

Pagina: 1
Acties:

Onderwerpen


Domoticz - Control at your fingertips

Vorig deel: Topicreeks: Domoticz - open source domotica systeem
Domoticz - open source domotica systeem - deel 3

Inhoudsopgave

Wat is Domoticz?

Copy-paste vanaf de website:
Domoticz is a home automation system that lets you monitor and configure various devices like: lights, switches, various sensors/meters like temperature, rain, wind, UV, electra, gas, water and much more. Notifications/alerts can be sent to any mobile device.
Het is een veelzijdige applicatie bedoeld als domotica controller (aansturing/uitlezen van componenten). De software voer je uit op een apparaat zoals een Raspberry Pi. De Pi zet je bijv. in je meterkast en heb je verder geen omkijken naar omdat alles via de ingebouwde webinterface te regelen is.

Het project is gestart door gizmocuz maar ondertussen zijn er meer developers actief. Mocht je zelf geniale ideeën hebben dan kun je uiteraard ook bijdragen als ontwikkelaar, zie hiervoor het forum (hier beneden genoemd).

Tweakers heeft zelf ook een kort stukje over Domoticz geschreven: reviews: Dirigenten voor het domotica-orkest

Waarom Domoticz?

Het grote voordeel van Domoticz is dat het volledig gratis is, je hoeft alleen te investeren in hardware! Ook is het open source en daardoor gemakkelijk uit te breiden met extra scripts en functionaliteiten. Ook is er een API beschikbaar. Deze API werkt via JSON en op die manier kun je informatie uit Domoticz halen en/of zelf in Domoticz stoppen.

Een ander groot voordeel van Domoticz is dat het erg laagdrempelig is. Als beginner heb je het waarschijnlijk zo aan de praat! Je flasht de SD-image op een SD-kaartje, stopt die in je Raspberry Pi en gaan met die banaan.
In het begin zul je niet eens met de commandline of moeilijke scripts aan de gang te hoeven gaan, pas als je meer functionaliteiten wil hebben zal dat nodig zijn.

Protocollen

Het project ondersteunt enorm veel verschillende protocollen en hierdoor is er met elk budget wel een vorm van domotica mogelijk.

433Mhz
Als starter begin je waarschijnlijk met de populaire KlikAanKlikUit producten. Deze producten werken op de 433Mhz frequentie en zijn éénrichtingsverkeer, omdat de ontvangers niet aan terugkoppeling doen. Je weet dus nooit met 100% zekerheid of een apparaat je commando heeft ontvangen ('fire and forget') . Ook is het verkeer onbeveiligd. Vroeger werkte KaKu via het 'ARC'-protocol. Hierbij koos je op de zender en de ontvanger een code, bijv. 'D1' via een codewieltje. Met deze oplossing waren er maar een beperkt aantal combinaties mogelijk (256 om precies te zijn) en was er een grote kans op gezeur met de buren omdat je beiden op hetzelfde kanaal zat. Tegenwoordig gebruikt KaKu het 'AC'-protocol. Voordeel hiervan is dat je zender en ontvanger moet 'pairen' (koppelen). Je drukt op de ontvanger een knopje in waarna hij in de 'inleermodus' gaat. Op dat moment druk je op je zender een knop in, zodat er een signaal wordt uitgezonden. De ontvanger zal bij succesvolle koppeling een aantal keer schakelen om te laten weten dat hij gekoppeld is aan een zender.
Het verkeer bij 433Mhz apparaten loopt overigens altijd alleen maar van zender > ontvanger. Het is dus aan te raden om de zender op een centrale plek in je woning te plaatsen.

Door het AC-protocol van KaKu heb je al geen last meer van je buren, omdat er nu veel meer codes zijn, die ook nog eens random worden gekozen. Het is echter nog steeds zo dat het éénrichtingsverkeer betreft en ook is het nog steeds onbeveiligd (iemand die het ID van de zender oppikt kan dit zelf ook uitzenden (klonen) waarop jouw ontvangers reageren). In de praktijk valt het echter erg mee qua risico.

Bovenstaand is KlikAanKlikUit, de RFXCOM (zie onder) ondersteunt echter nog veel meer protocollen. Zo kun je bijv. ook goedkope deurcontacten van eBay halen, vaak gebruiken deze de 'PT2262' chip welke door de RFXCOM ondersteund wordt. Ook een goedkope deurbel van de Action (SelectPlus) kan gebruikt worden bijv.

RFXCOM
In de basis wordt voor 433Mhz producten de pricewatch: Rfxcom RFXtrx433E USB 433.92MHz Transceiver gebruikt, deze ondersteunt veel protocollen. De volledige lijst vind je in de handleiding (pagina 4 en verder).
Let op bij aanschaf van de RFXCOM: er zijn twee versies van de RFXCOM: het oudere RFXtrx433 model en de RFXtrx433E. Let erop dat je de laatste koopt, die ondersteunt meer devices. Het oudere model wordt nieuw niet meer verkocht, maar kom je misschien op Marktplaats nog wel tegen, zoek echter goed uit wat je wil gaan aansturen en wat het verschil is tussen de twee, met de oudere versie kun je bijv. geen Somfy rolluiken besturen. Het is daarom aan te raden om gewoon voor het nieuwste 'E'-model te gaan.

Zorg ook dat je de nieuwste firmware op de RFXCOM gebruikt, met enige regelmaat brengt RFXCOM een bijgewerkte firmware uit. Hierin zijn dan bugs verholpen of nieuwe apparaten toegevoegd. Je zult wellicht in de log van Domoticz ook wel een melding zien dat er een firmware update is als je erg ver achterloopt.
De firmware is te downloaden op www.rfxcom.com onder het tabje 'Downloads'. Voor de RFXtrx433E zul je in 99% van de gevallen de 'Ext' firmware nodig hebben. De firmware updaten kon altijd al via een Windows PC (of een VM) met het programma 'RFXflash.exe' (schijnt ook onder 'mono' te werken), maar sinds een tijdje (v2.25xx ergens) kun je de RFXCOM ook updaten binnen Domoticz.

RFLink
Sinds een tijd is er ook het RFLink project. Dit is een 433Mhz zender/ontvanger op basis van een Arduino mega + RF set + NRF. Vroeger was dit een stuk goedkoper maar tegenwoordig zijn de prijzen gelijk via bijvoorbeeld Nodo-Shop ter vergelijking met een RFXCOM. (Als je handig genoeg bent om de gateway kit zelf te solderen kan het uiteraard wel goedkoper). Zelf in elkaar zetten kan al vanaf ca. 20,- euro (ex verzendkosten). Ze werken hard aan het continue toevoegen van nieuwe devices. Een overzicht van de door RFLink ondersteunde 433Mhz-devices kan hier op hun website vinden.

Zie ook het RFLink eigen forum of subforum op het Domoticz forum.

Goedkope 433Mhz transceivers van eBay
Er zijn momenteel heel veel verschillende 433Mhz ontvangers op de markt waarvan je het over grote deel meteen kan afschrijven, ze werken maar daar is alles mee gezegd. Waar je bij de zenders nog een antenne er op kan solderen lukt dit vaak bij de ontvangers niet. Hierdoor is zowel het bereik alsmede het signaal totaal niet betrouwbaar.
Domoticz heeft niet voor niets de keus gemaakt om deze goedkope modellen niet out-of-the-box te ondersteunen.

Z-Wave
Als je na een tijdje de smaak te pakken hebt op domoticagebied, zul je waarschijnlijk met Z-Wave aan de gang willen gaan. Z-Wave werkt op 868Mhz, is tweerichtingsverkeer en het verkeer tussen zender en ontvanger is beveiligd, totaal niet te vergelijken met KlikAanKlikUit dus!
Anders dan bij 433Mhz werkt Z-Wave via een zgn. 'mesh'-netwerk. Dit wil zeggen dat het verkeer niet alleen van zender > ontvanger kan lopen zoals bij 433Mhz, maar ook tussen apparaten verloopt. Als je de zender in de woonkamer hebt staan en een wallplug op zolder en ook eentje op de eerste verdieping dan is het zeer waarschijnlijk dat het signaal op deze manier loopt: zender > wallplug 1e verdieping > wallplug zolder. Het netwerk zoekt zelf de 'beste' weg. Op deze manier kun je ook een grotere afstand overbruggen, het netwerk kan immers via meerdere 'hops' verlopen.

Ook bij Z-Wave moet je je nodes pairen met de controller. Bij Z-Wave heet dit 'includen'.

Het voordeel van Z-Wave boven 433Mhz, is dat het een stuk veiliger is, zowel omdat het verkeer beveiligd is, maar ook omdat de ontvanger zal terugkoppelen of hij daadwerkelijk de gewenste actie heeft uitgevoerd. Voor meer 'kritische' toepassing zoals bijv. het aansturen van een verwarmingselement is het daarom verstandig om Z-Wave te gebruiken, bij 433Mhz is er een kans aanwezig dat de ontvanger het signaal niet ontvangt (en je kacheltje de hele dag zou blijven branden en stroom slurpen). Ook het onderling versterken van het netwerk via de nodes is een leuke feature.
Verder kun je met een aantal Z-Wave devices (Fibaro Wallplug bijv.) niet alleen een aangesloten device aan/uit schakelen, maar ook het actuele (Watt) en totale (kWh) stroomverbruik meten.

Voor de Raspberry heb je de product: Z-wave.me RaZberry Module om Z-Wave ondersteuning te verkrijgen. Het nadeel van deze module vind ik zelf dat je gebonden bent aan de Raspberry. Mocht je later besluiten om Domoticz op je NAS o.i.d. te willen draaien dan zul je weer een andere oplossing voor Z-Wave moeten aanschaffen, het RaZberry bordje past immers niet op je NAS.

Een Z-Wave USB-stick is dan een beter idee omdat deze via USB werkt. Voorbeeld hiervan is de Aeon Labs stick. Grote voordeel van de Aeon stick is dat er een batterijtje in zit, waardoor je hem uit de USB-poort kunt trekken en mee kunt nemen naar een Z-Wave device om de Z-Wave node te includen in je netwerk. Zorg ook hier dat je voor Z-Wave producten een recente firmware gebruikt om alles optimaal te laten werken.

Zie voor een overzicht van alle Z-Wave controllers de Pricewatch.

Xiaomi Gateway (Zigbee)
Een nieuwe opkomer is de Xiaomi Gateway. Officieel is dit een apparaat welke niet voor de EU is bestemd. Toch is het mogelijk om de Xiaomo Gateway met Domoticz te laten werken. Je dient minimaal de Gateway te hebben om diverse sensoren in Domoticz te kunnen uitlezen.
De gateway verbindt via WiFi met je Domoticz systeem om vervolgens via het Zigbee protocol met de sensoren te verbinden.

De Gateway:
Xiaomi Gateway: RGB-LED/Speaker/Alarm/LUX Sensor (Dit is de gateway die je minimaal nodig hebt!)

De ondersteunde sensoren:
1. Human Body Sensor (Motion Sensor)
2. Wireless Smart Switch
3. Door/Window Sensor
4. Temperature and Humidity Sensor
5. Smart Socket/Plug - Zigbee version (WiFi versie is NIET ondersteund)
6. Xiaomi Mi Smart Cube (Xiaomi Mi Magic Controller)
7. Wireless Aqara Switch (dubbele knop)
8. Wireless Aqara Switch (enkele knop)
9. Wired Aqara Switch (dubbele knop - UK wandcontactdoos afmetingen!)
10. Wired Aqara Switch (enkele knop - UK wandcontactdoos afmetingen!)
11. Xiaomi Smoke Detector
12. Xiaomi Gas Leak Detector
13. Xiaomi Aqara Window Door Sensor
14. Xiaomi Aqara Temperature Humidity Sensor

Sensoren welke (standaard) NIET werken:
1. Xiaomi MiRobot stofzuiger (wel met een Py script via WiFi!)
2. WiFi wandcontactdozen (schakelaars)
3. Bluetooth lampen
4. Luchtverfrisser (Air Purifier)

WiFi
Een oplossing middels WiFi is ook mogelijk. Ook deze oplossing geeft terugkoppeling aan Domoticz of die aan/uit staat. Een populaire keuze hier in zijn de Sonoff apparaten met aangepaste firmware.

WiFi Ontvangers
De meest bekende WiFi schakelaars komen van Itead onder de merknaam Sonoff. Tegenwoordig worden ze ook verkocht onder de merkvaan GoComma, exact gelijk aan de Sonoff Basic maar met een andere sticker. Zie hier onder de meest bekende:

1. iTead Sonoff Basic
2. iTead Sonoff RF
3. iTead Sonoff SV
4. iTead Sonoff TH10/TH16 with temperature sensor
5. iTead Sonoff Dual
6. iTead Sonoff Pow
7. iTead Sonoff 4CH
8. iTead S20 Smart Socket
9. iTead Slampher
10. iTead Sonoff Touch

WiFi Zenders
Naast de WiFi ontvangers zijn er nu ook WiFi zenders, deze maken het mogelijk om een fysieke schakelaar te blijven gebruiken zodat de WAF hoog blijft. De meest bekende komt van Shelly.

1. Shelly 1
2. Shelly 2

WiFi Modules flashen
De standaard firmware die wordt meegeleverd bij de meeste ESP8266 modules voldoet vaak niet aan onze eisen. Zo verloopt de verbinding voor de standaard Sonoff firmware via China terwijl dit helemaal niet nodig is in combinatie met Domoticz. Op dit moment zijn er twee firmware pakketen erg interessant om te gebruiken namelijk ESPeasy & Tasmota.

Beide pakketen hebben hun eigen voor en nadelen wil je vooral snel aan de slag en weinig omkijken ergens naar hebben dan zou ik Tasmota aanraden. ESPEasy is erg uitgebreid en je kan er meer mee doen dan Tasmota maar dat vereist meer kennis en tijd.

Zie de instructie video hier onder:

In plaats van de gebruikte ESPTool in de video is het makkelijker om de GUI van NodeMCU Firmware Programmer te gebruiken.

Het flashen zal met de volgende settings plaats moeten vinden:
Baudrate: 115200
Flashsize: 1MByte
Flashspeed: 40MHz
SPI Mode: DOUT

Mocht je het niet aandurven om zelf andere firmware er op te zetten dan zijn er ongetwijfeld mensen die dat (dan wel niet tegen betaling) voor je willen doen.

Een overzicht van alle apparaten (zowel 433Mhz, Z-Wave als de Xiaomi Gateway) die werkend zijn bevonden in Domoticz vind je hier

Welk protocol moet ik nou kiezen?
Dit zijn maar twee voorbeelden van protocollen, maar Domoticz ondersteunt er nog veeeeel meer.

Voor welk protocol je kiest zul je voor jezelf moeten afwegen. 433Mhz is goedkoper dan Z-Wave maar in theorie minder betrouwbaar. Als je een kleine woning hebt en weinig stoorzenders in de buurt (vooral weerstations op 433Mhz met bijna lege batterijen zijn vervelend; die 'schreeuwen' bijna continu dat de batterijen leeg zijn) dan zal het erg meevallen en zul je amper problemen ondervinden. Z-Wave is betrouwbaarder maar de nodes zijn weer veel duurder in aanschaf (ga uit van gemiddeld €50+ per node). Natuurlijk kun je in je events ook een workaround inbouwen om het 433Mhz verkeer naar je ontvangers meer betrouwbaar te maken: simpelweg het commando na een aantal seconden/minuten gewoon nog een keer sturen (bijna zeker weten dat verlichting uit is als je van huis bent bijv.). Dit blijft echter behelpen en het missen van een signaal kan tot irritatie leiden.

Platformen

Het project is oorspronkelijk begonnen met als basis de Raspberry Pi. Dit is nog steeds de grootste doelgroep, de Pi is goedkoop, compact en energiezuinig en meer dan snel genoeg voor Domoticz. De kant-en-klare SD-image is gebaseerd op Raspbian en kun je gelijk mee aan de slag. Let wel op dat je een goede stroomadapter (minimaal 2A) en SD-kaart (minimaal class10) gebruikt.

Tegenwoordig is het beschikbaar gemaakt voor meerdere platformen.

- Arm 32bit (Raspberry/Cubie/...)
- Arm 64bit (Cubie/ODroid/...)
- Windows
- Mac/OSX
- Linux
- Synology (niet via officiële website, wel via Wiki)

Downloaden kan via de Domoticz website.

Versies
Er wordt actief aan Domoticz gewerkt, van kleine bugfixes tot het implementeren van nieuwe functionaliteiten. Bijna dagelijks wordt er wel code gecommit, zie ook de GitHub repository van Domoticz hier.
Er zit een tweedeling in de ontwikkeling, zo verschijnt er eens in de zoveel tijd een nieuwe stable versie, die (zoals de naam al doet vermoeden) 'stable' oftewel stabiel is bevonden. Mocht je wat meer van experimenteren houden dan kun je ook de 'beta' releases draaien. Hierin zitten vaak wat nieuwere functionaliteiten, maar deze builds zijn niet gegarandeerd stabiel. In de praktijk kun je eigenlijk prima beta draaien, doordat er bijna dagelijks nieuwe builds verschijnen zijn bugs snel verholpen.
In de instellingen van Domoticz kun je kiezen van welke releasechannel je updates wilt verkrijgen. Standaard staat deze ingesteld op 'stable'.

Software pakketen

Domoticz kan je zo uitgebreid maken als je zelf zou willen, belangrijke onderdelen kunnen zijn HomeBridge en een fatsoenlijke MQTT broker. Het is daarom van belang om een goede keuze te maken wat betreft de plugin's die je wilt gaan installeren, tenslotte willen we niet ons platform voorzien van overtollige software die het geheel alleen maar onstabiel en/of trager kunnen maken.

Reverse Proxy
Er is een handleiding geschreven om met CaddyServer je Domoticz omgeving vanaf buiten beschikbaar te stellen:
rens-br in "Domoticz - open source domotica systeem - deel 4"

MQTT Broker
Om data te versturen en te ontvangen naar andere apparaten, en dan specifiek IoT modules, wordt er gebruik gemaakt van 1 protocol namelijk MQTT. Het voordeel van dit protocol is dat het alle informatie die het nodig heeft verstuurd in één keer, zo weet je meteen waar de data vandaan komt.

MQTT is standaard niet geïnstalleerd in combinatie met Domoticz maar Domoticz is wel volledig voorbereid op MQTT, het is een kwestie van alleen een goede broker installeren. De meest gebruikte is dan ook Mosquitto. Een duidelijk installatie voor de Pi vindt je hier. Vergeet alleen niet dat een Pi vaak gebruikt maakt van stretch, vervang wheezy dan ook voor stretch.

HomeBridge
HomeBridge zorgt voor een intergratie van Domoticz naar Apple's HomeKit platform, onze collega's paQ en Rgerr hebben hiervoor een heel mooie draadje lopen en die vindt je hier

Zigbee2MQTT
De naam zegt het al, het ontvangt een Zigbee signaal en zet het om naar MQTT. Hierdoor is het -in theorie- niet meer nodig om van elk merk de specifieke gateway aan te schaffen. Dit scheelt aanzienlijk in kosten en de werking is vrijwel gelijk. Echter is het niet meer mogelijk om je apparaten te voorzien van de nieuwste firmware.

Je hebt eigelijk 3 dingen nodig:Voor alle informatie hierover verwijzen we je graag naar het speciale Zigbee2MQTT topic.

Domoticz Telegram bot
Ons community lid @flexje is bezig geweest met het creëren van een Telgram bot voor Domoticz, het geheel werkt via Node-RED. Voor alle informatie verwijzen je graag naar de post zelf. Je vindt hem hier: flexje in "Domoticz - open source domotica systeem - deel 4"

Eenvoudig automatiseren

Natuurlijk is een domoticasysteem niets zonder slimmigheid. Een lamp op afstand aanzetten is niet heel spannend. De kracht bij Domoticz zit hem er juist in dat je op erg eenvoudige wijze apparaten kunt aansturen. Hoe dat werkt zal hieronder worden besproken.

Timers
Domoticz ondersteunt simpele timers:

(Bovenstaand voorbeeld: doordeweeks direct na zonsondergang licht aan, bij zonsopgang weer uit. In het weekend om 17:00 aan en om 22:00 uit)

Blockly events
Leuker wordt het echter wanneer je echt events gaat bouwen. In Domoticz is het vrij eenvoudig om events te bouwen door de Blockly creator die aanwezig is. Op deze manier kun je 'bouwstenen' in elkaar slepen en op die manier een event creëren.

Meer voorbeelden van deze Blockly events kun je hier vinden.

Scripts
Natuurlijk is er ook aan de die-hard scripters/coders gedacht, Domoticz ondersteunt de Lua programmeertaal om scripts te bouwen. Voorbeelden van dergelijke scripts vind je in dit topic, maar ook op de wiki staan genoeg voorbeelden.

Mocht je nou niet van LUA houden dan kun je ook zelf aan de gang gaan, er zijn ook genoeg gebruikers die met Bash of Python leuke scripts hebben gemaakt (zie wiki). Door de eerder genoemde JSON API kun je gemakkelijk met Domoticz communiceren.

Verdere mogelijkheden

Hieronder een opsomming van de mogelijkheden van Domoticz:
  • Aansturen draadloze schakelaars
  • Uitlezen draadloze temperatuursensoren
  • Uitlezen slimme meter (P1-poort) + grafieken genereren
  • Zonnepanelen opwek bijhouden (SolarEdge, YouLess)
  • Rolluiken/zonneschermen aansturen
  • Scenes maken en gebruiken (Bepaalde lichtplannen waarin je bijv. een sfeer kunt vastleggen, 'Romantisch filmkijken' waarbij lampen gedimd staan, of 'Werkverlichting' waarbij je veel licht wilt hebben)
  • Apparaten aansturen via groepen, alle lampen in de huiskamer met één klik aan/uit zetten door de groep 'huiskamer' te bedienen
  • Data van virtuele weerstations binnenhalen (Weather Underground)
  • Zelfbouw nodes (gebaseerd op Arduino) van 'MySensors' project uitlezen
  • Logitech Harmony Hub aansturen
  • Philips Hue verlichting aansturen
  • Milight verlichting aansturen
  • Xiaomi sensoren uitlezen
  • Koppeling met Toon thermostaat mogelijk
  • Koppeling met HomeKit mogelijk (HomeBridge)
  • IP netwerkcamera in Domoticz en snapshot krijgen via pushmessage als deurbel wordt ingedrukt (los script)
  • GPIO-pins van Raspberry bedienen
  • Slimme watermeter
Maar eigenlijk is de beste samenvatting: download het eens en probeer het zelf en zie wat Domoticz je te bieden heeft _/-\o_

Handigheidjes

Nadat je Domoticz draaiend hebt gekregen zijn er waarschijnlijk nog een aantal handigheidjes die je wilt instellen:
  • Zorgen dat USB-devices op de Raspberry altijd dezelfde poort krijgen toegewezen ipv na elke reboot weer door de war ---> Zie wiki
  • Een automatische backup van je domoticz.db (bestand met al je devices + instellingen) instellen naar een FTP-server ---> Zie wiki
Hoe maak ik nou een ELSE IF-blockly :?
In de Blockly-editor sleep je de ELSE IF onder de IF in het plaatje uit de link.

Handige links, topics & posts

Hier vindt je een verzameling handige topics en posts naar de meest gestelde vragen, op deze manier gaan we hier niet meerdere keren de zelfde vraag zien. Als je iets in de lijst mist, stuur mij dan een PB met de link!

Topics
Posts
Instructables

Meer informatie

Voor meer informatie/ondersteuning kun je naast dit topic ook het eigen Domoticz forum raadplegen (let op: Engels is verplichte voertaal) en ook de wiki staat bomvol informatie!

Lees voor je aan de slag gaat ook even de FAQ door. Wellicht is je vraag daar reeds beantwoord. Ook is er een handleiding beschikbaar.

Bijdragen aan het project

Omdat het een open source project is kan in principe iedereen bijdragen met het implementeren en up to date houden van functionaliteiten. Ook de wiki kun je als gebruiker aan bijdragen (logingegevens zijn zelfde als voor het forum). Schroom ook niet om je eigen interessante bevindingen daar te delen, of fouten te corrigeren als je er eentje spot.

Mocht je zeer tevreden zijn met Domoticz en op een financiële wijze wat willen bijdragen, dan kan dat ook: ga naar http://www.domoticz.com/ en klik op de 'Donate' button rechtsonderin.

Dank gaat ook uit naar @ThinkPad & @renedis voor de voorgaande topics!
Disclaimer
Dit topic is nummer 4 in de reeks 'Domoticz' en informatie uit vorige posts zullen deels verouderd zijn. Desondanks kan het nuttig zijn om ook te zoeken in de vorige delen.

Mocht je informatie waardevol vinden, stuur dan even een PB'te zodat we het kunnen opnemen in de lijst van handige posts, op die manier houden we het topic opgeruimd en kunnen we iedereen van de correcte en juiste informatie voorzien.

Het wil nog wel eens helpen om Domoticz te herstarten, zeker bij hele gekke fouten. Hiervoor kan je onderstaande code gebruiken:
code:
1
2
sudo service domoticz.sh stop
sudo service domoticz.sh start

Toppe wijzigde deze reactie 10-05-2019 20:39 (116%)

MacBook Pro Retina 13" 2018  iPhone Xs Max  Apple Watch Series 4  2x Apple TV 4  Stereopair HomePods


Acties:
  • 0Henk 'm!
  • Pinned
Changelog
Ik ga proberen zoveel mogelijk wijzigingen in de OP hier te vermelden zodat het overzichtelijk blijft.
Mocht je wat missen in de OP dan hoor ik het graag.

9 December

Toppe wijzigde deze reactie 09-12-2018 13:10 (164%)

MacBook Pro Retina 13" 2018  iPhone Xs Max  Apple Watch Series 4  2x Apple TV 4  Stereopair HomePods


Acties:
  • +2Henk 'm!
  • Pinned

  • tsjoender
  • Registratie: april 2005
  • Laatst online: 19:45
Toppe schreef op zondag 9 december 2018 @ 15:46:
[...]


De draden in de meterkast moet kunnen. Andere optie is de boel dicht kitten, heb je geen last van oxidatie, batterijtje vervangen wordt alleen een uitdaging.

Ik wil ook een slimme bel, mocht iemand een oplossing hebben waarbij de bestaande drukken blijft zitten, let me know!
M.v.Veelen schreef op zondag 9 december 2018 @ 17:30:
[...]


Mocht je iets werkbaars gevonden hebben, let us know. Ik heb er deze week helaas geen tijd voor. De oplossing met de Sonoff lijkt me heel interessant. Mbv de Sonoff kun je in Domoticz weer tal van events triggeren, waaronder het sturen van een foto.
Wat ik niet wil, is vertraging. Dus: men drukt op de deurbel en moet dan direct ook (buiten) de deurbel kunnen horen. Met zo'n oplossing waarbij de oorspronkelijke setup behouden blijft, zou dat moeten werken. En als Domoticz offline is, zou evengoed de deurbel moeten blijven werken.
Je kan een optocoupler gebruiken welke detecteert of de stroomkring gesloten is en er stroom door de bel/gong loopt. Dan blijft de bedrading voor de deurbel gewoon standaard en werkt het ook prima als Domoticz offline is. De optocoupler sluit je verder aan op de Raspberry Pi / ESP8266 / Sonoff wat maar voor handen is / het meest praktisch werkt voor deze toepassing.

Acties:
  • +1Henk 'm!
  • Pinned

  • jondezwaan
  • Registratie: november 2005
  • Laatst online: 15:52
Boest schreef op maandag 10 december 2018 @ 20:05:
Ik draai domoticz V4.9700 op een Raspberry.

Gisteren heb ik een nieuwe lamp gekoppeld met hue maar deze komt niet bij apparaten te staan bij domoticz¿ iemand een idee?

Alvast bedankt!
Ligt niet aan jou, in die specifieke build zit een bug waardoor Philips Hue lampen niet goed werken. Zelf draai ik, sinds die bug, al een paar maanden build 4.9741.

http://cim.works


Acties:
  • +2Henk 'm!
  • Pinned

  • vandermark
  • Registratie: augustus 2005
  • Laatst online: 16:40
Ryan_ schreef op dinsdag 11 december 2018 @ 09:44:
[...]


Haha, blijkbaar hier ook. Zojuist getest op 4G en daar werkt het wel. Hmz, eens kijken hoe ik dit ga oplossen. https pakt hij lokaal ook niet.
Ik heb domoticz op de synology draaien en gebruik een reverse proxy i.c.m. een algemeen Let's Encrypt certificaat op mijn synology om diverse apparaten op mijn netwerk via https (poort 443) te bereiken. Zo is onder andere mijn omvormer bereikbaar via https://solar.mijnserver.nl

Als je een synology hebt zou je op die manier ook je domoticz device via poort 443 bereikbaar maken. De reverse proxy zorgt dat intern de link wordt gelegd naar het IP adres en poort van domoticz:

https://domot.mijnserver.nl --> internIPdomoticz:8081

Trouwfotograaf: https://www.bartvandermark.nl


Acties:
  • 0Henk 'm!
  • Pinned
Raspberry 'Gehackt'

Zoals sommige al voornomen hadden: ik had geen SSH toegang meer tot de Pi, wist vrijwel meteen dat ze via brute-force methode ofzo geprobeerd hadden binnen te komen en dat het nog gelukt was ook. Voelt wel apart, gehackt worden. Maar bewijst ook meteen hoe zwak we zijn. Meer informatie over de hack zelf vinden jullie hier.

Om controle terug te krijgen heb ik een aantal stappen moeten volgen, deze kunnen uitsluitend via fysieke controle!.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
# We gaan eerst het wachtwoord veranderen van de root user. Open hiervoor de terminal en tik
sudo passwd

# Vervolgens gaan we de root SSH toegang geven, dat doen we voor onderstaand bestand te bewerken:
sudo nano /etc/ssh/sshd_config
# Zoek naar '# Authentication:' en verander "#PermitRootLogin prohibit-password" naar "PermitRootLogin yes". 
# Sla het bestand op en herstart de SSH service, je moet je eerder ingestelde wachtwoord invoeren. Let wel op dat je de root user selecteert.
sudo service ssh restart

# Gebruik nu SSH om toegang te krijgen tot de Pi, tik vervolgens onderstaande code om het wachtwoord van je 'pi'  gebruiker te wijzigen
sudo passwd pi

# Na de wijziging kan je weer via de normale weg naar binnen, vergeet de 2de stap niet terug te draaien!


Ondanks dat ik nu wel weer toegang heb tot de Pi weet ik niet wat er op de achtergrond allemaal gebeurt is, ik ga er vanuit dat het niet spannend is. Wie wilt tenslotte mij elektra meter hacken? Volgens mij proberen ze dit eerder op elke openstaande SSH poort.

Maar, het zet me wel aan het denken want ik wil graag toegang wanneer het mij uitkomt via SSH. Wat zijn hierin de opties en wat kan ik allemaal doen om mensen buiten de deur te houden? Tenslotte is je 'hele' huis met één apparaat te besturen.

Ik ga me iets meer verdiepen in 'Open Authentication Time-Based One-Time Password', oftewel twee-staps-verificatie.

MacBook Pro Retina 13" 2018  iPhone Xs Max  Apple Watch Series 4  2x Apple TV 4  Stereopair HomePods


Acties:
  • 0Henk 'm!
  • Pinned

  • Stubby
  • Registratie: januari 2002
  • Nu online
Nog even terugkomend op tsjoender in "Domoticz - open source domotica systeem - deel 3" (van het vorige topic). Domoticz stoppen, de genoemde files aanpssen, vervolgens domoticz weer opstarten en de thermostaat weer pairen was voldoende om de Eurotronic SpiritZ te laten herkennen.

Thanks!

Acties:
  • +2Henk 'm!
  • Pinned

  • Andrehj
  • Registratie: juni 2002
  • Laatst online: 18:33
Mozart schreef op zondag 6 januari 2019 @ 10:12:
[...]

Ik zou beginnen met het overstappen van Lua naar dzvents. Dzvents vind ik persoonlijk een enorme voortuitgang tov Lua.
Dan het probleem wat je ervaart: je deelt twee strings met elkaar, dat kan niet. Je zult eerst twee variabelen moeten vullen met de getallen die je nodig hebt en dan de twee variabelen delen.
Hier vind je de documentatie:
https://www.domoticz.com/..._generation_LUA_scripting
Hartstikke bedankt, dat Dzvents ziet er redelijk eenvoudig uit. Maar gelukkig heb ik het vannacht na lang proberen al in Lua werkend gekregen, al begrijp ik nog steeds weinig van die commandArray functie, wat volgens mij een waanzinnig complexe manier is om een waarde van een virtual sensor te wijzigen, maar goed. De werkende code is nu:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- Input devices
vermogen1 = 'Verbruik L1'
spanning1 = 'Voltage L1'

-- Output devices
stroom1_id = 23

commandArray = {}
if (devicechanged[vermogen1]) then
    vermogen = otherdevices_svalues[vermogen1]
    spanning = otherdevices_svalues[spanning1]
    stroom = vermogen / spanning
    commandArray[1] = {['UpdateDevice'] = stroom1_id .. "|0|" .. stroom}
end

return commandArray

Ik sta altijd open voor verbeteringen!

Acties:
  • +1Henk 'm!
  • Pinned
Werkend op DzVents:

Type is ‘Devices’


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
return {
   on = {
      devices = { 'Energie', 
                  'Voltage', 
                  'Amperage' }
   },
   execute = function(domoticz, roomSwitch)
       
       -- Get current usage and voltage
       CurEnergy = domoticz.devices('Energie').WhActual
       CurVoltage = domoticz.devices('Voltage').voltage
       
       -- Calculate and round the current amperage
       Amperage = domoticz.round(CurEnergy / CurVoltage, '2')
       
       -- Update device with current value. Changes when voltage of usage changes.
       -- Uncomment line below to use
       --domoticz.devices('Amperage').updateCurrent(Amperage)
       
       -- Update device with the device flow (normaly every 5 minutes)
       domoticz.devices('Amperage').updateDevice(Amperage)
   end
}



Regel 3, 4: de namen van je huidige P1 apparaten
Regel 5: de naam van je virutale sensor (Dummy aanmaken en nieuw apparaat met als type ‘Amperage (1 Fase)’

Regel 10 & 11: Ook hier de namen van je P1 apparaten

Regel 18 & 21: de naam van je virutale apparaat

Eventueel op regel 18 de eerste twee strepen weg halen. Hierdoor wordt het huidige amperage direct in je apparaat weergegeven.

Regel 21 zorgt voor het wegschrijven van de data voor de historie.

Toppe wijzigde deze reactie 06-01-2019 18:21 (23%)

MacBook Pro Retina 13" 2018  iPhone Xs Max  Apple Watch Series 4  2x Apple TV 4  Stereopair HomePods


Acties:
  • +1Henk 'm!
  • Pinned

  • Siewert308SW
  • Registratie: december 2015
  • Laatst online: 18:20
@Andrehj Kun je doen maar dat gaat als je heel veel scripts hebt te koste van reactie snelheid.
Ik zelf werk sinds eind 2015 met 1 script_device_.lua.
Die kijkt naar predefined table met de devices die een event mogen starten.
Als er plus nog wat variabelen correct zijn worden die library opgeroepen samen met de script die uitgevoerd mag worden.
Maar je kan een lua file oproepen dmv:


code:
1
2
3
    local Current_Path = debug.getinfo(1).source:match("@?(.*/)")
    package.path = package.path .. ';' .. Current_Path .. '/?.lua'
        require "functions"


Hierboven kijkt naarde huidige dir en de require roept dus function.lua in die dir.

Hierbij mij functions library:

code:
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
--[[
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-

    @ functions.lua
    @ author    : Siewert Lameijer
    @ since     : 1-1-2015
    @ updated   : 01-01-2019
    @ Global Functions
    
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
--]]

--
-- **********************************************************
-- Round Numbers
-- **********************************************************
-- 

    function round(num, dec)
       if num == 0 then
         return 0
       else
         local mult = 10^(dec or 0)
         return math.floor(num * mult + 0.5) / mult
       end
    end

--
-- **********************************************************
-- Function to execute os commands and get output
-- **********************************************************
-- Example: os.capture(curl 'http://127.0.0.1:8080/json.htm?type=command&param=getSunRiseSet')

    function os.capture(cmd, raw)
        
        local f = assert(io.popen(cmd, 'r'))
        local s = assert(f:read('*a'))
        f:close()
        if raw then return s end
        s = string.gsub(s, '^%s+', '')
        s = string.gsub(s, '%s+$', '')
        s = string.gsub(s, '[{}]+', ' ')        
        s = string.gsub(s, '[\n\r]+', ' ')
        return s

    end 
    
--
-- **********************************************************
-- Time Difference
-- **********************************************************
-- Example: and timedifference(otherdevices_lastupdate['light.living_standing_light']) >= 15

    function timedifference(s)
        year = string.sub(s, 1, 4)
        month = string.sub(s, 6, 7)
        day = string.sub(s, 9, 10)
        hour = string.sub(s, 12, 13)
        minutes = string.sub(s, 15, 16)
        seconds = string.sub(s, 18, 19)
        t1 = os.time()
        t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
        difference = os.difftime (t1, t2)
        return difference
    end

--
-- **********************************************************
-- Time Between X hours and X hour
-- **********************************************************
-- Example: and timebetween("03:00:00","11:59:59")

    function timebetween(s,e)
       timenow = os.date("*t")
       year = timenow.year
       month = timenow.month
       day = timenow.day
       s = s .. ":00"  
       e = e .. ":00"
       shour = string.sub(s, 1, 2)
       sminutes = string.sub(s, 4, 5)
       sseconds = string.sub(s, 7, 8)
       ehour = string.sub(e, 1, 2)
       eminutes = string.sub(e, 4, 5)
       eseconds = string.sub(e, 7, 8)
       t1 = os.time()
       t2 = os.time{year=year, month=month, day=day, hour=shour, min=sminutes, sec=sseconds}
       t3 = os.time{year=year, month=month, day=day, hour=ehour, min=eminutes, sec=eseconds}
       sdifference = os.difftime (t1, t2)
       edifference = os.difftime (t1, t3)
       isbetween = false
       if sdifference >= 0 and edifference <= 0 then
          isbetween = true
       end
       return isbetween
    end

--
-- **********************************************************
-- Get Zwave Power Plug current Watts
-- **********************************************************
--  
    
    function powerusage(powerplug)
        local powerplug = powerplug
        local reading
        local usage
              reading = otherdevices[powerplug] 
            _,_,usage = string.find(reading, "(.+)")

          current_usage = tonumber(reading)
          return current_usage
    end 

--
-- **********************************************************
-- Check overall motion @ home
-- **********************************************************
-- Example: if motion('true', 600) then
--

    function motion(input, minutes)
        input = input
        minutes = minutes
        if input == 'true' or input == 'false' then
        IsMotion = false

            if input == 'false' then        
                if timedifference(otherdevices_lastupdate[door.living]) > minutes
                    and timedifference(otherdevices_lastupdate[door.front]) > minutes
                    and timedifference(otherdevices_lastupdate[door.back]) > minutes
                    and timedifference(otherdevices_lastupdate[door.garden]) > minutes
                    and timedifference(otherdevices_lastupdate[door.scullery]) > minutes
                    and timedifference(otherdevices_lastupdate[door.pantry]) > minutes                  
                    and timedifference(otherdevices_lastupdate[motion_sensor.living]) > minutes
                    and timedifference(otherdevices_lastupdate[motion_sensor.downstairs]) > minutes     
                    and timedifference(otherdevices_lastupdate[motion_sensor.upstairs]) > minutes
                    and timedifference(otherdevices_lastupdate[motion_sensor.toilet]) > minutes
                    and timedifference(otherdevices_lastupdate[motion_sensor.dinner1]) > minutes
                    and timedifference(otherdevices_lastupdate[motion_sensor.dinner2]) > minutes
                    and timedifference(otherdevices_lastupdate[motion_sensor.kitchen]) > minutes
                    and timedifference(otherdevices_lastupdate[motion_sensor.natalya]) > minutes
                    and timedifference(otherdevices_lastupdate[motion_sensor.hallway]) > minutes
                    and timedifference(otherdevices_lastupdate[motion_sensor.porch]) > minutes
                    and timebetween("06:00:00","21:59:59")
                then
                    IsMotion = true
                end 
            end
        
            if input == 'true' then
                if timedifference(otherdevices_lastupdate[door.living]) <= minutes
                    or timedifference(otherdevices_lastupdate[door.front]) <= minutes
                    or timedifference(otherdevices_lastupdate[door.back]) <= minutes
                    or timedifference(otherdevices_lastupdate[door.garden]) <= minutes
                    or timedifference(otherdevices_lastupdate[door.scullery]) <= minutes
                    or timedifference(otherdevices_lastupdate[door.pantry]) <= minutes                  
                    or timedifference(otherdevices_lastupdate[motion_sensor.living]) < minutes
                    or timedifference(otherdevices_lastupdate[motion_sensor.downstairs]) <= minutes     
                    or timedifference(otherdevices_lastupdate[motion_sensor.upstairs]) <= minutes
                    or timedifference(otherdevices_lastupdate[motion_sensor.toilet]) <= minutes
                    or timedifference(otherdevices_lastupdate[motion_sensor.dinner1]) <= minutes
                    or timedifference(otherdevices_lastupdate[motion_sensor.dinner2]) <= minutes
                    or timedifference(otherdevices_lastupdate[motion_sensor.kitchen]) <= minutes
                    or timedifference(otherdevices_lastupdate[motion_sensor.natalya]) <= minutes
                    or timedifference(otherdevices_lastupdate[motion_sensor.hallway]) <= minutes                
                    or timedifference(otherdevices_lastupdate[motion_sensor.porch]) <= minutes
                    and timebetween("06:00:00","21:59:59")                  
                then
                    IsMotion = true
                end 
            end

-- **********************************************************
            
            if input == 'false' then        
                if timedifference(otherdevices_lastupdate[door.living]) > minutes
                    and timedifference(otherdevices_lastupdate[door.front]) > minutes
                    and timedifference(otherdevices_lastupdate[door.back]) > minutes
                    and timedifference(otherdevices_lastupdate[door.garden]) > minutes
                    and timedifference(otherdevices_lastupdate[door.scullery]) > minutes
                    and timedifference(otherdevices_lastupdate[door.pantry]) > minutes                  
                    and timedifference(otherdevices_lastupdate[motion_sensor.living]) > minutes
                    and timedifference(otherdevices_lastupdate[motion_sensor.downstairs]) > minutes     
                    and timedifference(otherdevices_lastupdate[motion_sensor.upstairs]) > minutes
                    and timedifference(otherdevices_lastupdate[motion_sensor.toilet]) > minutes
                    and timedifference(otherdevices_lastupdate[motion_sensor.dinner1]) > minutes
                    and timedifference(otherdevices_lastupdate[motion_sensor.dinner2]) > minutes
                    and timedifference(otherdevices_lastupdate[motion_sensor.kitchen]) > minutes
                    and timedifference(otherdevices_lastupdate[motion_sensor.hallway]) > minutes
                    and timedifference(otherdevices_lastupdate[motion_sensor.porch]) > minutes
                    and (timebetween("22:00:00","23:59:59") or timebetween("00:00:00","05:59:59"))
                then
                    IsMotion = true
                end 
            end
        
            if input == 'true' then
                if timedifference(otherdevices_lastupdate[door.living]) <= minutes
                    or timedifference(otherdevices_lastupdate[door.front]) <= minutes
                    or timedifference(otherdevices_lastupdate[door.back]) <= minutes
                    or timedifference(otherdevices_lastupdate[door.garden]) <= minutes
                    or timedifference(otherdevices_lastupdate[door.scullery]) <= minutes
                    or timedifference(otherdevices_lastupdate[door.pantry]) <= minutes                  
                    or timedifference(otherdevices_lastupdate[motion_sensor.living]) < minutes
                    or timedifference(otherdevices_lastupdate[motion_sensor.downstairs]) <= minutes     
                    or timedifference(otherdevices_lastupdate[motion_sensor.upstairs]) <= minutes
                    or timedifference(otherdevices_lastupdate[motion_sensor.toilet]) <= minutes
                    or timedifference(otherdevices_lastupdate[motion_sensor.dinner1]) <= minutes
                    or timedifference(otherdevices_lastupdate[motion_sensor.dinner2]) <= minutes
                    or timedifference(otherdevices_lastupdate[motion_sensor.kitchen]) <= minutes
                    or timedifference(otherdevices_lastupdate[motion_sensor.hallway]) <= minutes                
                    or timedifference(otherdevices_lastupdate[motion_sensor.porch]) <= minutes
                    and (timebetween("22:00:00","23:59:59") or timebetween("00:00:00","05:59:59"))              
                then
                    IsMotion = true
                end 
            end             
        
        return IsMotion
        end
    end
    
--
-- **********************************************************
-- If Motion detected
-- **********************************************************
-- Example: if motion_detected('true') then
--

    function motion_detected(input, value)
        input = input
        value = value
        IsMotionDetected = false

            if input == 'true' then     
                if devicechanged[door.living] == "Open"
                    or devicechanged[door.front] == "Open"
                    or devicechanged[door.back] == "Open"
                    or devicechanged[door.garden] == "Open"
                    or devicechanged[door.scullery] == "Open"                   
                    or devicechanged[motion_sensor.living] == "On"
                    or devicechanged[motion_sensor.dinner1] == "On"
                    or devicechanged[motion_sensor.dinner2] == "On"
                    or devicechanged[motion_sensor.kitchen] == "On"
                then
                    IsMotionDetected = true
                end 
            end     
        
        return IsMotionDetected
    end
    
--
-- **********************************************************
-- Phones GeoFence Closed or Open
-- **********************************************************
-- Example: if geo_fence('true') then
--

    function geo_fence(input)
        input = input
        Isgeofence = false
        nearby = false
        
            for i, v in pairs(otherdevices) do
                if string.find(i, '' .. findstring.geofence) and otherdevices[''..i..''] == 'On' then
                    nearby = true
                end
            end
            
            if input == 'true' and nearby == true then
                Isgeofence = true
            end
                    
            if input == 'false' and nearby == false then
                Isgeofence = true
            end
                    
        return Isgeofence       

    end 
    
--
-- **********************************************************
-- Phones Online
-- **********************************************************
-- Example: if phones_online('true') then
--

    function phones_online(input)
        input = input
        IsPhonesOnline = false
        gsmonline = false
        
            for i, v in pairs(otherdevices) do
                if string.find(i, '' .. findstring.gsm) and otherdevices[''..i..''] == 'On' then
                    gsmonline = true
                end
            end
            
            if input == 'true' and gsmonline == true then
                IsPhonesOnline = true
            end
                    
            if input == 'false' and gsmonline == false then
                IsPhonesOnline = true
            end
                    
        return IsPhonesOnline       

    end
        
--
-- **********************************************************
-- Laptops Online
-- **********************************************************
-- Example: if laptops_online('true') then
--

    function laptops_online(input)
        input = input
        IsLaptopsOnline = false
        laptopsonline = false
        
            for i, v in pairs(otherdevices) do
                if string.find(i, '' .. findstring.laptop) and otherdevices[''..i..''] == 'On' then
                    laptopsonline = true
                end
            end
            
            if input == 'true' and laptopsonline == true then
                IsLaptopsOnline = true
            end
                    
            if input == 'false' and laptopsonline == false then
                IsLaptopsOnline = true
            end
                    
        return IsLaptopsOnline      

    end
        
--
-- **********************************************************
-- Media PowerUsage
-- **********************************************************
-- Example: if media_powered('true') then
--

    function media_powered(input)
        input = input
        if input == 'true' or input == 'false' then
        IsMediaPowered = false
        
        if powerusage(watt.tvcorner) > watt.media_usage or powerusage(watt.natalya) > watt.media_usage then
            if input == 'true' then
                IsMediaPowered = true
            end 
        end
        
        if powerusage(watt.tvcorner) <= watt.media_usage and powerusage(watt.natalya) <= watt.media_usage then
            if input == 'false' then
                IsMediaPowered = true
            end 
        end     
        return IsMediaPowered       
        end
    end


-- **********************************************************
-- Media ON? if on then do certain light scene
-- **********************************************************
-- Example: if media('true') then
--

    function media(input)
        input = input
        if input == 'true' or input == 'false' then
        IsMedia = false
        
        if powerusage(watt.tvcorner) > watt.media_usage or powerusage(watt.natalya) > watt.media_natalya_usage then
            if input == 'true' then
                IsMedia = true
            end 
        end
        
        if powerusage(watt.tvcorner) <= watt.media_usage or powerusage(watt.natalya) <= watt.media_natalya_usage then
            if input == 'false' then
                IsMedia = true
            end 
        end 
        return IsMedia      
        end
    end

--
-- **********************************************************
-- Laptop PowerUsage
-- **********************************************************
-- Example: if laptops_powered('true') then
--

    function laptops_powered(input)
        input = input
        if input == 'true' or input == 'false' then
        IsLaptopPower = false
        
        if powerusage(watt.siewert) > watt.laptop_usage or powerusage(watt.jerina) > watt.laptop_usage then
            if input == 'true' then
                IsLaptopPower = true
            end 
        end
        
        if powerusage(watt.siewert) <= watt.laptop_usage and powerusage(watt.jerina) <= watt.laptop_usage then
            if input == 'false' then
                IsLaptopPower = true
            end 
        end     
        return IsLaptopPower        
        end
    end
    
--
-- **********************************************************
-- Is weekend?
-- **********************************************************
-- Example: if weekend('true') then
-- weekday [0-6 = Sunday-Saturday]
--

    function weekend(input)
        input = input
        if input == 'true' or input == 'false' then
        Isweekend = false
            local dayNow = tonumber(os.date("%w"))      
            
                if dayNow == 5 and timebetween("00:00:00","11:59:59") and (uservariables[var.holiday] == 0 or uservariables[var.holiday] == 1) then 
                    if input == 'false' then
                        Isweekend = true
                    end
                end

                if dayNow == 5 and timebetween("12:00:00","23:59:59") and (uservariables[var.holiday] == 0 or uservariables[var.holiday] == 1) then
                     if input == 'true' then
                        Isweekend = true
                     end
                end             

-- **********************************************************
                
                if dayNow == 6 and timebetween("00:00:00","23:59:59") then
                     if input == 'true' then
                        Isweekend = true
                     end    
                end

-- **********************************************************
                
                if dayNow == 0 and timebetween("00:00:00","23:59:59") and uservariables[var.holiday] == 0 then 
                     if input == 'false' then
                        Isweekend = true
                     end
                end 

                if dayNow == 0 and timebetween("00:00:00","23:59:59") and uservariables[var.holiday] == 1 then 
                    if input == 'true' then
                        Isweekend = true
                    end
                end             

-- **********************************************************
                
                if (dayNow == 1 or dayNow == 2 or dayNow == 3 or dayNow == 4) and uservariables[var.holiday] == 0 then
                    if input == 'false' then
                        Isweekend = true
                    end
                end
                
                if (dayNow == 1 or dayNow == 2 or dayNow == 3 or dayNow == 4) and uservariables[var.holiday] == 1 then
                    if input == 'true' then
                        Isweekend = true
                    end
                end
                
                return Isweekend    
        end
    end

--
-- **********************************************************
-- Is it Xmas?
-- **********************************************************
-- Example: if xmasseason('true') then
--
    function xmasseason(input)
    
        input = input
        if input == 'true' or input == 'false' then
        IsXmas = false
            local tNow = os.date("*t")
            local xmas = tNow.yday
            
            if (xmas >= 6) and (xmas < 335) then
                    if input == 'false' then
                        IsXmas = true
                    end
            end
            
            if (xmas >= 0) and (xmas < 6) then
            
                    if input == 'true' then
                        IsXmas = true
                    end
            end
            
            if (xmas >= 335) and (xmas < 367) then
            
                    if input == 'true' then
                        IsXmas = true
                    end
            end  
            return IsXmas
        
        end
    end
    
--
-- **********************************************************
-- Blink Light IsNotDimmer
-- **********************************************************
-- Example: blink('light_living', 3)

    function blink(light, times)
       times = times or 2
       cmd1 = 'Off'
       cmd2 = 'On'
       pause = 7
       if (otherdevices[light] == 'Off') then
          cmd1 = 'On'
          cmd2 = 'Off'
       end   
       for i = 1, times do
       
          commandArray[#commandArray+1]={[light]=cmd1..' AFTER '..pause }
          pause = pause + 1
          commandArray[#commandArray+1]={[light]=cmd2..' AFTER '..pause }
          pause = pause + 1
       end
    end

--
-- **********************************************************
-- Get otherdevices_svalues
-- **********************************************************
-- Example: device_svalue('outside_temp_sensor') > 5
    
    function device_svalue(device)
        device = tonumber(otherdevices_svalues[device])
        devices_svalues = device        
          return devices_svalues
    end

--
-- **********************************************************
-- Scrap Thermostat and outside temperatures
-- **********************************************************
-- Example: nesttemp_svalue('nest.room_temp') > 5

    function nesttemp_svalue(device)
        local thermostat = device   
        sNestTemp, sNestHumidity = otherdevices_svalues[thermostat]:match("([^;]+);([^;]+)")
        nest_temp = tonumber(sNestTemp)
        nest_hum = tonumber(sNestHumidity)  
          return nest_temp
    end
    
--[[
-- **********************************************************
-- Get lux Average by calculating lux from all lux sensors
-- **********************************************************
-- Example: if isdark('true') then

    function isdark(input)
        if input == 'true' or input == 'false' then
        IsDark = false
    
    -- Get Lux Value    
        lux_living          = tonumber(otherdevices_svalues[lux_sensor.living])
        lux_hallway         = tonumber(otherdevices_svalues[lux_sensor.hallway])
        lux_kitchen         = tonumber(otherdevices_svalues[lux_sensor.kitchen])    
        lux_upstairs        = tonumber(otherdevices_svalues[lux_sensor.upstairs])
        lux_porch           = tonumber(otherdevices_svalues[lux_sensor.porch])
        lux_natalya         = tonumber(otherdevices_svalues[lux_sensor.natalya])    

    -- Create table 
        --sensors={lux_living,lux_hallway,lux_kitchen,lux_upstairs,lux_porch,lux_natalya}
        sensors={lux_living,lux_porch}
        
    -- Calculate Average        
        local elements = 0
        local sum = 0
        local lux = 0
    
        for k,v in pairs(sensors) do
            sum = sum + v
            elements = elements + 1
        end
     
        average = sum / elements

        lux_average = round(tonumber(average),1);       

    --IsDark FALSE
        if lux_average >= lux_trigger.living_low and input == 'false'
        then
        IsDark = true
                    --print('Lux Average:'..lux_average..'')    
        end

    --IsDark TRUE       
        if lux_average < lux_trigger.living_low and input == 'true'
        then
        IsDark = true
                    --print('Lux Average:'..lux_average..'')    
        end

          return IsDark 
        end       
    end
--]]
--[[
-- **********************************************************
-- Laptops Online
-- **********************************************************
-- Example: if laptops_online('true') then
--

    function dummys_online(input)
        input = input
        IsdummysOnline = false
        dummysonline = false
        
            for i, v in pairs(otherdevices) do
                if string.find(i, '' .. findstring.dummy) and otherdevices[''..i..''] == 'On' then
                    dummysonline = true
                end
            end
            
            if input == 'true' and dummysonline == true then
                IsdummysOnline = true
                logmessage = message.dummy_on
            end
                    
            if input == 'false' and dummysonline == false then
                IsdummysOnline = true
                logmessage = message.dummy_off
            end
                    
        return IsdummysOnline       

    end 
--]]

My Domoticz scripts: GitHub


Acties:
  • +4Henk 'm!
  • Pinned

  • DeOS
  • Registratie: oktober 2001
  • Laatst online: 18:58
Ik heb een simpel DzVents scriptje geschreven voor het berekenen van het sluipverbruik door te kijken naar het gemiddelde verbruik van mijn P1 Smart Meter tussen 02:00 en 05:00 ´s nachts.

Misschien hebben er meer mensen wat aan. :)

code:
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
return {
    active = {
        true,
    },

    on = {
        timer = {
            --Timer for calculating average         
            'at 05:00'
        },
        
        devices = {
            --Only monitor device between 02:00-05:00       
            ['Power'] = {'at 02:00-04:59'}
        },
    },
    
    data = {
        PowerUsage = { history = true, maxMinutes = 180 }
    },
        
    execute = function(domoticz, item)
        
        -- the timer was triggered
        if (item.isTimer) then
            
            -- get average for the past 3 hours
            local avgPowerUsage = domoticz.utils.round(domoticz.data.PowerUsage.avgSince('03:00:00'),0)
            
            -- update dummy device Sluipverbruik (Usage (Electric) sensor)
            domoticz.devices('Sluipverbruik').updateEnergy(avgPowerUsage)
        
        -- the device was triggered
        elseif (item.isDevice) then
            domoticz.data.PowerUsage.add(item.usage)
        end
    end
}

DeOS wijzigde deze reactie 15-01-2019 10:55 (0%)
Reden: Periode aangepast naar tussen 2 en 5 ipv tussen 2 en 4.

Repeat after me: I Will Use Google Before Asking Stupid Questions


Acties:
  • 0Henk 'm!
  • Pinned

  • DeOS
  • Registratie: oktober 2001
  • Laatst online: 18:58
Toppe schreef op donderdag 10 januari 2019 @ 12:48:
[...]


.notify ondersteund (nog) geen telegram, beta wel maar gebruik liever geen beta
Ok, dan houdt het op :) .

Bij het aanroepen van de url van de telegram API zou je trouwens nog eens kunnen proberen om in plaats van \n %0A te gebruiken voor een nieuwe regel.

Repeat after me: I Will Use Google Before Asking Stupid Questions


Acties:
  • +1Henk 'm!
  • Pinned
Ik heb nu op de Synology een start-rpi.sh en een stop-rpi.sh script staan :


code:
1
2
#!/bin/sh
curl http://192.168.0.22/cm?cmnd=Power1%20on



In monitrc heb ik dit staan:


code:
1
2
3
4
check host RPi with address xxx.xxx.x.xxx
   start program = "/volume1/web/start-rpi.sh" with timeout 120 seconds
   stop  program = "/volume1/web/stop-rpi.sh" with timeout 60 seconds
if failed port 8080 protocol http for 3 times within 5 cycles then restart



Let wel, ik heb deze timeouts:


code:
1
2
set daemon 180
with start delay 180



Anders krijgt de RPi niet voldoende tijd om alles op te starten.

Heb dit even getest (met een lampje) en dit lijkt goed te werken. De RPi krijgt ook voldoende tijd om opnieuw op te starten en Domoticz ook te starten.

¯\_(ツ)_/¯


Acties:
  • +1Henk 'm!
  • Pinned
Voor de geïnteresseerde, onderstaand een klein scriptje voor de container's en telegram.


code:
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
local currentDay = os.date("%a")
local currentWeek = os.date("%V")

return {
    on = {
        timer = { "every even week at 18:30 on thu",    
                  "every even week at 18:30 on sun",    
                  "every odd week at 18:30 on sun",
                 }
    },
    execute = function(domoticz, device)
        domoticz.log(currentDay)
        if(currentDay == "Thu") then
          container = "Papierbak"
       else
            if(currentWeek % 2 == 1) then
                 container = "Groenebak" 
            elseif(currentWeek % 2 == 0) then
                 container = "Plasticbak"
            end
       end
         
         local message = "*Container!*%0A".. container .." moet aan straat!%0ANieuw script"
         
         domoticz.openURL('https://api.telegram.org/bot/sendMessage?chat_id=&text='.. message ..'&parse_mode=markdown')
         
         domoticz.log(message)
    end
}

MacBook Pro Retina 13" 2018  iPhone Xs Max  Apple Watch Series 4  2x Apple TV 4  Stereopair HomePods


Acties:
  • +1Henk 'm!
  • Pinned

  • Fe®
  • Registratie: november 2010
  • Laatst online: 10:13

Fe®

Xblive: Fer Lets Rock

TiesD schreef op zaterdag 12 januari 2019 @ 10:58:
In het QNAP-draadje heb ik onderstaande posting geplaatst. Niemand reageerde helaas. Iemand hier een idee?

Op mijn Qnap TS251 heb ik Domoticz draaien in combinatie met de RFXtrx433E. De app draait niet in een container.
Heel lang heeft dit prima gewerkt, maar sinds een aantal maanden komt het regelmatig voor dat ik Domoticz niet meer kan benaderen, c.q. niet meer reageert.
De app draait dan nog wel op de Nas. Door de domoticz app af te sluiten en weer te starten, los ik het probleem momenteel op.
Ik heb zowel in de logs van de nas als van domoticz gekeken naar aanwijzingen wat er mis kan zijn, maar daar zie ik niets.
Verwijderen en herinstalleren van de app heeft geen positief resultaat.
In het "vastlopen" van de app kan ik geen regelmaaat ontdekken.
Normaal gesproken is Google my friend, maar deze laat me nu in de steek.
Iemand die dit herkent, of mij een hint kan geven waar ik een oplossing kan zoeken?
Zelfde probleem met mijn asustor , deze link heeft mij geholpen

Walking on the bright side of life


Acties:
  • 0Henk 'm!
  • Pinned
@ThinkPad zie post boven mij :)

@Richard35 misschien handig om even je blocky/LUA/dzVents mee te posten zodat we zien wat er gebeurt :)
Het enige wat de blocky die ThinkPad op het Domoticz forum heeft gedaan is de virtuele schakelaar isDonker (virt) uit zetten als het dag is en isDonker (virt) aan is (zonsopkomst <-> zonsondergang) en aanzetten als het nacht is (zonsondergang <-> zonsopkomst) als isDonker (virt) uit staat

---------------

Heb weer een klein scriptje geschreven die mij netjes een melding stuurt dat er een bepaalde weersvoorspelling is (code geel, oranje & rood) met de verwachting er bij.

De plugin komt hier vandaan: https://www.domoticz.com/forum/viewtopic.php?t=19519

Als er nu een waarschuwing komt staat er nu Wind(2), ik vindt die (2) niets dus die heb ik weg gehaald, dat kan eventueel op regel 170. Verwijder in dit geval +"("+LEVELvalue+")" het zelfde doe je ook op regel 232.

Bovenste regel moet je even aanpassen naar het juiste IDX van je weer alarm apparaat.

code:
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
local alarmIDX = 60
return {
    on = {
        devices = {
            alarmIDX
        }
    },
    execute = function(domoticz)
        local weerAlarmCode = domoticz.devices(alarmIDX).color
        local weerVoorspelling = domoticz.devices(alarmIDX).text
        
        --Bepaal kleuren
        if(weerAlarmCode == 0) then
            weerAlarmKleurCode = "Groen"
        elseif(weerAlarmCode == 1) then
            weerAlarmKleurCode = "geel"
        elseif(weerAlarmCode == 2) then
            weerAlarmKleurCode = "oranje"
        elseif(weerAlarmCode == 3) then
            weerAlarmKleurCode = "rood"
        end
        
        if(weerAlarmCode > 0) then
            message = "*Waarschuwing!*%0AVoor morgen is code *"..weerAlarmKleurCode.."* afgegeven. Er is kans op "..weerVoorspelling..""
        elseif(weerAlarmCode == 0) then
            message = "Alle weer's waarschuwingen zijn opgeheven!"
        end
        
        domoticz.openURL('https://api.telegram.org/bot'..telegramAPI..'/sendMessage?chat_id='..telegramChatID..'&text=' .. message ..'&parse_mode=markdown')
    
    end
}

Let op! Ik heb een apart dzVents "script" aangemaakt met wat instellingen zoals telegramAPI en telegramChatID. Hierdoor hoef ik bepaalde informatie niet per script op te geven maar kan ik deze globaal er uithalen.

Toppe wijzigde deze reactie 12-01-2019 17:25 (21%)

MacBook Pro Retina 13" 2018  iPhone Xs Max  Apple Watch Series 4  2x Apple TV 4  Stereopair HomePods


Acties:
  • +1Henk 'm!
  • Pinned

  • alberthakvoort
  • Registratie: juli 2006
  • Laatst online: 20-05 16:59

Passieve woning + (D)WTW + SolarEdge 6530Wp + Ecodan 5 kW Warmtepomp CV | SWW


Acties:
  • 0Henk 'm!
  • Pinned
Voor de mensen die ook gebruik maken van de MeteoAlarmEU plugin, hierbij de Nederlandse versie:


code: plugin.py
163
164
165
166
167
168
169
170
171
172
173
174
                if (AWTvalue == "1") : AWTtext = "Wind"
                if (AWTvalue == "2") : AWTtext = "Sneeuw/ijs"
                if (AWTvalue == "3") : AWTtext = "Onweer"
                if (AWTvalue == "4") : AWTtext = "Mist"
                if (AWTvalue == "5") : AWTtext = "Hoge temperaturen"
                if (AWTvalue == "6") : AWTtext = "Lage temperaturen"
                if (AWTvalue == "7") : AWTtext = "Kustbedreiging"
                if (AWTvalue == "8") : AWTtext = "Bos- en heidebranden"
                if (AWTvalue == "9") : AWTtext = "Lawines"
                if (AWTvalue == "10") : AWTtext = "Regen"
                if (AWTvalue == "11") : AWTtext = "Overstromingen"
                if (AWTvalue == "12") : AWTtext = "Regen-overstromingen"



code: plugin.py
134
ValueToUpdate="Geen speciale aandacht vereist"



code: plugin.py
226
227
228
229
230
231
232
233
234
235
236
237
                if (AWTvalue == "1") : AWTtext = "Wind"
                if (AWTvalue == "2") : AWTtext = "Sneeuw/ijs"
                if (AWTvalue == "3") : AWTtext = "Onweer"
                if (AWTvalue == "4") : AWTtext = "Mist"
                if (AWTvalue == "5") : AWTtext = "Hoge temperaturen"
                if (AWTvalue == "6") : AWTtext = "Lage temperaturen"
                if (AWTvalue == "7") : AWTtext = "Kustbedreiging"
                if (AWTvalue == "8") : AWTtext = "Bos- en heidebranden"
                if (AWTvalue == "9") : AWTtext = "Lawines"
                if (AWTvalue == "10") : AWTtext = "Regen"
                if (AWTvalue == "11") : AWTtext = "Overstromingen"
                if (AWTvalue == "12") : AWTtext = "Regen-overstromingen"



code: plugin.py
198
ValueToUpdate="Geen speciale aandacht vereist"


Regelnummers kloppen met het orgineel :9

Edit: voor de mensen die de buienradar plugin gebruiken en fouten blijven krijgen over attempt to concatenate field '?' (a nil value) hier de oplossing:"


code:
1
2
3
4
5
6
7
8
--Functie devices updaten
function UpdateDev(device,nvalue,svalues)
    if(commandArray == nil) then
        commandArray = {['UpdateDevice'] = otherdevices_idx[device]..'|'..tostring(nvalue)..'|'..tostring(svalues)}
    else 
        commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[device]..'|'..tostring(nvalue)..'|'..tostring(svalues)}
    end 
end

Script wilt een +1 doen, alleen krijg je een foutmelding bij de eerste regel omdat er nog helemaal niets in commandArray zit

Toppe wijzigde deze reactie 17-01-2019 07:38 (19%)

MacBook Pro Retina 13" 2018  iPhone Xs Max  Apple Watch Series 4  2x Apple TV 4  Stereopair HomePods


Acties:
  • 0Henk 'm!
  • Pinned
Toppe schreef op vrijdag 25 januari 2019 @ 14:15:
[...]


Lekker klote dat dat dan weer niet werkt via Telegram. Maar jij hebt dus je script:// onder je on schakelaar zitten. Ga ik ook eens proberen :)

Dit eens ingesteld, ben benieuwd. Enige nadeel is dat ik nu dus de dynamische content kwijt bent. Had altijd dit bericht als onderschrift voor de foto mee gestuurd:

14:22: de bel gaat


Maar dat gaat dus niet meer
Teksten kun je gewoon meesturen door een extra Curl regel toe te voegen.

Dit script gebruik ik incl extra tekstregel.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh

##############################################################################
bot_id="xxxxxxx"
api_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
chat_id="xxxxxxxxxxxxxxx"
action="sendMessage"
##############################################################################

SnapFile="/tmp/camsnapshot.jpg"

# Get snapshot via Domoticz server
wget -O $SnapFile "http://inlognaam:wachtwoord@ip-domoticz:8080/camsnapshot.jpg?idx=6"

# Send Telegram message with image
curl -s -X POST "https://api.telegram.org/$bot_id:$api_key/$action?chat_id=$chat_id&text=Er is zojuist aangebeld!"
curl -s -X POST "https://api.telegram.org/$bot_id:$api_key/sendPhoto" -F chat_id=$chat_id -F photo="@$SnapFile"

# Remove Image
/bin/rm /tmp/camsnapshot.jpg


Acties:
  • +1Henk 'm!
  • Pinned
Aparte post zodat ik deze kan pinnen
Heb trouwens ook een script gemaakt die de backup controleert of het wel goed is gegaan, enige vereiste is werkende PHP in de zelfde map als waar de backup staat :)

PHP: verify.php
1
2
3
4
5
6
7
8
9
10
11
12
OK!<?php
    $dir = '/www/backup/';
    $currentDate = date("Ymds");
    
    $globbed = glob("domoticz_".$currentDate."*.db.gz");
    
    if($globbed){
        http_response_code('200');
    } elseif(empty($globbed)){
        http_response_code('404');
    }
?>




Lua: Controleer backup
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
return {
   on = {
      timer = { 'at 02:00' },
      httpResponses = { 'trigger' }
   },
   logging = {
        marker = "Backup"
    },
   execute = function(domoticz, item)
      if (item.isTimer) then
         domoticz.openURL({
            url = '', --URL van verify.php
            callback = 'trigger'
         })
      end
      if (item.isHTTPResponse) then
         if (item.ok) then
            domoticz.log("Er is een geldige backup gevonden.")
         else 
            domoticz.log("Er is geen geldige backup gevonden.") 
            sendTelegram("*Let op!*%0ABackup is niet gelukt!", "private") --Hier verstuurt hij een Telegram, je moet nog wel even je eigen code er in zetten
         end
      end
   end
}

MacBook Pro Retina 13" 2018  iPhone Xs Max  Apple Watch Series 4  2x Apple TV 4  Stereopair HomePods


Acties:
  • +2Henk 'm!
  • Pinned

  • I-King
  • Registratie: maart 2003
  • Laatst online: 19:49
Ik heb een .bat bestandje aangemaakt. In dit .bat bestandje verwijs ik naar de 2 files die aangemaakt zijn door Let's Encrypt en laat deze samenvoegen. De /y switch zorgt dat het overschreven wordt.

In de task manager heb ik een taak die iedere morgen (met verhoogde rechten) loopt.

Dit staat er in 't .bat bestand:
copy "C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\Certificates\XXX-key.pem" + "C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\Certificates\XXX-crt.pem" "C:\Program Files (x86)\Domoticz\server_cert.pem" /y
Wat ik mij wel afvroeg, als de PC even uitvalt 's nachts, heb ik dan verkeerde totalen of haalt hij 's ochtends gewoon (in 1 piek?) in wat mijn verbruik is geweest?

Acties:
  • +1Henk 'm!
  • Pinned

  • Copitano
  • Registratie: februari 2018
  • Laatst online: 21:36

Copitano

Hoorn NH

@Toppe Bedoel je misschien dit?

https://gathering.tweaker...message/57032733#57032733

of bedoel je vanuit Domoticz =>influxDB=>Grafana?

Elga | Valliant eco TEC plus VHR 30-34/5-5L | Kamstrup 602 |Nodo OTGW | Raspberry Pi 3B+


Acties:
  • +1Henk 'm!
  • Pinned

  • Copitano
  • Registratie: februari 2018
  • Laatst online: 21:36

Copitano

Hoorn NH

@Toppe Op mijn Kamstrup wordt de energie gemeten in E1 in GJ en de defrosts in E3 (Cool energie) om de COP van de WP te bepalen trek ik E3 af van E1. GJ is nogal grof dus niet te gebruiken per dag. Maar voor een maandtotaal geeft het een goed beeld.
Hierbij nog wat visuele voorbeelden bij de vorige post:
Instellingen=>Hardware voor de Kamstrup warmtemeter

Instellingen=>Hardware voor de OTGW

Apparaten die dan (in mijn geval) zichtbaar worden

Instellingen=>Meer opties=>Data versturen=>InfluxDB (Ik stuur alles naar dezelfde DB "Kamstrup" dus.

In Grafana zie stel je dan de Database in

Instellingen voor de database (Je eigen IP nummer invullen)

Voorbeeld van de Query. Is wel eens lastig de juiste te vinden. Voor warmwater nog niet gelukt dus.

Elga | Valliant eco TEC plus VHR 30-34/5-5L | Kamstrup 602 |Nodo OTGW | Raspberry Pi 3B+


Acties:
  • +2Henk 'm!
  • Pinned

  • Chrisje1983
  • Registratie: februari 2012
  • Laatst online: 18-05 21:22
Toppe schreef op donderdag 7 februari 2019 @ 18:58:
Ik wil beginnen met Z-Wave, iemand een tof idee als eerste apparaat? 8)
Ik zou even uitkijken met chineze z-wave, quality control is flink beneden peil gezakt.

Ik heb totaal 60 neo coolcam pir, deur, sirenes en sockets en ook heiman rookmelders.

Ik heb er totaal 7 defect, waarvan de laatste sirene en 2 deurmelders DOA aankwamen. Het begon met een sirene welke elke 24 uur 2 duracel batterijen leeg trekt, ik heb dat ding getest met labvoeding en multimeters en het ding viel na 1 sirene triggering nooit meer terug in sleep mode, foto's met test uitslag verstuurd naar neo coolcam en je kent de overdreven manier wel hoe dat gaat, sorry grote vriend, dit gaat nooit meer gebeuren, jaja...

Inmiddels wat defecte neo coolcam nodes verder en ondanks dat ik video's heb geupload waarin aan getoond wordt dat de deur melders niet goed zijn en de sirene harstikke dood is (DOA bij aankomst) wil Neo coolcam wil mij niets meer vergoeden of helpen, en blijft hardnekkig spelen. Ze willen dat ik de sensors op eigen kosten toe stuur, of de andere optie: dat ik 3 sensors koop en er 1 gratis bij krijg.

van de 20 heiman rook melders zijn er inmiddels 2 overleden, zo uit het niets begonnen ze met elke 53 seconden een dubbele beep. Dan zijn ze dus kapot, hier heb ik nog wel nieuwe voor gekregen. Maar ik denk dat ik er na kan fluiten als er nog meer bezwijken.

Wees gewaarschuwd, het lijkt leuk, je begint met een paar z-wave nodes, al gauw verzin je dat je er meer wilt hebben en in elke ruimte een deursensor, pir en rookmelder wil ophangen maar als jij inmiddels voor 1500 euro aan chineze z-wave hebt opgehangen en alles gaat langzaam aan dood dan wordt het toch wel een minder leuk grapje.

Voor het geen wat nog werkt ben ik erg tevreden, ik heb alleen het vertrouwen verloren in een eeuwige werking. Het spul is nog geen jaar oud want ik ben pas maart 2018 begonnen met domotica.

Ik heb ook het idee dat de quality control flink gezakt is daar bij neo coolcam de laatste maanden van 2018, het is echt bagger. Ik heb dit dan ook aangegeven bij neo coolcam.

Als ik dan kijk naar het andere spul (sonoff en nodemcu) wat allemaal via wifi en mqtt werkt, dat is zo stabiel als maar kan en nooit geen problemen mee. Maar rookmelders, deurmelders, en pirs zelf te gaan bouwen met een nodemcu wordt natuurlijk geen mooi gezicht in huis.

Acties:
  • +1Henk 'm!
  • Pinned

  • darkrain
  • Registratie: augustus 2001
  • Laatst online: 15:15

darkrain

Geniet

Toppe schreef op zaterdag 16 februari 2019 @ 13:04:
[...]
Ik kreeg geen data meer door vanuit de slimme meter zodra ik mijn Z-Wave stick er op aansloot, even het apparaat selecteren onder hardware en "Update" verhielp het probleem. Domoticz heeft af en toe best last van USB fouten heb ik het idee?
https://www.domoticz.com/...d_device_name_to_USB_port
Op bovenstaande link (hopelijk al bekend hier) vind je een uitleg hoe je een vaste USB poort kunt instellen voor apparaten op een Pi.

Leef en laat leven...


Acties:
  • +1Henk 'm!
  • Pinned

  • bing69
  • Registratie: december 2000
  • Laatst online: 07:41
vuurtjih schreef op zaterdag 23 februari 2019 @ 10:49:
De Aqara knop werkte niet i.c.m. Domoticz, dus nu maar met de Xiaomi Knop proberen:
[Afbeelding]

Echter krijg ik dit ook niet aan de praat, heeft iemand tips of ideeën hoe ik dit wel kan fixen?
Ik gebruik ook de Cube -> Domoticz -> Yeelight en dat werkt gewoon prima.

[Afbeelding]

De Log registreert wel de knop, maar niet de actie.
Bij mij werkt het in Dzvents met

code:
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
return {
    active = true, 
    on = {
        devices = {
            'Xiaomi Cube' 
        },

    },
    execute = function(domoticz, cube)
        local Boog= domoticz.devices('Boog')
        local Rood= domoticz.devices('Rood')
        local Raam= domoticz.devices('Raam')
        local Bank= domoticz.devices('Bank')
        local Midden= domoticz.devices('Midden')
            if (Rood.state == 'Off') and(cube.levelName == "clock_wise") then
                Boog.dimTo(10)
                Rood.dimTo(50)
                Raam.dimTo(61)
                Bank.dimTo(44)
                Midden.dimTo(63)
            end
            if (Rood.state == 'On') and (cube.levelName == "anti_clock_wise") then
                Boog.switchOff() 
                Rood.switchOff()                 
                Raam.switchOff()
                Midden.switchOff()
            end
            if (Rood.state == 'On') and (cube.levelName == "flip90")  then
                Boog.dimTo(10)   
                Raam.dimTo(70)
                Rood.dimTo(80)
            end
            if (Rood.state == 'On') and (cube.levelName == "flip180")  then
                Boog.dimTo(10) 
                Raam.dimTo(60)
                Rood.dimTo(50)
                Bank.dimTo(40)
            end
            if (Rood.state == 'On') and (cube.levelName == "move")  then
                Boog.SwitchOff(5) 
                Rood.dimTo(30)
                Raam.dimTo(20)
                Midden.dimTo(30)
            end
            
        end
}

Bing


Acties:
  • +1Henk 'm!
  • Pinned
RR46 schreef op zaterdag 20 april 2019 @ 23:32:
SD kaartje is en blijft natuurlijk een risico factor, ben zelf aan het inlezen voor een SSD schijf.

Enerzijds welke aanbevolen wordt, anderzijds hoe krijg ik de running Domoticz omgeving van SD naar SSD (met behoudt van settings, data etc. etc.). Iemand aanbevelingen?
Backup maken van Domoticz via Instellingen (Setup->Settings->Backup)
Linux zelf installeren op SSD
Daarna Domoticz installeren. (curl -L https://install.domoticz.com | bash)
Backup terugzetten via Domoticz (Setup->Settings->Restore)

Alleen wat je buiten Domoticz hebt geïnstalleerd / Scripts die je handmatig hebt geplaatst etc dien je zelf te veilig te stellen en opnieuw te installeren.

Je zou kunnen testen of deze stappen nog werken al vraag ik mij af wat sneller is >:)
https://www.domoticz.com/forum/viewtopic.php?t=14525

Acties:
  • +1Henk 'm!
  • Pinned

  • burne
  • Registratie: maart 2000
  • Niet online

burne

Troz!

Powergrim schreef op vrijdag 12 april 2019 @ 14:24:
[...]


Met dit soort dingen kom je vooral uit op een reverse proxy. Je kan dit redelijk snel fixen met een apache server waar je vhosts op inricht.

code:
1
2
3
4
5
6
7
8
9
<VirtualHost 192.168.1.100:80>

  ProxyPass        /unifi/             http://localhost:8080/
  ProxyPassReverse /unifi/             http://localhost:8080/

  ProxyPass        /domoticz/          http://localhost:9080/
  ProxyPassReverse /domoticz/          http://localhost:9080/

</VirtualHost>



en nog een keer hetzelfde voor 443.

I don't like facts. They have a liberal bias.


Acties:
  • +5Henk 'm!
  • Pinned

  • rens-br
  • Registratie: december 2009
  • Laatst online: 20:59
Naar aanleiding van @renedis zijn tip over Caddy, ben ik daarmee aan de slag gegaan. Dat was nog niet super eenvoudig, maar een hoop support via de DM van @renedis is het uiteindelijk gelukt. Nogmaals super bedankt daarvoor!

Voor de personen die het ook graag willen gebruiken, heb ik hieronder de stappen neergezet die ik heb gebruikt.




Ik heb de volgende setup:
  • Raspberry Pi 3;
  • Domoticz V4.10717;
  • Unifi USG;
  • Domeinnaam bij bepaalde hoster.
De voorbereidingen
  1. Zorg ervoor dat er een wachtwoord is ingesteld onder 'WEBSITEBEVEILIGING' in Domoticz;
  2. Zorg ervoor dat je Pi / Server een vast IP heeft;
  3. Zoek je WAN-IP adres op via www.watismijnip.nl;
  4. Maak een A-record aan in de DNS settings van je hoster en link die aan je WAN-IP. Bijv. domoticz.domein.nl;
  5. Zet in je router poort 443 en 80 open naar buiten en kies als doel je LAN-IP van je Pi / Server;
  6. Verander de SSL poort van Domoticz naar iets anders dan 443 (zelf heb ik 444 gekozen), dan kan door middel van:
    code:
    1
    2
    
    sudo service domoticz.sh stop
    sudo nano /etc/init.d/domoticz.sh

  7. Verander dan de onderstaande regel en sla op;

    code:
    1
    
    DAEMON_ARGS="$DAEMON_ARGS -sslwww 443"

  8. Start Domoticz vervolgens weer door:

    code:
    1
    2
    
    sudo systemctl daemon-reload
    sudo service domoticz.sh start

Daarna kan Caddy geïnstalleerd worden. Ik heb hiervoor een stuk van deze website en de Getting Started gebruikt, maar je kan beter de stappen hieronder volgen.

Caddy installeren en configureren
  1. Zorg dat alles up to date is:
    code:
    1
    2
    
    sudo apt-get update
    sudo apt-get upgrade

  2. Verwijder apache, indien aanwezig:
    code:
    1
    
    sudo apt-get remove apache2

  3. Download en installeer caddy en de hook.service:
    code:
    1
    
    curl https://getcaddy.com | bash -s personal hook.service

  4. Maak folder aan voor het caddy config file:
    code:
    1
    
    sudo mkdir /etc/caddy

  5. Maak het caddy config file aan:
    code:
    1
    
    sudo nano /etc/caddy/Caddyfile

  6. Zet daarin het volgende:

    code:
    1
    2
    3
    4
    5
    6
    7
    
    domoticz.DOMEIN.nl {
            proxy / https://IP-DOMOTICZ:PORT {
                    insecure_skip_verify
                    websocket
                    transparent
            }
    }

  7. Vul bij 'IP-DOMOTICZ' het ip van de Domoticz Pi in en bij 'PORT' de gekozen SSL poort;
  8. Sla op en test of alles goed werkt door middel van:
    code:
    1
    2
    
    cd /etc/caddy
    caddy

  9. Als het goed is krijg je dit te zien:
    code:
    1
    2
    3
    4
    5
    6
    7
    
    -- Logs begin at Thu 2016-11-03 18:16:42 CET, end at Thu 2019-05-09 20:29:51 CEST. --
    May 09 17:55:57 raspberrypi systemd[1]: Started Caddy's service.
    May 09 17:55:58 raspberrypi caddy[332]: Activating privacy features... done.
    May 09 17:55:58 raspberrypi caddy[332]: Serving HTTP on port 80
    May 09 17:55:58 raspberrypi caddy[332]: http://domoticz.domein.nl
    May 09 17:55:58 raspberrypi caddy[332]: Serving HTTPS on port 443
    May 09 17:55:58 raspberrypi caddy[332]: https://domoticz.domein.nl


    Tevens zou Domoticz ook te benaderen moeten zijn via: https://domoticz.domein.nl;
Als dit goed werkt kan er afgesloten worden met CTRL-C en kan de startup service ingesteld worden.

Instellen Startup service
Er zijn een aantal manieren om Caddy uit te voeren als een service. Ik heb gebruik gemaakt van de hook.service en dat stel je als volgt in:
  1. Installeer de caddy service:
    code:
    1
    
    sudo caddy -service install -agree -email E-MAILADRES -conf /etc/caddy/Caddyfile

  2. Vul bij E-MAILADRES je e-mailadres in, hieraan zal het SSL certificaat gekoppeld worden.
  3. Start de service:
    code:
    1
    
    sudo caddy -service start


    Dit kan even duren. Op de achtergrond worden er nu namelijk nieuwe certificaten aangemaakt;
  4. De service zou nu gestart moeten zijn en Domoticz zou weer te benaderen moeten zijn via https://domoticz.domein.nl.
Tips & Tricks
  1. Het zou nu kunnen voorkomen dat Domoticz niet vraagt om een wachtwoord wanneer het van buiten af wordt benaderd. Dit komt waarschijnlijk door het feit, dat er bij 'LOKALE NETWERKEN' ingesteld staat dat er geen wachtwoord nodig is bij bepaalde IP-ranges.
    Dit kan opgelost worden door onder 'REMOTEPROXYIPS' het IP adres van de server waar Caddy op draait in te geven.
  2. Door het aanpassen van de Caddy file kunnen er ook andere diensten naar buiten gebracht worden, bijvoorbeeld de Unifi Controller
  3. Wanneer bij het testen van Caddy door het uitvoeren van het commando 'caddy' de volgende error optreedt:

    code:
    1
    2
    3
    
    2019/05/09 21:06:44 [INFO] Unable to deactivated authorizations: 
    [domein] failed to obtain certificate: acme: Error -> One or more domains had a problem:
    [domein] acme: error: 403 :: urn:ietf:params:acme:error:unauthorized :: Cannot negotiate ALPN protocol "acme-tls/1" for tls-alpn-01 challenge, url:


    Is het aanpassen van de SSL poort in stap 6 niet goed gegaan.
  4. Dit valt ook te combineren met Fail2ban. Foutieve login pogingen worden dan na een aantal keer afgebroken en de toegang vanuit dat IP wordt dan geblokkeerd. Dit is te installeren door middel van: https://www.domoticz.com/wiki/Setup_fail2ban.

rens-br wijzigde deze reactie 09-05-2019 21:43 (8%)


Acties:
  • +11Henk 'm!
  • Pinned

  • flexje
  • Registratie: september 2001
  • Laatst online: 21:17

flexje

got-father

Zoals eerder vermeld ben ik bezig met een Telegram bot projectje waarmee ik Domoticz wil aansturen.
Om dit te realiseren heb ik ervoor gekozen om Node-Red als 'bridge' te gebruiken. Ik heb niet veel ervaring met Node-Red maar een uitdaging durf ik altijd wel aan.

Mogelijkheid op dit moment:
- Status van een device opvragen dmv een inline-keyboard



To-Do:
- Dynamisch inladen van devices + idx vanuit Domoticz (Floorplan) naar de inline-keyboard node;
(http://domoticzIP:domoticzPort/json.htm?type=command&param=getplandevices&idx=<planID>)
- Status aanpassen (switchen/toggle) met terugkoppeling van status naar TGB;

Hoe werkt het op dit moment?:
Allereerst heb je nodig:
- Domoticz
- Node-Red
- node-red-contrib-telegrambot (https://flows.nodered.org/node/node-red-contrib-telegrambot)
- Een telegram bot (Botfather -> https://core.telegram.org/bots#6-botfather)
- Je chatId van de nieuw aangemaakte telegram bot (Ga naar: https://api.telegram.org/bot**JEBOTAPITOKEN**/getUpdates en vind hier je chatid).

Stap 1:
Allereerst maak je met Botfather een nieuwe bot aan. Zie link hierboven. Zodra je deze hebt aangemaakt en je hebt ertegen "gepraat" vraag je de API token aan. Deze heb je nodig om de telegram bot straks te configureren in Node-Red.

Stap 2:
Ga naar je Node-Red webservice en voeg de node-red-contrib-telegrambot palette:


Stap 3:
Aan de linkerkant zie je nu de nieuwe telegram nodes en voeg dan de volgende flow toe:


Bij het toevoegen van de eerste Command node geef je de /status command op en configureer je je telegram node:


Vul de Botnaam, Token en chatId in (zie bovenin voor instructies).

Stap 4 (dit stuk wil ik dus nog dynamisch maken):
Na de command node -> voeg je een Function node toe (inline-keyboard) met de volgende code:

code:
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
context.global.keyboard = { pending : true };

var opts = {
    //reply_to_message_id: msg.payload.messageId,
    reply_markup: JSON.stringify({
        "inline_keyboard": [[
                {
                    "text": "Voordeur",
                    "callback_data": "21"
                },
                {
                    "text": "Achterdeur",
                    "callback_data": "66"
                },
                {
                    "text": "Keukenraam",
                    "callback_data": "77"
                },
            ],
            [
                {
                    "text": "CV Thermostaat",
                    "callback_data": "153"
                },
                {
                    "text": "Woonkamer temperatuur",
                    "callback_data": "154"
                }                
            ]
            ]
    })
};

msg.payload.content = "Welk apparaat zoek je " + msg.originalMessage.from.first_name +"?";
msg.payload.options = opts;

return msg;



Stap 5:
Koppel aan de inline-keyboard een Sender Node (geef wel weer je bot op in de node config)

Stap 6:
Voeg los van de pas gemaakte flow een aparte flow met een Event node en kies in de node settings voor een Callback Query

Stap 7:
Koppel aan de callback_query node een Change node en configureer deze als volgt:


Stap 8:
Koppel aan de Change node een HTTP request node:


Deze node vraagt de JSON data op vanuit Domoticz met de IDX in de {{{query}}} parameter welke opgegeven is uit de inline-keyboard. Hierna gooit ie de data in objecten.

Stap 9:
Koppel aan de HTTP request weer een Function node en code als volgt:

code:
1
2
3
4
5
6
7
msg.payload.content = "_'" +msg.payload.result[0].Name+ " is ";
msg.payload.content += "" +msg.payload.result[0].Data+ "'_";
msg.payload.content += "\r\n-- Graag gedaan " + msg.originalMessage.from.first_name;
msg.payload.chatId = JECHATID;
msg.payload.type = 'message';
msg.payload.options = {parse_mode : "Markdown"};
return msg;



Stap 10:
Als laatst koppel je weer een Sender node aan de Function node.

Dit werkt nu voorlopig ok. Alleen soms raakt de bot een beetje overstuur lijkt het. Als je dan de command node verandert naar bijv. /status1 en je vraagt weer de devices op doet ie het weer.

Graaaag, als jullie verbeteringen zien of een mogelijkheid om dit efficienter te krijgen hoor ik het zeer graag.
Nogmaals, heb weinig ervaring met Node-Red maar voor een bouwvakker vind ik dit aardig gelukt tot nu toe! :D

"Try not to become a man of success but rather to become a man of value..."

Pagina: 1


OnePlus 7 Pro (8GB intern) Microsoft Xbox One S All-Digital Edition LG OLED C9 Google Pixel 3a XL FIFA 19 Samsung Galaxy S10 Sony PlayStation 5 Sony

Tweakers vormt samen met Tweakers Elect, Hardware.Info, Autotrack, Nationale Vacaturebank, Intermediair en Independer de Persgroep Online Services B.V.
Alle rechten voorbehouden © 1998 - 2019 Hosting door True