tom_rosenback wrote: Ok, för att få WP att arbeta med en kortare period behövs det lite justeringar i koden men det skall inte vara några större problem. Som det är tänkt nu så skall den bara köras periodiskt med ex 15min intervall (detta pga att det inte tas i beaktande senaste lagrade värdet för en viss sensor och på så vis skulle databasen bli rätt stor med många sensorer).
WP är till för att läsa in värden från olika inputs, oberoende vad det är för typ. Kan du ge exempel på er aktor så har jag lättare att säga var den hör hemma. Elfas ADAM I/O serie låter som ett plugin både till HA och WP, HA sköter outputten, WP inputten. Plugins kommer att gå att bygga till HA 3.x+ som jag hoppas få releasad snart.
Ett litet tips på problemet med växande databas: RRDTool är ett utmärkt redskap för loggning med konsoliderande databas. Databasen växer aldrig utan ju längre tiden går desto mer konsolideras den till grövre medelvärden. Den är designad för inbyggnad i andra system och genererar även själva graferna på ett flexibelt sätt. Det loggningsverktyg som jag använder (Cacti) är i själva verket en frontend till RRDTool. RRDTool är open source
http://oss.oetiker.ch/rrdtool/
Exempel på hur jag använder Adam idag:
Input: Elförbrukning - 1 st tråd från Elmätarens S0 kontakt (modbus läser en pulsräknare - unsigned integer)
Input: Status på hemmalarmet - 2 st trådar med 0/+5V (modbus läser två bitar - bit)
Output: Relä för belysning - 1 open collector matar 12V relä (modbus skriver en bit)
Output: Relä för motorvärmar uttag - 1 open collector matar 12V relä (modbus skriver en bit)
Output: Styringång för grindöppnare - 1 open collector matar grindstyrningen (modbus skriver en bit två gånger i rad för att skapa en puls)
Så här anropar jag "modbusdrivisarna" (wrappers) idag:
Input:
$value = exec("C://Progra~1/Klingen/ElektroServer/read_coil_status 192.168.0.4 2", $output, $return_var);
där 192.168.0.4 är IP till Adam-modulen och 2 är adressen till "anslutningsskruven"
Output:
exec("C://Progra~1/Klingen/ElektroServer/force_single_coil.exe 192.168.0.4 17 1", $output, $return_var);
där 192.168.0.4 är IP till Adam-modulen, 17 är adressen till "anslutningsskruven" och 1 anger hög spänningsnivå
Mitt eget sätt att hantera "plugins" är att helt enkelt lagra alla rutiner i en php-vektor:
// Actors
$TurnOff['Ytterbelysning'] = "C://Progra~1/Klingen/ElektroServer/force_single_coil.exe 192.168.0.4 17 0";
$TurnOn['Ytterbelysning'] = "C://Progra~1/Klingen/ElektroServer/force_single_coil.exe 192.168.0.4 17 1";
... o.s.v. och motsvarande för sensorer
Jag har skrivit 4 olika wrappers för modbus och det täcker alla fall jag behöver inklusive värmepumpen som har en stor mängd sensorer och några aktorer:
- Skriva en bit
- Läsa en bit
- Läsa en unsigned integer (t.ex. räknare)
- Läsa en signed integer (t.ex. temperatur)
Vill man täcka helt så behövs också
- Skriva en integer (t.ex. börvärde för innetemperatur)
men det har jag hittills inte sett behovet av.
Jag delar gärna mina modbuswrappers som är verifierade på Cygwin om nu någon annan skulle råka använda Modbus.
Hade jag designat mitt system idag hade jag nog utan tvekan valt 1-wire istället. Men det fanns inte den communityn på den tiden runt 1-wire.
Bidrar gärna som beta och diskussionspartner för plugins och ser fram mot 3.x+.
Hoppas jag inte tråkar ut er med långa inlägg
Pen