Een s0 meter (deze is geschikt tot 45A) is erg handig om bijvoorbeeld tussen de zonnepanelen op het 230v uitgang te zetten.
Als je geen omvormer hebt die je via het netwerk kan uitlezen.
Deze zet je ertussen en met een Arduino en een weerstand kan je beginnen met het bijhouden van de pulsen en dus zo de opbrengst bij gaan houden. En deze doorgeeft aan je domoticz.


Werking van S0 kabel Normaliter is het S0 contact open.
De “digital in” pin is verbonden met de GND via een weerstand.
Als een pin verbonden is met de GND heeft hij de status LOW.
Zodra het contact sluit gaat er een stroompje lopen van de 5v naar de “digital in” en krijgt dan de status HIGH.
Het contact gaat direct (na de debounce tijd, 30ms) weer open.

De code is al wel wat aangepast.
De s0 (nr21) meter is verbonden op de GND (ground)
De s0 (nr20) meter is verbonden met pin D1,en daar zet je een weerstand tussen de 5v lijn en D1 is digitale input 1 (pin 12) van 10KΩ (10.000 OHM)
(zie onderstaande afbeelding)
Zoals je kunt zien kun je 2 tellers zo gebruiken en deze worden dan ook zo gelogd met teller 1 of teller 2 ( dit is het zelfde opgebouwd als hierboven aleen dan weerstand vanaf 5v lijn naar pin D3.
Nee deze werkt niet met de npn sensor.
Maar je zou deze kunnen proberen:
TZT TL-W5MC1 https://s.click.aliexpress.com/e/_DELCdTl
of
TCRT5000 Infrarood lijn detectie https://opencircuit.nl/product/tcrt5000-infrarood-lijn-detectie-module
Nee deze werkt niet met de npn sensor.
Maar je zou deze kunnen proberen:
TZT TL-W5MC1 https://s.click.aliexpress.com/e/_DELCdTl
of
TCRT5000 Infrarood lijn detectie https://opencircuit.nl/product/tcrt5000-infrarood-lijn-detectie-module

Dit is via domoticz weer te activeren via hardware.
Als s0 counter usb

En bij modus instellen stel je in hoeveel pulsen je vanaf je kwh meter (deze is geschikt tot 45A) krijgt.

Ik heb hem op de 1e poort aangesloten en daar krijg ik 2000 pulsen per KW
Het aantal keren dat de pin HIGH is (puls) kun je tellen.
Vaak geeft de meter 1 puls per Wh.
Dus 1000 per kilowattuur.
Sommige meters hebben een ander aantal impulsen per kWh,
straks bij het instellen is dat belangrijk.
Mijn tussen meter geeft 2000 pulsen per kWh af.
Hier onder de code die ik zelf in een Arduino pro mini heb zitten en al meer dan een jaar online is zonder fouten.
Advertentie :
klik op download voor de ino file.
[wpdm_package id=’6270′]
// This sketch is based on http://domoticz.com/forum/viewtopic.php?f=38&t=7300 // It will update counters in Domoticz. // Via the serial port of the Pi you can set the initial counter values. // do this while the Arduino is connected to the Pi but Domoticz is not running. // Set the serial port to 9600 Baud. // If not set, the counter will not start updating. // Send the following command (with Newline ending): // M[number of internal S0 counter]=[value in whole liters/Wh]. // M1=100000 // M2=100000 // KWH interrupt attached to IRQ 0 = pin2 (D2) //KWH interrupt attached to IRQ 1 = pin3 // Start with M2, then M1. As soon as M1 !=0, the counter starts sending data. //Number of pulses, used to measure energy. volatile unsigned int pulseCount1 = 0; volatile long pulseCount1_sinceStart = 0; volatile unsigned int pulseCount2 = 0; volatile long pulseCount2_sinceStart = 0; volatile unsigned int reportInterval = 10000; //Interval between messages being sent out (in milliseconds) int PulseCounterID = 001; int PulseCounterVersion = 042; String readString = String(100); //string for fetching data from address int ind1 = 0; int ind2 = 0; String valueSet; String valueSetID; float lastTime = 0; // The interrupt routine void onPulse1() { //pulseCounter pulseCount1++; pulseCount1_sinceStart++; //Blink built-in LED on S0-pulse } // The interrupt routine //void onPulse2() //{ //pulseCounter //pulseCount2++; //pulseCount2_sinceStart++; //} void setup() { // KWH interrupt attached to IRQ 0 = pin2 (D2) attachInterrupt(0, onPulse1, FALLING); //KWH interrupt attached to IRQ 1 = pin3 //attachInterrupt(1, onPulse2, FALLING); Serial.begin(9600); Serial.print(“/”); Serial.print(PulseCounterID); Serial.print(“:S0 Pulse Counter V”); Serial.println(PulseCounterVersion); } void loop() { // decode the start values // it looks for M1=123456 while (Serial.available() > 0) { char c = Serial.read(); //read char by char // it expects a maximum of 20 char if (readString.length() < 20) { //store characters to string readString +=c; Serial.println(c); } //if endline has been received if (c == ‘n’) { Serial.println(“endline”); if(readString.indexOf(“M”) >=0){ ind1 = readString.indexOf(‘M’); valueSetID = readString.substring(ind1+1, ind1+2); ind2 = readString.indexOf(‘=’); valueSet = readString.substring(ind2+1); if (valueSetID.toInt() == 1){ pulseCount1_sinceStart = valueSet.toFloat(); } else if (valueSetID.toInt() == 2){ pulseCount2_sinceStart = valueSet.toFloat(); } else {return;} } // end readString M readString = “”; } // end endline } // end serial available // send the data every reportInterval if(millis() – lastTime > reportInterval) { lastTime = millis(); // Only send the counter data if the initial pulse count is not zero if (pulseCount1_sinceStart != 0){ Serial.print(“ID:”); Serial.print(PulseCounterID); Serial.print(“:I:10:M1:”); Serial.print(pulseCount1); Serial.print(“:”); Serial.print(pulseCount1_sinceStart); Serial.print(“:”); Serial.print(“M2”); Serial.print(“:”); Serial.print(pulseCount2); Serial.print(“:”); Serial.println(pulseCount2_sinceStart); pulseCount1 = 0; pulseCount2 = 0; } // end if not zero } // end interval loop } // end void loop()
Spelfouten, taalfouten of inhoudelijke fouten ontdekt?
Stuur dan een mailtje naar de auteur van dit artikel!
Tevreden met deze website?
Als je dit artikel met interesse hebt gelezen klik dan op Vind ik Leuk .
Voor u een kleine moeite voor mij een compliment.
Alvast Bedankt.
Als je feedback, tips of iets anders hebt,
Aarzel dan niet om hieronder een reactie achter te laten.
Hoi,
Ik heb de s0tool geladen in een wemos D1. Dit lijkt allemaal prima gegaan (ik kan de tool bereiken via de webbrowser).
Kan ik de s0tool ook aan domoticz koppelen via wifi (liefst mqtt)?
Groet Jeroen
Hallo Wobbe, bedankt voor je reactie en alle informatie die je hebt gedeeld.Inmiddels heb ik de Arduino code draaien op een Uno na de tips van bstrkr verder in dit forum. De tweede counter blijkt al in de code te zijn opgenomen, maar moest alleen op paar regels worden uitgecommentarisseerd. Ik heb een phototransistor op de interrupt ingangen aangesloten en counters getest door een rode led 2x per seconde te laten flitsen. Dat werkt. Nu nog mijn watermeter.
Hallo GertJan,
Bedankt voor je reactie.
Vraag 1: dat zou ook mogelijk moeten zijn.
Vraag 2: Arduino Uno zou ook zeker geschikt zijn om 2 tegelijkertijd te meten. Daarvoor zal je de code natuurlijk wel moeten aanpassen, draai zelf geen domoticz meer dus kan het niet meer testen.
Wobbe