PellMon, pelletlogger med öppen källkod
Re: PellMon, pelletlogger med öppen källkod
ok,
ubuntu 13.10 desktop är igång,
för att ta det från början;-)
ska jag köra enligt förra inlägget
eller ska jag installera helt från grunden
ubuntu 13.10 desktop är igång,
för att ta det från början;-)
ska jag köra enligt förra inlägget
eller ska jag installera helt från grunden
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
Re: PellMon, pelletlogger med öppen källkod
Vad exakt menar du med att 'installera helt från grunden'? Du kan knappast ta det mera från grunden än att installera om operativsystemet?
Mitt förra inlägg beskrev hur du ska göra för att logga in på din server med ssh, ladda ner och unzippa pellmon och starta pellmonweb, fungerade inte det?
Mitt förra inlägg beskrev hur du ska göra för att logga in på din server med ssh, ladda ner och unzippa pellmon och starta pellmonweb, fungerade inte det?
Termax 25Cr med spaksotning, Bio Comfort + lambda + kompressorrengöring, 10m skorsten med 125mm insatsrör. 8t bulkförråd. Matene vertikalskruv. https://github.com/motoz/PellMon open source pelletlogger
Re: PellMon, pelletlogger med öppen källkod
ok,Honda skrev:
ssh bosse@dinserver
wget https://github.com/motoz/PellMon/archive/master.zip
unzip master.zip
cd PellMon-master/src
cp pellmon.conf.in pellmon.conf
#redigera path till db och path till logfil, ev port nr
nano pellmon.conf
#starta dbus sessionsbus
eval `dbus-launch --sh-syntax`
#starta pellmonweb
./pellmonweb.py
kör över port 8082
och nu är det bara att börja lattja, och så kan jag se felkoderna rullande i min putty?
är det så du menar att jag ska arbeta?
och borde jag inte köra med min befintliga .conffil för att få ordnign på allt?
eller är det ett nästa steg?
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
Re: PellMon, pelletlogger med öppen källkod
japp, det vägrar att köra igång fullt ut när jag lägger till denna raden i pellmonweb.py:
self.suneffectview = Suneffect(polling, db)
däremot så visas min nya index.html och laoyut.html
är det nåt javascript som behöver uppdateras?
Edit:
äsch, ett tabbfel, tydligen så ska de inte stå under varandra i min texteditor...
grr)
self.suneffectview = Suneffect(polling, db)
Kod: Markera allt
File "./pellmonweb.py", line 131
self.suneffectview = Suneffect(polling, db)
^
IndentationError: unexpected indent
är det nåt javascript som behöver uppdateras?
Edit:
äsch, ett tabbfel, tydligen så ska de inte stå under varandra i min texteditor...
grr)
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
Re: PellMon, pelletlogger med öppen källkod
men det är ju lite märkligt,
kopierade över hela den fungerande pellmon.py från min "testmaster:8082" till "systemimage:8081"
allt fungerar på8081 förutom att felet som var innan jag fick "tabbat" rätt fortfarande är kvar.
besynnerligt vill jag påstå.
edit:
körde ./debugweb i processimage:8081 men den visar inget fel när jag försöker hämta http://minwebsida:8081/suneffectview/consumption
kopierade över hela den fungerande pellmon.py från min "testmaster:8082" till "systemimage:8081"
allt fungerar på8081 förutom att felet som var innan jag fick "tabbat" rätt fortfarande är kvar.
besynnerligt vill jag påstå.
edit:
körde ./debugweb i processimage:8081 men den visar inget fel när jag försöker hämta http://minwebsida:8081/suneffectview/consumption
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
Re: PellMon, pelletlogger med öppen källkod
Att arbeta över putty är ett sätt. Huvudsaken är ju att du hittar ett sätt som fungerar.
Din egen konffil behöver du inte i det här skedet, finns ingen orsak att blanda in owfs och dylikt medan du debuggar dina webbtillägg.
Angående tabbfel och unexpected indent, kan det vara så att du blandar tabbar och mellanslag? Python har ju indrag som blockmarkering istället för {} eller annat, så om du blandar indrag med mellanslag och indrag med tab så hamnar tolken att gissa vad du menar och det blir oftast fel, så använd inga tabbar eller helst använd en editor som ersätter 'tab' med valfritt antal mellanslag.
Ifall du inte får ordning på det så skulle jag rekommendera att du backar tillbaka till en clean master, sedan börjar du lägga till en enda liten grej åt gången och verifiera att det fungerar innan du tar nästa steg. Du måste ju tex inte alls göra dina tillägg i en ny python fil, du kan lika gärna lägga allt i pellmonweb.py för att förenkla. Börja med att returnera 'hello world' från en exponerad funktion i class PellmonWeb och verifiera att du får upp det i webbläsaren. Du kan returnera html direkt från python funktionen så det är inget måste att gå via ett makotemplate, men nästa steg är väl annars att returnera html via ett template, osv.
Din egen konffil behöver du inte i det här skedet, finns ingen orsak att blanda in owfs och dylikt medan du debuggar dina webbtillägg.
Angående tabbfel och unexpected indent, kan det vara så att du blandar tabbar och mellanslag? Python har ju indrag som blockmarkering istället för {} eller annat, så om du blandar indrag med mellanslag och indrag med tab så hamnar tolken att gissa vad du menar och det blir oftast fel, så använd inga tabbar eller helst använd en editor som ersätter 'tab' med valfritt antal mellanslag.
Ifall du inte får ordning på det så skulle jag rekommendera att du backar tillbaka till en clean master, sedan börjar du lägga till en enda liten grej åt gången och verifiera att det fungerar innan du tar nästa steg. Du måste ju tex inte alls göra dina tillägg i en ny python fil, du kan lika gärna lägga allt i pellmonweb.py för att förenkla. Börja med att returnera 'hello world' från en exponerad funktion i class PellmonWeb och verifiera att du får upp det i webbläsaren. Du kan returnera html direkt från python funktionen så det är inget måste att gå via ett makotemplate, men nästa steg är väl annars att returnera html via ett template, osv.
Termax 25Cr med spaksotning, Bio Comfort + lambda + kompressorrengöring, 10m skorsten med 125mm insatsrör. 8t bulkförråd. Matene vertikalskruv. https://github.com/motoz/PellMon open source pelletlogger
Re: PellMon, pelletlogger med öppen källkod
Gott, ska se över tabbarna, vet att det går att ställa in antal steg per tab,
Ser också att den inte är inställd default på utf-8 , kan det också påverka negativt för indragningen eller copy/paste?
Fortsatt lite märkligt att det nu fungerar på master över 8082 men inte systemimage över 8081,
jag får väl börja om...
Ska se om jag kan knyta suneffect till effekt_solpaneler i min master som fungerar,
Edit:
Har du tips om bra editor?
Ska jag köra IDLE?
Ser också att den inte är inställd default på utf-8 , kan det också påverka negativt för indragningen eller copy/paste?
Fortsatt lite märkligt att det nu fungerar på master över 8082 men inte systemimage över 8081,
jag får väl börja om...
Ska se om jag kan knyta suneffect till effekt_solpaneler i min master som fungerar,
Edit:
Har du tips om bra editor?
Ska jag köra IDLE?
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
Re: PellMon, pelletlogger med öppen källkod
Hmm, det fungerar klockrent att lägga till och ändra i pellmonweb.py (exempelvis enligt ovan) när jag kör i master och startar med ./pellmonweb.pyHonda skrev:
För ett 'hello world' test kan du leta uppi src/pellmonweb.pyKod: Markera allt
class PellMonWeb:
och lägga till:och sedan navigera till http://ip.ip.ip.ip:8081/helloworldKod: Markera allt
@cherrypy.expose def helloworld(self, **args): return 'Hello world'
http://ip.ip.ip.ip:8082/helloworld = fungerar
Men när jag ändrar i skarpt läge i min systemimage pellmonweb.py som finns i /usr/local/lib/python2.7***
så slår inga ändringar igenom(inte ens ovanstående) trots att jag "service pellmonweb restart"
http://ip.ip.ip.ip:8081/helloworld = fungerar inte
vad har jag missat, ska det inte gå att ändra på detta viset i "skarpt läge" ??
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
Re: PellMon, pelletlogger med öppen källkod
Ja det ska det. En sak som kan krångla är om du har en pellmonweb-process som hänger upp sig och vägrar dö vid restart, då är porten upptagen då du startar en ny så den nya processen bara dör lugnt och fint och den gamla fortsätter att servera data enligt den gamla koden. 'service restart' är alltså inte helt hundraprocentigt om inte processen vill samarbeta, det är väl såna problem som ska försvinna då systemd ersätter sysv-init. Det har hänt mig ett par gånger då jag har klåpat till något, jag kan för lite om linux själsliv för att kunna beskriva exakt vad som händer men jag har då letat upp processen och dödat den manuellt. Du kör ju en väldigt experimentiell version av pellmon dessutom, så krångel är nog att vänta.
Annars kan du köra från källkods-utcheckningen tills du har allt färdigt och sedan bara installera det med make install. I något skede lönar det sig också att börja använda git, annars blir det enormt jobbigt att ta i bruk nya pellmon-versioner och samtidigt behålla dina egna ändringar. Men git är ett helt kapitel för sig det (eller en hel bok), enormt användbart och ger många möjligheter att skjuta sig själv i foten.
Finns hur många editorer som helst, jag brukar mest använda gedit med ett par plugin.
Annars kan du köra från källkods-utcheckningen tills du har allt färdigt och sedan bara installera det med make install. I något skede lönar det sig också att börja använda git, annars blir det enormt jobbigt att ta i bruk nya pellmon-versioner och samtidigt behålla dina egna ändringar. Men git är ett helt kapitel för sig det (eller en hel bok), enormt användbart och ger många möjligheter att skjuta sig själv i foten.
Finns hur många editorer som helst, jag brukar mest använda gedit med ett par plugin.
Termax 25Cr med spaksotning, Bio Comfort + lambda + kompressorrengöring, 10m skorsten med 125mm insatsrör. 8t bulkförråd. Matene vertikalskruv. https://github.com/motoz/PellMon open source pelletlogger
Re: PellMon, pelletlogger med öppen källkod
Tack!
ska se om jag kan ge mig på och ladda ner "git" och komma igång med det framöver.
Låter bli processimage för en stund (det hjälper inte ens med "kill -9 **** innan omstart)
och ser till att få ordning på mina ideer i masterversionen tillsvidare.
funderar på om stacken kan lösas på detta vis i min "suneffect.py"
samt såhär:
mina DEF finns ju inte i den .conf fil som jag kör mot just nu, men det kanske räcker att gå in och definiera just dessa två conffilen?
ska se om jag kan ge mig på och ladda ner "git" och komma igång med det framöver.
Låter bli processimage för en stund (det hjälper inte ens med "kill -9 **** innan omstart)
och ser till att få ordning på mina ideer i masterversionen tillsvidare.
funderar på om stacken kan lösas på detta vis i min "suneffect.py"
Kod: Markera allt
RrdGraphString1=RrdGraphString1+"DEF:a=%s:pump_running:AVERAGE:end=%u:start=%u DEF:b=%s:effekt_solpaneler:AVERAGE:end=%u:start=%u DEF:b1h=%s:effekt_solpaneler:AVERAGE"%(db,now,now1h-div*bars,db,now,now1h-div*bars,db)
Kod: Markera allt
RrdGraphString1=RrdGraphString1+" CDEF:aa%u=TIME,%u,LE,TIME,%u,GT,a,0,IF,0,IF,b, VDEF:va%u=aa%u,TOTAL CDEF:ca%u=a,POP,va%u CDEF:aaa%u=TIME,%u,LE,TIME,%u,GT,ca%u,0,IF,0,IF,%f,* AREA:aaa%u%s"%(h,end,start,h,h,h,h,h,end,start,h,part,h,"#d6e4e9")
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
Re: PellMon, pelletlogger med öppen källkod
fast å andra sidan så har jag ju inte definierat dem i min rrd.db så det går ju inte hämta varken
pump_running
eller
effekt_solpaneler därifrån
utan det får bli
DEF a: extra9
som den heter i rrd.db
och så får DEF b utgå ur stacken...
typ såhär fast ändå inte, usch vad detta är svårt med dessa beräkningar ;-(
pump_running
eller
effekt_solpaneler därifrån
utan det får bli
DEF a: extra9
som den heter i rrd.db
och så får DEF b utgå ur stacken...
typ såhär fast ändå inte, usch vad detta är svårt med dessa beräkningar ;-(
Kod: Markera allt
RrdGraphString1=RrdGraphString1+"DEF:a=%s:extra9:AVERAGE:end=%u:start=%u"(db,now,now1h-div*bars)
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
Re: PellMon, pelletlogger med öppen källkod
ok, learning by doing,
ett steg fram och ett bak!
får nu felmeddelandet: ERROR: RPN stack underflow
när jag kör denna suneffect.py
vad säger dig detta, du som har ett vant falköga!
ett steg fram och ett bak!
får nu felmeddelandet: ERROR: RPN stack underflow
när jag kör denna suneffect.py
Kod: Markera allt
# -*- coding: utf-8 -*-
"""
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
import os
import os.path
import cherrypy
from cherrypy.lib.static import serve_file, serve_fileobj
from mako.template import Template
from mako.lookup import TemplateLookup
from time import time,localtime
from tempfile import NamedTemporaryFile
import subprocess
lookup = TemplateLookup(directories=[os.path.join(os.path.dirname(__file__), 'html')])
def make_barchart_string(db, end, align, div, bars, out='-', width=440, tot_txt='total', avg_unit='', tot_unit='kg', param=''):
#Build the command string to make a graph from the database
now = int(end)
div = int(div)
now1h=int(align)
# The width passed to rrdtool does not include the sidebars
graphWidth = str(int(width))
consumption_file = out # Output to file 'out'
# Draw one bar:
# CDEF:rate= # compute feeder_time rate * feeder_consumption for selected timespan
# TIME,endtime, LE, # push 1 if TIME is before endtime else push 0
# TIME,starttime, GT, # push 1 if TIME is after starttime else push 0
# feeder_time,0, IF, # push 0 before starttime, push from DEF:feeder_time after starttime
# 0, IF, # push back above result before endtime, then push 0
# the stack now has feeder_time (rate) between starttime and endtime, otherwise zero
# feeder_capacity, *, # Multiply with DEF:feeder_capacity (which is for 360 seconds, and in grams)
# 360000, / # and divide by 360 to get capacity per second, and also by 1000 to get result in kg
# VDEF:tot=rate,TOTAL # tot = integration of the CDEF:rate, ie. get value for consumption between start and endtimes
# CDEF:total= # make a CDEF out of the VDEF:tot value by 'tricking' rrd;
# feeder_time,POP,tot # push from any DEF, pop the values, then push new values from the VDEF
# CDEF:barchart= # and finally...
# TIME,endtime,LE, # where time is between endtime
# TIME,starttime,GT, # and starttime
# total,0,IF, # push calculated total
# 0,IF # else push zero
# AREA:barchart#ffffff" # draw an area below it
# Repeat for every bar
RrdGraphString1="rrdtool graph "+consumption_file+" --border 0 --disable-rrdtool-tag --full-size-mode --width "+graphWidth+" %s --right-axis-format %%1.1lf --height 400 --end %u --start %u-%us "%(param,now,now,div*bars)
RrdGraphString1=RrdGraphString1+"DEF:a=%s:extra9:AVERAGE:"%(db)
h=bars+3
start=(now1h-(bars-1)*div-div)
end=(now1h-(bars-1)*div)
part = 1
RrdGraphString1=RrdGraphString1+" CDEF:aa%u=TIME,%u,LE,TIME,%u,GT,a,0,IF,0,IF, VDEF:va%u=aa%u,TOTAL CDEF:ca%u=a,POP,va%u CDEF:aaa%u=TIME,%u,LE,TIME,%u,GT,ca%u,0,IF,0,IF,%f,* AREA:aaa%u%s"%(h,end,start,h,h,h,h,h,end,start,h,part,h,"#d6e4e9")
h=bars-1
part = 1
start=(now-(bars-1)*div-div)
RrdGraphString1=RrdGraphString1+" CDEF:aa%u=TIME,%u,LE,TIME,%u,GT,a,0,IF,0,IF, VDEF:va%u=aa%u,TOTAL CDEF:ca%u=a,POP,va%u CDEF:aaa%u=TIME,%u,LE,TIME,%u,GT,ca%u,0,IF,0,IF,%f,* AREA:aaa%u%s"%(h,end,start,h,h,h,h,h,end,start,h,part,h,"#d6e4e9")
for h in range(0,bars-1):
start=(now1h-h*div-div)
end=(now1h-h*div)
RrdGraphString1=RrdGraphString1+" CDEF:aa%u=TIME,%u,LE,TIME,%u,GT,a,0,IF,0,IF, VDEF:va%u=aa%u,TOTAL CDEF:ca%u=a,POP,va%u CDEF:aaa%u=TIME,%u,LE,TIME,%u,GT,ca%u,0,IF,0,IF,%f,* AREA:aaa%u%s"%(h,end,start,h,h,h,h,h,end,start,h,part,h,"#d6e4e9")
h=bars+1
start=now1h
end=now
if now-now1h > 120:
part=div/(float(now)-now1h-40)
RrdGraphString1=RrdGraphString1+" CDEF:aa%u=TIME,%u,LE,TIME,%u,GT,a,0,IF,0,IF, VDEF:va%u=aa%u,TOTAL CDEF:ca%u=a,POP,va%u CDEF:aaa%u=TIME,%u,LE,TIME,%u,GT,ca%u,0,IF,0,IF,%f,* AREA:aaa%u%s"%(h,end,start,h,h,h,h,h,end,start,h,part,h,"#d6e4e9")
h=bars+2
RrdGraphString1=RrdGraphString1+" CDEF:aa%u=TIME,%u,LE,TIME,%u,GT,a,0,IF,0,IF, VDEF:va%u=aa%u,TOTAL CDEF:ca%u=a,POP,va%u CDEF:aaa%u=TIME,%u,LE,TIME,%u,GT,ca%u,0,IF,0,IF,%f,* AREA:aaa%u%s"%(h,end,start,h,h,h,h,h,end,start,h,part,h,"#d6e4e9")
RrdGraphString1=RrdGraphString1+" CDEF:cons=a,/ VDEF:tot=cons,TOTAL CDEF:avg=a,POP,tot,%u,/ VDEF:aver=avg,MAXIMUM GPRINT:tot:\"%s %%.1lf %s\" GPRINT:aver:\"average %%.2lf %s\" "%(bars, tot_txt, tot_unit, avg_unit)
return RrdGraphString1
class Suneffect(object):
def __init__(self, polling, db):
self.polling=polling
self.db = db
@cherrypy.expose
def consumption(self):
if not self.polling:
return ""
tmpl = lookup.get_template("consumption.html")
return tmpl.render(username=cherrypy.session.get('_cp_username'))
@cherrypy.expose
def consumption24h(self):
if not self.polling:
return None
now=int(time())
align=now/3600*3600
RrdGraphString = make_barchart_string(self.db, now, align, 3600, 24, '-', 550, '24h consumption', 'kg/h')
cmd = subprocess.Popen(RrdGraphString +"--height 320", shell=True, stdout=subprocess.PIPE)
cherrypy.response.headers['Pragma'] = 'no-cache'
cherrypy.response.headers['Content-Type'] = "image/png"
return cmd.communicate()[0]
@cherrypy.expose
def consumption7d(self):
if not self.polling:
return None
now=int(time())
align=int(now)/86400*86400-(localtime(now).tm_hour-int(now)%86400/3600)*3600
RrdGraphString = make_barchart_string(self.db, now, align, 86400, 7, '-', 550, 'last week', 'kg/day')
cmd = subprocess.Popen(RrdGraphString +"--height 320", shell=True, stdout=subprocess.PIPE)
cherrypy.response.headers['Pragma'] = 'no-cache'
cherrypy.response.headers['Content-Type'] = "image/png"
return cmd.communicate()[0]
@cherrypy.expose
def consumption1m(self):
if not self.polling:
return None
now = int(time())
align=int(now+4*86400)/(86400*7)*(86400*7)-(localtime(now).tm_hour-int(now)%86400/3600)*3600 -4*86400
RrdGraphString = make_barchart_string(self.db, time(), align, 86400*7, 8, '-', 550, 'last two months', 'kg/week')
cmd = subprocess.Popen(RrdGraphString +"--height 320", shell=True, stdout=subprocess.PIPE)
cherrypy.response.headers['Pragma'] = 'no-cache'
cherrypy.response.headers['Content-Type'] = "image/png"
return cmd.communicate()[0]
@cherrypy.expose
def consumption1y(self):
if not self.polling:
return None
now = int(time())
align=now/int(31556952/12)*int(31556952/12)-(localtime(now).tm_hour-int(now)%86400/3600)*3600
RrdGraphString = make_barchart_string(self.db, now, align, 2628000, 12, '-', 550, 'last year', 'kg/month')
cmd = subprocess.Popen(RrdGraphString +"--height 320", shell=True, stdout=subprocess.PIPE)
cherrypy.response.headers['Pragma'] = 'no-cache'
cherrypy.response.headers['Content-Type'] = "image/png"
return cmd.communicate()[0]
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
Re: PellMon, pelletlogger med öppen källkod
Det är den här:
CDEF:cons=a,/
Du försöker dividera 'ingenting' med a, då rrdtool utför '/' så måste det finnas två värden på stacken, nu finns där bara 'a'.
CDEF:cons=a,/
Du försöker dividera 'ingenting' med a, då rrdtool utför '/' så måste det finnas två värden på stacken, nu finns där bara 'a'.
Termax 25Cr med spaksotning, Bio Comfort + lambda + kompressorrengöring, 10m skorsten med 125mm insatsrör. 8t bulkförråd. Matene vertikalskruv. https://github.com/motoz/PellMon open source pelletlogger
Re: PellMon, pelletlogger med öppen källkod
Grymt!
nu är jag en bit på väg, TACK!
nu ska det justeras värden och text i graferna, för nu ser det faktiskt ut att fungera vid en första anblick.
http://minwebsida:8082/suneffectview/consumption
(däremot så tyckte min internetleverantör att jag behövde ny ip adress så det tar väl något dygn innan dns slår igenom ordentligt...)
nu är jag en bit på väg, TACK!
nu ska det justeras värden och text i graferna, för nu ser det faktiskt ut att fungera vid en första anblick.
http://minwebsida:8082/suneffectview/consumption
(däremot så tyckte min internetleverantör att jag behövde ny ip adress så det tar väl något dygn innan dns slår igenom ordentligt...)
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
Re: PellMon, pelletlogger med öppen källkod
om jag nu ska ge mig på att koka ihop en soppa med systemimageversionen i grunden och mina fixade .html samt .py från min "testmaster"
Ska jag ladda ner en ny version av systemimage och helt sonika byta ut respektive lägga till i respektive mapp,
samt lägga till raden:
i den nya pellmonweb.py filen
och därefter installera enligt readme filen?
eller är det bättre att få igång github och skapa ett lokalt repository?
Ska jag ladda ner en ny version av systemimage och helt sonika byta ut respektive lägga till i respektive mapp,
samt lägga till raden:
Kod: Markera allt
self.suneffectview = Suneffect(polling, db)
och därefter installera enligt readme filen?
eller är det bättre att få igång github och skapa ett lokalt repository?
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.