Updates from July, 2021 Toggle Comment Threads | Keyboard Shortcuts

  • ThomasPowell 2:20 pm on July 18, 2021 Permalink | Reply
    Tags: , emulators, retro,   

    Saving your work on the Model 16 in TRSDOS-II and BASIC/BASICG 

    (This is emulating the Model 16 using the trs80gp emulator and saving/load from virtual disk.)

    Setting up a fresh disk

    If you’re already in BASIC, just open another trs80gp emulator to create the new disk first.

    • Insert a new disk by going to Diskette -> :1 <empty> -> <<unformatted dmk>>
    • FORMAT 1 and “Y” when asked to Continue?
    Formatting progress
    • Once formatting completes select Diskette -> :1 * <<unformatted>> -> Export… -> [fill out “File name:” field] -> [Save]
    • Now load the saved disk with Diskette -> :1 * <<unformatted>> -> Replace… -> [select the disk file you just created] -> [Open]
    • DIR 1 should show the empty disk in drive 1

    Saving your work

    • Compose your program in BASIC or BASICG (graphics BASIC)
    • The filespec of TRSDOS-II files is filename/ext.password:drive_number (if you’re used to DOS 8.3 names or Windows, your habitual “extension” would be a “password” in TRSDOS-II)
    • To save a program named “COS” with a “BAS” extension on Drive 1, type SAVE "COS/BAS:1"
    • SYSTEM to exit basic.
    • DIR 1 should should the directory of your disk with the COS/BAS showing. In my example below, I also tried to save “COS.BAS” which is actually “COS” with a password of “BAS”
    Model 16 TRSDOS
    DIR command output on the Model 16

    Loading your work

    • You can PRINT or DUMP your saved file with the COS/BAS filespec as before, but it will be a somewhat binary output and not plain text like you might expect from modern programming language files.
    • Ultimately, you will have to go back to BASIC to reload with the same filespec (LOAD "COS/BAS:1“)


  • ThomasPowell 7:02 pm on July 14, 2021 Permalink | Reply
    Tags: analysis, electricity,   

    Is Solar Worth the Expense in the Florida Panhandle or a Waste of $20,000 or more? 

    If you’re considering solar, you can find solar installers via EnergySage (referral link) and get a $25 Amazon Gift Card when you go solar. I found the installer that we ultimately used, which was a lot better option than using one of the many door-to-door solicitors that show up in the neighborhood.

    Perspective on our Placement for Solar

    Our house is in Cantonment, FL, which is at 30.6°N latitude. If you’ve been to the Florida beaches in early spring after spending the winter somewhere [reasonably north of Florida], your skin is well aware of how much more intense the sun is. Aside from cities in Florida, only San Antonio, Austin, and Houston in Texas, New Orleans in Louisiana, and Mobile in Alabama are further south than we are.

    The back roof of our house also points pretty much due south, and as you can see, the south panels are the most productive for solar generation through the day:

    solar array layout and production
    Lifetime energy generation after about 4 years, per panel.

    Specs on our system

    We have 48 290W panels with micro inverters on each panel so that each panel is monitorable. They were definitely more expensive this way and based on outage turnaround time that prompted me to write a script to monitor, it would probably cost $200-400 worth of lost production waiting to fix the problem. Given that that’s about 1% of the cost of the solar array and the price differential was easily 10-20% the extra “observability” into individual panels seems to be too steep a premium (but the more traditional panels also had the aluminum storm door look versus the fancy new ones!)

    We also have a solar collector for hot water (that also requires that we stick with electric for the water heater.) The tank is 80 gallons, with half of the tank always heated by electric as a backup. The solar collector will heat up the other half by circulating to between the tank and the roof.

    Unlike the photovoltaic panels, the solar part of the water heater doesn’t produce usable hot water on its own in the winter months. It will, however, warm up enough during the day to assist in heating by supplying 80-90℉ water to the electric side. This will be offset by the fact that if it gets near or below freezing, the water in the tank has to circulate to the collector on the roof so that it doesn’t freeze. That’s not a huge problem in the winter here, because it collects enough warm water on those days to get through the night… but for places that get significant snows *plus* power outages, that could be a recipe for disaster.


    At the time, our install was financed at 100%, with the option of either financing it all at a high single digit rate or 30% down via 12 months same as cash in anticipation of the tax credit money and 70% on a 12 year loan at low single digit APR. The full financing at the higher rate was pretty much like borrowing money on your future utility bills at a high interest rate in order to keep the tax credit.

    87% of the solar loan we have goes to paying off the solar panels (vs. the water heater), so about $235/month.

    Return on Investment

    Energy Generation Report

    According to our energy bills, the charge for electricity is about $0.14/kWh. This includes fees that move up and down in more of a step-like manner, but not fixed charges. At 18MWh/year of solar energy that means we’re generating about $210/month in electricity vs. the $235/month solar panel costs for the 12 year loan. There are two things to keep in mind: First, the payments only last 12 years, but the solar panels are supposed to be generating solar energy at at least 80% efficiency for 20. Second, the return on investment improves if the price of energy increases faster than the efficiency of the cells decays.

    Update: With latest FP&L rates, at >$0.16/kWH, our power generation is now offsetting over $240/month in FP&L bills and making the cost of a solar panel much more attractive,


    A solar installation is not a no brainer. If you want to do it for the environment, that might put you over the top in terms of return on investment. The solar water heater (left out of this post) is a lot harder to measure, but you probably want to live in a place that doesn’t get near freezing in the winter.

  • ThomasPowell 9:06 pm on July 13, 2021 Permalink | Reply
    Tags: envoy solar, , raspberrypi, ,   

    Enphase Envoy Solar Array monitoring with a Raspberry Pi to Save $100 or More from Downtime 

    The need for an Enphase Envoy Solar monitor

    I decided to set up an Envoy solar panel monitoring system for my solar installation after a fuse and the breaker panel broke down leaving me without solar generation for a couple stretches during near-peak, up to about 1,400 kWh, or about $140-210 worth of solar generation. Here’s the output of the Enphase Envoy Solar report:

    solar output from the envoy monitor
    Missing output

    Monitor Components (physical and software)

    • A RaspberryPi Zero W on the same wireless network as the Envoy controller was set up on (initially used PiBakery to configure hostname/wifi/username/password, but the project is a little bit stale at this point).
    • A Nexmo account (part of Vonage APIs now) to allow for SMS alerts on zero output when the sun is up.
    • RubySunrise for only emailing alerts from dusk until dawn.
    • Ruby Gmail and a Gmail account for email informational “down” alerts just to be aware that the cron job is running.
    • cron and gmail

    Connections and Configuration for the Raspberry Pi Script

    These are described in the source code repo as well

    • ENVOY_HOST for me was envoy.local, but depending on your DNS situation, your mileage may vary. I got my local DNS in a weird enough state that I just looked up the envoy.local IP on my wireless router’s status page and used that.
    • USERNAME and PASSWORD are the Gmail username and app-specific password credentials I generated for the gmail account I used.
    • INVERTER_COUNT is compared to the number of inverters you should have so that even if the array is producing, you can still generate an error if one of them isn’t reporting (only valid when producing)
    • LATITUDE and LONGITUDE plucked from a site that displays your geolocation… this, along with your TZ represented in a form within the TZInfo::Timezone list, and RubySunrise allow you to figure out if the sun’s up.
    • NEXMO* are api keys and config from the Nexmo site (NEXMO_SMS_TO is your personal mobile to alert to)
    • TO_EMAIL is the email to actually mail to

    Code for the Raspberry Pi Solar Monitor script

    .config must be of the form that follows but the rest of the code can be cloned from envoy-rpi-zero-monitor

        PASSWORD='[email protected]@$$w0rd'
        TO_EMAIL='[email protected]'
    # crontab runs every hours and inits rbenv to use the right ruby version because
    # I didn't really care about "production readiness"... it's a Raspberry Pi Zero W
    0 * * * * cd /home/twill/envoy-rpi-zero-monitor && eval "$(rbenv init -)" && ruby read-envoy.rb

    This is specific to building for the Enlighten Envoy

    This all depends on having an Enphase Enlighten Envoy (and a bunch of other random “E” names) as your solar monitor, but if you have a relatively recent solar install and your technician needed to configure the monitor for your wifi, then you probably have a similar device with a pollable endpoint. Look at your wireless router’s web console and you’ll see that monitor:

    If you browse to that name or the IP address associated, you’ll probably get a web page with status. If you reload with the network tab up, you’ll probably see it retrieve the data via a .json endpoint. Fortunately there is no envoy solar login for the data collector at envoy.local for my system, so the data can be accessed directly via that json, and there was no need for an Enphase Envoy manual.

    From there, you can build your own monitor around it.

Compose new post
Next post/Next comment
Previous post/Previous comment
Show/Hide comments
Go to top
Go to login
Show/Hide help
shift + esc
%d bloggers like this: