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
Ik hebv een LED lichtimplus ipv S0, en ik wil ook een pulse uitlezer voor de watermeter, ik denk aan een hall effect sensor met magneet boven de wijzer te monteren, hopelijk kan het klepje dan nog dicht. Vraag 1: S0 of licht puls, maak niet uit toch? Vraag 2: Is een Arduino Uno geschikt om twee pulse counters tegelijkertijd bij te houden en door geven aan Domoticz?
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
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.
Als ik de meterstanden wil opslaan op een SD kaart, hoe kan ik de code dan aanpassen om dit via de shield naar de SD kaart op te slaan?
Als je de data op een sd kaart wilt opslaan, hoe pas je de code dan aan zodat dit juist wordt opgeslagen?
Dank! zelfs eind 2022 nog actueel voor mij 😉
Wilde een LJ12A3-4-Z/BX mbv een 12v relais aan een Arduino Uno koppelen en naar Domoticz laten pushen – Gelukt! (ben wat huiverig voor die EPS32 dingtjes in de WIFI; dan liever maar iets via USB, vandaar de UNO die ik nog had liggen)
Voor anderen die het willen uploaden op een Arduino UNO en net als ik tegen problemen aanlopen: open het script in een editor en vervang alle aanhalings tekens (dubbele en enkele) met hun ‘gewone’ versie op uw toetsenbord, vervang “<” (line112) met een “<” en de “if (c == ‘n’)” (line124) met if (c == ‘n’). vervang daarnaast de – (line158) met de – op uw toetsenbord.
Hallo bstrke,
Bedankt voor je reactie.
Ga vanavond nog wel even kijken waarom hij dit niet meer goed weergeeft.
Bedankt voor de melding.
goedenavond, ik krijg de S0 meting wel aan de opbrengst kant, maar aan de verbruikerskant krijg ik geen metingen, werkt een 3 fasen kwh meter met S0 op dezelfde manier als een 1 fase kwh meter? Ik heb de eastron sdm72d. Verder gebruik ik de script van SolarMeter van Harold
Ik heb ook dit script geprobeerd op een arduino uno.
Maar krijg ook allemaal foutmeldingen.
s0counter:185:17: error: expected primary-expression before ‘:’ token
Serial.print(“:”);
^
s0counter:189:17: error: expected primary-expression before ‘:’ token
Serial.print(“:”);
^
exit status 1
stray ‘\342’ in program
inmiddels al opgelost.
Ik probeer deze sketch te uploaden maar krijg foutmeldingen tijdens het verifieren.
/stray in programma. Kun je me vertellen wat er fout gaat?
Hallo Freek,
Heb je de juiste bord ook in je arduino lijst geselecteerd?
en heb je iets meer info welke fout je krijgt.