1. $6 Man

    ![We have the technology]({static}/wp-content/uploads/2019/09/IMG_20190928_123512931.jpg)

    ![Agent back in field]({static}/wp-content/uploads/2019/09/IMG_20190928_132551841_HDR.jpg)

    read more
  2. Black Diamond Files 1946 Catalog

    1946 Black Diamond Files Catalog: Nicholson File Company

    [gallery columns="6" size="full" type="square" link="file" ids="2021,2022,2023,2024,2025,2030,2029,2028,2027,2026,2031,2032,2033,2034,2035,2040,2039,2038,2037,2036,2041,2042,2043,2044,2045,2050,2049,2048,2047,2046,2051,2052,2053,2054,2055,2060,2059,2058,2057,2056,2061,2062,2063,2064,2065,2070,2069,2068,2067,2066,2071,2072,2073,2074,2075,2076,2077,2078,2079,2081,2085,2084,2083,2082,2080,2086,2087,2088,2089,2090"]

    read more
  3. Stump Anvil - Sawyer Type?

    Great early Stump Anvil.  Came out of a logging camp in Maine.  Basically a portable anvil, shop made, that was used on logging sites.  Fell a tree, hollow the stump to accept the hardy-esque end and use in on site until you move on.

    [gallery link="file" ids="2012,2011,2010"]

    read more
  4. Baldor 1/3HP Grinder - Done Enough

    Finished up the Baldor Model 610 - Not typically my style to paint but it was far enough gone that it needed it. Fun little project - going to start working on cleaning up a older Rockwell Double Carbide Grinder Soon .. actually underway but will post some pics shortly.

    [gallery columns="2" link="file" size="medium" ids="1931,1925,1924,1926"]

    read more
  5. RaspberryPi on AWS IoT - MQTT simple PubSub Example

    Simple RaspberryPi B+ with BMP180 and LED on GPIO22 for demonstration of AWS/IOT with MQTT.  The following code was modified from the Connecting your RaspberryPi to AWS IoT tutorial.

    '''
    /*
     * Copyright 2010-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
     *
     * Licensed under the Apache License, Version 2.0 (the "License").
     * You may not use this file except in compliance with the License.
     * A copy of the License is located at
     *
     *  http://aws.amazon.com/apache2.0
     *
     * or in the "license" file accompanying this file. This file is distributed
     * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     * express or implied. See the License for the specific language governing
     * permissions and limitations under the License.
     */
     '''
    
    from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
    import logging
    import time
    import argparse
    import json
    
    #import for GPIO Usage on RaspberryPi
    import RPi.GPIO as GPIO
    #Pins for LED Example
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(22,GPIO.OUT)
    
    # Import / Setup  BMP Sensor 
    import Adafruit_BMP.BMP085 as BMP085
    sensor = BMP085.BMP085()
    
    AllowedActions = ['both', 'publish', 'subscribe']
    
    # Custom MQTT message callback 
    # Added Temp info from BMP Sensor and logic to turn on/off led
    # when temp above 20.2C 
    def customCallback(client, userdata, message):
        print("Received a new message: ")
        print(message.payload)
        Mytemp = json.loads(message.payload)
        print("MY TEMP IN THE OFFICE: ")
        print (Mytemp['Temp'])
        if (Mytemp['Temp'] > 20.2):
            GPIO.output(22,1)
        else:
            GPIO.output(22,0)
    
        print("from topic: ")
        print(message.topic)
        print("--------------\n\n")
    
    # Read in command-line parameters
    parser = argparse.ArgumentParser()
    parser.add_argument("-e", "--endpoint", action="store", required=True, dest="host", help="Your AWS IoT custom endpoint")
    parser.add_argument("-r", "--rootCA", action="store", required=True, dest="rootCAPath", help="Root CA file path")
    parser.add_argument("-c", "--cert", action="store", dest="certificatePath", help="Certificate file path")
    parser.add_argument("-k", "--key", action="store", dest="privateKeyPath", help="Private key file path")
    parser.add_argument("-p", "--port", action="store", dest="port", type=int, help="Port number override")
    parser.add_argument("-w", "--websocket", action="store_true", dest="useWebsocket", default=False,
                        help="Use MQTT over WebSocket")
    parser.add_argument("-id", "--clientId", action="store", dest="clientId", default="basicPubSub",
                        help="Targeted client id")
    parser.add_argument("-t", "--topic", action="store", dest="topic", default="sdk/test/Python", help="Targeted topic")
    parser.add_argument("-m", "--mode", action="store", dest="mode", default="both",
                        help="Operation modes: %s"%str(AllowedActions))
    parser.add_argument("-M", "--message", action="store", dest="message", default="Hello World!",
                        help="Message to publish")
    
    args = parser.parse_args()
    host = args.host
    rootCAPath = args.rootCAPath
    certificatePath = args.certificatePath
    privateKeyPath = args.privateKeyPath
    port = args.port
    useWebsocket = args.useWebsocket
    clientId = args.clientId
    topic = args.topic
    
    if args.mode not in AllowedActions:
        parser.error("Unknown --mode option %s. Must be one of %s" % (args.mode, str(AllowedActions)))
        exit(2)
    
    if args.useWebsocket and args.certificatePath and args.privateKeyPath:
        parser.error("X.509 cert authentication and WebSocket are mutual exclusive. Please pick one.")
        exit(2)
    
    if not args.useWebsocket and (not args.certificatePath or not args.privateKeyPath):
        parser.error("Missing credentials for authentication.")
        exit(2)
    
    # Port defaults
    if args.useWebsocket and not args.port:  # When no port override for WebSocket, default to 443
        port = 443
    if not args.useWebsocket and not args.port:  # When no port override for non-WebSocket, default to 8883
        port = 8883
    
    # Configure logging
    logger = logging.getLogger("AWSIoTPythonSDK.core")
    logger.setLevel(logging.DEBUG)
    streamHandler = logging.StreamHandler()
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    streamHandler.setFormatter(formatter)
    logger.addHandler(streamHandler)
    
    # Init AWSIoTMQTTClient
    myAWSIoTMQTTClient = None
    if useWebsocket:
        myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId, useWebsocket=True)
        myAWSIoTMQTTClient.configureEndpoint(host, port)
        myAWSIoTMQTTClient.configureCredentials(rootCAPath)
    else:
        myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId)
        myAWSIoTMQTTClient.configureEndpoint(host, port)
        myAWSIoTMQTTClient.configureCredentials(rootCAPath, privateKeyPath, certificatePath)
    
    # AWSIoTMQTTClient connection configuration
    myAWSIoTMQTTClient.configureAutoReconnectBackoffTime(1, 32, 20)
    myAWSIoTMQTTClient.configureOfflinePublishQueueing(-1)  # Infinite offline Publish queueing
    myAWSIoTMQTTClient.configureDrainingFrequency(2)  # Draining: 2 Hz
    myAWSIoTMQTTClient.configureConnectDisconnectTimeout(10)  # 10 sec
    myAWSIoTMQTTClient.configureMQTTOperationTimeout(5)  # 5 sec
    
    # Connect and subscribe to AWS IoT
    myAWSIoTMQTTClient.connect()
    if args.mode == 'both' or args.mode == 'subscribe':
        myAWSIoTMQTTClient.subscribe(topic, 1, customCallback)
    time.sleep(2)
    
    # Publish to the same topic in a loop forever
    loopCount = 10
    while True:
    
        Temp = sensor.read_temperature()
        print ("TEMP: " + str(Temp))
        if args.mode == 'both' or args.mode == 'publish':
            message = {}
            message['Temp'] = Temp
            message['sequence'] = loopCount
            messageJson = json.dumps(message)
            myAWSIoTMQTTClient.publish(topic, messageJson, 1)
            if args.mode == 'publish':
                print('Published topic %s: %s\n' % (topic, messageJson))
            loopCount += 1
        time.sleep(2) 
    
    python basicPubSub.py -e YOURAWSIOTSHADOW.us-east-1.amazonaws.com -r root-CA.crt -c MyRasp.cert.pem -k MyRasp.private.key
    

    I am still learning the AWS IoT basics and have posted this as a reminder to myself as to how it got setup. I planned on refining this into tutorial but really did not see the need as the AWS Samples are pretty good. Connecting your RaspberryPi to AWS IoT  is your best place to start.

    read more
  6. American Beauty 3125 Soldering Iron

    Found this soldering iron while organizing the shop.  Not sure where/when I got it.  Must have been an auction box lot.  Looked it up and found American Beauty is still going strong.  Was able to pickup some replacement tips and set screws (yes, could have got those anywhere but was too easy not to order them with the tips).

    It heats up great and really gets the job done.  Posted a few pics of some initial tinning.  Certainly an industrial / production type iron, no bells and whistles, not even a switch.  Going to try tinning some thin cable (bicycle - brake and shift).

    [gallery columns="4" link="file" ids="1936,1938,1935,1937,1933,1940,1939,1934"]

    read more
  7. Baldor 1/3 hp Bench Grinder Cleanup

    The recent Foley Belt Sander/Grinder went so well I could not help myself.  Eyed this one from the roadside at local residence close to home.  Been exposed to the weather for almost too long.  Plugged her in and she fired right up and in classic Baldor form took 10 minutes to stop spinning after turning off.  Was not going to re-paint but now I am in deep so what the heck.  Came apart relatively easily (nice to work on quality products).  Missing side covers - may have to make some or deal without.

    [gallery size="medium" link="file" ids="1868,1871,1876,1874,1869,1875,1873,1870,1872,1890,1892,1895,1894,1893"]

    read more
  8. Foley Belt Sander Grinder Model 371

    Nifty little 1x42Belt Grinder/Sander made by Rockwell for Foley.  It is basically the same as the Rockwell 31-350.  Freebie from a barn clean-out (Thanks MB!).  Took some scouting around for replacement wheels but alas a shout out to James Liechty (jimliechty@yahoo.com) who has sourced replacement pulleys and other parts for these and offers them at very reasonable prices.

    Took her apart, cleaned up all the saw dust cake, installed new wheels for sanding belts, replaced one v-belt pulley, replaced the power cord (not done yet) and that was pretty much it. My initial thoughts when it showed up were it was pretty flimsy construction and the plastic wheels made me skeptical but all those thoughts have passed now that it is up and running.  Runs great, hit a few pieces of metal with it, no problem.

    ![Refurbish Complete]({static}/wp-content/uploads/2018/07/img_20180731_0705322773755278533459340274-768x1024.jpg)

    Refurbish Complete

    ![Manual]({static}/wp-content/uploads/2018/07/RockwellBelt.jpg)

    Manual

    [gallery link="file" ids="1855,1847,1845,1842,1852,1846,1849,1841,1838,1839,1851,1843,1850,1856,1854,1853,1848,1862"]

    read more

links

social