PellMon, pelletlogger med öppen källkod

Skriv svar
bosse123
Stor entusiast!
Inlägg: 174
Blev medlem: tor 07 nov, 2013 22:29
Kontakt:

Re: PellMon, pelletlogger med öppen källkod

Inlägg av bosse123 »

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
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
Användarens profilbild
Honda
Pannrumstomte!
Inlägg: 1191
Blev medlem: fre 14 jan, 2005 11:17
Kontakt:

Re: PellMon, pelletlogger med öppen källkod

Inlägg av Honda »

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?
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
bosse123
Stor entusiast!
Inlägg: 174
Blev medlem: tor 07 nov, 2013 22:29
Kontakt:

Re: PellMon, pelletlogger med öppen källkod

Inlägg av bosse123 »

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
ok,
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.
bosse123
Stor entusiast!
Inlägg: 174
Blev medlem: tor 07 nov, 2013 22:29
Kontakt:

Re: PellMon, pelletlogger med öppen källkod

Inlägg av bosse123 »

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)

Kod: Markera allt

 File "./pellmonweb.py", line 131
    self.suneffectview = Suneffect(polling, db)
    ^
IndentationError: unexpected indent
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)
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
bosse123
Stor entusiast!
Inlägg: 174
Blev medlem: tor 07 nov, 2013 22:29
Kontakt:

Re: PellMon, pelletlogger med öppen källkod

Inlägg av bosse123 »

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
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
Användarens profilbild
Honda
Pannrumstomte!
Inlägg: 1191
Blev medlem: fre 14 jan, 2005 11:17
Kontakt:

Re: PellMon, pelletlogger med öppen källkod

Inlägg av Honda »

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.
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
bosse123
Stor entusiast!
Inlägg: 174
Blev medlem: tor 07 nov, 2013 22:29
Kontakt:

Re: PellMon, pelletlogger med öppen källkod

Inlägg av bosse123 »

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?
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
bosse123
Stor entusiast!
Inlägg: 174
Blev medlem: tor 07 nov, 2013 22:29
Kontakt:

Re: PellMon, pelletlogger med öppen källkod

Inlägg av bosse123 »

Honda skrev:
För ett 'hello world' test kan du leta upp

Kod: Markera allt

class PellMonWeb:
i src/pellmonweb.py
och lägga till:

Kod: Markera allt

    @cherrypy.expose
    def helloworld(self, **args):
        return 'Hello world'
och sedan navigera till http://ip.ip.ip.ip:8081/helloworld

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.py
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.
Användarens profilbild
Honda
Pannrumstomte!
Inlägg: 1191
Blev medlem: fre 14 jan, 2005 11:17
Kontakt:

Re: PellMon, pelletlogger med öppen källkod

Inlägg av Honda »

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.
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
bosse123
Stor entusiast!
Inlägg: 174
Blev medlem: tor 07 nov, 2013 22:29
Kontakt:

Re: PellMon, pelletlogger med öppen källkod

Inlägg av bosse123 »

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"

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)
samt såhär:

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")
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?
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
bosse123
Stor entusiast!
Inlägg: 174
Blev medlem: tor 07 nov, 2013 22:29
Kontakt:

Re: PellMon, pelletlogger med öppen källkod

Inlägg av bosse123 »

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 ;-(

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.
bosse123
Stor entusiast!
Inlägg: 174
Blev medlem: tor 07 nov, 2013 22:29
Kontakt:

Re: PellMon, pelletlogger med öppen källkod

Inlägg av bosse123 »

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

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]

vad säger dig detta, du som har ett vant falköga!
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
Användarens profilbild
Honda
Pannrumstomte!
Inlägg: 1191
Blev medlem: fre 14 jan, 2005 11:17
Kontakt:

Re: PellMon, pelletlogger med öppen källkod

Inlägg av Honda »

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'.
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
bosse123
Stor entusiast!
Inlägg: 174
Blev medlem: tor 07 nov, 2013 22:29
Kontakt:

Re: PellMon, pelletlogger med öppen källkod

Inlägg av bosse123 »

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...)
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
bosse123
Stor entusiast!
Inlägg: 174
Blev medlem: tor 07 nov, 2013 22:29
Kontakt:

Re: PellMon, pelletlogger med öppen källkod

Inlägg av bosse123 »

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:

Kod: Markera allt

self.suneffectview = Suneffect(polling, db)
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?
Viking bio 20 i en vedolux 40, ackumulatortankar och 15m2 solfångare.
Skriv svar